From 90e30fd3869e209359c1ea8ffe058b410797113b Mon Sep 17 00:00:00 2001 From: Maxime Biais Date: Wed, 17 Dec 2014 15:36:56 +0100 Subject: [PATCH 1/3] fix #103: retain menu drawer scroll position after switching activities --- .../android/ui/WPDrawerActivity.java | 12 +++++++++- .../util/ListScrollPositionManager.java | 22 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/WPDrawerActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/WPDrawerActivity.java index 7ef6206a7f1e..d00adb34ff91 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/WPDrawerActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/WPDrawerActivity.java @@ -11,6 +11,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; +import android.os.PersistableBundle; import android.support.v4.content.LocalBroadcastManager; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; @@ -48,6 +49,7 @@ import org.wordpress.android.util.BlogUtils; import org.wordpress.android.util.DeviceUtils; import org.wordpress.android.util.DisplayUtils; +import org.wordpress.android.util.ListScrollPositionManager; import org.wordpress.android.util.ToastUtils; import org.wordpress.android.util.ToastUtils.Duration; import org.wordpress.android.util.WPActivityUtils; @@ -62,6 +64,7 @@ */ public abstract class WPDrawerActivity extends ActionBarActivity { public static final int NEW_BLOG_CANCELED = 10; + public static final String SCROLL_POSITION_ID = "WPDrawerActivity"; /** * AuthenticatorRequest code used when no accounts exist, and user is prompted to add an @@ -88,6 +91,7 @@ public abstract class WPDrawerActivity extends ActionBarActivity { private DrawerAdapter mDrawerAdapter; private ListView mDrawerListView; private Spinner mBlogSpinner; + private ListScrollPositionManager mScrollPositionManager; private static final int OPENED_FROM_DRAWER_DELAY = 250; @@ -136,6 +140,7 @@ protected void onPause() { overridePendingTransition(0, 0); finish(); } + mScrollPositionManager.saveToPreferences(this, SCROLL_POSITION_ID); } @Override @@ -147,6 +152,11 @@ protected void onResume() { // Sync the toggle state after onRestoreInstanceState has occurred. mDrawerToggle.syncState(); } + mScrollPositionManager.restoreFromPreferences(this, SCROLL_POSITION_ID); + } + + @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { + super.onSaveInstanceState(outState, outPersistentState); } @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) @@ -240,7 +250,7 @@ public void onDrawerOpened(View drawerView) { View view = getLayoutInflater().inflate(R.layout.drawer_header, mDrawerListView, false); mDrawerListView.addHeaderView(view, null, false); } - + mScrollPositionManager = new ListScrollPositionManager(mDrawerListView, false); View settingsRow = findViewById(R.id.settings_row); settingsRow.setOnClickListener(new View.OnClickListener() { @Override diff --git a/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/ListScrollPositionManager.java b/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/ListScrollPositionManager.java index d60e9da6c6b2..e111a626fc72 100644 --- a/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/ListScrollPositionManager.java +++ b/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/ListScrollPositionManager.java @@ -1,5 +1,9 @@ package org.wordpress.android.util; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.preference.PreferenceManager; import android.view.View; import android.widget.ListView; @@ -33,4 +37,22 @@ public void restoreScrollOffset() { mListView.setItemChecked(mSelectedPosition, true); } } + + public void saveToPreferences(Context context, String uniqueId) { + saveScrollOffset(); + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); + Editor editor = settings.edit(); + editor.putInt("scroll-position-manager-index-" + uniqueId, mListViewScrollStateIndex); + editor.putInt("scroll-position-manager-offset-" + uniqueId, mListViewScrollStateOffset); + editor.putInt("scroll-position-manager-selected-position-" + uniqueId, mSelectedPosition); + editor.apply(); + } + + public void restoreFromPreferences(Context context, String uniqueId) { + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); + mListViewScrollStateIndex = settings.getInt("scroll-position-manager-index-" + uniqueId, 0); + mListViewScrollStateOffset = settings.getInt("scroll-position-manager-offset-" + uniqueId, 0); + mSelectedPosition = settings.getInt("scroll-position-manager-selected-position-" + uniqueId, 0); + restoreScrollOffset(); + } } From f04e47a0dab3c333f9748d59a5fc49019e6edae5 Mon Sep 17 00:00:00 2001 From: Maxime Biais Date: Mon, 22 Dec 2014 13:37:15 +0100 Subject: [PATCH 2/3] remove empty onSaveInstanceState --- .../java/org/wordpress/android/ui/WPDrawerActivity.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/WPDrawerActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/WPDrawerActivity.java index d00adb34ff91..4326ddf1da47 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/WPDrawerActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/WPDrawerActivity.java @@ -64,8 +64,7 @@ */ public abstract class WPDrawerActivity extends ActionBarActivity { public static final int NEW_BLOG_CANCELED = 10; - public static final String SCROLL_POSITION_ID = "WPDrawerActivity"; - + private static final String SCROLL_POSITION_ID = "WPDrawerActivity"; /** * AuthenticatorRequest code used when no accounts exist, and user is prompted to add an * account. @@ -155,10 +154,6 @@ protected void onResume() { mScrollPositionManager.restoreFromPreferences(this, SCROLL_POSITION_ID); } - @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { - super.onSaveInstanceState(outState, outPersistentState); - } - @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) protected boolean isActivityDestroyed() { return (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && isDestroyed()); From 0a356a9212d74749f875e91321eeb7525a05799d Mon Sep 17 00:00:00 2001 From: Maxime Biais Date: Mon, 22 Dec 2014 14:41:19 +0100 Subject: [PATCH 3/3] remove unused import --- .../src/main/java/org/wordpress/android/ui/WPDrawerActivity.java | 1 - 1 file changed, 1 deletion(-) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/WPDrawerActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/WPDrawerActivity.java index 4326ddf1da47..f2d611bda0b9 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/WPDrawerActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/WPDrawerActivity.java @@ -11,7 +11,6 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.os.PersistableBundle; import android.support.v4.content.LocalBroadcastManager; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout;