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;
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;
}
});
- 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 =
mViewPager = findViewById(R.id.root_frame);
mViewPager.setAdapter(mSectionsPagerAdapter);
- mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
+ mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
switch (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);
+ 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);
}
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) {
public void onRetrieveDone(boolean success) {
progressLayout.setVisibility(View.GONE);
updateLastUpdateTextFromDB();
+
+ new RefreshDescriptionsTask().execute();
}
public void onRetrieveStart() {
progressBar.setIndeterminate(true);
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) {