]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java
nice side-swipe switch between account summary and transaction list
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / activity / MainActivity.java
index 90e02c9a6a49ed54f8a28d9e7f7a37c83cf47f50..e245a250ee47238958b7e774e86891df4410d6c2 100644 (file)
@@ -23,9 +23,11 @@ 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;
-import android.support.v4.app.FragmentTransaction;
+import android.support.v4.app.FragmentPagerAdapter;
 import android.support.v4.view.GravityCompat;
+import android.support.v4.view.ViewPager;
 import android.support.v4.widget.DrawerLayout;
 import android.support.v7.app.ActionBarDrawerToggle;
 import android.support.v7.app.AppCompatActivity;
@@ -55,17 +57,37 @@ import java.util.Observable;
 import java.util.Observer;
 
 public class MainActivity extends AppCompatActivity {
+    public MobileLedgerListFragment currentFragment = null;
     DrawerLayout drawer;
     private AccountSummaryFragment accountSummaryFragment;
     private TransactionListFragment transactionListFragment;
-    public MobileLedgerListFragment currentFragment = null;
     private FragmentManager fragmentManager;
     private TextView tvLastUpdate;
     private RetrieveTransactionsTask retrieveTransactionsTask;
     private View bTransactionListCancelDownload;
     private ProgressBar progressBar;
     private LinearLayout progressLayout;
+    private SectionsPagerAdapter mSectionsPagerAdapter;
+    private ViewPager mViewPager;
 
+    @Override
+    protected void onStart() {
+        super.onStart();
+
+        Data.lastUpdateDate.set(null);
+        updateLastUpdateTextFromDB();
+        Date lastUpdate = Data.lastUpdateDate.get();
+
+        long now = new Date().getTime();
+        if ((lastUpdate == null) || (now > (lastUpdate.getTime() + (24 * 3600 * 1000)))) {
+            if (lastUpdate == null) Log.d("db::", "WEB data never fetched. scheduling a fetch");
+            else Log.d("db",
+                    String.format("WEB data last fetched at %1.3f and now is %1.3f. re-fetching",
+                            lastUpdate.getTime() / 1000f, now / 1000f));
+
+            scheduleTransactionListRetrieval();
+        }
+    }
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -93,8 +115,7 @@ public class MainActivity extends AppCompatActivity {
 
         tvLastUpdate = findViewById(R.id.transactions_last_update);
 
-        bTransactionListCancelDownload =
-                findViewById(R.id.transaction_list_cancel_download);
+        bTransactionListCancelDownload = findViewById(R.id.transaction_list_cancel_download);
         progressBar = findViewById(R.id.transaction_list_progress_bar);
         if (progressBar == null)
             throw new RuntimeException("Can't get hold on the transaction value progress bar");
@@ -103,46 +124,60 @@ public class MainActivity extends AppCompatActivity {
                 "Can't get hold on the transaction value progress bar layout");
 
         fragmentManager = getSupportFragmentManager();
+        mSectionsPagerAdapter = new SectionsPagerAdapter(fragmentManager);
 
-        onAccountSummaryClicked(null);
+        mViewPager = findViewById(R.id.root_frame);
+        mViewPager.setAdapter(mSectionsPagerAdapter);
+        mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
+            @Override
+            public void onPageSelected(int position) {
+                switch (position) {
+                    case 0:
+                        markDrawerItemCurrent(R.id.nav_account_summary);
+                        break;
+                    case 1:
+                        markDrawerItemCurrent(R.id.nav_latest_transactions);
+                        break;
+                    default:
+                        Log.e("MainActivity", String.format("Unexpected page index %d", position));
+                }
+
+                super.onPageSelected(position);
+            }
+        });
 
         Data.lastUpdateDate.addObserver(new Observer() {
             @Override
             public void update(Observable o, Object arg) {
                 Log.d("main", "lastUpdateDate changed");
-                runOnUiThread(new Runnable() {
-                    @Override
-                    public void run() {
-                        Date date = Data.lastUpdateDate.get();
-                        if (date == null) {
-                            tvLastUpdate.setText(R.string.transaction_last_update_never);
+                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(date.toLocaleString());
                         }
                     }
                 });
             }
         });
 
