X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Factivity%2FMainActivity.java;h=6e17983bf0b43b4f3dad5b516e1d76ad6ce470ec;hp=8d1b2f8b1a0936026a6eabf4dc89b1411430fde8;hb=198f2762d2236a57cec413322c0bde6985ead88a;hpb=a1d55154e1c9fb72fcd60de31d6e64e8d046f96d 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 8d1b2f8b..6e17983b 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 @@ -40,6 +40,7 @@ import android.widget.TextView; import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.async.RetrieveTransactionsTask; +import net.ktnx.mobileledger.model.Data; import net.ktnx.mobileledger.model.LedgerAccount; import net.ktnx.mobileledger.ui.MobileLedgerListFragment; import net.ktnx.mobileledger.ui.account_summary.AccountSummaryFragment; @@ -50,12 +51,14 @@ import java.lang.ref.WeakReference; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Date; +import java.util.Observable; +import java.util.Observer; public class MainActivity extends AppCompatActivity { + public MobileLedgerListFragment currentFragment = null; DrawerLayout drawer; private AccountSummaryFragment accountSummaryFragment; private TransactionListFragment transactionListFragment; - public MobileLedgerListFragment currentFragment = null; private FragmentManager fragmentManager; private TextView tvLastUpdate; private RetrieveTransactionsTask retrieveTransactionsTask; @@ -89,12 +92,8 @@ public class MainActivity extends AppCompatActivity { } tvLastUpdate = findViewById(R.id.transactions_last_update); - updateLastUpdateText(); - long last_update = MLDB.get_option_value(MLDB.OPT_TRANSACTION_LIST_STAMP, 0L); - Log.d("transactions", String.format("Last update = %d", last_update)); - bTransactionListCancelDownload = - findViewById(R.id.transaction_list_cancel_download); + bTransactionListCancelDownload = findViewById(R.id.transaction_list_cancel_download); progressBar = findViewById(R.id.transaction_list_progress_bar); if (progressBar == null) throw new RuntimeException("Can't get hold on the transaction value progress bar"); @@ -105,6 +104,41 @@ public class MainActivity extends AppCompatActivity { fragmentManager = getSupportFragmentManager(); onAccountSummaryClicked(null); + + Data.lastUpdateDate.addObserver(new Observer() { + @Override + public void update(Observable o, Object arg) { + Log.d("main", "lastUpdateDate changed"); + runOnUiThread(() -> { + Date date = Data.lastUpdateDate.get(); + if (date == null) { + tvLastUpdate.setText(R.string.transaction_last_update_never); + } + else { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + tvLastUpdate.setText(date.toInstant().atZone(ZoneId.systemDefault()) + .format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); + } + else { + tvLastUpdate.setText(date.toLocaleString()); + } + } + }); + } + }); + + updateLastUpdateTextFromDB(); + Date lastUpdate = Data.lastUpdateDate.get(); + + long now = new Date().getTime(); + if ((lastUpdate == null) || (now > (lastUpdate.getTime() + (24 * 3600 * 1000)))) { + if (lastUpdate == null) Log.d("db", "WEB data never fetched. scheduling a fetch"); + else Log.d("db", + String.format("WEB data last fetched at %1.3f and now is %1.3f. re-fetching", + lastUpdate.getTime() / 1000f, now / 1000f)); + + scheduleTransactionListRetrieval(); + } } public void fab_new_transaction_clicked(View view) { Intent intent = new Intent(this, NewTransactionActivity.class); @@ -234,26 +268,20 @@ public class MainActivity extends AppCompatActivity { super.onBackPressed(); } } - public void updateLastUpdateText() { + public void updateLastUpdateTextFromDB() { { long last_update = MLDB.get_option_value(MLDB.OPT_TRANSACTION_LIST_STAMP, 0L); + Log.d("transactions", String.format("Last update = %d", last_update)); if (last_update == 0) { - tvLastUpdate.setText(getString(R.string.transaction_last_update_never)); + Data.lastUpdateDate.set(null); } else { - Date date = new Date(last_update); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - tvLastUpdate.setText(date.toInstant().atZone(ZoneId.systemDefault()) - .format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); - } - else { - tvLastUpdate.setText(date.toLocaleString()); - } + Data.lastUpdateDate.set(new Date(last_update)); } } } - public void update_transactions() { + public void scheduleTransactionListRetrieval() { retrieveTransactionsTask = new RetrieveTransactionsTask(new WeakReference<>(this)); RetrieveTransactionsTask.Params params = new RetrieveTransactionsTask.Params( @@ -269,7 +297,7 @@ public class MainActivity extends AppCompatActivity { } public void onRetrieveDone(boolean success) { progressLayout.setVisibility(View.GONE); - updateLastUpdateText(); + updateLastUpdateTextFromDB(); } public void onRetrieveStart() { progressBar.setIndeterminate(true);