[DO NOT MERGE] Support blacklisting live wallpapers from showing sysui scrims am: 3b5f2224c6

Change-Id: I430906d126f08ab77dc63e06462fc68ccfe18322
This commit is contained in:
Tony Wickham 2020-03-21 02:40:51 +00:00 committed by Automerger Merge Worker
commit 6fa8c49ad5
5 changed files with 78 additions and 6 deletions

View File

@ -80,7 +80,8 @@ public class RecentsRootView extends BaseDragLayer<RecentsActivity> {
if (!insets.equals(mInsets)) {
super.setInsets(insets);
}
setBackground(insets.top == 0 ? null
setBackground(insets.top == 0 || !mAllowSysuiScrims
? null
: Themes.getAttrDrawable(getContext(), R.attr.workspaceStatusBarScrim));
}

View File

@ -118,4 +118,7 @@
<!-- Recents -->
<item type="id" name="overview_panel"/>
<string-array name="live_wallpapers_remove_sysui_scrims">
</string-array>
</resources>

View File

@ -556,7 +556,7 @@ public class DragLayer extends BaseDragLayer<Launcher> {
@Override
public void setInsets(Rect insets) {
super.setInsets(insets);
mWorkspaceScrim.onInsetsChanged(insets);
mWorkspaceScrim.onInsetsChanged(insets, mAllowSysuiScrims);
mOverviewScrim.onInsetsChanged(insets);
}

View File

@ -187,10 +187,13 @@ public class WorkspaceAndHotseatScrim extends Scrim {
anim.start();
}
public void onInsetsChanged(Rect insets) {
mDrawTopScrim = mTopScrim != null && insets.top > 0;
mDrawBottomScrim = mBottomMask != null &&
!mLauncher.getDeviceProfile().isVerticalBarLayout();
/**
* Determines whether to draw the top and/or bottom scrim based on new insets.
*/
public void onInsetsChanged(Rect insets, boolean allowSysuiScrims) {
mDrawTopScrim = allowSysuiScrims && mTopScrim != null && insets.top > 0;
mDrawBottomScrim = allowSysuiScrims && mBottomMask != null
&& !mLauncher.getDeviceProfile().isVerticalBarLayout();
}
@Override

View File

@ -23,7 +23,13 @@ import static android.view.MotionEvent.ACTION_UP;
import static com.android.launcher3.util.DefaultDisplay.getSingleFrameMs;
import android.annotation.TargetApi;
import android.app.WallpaperInfo;
import android.app.WallpaperManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Insets;
import android.graphics.Rect;
import android.graphics.RectF;
@ -39,8 +45,11 @@ import android.view.WindowInsets;
import android.view.accessibility.AccessibilityEvent;
import android.widget.FrameLayout;
import androidx.annotation.Nullable;
import com.android.launcher3.AbstractFloatingView;
import com.android.launcher3.InsettableFrameLayout;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.util.MultiValueAlpha;
@ -100,6 +109,14 @@ public abstract class BaseDragLayer<T extends Context & ActivityContext>
protected final T mActivity;
private final MultiValueAlpha mMultiValueAlpha;
private final WallpaperManager mWallpaperManager;
private final BroadcastReceiver mWallpaperChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
onWallpaperChanged();
}
};
private final String[] mWallpapersWithoutSysuiScrims;
// All the touch controllers for the view
protected TouchController[] mControllers;
@ -110,10 +127,15 @@ public abstract class BaseDragLayer<T extends Context & ActivityContext>
private TouchCompleteListener mTouchCompleteListener;
protected boolean mAllowSysuiScrims = true;
public BaseDragLayer(Context context, AttributeSet attrs, int alphaChannelCount) {
super(context, attrs);
mActivity = (T) ActivityContext.lookupContext(context);
mMultiValueAlpha = new MultiValueAlpha(this, alphaChannelCount);
mWallpaperManager = context.getSystemService(WallpaperManager.class);
mWallpapersWithoutSysuiScrims = getResources().getStringArray(
R.array.live_wallpapers_remove_sysui_scrims);
}
/**
@ -513,4 +535,47 @@ public abstract class BaseDragLayer<T extends Context & ActivityContext>
}
return super.dispatchApplyWindowInsets(insets);
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
mActivity.registerReceiver(mWallpaperChangeReceiver,
new IntentFilter(Intent.ACTION_WALLPAPER_CHANGED));
onWallpaperChanged();
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
mActivity.unregisterReceiver(mWallpaperChangeReceiver);
}
private void onWallpaperChanged() {
WallpaperInfo newWallpaperInfo = mWallpaperManager.getWallpaperInfo();
boolean oldAllowSysuiScrims = mAllowSysuiScrims;
mAllowSysuiScrims = computeAllowSysuiScrims(newWallpaperInfo);
if (mAllowSysuiScrims != oldAllowSysuiScrims) {
// Reapply insets so scrim can be removed or re-added if necessary.
setInsets(mInsets);
}
}
/**
* Determines whether we can scrim the status bar and nav bar for the given wallpaper by
* checking against a list of live wallpapers that we don't show the scrims on.
*/
private boolean computeAllowSysuiScrims(@Nullable WallpaperInfo newWallpaperInfo) {
if (newWallpaperInfo == null) {
// New wallpaper is static, not live. Thus, blacklist isn't applicable.
return true;
}
ComponentName newWallpaper = newWallpaperInfo.getComponent();
for (String wallpaperWithoutScrim : mWallpapersWithoutSysuiScrims) {
if (newWallpaper.equals(ComponentName.unflattenFromString(wallpaperWithoutScrim))) {
// New wallpaper is blacklisted from showing a scrim.
return false;
}
}
return true;
}
}