]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java
new transaction activity appears from the bottom edge
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / activity / MainActivity.java
index 6a49638fcbb6f79a37640c7b81cf24280ca4444c..fd6942b03b6d2a21e51d1c1d76f572128e83774f 100644 (file)
@@ -38,6 +38,17 @@ import android.widget.ProgressBar;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import androidx.appcompat.app.ActionBarDrawerToggle;
+import androidx.appcompat.widget.Toolbar;
+import androidx.core.view.GravityCompat;
+import androidx.drawerlayout.widget.DrawerLayout;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentPagerAdapter;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.viewpager.widget.ViewPager;
+
 import com.google.android.material.floatingactionbutton.FloatingActionButton;
 
 import net.ktnx.mobileledger.R;
@@ -66,18 +77,6 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
-import java.util.Observer;
-
-import androidx.appcompat.app.ActionBarDrawerToggle;
-import androidx.appcompat.widget.Toolbar;
-import androidx.core.view.GravityCompat;
-import androidx.drawerlayout.widget.DrawerLayout;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
-import androidx.fragment.app.FragmentPagerAdapter;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import androidx.viewpager.widget.ViewPager;
 
 import static net.ktnx.mobileledger.utils.Logger.debug;
 
@@ -89,38 +88,30 @@ public class MainActivity extends ProfileThemedActivity {
     public AccountSummaryFragment mAccountSummaryFragment;
     DrawerLayout drawer;
     private View profileListHeadMore, profileListHeadCancel, profileListHeadAddProfile;
-    private FragmentManager fragmentManager;
     private View bTransactionListCancelDownload;
-    private ProgressBar progressBar;
-    private LinearLayout progressLayout;
     private SectionsPagerAdapter mSectionsPagerAdapter;
     private ViewPager mViewPager;
     private FloatingActionButton fab;
     private ProfilesRecyclerViewAdapter mProfileListAdapter;
     private int mCurrentPage;
-    private String mAccountFilter;
     private boolean mBackMeansToAccountList = false;
     private Toolbar mToolbar;
     private DrawerLayout.SimpleDrawerListener drawerListener;
     private ActionBarDrawerToggle barDrawerToggle;
     private ViewPager.SimpleOnPageChangeListener pageChangeListener;
-    private Observer editingProfilesObserver;
     private MobileLedgerProfile profile;
     @Override
     protected void onStart() {
         super.onStart();
 
-        debug("flow", "MainActivity.onStart()");
         mViewPager.setCurrentItem(mCurrentPage, false);
-        if (mAccountFilter != null) showTransactionsFragment(mAccountFilter);
-        else Data.accountFilter.setValue(null);
-
     }
     @Override
     protected void onSaveInstanceState(@NotNull Bundle outState) {
         super.onSaveInstanceState(outState);
         outState.putInt(STATE_CURRENT_PAGE, mViewPager.getCurrentItem());
-        if (mAccountFilter != null) outState.putString(STATE_ACC_FILTER, mAccountFilter);
+        if (Data.accountFilter.getValue() != null)
+            outState.putString(STATE_ACC_FILTER, Data.accountFilter.getValue());
     }
     @Override
     protected void onDestroy() {
@@ -133,9 +124,6 @@ public class MainActivity extends ProfileThemedActivity {
         barDrawerToggle = null;
         if (mViewPager != null) mViewPager.removeOnPageChangeListener(pageChangeListener);
         pageChangeListener = null;
-        if (mProfileListAdapter != null)
-            mProfileListAdapter.deleteEditingProfilesObserver(editingProfilesObserver);
-        editingProfilesObserver = null;
         super.onDestroy();
     }
     @Override
@@ -148,6 +136,11 @@ public class MainActivity extends ProfileThemedActivity {
         storeThemeIdInPrefs(profileColor);
     }
     @Override
+    protected void onResume() {
+        super.onResume();
+        fabShouldShow();
+    }
+    @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         debug("flow", "MainActivity.onCreate()");
@@ -161,10 +154,7 @@ public class MainActivity extends ProfileThemedActivity {
         profileListHeadAddProfile = findViewById(R.id.nav_new_profile_button);
         drawer = findViewById(R.id.drawer_layout);
         bTransactionListCancelDownload = findViewById(R.id.transaction_list_cancel_download);
-        progressBar = findViewById(R.id.transaction_list_progress_bar);
-        progressLayout = findViewById(R.id.transaction_progress_layout);
-        fragmentManager = getSupportFragmentManager();
-        mSectionsPagerAdapter = new SectionsPagerAdapter(fragmentManager);
+        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
         mViewPager = findViewById(R.id.root_frame);
 
         Bundle extra = getIntent().getBundleExtra(BUNDLE_SAVED_STATE);
@@ -196,11 +186,6 @@ public class MainActivity extends ProfileThemedActivity {
             e.printStackTrace();
         }
 
-        if (progressBar == null)
-            throw new RuntimeException("Can't get hold on the transaction value progress bar");
-        if (progressLayout == null) throw new RuntimeException(
-                "Can't get hold on the transaction value progress bar layout");
-
         markDrawerItemCurrent(R.id.nav_account_summary);
 
         mViewPager.setAdapter(mSectionsPagerAdapter);
@@ -209,6 +194,7 @@ public class MainActivity extends ProfileThemedActivity {
             pageChangeListener = new ViewPager.SimpleOnPageChangeListener() {
                 @Override
                 public void onPageSelected(int position) {
+                    mCurrentPage = position;
                     switch (position) {
                         case 0:
                             markDrawerItemCurrent(R.id.nav_account_summary);
@@ -233,9 +219,8 @@ public class MainActivity extends ProfileThemedActivity {
             if (currentPage != -1) {
                 mCurrentPage = currentPage;
             }
-            mAccountFilter = savedInstanceState.getString(STATE_ACC_FILTER, null);
+            Data.accountFilter.setValue(savedInstanceState.getString(STATE_ACC_FILTER, null));
         }
-        else mAccountFilter = null;
 
         Data.lastUpdateDate.observe(this, this::updateLastUpdateDisplay);
 
@@ -254,33 +239,36 @@ public class MainActivity extends ProfileThemedActivity {
         if (mProfileListAdapter == null) mProfileListAdapter = new ProfilesRecyclerViewAdapter();
         root.setAdapter(mProfileListAdapter);
 
-        if (editingProfilesObserver == null) {
-            editingProfilesObserver = (o, arg) -> {
-                if (mProfileListAdapter.isEditingProfiles()) {
-                    profileListHeadMore.setVisibility(View.GONE);
-                    profileListHeadMore
-                            .startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_out));
-                    profileListHeadCancel.setVisibility(View.VISIBLE);
-                    profileListHeadCancel
-                            .startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in));
-                    profileListHeadAddProfile.setVisibility(View.VISIBLE);
-                    profileListHeadAddProfile
-                            .startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in));
+        mProfileListAdapter.editingProfiles.observe(this, newValue -> {
+            if (newValue) {
+                profileListHeadMore.setVisibility(View.GONE);
+                profileListHeadCancel.setVisibility(View.VISIBLE);
+                profileListHeadAddProfile.setVisibility(View.VISIBLE);
+                if (drawer.isDrawerOpen(GravityCompat.START)) {
+                    profileListHeadMore.startAnimation(
+                            AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_out));
+                    profileListHeadCancel.startAnimation(
+                            AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_in));
+                    profileListHeadAddProfile.startAnimation(
+                            AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_in));
                 }
-                else {
-                    profileListHeadCancel.setVisibility(View.GONE);
-                    profileListHeadCancel
-                            .startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_out));
-                    profileListHeadMore.setVisibility(View.VISIBLE);
-                    profileListHeadMore
-                            .startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in));
-                    profileListHeadAddProfile.setVisibility(View.GONE);
-                    profileListHeadAddProfile
-                            .startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_out));
+            }
+            else {
+                profileListHeadCancel.setVisibility(View.GONE);
+                profileListHeadMore.setVisibility(View.VISIBLE);
+                profileListHeadAddProfile.setVisibility(View.GONE);
+                if (drawer.isDrawerOpen(GravityCompat.START)) {
+                    profileListHeadCancel.startAnimation(
+                            AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_out));
+                    profileListHeadMore.startAnimation(
+                            AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_in));
+                    profileListHeadAddProfile.startAnimation(
+                            AnimationUtils.loadAnimation(MainActivity.this, R.anim.fade_out));
                 }
