Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
- profileObserver = (o, arg) -> {
- MobileLedgerProfile profile = Data.profile.get();
- MainActivity.this.runOnUiThread(() -> {
- if (profile == null) MainActivity.this.setTitle(R.string.app_name);
- else MainActivity.this.setTitle(profile.getName());
- MainActivity.this.updateLastUpdateTextFromDB();
- if (profile.isPostingPermitted()) {
- toolbar.setSubtitle(null);
- fab.show();
- }
- else {
- toolbar.setSubtitle(R.string.profile_subitlte_read_only);
- fab.hide();
- }
-
- int old_index = -1;
- int new_index = -1;
- if (arg != null) {
- MobileLedgerProfile old = (MobileLedgerProfile) arg;
- old_index = Data.getProfileIndex(old);
- new_index = Data.getProfileIndex(profile);
- }
-
- if ((old_index != -1) && (new_index != -1)) {
- mProfileListAdapter.notifyItemChanged(old_index);
- mProfileListAdapter.notifyItemChanged(new_index);
- }
- else mProfileListAdapter.notifyDataSetChanged();
-
- MainActivity.this.collapseProfileList();
-
- int newProfileTheme = profile.getThemeId();
- if (newProfileTheme != Colors.profileThemeId) {
- Log.d("profiles", String.format("profile theme %d → %d", Colors.profileThemeId,
- newProfileTheme));
- MainActivity.this.profileThemeChanged();
- Colors.profileThemeId = newProfileTheme;
- }
- else drawer.closeDrawers();
+ if (profileObserver == null) {
+ profileObserver = (o, arg) -> {
+ MobileLedgerProfile profile = Data.profile.get();
+ MainActivity.this.runOnUiThread(() -> {
+
+ Data.transactions.clear();
+ Log.d("transactions", "requesting list reload");
+ TransactionListViewModel.scheduleTransactionListReload();
+
+ Data.accounts.clear();
+ AccountSummaryViewModel.scheduleAccountListReload();
+
+ if (profile == null) MainActivity.this.setTitle(R.string.app_name);
+ else MainActivity.this.setTitle(profile.getName());
+ MainActivity.this.updateLastUpdateTextFromDB();
+ int old_index = -1;
+ int new_index = -1;
+ if (arg != null) {
+ MobileLedgerProfile old = (MobileLedgerProfile) arg;
+ old_index = Data.getProfileIndex(old);
+ new_index = Data.getProfileIndex(profile);
+ }
- Log.d("transactions", "requesting list reload");
- TransactionListViewModel.scheduleTransactionListReload();
+ if ((old_index != -1) && (new_index != -1)) {
+ mProfileListAdapter.notifyItemChanged(old_index);
+ mProfileListAdapter.notifyItemChanged(new_index);
+ }
+ else mProfileListAdapter.notifyDataSetChanged();
+
+ MainActivity.this.collapseProfileList();
+
+ int newProfileTheme = (profile == null) ? -1 : profile.getThemeId();
+ if (newProfileTheme != Colors.profileThemeId) {
+ Log.d("profiles",
+ String.format("profile theme %d → %d", Colors.profileThemeId,
+ newProfileTheme));
+ MainActivity.this.profileThemeChanged();
+ Colors.profileThemeId = newProfileTheme;
+ // profileThemeChanged would restart the activity, so no need to reload the
+ // data sets below
+ return;
+ }
+ drawer.closeDrawers();
- AccountSummaryViewModel.scheduleAccountListReload();
+ if (profile == null) {
+ toolbar.setSubtitle(null);
+ fab.hide();
+ }
+ else {
+ if (profile.isPostingPermitted()) {
+ toolbar.setSubtitle(null);
+ fab.show();
+ }
+ else {
+ toolbar.setSubtitle(R.string.profile_subitlte_read_only);
+ fab.hide();
+ }
+ }
+ });
+ };
+ Data.profile.addObserver(profileObserver);
+ }
- });
- };
- Data.profile.addObserver(profileObserver);
- profilesObserver = (o, arg) -> {
- findViewById(R.id.nav_profile_list).setMinimumHeight(
- (int) (getResources().getDimension(R.dimen.thumb_row_height) *
- Data.profiles.size()));
-
- Log.d("profiles", "profile list changed");
- if (arg == null) mProfileListAdapter.notifyDataSetChanged();
- else mProfileListAdapter.notifyItemChanged((int) arg);
- };
- Data.profiles.addObserver(profilesObserver);
+ if (profilesObserver == null) {
+ profilesObserver = (o, arg) -> {
+ findViewById(R.id.nav_profile_list).setMinimumHeight(
+ (int) (getResources().getDimension(R.dimen.thumb_row_height) *
+ Data.profiles.size()));
+
+ Log.d("profiles", "profile list changed");
+ if (arg == null) mProfileListAdapter.notifyDataSetChanged();
+ else mProfileListAdapter.notifyItemChanged((int) arg);
+ };
+ Data.profiles.addObserver(profilesObserver);
+ }
ActionBarDrawerToggle toggle =
new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open,
Log.d("main", String.format("Date formatted: %s", text));
}
}
+ @Override
+ public void finish() {
+ if (profilesObserver != null) {
+ Data.profiles.deleteObserver(profilesObserver);
+ profilesObserver = null;
+ }
+
+ if (profileObserver != null) {
+ Data.profile.deleteObserver(profileObserver);
+ profileObserver = null;
+ }
+
+ super.finish();
+ }
private void profileThemeChanged() {
setupProfileColors();
String profileUUID = MLDB.getOption(MLDB.OPT_PROFILE_UUID, null);
MobileLedgerProfile profile;
- profile = MobileLedgerProfile.loadAllFromDB(profileUUID);
+ if (Data.profiles.isEmpty()) {
+ profile = MobileLedgerProfile.loadAllFromDB(profileUUID);
+ }
+ else {
+ try(LockHolder lh = Data.profiles.lockForReading()) {
+ int i = Data.getProfileIndex(profileUUID);
+ if (i == -1 ) i = 0;
+ profile = Data.profiles.get(i);
+ }
+ }
if (Data.profiles.isEmpty()) {
findViewById(R.id.no_profiles_layout).setVisibility(View.VISIBLE);
setupTheme(activity, profile);
}
public static void setupTheme(Activity activity, MobileLedgerProfile profile) {
- if (profile != null) {
- final int themeId = profile.getThemeId();
- switch (themeId) {
- case 0:
- case 360:
- activity.setTheme(R.style.AppTheme_NoActionBar_0);
- break;
- case 15:
- activity.setTheme(R.style.AppTheme_NoActionBar_15);
- break;
- case 30:
- activity.setTheme(R.style.AppTheme_NoActionBar_30);
- break;
- case 45:
- activity.setTheme(R.style.AppTheme_NoActionBar_45);
- break;
- case 60:
- activity.setTheme(R.style.AppTheme_NoActionBar_60);
- break;
- case 75:
- activity.setTheme(R.style.AppTheme_NoActionBar_75);
- break;
- case 90:
- activity.setTheme(R.style.AppTheme_NoActionBar_90);
- break;
- case 105:
- activity.setTheme(R.style.AppTheme_NoActionBar_105);
- break;
- case 120:
- activity.setTheme(R.style.AppTheme_NoActionBar_120);
- break;
- case 135:
- activity.setTheme(R.style.AppTheme_NoActionBar_135);
- break;
- case 150:
- activity.setTheme(R.style.AppTheme_NoActionBar_150);
- break;
- case 165:
- activity.setTheme(R.style.AppTheme_NoActionBar_165);
- break;
- case 180:
- activity.setTheme(R.style.AppTheme_NoActionBar_180);
- break;
- case 195:
- activity.setTheme(R.style.AppTheme_NoActionBar_195);
- break;
- case 210:
- activity.setTheme(R.style.AppTheme_NoActionBar_210);
- break;
- case 225:
- activity.setTheme(R.style.AppTheme_NoActionBar_225);
- break;
- case 240:
- activity.setTheme(R.style.AppTheme_NoActionBar_240);
- break;
- case 255:
- activity.setTheme(R.style.AppTheme_NoActionBar_255);
- break;
- case 270:
- activity.setTheme(R.style.AppTheme_NoActionBar_270);
- break;
- case 285:
- activity.setTheme(R.style.AppTheme_NoActionBar_285);
- break;
- case 300:
- activity.setTheme(R.style.AppTheme_NoActionBar_300);
- break;
- case 315:
- activity.setTheme(R.style.AppTheme_NoActionBar_315);
- break;
- case 330:
- activity.setTheme(R.style.AppTheme_NoActionBar_330);
- break;
- case 345:
- activity.setTheme(R.style.AppTheme_NoActionBar_345);
- break;
- default:
- activity.setTheme(R.style.AppTheme_NoActionBar);
- Log.d("profiles", String.format("Theme hue %d not supported, using the default",
- themeId));
- }
- }
- else {
- Log.d("profiles", "No profile given, using default theme");
- activity.setTheme(R.style.AppTheme_NoActionBar);
+ final int themeId = (profile == null) ? -1 : profile.getThemeId();
+ setupTheme(activity, themeId);
+ }
+ public static void setupTheme(Activity activity, int themeId) {
+ switch (themeId) {
+ case 0:
+ case 360:
+ activity.setTheme(R.style.AppTheme_NoActionBar_0);
+ break;
+ case 15:
+ activity.setTheme(R.style.AppTheme_NoActionBar_15);
+ break;
+ case 30:
+ activity.setTheme(R.style.AppTheme_NoActionBar_30);
+ break;
+ case 45:
+ activity.setTheme(R.style.AppTheme_NoActionBar_45);
+ break;
+ case 60:
+ activity.setTheme(R.style.AppTheme_NoActionBar_60);
+ break;
+ case 75:
+ activity.setTheme(R.style.AppTheme_NoActionBar_75);
+ break;
+ case 90:
+ activity.setTheme(R.style.AppTheme_NoActionBar_90);
+ break;
+ case 105:
+ activity.setTheme(R.style.AppTheme_NoActionBar_105);
+ break;
+ case 120:
+ activity.setTheme(R.style.AppTheme_NoActionBar_120);
+ break;
+ case 135:
+ activity.setTheme(R.style.AppTheme_NoActionBar_135);
+ break;
+ case 150:
+ activity.setTheme(R.style.AppTheme_NoActionBar_150);
+ break;
+ case 165:
+ activity.setTheme(R.style.AppTheme_NoActionBar_165);
+ break;
+ case 180:
+ activity.setTheme(R.style.AppTheme_NoActionBar_180);
+ break;
+ case 195:
+ activity.setTheme(R.style.AppTheme_NoActionBar_195);
+ break;
+ case 210:
+ activity.setTheme(R.style.AppTheme_NoActionBar_210);
+ break;
+ case 225:
+ activity.setTheme(R.style.AppTheme_NoActionBar_225);
+ break;
+ case 240:
+ activity.setTheme(R.style.AppTheme_NoActionBar_240);
+ break;
+ case 255:
+ activity.setTheme(R.style.AppTheme_NoActionBar_255);
+ break;
+ case 270:
+ activity.setTheme(R.style.AppTheme_NoActionBar_270);
+ break;
+ case 285:
+ activity.setTheme(R.style.AppTheme_NoActionBar_285);
+ break;
+ case 300:
+ activity.setTheme(R.style.AppTheme_NoActionBar_300);
+ break;
+ case 315:
+ activity.setTheme(R.style.AppTheme_NoActionBar_315);
+ break;
+ case 330:
+ activity.setTheme(R.style.AppTheme_NoActionBar_330);
+ break;
+ case 345:
+ activity.setTheme(R.style.AppTheme_NoActionBar_345);
+ break;
+ default:
+ activity.setTheme(R.style.AppTheme_NoActionBar);
+ Log.d("profiles",
+ String.format("Theme hue %d not supported, using the default", themeId));
}
refreshColors(activity.getTheme());