Chaniging all-apps scrim
> Converting the scrim to View, to better avoid overdraw > Overview and Spring loaded state have different scrim alpha > When going from overview to all-apps, there is a color scrim drawn over the overview panel. The slef color is merged with this color to prevent overdraw, and the remaining screen is drawn with a cut-out round rect path Bug: 79111591 Change-Id: I26801fde13dd6adb4b06110bbe8087e35cc31847
This commit is contained in:
@@ -52,17 +52,15 @@ public class LauncherState {
|
||||
public static final int ALL_APPS_CONTENT = 1 << 4;
|
||||
public static final int DRAG_HANDLE_INDICATOR = 1 << 5;
|
||||
|
||||
protected static final int FLAG_SHOW_SCRIM = 1 << 0;
|
||||
protected static final int FLAG_MULTI_PAGE = 1 << 1;
|
||||
protected static final int FLAG_DISABLE_ACCESSIBILITY = 1 << 2;
|
||||
protected static final int FLAG_DISABLE_RESTORE = 1 << 3;
|
||||
protected static final int FLAG_WORKSPACE_ICONS_CAN_BE_DRAGGED = 1 << 4;
|
||||
protected static final int FLAG_DISABLE_PAGE_CLIPPING = 1 << 5;
|
||||
protected static final int FLAG_PAGE_BACKGROUNDS = 1 << 6;
|
||||
protected static final int FLAG_ALL_APPS_SCRIM = 1 << 7;
|
||||
protected static final int FLAG_DISABLE_INTERACTION = 1 << 8;
|
||||
protected static final int FLAG_OVERVIEW_UI = 1 << 9;
|
||||
protected static final int FLAG_HIDE_BACK_BUTTON = 1 << 10;
|
||||
protected static final int FLAG_MULTI_PAGE = 1 << 0;
|
||||
protected static final int FLAG_DISABLE_ACCESSIBILITY = 1 << 1;
|
||||
protected static final int FLAG_DISABLE_RESTORE = 1 << 2;
|
||||
protected static final int FLAG_WORKSPACE_ICONS_CAN_BE_DRAGGED = 1 << 3;
|
||||
protected static final int FLAG_DISABLE_PAGE_CLIPPING = 1 << 4;
|
||||
protected static final int FLAG_PAGE_BACKGROUNDS = 1 << 5;
|
||||
protected static final int FLAG_DISABLE_INTERACTION = 1 << 6;
|
||||
protected static final int FLAG_OVERVIEW_UI = 1 << 7;
|
||||
protected static final int FLAG_HIDE_BACK_BUTTON = 1 << 8;
|
||||
|
||||
protected static final PageAlphaProvider DEFAULT_ALPHA_PROVIDER =
|
||||
new PageAlphaProvider(ACCEL_2) {
|
||||
@@ -116,9 +114,7 @@ public class LauncherState {
|
||||
*
|
||||
* @see WorkspaceStateTransitionAnimation
|
||||
*/
|
||||
public final boolean hasScrim;
|
||||
public final boolean hasWorkspacePageBackground;
|
||||
public final boolean hasAllAppsScrim;
|
||||
|
||||
public final int transitionDuration;
|
||||
|
||||
@@ -153,10 +149,7 @@ public class LauncherState {
|
||||
this.containerType = containerType;
|
||||
this.transitionDuration = transitionDuration;
|
||||
|
||||
this.hasScrim = (flags & FLAG_SHOW_SCRIM) != 0;
|
||||
this.hasWorkspacePageBackground = (flags & FLAG_PAGE_BACKGROUNDS) != 0;
|
||||
this.hasAllAppsScrim = (flags & FLAG_ALL_APPS_SCRIM) != 0;
|
||||
|
||||
this.hasMultipleVisiblePages = (flags & FLAG_MULTI_PAGE) != 0;
|
||||
this.workspaceAccessibilityFlag = (flags & FLAG_DISABLE_ACCESSIBILITY) != 0
|
||||
? IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
|
||||
@@ -215,6 +208,10 @@ public class LauncherState {
|
||||
return 1f;
|
||||
}
|
||||
|
||||
public float getWorkspaceScrimAlpha(Launcher launcher) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public String getDescription(Launcher launcher) {
|
||||
return launcher.getWorkspace().getCurrentPageDescription();
|
||||
}
|
||||
|
||||
@@ -96,9 +96,7 @@ public class WorkspaceStateTransitionAnimation {
|
||||
|
||||
// Set scrim
|
||||
propertySetter.setFloat(ViewScrim.get(mWorkspace), ViewScrim.PROGRESS,
|
||||
state.hasScrim ? 1 : 0, Interpolators.LINEAR);
|
||||
propertySetter.setFloat(ViewScrim.get(mLauncher.getAppsView()), ViewScrim.PROGRESS,
|
||||
state.hasAllAppsScrim ? 1 : 0, Interpolators.LINEAR);
|
||||
state.getWorkspaceScrimAlpha(mLauncher), Interpolators.LINEAR);
|
||||
}
|
||||
|
||||
public void applyChildState(LauncherState state, CellLayout cl, int childIndex) {
|
||||
|
||||
@@ -47,7 +47,6 @@ import com.android.launcher3.Launcher;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.uioverrides.AllAppsScrim;
|
||||
import com.android.launcher3.keyboard.FocusedItemDecorator;
|
||||
import com.android.launcher3.userevent.nano.LauncherLogProto.Target;
|
||||
import com.android.launcher3.util.ItemInfoMatcher;
|
||||
@@ -110,9 +109,6 @@ public class AllAppsContainerView extends SpringRelativeLayout implements DragSo
|
||||
|
||||
mAllAppsStore.addUpdateListener(this::onAppsUpdated);
|
||||
|
||||
// Attach a scrim to be drawn behind all-apps and hotseat
|
||||
new AllAppsScrim(this).attach();
|
||||
|
||||
addSpringView(R.id.all_apps_header);
|
||||
addSpringView(R.id.apps_list_view);
|
||||
addSpringView(R.id.all_apps_tabs_view_pager);
|
||||
|
||||
@@ -26,9 +26,8 @@ import com.android.launcher3.R;
|
||||
import com.android.launcher3.anim.AnimationSuccessListener;
|
||||
import com.android.launcher3.anim.AnimatorSetBuilder;
|
||||
import com.android.launcher3.anim.PropertySetter;
|
||||
import com.android.launcher3.uioverrides.AllAppsScrim;
|
||||
import com.android.launcher3.graphics.ViewScrim;
|
||||
import com.android.launcher3.util.Themes;
|
||||
import com.android.launcher3.views.ScrimView;
|
||||
|
||||
/**
|
||||
* Handles AllApps view transition.
|
||||
@@ -57,7 +56,7 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil
|
||||
};
|
||||
|
||||
private AllAppsContainerView mAppsView;
|
||||
private AllAppsScrim mAllAppsScrim;
|
||||
private ScrimView mScrimView;
|
||||
|
||||
private final Launcher mLauncher;
|
||||
private final boolean mIsDarkTheme;
|
||||
@@ -117,7 +116,7 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil
|
||||
*/
|
||||
public void setProgress(float progress) {
|
||||
mProgress = progress;
|
||||
mAllAppsScrim.onVerticalProgress(progress);
|
||||
mScrimView.setProgress(progress);
|
||||
float shiftCurrent = progress * mShiftRange;
|
||||
|
||||
mAppsView.setTranslationY(shiftCurrent);
|
||||
@@ -209,8 +208,7 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil
|
||||
|
||||
public void setupViews(AllAppsContainerView appsView) {
|
||||
mAppsView = appsView;
|
||||
mAllAppsScrim = (AllAppsScrim) ViewScrim.get(mAppsView);
|
||||
mAllAppsScrim.reInitUi();
|
||||
mScrimView = mLauncher.findViewById(R.id.scrim_view);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -220,8 +218,8 @@ public class AllAppsTransitionController implements StateHandler, OnDeviceProfil
|
||||
mScrollRangeDelta = delta;
|
||||
mShiftRange = mLauncher.getDeviceProfile().heightPx - mScrollRangeDelta;
|
||||
|
||||
if (mAllAppsScrim != null) {
|
||||
mAllAppsScrim.reInitUi();
|
||||
if (mScrimView != null) {
|
||||
mScrimView.reInitUi();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -61,7 +61,6 @@ public class WorkspaceAndHotseatScrim extends ViewScrim<Workspace> implements
|
||||
|
||||
private int mFullScrimColor;
|
||||
|
||||
private final int mMaxAlpha;
|
||||
private int mAlpha = 0;
|
||||
|
||||
public WorkspaceAndHotseatScrim(Workspace view) {
|
||||
@@ -69,7 +68,6 @@ public class WorkspaceAndHotseatScrim extends ViewScrim<Workspace> implements
|
||||
mLauncher = Launcher.getLauncher(view.getContext());
|
||||
mWallpaperColorInfo = WallpaperColorInfo.getInstance(mLauncher);
|
||||
|
||||
mMaxAlpha = mLauncher.getResources().getInteger(R.integer.config_workspaceScrimAlpha);
|
||||
mMaskHeight = Utilities.pxFromDp(ALPHA_MASK_BITMAP_DP,
|
||||
view.getResources().getDisplayMetrics());
|
||||
|
||||
@@ -108,7 +106,7 @@ public class WorkspaceAndHotseatScrim extends ViewScrim<Workspace> implements
|
||||
|
||||
@Override
|
||||
protected void onProgressChanged() {
|
||||
mAlpha = Math.round(mMaxAlpha * mProgress);
|
||||
mAlpha = Math.round(255 * mProgress);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -126,9 +124,9 @@ public class WorkspaceAndHotseatScrim extends ViewScrim<Workspace> implements
|
||||
public void onExtractedColorsChanged(WallpaperColorInfo wallpaperColorInfo) {
|
||||
// for super light wallpaper it needs to be darken for contrast to workspace
|
||||
// for dark wallpapers the text is white so darkening works as well
|
||||
mFullScrimColor = ColorUtils.compositeColors(DARK_SCRIM_COLOR,
|
||||
wallpaperColorInfo.getMainColor());
|
||||
mBottomMaskPaint.setColor(mFullScrimColor);
|
||||
mBottomMaskPaint.setColor(ColorUtils.compositeColors(DARK_SCRIM_COLOR,
|
||||
wallpaperColorInfo.getMainColor()));
|
||||
mFullScrimColor = wallpaperColorInfo.getMainColor();
|
||||
}
|
||||
|
||||
public Bitmap createDitheredAlphaMask() {
|
||||
|
||||
@@ -33,7 +33,7 @@ import com.android.launcher3.userevent.nano.LauncherLogProto.ContainerType;
|
||||
*/
|
||||
public class SpringLoadedState extends LauncherState {
|
||||
|
||||
private static final int STATE_FLAGS = FLAG_SHOW_SCRIM | FLAG_MULTI_PAGE |
|
||||
private static final int STATE_FLAGS = FLAG_MULTI_PAGE |
|
||||
FLAG_DISABLE_ACCESSIBILITY | FLAG_DISABLE_RESTORE | FLAG_WORKSPACE_ICONS_CAN_BE_DRAGGED |
|
||||
FLAG_DISABLE_PAGE_CLIPPING | FLAG_PAGE_BACKGROUNDS | FLAG_HIDE_BACK_BUTTON;
|
||||
|
||||
@@ -85,6 +85,11 @@ public class SpringLoadedState extends LauncherState {
|
||||
launcher.getRotationHelper().setCurrentStateRequest(REQUEST_LOCK);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getWorkspaceScrimAlpha(Launcher launcher) {
|
||||
return 0.3f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStateDisabled(final Launcher launcher) {
|
||||
launcher.getWorkspace().getPageIndicator().setShouldAutoHide(true);
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Copyright (C) 2018 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.launcher3.views;
|
||||
|
||||
import static android.support.v4.graphics.ColorUtils.compositeColors;
|
||||
import static android.support.v4.graphics.ColorUtils.setAlphaComponent;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Rect;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
|
||||
import com.android.launcher3.Insettable;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.uioverrides.WallpaperColorInfo;
|
||||
import com.android.launcher3.uioverrides.WallpaperColorInfo.OnChangeListener;
|
||||
import com.android.launcher3.util.Themes;
|
||||
|
||||
/**
|
||||
* Simple scrim which draws a flat color
|
||||
*/
|
||||
public class ScrimView extends View implements Insettable, OnChangeListener {
|
||||
|
||||
private final WallpaperColorInfo mWallpaperColorInfo;
|
||||
protected final int mEndScrim;
|
||||
|
||||
protected float mMaxScrimAlpha;
|
||||
|
||||
protected float mProgress = 1;
|
||||
protected int mScrimColor;
|
||||
|
||||
protected int mCurrentFlatColor;
|
||||
protected int mEndFlatColor;
|
||||
protected int mEndFlatColorAlpha;
|
||||
|
||||
public ScrimView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
mWallpaperColorInfo = WallpaperColorInfo.getInstance(context);
|
||||
mEndScrim = Themes.getAttrColor(context, R.attr.allAppsScrimColor);
|
||||
|
||||
mMaxScrimAlpha = 0.7f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInsets(Rect insets) { }
|
||||
|
||||
@Override
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
mWallpaperColorInfo.addOnChangeListener(this);
|
||||
onExtractedColorsChanged(mWallpaperColorInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
mWallpaperColorInfo.removeOnChangeListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasOverlappingRendering() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onExtractedColorsChanged(WallpaperColorInfo wallpaperColorInfo) {
|
||||
mScrimColor = wallpaperColorInfo.getMainColor();
|
||||
mEndFlatColor = compositeColors(mEndScrim, setAlphaComponent(
|
||||
mScrimColor, Math.round(mMaxScrimAlpha * 255)));
|
||||
mEndFlatColorAlpha = Color.alpha(mEndFlatColor);
|
||||
updateColors();
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public void setProgress(float progress) {
|
||||
if (mProgress != progress) {
|
||||
mProgress = progress;
|
||||
updateColors();
|
||||
invalidate();
|
||||
}
|
||||
}
|
||||
|
||||
public void reInitUi() { }
|
||||
|
||||
protected void updateColors() {
|
||||
mCurrentFlatColor = mProgress >= 1 ? 0 : setAlphaComponent(
|
||||
mEndFlatColor, Math.round((1 - mProgress) * mEndFlatColorAlpha));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDraw(Canvas canvas) {
|
||||
if (mCurrentFlatColor != 0) {
|
||||
canvas.drawColor(mCurrentFlatColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user