X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Factivity%2FMainActivity.java;h=eb74e11f60d97763ad231b261d00f9f42e74c2b8;hb=212517cf2f1e8f04830ea1a635a10b2a6755c999;hp=5efc2f84f386180a930fd24ea7164d8344efd180;hpb=5bba2c06a81c87327fdcf3f2a85c3206d932c2f9;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java b/app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java index 5efc2f84..eb74e11f 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java @@ -18,7 +18,6 @@ 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; @@ -27,6 +26,7 @@ import android.graphics.Color; import android.graphics.drawable.Icon; import android.os.Build; import android.os.Bundle; +import android.text.format.DateUtils; import android.util.Log; import android.view.View; import android.view.animation.AnimationUtils; @@ -65,11 +65,11 @@ import net.ktnx.mobileledger.utils.MLDB; import org.jetbrains.annotations.NotNull; -import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.Objects; /* * TODO: reports @@ -79,7 +79,6 @@ public class MainActivity extends ProfileThemedActivity { 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"; DrawerLayout drawer; private View profileListHeadMore, profileListHeadCancel, profileListHeadAddProfile; private View bTransactionListCancelDownload; @@ -131,13 +130,9 @@ public class MainActivity extends ProfileThemedActivity { } @Override protected void setupProfileColors() { - SharedPreferences prefs = getPreferences(MODE_PRIVATE); - int profileColor = prefs.getInt(PREF_THEME_ID, -2); - if (profileColor == -2) - profileColor = Data.retrieveCurrentThemeIdFromDb(); + final int profileColor = Data.retrieveCurrentThemeIdFromDb(); Colors.setupTheme(this, profileColor); Colors.profileThemeId = profileColor; - storeThemeIdInPrefs(profileColor); } @Override protected void onResume() { @@ -234,8 +229,6 @@ public class MainActivity extends ProfileThemedActivity { .setValue(savedInstanceState.getString(STATE_ACC_FILTER, null)); } - mainModel.lastUpdateDate.observe(this, this::updateLastUpdateDisplay); - findViewById(R.id.btn_no_profiles_add).setOnClickListener( v -> startEditProfileActivity(null)); @@ -244,6 +237,8 @@ public class MainActivity extends ProfileThemedActivity { findViewById(R.id.nav_new_profile_button).setOnClickListener( v -> startEditProfileActivity(null)); + findViewById(R.id.transaction_list_cancel_download).setOnClickListener(this::onStopTransactionRefreshClick); + RecyclerView root = findViewById(R.id.nav_profile_list); if (root == null) throw new RuntimeException("Can't get hold on the transaction value view"); @@ -334,16 +329,20 @@ public class MainActivity extends ProfileThemedActivity { .show(); mainModel.clearUpdateError(); }); + Data.locale.observe(this, l -> refreshLastUpdateInfo()); + Data.lastUpdateDate.observe(this, date -> refreshLastUpdateInfo()); + Data.lastUpdateTransactionCount.observe(this, date -> refreshLastUpdateInfo()); + Data.lastUpdateAccountCount.observe(this, date -> refreshLastUpdateInfo()); } - private void scheduleDataRetrievalIfStale(Date lastUpdate) { + private void scheduleDataRetrievalIfStale(long lastUpdate) { long now = new Date().getTime(); - if ((lastUpdate == null) || (now > (lastUpdate.getTime() + (24 * 3600 * 1000)))) { - if (lastUpdate == null) + if ((lastUpdate == 0) || (now > (lastUpdate + (24 * 3600 * 1000)))) { + if (lastUpdate == 0) Logger.debug("db::", "WEB data never fetched. scheduling a fetch"); else Logger.debug("db", String.format(Locale.ENGLISH, "WEB data last fetched at %1.3f and now is %1.3f. re-fetching", - lastUpdate.getTime() / 1000f, now / 1000f)); + lastUpdate / 1000f, now / 1000f)); mainModel.scheduleTransactionListRetrieval(); } @@ -436,6 +435,7 @@ public class MainActivity extends ProfileThemedActivity { mProfileListAdapter.notifyDataSetChanged(); + mainModel.clearAccounts(); mainModel.clearTransactions(); if (haveProfile) { @@ -459,40 +459,16 @@ public class MainActivity extends ProfileThemedActivity { updateLastUpdateTextFromDB(); } - private void updateLastUpdateDisplay(Date newValue) { - LinearLayout l = findViewById(R.id.transactions_last_update_layout); - TextView v = findViewById(R.id.transactions_last_update); - if (newValue == null) { - l.setVisibility(View.INVISIBLE); - Logger.debug("main", "no last update date :("); - } - else { - final String text = DateFormat.getDateTimeInstance() - .format(newValue); - v.setText(text); - l.setVisibility(View.VISIBLE); - Logger.debug("main", String.format("Date formatted: %s", text)); - } - - scheduleDataRetrievalIfStale(newValue); - } private void profileThemeChanged() { - storeThemeIdInPrefs(profile.getThemeHue()); - // un-hook all observed LiveData Data.removeProfileObservers(this); Data.profiles.removeObservers(this); - mainModel.lastUpdateDate.removeObservers(this); + Data.lastUpdateTransactionCount.removeObservers(this); + Data.lastUpdateAccountCount.removeObservers(this); + Data.lastUpdateDate.removeObservers(this); recreate(); } - 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(); @@ -570,15 +546,42 @@ public class MainActivity extends ProfileThemedActivity { if (profile == null) return; - long last_update = profile.getLongOption(MLDB.OPT_LAST_SCRAPE, 0L); + long lastUpdate = profile.getLongOption(MLDB.OPT_LAST_SCRAPE, 0L); - Logger.debug("transactions", - String.format(Locale.ENGLISH, "Last update = %d", last_update)); - if (last_update == 0) { - mainModel.lastUpdateDate.postValue(null); + Logger.debug("transactions", String.format(Locale.ENGLISH, "Last update = %d", lastUpdate)); + if (lastUpdate == 0) { + Data.lastUpdateDate.postValue(null); + } + else { + Data.lastUpdateDate.postValue(new Date(lastUpdate)); + } + + scheduleDataRetrievalIfStale(lastUpdate); + + } + private void refreshLastUpdateInfo() { + final int formatFlags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR | + DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_NUMERIC_DATE; + String templateForTransactions = + getResources().getString(R.string.transaction_count_summary); + String templateForAccounts = getResources().getString(R.string.account_count_summary); + Integer accountCount = Data.lastUpdateAccountCount.getValue(); + Integer transactionCount = Data.lastUpdateTransactionCount.getValue(); + Date lastUpdate = Data.lastUpdateDate.getValue(); + if (lastUpdate == null) { + Data.lastTransactionsUpdateText.set("----"); + Data.lastAccountsUpdateText.set("----"); } else { - mainModel.lastUpdateDate.postValue(new Date(last_update)); + Data.lastTransactionsUpdateText.set( + String.format(Objects.requireNonNull(Data.locale.getValue()), + templateForTransactions, + transactionCount == null ? 0 : transactionCount, + DateUtils.formatDateTime(this, lastUpdate.getTime(), formatFlags))); + Data.lastAccountsUpdateText.set( + String.format(Objects.requireNonNull(Data.locale.getValue()), + templateForAccounts, accountCount == null ? 0 : accountCount, + DateUtils.formatDateTime(this, lastUpdate.getTime(), formatFlags))); } } public void onStopTransactionRefreshClick(View view) {