]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java
close the drawer when the settings item is selected
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / activity / MainActivity.java
index e245a250ee47238958b7e774e86891df4410d6c2..7e9469a296524d706f8fa7adb3cc6e147458a269 100644 (file)
 package net.ktnx.mobileledger.ui.activity;
 
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.content.pm.PackageInfo;
 import android.os.Build;
 import android.os.Bundle;
-import android.preference.PreferenceManager;
 import android.support.annotation.ColorInt;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
@@ -33,23 +33,24 @@ import android.support.v7.app.ActionBarDrawerToggle;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
 import android.util.Log;
-import android.view.ContextMenu;
-import android.view.MenuItem;
 import android.view.View;
 import android.widget.LinearLayout;
 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;
+import net.ktnx.mobileledger.model.MobileLedgerProfile;
 import net.ktnx.mobileledger.ui.MobileLedgerListFragment;
 import net.ktnx.mobileledger.ui.account_summary.AccountSummaryFragment;
 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;
@@ -95,6 +96,19 @@ public class MainActivity extends AppCompatActivity {
         Toolbar toolbar = findViewById(R.id.toolbar);
         setSupportActionBar(toolbar);
 
+        Data.profile.addObserver(new Observer() {
+            @Override
+            public void update(Observable o, Object arg) {
+                MobileLedgerProfile profile = Data.profile.get();
+                runOnUiThread(() -> {
+                    if (profile == null) toolbar.setSubtitle("");
+                    else toolbar.setSubtitle(profile.getName());
+                });
+            }
+        });
+
+        setupProfile();
+
         drawer = findViewById(R.id.drawer_layout);
         ActionBarDrawerToggle toggle =
                 new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open,
@@ -128,7 +142,7 @@ public class MainActivity extends AppCompatActivity {
 
         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) {
@@ -146,38 +160,72 @@ 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));
                     }
-                });
-            }
+                }
+            });
         });
-
-        Data.ledgerTitle.addObserver(new Observer() {
-            @Override
-            public void update(Observable o, Object arg) {
-                runOnUiThread(() -> {
-                    String title = Data.ledgerTitle.get();
-                    if (title == null) toolbar.setSubtitle("");
-                    else toolbar.setSubtitle(title);
-                });
+    }
+    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);
@@ -193,6 +241,7 @@ public class MainActivity extends AppCompatActivity {
     public void nav_settings_clicked(View view) {
         Intent intent = new Intent(this, SettingsActivity.class);
         startActivity(intent);
+        drawer.closeDrawers();
     }
     public void markDrawerItemCurrent(int id) {
         TextView item = drawer.findViewById(id);
@@ -215,29 +264,6 @@ public class MainActivity extends AppCompatActivity {
             }
         }
     }
-    public void onOptionsMenuClicked(MenuItem menuItem) {
-        ContextMenu.ContextMenuInfo info = menuItem.getMenuInfo();
-        switch (menuItem.getItemId()) {
-            case R.id.menu_acc_summary_cancel_selection:
-                if (accountSummaryFragment != null)
-                    accountSummaryFragment.onCancelAccSelection(menuItem);
-                break;
-            case R.id.menu_acc_summary_confirm_selection:
-                if (accountSummaryFragment != null)
-                    accountSummaryFragment.onConfirmAccSelection(menuItem);
-                break;
-            case R.id.menu_acc_summary_only_starred:
-                if (accountSummaryFragment != null)
-                    accountSummaryFragment.onShowOnlyStarredClicked(menuItem);
-                break;
-            case R.id.menu_transaction_list_filter:
-                if (transactionListFragment != null)
-                    transactionListFragment.onShowFilterClick(menuItem);
-                break;
-            default:
-                Log.e("menu", String.format("Menu item %d not handled", menuItem.getItemId()));
-        }
-    }
     public void onViewClicked(View view) {
         switch (view.getId()) {
             case R.id.clearAccountNameFilter:
@@ -307,7 +333,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) {
@@ -321,10 +347,7 @@ public class MainActivity extends AppCompatActivity {
     public void scheduleTransactionListRetrieval() {
         retrieveTransactionsTask = new RetrieveTransactionsTask(new WeakReference<>(this));
 
-        RetrieveTransactionsTask.Params params = new RetrieveTransactionsTask.Params(
-                PreferenceManager.getDefaultSharedPreferences(this));
-
-        retrieveTransactionsTask.execute(params);
+        retrieveTransactionsTask.execute();
         bTransactionListCancelDownload.setEnabled(true);
     }
     public void onStopTransactionRefreshClick(View view) {
@@ -335,6 +358,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);
@@ -360,6 +385,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) {