X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;ds=sidebyside;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2FLatestTransactions.java;h=27ea5cd27efd047b624e2f2590ce82b58c517134;hb=5e2dc873b9c8cb41c1065bd14379ab2dfeb0dac1;hp=8e0269f58d068a6223b51ffd6f8e6a2797e1a1ec;hpb=eb198c42090580a7bc2e72e1ba4738eda914ce3e;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/LatestTransactions.java b/app/src/main/java/net/ktnx/mobileledger/LatestTransactions.java index 8e0269f5..27ea5cd2 100644 --- a/app/src/main/java/net/ktnx/mobileledger/LatestTransactions.java +++ b/app/src/main/java/net/ktnx/mobileledger/LatestTransactions.java @@ -2,8 +2,11 @@ package net.ktnx.mobileledger; import android.content.Intent; import android.content.pm.PackageInfo; +import android.content.res.Resources; +import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.design.widget.Snackbar; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; @@ -13,15 +16,19 @@ import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.widget.ProgressBar; +import android.widget.TextView; import java.util.Date; +import static android.view.View.GONE; import static net.ktnx.mobileledger.MobileLedgerDB.db; +import static net.ktnx.mobileledger.MobileLedgerDB.set_option_value; public class LatestTransactions extends AppCompatActivity { DrawerLayout drawer; - private static Date account_list_last_updated; + private static long account_list_last_updated; private static boolean account_list_needs_update = true; public static void preferences_changed() { account_list_needs_update = true; @@ -46,9 +53,11 @@ public class LatestTransactions extends AppCompatActivity { PackageInfo pi = getApplicationContext().getPackageManager().getPackageInfo(getPackageName(), 0); ver.setText(pi.versionName); } catch (Exception e) { + e.printStackTrace(); } - update_accounts(); + prepare_db(); + update_accounts(false); } public void fab_new_transaction_clicked(View view) { @@ -99,13 +108,54 @@ public class LatestTransactions extends AppCompatActivity { } private void prepare_db() { - MobileLedgerDB.setDb_filename(this.getApplicationInfo().deviceProtectedDataDir + "/" + MobileLedgerDB.DATABASE_NAME); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + MobileLedgerDB.setDb_filename(this.getApplicationInfo().deviceProtectedDataDir + "/" + MobileLedgerDB.DATABASE_NAME); + } + else { + MobileLedgerDB.setDb_filename(MobileLedgerDB.DATABASE_NAME); + } MobileLedgerDB.initDB(); + + account_list_last_updated = MobileLedgerDB.get_option_value("last_refresh", (long) 0); + } - private void update_accounts() { - prepare_db(); - RetrieveAccountsTask task = new RetrieveAccountsTask(); + private void update_accounts(boolean force) { + long now = new Date().getTime(); + if ((now > (account_list_last_updated + (24 * 3600*1000))) || force) { + Log.d("db", "accounts last updated at " + account_list_last_updated+" and now is " + now+". re-fetching"); + update_accounts(); + } + } + + private void update_accounts() { + Resources rm = getResources(); + + ProgressBar pb = findViewById(R.id.progressBar); + pb.setVisibility(View.VISIBLE); + TextView pt = findViewById(R.id.textProgress); + pt.setVisibility(View.VISIBLE); + pb.setIndeterminate(true); + + RetrieveAccountsTask task = new RetrieveAccountsTask() { + @Override + protected void onProgressUpdate(Integer... values) { + if ( values[0] == 0 ) + pt.setText(R.string.progress_connecting); + else + pt.setText(String.format(getResources().getString(R.string.progress_N_accounts_loaded), values[0])); + } + + @Override + protected void onPostExecute(Void result) { + pb.setVisibility(GONE); + pt.setVisibility(GONE); + if (this.error != 0) + Snackbar.make(drawer, rm.getString(this.error), Snackbar.LENGTH_LONG ); + else + set_option_value("last_refresh", new Date().getTime() ); + } + }; task.setPref(PreferenceManager.getDefaultSharedPreferences(this)); task.execute(db);