+ super.onPageSelected(position);
+ }
+ });
+
+ 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());
+ }
+ }
+ });
+ }
+ });
+ }
+ private void setupProfile() {
+ List<MobileLedgerProfile> profiles = MobileLedgerProfile.loadAllFromDB();
+ MobileLedgerProfile profile = null;
+
+ String profileUUID = MLDB.get_option_value(MLDB.OPT_PROFILE_UUID, null);
+ if (profileUUID == null) {
+ if (profiles.isEmpty()) {
+ profiles = MobileLedgerProfile.createInitialProfileList();
+ profile = 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 = 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);
+ }