package net.ktnx.mobileledger.ui.activity;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager;
import net.ktnx.mobileledger.ui.transaction_list.TransactionListFragment;
import net.ktnx.mobileledger.ui.transaction_list.TransactionListViewModel;
import net.ktnx.mobileledger.utils.Colors;
+import net.ktnx.mobileledger.utils.GetOptCallback;
import net.ktnx.mobileledger.utils.LockHolder;
-import net.ktnx.mobileledger.utils.Logger;
import net.ktnx.mobileledger.utils.MLDB;
import org.jetbrains.annotations.NotNull;
-import java.lang.ref.WeakReference;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
public static final String STATE_CURRENT_PAGE = "current_page";
public static final String BUNDLE_SAVED_STATE = "bundle_savedState";
public static final String STATE_ACC_FILTER = "account_filter";
+ private static final String PREF_THEME_ID = "themeId";
public AccountSummaryFragment mAccountSummaryFragment;
DrawerLayout drawer;
private LinearLayout profileListContainer;
private View profileListHeadArrow, profileListHeadMore, profileListHeadCancel;
private FragmentManager fragmentManager;
- private RetrieveTransactionsTask retrieveTransactionsTask;
private View bTransactionListCancelDownload;
private ProgressBar progressBar;
private LinearLayout progressLayout;
super.onDestroy();
}
@Override
+ protected void setupProfileColors() {
+ SharedPreferences prefs = getPreferences(MODE_PRIVATE);
+ int profileColor = prefs.getInt(PREF_THEME_ID, -2);
+ if (profileColor == -2) profileColor = Data.retrieveCurrentThemeIdFromDb();
+ Colors.setupTheme(this, profileColor);
+ Colors.profileThemeId = profileColor;
+ storeThemeIdInPrefs(profileColor);
+ }
+ @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
debug("flow", "MainActivity.onCreate()");
- int profileColor = Data.retrieveCurrentThemeIdFromDb();
- Colors.setupTheme(this, profileColor);
- Colors.profileThemeId = profileColor;
setContentView(R.layout.activity_main);
fab = findViewById(R.id.btn_add_transaction);
"WEB data last fetched at %1.3f and now is %1.3f. re-fetching",
lastUpdate.getTime() / 1000f, now / 1000f));
- scheduleTransactionListRetrieval();
+ Data.scheduleTransactionListRetrieval(this);
}
}
private void createShortcuts(List<MobileLedgerProfile> list) {
sm.setDynamicShortcuts(shortcuts);
}
private void onProfileListChanged(List<MobileLedgerProfile> newList) {
+ if (newList == null) {
+ // 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);
+ return;
+ }
+
if (newList.isEmpty()) {
findViewById(R.id.no_profiles_layout).setVisibility(View.VISIBLE);
findViewById(R.id.pager_layout).setVisibility(View.GONE);
createShortcuts(newList);
}
- /** called when the current profile has changed */
+ /**
+ * called when the current profile has changed
+ */
private void onProfileChanged(MobileLedgerProfile profile) {
boolean haveProfile = profile != null;
findViewById(R.id.no_profiles_layout).setVisibility(haveProfile ? View.GONE : View.VISIBLE);
scheduleDataRetrievalIfStale(newValue);
}
private void profileThemeChanged() {
- setupProfileColors();
-
Bundle bundle = new Bundle();
onSaveInstanceState(bundle);
+
+ storeThemeIdInPrefs(profile.getThemeId());
+
// restart activity to reflect theme change
finish();
intent.putExtra(BUNDLE_SAVED_STATE, bundle);
startActivity(intent);
}
+ private void storeThemeIdInPrefs(int themeId) {
+ // store the new theme id in the preferences
+ SharedPreferences prefs = getPreferences(MODE_PRIVATE);
+ SharedPreferences.Editor e = prefs.edit();
+ e.putInt(PREF_THEME_ID, themeId);
+ e.apply();
+ }
public void startEditProfileActivity(MobileLedgerProfile profile) {
Intent intent = new Intent(this, ProfileDetailActivity.class);
Bundle args = new Bundle();
startActivity(intent, args);
}
private void setupProfile() {
- String profileUUID = MLDB.getOption(MLDB.OPT_PROFILE_UUID, null);
- MobileLedgerProfile startupProfile;
+ MLDB.getOption(MLDB.OPT_PROFILE_UUID, null, new GetOptCallback() {
+ @Override
+ protected void onResult(String profileUUID) {
+ MobileLedgerProfile startupProfile;
- startupProfile = Data.getProfile(profileUUID);
- Data.setCurrentProfile(startupProfile);
+ startupProfile = Data.getProfile(profileUUID);
+ Data.setCurrentProfile(startupProfile);
+ }
+ });
}
public void fabNewTransactionClicked(View view) {
Intent intent = new Intent(this, NewTransactionActivity.class);
}
}
public void updateLastUpdateTextFromDB() {
- long last_update = (profile != null) ? profile.getLongOption(MLDB.OPT_LAST_SCRAPE, 0L) : 0;
+ if (profile == null) return;
+
+ long last_update = profile.getLongOption(MLDB.OPT_LAST_SCRAPE, 0L);
debug("transactions", String.format(Locale.ENGLISH, "Last update = %d", last_update));
if (last_update == 0) {
Data.lastUpdateDate.postValue(new Date(last_update));
}
}
- public void scheduleTransactionListRetrieval() {
- if (Data.profile.get() == null) return;
-
- retrieveTransactionsTask = new RetrieveTransactionsTask(new WeakReference<>(this));
-
- retrieveTransactionsTask.execute();
- }
public void onStopTransactionRefreshClick(View view) {
debug("interactive", "Cancelling transactions refresh");
- if (retrieveTransactionsTask != null) retrieveTransactionsTask.cancel(false);
+ Data.stopTransactionsRetrieval();
bTransactionListCancelDownload.setEnabled(false);
}
public void onRetrieveDone(String error) {
+ Data.transactionRetrievalDone();
progressLayout.setVisibility(View.GONE);
if (error == null) {