OSDN Git Service

Saving the stack state when you rotate.
authorWinson Chung <winsonc@google.com>
Fri, 11 Dec 2015 15:25:46 +0000 (10:25 -0500)
committerWinson Chung <winsonc@google.com>
Mon, 14 Dec 2015 15:39:01 +0000 (10:39 -0500)
- Saving the focus and stack scroll, along with
  the history visibility on configuration change.

Change-Id: I159d2f0f6c58dac46cb3b16ee4d9e17c426ffb35

packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java

index 384b86f..152e015 100644 (file)
@@ -87,6 +87,9 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
     private final static String TAG = "RecentsActivity";
     private final static boolean DEBUG = false;
 
+    private final static String KEY_SAVED_STATE_HISTORY_VISIBLE =
+            "saved_instance_state_history_visible";
+
     public final static int EVENT_BUS_PRIORITY = Recents.EVENT_BUS_PRIORITY + 1;
 
     private RecentsPackageMonitor mPackageMonitor;
@@ -515,6 +518,25 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD
     }
 
     @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putBoolean(KEY_SAVED_STATE_HISTORY_VISIBLE,
+                (mHistoryView != null) && mHistoryView.isVisible());
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Bundle savedInstanceState) {
+        super.onRestoreInstanceState(savedInstanceState);
+        if (savedInstanceState.getBoolean(KEY_SAVED_STATE_HISTORY_VISIBLE, false)) {
+            ReferenceCountedTrigger postHideStackAnimationTrigger =
+                    Tnew ReferenceCountedTrigger(this);
+            postHideStackAnimationTrigger.increment();
+            EventBus.getDefault().send(new ShowHistoryEvent(postHideStackAnimationTrigger));
+            postHideStackAnimationTrigger.decrement();
+        }
+    }
+
+    @Override
     public void onTrimMemory(int level) {
         RecentsTaskLoader loader = Recents.getTaskLoader();
         if (loader != null) {
index 350bc2b..b155182 100644 (file)
@@ -27,6 +27,7 @@ import android.graphics.RectF;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.GradientDrawable;
 import android.os.Bundle;
+import android.os.Parcelable;
 import android.util.IntProperty;
 import android.util.Log;
 import android.util.Property;
@@ -91,6 +92,12 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
     private final static String TAG = "TaskStackView";
     private final static boolean DEBUG = false;
 
+    private final static String KEY_SAVED_STATE_SUPER = "saved_instance_state_super";
+    private final static String KEY_SAVED_STATE_LAYOUT_FOCUSED_STATE =
+            "saved_instance_state_layout_focused_state";
+    private final static String KEY_SAVED_STATE_LAYOUT_STACK_SCROLL =
+            "saved_instance_state_layout_stack_scroll";
+
     // The thresholds at which to show/hide the history button.
     private static final float SHOW_HISTORY_BUTTON_SCROLL_THRESHOLD = 0.3f;
     private static final float HIDE_HISTORY_BUTTON_SCROLL_THRESHOLD = 0.3f;
@@ -828,6 +835,24 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
     }
 
     @Override
+    protected Parcelable onSaveInstanceState() {
+        Bundle savedState = new Bundle();
+        savedState.putParcelable(KEY_SAVED_STATE_SUPER, super.onSaveInstanceState());
+        savedState.putFloat(KEY_SAVED_STATE_LAYOUT_FOCUSED_STATE, mLayoutAlgorithm.getFocusState());
+        savedState.putFloat(KEY_SAVED_STATE_LAYOUT_STACK_SCROLL, mStackScroller.getStackScroll());
+        return super.onSaveInstanceState();
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Parcelable state) {
+        Bundle savedState = (Bundle) state;
+        super.onRestoreInstanceState(savedState.getParcelable(KEY_SAVED_STATE_SUPER));
+
+        mLayoutAlgorithm.setFocusState(savedState.getFloat(KEY_SAVED_STATE_LAYOUT_FOCUSED_STATE));
+        mStackScroller.setStackScroll(savedState.getFloat(KEY_SAVED_STATE_LAYOUT_STACK_SCROLL));
+    }
+
+    @Override
     public CharSequence getAccessibilityClassName() {
         return TaskStackView.class.getName();
     }