diff options
author | Ed Heyl <ed@google.com> | 2012-07-25 14:56:52 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-07-25 14:56:52 -0700 |
commit | 524809ba1d68b2a0164e399a490df8e63eda8258 (patch) | |
tree | d6cbdae9db2a74f3c73681bcebf4acf328b38731 | |
parent | 0f76b9ad711221725b8b7fa1d2f396a35e8daeb2 (diff) | |
parent | 90abcc94258ba9d9c8b68ac9764b6ab1eba12985 (diff) | |
download | packages_apps_trebuchet-524809ba1d68b2a0164e399a490df8e63eda8258.zip packages_apps_trebuchet-524809ba1d68b2a0164e399a490df8e63eda8258.tar.gz packages_apps_trebuchet-524809ba1d68b2a0164e399a490df8e63eda8258.tar.bz2 |
am 90abcc94: resolved conflicts w/0ede734d0780a968c9c345f99a18f9f8b9fc02cd
* commit '90abcc94258ba9d9c8b68ac9764b6ab1eba12985':
Ensuring that restoreInstanceState is being called promptly for synchronously bound page
-rw-r--r-- | src/com/android/launcher2/CellLayout.java | 7 | ||||
-rw-r--r-- | src/com/android/launcher2/Launcher.java | 19 | ||||
-rw-r--r-- | src/com/android/launcher2/LauncherModel.java | 12 | ||||
-rw-r--r-- | src/com/android/launcher2/Workspace.java | 30 |
4 files changed, 61 insertions, 7 deletions
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java index 3ad1336..fe69e9f 100644 --- a/src/com/android/launcher2/CellLayout.java +++ b/src/com/android/launcher2/CellLayout.java @@ -19,6 +19,7 @@ package com.android.launcher2; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; +import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; @@ -36,8 +37,10 @@ import android.graphics.Rect; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.NinePatchDrawable; +import android.os.Parcelable; import android.util.AttributeSet; import android.util.Log; +import android.util.SparseArray; import android.view.MotionEvent; import android.view.View; import android.view.ViewDebug; @@ -540,6 +543,10 @@ public class CellLayout extends ViewGroup { return false; } + public void restoreInstanceState(SparseArray<Parcelable> states) { + dispatchRestoreInstanceState(states); + } + @Override public void cancelLongPress() { super.cancelLongPress(); diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index f31f82e..f8226d7 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -280,6 +280,8 @@ public final class Launcher extends Activity private static Drawable.ConstantState[] sVoiceSearchIcon = new Drawable.ConstantState[2]; private static Drawable.ConstantState[] sAppMarketIcon = new Drawable.ConstantState[2]; + private final ArrayList<Integer> mSynchronouslyBoundPages = new ArrayList<Integer>(); + static final ArrayList<String> sDumpLogs = new ArrayList<String>(); // We only want to get the SharedPreferences once since it does an FS stat each time we get @@ -1428,9 +1430,11 @@ public final class Launcher extends Activity } @Override - protected void onRestoreInstanceState(Bundle savedInstanceState) { - // Do not call super here - mSavedInstanceState = savedInstanceState; + public void onRestoreInstanceState(Bundle state) { + super.onRestoreInstanceState(state); + for (int page: mSynchronouslyBoundPages) { + mWorkspace.restoreInstanceStateForChild(page); + } } @Override @@ -3360,6 +3364,10 @@ public final class Launcher extends Activity } } + public void onPageBoundSynchronously(int page) { + mSynchronouslyBoundPages.add(page); + } + /** * Callback saying that there aren't any more items to bind. * @@ -3375,10 +3383,7 @@ public final class Launcher extends Activity mSavedState = null; } - if (mSavedInstanceState != null) { - super.onRestoreInstanceState(mSavedInstanceState); - mSavedInstanceState = null; - } + mWorkspace.restoreInstanceStateForRemainingPages(); // If we received the result of any pending adds while the loader was running (e.g. the // widget configuration forced an orientation change), process them now. diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java index 3e214e6..637f68c 100644 --- a/src/com/android/launcher2/LauncherModel.java +++ b/src/com/android/launcher2/LauncherModel.java @@ -155,6 +155,7 @@ public class LauncherModel extends BroadcastReceiver { public boolean isAllAppsVisible(); public boolean isAllAppsButtonRank(int rank); public void bindSearchablesChanged(); + public void onPageBoundSynchronously(int page); } LauncherModel(LauncherApplication app, IconCache iconCache) { @@ -1710,6 +1711,17 @@ public class LauncherModel extends BroadcastReceiver { // Load items on the current page bindWorkspaceItems(oldCallbacks, currentWorkspaceItems, currentAppWidgets, currentFolders, null); + if (isLoadingSynchronously) { + r = new Runnable() { + public void run() { + Callbacks callbacks = tryGetCallbacks(oldCallbacks); + if (callbacks != null) { + callbacks.onPageBoundSynchronously(currentScreen); + } + } + }; + runOnMainThread(r); + } // Load all the remaining pages (if we are loading synchronously, we want to defer this // work until after the first render) diff --git a/src/com/android/launcher2/Workspace.java b/src/com/android/launcher2/Workspace.java index 2e35261..d1d47f5 100644 --- a/src/com/android/launcher2/Workspace.java +++ b/src/com/android/launcher2/Workspace.java @@ -43,6 +43,7 @@ import android.os.IBinder; import android.os.Parcelable; import android.util.AttributeSet; import android.util.Log; +import android.util.SparseArray; import android.view.Display; import android.view.MotionEvent; import android.view.View; @@ -224,6 +225,9 @@ public class Workspace extends SmoothPagedView private int mLastReorderX = -1; private int mLastReorderY = -1; + private SparseArray<Parcelable> mSavedStates; + private final ArrayList<Integer> mRestoredPages = new ArrayList<Integer>(); + // These variables are used for storing the initial and final values during workspace animations private int mSavedScrollX; private float mSavedRotationY; @@ -3420,6 +3424,32 @@ public class Workspace extends SmoothPagedView } @Override + protected void dispatchRestoreInstanceState(SparseArray<Parcelable> container) { + // We don't dispatch restoreInstanceState to our children using this code path. + // Some pages will be restored immediately as their items are bound immediately, and + // others we will need to wait until after their items are bound. + mSavedStates = container; + } + + public void restoreInstanceStateForChild(int child) { + if (mSavedStates != null) { + mRestoredPages.add(child); + CellLayout cl = (CellLayout) getChildAt(child); + cl.restoreInstanceState(mSavedStates); + } + } + + public void restoreInstanceStateForRemainingPages() { + int count = getChildCount(); + for (int i = 0; i < count; i++) { + if (!mRestoredPages.contains(i)) { + restoreInstanceStateForChild(i); + } + } + mRestoredPages.clear(); + } + + @Override public void scrollLeft() { if (!isSmall() && !mIsSwitchingState) { super.scrollLeft(); |