Making stack visibility more specific to the launching tasks.
- When going from freeform -> overview, hide all freeform tasks until
the final frame of the enter transition, if the stack we are
launching to/from is in the freeform stack
- When going from overview -> freeform, hide all freeform tasks after
the first frame of the exit transition, if we are launching a task
in the freeform stack
- Separate the dragging gesture from the freeform launch visibility
Bug: 25842568
Change-Id: Ibcd17a02eeb70244ac73f599b8c23c71d22f73fd
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
index e65480c..b75115c 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
@@ -36,11 +36,13 @@
import com.android.systemui.R;
import com.android.systemui.recents.Recents;
import com.android.systemui.recents.RecentsActivity;
+import com.android.systemui.recents.RecentsActivityLaunchState;
import com.android.systemui.recents.RecentsAppWidgetHostView;
import com.android.systemui.recents.RecentsConfiguration;
import com.android.systemui.recents.events.EventBus;
import com.android.systemui.recents.events.activity.CancelEnterRecentsWindowAnimationEvent;
import com.android.systemui.recents.events.activity.DismissRecentsToHomeAnimationStarted;
+import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent;
import com.android.systemui.recents.events.ui.DraggingInRecentsEndedEvent;
import com.android.systemui.recents.events.ui.DraggingInRecentsEvent;
import com.android.systemui.recents.events.ui.dragndrop.DragDropTargetChangedEvent;
@@ -64,14 +66,13 @@
private static final String TAG = "RecentsView";
private static final boolean DEBUG = false;
- private int mStackViewVisibility = View.VISIBLE;
-
LayoutInflater mInflater;
Handler mHandler;
- ArrayList<TaskStack> mStacks;
TaskStackView mTaskStackView;
RecentsAppWidgetHostView mSearchBar;
+ boolean mAwaitingFirstLayout = true;
+ boolean mLastTaskLaunchedWasFreeform;
RecentsTransitionHelper mTransitionHelper;
RecentsViewTouchHandler mTouchHandler;
@@ -131,12 +132,18 @@
mTaskStackView.setCallbacks(this);
addView(mTaskStackView);
}
- mTaskStackView.setVisibility(mStackViewVisibility);
// Trigger a new layout
requestLayout();
}
+ /**
+ * Returns whether the last task launched was in the freeform stack or not.
+ */
+ public boolean isLastTaskLaunchedFreeform() {
+ return mLastTaskLaunchedWasFreeform;
+ }
+
/** Gets the next task in the stack - or if the last - the top task */
public Task getNextTaskOrTopTask(Task taskToSearch) {
Task returnTask = null;
@@ -325,6 +332,17 @@
mDragView.layout(left, top, left + mDragView.getMeasuredWidth(),
top + mDragView.getMeasuredHeight());
}
+
+ if (mAwaitingFirstLayout) {
+ mAwaitingFirstLayout = false;
+
+ // If launched via dragging from the nav bar, then we should translate the whole view
+ // down offscreen
+ RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState();
+ if (launchState.launchedViaDragGesture) {
+ setTranslationY(getMeasuredHeight());
+ }
+ }
}
@Override
@@ -378,6 +396,7 @@
public void onTaskViewClicked(final TaskStackView stackView, final TaskView tv,
final TaskStack stack, final Task task, final boolean lockToTask,
final Rect bounds, int destinationStack) {
+ mLastTaskLaunchedWasFreeform = SystemServicesProxy.isFreeformStack(task.key.stackId);
mTransitionHelper.launchTaskFromRecents(stack, task, stackView, tv, lockToTask, bounds,
destinationStack);
}
@@ -467,7 +486,6 @@
}
public final void onBusEvent(DraggingInRecentsEvent event) {
- setStackViewVisibility(View.VISIBLE);
setTranslationY(event.distanceFromTop - mTaskStackView.getTaskViews().get(0).getY());
}
@@ -501,11 +519,11 @@
}
}
- public void setStackViewVisibility(int stackViewVisibility) {
- mStackViewVisibility = stackViewVisibility;
- if (mTaskStackView != null) {
- mTaskStackView.setVisibility(stackViewVisibility);
- invalidate();
+ public final void onBusEvent(RecentsVisibilityChangedEvent event) {
+ if (!event.visible) {
+ // Reset the view state
+ mAwaitingFirstLayout = true;
+ mLastTaskLaunchedWasFreeform = false;
}
}
}