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=760f6aacfbbdfffda4d69ede20cf59dcd4a5f9be;hp=5615a2c77fe893eec7ff0cb86f303fe1fc40738f;hb=34e4db096ade208e89aec5b519883a76b698a254;hpb=58da72a8ebdbfb80e643084e6730afafa2e06f34 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 5615a2c7..760f6aac 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 @@ -41,6 +41,7 @@ import android.widget.ProgressBar; import android.widget.TextView; import net.ktnx.mobileledger.R; +import net.ktnx.mobileledger.async.RefreshDescriptionsTask; import net.ktnx.mobileledger.async.RetrieveTransactionsTask; import net.ktnx.mobileledger.model.Data; import net.ktnx.mobileledger.model.LedgerAccount; @@ -51,12 +52,12 @@ import net.ktnx.mobileledger.ui.transaction_list.TransactionListFragment; import net.ktnx.mobileledger.utils.MLDB; import java.lang.ref.WeakReference; +import java.text.DateFormat; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.Observable; import java.util.Observer; -import java.util.UUID; public class MainActivity extends AppCompatActivity { public MobileLedgerListFragment currentFragment = null; @@ -108,28 +109,7 @@ public class MainActivity extends AppCompatActivity { } }); - String profileUUID = MLDB.get_option_value(MLDB.OPT_PROFILE_UUID, null); - if (profileUUID == null) { - SharedPreferences backend = getSharedPreferences("backend", MODE_PRIVATE); - Log.d("profiles", "Migrating from preferences to profiles"); - // migration to multiple profiles - profileUUID = UUID.randomUUID().toString(); - MobileLedgerProfile profile = new MobileLedgerProfile(profileUUID, "default", - backend.getString("backend_url", ""), - backend.getBoolean("backend_use_http_auth", false), - backend.getString("backend_auth_user", null), - backend.getString("backend_auth_password", null)); - profile.storeInDB(); - SharedPreferences.Editor editor = backend.edit(); - editor.clear(); - editor.apply(); - Data.profile.set(profile); - MLDB.set_option_value(MLDB.OPT_PROFILE_UUID, profileUUID); - } - else { - MobileLedgerProfile profile = MobileLedgerProfile.loadUUIDFromDB(profileUUID); - Data.profile.set(profile); - } + setupProfile(); drawer = findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = @@ -182,28 +162,73 @@ public class MainActivity extends AppCompatActivity { } }); - 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); + Data.lastUpdateDate.addObserver((o, 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 { - 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()); - } + tvLastUpdate.setText(DateFormat.getDateTimeInstance().format(date)); } - }); - } + } + }); }); } + private void setupProfile() { + Data.profiles.setList(MobileLedgerProfile.loadAllFromDB()); + MobileLedgerProfile profile = null; + + String profileUUID = MLDB.get_option_value(MLDB.OPT_PROFILE_UUID, null); + if (profileUUID == null) { + if (Data.profiles.isEmpty()) { + Data.profiles.setList(MobileLedgerProfile.createInitialProfileList()); + profile = Data.profiles.get(0); + + SharedPreferences backend = getSharedPreferences("backend", MODE_PRIVATE); + Log.d("profiles", "Migrating from preferences to profiles"); + // migration to multiple profiles + if (profile.getUrl().isEmpty()) { + // no legacy config + Intent intent = new Intent(this, ProfileListActivity.class); + startActivity(intent); + } + profile.setUrl(backend.getString("backend_url", "")); + profile.setAuthEnabled(backend.getBoolean("backend_use_http_auth", false)); + profile.setAuthUserName(backend.getString("backend_auth_user", null)); + profile.setAuthPassword(backend.getString("backend_auth_password", null)); + profile.storeInDB(); + SharedPreferences.Editor editor = backend.edit(); + editor.clear(); + editor.apply(); + } + } + else { + profile = MobileLedgerProfile.loadUUIDFromDB(profileUUID); + } + + if (profile == null) profile = Data.profiles.get(0); + + if (profile == null) throw new AssertionError("profile must have a value"); + + Data.profile.set(profile); + MLDB.set_option_value(MLDB.OPT_PROFILE_UUID, profile.getUuid()); + + if (profile.getUrl().isEmpty()) { + Intent intent = new Intent(this, ProfileListActivity.class); + Bundle args = new Bundle(); + args.putInt(ProfileListActivity.ARG_ACTION, ProfileListActivity.ACTION_EDIT_PROFILE); + args.putInt(ProfileListActivity.ARG_PROFILE_INDEX, 0); + intent.putExtras(args); + startActivity(intent, args); + } + } public void fab_new_transaction_clicked(View view) { Intent intent = new Intent(this, NewTransactionActivity.class); startActivity(intent); @@ -332,7 +357,7 @@ public class MainActivity extends AppCompatActivity { } public void updateLastUpdateTextFromDB() { { - long last_update = MLDB.get_option_value(MLDB.OPT_TRANSACTION_LIST_STAMP, 0L); + long last_update = Data.profile.get().get_option_value(MLDB.OPT_LAST_SCRAPE, 0L); Log.d("transactions", String.format("Last update = %d", last_update)); if (last_update == 0) { @@ -357,6 +382,8 @@ public class MainActivity extends AppCompatActivity { public void onRetrieveDone(boolean success) { progressLayout.setVisibility(View.GONE); updateLastUpdateTextFromDB(); + + new RefreshDescriptionsTask().execute(); } public void onRetrieveStart() { progressBar.setIndeterminate(true); @@ -382,6 +409,11 @@ public class MainActivity extends AppCompatActivity { progressBar.setIndeterminate(false); } } + public void nav_profiles_clicked(View view) { + drawer.closeDrawers(); + Intent intent = new Intent(this, ProfileListActivity.class); + startActivity(intent); + } public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) {