X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Factivity%2FMainActivity.java;h=12957e97e9e7c8e02c14e37ba674f40456433a8f;hp=199347a40eca617b80551e14c51030ddc22d21bc;hb=abf0d185f5a4abec2111108b8ea27b3f70bb553d;hpb=d45f5704a4eb4acceb85d46a2ed23bd62623e10b diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java b/app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java index 199347a4..12957e97 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/activity/MainActivity.java @@ -32,7 +32,6 @@ import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.ViewPropertyAnimator; -import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.LinearLayout; import android.widget.ProgressBar; @@ -67,7 +66,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; @@ -89,8 +87,7 @@ public class MainActivity extends ProfileThemedActivity { private static final String PREF_THEME_ID = "themeId"; public AccountSummaryFragment mAccountSummaryFragment; DrawerLayout drawer; - private LinearLayout profileListContainer; - private View profileListHeadArrow, profileListHeadMore, profileListHeadCancel; + private View profileListHeadMore, profileListHeadCancel, profileListHeadAddProfile; private FragmentManager fragmentManager; private View bTransactionListCancelDownload; private ProgressBar progressBar; @@ -98,7 +95,6 @@ public class MainActivity extends ProfileThemedActivity { private SectionsPagerAdapter mSectionsPagerAdapter; private ViewPager mViewPager; private FloatingActionButton fab; - private boolean profileListExpanded = false; private ProfilesRecyclerViewAdapter mProfileListAdapter; private int mCurrentPage; private String mAccountFilter; @@ -107,7 +103,6 @@ public class MainActivity extends ProfileThemedActivity { private DrawerLayout.SimpleDrawerListener drawerListener; private ActionBarDrawerToggle barDrawerToggle; private ViewPager.SimpleOnPageChangeListener pageChangeListener; - private Observer editingProfilesObserver; private MobileLedgerProfile profile; @Override protected void onStart() { @@ -136,9 +131,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 @@ -157,12 +149,11 @@ public class MainActivity extends ProfileThemedActivity { setContentView(R.layout.activity_main); fab = findViewById(R.id.btn_add_transaction); - profileListContainer = findViewById(R.id.nav_profile_list_container); - profileListHeadArrow = findViewById(R.id.nav_profiles_arrow); profileListHeadMore = findViewById(R.id.nav_profiles_start_edit); profileListHeadCancel = findViewById(R.id.nav_profiles_cancel_edit); LinearLayout profileListHeadMoreAndCancel = findViewById(R.id.nav_profile_list_head_buttons); + 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); @@ -258,31 +249,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)); + 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.GONE); - if (profileListExpanded) { - profileListHeadMore.setVisibility(View.VISIBLE); - profileListHeadMore - .startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in)); - } - else profileListHeadMore.setVisibility(View.GONE); + } + 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); @@ -293,21 +289,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); - collapseProfileList(); + mProfileListAdapter.setAnimationsEnabled(false); + mProfileListAdapter.editingProfiles.setValue(false); + } + @Override + public void onDrawerOpened(View drawerView) { + super.onDrawerOpened(drawerView); + mProfileListAdapter.setAnimationsEnabled(true); } }; drawer.addDrawerListener(drawerListener); } - - findViewById(R.id.nav_profile_list_head_layout) - .setOnClickListener(this::navProfilesHeadClicked); - findViewById(R.id.nav_profiles_label).setOnClickListener(this::navProfilesHeadClicked); setupProfile(); } private void scheduleDataRetrievalIfStale(Date lastUpdate) { @@ -342,6 +339,14 @@ public class MainActivity extends ProfileThemedActivity { sm.setDynamicShortcuts(shortcuts); } private void onProfileListChanged(List newList) { + if (newList == null) { + // profiles not yet loaded from DB + findViewById(R.id.loading_layout).setVisibility(View.VISIBLE); + findViewById(R.id.no_profiles_layout).setVisibility(View.GONE); + findViewById(R.id.pager_layout).setVisibility(View.GONE); + return; + } + if (newList.isEmpty()) { findViewById(R.id.no_profiles_layout).setVisibility(View.VISIBLE); findViewById(R.id.pager_layout).setVisibility(View.GONE); @@ -361,7 +366,9 @@ public class MainActivity extends ProfileThemedActivity { createShortcuts(newList); } - /** called when the current profile has changed */ + /** + * called when the current profile has changed + */ private void onProfileChanged(MobileLedgerProfile profile) { boolean haveProfile = profile != null; findViewById(R.id.no_profiles_layout).setVisibility(haveProfile ? View.GONE : View.VISIBLE); @@ -385,7 +392,6 @@ public class MainActivity extends ProfileThemedActivity { // data sets below return; } - collapseProfileList(); drawer.closeDrawers(); @@ -464,7 +470,7 @@ public class MainActivity extends ProfileThemedActivity { startActivity(intent, args); } private void setupProfile() { - MLDB.getOption(MLDB.OPT_PROFILE_UUID, null, new GetOptCallback(){ + MLDB.getOption(MLDB.OPT_PROFILE_UUID, null, new GetOptCallback() { @Override protected void onResult(String profileUUID) { MobileLedgerProfile startupProfile; @@ -542,7 +548,9 @@ public class MainActivity extends ProfileThemedActivity { } } public void updateLastUpdateTextFromDB() { - long last_update = (profile != null) ? profile.getLongOption(MLDB.OPT_LAST_SCRAPE, 0L) : 0; + if (profile == null) return; + + long last_update = profile.getLongOption(MLDB.OPT_LAST_SCRAPE, 0L); debug("transactions", String.format(Locale.ENGLISH, "Last update = %d", last_update)); if (last_update == 0) { @@ -602,75 +610,6 @@ public class MainActivity extends ProfileThemedActivity { public void fabHide() { fab.hide(); } - public void navProfilesHeadClicked(View view) { - if (profileListExpanded) { - collapseProfileList(); - } - else { - expandProfileList(); - } - } - private void expandProfileList() { - profileListExpanded = true; - - - profileListContainer.setVisibility(View.VISIBLE); - profileListContainer.startAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_down)); - profileListHeadArrow.startAnimation(AnimationUtils.loadAnimation(this, R.anim.rotate_180)); - profileListHeadMore.setVisibility(View.VISIBLE); - profileListHeadMore.startAnimation(AnimationUtils.loadAnimation(this, R.anim.fade_in)); - final ArrayList profiles = Data.profiles.getValue(); - findViewById(R.id.nav_profile_list).setMinimumHeight( - (int) (getResources().getDimension(R.dimen.thumb_row_height) * - (profiles != null ? profiles.size() : 0))); - } - private void collapseProfileList() { - boolean wasExpanded = profileListExpanded; - profileListExpanded = false; - - if (wasExpanded) { - final Animation animation = AnimationUtils.loadAnimation(this, R.anim.slide_up); - animation.setAnimationListener(new Animation.AnimationListener() { - @Override - public void onAnimationStart(Animation animation) { - - } - @Override - public void onAnimationEnd(Animation animation) { - profileListContainer.setVisibility(View.GONE); - } - @Override - public void onAnimationRepeat(Animation animation) { - - } - }); - mProfileListAdapter.stopEditingProfiles(); - - profileListContainer.startAnimation(animation); - profileListHeadArrow.setRotation(0f); - profileListHeadArrow - .startAnimation(AnimationUtils.loadAnimation(this, R.anim.rotate_180_back)); - final Animation moreAnimation = AnimationUtils.loadAnimation(this, R.anim.fade_out); - moreAnimation.setAnimationListener(new Animation.AnimationListener() { - @Override - public void onAnimationStart(Animation animation) { - } - @Override - public void onAnimationEnd(Animation animation) { - profileListHeadMore.setVisibility(View.GONE); - } - @Override - public void onAnimationRepeat(Animation animation) { - } - }); - profileListHeadMore.startAnimation(moreAnimation); - } - else { - profileListContainer.setVisibility(View.GONE); - profileListHeadArrow.setRotation(0f); - profileListHeadMore.setVisibility(View.GONE); - } - } public void onAccountSummaryRowViewClicked(View view) { ViewGroup row; if (view.getId() == R.id.account_expander) row = (ViewGroup) view.getParent().getParent();