Merge "Remove dependencies to LockscreenWallpaper" into udc-dev

This commit is contained in:
Aurélien Pomini
2023-04-14 18:01:09 +00:00
committed by Android (Google) Code Review
5 changed files with 131 additions and 13 deletions

View File

@@ -24,6 +24,7 @@ import android.annotation.MainThread;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Notification;
import android.app.WallpaperManager;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
@@ -43,6 +44,7 @@ import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.Dumpable;
import com.android.systemui.animation.Interpolators;
import com.android.systemui.colorextraction.SysuiColorExtractor;
@@ -117,6 +119,8 @@ public class NotificationMediaManager implements Dumpable {
private ScrimController mScrimController;
@Nullable
private LockscreenWallpaper mLockscreenWallpaper;
@VisibleForTesting
boolean mIsLockscreenLiveWallpaperEnabled;
private final DelayableExecutor mMainExecutor;
@@ -179,7 +183,8 @@ public class NotificationMediaManager implements Dumpable {
StatusBarStateController statusBarStateController,
SysuiColorExtractor colorExtractor,
KeyguardStateController keyguardStateController,
DumpManager dumpManager) {
DumpManager dumpManager,
WallpaperManager wallpaperManager) {
mContext = context;
mMediaArtworkProcessor = mediaArtworkProcessor;
mKeyguardBypassController = keyguardBypassController;
@@ -195,6 +200,7 @@ public class NotificationMediaManager implements Dumpable {
mStatusBarStateController = statusBarStateController;
mColorExtractor = colorExtractor;
mKeyguardStateController = keyguardStateController;
mIsLockscreenLiveWallpaperEnabled = wallpaperManager.isLockscreenLiveWallpaperEnabled();
setupNotifPipeline();
@@ -474,13 +480,16 @@ public class NotificationMediaManager implements Dumpable {
* Refresh or remove lockscreen artwork from media metadata or the lockscreen wallpaper.
*/
public void updateMediaMetaData(boolean metaDataChanged, boolean allowEnterAnimation) {
if (mIsLockscreenLiveWallpaperEnabled) return;
Trace.beginSection("CentralSurfaces#updateMediaMetaData");
if (!SHOW_LOCKSCREEN_MEDIA_ARTWORK) {
Trace.endSection();
return;
}
if (mBackdrop == null) {
if (getBackDropView() == null) {
Trace.endSection();
return; // called too early
}
@@ -709,6 +718,12 @@ public class NotificationMediaManager implements Dumpable {
&& (mBackdropFront.isVisibleToUser() || mBackdropBack.isVisibleToUser());
}
// TODO(b/273443374) temporary test helper; remove
@VisibleForTesting
BackDropView getBackDropView() {
return mBackdrop;
}
/**
* {@link AsyncTask} to prepare album art for use as backdrop on lock screen.
*/

View File

@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.dagger;
import android.app.IActivityManager;
import android.app.WallpaperManager;
import android.content.Context;
import android.os.RemoteException;
import android.service.dreams.IDreamManager;
@@ -142,7 +143,8 @@ public interface CentralSurfacesDependenciesModule {
StatusBarStateController statusBarStateController,
SysuiColorExtractor colorExtractor,
KeyguardStateController keyguardStateController,
DumpManager dumpManager) {
DumpManager dumpManager,
WallpaperManager wallpaperManager) {
return new NotificationMediaManager(
context,
centralSurfacesOptionalLazy,
@@ -157,7 +159,8 @@ public interface CentralSurfacesDependenciesModule {
statusBarStateController,
colorExtractor,
keyguardStateController,
dumpManager);
dumpManager,
wallpaperManager);
}
/** */

View File

@@ -1354,8 +1354,13 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
mHeadsUpManager);
BackDropView backdrop = mNotificationShadeWindowView.findViewById(R.id.backdrop);
mMediaManager.setup(backdrop, backdrop.findViewById(R.id.backdrop_front),
backdrop.findViewById(R.id.backdrop_back), mScrimController, mLockscreenWallpaper);
if (mWallpaperManager.isLockscreenLiveWallpaperEnabled()) {
mMediaManager.setup(null, null, null, mScrimController, null);
} else {
mMediaManager.setup(backdrop, backdrop.findViewById(R.id.backdrop_front),
backdrop.findViewById(R.id.backdrop_back), mScrimController,
mLockscreenWallpaper);
}
float maxWallpaperZoom = mContext.getResources().getFloat(
com.android.internal.R.dimen.config_wallpaperMaxScale);
mNotificationShadeDepthControllerLazy.get().addListener(depth -> {
@@ -2720,7 +2725,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
*/
@Override
public void setLockscreenUser(int newUserId) {
if (mLockscreenWallpaper != null) {
if (mLockscreenWallpaper != null && !mWallpaperManager.isLockscreenLiveWallpaperEnabled()) {
mLockscreenWallpaper.setCurrentUser(newUserId);
}
mScrimController.setCurrentUser(newUserId);

View File

@@ -63,6 +63,11 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen
private static final String TAG = "LockscreenWallpaper";
// TODO(b/253507223): temporary; remove this
private static final String DISABLED_ERROR_MESSAGE = "Methods from LockscreenWallpaper.java "
+ "should not be called in this version. The lock screen wallpaper should be "
+ "managed by the WallpaperManagerService and not by this class.";
private final NotificationMediaManager mMediaManager;
private final WallpaperManager mWallpaperManager;
private final KeyguardUpdateMonitor mUpdateMonitor;
@@ -91,7 +96,7 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen
mMediaManager = mediaManager;
mH = mainHandler;
if (iWallpaperManager != null) {
if (iWallpaperManager != null && !mWallpaperManager.isLockscreenLiveWallpaperEnabled()) {
// Service is disabled on some devices like Automotive
try {
iWallpaperManager.setLockWallpaperCallback(this);
@@ -102,6 +107,8 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen
}
public Bitmap getBitmap() {
assertLockscreenLiveWallpaperNotEnabled();
if (mCached) {
return mCache;
}
@@ -122,9 +129,8 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen
public LoaderResult loadBitmap(int currentUserId, UserHandle selectedUser) {
// May be called on any thread - only use thread safe operations.
if (mWallpaperManager.isLockscreenLiveWallpaperEnabled()) {
return LoaderResult.success(null);
}
assertLockscreenLiveWallpaperNotEnabled();
if (!mWallpaperManager.isWallpaperSupported()) {
// When wallpaper is not supported, show the system wallpaper
@@ -164,6 +170,8 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen
}
public void setCurrentUser(int user) {
assertLockscreenLiveWallpaperNotEnabled();
if (user != mCurrentUserId) {
if (mSelectedUser == null || user != mSelectedUser.getIdentifier()) {
mCached = false;
@@ -173,6 +181,8 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen
}
public void setSelectedUser(UserHandle selectedUser) {
assertLockscreenLiveWallpaperNotEnabled();
if (Objects.equals(selectedUser, mSelectedUser)) {
return;
}
@@ -182,16 +192,18 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen
@Override
public void onWallpaperChanged() {
assertLockscreenLiveWallpaperNotEnabled();
// Called on Binder thread.
postUpdateWallpaper();
}
@Override
public void onWallpaperColorsChanged(WallpaperColors colors, int which, int userId) {
assertLockscreenLiveWallpaperNotEnabled();
}
private void postUpdateWallpaper() {
assertLockscreenLiveWallpaperNotEnabled();
if (mH == null) {
Log.wtfStack(TAG, "Trying to use LockscreenWallpaper before initialization.");
return;
@@ -199,11 +211,12 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen
mH.removeCallbacks(this);
mH.post(this);
}
@Override
public void run() {
// Called in response to onWallpaperChanged on the main thread.
assertLockscreenLiveWallpaperNotEnabled();
if (mLoader != null) {
mLoader.cancel(false /* interrupt */);
}
@@ -358,4 +371,16 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen
}
}
}
/**
* Feature b/253507223 will adapt the logic to always use the
* WallpaperManagerService to render the lock screen wallpaper.
* Methods of this class should not be called at all if the project flag is enabled.
* TODO(b/253507223) temporary assertion; remove this
*/
private void assertLockscreenLiveWallpaperNotEnabled() {
if (mWallpaperManager.isLockscreenLiveWallpaperEnabled()) {
throw new IllegalStateException(DISABLED_ERROR_MESSAGE);
}
}
}

View File

@@ -0,0 +1,70 @@
/*
* Copyright (C) 2023 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.statusbar
import android.testing.AndroidTestingRunner
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.android.systemui.util.mockito.whenever
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.anyBoolean
import org.mockito.Mockito.doCallRealMethod
import org.mockito.Mockito.doReturn
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
/**
* Temporary test for the lock screen live wallpaper project.
*
* TODO(b/273443374): remove this test
*/
@RunWith(AndroidTestingRunner::class)
@SmallTest
class NotificationMediaManagerTest : SysuiTestCase() {
@Mock private lateinit var notificationMediaManager: NotificationMediaManager
@Mock private lateinit var mockBackDropView: BackDropView
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
doCallRealMethod()
.whenever(notificationMediaManager)
.updateMediaMetaData(anyBoolean(), anyBoolean())
doReturn(mockBackDropView).whenever(notificationMediaManager).backDropView
}
@After fun tearDown() {}
/** Check that updateMediaMetaData is a no-op with mIsLockscreenLiveWallpaperEnabled = true */
@Test
fun testUpdateMediaMetaDataDisabled() {
notificationMediaManager.mIsLockscreenLiveWallpaperEnabled = true
for (metaDataChanged in listOf(true, false)) {
for (allowEnterAnimation in listOf(true, false)) {
notificationMediaManager.updateMediaMetaData(metaDataChanged, allowEnterAnimation)
verify(notificationMediaManager, never()).mediaMetadata
}
}
}
}