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=d7447f070c86262fa885eaba61ae40e105ad995a;hp=e43970d229594a7a3377fd25b8ca6f14f6305219;hb=3e32f8fd2bd81f5a17545db7f6235640179eecc9;hpb=558fbcc35918d8fb106a3f7e5cad7c70650dfb59 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 e43970d2..d7447f07 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 @@ -18,6 +18,7 @@ package net.ktnx.mobileledger.ui.activity; import android.content.Intent; +import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; @@ -31,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; @@ -66,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; @@ -85,10 +84,10 @@ public class MainActivity extends ProfileThemedActivity { public static final String STATE_CURRENT_PAGE = "current_page"; public static final String BUNDLE_SAVED_STATE = "bundle_savedState"; public static final String STATE_ACC_FILTER = "account_filter"; + 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; @@ -96,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; @@ -105,13 +103,14 @@ 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() { super.onStart(); - debug("flow", "MainActivity.onStart()"); + debug("flow", String.format(Locale.ENGLISH, + "MainActivity.onStart(), currentPage is %d, accountFilter is %s", mCurrentPage, + (mAccountFilter == null) ? "" : mAccountFilter)); mViewPager.setCurrentItem(mCurrentPage, false); if (mAccountFilter != null) showTransactionsFragment(mAccountFilter); else Data.accountFilter.setValue(null); @@ -134,16 +133,16 @@ 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 protected void setupProfileColors() { - int profileColor = Data.retrieveCurrentThemeIdFromDb(); + SharedPreferences prefs = getPreferences(MODE_PRIVATE); + int profileColor = prefs.getInt(PREF_THEME_ID, -2); + if (profileColor == -2) profileColor = Data.retrieveCurrentThemeIdFromDb(); Colors.setupTheme(this, profileColor); Colors.profileThemeId = profileColor; + storeThemeIdInPrefs(profileColor); } @Override protected void onCreate(Bundle savedInstanceState) { @@ -152,12 +151,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); @@ -253,31 +251,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); @@ -288,21 +291,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) { @@ -337,6 +341,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); @@ -356,7 +368,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); @@ -380,7 +394,6 @@ public class MainActivity extends ProfileThemedActivity { // data sets below return; } - collapseProfileList(); drawer.closeDrawers(); @@ -427,6 +440,9 @@ public class MainActivity extends ProfileThemedActivity { private void profileThemeChanged() { Bundle bundle = new Bundle(); onSaveInstanceState(bundle); + + storeThemeIdInPrefs(profile.getThemeId()); + // restart activity to reflect theme change finish(); @@ -438,6 +454,13 @@ public class MainActivity extends ProfileThemedActivity { intent.putExtra(BUNDLE_SAVED_STATE, bundle); startActivity(intent); } + private void storeThemeIdInPrefs(int themeId) { + // store the new theme id in the preferences + SharedPreferences prefs = getPreferences(MODE_PRIVATE); + SharedPreferences.Editor e = prefs.edit(); + e.putInt(PREF_THEME_ID, themeId); + e.apply(); + } public void startEditProfileActivity(MobileLedgerProfile profile) { Intent intent = new Intent(this, ProfileDetailActivity.class); Bundle args = new Bundle(); @@ -449,7 +472,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; @@ -527,7 +550,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) { @@ -587,75 +612,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();