-        updateLastUpdateTextFromDB();
-        Date lastUpdate = Data.lastUpdateDate.get();
-
-        long now = new Date().getTime();
-        if ((lastUpdate == null) || (now > (lastUpdate.getTime() + (24 * 3600 * 1000)))) {
-            if (lastUpdate == null) Log.d("db", "WEB data never fetched. scheduling a fetch");
-            else Log.d("db",
-                    String.format("WEB data last fetched at %1.3f and now is %1.3f. re-fetching",
-                            lastUpdate.getTime() / 1000f, now / 1000f));
-
-            scheduleTransactionListRetrieval();
-        }
+        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);
+                });
+            }
+        });
     }
     public void fab_new_transaction_clicked(View view) {
         Intent intent = new Intent(this, NewTransactionActivity.class);
@@ -216,45 +251,43 @@ public class MainActivity extends AppCompatActivity {
     public void onAccountSummaryClicked(View view) {
         drawer.closeDrawers();
 
-        resetFragmentBackStack();
-
         showAccountSummaryFragment();
     }
     private void showAccountSummaryFragment() {
-        FragmentTransaction ft = fragmentManager.beginTransaction();
-        accountSummaryFragment = new AccountSummaryFragment();
-        ft.replace(R.id.root_frame, accountSummaryFragment);
-        ft.commit();
-        currentFragment = accountSummaryFragment;
+        mViewPager.setCurrentItem(0, true);
+//        FragmentTransaction ft = fragmentManager.beginTransaction();
+//        accountSummaryFragment = new AccountSummaryFragment();
+//        ft.replace(R.id.root_frame, accountSummaryFragment);
+//        ft.commit();
+//        currentFragment = accountSummaryFragment;
     }
     public void onLatestTransactionsClicked(View view) {
         drawer.closeDrawers();
 
-        resetFragmentBackStack();
-
         showTransactionsFragment(null);
     }
     private void resetFragmentBackStack() {
 //        fragmentManager.popBackStack(0, FragmentManager.POP_BACK_STACK_INCLUSIVE);
     }
     private void showTransactionsFragment(LedgerAccount account) {
-        FragmentTransaction ft = fragmentManager.beginTransaction();
-        if (transactionListFragment == null) {
-            Log.d("flow", "MainActivity creating TransactionListFragment");
-            transactionListFragment = new TransactionListFragment();
-        }
-        Bundle bundle = new Bundle();
-        if (account != null) {
-            bundle.putString(TransactionListFragment.BUNDLE_KEY_FILTER_ACCOUNT_NAME,
-                    account.getName());
-        }
-        transactionListFragment.setArguments(bundle);
-        ft.replace(R.id.root_frame, transactionListFragment);
-        if (account != null)
-            ft.addToBackStack(getResources().getString(R.string.title_activity_transaction_list));
-        ft.commit();
-
-        currentFragment = transactionListFragment;
+        mViewPager.setCurrentItem(1, true);
+//        FragmentTransaction ft = fragmentManager.beginTransaction();
+//        if (transactionListFragment == null) {
+//            Log.d("flow", "MainActivity creating TransactionListFragment");
+//            transactionListFragment = new TransactionListFragment();
+//        }
+//        Bundle bundle = new Bundle();
+//        if (account != null) {
+//            bundle.putString(TransactionListFragment.BUNDLE_KEY_FILTER_ACCOUNT_NAME,
+//                    account.getName());
+//        }
+//        transactionListFragment.setArguments(bundle);
+//        ft.replace(R.id.root_frame, transactionListFragment);
+//        if (account != null)
+//            ft.addToBackStack(getResources().getString(R.string.title_activity_transaction_list));
+//        ft.commit();
+//
+//        currentFragment = transactionListFragment;
     }
     public void showAccountTransactions(LedgerAccount account) {
         showTransactionsFragment(account);
@@ -327,5 +360,30 @@ public class MainActivity extends AppCompatActivity {
             progressBar.setIndeterminate(false);
         }
     }
+    public class SectionsPagerAdapter extends FragmentPagerAdapter {
+
+        public SectionsPagerAdapter(FragmentManager fm) {
+            super(fm);
+        }
+
+        @Override
+        public Fragment getItem(int position) {
+            Log.d("main", String.format("Switching to gragment %d", position));
+            switch (position) {
+                case 0:
+                    return new AccountSummaryFragment();
+                case 1:
+                    return new TransactionListFragment();
+                default:
+                    throw new IllegalStateException(
+                            String.format("Unexpected fragment index: " + "%d", position));
+            }
+        }
+
+        @Override
+        public int getCount() {
+            return 2;
+        }
+    }
 
 }