From e659758f170703a7f69a312aa65c9401829d3f27 Mon Sep 17 00:00:00 2001 From: Kevin Date: Thu, 2 May 2019 11:39:49 -0700 Subject: [PATCH] Add scrim under status bar and above thumbnails. For Recents Go, the thumbnails actually go directly under the status bar text, so we should ensure that there is some scrim to ensure it's always readable. We do this by adding a foreground drawable scrim to the activity's root view. Since this root view is used in other Launcher states, Launcher has to toggle this on and off when going/leaving recents. When this view is just being used for recents as a stand-alone, however, (i.e. when the user has a different default launcher), it's fine to set this once at the beginning since nothing else uses the root view. Bug: 131834685 Fix: 131834685 Test: When quickstep is the default, go to recents and back. Status bar is readable. Scrim does not animate when going to and from recents. Test: When quickstep is not the default, scrim shows up fine Change-Id: I5d88a1fd873860887b3141e1ec0ee999f59ccfad --- .../uioverrides/states/OverviewState.java | 7 ++++++ .../android/quickstep/RecentsActivity.java | 1 + .../quickstep/views/IconRecentsView.java | 23 ++++++++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/go/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java b/go/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java index d20910fd24..1b24fc856e 100644 --- a/go/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java +++ b/go/quickstep/src/com/android/launcher3/uioverrides/states/OverviewState.java @@ -52,11 +52,18 @@ public class OverviewState extends LauncherState { public void onStateEnabled(Launcher launcher) { IconRecentsView recentsView = launcher.getOverviewPanel(); recentsView.onBeginTransitionToOverview(); + recentsView.setShowStatusBarForegroundScrim(true); // Request orientation be set to unspecified, letting the system decide the best // orientation. launcher.getRotationHelper().setCurrentStateRequest(REQUEST_ROTATE); } + @Override + public void onStateDisabled(Launcher launcher) { + IconRecentsView recentsView = launcher.getOverviewPanel(); + recentsView.setShowStatusBarForegroundScrim(false); + } + @Override public PageAlphaProvider getWorkspacePageAlphaProvider(Launcher launcher) { return new PageAlphaProvider(DEACCEL_2) { diff --git a/go/quickstep/src/com/android/quickstep/RecentsActivity.java b/go/quickstep/src/com/android/quickstep/RecentsActivity.java index f2ca368e8b..9fb80679e3 100644 --- a/go/quickstep/src/com/android/quickstep/RecentsActivity.java +++ b/go/quickstep/src/com/android/quickstep/RecentsActivity.java @@ -37,6 +37,7 @@ public final class RecentsActivity extends BaseRecentsActivity { mRecentsRootView = findViewById(R.id.drag_layer); mIconRecentsView = findViewById(R.id.overview_panel); mIconRecentsView.setRecentsToActivityHelper(new FallbackRecentsToActivityHelper(this)); + mIconRecentsView.setShowStatusBarForegroundScrim(true); } @Override diff --git a/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java b/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java index f951304f59..c52a94f817 100644 --- a/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java +++ b/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java @@ -33,6 +33,7 @@ import android.animation.ValueAnimator; import android.content.Context; import android.content.res.Resources; import android.graphics.Rect; +import android.graphics.drawable.Drawable; import android.util.ArraySet; import android.util.AttributeSet; import android.util.FloatProperty; @@ -54,6 +55,7 @@ import androidx.recyclerview.widget.RecyclerView.OnChildAttachStateChangeListene import com.android.launcher3.BaseActivity; import com.android.launcher3.Insettable; import com.android.launcher3.R; +import com.android.launcher3.util.Themes; import com.android.quickstep.ContentFillItemAnimator; import com.android.quickstep.RecentsModel; import com.android.quickstep.RecentsToActivityHelper; @@ -114,6 +116,8 @@ public final class IconRecentsView extends FrameLayout implements Insettable { private final DefaultItemAnimator mDefaultItemAnimator = new DefaultItemAnimator(); private final ContentFillItemAnimator mLoadingContentItemAnimator = new ContentFillItemAnimator(); + private final BaseActivity mActivity; + private final Drawable mStatusBarForegroundScrim; private RecentsToActivityHelper mActivityHelper; private RecyclerView mTaskRecyclerView; @@ -143,8 +147,10 @@ public final class IconRecentsView extends FrameLayout implements Insettable { public IconRecentsView(Context context, AttributeSet attrs) { super(context, attrs); - BaseActivity activity = BaseActivity.fromContext(context); + mActivity = BaseActivity.fromContext(context); mContext = context; + mStatusBarForegroundScrim = + Themes.getAttrDrawable(mContext, R.attr.workspaceStatusBarScrim); mTaskLoader = new TaskListLoader(mContext); mTaskAdapter = new TaskAdapter(mTaskLoader); mTaskAdapter.setOnClearAllClickListener(view -> animateClearAllTasks()); @@ -338,6 +344,21 @@ public final class IconRecentsView extends FrameLayout implements Insettable { mTaskActionController.launchTask(taskToLaunch); } + /** + * Set whether or not to show the scrim in between the view and the top insets. This only works + * if the view is being insetted in the first place. + * + * The scrim is added to the activity's root view to prevent animations on this view + * affecting the scrim. As a result, it is the activity's responsibility to show/hide this + * scrim as appropriate. + * + * @param showStatusBarForegroundScrim true to show the scrim, false to hide + */ + public void setShowStatusBarForegroundScrim(boolean showStatusBarForegroundScrim) { + boolean shouldShow = mInsets.top != 0 && showStatusBarForegroundScrim; + mActivity.getDragLayer().setForeground(shouldShow ? mStatusBarForegroundScrim : null); + } + /** * Get the bottom most thumbnail view to animate to. *