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;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
+import androidx.appcompat.app.AlertDialog;
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.fragment.app.FragmentActivity;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
-import androidx.viewpager.widget.ViewPager;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+import androidx.viewpager2.widget.ViewPager2;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import net.ktnx.mobileledger.model.MobileLedgerProfile;
import net.ktnx.mobileledger.ui.MainModel;
import net.ktnx.mobileledger.ui.account_summary.AccountSummaryFragment;
-import net.ktnx.mobileledger.ui.profiles.ProfileDetailFragment;
import net.ktnx.mobileledger.ui.profiles.ProfilesRecyclerViewAdapter;
import net.ktnx.mobileledger.ui.transaction_list.TransactionListFragment;
import net.ktnx.mobileledger.utils.Colors;
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";
DrawerLayout drawer;
private View profileListHeadMore, profileListHeadCancel, profileListHeadAddProfile;
private View bTransactionListCancelDownload;
private SectionsPagerAdapter mSectionsPagerAdapter;
- private ViewPager mViewPager;
+ private ViewPager2 mViewPager;
private FloatingActionButton fab;
private ProfilesRecyclerViewAdapter mProfileListAdapter;
private int mCurrentPage;
private Toolbar mToolbar;
private DrawerLayout.SimpleDrawerListener drawerListener;
private ActionBarDrawerToggle barDrawerToggle;
- private ViewPager.SimpleOnPageChangeListener pageChangeListener;
+ private ViewPager2.OnPageChangeCallback pageChangeCallback;
private MobileLedgerProfile profile;
private MainModel mainModel;
@Override
drawer.removeDrawerListener(barDrawerToggle);
barDrawerToggle = null;
if (mViewPager != null)
- mViewPager.removeOnPageChangeListener(pageChangeListener);
- pageChangeListener = null;
+ mViewPager.unregisterOnPageChangeCallback(pageChangeCallback);
+ pageChangeCallback = null;
super.onDestroy();
}
@Override
- protected void setupProfileColors() {
- 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 onResume() {
super.onResume();
fabShouldShow();
profileListHeadAddProfile = findViewById(R.id.nav_new_profile_button);
drawer = findViewById(R.id.drawer_layout);
bTransactionListCancelDownload = findViewById(R.id.transaction_list_cancel_download);
- mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
+ mSectionsPagerAdapter = new SectionsPagerAdapter(this);
mViewPager = findViewById(R.id.root_frame);
Bundle extra = getIntent().getBundleExtra(BUNDLE_SAVED_STATE);
mViewPager.setAdapter(mSectionsPagerAdapter);
- if (pageChangeListener == null) {
- pageChangeListener = new ViewPager.SimpleOnPageChangeListener() {
+ if (pageChangeCallback == null) {
+ pageChangeCallback = new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
mCurrentPage = position;
super.onPageSelected(position);
}
};
- mViewPager.addOnPageChangeListener(pageChangeListener);
+ mViewPager.registerOnPageChangeCallback(pageChangeCallback);
}
mCurrentPage = 0;
}
findViewById(R.id.btn_no_profiles_add).setOnClickListener(
- v -> startEditProfileActivity(null));
+ v -> MobileLedgerProfile.startEditProfileActivity(this, null));
findViewById(R.id.btn_add_transaction).setOnClickListener(this::fabNewTransactionClicked);
findViewById(R.id.nav_new_profile_button).setOnClickListener(
- v -> startEditProfileActivity(null));
+ v -> MobileLedgerProfile.startEditProfileActivity(this, null));
+
+ findViewById(R.id.transaction_list_cancel_download).setOnClickListener(
+ this::onStopTransactionRefreshClick);
RecyclerView root = findViewById(R.id.nav_profile_list);
if (root == null)
mProfileListAdapter.notifyDataSetChanged();
+ mainModel.clearAccounts();
mainModel.clearTransactions();
if (haveProfile) {
updateLastUpdateTextFromDB();
}
private void profileThemeChanged() {
- storeThemeIdInPrefs(profile.getThemeHue());
-
// un-hook all observed LiveData
Data.removeProfileObservers(this);
Data.profiles.removeObservers(this);
recreate();
}
- 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();
- if (profile != null) {
- int index = Data.getProfileIndex(profile);
- if (index != -1)
- intent.putExtra(ProfileDetailFragment.ARG_ITEM_ID, index);
- }
- intent.putExtras(args);
- startActivity(intent, args);
- }
public void fabNewTransactionClicked(View view) {
Intent intent = new Intent(this, NewTransactionActivity.class);
startActivity(intent);
mainModel.transactionRetrievalDone();
- if (progress.getError() != null) {
- Snackbar.make(mViewPager, progress.getError(), Snackbar.LENGTH_LONG)
- .show();
+ String error = progress.getError();
+ if (error != null) {
+ if (error.equals(RetrieveTransactionsTask.Result.ERR_JSON_PARSER_ERROR))
+ error = getResources().getString(R.string.err_json_parser_error);
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setMessage(error);
+ builder.setPositiveButton(R.string.btn_profile_options, (dialog, which) -> {
+ Logger.debug("error", "will start profile editor");
+ MobileLedgerProfile.startEditProfileActivity(this, profile);
+ });
+ builder.create()
+ .show();
return;
}
fab.hide();
}
- public static class SectionsPagerAdapter extends FragmentPagerAdapter {
+ public static class SectionsPagerAdapter extends FragmentStateAdapter {
- SectionsPagerAdapter(FragmentManager fm) {
- super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
+ public SectionsPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
+ super(fragmentActivity);
}
-
@NotNull
@Override
- public Fragment getItem(int position) {
+ public Fragment createFragment(int position) {
Logger.debug("main",
String.format(Locale.ENGLISH, "Switching to fragment %d", position));
switch (position) {
}
@Override
- public int getCount() {
+ public int getItemCount() {
return 2;
}
}