-            };
-            mProfileListAdapter.addEditingProfilesObserver(editingProfilesObserver);
-        }
+            }
+
+            mProfileListAdapter.notifyDataSetChanged();
+        });
 
         LinearLayoutManager llm = new LinearLayoutManager(this);
 
@@ -291,7 +279,22 @@ public class MainActivity extends ProfileThemedActivity {
         profileListHeadCancel.setOnClickListener((v) -> mProfileListAdapter.flipEditingProfiles());
         profileListHeadMoreAndCancel
                 .setOnClickListener((v) -> mProfileListAdapter.flipEditingProfiles());
-
+        if (drawerListener == null) {
+            drawerListener = new DrawerLayout.SimpleDrawerListener() {
+                @Override
+                public void onDrawerClosed(View drawerView) {
+                    super.onDrawerClosed(drawerView);
+                    mProfileListAdapter.setAnimationsEnabled(false);
+                    mProfileListAdapter.editingProfiles.setValue(false);
+                }
+                @Override
+                public void onDrawerOpened(View drawerView) {
+                    super.onDrawerOpened(drawerView);
+                    mProfileListAdapter.setAnimationsEnabled(true);
+                }
+            };
+            drawer.addDrawerListener(drawerListener);
+        }
         setupProfile();
     }
     private void scheduleDataRetrievalIfStale(Date lastUpdate) {
@@ -306,7 +309,7 @@ public class MainActivity extends ProfileThemedActivity {
         }
     }
     private void createShortcuts(List<MobileLedgerProfile> list) {
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) return;
+        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) return;
 
         List<ShortcutInfo> shortcuts = new ArrayList<>();
         int i = 0;
