From 247f1d418737814e46cf0b41387a1b969926b98e Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Fri, 6 Oct 2017 15:53:08 -0700 Subject: [PATCH] Remove unused recents freeform task code. Bug: 67510855 Test: Code removal Change-Id: I608eda163318acbb53c67ed96e3f81383b7c17c0 --- .../com/android/systemui/recents/Recents.java | 2 +- .../systemui/recents/RecentsActivity.java | 5 - .../systemui/recents/RecentsDebugFlags.java | 18 +- .../android/systemui/recents/RecentsImpl.java | 77 ++---- ...UpdateFreeformTaskViewVisibilityEvent.java | 31 --- .../systemui/recents/misc/NamedCounter.java | 39 --- .../recents/misc/SystemServicesProxy.java | 14 - .../recents/model/RecentsTaskLoadPlan.java | 3 +- .../android/systemui/recents/model/Task.java | 21 +- .../systemui/recents/model/TaskStack.java | 117 +------- .../FreeformWorkspaceLayoutAlgorithm.java | 170 ------------ .../views/RecentsTransitionHelper.java | 34 +-- .../systemui/recents/views/RecentsView.java | 10 - .../views/TaskStackAnimationHelper.java | 9 +- .../views/TaskStackLayoutAlgorithm.java | 144 +--------- .../systemui/recents/views/TaskStackView.java | 258 ++---------------- .../views/TaskStackViewTouchHandler.java | 12 - .../systemui/recents/views/TaskView.java | 8 +- .../recents/views/TaskViewHeader.java | 41 --- .../recents/views/TaskViewThumbnail.java | 12 +- .../recents/views/TaskViewTransform.java | 2 +- 21 files changed, 79 insertions(+), 948 deletions(-) delete mode 100644 packages/SystemUI/src/com/android/systemui/recents/events/ui/UpdateFreeformTaskViewVisibilityEvent.java delete mode 100644 packages/SystemUI/src/com/android/systemui/recents/misc/NamedCounter.java delete mode 100644 packages/SystemUI/src/com/android/systemui/recents/views/FreeformWorkspaceLayoutAlgorithm.java diff --git a/packages/SystemUI/src/com/android/systemui/recents/Recents.java b/packages/SystemUI/src/com/android/systemui/recents/Recents.java index b94f8e5dda011..b96bd9b2d7cbc 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/Recents.java +++ b/packages/SystemUI/src/com/android/systemui/recents/Recents.java @@ -191,7 +191,7 @@ public class Recents extends SystemUI @Override public void start() { - sDebugFlags = new RecentsDebugFlags(mContext); + sDebugFlags = new RecentsDebugFlags(); sSystemServicesProxy = SystemServicesProxy.getInstance(mContext); sConfiguration = new RecentsConfiguration(mContext); sTaskLoader = new RecentsTaskLoader(mContext); diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java index ed447c645df16..ab2181c18666f 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java @@ -79,7 +79,6 @@ import com.android.systemui.recents.events.ui.ShowApplicationInfoEvent; import com.android.systemui.recents.events.ui.ShowIncompatibleAppOverlayEvent; import com.android.systemui.recents.events.ui.StackViewScrolledEvent; import com.android.systemui.recents.events.ui.TaskViewDismissedEvent; -import com.android.systemui.recents.events.ui.UpdateFreeformTaskViewVisibilityEvent; import com.android.systemui.recents.events.ui.UserInteractionEvent; import com.android.systemui.recents.events.ui.focus.DismissFocusedTaskViewEvent; import com.android.systemui.recents.events.ui.focus.FocusNextTaskViewEvent; @@ -714,15 +713,11 @@ public class RecentsActivity extends Activity implements ViewTreeObserver.OnPreD } public final void onBusEvent(EnterRecentsWindowLastAnimationFrameEvent event) { - EventBus.getDefault().send(new UpdateFreeformTaskViewVisibilityEvent(true)); mRecentsView.getViewTreeObserver().addOnPreDrawListener(this); mRecentsView.invalidate(); } public final void onBusEvent(ExitRecentsWindowFirstAnimationFrameEvent event) { - if (mRecentsView.isLastTaskLaunchedFreeform()) { - EventBus.getDefault().send(new UpdateFreeformTaskViewVisibilityEvent(false)); - } mRecentsView.getViewTreeObserver().addOnPreDrawListener(this); mRecentsView.invalidate(); } diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsDebugFlags.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsDebugFlags.java index 75f42af1dd5e6..cb0084312b186 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsDebugFlags.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsDebugFlags.java @@ -26,7 +26,7 @@ import com.android.systemui.tuner.TunerService; /** * Tunable debug flags */ -public class RecentsDebugFlags implements TunerService.Tunable { +public class RecentsDebugFlags { public static class Static { // Enables debug drawing for the transition thumbnail @@ -50,21 +50,12 @@ public class RecentsDebugFlags implements TunerService.Tunable { public static final int MockTaskCount = 100; } - /** - * We read the prefs once when we start the activity, then update them as the tuner changes - * the flags. - */ - public RecentsDebugFlags(Context context) { - // Register all our flags, this will also call onTuningChanged() for each key, which will - // initialize the current state of each flag - } - /** * @return whether we are enabling fast toggling. */ public boolean isFastToggleRecentsEnabled() { SystemServicesProxy ssp = Recents.getSystemServices(); - if (ssp.hasFreeformWorkspaceSupport() || ssp.isTouchExplorationEnabled()) { + if (ssp.isTouchExplorationEnabled()) { return false; } return Static.EnableFastToggleTimeout; @@ -76,9 +67,4 @@ public class RecentsDebugFlags implements TunerService.Tunable { public boolean isPagingEnabled() { return Static.EnablePaging; } - - @Override - public void onTuningChanged(String key, String newValue) { - EventBus.getDefault().send(new DebugFlagsChangedEvent()); - } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java index 774e9934a4e96..4e721d715cf78 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java @@ -746,8 +746,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener stackLayout.getTaskStackBounds(displayRect, windowRect, systemInsets.top, systemInsets.left, systemInsets.right, mTmpBounds); stackLayout.reset(); - stackLayout.initialize(displayRect, windowRect, mTmpBounds, - TaskStackLayoutAlgorithm.StackState.getStackStateForStack(stack)); + stackLayout.initialize(displayRect, windowRect, mTmpBounds); } } @@ -866,61 +865,29 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener getThumbnailTransitionActivityOptions(ActivityManager.RunningTaskInfo runningTask, Rect windowOverrideRect) { final boolean isLowRamDevice = Recents.getConfiguration().isLowRamDevice; - if (runningTask != null - && runningTask.configuration.windowConfiguration.getWindowingMode() - == WINDOWING_MODE_FREEFORM) { - ArrayList specs = new ArrayList<>(); - ArrayList tasks = mDummyStackView.getStack().getStackTasks(); - TaskStackLayoutAlgorithm stackLayout = mDummyStackView.getStackAlgorithm(); - TaskStackViewScroller stackScroller = mDummyStackView.getScroller(); - mDummyStackView.updateLayoutAlgorithm(true /* boundScroll */); - mDummyStackView.updateToInitialState(); + // Update the destination rect + Task toTask = new Task(); + TaskViewTransform toTransform = getThumbnailTransitionTransform(mDummyStackView, toTask, + windowOverrideRect); - for (int i = tasks.size() - 1; i >= 0; i--) { - Task task = tasks.get(i); - if (task.isFreeformTask()) { - mTmpTransform = stackLayout.getStackTransformScreenCoordinates(task, - stackScroller.getStackScroll(), mTmpTransform, null, - windowOverrideRect); - GraphicBuffer thumbnail = drawThumbnailTransitionBitmap(task, mTmpTransform); - Rect toTaskRect = new Rect(); - mTmpTransform.rect.round(toTaskRect); - specs.add(new AppTransitionAnimationSpec(task.key.id, thumbnail, toTaskRect)); - } - } - AppTransitionAnimationSpec[] specsArray = new AppTransitionAnimationSpec[specs.size()]; - specs.toArray(specsArray); + RectF toTaskRect = toTransform.rect; + AppTransitionAnimationSpecsFuture future = + new RecentsTransitionHelper(mContext).getAppTransitionFuture( + () -> { + Rect rect = new Rect(); + toTaskRect.round(rect); + GraphicBuffer thumbnail = drawThumbnailTransitionBitmap(toTask, + toTransform); + return Lists.newArrayList(new AppTransitionAnimationSpec( + toTask.key.id, thumbnail, rect)); + }); - // For low end ram devices, wait for transition flag is reset when Recents entrance - // animation is complete instead of when the transition animation starts - return new Pair<>(ActivityOptions.makeThumbnailAspectScaleDownAnimation(mDummyStackView, - specsArray, mHandler, isLowRamDevice ? null : mResetToggleFlagListener, this), - null); - } else { - // Update the destination rect - Task toTask = new Task(); - TaskViewTransform toTransform = getThumbnailTransitionTransform(mDummyStackView, toTask, - windowOverrideRect); - - RectF toTaskRect = toTransform.rect; - AppTransitionAnimationSpecsFuture future = - new RecentsTransitionHelper(mContext).getAppTransitionFuture( - () -> { - Rect rect = new Rect(); - toTaskRect.round(rect); - GraphicBuffer thumbnail = drawThumbnailTransitionBitmap(toTask, - toTransform); - return Lists.newArrayList(new AppTransitionAnimationSpec( - toTask.key.id, thumbnail, rect)); - }); - - // For low end ram devices, wait for transition flag is reset when Recents entrance - // animation is complete instead of when the transition animation starts - return new Pair<>(ActivityOptions.makeMultiThumbFutureAspectScaleAnimation(mContext, - mHandler, future.getFuture(), isLowRamDevice ? null : mResetToggleFlagListener, - false /* scaleUp */), future); - } + // For low end ram devices, wait for transition flag is reset when Recents entrance + // animation is complete instead of when the transition animation starts + return new Pair<>(ActivityOptions.makeMultiThumbFutureAspectScaleAnimation(mContext, + mHandler, future.getFuture(), isLowRamDevice ? null : mResetToggleFlagListener, + false /* scaleUp */), future); } /** @@ -935,7 +902,7 @@ public class RecentsImpl implements ActivityOptions.OnAnimationFinishedListener runningTaskOut.copyFrom(launchTask); } else { // If no task is specified or we can not find the task just use the front most one - launchTask = stack.getStackFrontMostTask(true /* includeFreeform */); + launchTask = stack.getStackFrontMostTask(); runningTaskOut.copyFrom(launchTask); } diff --git a/packages/SystemUI/src/com/android/systemui/recents/events/ui/UpdateFreeformTaskViewVisibilityEvent.java b/packages/SystemUI/src/com/android/systemui/recents/events/ui/UpdateFreeformTaskViewVisibilityEvent.java deleted file mode 100644 index b42da9c7a7938..0000000000000 --- a/packages/SystemUI/src/com/android/systemui/recents/events/ui/UpdateFreeformTaskViewVisibilityEvent.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.recents.events.ui; - -import com.android.systemui.recents.events.EventBus; - -/** - * This is sent to update the visibility of all visible freeform task views. - */ -public class UpdateFreeformTaskViewVisibilityEvent extends EventBus.Event { - - public final boolean visible; - - public UpdateFreeformTaskViewVisibilityEvent(boolean visible) { - this.visible = visible; - } -} diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/NamedCounter.java b/packages/SystemUI/src/com/android/systemui/recents/misc/NamedCounter.java deleted file mode 100644 index ec3c39cc4fbcf..0000000000000 --- a/packages/SystemUI/src/com/android/systemui/recents/misc/NamedCounter.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.recents.misc; - -/** - * Used to generate successive incremented names. - */ -public class NamedCounter { - - int mCount; - String mPrefix = ""; - String mSuffix = ""; - - public NamedCounter(String prefix, String suffix) { - mPrefix = prefix; - mSuffix = suffix; - } - - /** Returns the next name. */ - public String nextName() { - String name = mPrefix + mCount + mSuffix; - mCount++; - return name; - } -} diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java index b126a56dee0ea..b1eb77d23e6e1 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java +++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java @@ -26,7 +26,6 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; -import static android.provider.Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT; import android.annotation.NonNull; import android.annotation.Nullable; @@ -46,7 +45,6 @@ import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -143,7 +141,6 @@ public class SystemServicesProxy { private int mCurrentUserId; boolean mIsSafeMode; - boolean mHasFreeformWorkspaceSupport; Bitmap mDummyIcon; int mDummyThumbnailWidth; @@ -318,10 +315,6 @@ public class SystemServicesProxy { ServiceManager.checkService(DreamService.DREAM_SERVICE)); mDisplay = mWm.getDefaultDisplay(); mRecentsPackage = context.getPackageName(); - mHasFreeformWorkspaceSupport = - mPm.hasSystemFeature(PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT) || - Settings.Global.getInt(context.getContentResolver(), - DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, 0) != 0; mIsSafeMode = mPm.isSafeMode(); mCurrentUserId = mAm.getCurrentUser(); @@ -529,13 +522,6 @@ public class SystemServicesProxy { return stackVisibleNotOccluded; } - /** - * Returns whether this device has freeform workspaces. - */ - public boolean hasFreeformWorkspaceSupport() { - return mHasFreeformWorkspaceSupport; - } - /** * Returns whether this device is in the safe mode. */ diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java index 1c2b94f57c1d6..62ba30bfd5dd8 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java +++ b/packages/SystemUI/src/com/android/systemui/recents/model/RecentsTaskLoadPlan.java @@ -100,7 +100,6 @@ public class RecentsTaskLoadPlan { * * The tasks will be ordered by: * - least-recent to most-recent stack tasks - * - least-recent to most-recent freeform tasks * * Note: Do not lock, since this can be calling back to the loader, which separately also drives * this call (callers should synchronize on the loader before making this call). @@ -155,7 +154,7 @@ public class RecentsTaskLoadPlan { Task task = new Task(taskKey, icon, thumbnail, title, titleDescription, dismissDescription, appInfoDescription, activityColor, backgroundColor, isLaunchTarget, isStackTask, isSystemApp, - t.supportsSplitScreenMultiWindow, t.bounds, t.taskDescription, t.resizeMode, + t.supportsSplitScreenMultiWindow, t.taskDescription, t.resizeMode, t.topActivity, isLocked); allTasks.add(task); diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/Task.java b/packages/SystemUI/src/com/android/systemui/recents/model/Task.java index e8d419dae5a98..ae417c0c403fd 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/model/Task.java +++ b/packages/SystemUI/src/com/android/systemui/recents/model/Task.java @@ -144,12 +144,6 @@ public class Task { @ViewDebug.ExportedProperty(category="recents") public boolean useLightOnPrimaryColor; - /** - * The bounds of the task, used only if it is a freeform task. - */ - @ViewDebug.ExportedProperty(category="recents") - public Rect bounds; - /** * The task description for this task, only used to reload task icons. */ @@ -188,7 +182,7 @@ public class Task { public Task(TaskKey key, Drawable icon, ThumbnailData thumbnail, String title, String titleDescription, String dismissDescription, String appInfoDescription, int colorPrimary, int colorBackground, boolean isLaunchTarget, boolean isStackTask, - boolean isSystemApp, boolean isDockable, Rect bounds, TaskDescription taskDescription, + boolean isSystemApp, boolean isDockable, TaskDescription taskDescription, int resizeMode, ComponentName topActivity, boolean isLocked) { this.key = key; this.icon = icon; @@ -201,7 +195,6 @@ public class Task { this.colorBackground = colorBackground; this.useLightOnPrimaryColor = Utilities.computeContrastBetweenColors(this.colorPrimary, Color.WHITE) > 3f; - this.bounds = bounds; this.taskDescription = taskDescription; this.isLaunchTarget = isLaunchTarget; this.isStackTask = isStackTask; @@ -226,7 +219,6 @@ public class Task { this.colorPrimary = o.colorPrimary; this.colorBackground = o.colorBackground; this.useLightOnPrimaryColor = o.useLightOnPrimaryColor; - this.bounds = o.bounds; this.taskDescription = o.taskDescription; this.isLaunchTarget = o.isLaunchTarget; this.isStackTask = o.isStackTask; @@ -262,14 +254,6 @@ public class Task { } } - /** - * Returns whether this task is on the freeform task stack. - */ - public boolean isFreeformTask() { - SystemServicesProxy ssp = Recents.getSystemServices(); - return ssp.hasFreeformWorkspaceSupport() && key.windowingMode == WINDOWING_MODE_FREEFORM; - } - /** Notifies the callback listeners that this task has been loaded */ public void notifyTaskDataLoaded(ThumbnailData thumbnailData, Drawable applicationIcon) { this.icon = applicationIcon; @@ -318,9 +302,6 @@ public class Task { if (isLaunchTarget) { writer.print(" launchTarget=Y"); } - if (isFreeformTask()) { - writer.print(" freeform=Y"); - } if (isLocked) { writer.print(" locked=Y"); } diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java b/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java index a0f5631cf0190..32e62cf29a4eb 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java +++ b/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java @@ -18,8 +18,6 @@ package com.android.systemui.recents.model; import static android.app.ActivityManager.DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT; import static android.app.ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT; -import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; -import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.view.WindowManager.DOCKED_BOTTOM; import static android.view.WindowManager.DOCKED_INVALID; import static android.view.WindowManager.DOCKED_LEFT; @@ -62,8 +60,6 @@ import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; import java.util.List; @@ -109,25 +105,6 @@ class FilteredTaskList { updateFilteredTasks(); } - /** - * Moves the given task. - */ - public void setTaskWindowingMode(Task task, int insertIndex, int windowingMode) { - int taskIndex = indexOf(task); - if (taskIndex != insertIndex) { - mTasks.remove(taskIndex); - if (taskIndex < insertIndex) { - insertIndex--; - } - mTasks.add(insertIndex, task); - } - - // Update the stack id now, after we've moved the task, and before we update the - // filtered tasks - task.setWindowingMode(windowingMode); - updateFilteredTasks(); - } - /** Sets the list of tasks */ void set(List tasks) { mTasks.clear(); @@ -533,19 +510,6 @@ public class TaskStack { } } - // A comparator that sorts tasks by their freeform state - private Comparator FREEFORM_COMPARATOR = new Comparator() { - @Override - public int compare(Task o1, Task o2) { - if (o1.isFreeformTask() && !o2.isFreeformTask()) { - return 1; - } else if (o2.isFreeformTask() && !o1.isFreeformTask()) { - return -1; - } - return Long.compare(o1.temporarySortIndexInStack, o2.temporarySortIndexInStack); - } - }; - ArrayList mRawTaskList = new ArrayList<>(); FilteredTaskList mStackTaskList = new FilteredTaskList(); TaskStackCallbacks mCb; @@ -565,27 +529,6 @@ public class TaskStack { mCb = cb; } - /** Sets the windowing mode for a given task. */ - public void setTaskWindowingMode(Task task, int windowingMode) { - // Find the index to insert into - ArrayList taskList = mStackTaskList.getTasks(); - int taskCount = taskList.size(); - if (!task.isFreeformTask() && (windowingMode == WINDOWING_MODE_FREEFORM)) { - // Insert freeform tasks at the front - mStackTaskList.setTaskWindowingMode(task, taskCount, windowingMode); - } else if (task.isFreeformTask() && (windowingMode == WINDOWING_MODE_FULLSCREEN)) { - // Insert after the first stacked task - int insertIndex = 0; - for (int i = taskCount - 1; i >= 0; i--) { - if (!taskList.get(i).isFreeformTask()) { - insertIndex = i + 1; - break; - } - } - mStackTaskList.setTaskWindowingMode(task, insertIndex, windowingMode); - } - } - /** * Removes a task from the stack, with an additional {@param animation} hint to the callbacks on * how they should update themselves. @@ -602,7 +545,7 @@ public class TaskStack { boolean dismissRecentsIfAllRemoved) { if (mStackTaskList.contains(t)) { mStackTaskList.remove(t); - Task newFrontMostTask = getStackFrontMostTask(false /* includeFreeform */); + Task newFrontMostTask = getStackFrontMostTask(); if (mCb != null) { // Notify that a task has been removed mCb.onStackTaskRemoved(this, t, newFrontMostTask, animation, @@ -686,14 +629,13 @@ public class TaskStack { for (int i = allTasks.size() - 1; i >= 0; i--) { allTasks.get(i).temporarySortIndexInStack = i; } - Collections.sort(allTasks, FREEFORM_COMPARATOR); mStackTaskList.set(allTasks); mRawTaskList = allTasks; // Only callback for the removed tasks after the stack has updated int removedTaskCount = removedTasks.size(); - Task newFrontMostTask = getStackFrontMostTask(false); + Task newFrontMostTask = getStackFrontMostTask(); for (int i = 0; i < removedTaskCount; i++) { mCb.onStackTaskRemoved(this, removedTasks.get(i), newFrontMostTask, AnimationProps.IMMEDIATE, false /* fromDockGesture */, @@ -715,18 +657,12 @@ public class TaskStack { /** * Gets the front-most task in the stack. */ - public Task getStackFrontMostTask(boolean includeFreeformTasks) { + public Task getStackFrontMostTask() { ArrayList stackTasks = mStackTaskList.getTasks(); if (stackTasks.isEmpty()) { return null; } - for (int i = stackTasks.size() - 1; i >= 0; i--) { - Task task = stackTasks.get(i); - if (!task.isFreeformTask() || includeFreeformTasks) { - return task; - } - } - return null; + return stackTasks.get(stackTasks.size() - 1); } /** Gets the task keys */ @@ -748,22 +684,6 @@ public class TaskStack { return mStackTaskList.getTasks(); } - /** - * Returns the set of "freeform" tasks in the stack. - */ - public ArrayList getFreeformTasks() { - ArrayList freeformTasks = new ArrayList<>(); - ArrayList tasks = mStackTaskList.getTasks(); - int taskCount = tasks.size(); - for (int i = 0; i < taskCount; i++) { - Task task = tasks.get(i); - if (task.isFreeformTask()) { - freeformTasks.add(task); - } - } - return freeformTasks; - } - /** * Computes a set of all the active and historical tasks. */ @@ -774,7 +694,7 @@ public class TaskStack { } /** - * Returns the number of stack and freeform tasks. + * Returns the number of stacktasks. */ public int getTaskCount() { return mStackTaskList.size(); @@ -784,32 +704,7 @@ public class TaskStack { * Returns the number of stack tasks. */ public int getStackTaskCount() { - ArrayList tasks = mStackTaskList.getTasks(); - int stackCount = 0; - int taskCount = tasks.size(); - for (int i = 0; i < taskCount; i++) { - Task task = tasks.get(i); - if (!task.isFreeformTask()) { - stackCount++; - } - } - return stackCount; - } - - /** - * Returns the number of freeform tasks. - */ - public int getFreeformTaskCount() { - ArrayList tasks = mStackTaskList.getTasks(); - int freeformCount = 0; - int taskCount = tasks.size(); - for (int i = 0; i < taskCount; i++) { - Task task = tasks.get(i); - if (task.isFreeformTask()) { - freeformCount++; - } - } - return freeformCount; + return mStackTaskList.size(); } /** diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/FreeformWorkspaceLayoutAlgorithm.java b/packages/SystemUI/src/com/android/systemui/recents/views/FreeformWorkspaceLayoutAlgorithm.java deleted file mode 100644 index 035c058c7e8da..0000000000000 --- a/packages/SystemUI/src/com/android/systemui/recents/views/FreeformWorkspaceLayoutAlgorithm.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.recents.views; - -import android.content.Context; -import android.graphics.RectF; -import android.util.ArrayMap; - -import com.android.systemui.R; -import com.android.systemui.recents.model.Task; - -import java.util.Collections; -import java.util.List; - -/** - * The layout logic for the contents of the freeform workspace. - */ -public class FreeformWorkspaceLayoutAlgorithm { - - // Optimization, allows for quick lookup of task -> rect - private ArrayMap mTaskRectMap = new ArrayMap<>(); - - private int mTaskPadding; - - public FreeformWorkspaceLayoutAlgorithm(Context context) { - reloadOnConfigurationChange(context); - } - - /** - * Reloads the layout for the current configuration. - */ - public void reloadOnConfigurationChange(Context context) { - // This is applied to the edges of each task - mTaskPadding = context.getResources().getDimensionPixelSize( - R.dimen.recents_freeform_layout_task_padding) / 2; - } - - /** - * Updates the layout for each of the freeform workspace tasks. This is called after the stack - * layout is updated. - */ - public void update(List freeformTasks, TaskStackLayoutAlgorithm stackLayout) { - Collections.reverse(freeformTasks); - mTaskRectMap.clear(); - - int numFreeformTasks = stackLayout.mNumFreeformTasks; - if (!freeformTasks.isEmpty()) { - - // Normalize the widths so that we can calculate the best layout below - int workspaceWidth = stackLayout.mFreeformRect.width(); - int workspaceHeight = stackLayout.mFreeformRect.height(); - float normalizedWorkspaceWidth = (float) workspaceWidth / workspaceHeight; - float normalizedWorkspaceHeight = 1f; - float[] normalizedTaskWidths = new float[numFreeformTasks]; - for (int i = 0; i < numFreeformTasks; i++) { - Task task = freeformTasks.get(i); - float rowTaskWidth; - if (task.bounds != null) { - rowTaskWidth = (float) task.bounds.width() / task.bounds.height(); - } else { - // If this is a stack task that was dragged into the freeform workspace, then - // the task will not yet have an associated bounds, so assume the full workspace - // width for the time being - rowTaskWidth = normalizedWorkspaceWidth; - } - // Bound the task width to the workspace width so that at the worst case, it will - // fit its own row - normalizedTaskWidths[i] = Math.min(rowTaskWidth, normalizedWorkspaceWidth); - } - - // Determine the scale to best fit each of the tasks in the workspace - float rowScale = 0.85f; - float rowWidth = 0f; - float maxRowWidth = 0f; - int rowCount = 1; - for (int i = 0; i < numFreeformTasks;) { - float width = normalizedTaskWidths[i] * rowScale; - if (rowWidth + width > normalizedWorkspaceWidth) { - // That is too long for this row, create new row - if ((rowCount + 1) * rowScale > normalizedWorkspaceHeight) { - // The new row is too high, so we need to try fitting again. Update the - // scale to be the smaller of the scale needed to fit the task in the - // previous row, or the scale needed to fit the new row - rowScale = Math.min(normalizedWorkspaceWidth / (rowWidth + width), - normalizedWorkspaceHeight / (rowCount + 1)); - rowCount = 1; - rowWidth = 0; - i = 0; - } else { - // The new row fits, so continue - rowWidth = width; - rowCount++; - i++; - } - } else { - // Task is OK in this row - rowWidth += width; - i++; - } - maxRowWidth = Math.max(rowWidth, maxRowWidth); - } - - // Normalize each of the actual rects to that scale - float defaultRowLeft = ((1f - (maxRowWidth / normalizedWorkspaceWidth)) * - workspaceWidth) / 2f; - float rowLeft = defaultRowLeft; - float rowTop = ((1f - (rowScale * rowCount)) * workspaceHeight) / 2f; - float rowHeight = rowScale * workspaceHeight; - for (int i = 0; i < numFreeformTasks; i++) { - Task task = freeformTasks.get(i); - float width = rowHeight * normalizedTaskWidths[i]; - if (rowLeft + width > workspaceWidth) { - // This goes on the next line - rowTop += rowHeight; - rowLeft = defaultRowLeft; - } - RectF rect = new RectF(rowLeft, rowTop, rowLeft + width, rowTop + rowHeight); - rect.inset(mTaskPadding, mTaskPadding); - rowLeft += width; - mTaskRectMap.put(task.key, rect); - } - } - } - - /** - * Returns whether the transform is available for the given task. - */ - public boolean isTransformAvailable(Task task, TaskStackLayoutAlgorithm stackLayout) { - if (stackLayout.mNumFreeformTasks == 0 || task == null) { - return false; - } - return mTaskRectMap.containsKey(task.key); - } - - /** - * Returns the transform for the given task. Any rect returned will be offset by the actual - * transform for the freeform workspace. - */ - public TaskViewTransform getTransform(Task task, TaskViewTransform transformOut, - TaskStackLayoutAlgorithm stackLayout) { - if (mTaskRectMap.containsKey(task.key)) { - final RectF ffRect = mTaskRectMap.get(task.key); - - transformOut.scale = 1f; - transformOut.alpha = 1f; - transformOut.translationZ = stackLayout.mMaxTranslationZ; - transformOut.dimAlpha = 0f; - transformOut.viewOutlineAlpha = TaskStackLayoutAlgorithm.OUTLINE_ALPHA_MAX_VALUE; - transformOut.rect.set(ffRect); - transformOut.rect.offset(stackLayout.mFreeformRect.left, stackLayout.mFreeformRect.top); - transformOut.visible = true; - return transformOut; - } - return null; - } -} diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java index 56b4e644e9108..baa5e6273e5ed 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsTransitionHelper.java @@ -19,7 +19,6 @@ package com.android.systemui.recents.views; import static android.app.WindowConfiguration.ACTIVITY_TYPE_ASSISTANT; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_RECENTS; -import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static android.app.WindowConfiguration.WINDOWING_MODE_SPLIT_SCREEN_PRIMARY; @@ -318,7 +317,6 @@ public class RecentsTransitionHelper { // If this is a full screen stack, the transition will be towards the single, full screen // task. We only need the transition spec for this task. - List specs = new ArrayList<>(); // TODO: Sometimes targetStackId is not initialized after reboot, so we also have to // check for INVALID_STACK_ID (now WINDOWING_MODE_UNDEFINED) @@ -327,6 +325,7 @@ public class RecentsTransitionHelper { || windowingMode == WINDOWING_MODE_SPLIT_SCREEN_SECONDARY || activityType == ACTIVITY_TYPE_ASSISTANT || windowingMode == WINDOWING_MODE_UNDEFINED) { + List specs = new ArrayList<>(); if (taskView == null) { specs.add(composeOffscreenAnimationSpec(task, offscreenTaskRect)); } else { @@ -340,34 +339,7 @@ public class RecentsTransitionHelper { } return specs; } - - // Otherwise, for freeform tasks, create a new animation spec for each task we have to - // launch - TaskStack stack = stackView.getStack(); - ArrayList tasks = stack.getStackTasks(); - int taskCount = tasks.size(); - for (int i = taskCount - 1; i >= 0; i--) { - Task t = tasks.get(i); - if (t.isFreeformTask() || windowingMode == WINDOWING_MODE_FREEFORM) { - TaskView tv = stackView.getChildViewForTask(t); - if (tv == null) { - // TODO: Create a different animation task rect for this case (though it should - // never happen) - specs.add(composeOffscreenAnimationSpec(t, offscreenTaskRect)); - } else { - mTmpTransform.fillIn(taskView); - stackLayout.transformToScreenCoordinates(mTmpTransform, - null /* windowOverrideRect */); - AppTransitionAnimationSpec spec = composeAnimationSpec(stackView, tv, - mTmpTransform, true /* addHeaderBitmap */); - if (spec != null) { - specs.add(spec); - } - } - } - } - - return specs; + return Collections.emptyList(); } /** @@ -451,7 +423,7 @@ public class RecentsTransitionHelper { // force the task thumbnail to full stackView height immediately causing the transition // jarring. if (!Recents.getConfiguration().isLowRamDevice && taskView.getTask() != - stackView.getStack().getStackFrontMostTask(false /* includeFreeformTasks */)) { + stackView.getStack().getStackFrontMostTask()) { taskRect.bottom = taskRect.top + stackView.getMeasuredHeight(); } return new AppTransitionAnimationSpec(taskView.getTask().key.id, b, taskRect); 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 e460bf8d74bae..e2f157eb12c60 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java @@ -110,7 +110,6 @@ public class RecentsView extends FrameLayout { private final int mStackButtonShadowColor; private boolean mAwaitingFirstLayout = true; - private boolean mLastTaskLaunchedWasFreeform; @ViewDebug.ExportedProperty(category="recents") Rect mSystemInsets = new Rect(); @@ -228,7 +227,6 @@ public class RecentsView extends FrameLayout { // Reset the state mAwaitingFirstLayout = !isResumingFromVisible; - mLastTaskLaunchedWasFreeform = false; // Update the stack mTaskStackView.onReload(isResumingFromVisible); @@ -315,13 +313,6 @@ public class RecentsView extends FrameLayout { } } - /** - * Returns whether the last task launched was in the freeform stack or not. - */ - public boolean isLastTaskLaunchedFreeform() { - return mLastTaskLaunchedWasFreeform; - } - /** Launches the focused task from the first stack if possible */ public boolean launchFocusedTask(int logEvent) { if (mTaskStackView != null) { @@ -538,7 +529,6 @@ public class RecentsView extends FrameLayout { /**** EventBus Events ****/ public final void onBusEvent(LaunchTaskEvent event) { - mLastTaskLaunchedWasFreeform = event.task.isFreeformTask(); mTransitionHelper.launchTaskFromRecents(getStack(), event.task, mTaskStackView, event.taskView, event.screenPinningRequested, event.targetWindowingMode, event.targetActivityType); diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java index f4862c3e28409..f47c1d2877bf0 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java @@ -161,17 +161,12 @@ public class TaskStackAnimationHelper { for (int i = taskViews.size() - 1; i >= 0; i--) { TaskView tv = taskViews.get(i); Task task = tv.getTask(); - boolean hideTask = launchTargetTask != null && - launchTargetTask.isFreeformTask() && - task.isFreeformTask(); // Get the current transform for the task, which will be used to position it offscreen stackLayout.getStackTransform(task, stackScroller.getStackScroll(), mTmpTransform, null); - if (hideTask) { - tv.setVisibility(View.INVISIBLE); - } else if (launchState.launchedFromApp && !launchState.launchedViaDockGesture) { + if (launchState.launchedFromApp && !launchState.launchedViaDockGesture) { if (task.isLaunchTarget) { tv.onPrepareLaunchTargetForEnterAnimation(); } else if (isLowRamDevice && i >= taskViews.size() - @@ -569,7 +564,7 @@ public class TaskStackAnimationHelper { false /* ignoreTaskOverrides */, mTmpFinalTaskTransforms); // Hide the front most task view until the scroll is complete - Task frontMostTask = newStack.getStackFrontMostTask(false /* includeFreeform */); + Task frontMostTask = newStack.getStackFrontMostTask(); final TaskView frontMostTaskView = mStackView.getChildViewForTask(frontMostTask); final TaskViewTransform frontMostTransform = mTmpFinalTaskTransforms.get( stackTasks.indexOf(frontMostTask)); diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java index b5e598dc3492f..af95b3c34f2ca 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java @@ -146,75 +146,6 @@ public class TaskStackLayoutAlgorithm { void onFocusStateChanged(int prevFocusState, int curFocusState); } - /** - * The various stack/freeform states. - */ - public static class StackState { - - public static final StackState FREEFORM_ONLY = new StackState(1f, 255); - public static final StackState STACK_ONLY = new StackState(0f, 0); - public static final StackState SPLIT = new StackState(0.5f, 255); - - public final float freeformHeightPct; - public final int freeformBackgroundAlpha; - - /** - * @param freeformHeightPct the percentage of the stack height (not including paddings) to - * allocate to the freeform workspace - * @param freeformBackgroundAlpha the background alpha for the freeform workspace - */ - private StackState(float freeformHeightPct, int freeformBackgroundAlpha) { - this.freeformHeightPct = freeformHeightPct; - this.freeformBackgroundAlpha = freeformBackgroundAlpha; - } - - /** - * Resolves the stack state for the layout given a task stack. - */ - public static StackState getStackStateForStack(TaskStack stack) { - SystemServicesProxy ssp = Recents.getSystemServices(); - boolean hasFreeformWorkspaces = ssp.hasFreeformWorkspaceSupport(); - int freeformCount = stack.getFreeformTaskCount(); - int stackCount = stack.getStackTaskCount(); - if (hasFreeformWorkspaces && stackCount > 0 && freeformCount > 0) { - return SPLIT; - } else if (hasFreeformWorkspaces && freeformCount > 0) { - return FREEFORM_ONLY; - } else { - return STACK_ONLY; - } - } - - /** - * Computes the freeform and stack rect for this state. - * - * @param freeformRectOut the freeform rect to be written out - * @param stackRectOut the stack rect, we only write out the top of the stack - * @param taskStackBounds the full rect that the freeform rect can take up - */ - public void computeRects(Rect freeformRectOut, Rect stackRectOut, - Rect taskStackBounds, int topMargin, int freeformGap, int stackBottomOffset) { - // The freeform height is the visible height (not including system insets) - padding - // above freeform and below stack - gap between the freeform and stack - int availableHeight = taskStackBounds.height() - topMargin - stackBottomOffset; - int ffPaddedHeight = (int) (availableHeight * freeformHeightPct); - int ffHeight = Math.max(0, ffPaddedHeight - freeformGap); - freeformRectOut.set(taskStackBounds.left, - taskStackBounds.top + topMargin, - taskStackBounds.right, - taskStackBounds.top + topMargin + ffHeight); - stackRectOut.set(taskStackBounds.left, - taskStackBounds.top, - taskStackBounds.right, - taskStackBounds.bottom); - if (ffPaddedHeight > 0) { - stackRectOut.top += ffPaddedHeight; - } else { - stackRectOut.top += topMargin; - } - } - } - /** * @return True if we should use the grid layout. */ @@ -234,15 +165,11 @@ public class TaskStackLayoutAlgorithm { } Context mContext; - private StackState mState = StackState.SPLIT; private TaskStackLayoutAlgorithmCallbacks mCb; // The task bounds (untransformed) for layout. This rect is anchored at mTaskRoot. @ViewDebug.ExportedProperty(category="recents") public Rect mTaskRect = new Rect(); - // The freeform workspace bounds, inset by the top system insets and is a fixed height - @ViewDebug.ExportedProperty(category="recents") - public Rect mFreeformRect = new Rect(); // The stack bounds, inset from the top system insets, and runs to the bottom of the screen @ViewDebug.ExportedProperty(category="recents") public Rect mStackRect = new Rect(); @@ -268,10 +195,6 @@ public class TaskStackLayoutAlgorithm { private int mBaseBottomMargin; private int mMinMargin; - // The gap between the freeform and stack layouts - @ViewDebug.ExportedProperty(category="recents") - private int mFreeformStackGap; - // The initial offset that the focused task is from the top @ViewDebug.ExportedProperty(category="recents") private int mInitialTopOffset; @@ -331,8 +254,6 @@ public class TaskStackLayoutAlgorithm { // The last computed task counts @ViewDebug.ExportedProperty(category="recents") int mNumStackTasks; - @ViewDebug.ExportedProperty(category="recents") - int mNumFreeformTasks; // The min/max z translations @ViewDebug.ExportedProperty(category="recents") @@ -344,8 +265,6 @@ public class TaskStackLayoutAlgorithm { private SparseIntArray mTaskIndexMap = new SparseIntArray(); private SparseArray mTaskIndexOverrideMap = new SparseArray<>(); - // The freeform workspace layout - FreeformWorkspaceLayoutAlgorithm mFreeformLayoutAlgorithm; TaskGridLayoutAlgorithm mTaskGridLayoutAlgorithm; TaskStackLowRamLayoutAlgorithm mTaskStackLowRamLayoutAlgorithm; @@ -356,7 +275,6 @@ public class TaskStackLayoutAlgorithm { public TaskStackLayoutAlgorithm(Context context, TaskStackLayoutAlgorithmCallbacks cb) { mContext = context; mCb = cb; - mFreeformLayoutAlgorithm = new FreeformWorkspaceLayoutAlgorithm(context); mTaskGridLayoutAlgorithm = new TaskGridLayoutAlgorithm(context); mTaskStackLowRamLayoutAlgorithm = new TaskStackLowRamLayoutAlgorithm(context); reloadOnConfigurationChange(context); @@ -393,7 +311,6 @@ public class TaskStackLayoutAlgorithm { R.dimen.recents_layout_initial_bottom_offset_tablet, R.dimen.recents_layout_initial_bottom_offset_tablet, R.dimen.recents_layout_initial_bottom_offset_tablet); - mFreeformLayoutAlgorithm.reloadOnConfigurationChange(context); mTaskGridLayoutAlgorithm.reloadOnConfigurationChange(context); mTaskStackLowRamLayoutAlgorithm.reloadOnConfigurationChange(context); mMinMargin = res.getDimensionPixelSize(R.dimen.recents_layout_min_margin); @@ -408,8 +325,6 @@ public class TaskStackLayoutAlgorithm { R.dimen.recents_layout_side_margin_tablet_xlarge, R.dimen.recents_layout_side_margin_tablet); mBaseBottomMargin = res.getDimensionPixelSize(R.dimen.recents_layout_bottom_margin); - mFreeformStackGap = - res.getDimensionPixelSize(R.dimen.recents_freeform_layout_bottom_margin); mTitleBarHeight = getDimensionForDevice(mContext, R.dimen.recents_task_view_header_height, R.dimen.recents_task_view_header_height, @@ -462,8 +377,7 @@ public class TaskStackLayoutAlgorithm { * Computes the stack and task rects. The given task stack bounds already has the top/right * insets and left/right padding already applied. */ - public void initialize(Rect displayRect, Rect windowRect, Rect taskStackBounds, - StackState state) { + public void initialize(Rect displayRect, Rect windowRect, Rect taskStackBounds) { Rect lastStackRect = new Rect(mStackRect); int topMargin = getScaleForExtent(windowRect, displayRect, mBaseTopMargin, mMinMargin, HEIGHT); @@ -474,10 +388,9 @@ public class TaskStackLayoutAlgorithm { mInitialBottomOffset = mBaseInitialBottomOffset; // Compute the stack bounds - mState = state; mStackBottomOffset = mSystemInsets.bottom + bottomMargin; - state.computeRects(mFreeformRect, mStackRect, taskStackBounds, topMargin, - mFreeformStackGap, mStackBottomOffset); + mStackRect.set(taskStackBounds); + mStackRect.top += topMargin; // The stack action button will take the full un-padded header space above the stack mStackActionButtonRect.set(mStackRect.left, mStackRect.top - topMargin, @@ -530,26 +443,20 @@ public class TaskStackLayoutAlgorithm { if (tasks.isEmpty()) { mFrontMostTaskP = 0; mMinScrollP = mMaxScrollP = mInitialScrollP = 0; - mNumStackTasks = mNumFreeformTasks = 0; + mNumStackTasks = 0; return; } - // Filter the set of freeform and stack tasks - ArrayList freeformTasks = new ArrayList<>(); + // Filter the set of stack tasks ArrayList stackTasks = new ArrayList<>(); for (int i = 0; i < tasks.size(); i++) { Task task = tasks.get(i); if (ignoreTasksSet.contains(task.key)) { continue; } - if (task.isFreeformTask()) { - freeformTasks.add(task); - } else { - stackTasks.add(task); - } + stackTasks.add(task); } mNumStackTasks = stackTasks.size(); - mNumFreeformTasks = freeformTasks.size(); // Put each of the tasks in the progress map at a fixed index (does not need to actually // map to a scroll position, just by index) @@ -559,11 +466,6 @@ public class TaskStackLayoutAlgorithm { mTaskIndexMap.put(task.key.id, i); } - // Update the freeform tasks - if (!freeformTasks.isEmpty()) { - mFreeformLayoutAlgorithm.update(freeformTasks, this); - } - // Calculate the min/max/initial scroll Task launchTask = stack.getLaunchTarget(); int launchTaskIndex = launchTask != null @@ -582,7 +484,7 @@ public class TaskStackLayoutAlgorithm { } else { mInitialScrollP = Utilities.clamp(launchTaskIndex - 1, mMinScrollP, mMaxScrollP); } - } else if (!ssp.hasFreeformWorkspaceSupport() && mNumStackTasks == 1) { + } else if (mNumStackTasks == 1) { // If there is one stack task, ignore the min/max/initial scroll positions mMinScrollP = 0; mMaxScrollP = 0; @@ -793,13 +695,6 @@ public class TaskStackLayoutAlgorithm { return mFrontOfStackTransform; } - /** - * Returns the current stack state. - */ - public StackState getStackState() { - return mState; - } - /** * Returns whether this stack layout has been initialized. */ @@ -825,30 +720,19 @@ public class TaskStackLayoutAlgorithm { return new VisibilityReport(1, 1); } - // Quick return when there are no stack tasks - if (mNumStackTasks == 0) { - return new VisibilityReport(mNumFreeformTasks > 0 ? Math.max(mNumFreeformTasks, 1) : 0, - mNumFreeformTasks > 0 ? Math.max(mNumFreeformTasks, 1) : 0); - } - // Otherwise, walk backwards in the stack and count the number of tasks and visible - // thumbnails and add that to the total freeform task count + // thumbnails and add that to the total task count TaskViewTransform tmpTransform = new TaskViewTransform(); Range currentRange = getInitialFocusState() > 0f ? mFocusedRange : mUnfocusedRange; currentRange.offset(mInitialScrollP); int taskBarHeight = mContext.getResources().getDimensionPixelSize( R.dimen.recents_task_view_header_height); - int numVisibleTasks = mNumFreeformTasks > 0 ? Math.max(mNumFreeformTasks, 1) : 0; - int numVisibleThumbnails = mNumFreeformTasks > 0 ? Math.max(mNumFreeformTasks, 0) : 0; + int numVisibleTasks = 0; + int numVisibleThumbnails = 0; float prevScreenY = Integer.MAX_VALUE; for (int i = tasks.size() - 1; i >= 0; i--) { Task task = tasks.get(i); - // Skip freeform - if (task.isFreeformTask()) { - continue; - } - // Skip invisible float taskProgress = getStackScrollForTask(task); if (!currentRange.isInRange(taskProgress)) { @@ -899,10 +783,7 @@ public class TaskStackLayoutAlgorithm { public TaskViewTransform getStackTransform(Task task, float stackScroll, int focusState, TaskViewTransform transformOut, TaskViewTransform frontTransform, boolean forceUpdate, boolean ignoreTaskOverrides) { - if (mFreeformLayoutAlgorithm.isTransformAvailable(task, this)) { - mFreeformLayoutAlgorithm.getTransform(task, transformOut, this); - return transformOut; - } else if (useGridLayout()) { + if (useGridLayout()) { int taskIndex = mTaskIndexMap.get(task.key.id); int taskCount = mTaskIndexMap.size(); mTaskGridLayoutAlgorithm.getTransform(taskIndex, taskCount, transformOut, this); @@ -1017,7 +898,7 @@ public class TaskStackLayoutAlgorithm { float z; float dimAlpha; float viewOutlineAlpha; - if (!ssp.hasFreeformWorkspaceSupport() && mNumStackTasks == 1 && !ignoreSingleTaskCase) { + if (mNumStackTasks == 1 && !ignoreSingleTaskCase) { // When there is exactly one task, then decouple the task from the stack and just move // in screen space float tmpP = (mMinScrollP - stackScroll) / mNumStackTasks; @@ -1371,7 +1252,6 @@ public class TaskStackLayoutAlgorithm { writer.print("insets="); writer.print(Utilities.dumpRect(mSystemInsets)); writer.print(" stack="); writer.print(Utilities.dumpRect(mStackRect)); writer.print(" task="); writer.print(Utilities.dumpRect(mTaskRect)); - writer.print(" freeform="); writer.print(Utilities.dumpRect(mFreeformRect)); writer.print(" actionButton="); writer.print(Utilities.dumpRect(mStackActionButtonRect)); writer.println(); diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java index 7112600acd945..fd297085fe1e2 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java @@ -16,22 +16,15 @@ package com.android.systemui.recents.views; -import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; -import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; - import android.animation.Animator; import android.animation.AnimatorListenerAdapter; -import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.annotation.IntDef; import android.content.ComponentName; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; -import android.graphics.Canvas; import android.graphics.Rect; -import android.graphics.drawable.Drawable; -import android.graphics.drawable.GradientDrawable; import android.os.Bundle; import android.provider.Settings; import android.util.ArrayMap; @@ -83,13 +76,11 @@ import com.android.systemui.recents.events.ui.DismissAllTaskViewsEvent; import com.android.systemui.recents.events.ui.DismissTaskViewEvent; import com.android.systemui.recents.events.ui.RecentsGrowingEvent; import com.android.systemui.recents.events.ui.TaskViewDismissedEvent; -import com.android.systemui.recents.events.ui.UpdateFreeformTaskViewVisibilityEvent; import com.android.systemui.recents.events.ui.UserInteractionEvent; import com.android.systemui.recents.events.ui.dragndrop.DragDropTargetChangedEvent; import com.android.systemui.recents.events.ui.dragndrop.DragEndCancelledEvent; import com.android.systemui.recents.events.ui.dragndrop.DragEndEvent; import com.android.systemui.recents.events.ui.dragndrop.DragStartEvent; -import com.android.systemui.recents.events.ui.dragndrop.DragStartInitializeDropTargetsEvent; import com.android.systemui.recents.events.ui.focus.DismissFocusedTaskViewEvent; import com.android.systemui.recents.events.ui.focus.FocusNextTaskViewEvent; import com.android.systemui.recents.events.ui.focus.FocusPreviousTaskViewEvent; @@ -153,8 +144,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal @ViewDebug.ExportedProperty(deepExport=true, prefix="touch_") private TaskStackViewTouchHandler mTouchHandler; private TaskStackAnimationHelper mAnimationHelper; - private GradientDrawable mFreeformWorkspaceBackground; - private ObjectAnimator mFreeformWorkspaceBackgroundAnimator; private ViewPool mViewPool; private ArrayList mTaskViews = new ArrayList<>(); @@ -239,20 +228,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal } }; - // The drop targets for a task drag - private DropTarget mFreeformWorkspaceDropTarget = new DropTarget() { - @Override - public boolean acceptsDrop(int x, int y, int width, int height, Rect insets, - boolean isCurrentTarget) { - // This drop target has a fixed bounds and should be checked last, so just fall through - // if it is the current target - if (!isCurrentTarget) { - return mLayoutAlgorithm.mFreeformRect.contains(x, y); - } - return false; - } - }; - private DropTarget mStackDropTarget = new DropTarget() { @Override public boolean acceptsDrop(int x, int y, int width, int height, Rect insets, @@ -312,17 +287,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal } }); setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES); - if (ssp.hasFreeformWorkspaceSupport()) { - setWillNotDraw(false); - } - - mFreeformWorkspaceBackground = (GradientDrawable) getContext().getDrawable( - R.drawable.recents_freeform_workspace_bg); - mFreeformWorkspaceBackground.setCallback(this); - if (ssp.hasFreeformWorkspaceSupport()) { - mFreeformWorkspaceBackground.setColor( - getContext().getColor(R.color.recents_freeform_workspace_bg_color)); - } } @Override @@ -359,12 +323,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal readSystemFlags(); mTaskViewsClipDirty = true; mUIDozeTrigger.stopDozing(); - if (isResumingFromVisible) { - // Animate in the freeform workspace - int ffBgAlpha = mLayoutAlgorithm.getStackState().freeformBackgroundAlpha; - animateFreeformWorkspaceBackgroundAlpha(ffBgAlpha, new AnimationProps(150, - Interpolators.FAST_OUT_SLOW_IN)); - } else { + if (!isResumingFromVisible) { mStackScroller.reset(); mStableLayoutAlgorithm.reset(); mLayoutAlgorithm.reset(); @@ -422,23 +381,13 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal /** * Returns the front most task view. - * - * @param stackTasksOnly if set, will return the front most task view in the stack (by default - * the front most task view will be freeform since they are placed above - * stack tasks) */ - private TaskView getFrontMostTaskView(boolean stackTasksOnly) { + private TaskView getFrontMostTaskView() { List taskViews = getTaskViews(); - int taskViewCount = taskViews.size(); - for (int i = taskViewCount - 1; i >= 0; i--) { - TaskView tv = taskViews.get(i); - Task task = tv.getTask(); - if (stackTasksOnly && task.isFreeformTask()) { - continue; - } - return tv; + if (taskViews.isEmpty()) { + return null; } - return null; + return taskViews.get(taskViews.size() - 1); } /** @@ -500,8 +449,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal * visible range includes all tasks at the target stack scroll. This is useful for ensure that * all views necessary for a transition or animation will be visible at the start. * - * This call ignores freeform tasks. - * * @param taskTransforms The set of task view transforms to reuse, this list will be sized to * match the size of {@param tasks} * @param tasks The set of tasks for which to generate transforms @@ -554,12 +501,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal continue; } - // For freeform tasks, only calculate the stack transform and skip the calculation of - // the visible stack indices - if (task.isFreeformTask()) { - continue; - } - frontTransform = transform; frontTransformAtTarget = transformAtTarget; if (transform.visible) { @@ -622,7 +563,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal transform = mCurrentTaskTransforms.get(taskIndex); } - if (task.isFreeformTask() || (transform != null && transform.visible)) { + if (transform != null && transform.visible) { mTmpTaskViewMap.put(task.key, tv); } else { if (mTouchExplorationEnabled && Utilities.isDescendentAccessibilityFocused(tv)) { @@ -643,24 +584,20 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal continue; } - // Skip the invisible non-freeform stack tasks - if (!task.isFreeformTask() && !transform.visible) { + // Skip the invisible stack tasks + if (!transform.visible) { continue; } TaskView tv = mTmpTaskViewMap.get(task.key); if (tv == null) { tv = mViewPool.pickUpViewFromPool(task, task); - if (task.isFreeformTask()) { - updateTaskViewToTransform(tv, transform, AnimationProps.IMMEDIATE); + if (transform.rect.top <= mLayoutAlgorithm.mStackRect.top) { + updateTaskViewToTransform(tv, mLayoutAlgorithm.getBackOfStackTransform(), + AnimationProps.IMMEDIATE); } else { - if (transform.rect.top <= mLayoutAlgorithm.mStackRect.top) { - updateTaskViewToTransform(tv, mLayoutAlgorithm.getBackOfStackTransform(), - AnimationProps.IMMEDIATE); - } else { - updateTaskViewToTransform(tv, mLayoutAlgorithm.getFrontOfStackTransform(), - AnimationProps.IMMEDIATE); - } + updateTaskViewToTransform(tv, mLayoutAlgorithm.getFrontOfStackTransform(), + AnimationProps.IMMEDIATE); } } else { // Reattach it in the right z order @@ -887,13 +824,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal // Compute the min and max scroll values mLayoutAlgorithm.update(mStack, mIgnoreTasks, launchState); - // Update the freeform workspace background - SystemServicesProxy ssp = Recents.getSystemServices(); - if (ssp.hasFreeformWorkspaceSupport()) { - mTmpRect.set(mLayoutAlgorithm.mFreeformRect); - mFreeformWorkspaceBackground.setBounds(mTmpRect); - } - if (boundScrollToNewMinMax) { mStackScroller.boundScroll(); } @@ -906,8 +836,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal mWindowRect.set(mStableWindowRect); mStackBounds.set(mStableStackBounds); mLayoutAlgorithm.setSystemInsets(mStableLayoutAlgorithm.mSystemInsets); - mLayoutAlgorithm.initialize(mDisplayRect, mWindowRect, mStackBounds, - TaskStackLayoutAlgorithm.StackState.getStackStateForStack(mStack)); + mLayoutAlgorithm.initialize(mDisplayRect, mWindowRect, mStackBounds); updateLayoutAlgorithm(true /* boundScroll */); } @@ -1028,21 +957,10 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal if (focusedTask != null) { if (stackTasksOnly) { List tasks = mStack.getStackTasks(); - if (focusedTask.isFreeformTask()) { - // Try and focus the front most stack task - TaskView tv = getFrontMostTaskView(stackTasksOnly); - if (tv != null) { - newIndex = mStack.indexOfStackTask(tv.getTask()); - } - } else { - // Try the next task if it is a stack task - int tmpNewIndex = newIndex + (forward ? -1 : 1); - if (0 <= tmpNewIndex && tmpNewIndex < tasks.size()) { - Task t = tasks.get(tmpNewIndex); - if (!t.isFreeformTask()) { - newIndex = tmpNewIndex; - } - } + // Try the next task if it is a stack task + int tmpNewIndex = newIndex + (forward ? -1 : 1); + if (0 <= tmpNewIndex && tmpNewIndex < tasks.size()) { + newIndex = tmpNewIndex; } } else { // No restrictions, lets just move to the new task (looping forward/backwards if @@ -1127,7 +1045,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal return tv.getTask(); } } - TaskView frontTv = getFrontMostTaskView(true /* stackTasksOnly */); + TaskView frontTv = getFrontMostTaskView(); if (frontTv != null) { return frontTv.getTask(); } @@ -1278,10 +1196,8 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal } // Compute the rects in the stack algorithm - mStableLayoutAlgorithm.initialize(mDisplayRect, mStableWindowRect, mStableStackBounds, - TaskStackLayoutAlgorithm.StackState.getStackStateForStack(mStack)); - mLayoutAlgorithm.initialize(mDisplayRect, mWindowRect, mStackBounds, - TaskStackLayoutAlgorithm.StackState.getStackStateForStack(mStack)); + mStableLayoutAlgorithm.initialize(mDisplayRect, mStableWindowRect, mStableStackBounds); + mLayoutAlgorithm.initialize(mDisplayRect, mWindowRect, mStackBounds); updateLayoutAlgorithm(false /* boundScroll */); // If this is the first layout, then scroll to the front of the stack, then update the @@ -1404,11 +1320,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal // Setup the view for the enter animation mAnimationHelper.prepareForEnterAnimation(); - // Animate in the freeform workspace - int ffBgAlpha = mLayoutAlgorithm.getStackState().freeformBackgroundAlpha; - animateFreeformWorkspaceBackgroundAlpha(ffBgAlpha, new AnimationProps(150, - Interpolators.FAST_OUT_SLOW_IN)); - // Set the task focused state without requesting view focus, and leave the focus animations // until after the enter-animation RecentsConfiguration config = Recents.getConfiguration(); @@ -1456,43 +1367,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal return null; } - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - // Draw the freeform workspace background - SystemServicesProxy ssp = Recents.getSystemServices(); - if (ssp.hasFreeformWorkspaceSupport()) { - if (mFreeformWorkspaceBackground.getAlpha() > 0) { - mFreeformWorkspaceBackground.draw(canvas); - } - } - } - - @Override - protected boolean verifyDrawable(Drawable who) { - if (who == mFreeformWorkspaceBackground) { - return true; - } - return super.verifyDrawable(who); - } - - /** - * Launches the freeform tasks. - */ - public boolean launchFreeformTasks() { - ArrayList tasks = mStack.getFreeformTasks(); - if (!tasks.isEmpty()) { - Task frontTask = tasks.get(tasks.size() - 1); - if (frontTask != null && frontTask.isFreeformTask()) { - EventBus.getDefault().send(new LaunchTaskEvent(getChildViewForTask(frontTask), - frontTask, null, false)); - return true; - } - } - return false; - } - /**** TaskStackCallbacks Implementation ****/ @Override @@ -1671,8 +1545,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal } // Restore the action button visibility if it is the front most task view - if (mScreenPinningEnabled && tv.getTask() == - mStack.getStackFrontMostTask(false /* includeFreeform */)) { + if (mScreenPinningEnabled && tv.getTask() == mStack.getStackFrontMostTask()) { tv.showActionButton(false /* fadeIn */, 0 /* fadeInDuration */); } } @@ -1688,7 +1561,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal // If the doze trigger has already fired, then update the state for this task view if (mUIDozeTrigger.isAsleep() || - Recents.getSystemServices().hasFreeformWorkspaceSupport() || useGridLayout() || Recents.getConfiguration().isLowRamDevice) { tv.setNoUserInteractionState(); } @@ -1820,7 +1692,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal public final void onBusEvent(LaunchMostRecentTaskRequestEvent event) { if (mStack.getTaskCount() > 0) { - Task mostRecentTask = mStack.getStackFrontMostTask(true /* includeFreefromTasks */); + Task mostRecentTask = mStack.getStackFrontMostTask(); launchTask(mostRecentTask); } } @@ -1891,11 +1763,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal // Start the task animations mAnimationHelper.startExitToHomeAnimation(event.animated, event.getAnimationTrigger()); - // Dismiss the freeform workspace background - int taskViewExitToHomeDuration = TaskStackAnimationHelper.EXIT_TO_HOME_TRANSLATION_DURATION; - animateFreeformWorkspaceBackgroundAlpha(0, new AnimationProps(taskViewExitToHomeDuration, - Interpolators.FAST_OUT_SLOW_IN)); - // Dismiss the grid task view focus frame if (mTaskViewFocusFrame != null) { mTaskViewFocusFrame.moveGridTaskViewFocus(null); @@ -2026,11 +1893,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal // Ensure that the drag task is not animated addIgnoreTask(event.task); - if (event.task.isFreeformTask()) { - // Animate to the front of the stack - mStackScroller.animateScroll(mLayoutAlgorithm.mInitialScrollP, null); - } - // Enlarge the dragged view slightly float finalScale = event.taskView.getScaleX() * DRAG_SCALE_FACTOR; mLayoutAlgorithm.getStackTransform(event.task, getScroller().getStackScroll(), @@ -2042,14 +1904,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal new AnimationProps(DRAG_SCALE_DURATION, Interpolators.FAST_OUT_SLOW_IN)); } - public final void onBusEvent(DragStartInitializeDropTargetsEvent event) { - SystemServicesProxy ssp = Recents.getSystemServices(); - if (ssp.hasFreeformWorkspaceSupport()) { - event.handler.registerDropTargetForCurrentDrag(mStackDropTarget); - event.handler.registerDropTargetForCurrentDrag(mFreeformWorkspaceDropTarget); - } - } - public final void onBusEvent(DragDropTargetChangedEvent event) { AnimationProps animation = new AnimationProps(SLOW_SYNC_STACK_DURATION, Interpolators.FAST_OUT_SLOW_IN); @@ -2069,8 +1923,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal height, mDividerSize, systemInsets, mLayoutAlgorithm, getResources(), mWindowRect)); mLayoutAlgorithm.setSystemInsets(systemInsets); - mLayoutAlgorithm.initialize(mDisplayRect, mWindowRect, mStackBounds, - TaskStackLayoutAlgorithm.StackState.getStackStateForStack(mStack)); + mLayoutAlgorithm.initialize(mDisplayRect, mWindowRect, mStackBounds); updateLayoutAlgorithm(true /* boundScroll */); ignoreTaskOverrides = true; } else { @@ -2092,32 +1945,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal return; } - boolean isFreeformTask = event.task.isFreeformTask(); - boolean hasChangedWindowingMode = - (!isFreeformTask && event.dropTarget == mFreeformWorkspaceDropTarget) || - (isFreeformTask && event.dropTarget == mStackDropTarget); - - if (hasChangedWindowingMode) { - // Move the task to the right position in the stack (ie. the front of the stack if - // freeform or the front of the stack if fullscreen). Note, we MUST move the tasks - // before we update their stack ids, otherwise, the keys will have changed. - if (event.dropTarget == mFreeformWorkspaceDropTarget) { - mStack.setTaskWindowingMode(event.task, WINDOWING_MODE_FREEFORM); - } else if (event.dropTarget == mStackDropTarget) { - mStack.setTaskWindowingMode(event.task, WINDOWING_MODE_FULLSCREEN); - } - updateLayoutAlgorithm(true /* boundScroll */); - - // Move the task to the new stack in the system after the animation completes - event.addPostAnimationCallback(new Runnable() { - @Override - public void run() { - SystemServicesProxy ssp = Recents.getSystemServices(); - ssp.setTaskWindowingMode(event.task.key.id, event.task.key.windowingMode); - } - }); - } - // Restore the task, so that relayout will apply to it below removeIgnoreTask(event.task); @@ -2177,9 +2004,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal // Add a runnable to the post animation ref counter to clear all the views trigger.addLastDecrementRunnable(() -> { // Start the dozer to trigger to trigger any UI that shows after a timeout - if (!Recents.getSystemServices().hasFreeformWorkspaceSupport()) { - mUIDozeTrigger.startDozing(); - } + mUIDozeTrigger.startDozing(); // Update the focused state here -- since we only set the focused task without // requesting view focus in onFirstLayout(), actually request view focus and @@ -2202,18 +2027,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal mStackReloaded = false; } - public final void onBusEvent(UpdateFreeformTaskViewVisibilityEvent event) { - List taskViews = getTaskViews(); - int taskViewCount = taskViews.size(); - for (int i = 0; i < taskViewCount; i++) { - TaskView tv = taskViews.get(i); - Task task = tv.getTask(); - if (task.isFreeformTask()) { - tv.setVisibility(event.visible ? View.VISIBLE : View.INVISIBLE); - } - } - } - public final void onBusEvent(final MultiWindowStateChangedEvent event) { if (event.inMultiWindow || !event.showDeferredAnimation) { setTasks(event.stack, true /* allowNotifyStackChanges */); @@ -2314,27 +2127,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal mLayoutAlgorithm.reloadOnConfigurationChange(getContext()); } - /** - * Starts an alpha animation on the freeform workspace background. - */ - private void animateFreeformWorkspaceBackgroundAlpha(int targetAlpha, - AnimationProps animation) { - if (mFreeformWorkspaceBackground.getAlpha() == targetAlpha) { - return; - } - - Utilities.cancelAnimationWithoutCallbacks(mFreeformWorkspaceBackgroundAnimator); - mFreeformWorkspaceBackgroundAnimator = ObjectAnimator.ofInt(mFreeformWorkspaceBackground, - Utilities.DRAWABLE_ALPHA, mFreeformWorkspaceBackground.getAlpha(), targetAlpha); - mFreeformWorkspaceBackgroundAnimator.setStartDelay( - animation.getDuration(AnimationProps.ALPHA)); - mFreeformWorkspaceBackgroundAnimator.setDuration( - animation.getDuration(AnimationProps.ALPHA)); - mFreeformWorkspaceBackgroundAnimator.setInterpolator( - animation.getInterpolator(AnimationProps.ALPHA)); - mFreeformWorkspaceBackgroundAnimator.start(); - } - /** * Returns the insert index for the task in the current set of task views. If the given task * is already in the task view list, then this method returns the insert index assuming it diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java index 32a249c289c6e..1abaced839694 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackViewTouchHandler.java @@ -403,18 +403,6 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback { return; } - // If tapping on the freeform workspace background, just launch the first freeform task - SystemServicesProxy ssp = Recents.getSystemServices(); - if (ssp.hasFreeformWorkspaceSupport()) { - Rect freeformRect = mSv.mLayoutAlgorithm.mFreeformRect; - if (freeformRect.top <= y && y <= freeformRect.bottom) { - if (mSv.launchFreeformTasks()) { - // TODO: Animate Recents away as we launch the freeform tasks - return; - } - } - } - // The user intentionally tapped on the background, which is like a tap on the "desktop". // Hide recents and transition to the launcher. EventBus.getDefault().send(new HideRecentsEvent(false, true)); diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java index 032d966313863..a75034a123ee0 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java @@ -194,9 +194,7 @@ public class TaskView extends FixedSizeFrameLayout implements Task.TaskCallbacks * Called from RecentsActivity when it is relaunched. */ void onReload(boolean isResumingFromVisible) { - if (!Recents.getSystemServices().hasFreeformWorkspaceSupport()) { - resetNoUserInteractionState(); - } + resetNoUserInteractionState(); if (!isResumingFromVisible) { resetViewProperties(); } @@ -413,9 +411,7 @@ public class TaskView extends FixedSizeFrameLayout implements Task.TaskCallbacks * view. */ boolean shouldClipViewInStack() { - // Never clip for freeform tasks or if invisible - if (mTask.isFreeformTask() || getVisibility() != View.VISIBLE || - Recents.getConfiguration().isLowRamDevice) { + if (getVisibility() != View.VISIBLE || Recents.getConfiguration().isLowRamDevice) { return false; } return mClipViewInStack; diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java index 198ecae2d1a92..c4e4e2ec489cc 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewHeader.java @@ -17,7 +17,6 @@ package com.android.systemui.recents.views; import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; -import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; @@ -164,8 +163,6 @@ public class TaskViewHeader extends FrameLayout float mDimAlpha; Drawable mLightDismissDrawable; Drawable mDarkDismissDrawable; - Drawable mLightFreeformIcon; - Drawable mDarkFreeformIcon; Drawable mLightFullscreenIcon; Drawable mDarkFullscreenIcon; Drawable mLightInfoIcon; @@ -215,8 +212,6 @@ public class TaskViewHeader extends FrameLayout mHighlightHeight = res.getDimensionPixelSize(R.dimen.recents_task_view_highlight); mTaskBarViewLightTextColor = context.getColor(R.color.recents_task_bar_light_text_color); mTaskBarViewDarkTextColor = context.getColor(R.color.recents_task_bar_dark_text_color); - mLightFreeformIcon = context.getDrawable(R.drawable.recents_move_task_freeform_light); - mDarkFreeformIcon = context.getDrawable(R.drawable.recents_move_task_freeform_dark); mLightFullscreenIcon = context.getDrawable(R.drawable.recents_move_task_fullscreen_light); mDarkFullscreenIcon = context.getDrawable(R.drawable.recents_move_task_fullscreen_dark); mLightInfoIcon = context.getDrawable(R.drawable.recents_info_light); @@ -249,9 +244,6 @@ public class TaskViewHeader extends FrameLayout mIconView.setOnLongClickListener(this); mTitleView = findViewById(R.id.title); mDismissButton = findViewById(R.id.dismiss_task); - if (ssp.hasFreeformWorkspaceSupport()) { - mMoveTaskButton = findViewById(R.id.move_task); - } onConfigurationChanged(); } @@ -341,20 +333,6 @@ public class TaskViewHeader extends FrameLayout boolean showDismissIcon = true; int rightInset = width - getMeasuredWidth(); - if (mTask != null && mTask.isFreeformTask()) { - // For freeform tasks, we always show the app icon, and only show the title, move-task - // icon, and the dismiss icon if there is room - int appIconWidth = mIconView.getMeasuredWidth(); - int titleWidth = (int) mTitleView.getPaint().measureText(mTask.title); - int dismissWidth = mDismissButton.getMeasuredWidth(); - int moveTaskWidth = mMoveTaskButton != null - ? mMoveTaskButton.getMeasuredWidth() - : 0; - showTitle = width >= (appIconWidth + dismissWidth + moveTaskWidth + titleWidth); - showMoveIcon = width >= (appIconWidth + dismissWidth + moveTaskWidth); - showDismissIcon = width >= (appIconWidth + dismissWidth); - } - mTitleView.setVisibility(showTitle ? View.VISIBLE : View.INVISIBLE); if (mMoveTaskButton != null) { mMoveTaskButton.setVisibility(showMoveIcon ? View.VISIBLE : View.INVISIBLE); @@ -482,25 +460,6 @@ public class TaskViewHeader extends FrameLayout mDismissButton.setClickable(false); ((RippleDrawable) mDismissButton.getBackground()).setForceSoftware(true); - // When freeform workspaces are enabled, then update the move-task button depending on the - // current task - if (mMoveTaskButton != null) { - if (t.isFreeformTask()) { - mTaskWindowingMode = WINDOWING_MODE_FULLSCREEN; - mMoveTaskButton.setImageDrawable(t.useLightOnPrimaryColor - ? mLightFullscreenIcon - : mDarkFullscreenIcon); - } else { - mTaskWindowingMode = WINDOWING_MODE_FREEFORM; - mMoveTaskButton.setImageDrawable(t.useLightOnPrimaryColor - ? mLightFreeformIcon - : mDarkFreeformIcon); - } - mMoveTaskButton.setOnClickListener(this); - mMoveTaskButton.setClickable(false); - ((RippleDrawable) mMoveTaskButton.getBackground()).setForceSoftware(true); - } - if (Recents.getDebugFlags().isFastToggleRecentsEnabled()) { if (mFocusTimerIndicator == null) { mFocusTimerIndicator = (ProgressBar) Utilities.findViewStubById(this, diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java index a2190b3a3d199..d0ebc8dfc21f2 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewThumbnail.java @@ -245,10 +245,6 @@ public class TaskViewThumbnail extends View { public void updateThumbnailMatrix() { mThumbnailScale = 1f; if (mBitmapShader != null && mThumbnailData != null) { - // We consider this a stack task if it is not freeform (ie. has no bounds) or has been - // dragged into the stack from the freeform workspace - boolean isStackTask = !mTask.isFreeformTask() || mTask.bounds == null; - int xOffset, yOffset = 0; if (mTaskViewRect.isEmpty()) { // If we haven't measured , skip the thumbnail drawing and only draw the background // color @@ -266,7 +262,7 @@ public class TaskViewThumbnail extends View { mThumbnailScale = (float) (mTaskViewRect.height() - mTitleBarHeight) / (float) mThumbnailRect.height(); } - } else if (isStackTask) { + } else { float invThumbnailScale = 1f / mFullscreenThumbnailScale; if (mDisplayOrientation == Configuration.ORIENTATION_PORTRAIT) { if (mThumbnailData.orientation == Configuration.ORIENTATION_PORTRAIT) { @@ -283,12 +279,6 @@ public class TaskViewThumbnail extends View { // Otherwise, scale the screenshot to fit 1:1 in the current orientation mThumbnailScale = invThumbnailScale; } - } else { - // Otherwise, if this is a freeform task with task bounds, then scale the thumbnail - // to fit the entire bitmap into the task bounds - mThumbnailScale = Math.min( - (float) mTaskViewRect.width() / mThumbnailRect.width(), - (float) mTaskViewRect.height() / mThumbnailRect.height()); } mMatrix.setTranslate(-mThumbnailData.insets.left * mFullscreenThumbnailScale, -mThumbnailData.insets.top * mFullscreenThumbnailScale); diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java index 397f24eb86d3a..c9dbe2ad2c4a5 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java @@ -59,7 +59,7 @@ public class TaskViewTransform { public boolean visible = false; - // This is a window-space rect used for positioning the task in the stack and freeform workspace + // This is a window-space rect used for positioning the task in the stack public RectF rect = new RectF(); /**