/*
- * Copyright © 2019 Damyan Ivanov.
+ * Copyright © 2020 Damyan Ivanov.
* This file is part of MoLe.
* MoLe is free software: you can distribute it and/or modify it
* under the term of the GNU General Public License as published by
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
-import android.widget.Toast;
+import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
+import com.google.android.material.snackbar.Snackbar;
import net.ktnx.mobileledger.R;
import net.ktnx.mobileledger.async.DbOpQueue;
}
barDrawerToggle.syncState();
- TextView ver = drawer.findViewById(R.id.drawer_version_text);
-
try {
PackageInfo pi = getApplicationContext().getPackageManager()
.getPackageInfo(getPackageName(), 0);
- ver.setText(pi.versionName);
+ ((TextView) findViewById(R.id.nav_upper).findViewById(
+ R.id.drawer_version_text)).setText(pi.versionName);
+ ((TextView) findViewById(R.id.no_profiles_layout).findViewById(
+ R.id.drawer_version_text)).setText(pi.versionName);
}
catch (Exception e) {
e.printStackTrace();
(v) -> mProfileListAdapter.flipEditingProfiles());
if (drawerListener == null) {
drawerListener = new DrawerLayout.SimpleDrawerListener() {
+ @Override
+ public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
+ if (slideOffset > 0.2)
+ fabHide();
+ }
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
mProfileListAdapter.setAnimationsEnabled(false);
mProfileListAdapter.editingProfiles.setValue(false);
+ Data.drawerOpen.setValue(false);
+ fabShouldShow();
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
mProfileListAdapter.setAnimationsEnabled(true);
+ Data.drawerOpen.setValue(true);
+ fabHide();
}
};
drawer.addDrawerListener(drawerListener);
}
- setupProfile();
+
+ Data.drawerOpen.observe(this, open -> {
+ if (open)
+ drawer.open();
+ else
+ drawer.close();
+ });
}
private void scheduleDataRetrievalIfStale(Date lastUpdate) {
long now = new Date().getTime();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1)
return;
+ ShortcutManager sm = getSystemService(ShortcutManager.class);
List<ShortcutInfo> shortcuts = new ArrayList<>();
int i = 0;
for (MobileLedgerProfile p : list) {
+ if (shortcuts.size() >= sm.getMaxShortcutCountPerActivity())
+ break;
+
if (!p.isPostingPermitted())
continue;
- ShortcutInfo si =
- new ShortcutInfo.Builder(this, "new_transaction_" + p.getUuid()).setShortLabel(
- p.getName())
- .setIcon(
- Icon.createWithResource(
- this,
- R.drawable.svg_thick_plus_white))
- .setIntent(
- new Intent(
- Intent.ACTION_VIEW,
- null,
- this,
- NewTransactionActivity.class).putExtra(
- "profile_uuid",
- p.getUuid()))
- .setRank(i)
- .build();
+ final ShortcutInfo.Builder builder =
+ new ShortcutInfo.Builder(this, "new_transaction_" + p.getUuid());
+ ShortcutInfo si = builder.setShortLabel(p.getName())
+ .setIcon(Icon.createWithResource(this,
+ R.drawable.thick_plus_icon))
+ .setIntent(new Intent(Intent.ACTION_VIEW, null, this,
+ NewTransactionActivity.class).putExtra("profile_uuid",
+ p.getUuid()))
+ .setRank(i)
+ .build();
shortcuts.add(si);
i++;
}
- ShortcutManager sm = getSystemService(ShortcutManager.class);
sm.setDynamicShortcuts(shortcuts);
}
private void onProfileListChanged(List<MobileLedgerProfile> newList) {
// profiles not yet loaded from DB
findViewById(R.id.loading_layout).setVisibility(View.VISIBLE);
findViewById(R.id.no_profiles_layout).setVisibility(View.GONE);
- findViewById(R.id.pager_layout).setVisibility(View.GONE);
+ findViewById(R.id.main_app_layout).setVisibility(View.GONE);
return;
}
if (newList.isEmpty()) {
findViewById(R.id.no_profiles_layout).setVisibility(View.VISIBLE);
- findViewById(R.id.pager_layout).setVisibility(View.GONE);
+ findViewById(R.id.main_app_layout).setVisibility(View.GONE);
findViewById(R.id.loading_layout).setVisibility(View.GONE);
return;
}
- findViewById(R.id.pager_layout).setVisibility(View.VISIBLE);
+ findViewById(R.id.main_app_layout).setVisibility(View.VISIBLE);
findViewById(R.id.no_profiles_layout).setVisibility(View.GONE);
findViewById(R.id.loading_layout).setVisibility(View.GONE);
*/
private void onProfileChanged(MobileLedgerProfile profile) {
boolean haveProfile = profile != null;
- findViewById(R.id.no_profiles_layout).setVisibility(haveProfile ? View.GONE : View.VISIBLE);
- findViewById(R.id.pager_layout).setVisibility(haveProfile ? View.VISIBLE : View.VISIBLE);
if (haveProfile)
setTitle(profile.getName());
this.profile = profile;
- mProfileListAdapter.notifyDataSetChanged();
-
- int newProfileTheme = haveProfile ? profile.getThemeId() : -1;
+ int newProfileTheme = haveProfile ? profile.getThemeHue() : -1;
if (newProfileTheme != Colors.profileThemeId) {
debug("profiles",
String.format(Locale.ENGLISH, "profile theme %d → %d", Colors.profileThemeId,
newProfileTheme));
- MainActivity.this.profileThemeChanged();
Colors.profileThemeId = newProfileTheme;
+ profileThemeChanged();
// profileThemeChanged would restart the activity, so no need to reload the
// data sets below
return;
}
- drawer.closeDrawers();
+ findViewById(R.id.no_profiles_layout).setVisibility(haveProfile ? View.GONE : View.VISIBLE);
+ findViewById(R.id.pager_layout).setVisibility(haveProfile ? View.VISIBLE : View.VISIBLE);
+
+ mProfileListAdapter.notifyDataSetChanged();
Data.transactions.clear();
debug("transactions", "requesting list reload");
fab.show();
}
else {
- mToolbar.setSubtitle(R.string.profile_subitlte_read_only);
+ mToolbar.setSubtitle(R.string.profile_subtitle_read_only);
fab.hide();
}
}
scheduleDataRetrievalIfStale(newValue);
}
private void profileThemeChanged() {
- Bundle bundle = new Bundle();
- onSaveInstanceState(bundle);
-
- storeThemeIdInPrefs(profile.getThemeId());
-
- // restart activity to reflect theme change
- finish();
+ storeThemeIdInPrefs(profile.getThemeHue());
// un-hook all observed LiveData
Data.profile.removeObservers(this);
Data.profiles.removeObservers(this);
Data.lastUpdateDate.removeObservers(this);
- Intent intent = new Intent(this, this.getClass());
- intent.putExtra(BUNDLE_SAVED_STATE, bundle);
- startActivity(intent);
+
+ recreate();
}
private void storeThemeIdInPrefs(int themeId) {
// store the new theme id in the preferences
startActivity(intent);
overridePendingTransition(R.anim.slide_in_up, R.anim.dummy);
}
- public void navSettingsClicked(View view) {
- Intent intent = new Intent(this, SettingsActivity.class);
- startActivity(intent);
- drawer.closeDrawers();
- }
public void markDrawerItemCurrent(int id) {
TextView item = drawer.findViewById(id);
item.setBackgroundColor(Colors.tableRowDarkBG);
TransactionListViewModel.scheduleTransactionListReload();
}
else
- Toast.makeText(this, error, Toast.LENGTH_LONG)
- .show();
+ Snackbar.make(mViewPager, error, Snackbar.LENGTH_LONG)
+ .show();
}
public void onRetrieveStart() {
ProgressBar progressBar = findViewById(R.id.transaction_list_progress_bar);
}
}
public void fabShouldShow() {
- if ((profile != null) && profile.isPostingPermitted())
+ if ((profile != null) && profile.isPostingPermitted() && !drawer.isOpen())
fab.show();
+ else
+ fabHide();
}
public void fabHide() {
fab.hide();
}
public void onAccountSummaryRowViewClicked(View view) {
ViewGroup row;
- if (view.getId() == R.id.account_expander)
- row = (ViewGroup) view.getParent()
- .getParent();
- else
- row = (ViewGroup) view.getParent();
+ switch (view.getId()) {
+ case R.id.account_expander:
+ row = (ViewGroup) view.getParent()
+ .getParent()
+ .getParent();
+ break;
+ case R.id.account_expander_container:
+ case R.id.account_row_acc_name:
+ row = (ViewGroup) view.getParent()
+ .getParent();
+ break;
+ default:
+ row = (ViewGroup) view.getParent();
+ break;
+ }
LedgerAccount acc = (LedgerAccount) row.getTag();
switch (view.getId()) {