@@ -470,7 +473,7 @@ public class MainActivity extends ProfileThemedActivity {
     public void fabNewTransactionClicked(View view) {
         Intent intent = new Intent(this, NewTransactionActivity.class);
         startActivity(intent);
-        overridePendingTransition(R.anim.slide_in_right, R.anim.dummy);
+        overridePendingTransition(R.anim.slide_in_up, R.anim.dummy);
     }
     public void navSettingsClicked(View view) {
         Intent intent = new Intent(this, SettingsActivity.class);
@@ -528,7 +531,7 @@ public class MainActivity extends ProfileThemedActivity {
             }
             else {
                 debug("fragments", String.format(Locale.ENGLISH, "manager stack: %d",
-                        fragmentManager.getBackStackEntryCount()));
+                        getSupportFragmentManager().getBackStackEntryCount()));
 
                 super.onBackPressed();
             }
@@ -554,7 +557,7 @@ public class MainActivity extends ProfileThemedActivity {
     }
     public void onRetrieveDone(String error) {
         Data.transactionRetrievalDone();
-        progressLayout.setVisibility(View.GONE);
+        findViewById(R.id.transaction_progress_layout).setVisibility(View.GONE);
 
         if (error == null) {
             updateLastUpdateTextFromDB();
@@ -565,15 +568,18 @@ public class MainActivity extends ProfileThemedActivity {
         else Toast.makeText(this, error, Toast.LENGTH_LONG).show();
     }
     public void onRetrieveStart() {
+        ProgressBar progressBar = findViewById(R.id.transaction_list_progress_bar);
         bTransactionListCancelDownload.setEnabled(true);
-        progressBar.setIndeterminateTintList(ColorStateList.valueOf(Colors.primary));
-        progressBar.setProgressTintList(ColorStateList.valueOf(Colors.primary));
+        ColorStateList csl = Colors.getColorStateList();
+        progressBar.setIndeterminateTintList(csl);
+        progressBar.setProgressTintList(csl);
         progressBar.setIndeterminate(true);
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) progressBar.setProgress(0, false);
         else progressBar.setProgress(0);
-        progressLayout.setVisibility(View.VISIBLE);
+        findViewById(R.id.transaction_progress_layout).setVisibility(View.VISIBLE);
     }
     public void onRetrieveProgress(RetrieveTransactionsTask.Progress progress) {
+        ProgressBar progressBar = findViewById(R.id.transaction_list_progress_bar);
         if ((progress.getTotal() == RetrieveTransactionsTask.Progress.INDETERMINATE) ||
             (progress.getTotal() == 0))
         {