Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f2337c5f authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[CS] 2/N: Define WallpaperRepository.wallpaperSupportsAmbientMode.

This will replace CentralSurfacesImpl.mWallpaperChangedReceiver. This CL
moves ScrimController to the new repo; other controllers will be moved
in future CLs.

Reasoning around NoopWallpaperRepository: Previously,
CentralSurfacesImpl was the only class calling
ScrimController.setWallpaperSupportsAmbientMode. CentralSurfacesImpl is
only included in AOSP SysUI and SysUIGo. So, the new WallpaperRepository
should also only be enabled for AOSP SysUI and SysUIGo. However,
ScrimController is included in *more* than just those two variants.
NoopWallpaperRepository should be used for those variants to ensure that
they can still use ScrimController and also still *not* pay attention to
wallpaper changes.

Bug: 277762009
Bug: 277764509
Test: manual: verify via logging that WallpaperRepository re-calcuates
supportsAmbientMode at the same pace as CentralSurfacesImpl with the
same values. Specifically verify the value is re-calcuated whenever the
wallpaper is changed or the user is switched.
Test: manual: switch users *without first switching the wallpaper* and
verify via logging that the repository re-fetches supportsAmbientMode.
(This specifically tests that the `wallpaperChanged` flow uses `.onStart
{ emit(Unit) }`, which was missing in the first iteration of this CL.)

Test: atest WallpaperRepositoryImplTest ScrimControllerTest
Change-Id: Icb69f842c52c19d89857218d07077ad90d83c1e6
Merged-In: Icb69f842c52c19d89857218d07077ad90d83c1e6
parent ca293169
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ import com.android.systemui.statusbar.policy.IndividualSensorPrivacyControllerIm
import com.android.systemui.statusbar.policy.SensorPrivacyController;
import com.android.systemui.statusbar.policy.SensorPrivacyControllerImpl;
import com.android.systemui.volume.dagger.VolumeModule;
import com.android.systemui.wallpapers.dagger.WallpaperModule;

import dagger.Binds;
import dagger.Module;
@@ -106,6 +107,7 @@ import javax.inject.Named;
        StatusBarEventsModule.class,
        StartCentralSurfacesModule.class,
        VolumeModule.class,
        WallpaperModule.class,
        KeyboardShortcutsModule.class
})
public abstract class ReferenceSystemUIModule {
+8 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import com.android.systemui.shortcut.ShortcutKeyDispatcher
import com.android.systemui.statusbar.notification.InstantAppNotifier
import com.android.systemui.statusbar.phone.KeyguardLiftController
import com.android.systemui.statusbar.phone.LockscreenWallpaper
import com.android.systemui.statusbar.phone.ScrimController
import com.android.systemui.stylus.StylusUsiPowerStartable
import com.android.systemui.temporarydisplay.chipbar.ChipbarCoordinator
import com.android.systemui.theme.ThemeOverlayController
@@ -59,6 +60,7 @@ import com.android.systemui.usb.StorageNotification
import com.android.systemui.util.NotificationChannels
import com.android.systemui.util.StartBinderLoggerModule
import com.android.systemui.volume.VolumeUI
import com.android.systemui.wallpapers.dagger.WallpaperModule
import com.android.systemui.wmshell.WMShell
import dagger.Binds
import dagger.Module
@@ -72,6 +74,7 @@ import dagger.multibindings.IntoMap
    MultiUserUtilsModule::class,
    StartControlsStartableModule::class,
    StartBinderLoggerModule::class,
    WallpaperModule::class,
])
abstract class SystemUICoreStartableModule {
    /** Inject into AuthController.  */
@@ -316,4 +319,9 @@ abstract class SystemUICoreStartableModule {
    @IntoMap
    @ClassKey(LockscreenWallpaper::class)
    abstract fun bindLockscreenWallpaper(impl: LockscreenWallpaper): CoreStartable

    @Binds
    @IntoMap
    @ClassKey(ScrimController::class)
    abstract fun bindScrimController(impl: ScrimController): CoreStartable
}
+4 −1
Original line number Diff line number Diff line
@@ -3550,6 +3550,10 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
        }
    };

    /**
     * @deprecated See {@link com.android.systemui.wallpapers.data.repository.WallpaperRepository}
     * instead.
     */
    private final BroadcastReceiver mWallpaperChangedReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
@@ -3569,7 +3573,6 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
                    && (info != null && info.supportsAmbientMode());

            mNotificationShadeWindowController.setWallpaperSupportsAmbientMode(supportsAmbientMode);
            mScrimController.setWallpaperSupportsAmbientMode(supportsAmbientMode);
            mKeyguardViewMediator.setWallpaperSupportsAmbientMode(supportsAmbientMode);
        }
    };
+19 −2
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.keyguard.BouncerPanelExpansionCalculator;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.settingslib.Utils;
import com.android.systemui.CoreStartable;
import com.android.systemui.DejankUtils;
import com.android.systemui.Dumpable;
import com.android.systemui.R;
@@ -69,8 +70,10 @@ import com.android.systemui.statusbar.notification.stack.ViewState;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.AlarmTimeout;
import com.android.systemui.util.kotlin.JavaAdapter;
import com.android.systemui.util.wakelock.DelayedWakeLock;
import com.android.systemui.util.wakelock.WakeLock;
import com.android.systemui.wallpapers.data.repository.WallpaperRepository;

import java.io.PrintWriter;
import java.lang.annotation.Retention;
@@ -87,7 +90,8 @@ import kotlinx.coroutines.CoroutineDispatcher;
 * security method gets shown).
 */
@SysUISingleton
public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dumpable {
public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dumpable,
        CoreStartable {

    static final String TAG = "ScrimController";
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@@ -205,6 +209,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
    private final KeyguardVisibilityCallback mKeyguardVisibilityCallback;
    private final Handler mHandler;
    private final Executor mMainExecutor;
    private final JavaAdapter mJavaAdapter;
    private final ScreenOffAnimationController mScreenOffAnimationController;
    private final KeyguardUnlockAnimationController mKeyguardUnlockAnimationController;
    private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
@@ -264,6 +269,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
    private boolean mKeyguardOccluded;

    private KeyguardTransitionInteractor mKeyguardTransitionInteractor;
    private final WallpaperRepository mWallpaperRepository;
    private CoroutineDispatcher mMainDispatcher;
    private boolean mIsBouncerToGoneTransitionRunning = false;
    private PrimaryBouncerToGoneTransitionViewModel mPrimaryBouncerToGoneTransitionViewModel;
@@ -293,11 +299,13 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
            DockManager dockManager,
            ConfigurationController configurationController,
            @Main Executor mainExecutor,
            JavaAdapter javaAdapter,
            ScreenOffAnimationController screenOffAnimationController,
            KeyguardUnlockAnimationController keyguardUnlockAnimationController,
            StatusBarKeyguardViewManager statusBarKeyguardViewManager,
            PrimaryBouncerToGoneTransitionViewModel primaryBouncerToGoneTransitionViewModel,
            KeyguardTransitionInteractor keyguardTransitionInteractor,
            WallpaperRepository wallpaperRepository,
            @Main CoroutineDispatcher mainDispatcher,
            LargeScreenShadeInterpolator largeScreenShadeInterpolator) {
        mScrimStateListener = lightBarController::setScrimState;
@@ -310,6 +318,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        mKeyguardVisibilityCallback = new KeyguardVisibilityCallback();
        mHandler = handler;
        mMainExecutor = mainExecutor;
        mJavaAdapter = javaAdapter;
        mScreenOffAnimationController = screenOffAnimationController;
        mTimeTicker = new AlarmTimeout(alarmManager, this::onHideWallpaperTimeout,
                "hide_aod_wallpaper", mHandler);
@@ -341,9 +350,17 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        mColors = new GradientColors();
        mPrimaryBouncerToGoneTransitionViewModel = primaryBouncerToGoneTransitionViewModel;
        mKeyguardTransitionInteractor = keyguardTransitionInteractor;
        mWallpaperRepository = wallpaperRepository;
        mMainDispatcher = mainDispatcher;
    }

    @Override
    public void start() {
        mJavaAdapter.alwaysCollectFlow(
                mWallpaperRepository.getWallpaperSupportsAmbientMode(),
                this::setWallpaperSupportsAmbientMode);
    }

    /**
     * Attach the controller to the supplied views.
     */
@@ -1531,7 +1548,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dump
        pw.println(mState.getMaxLightRevealScrimAlpha());
    }

    public void setWallpaperSupportsAmbientMode(boolean wallpaperSupportsAmbientMode) {
    private void setWallpaperSupportsAmbientMode(boolean wallpaperSupportsAmbientMode) {
        mWallpaperSupportsAmbientMode = wallpaperSupportsAmbientMode;
        ScrimState[] states = ScrimState.values();
        for (int i = 0; i < states.length; i++) {
+2 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.systemui.recents.RecentsModule;
import com.android.systemui.statusbar.dagger.CentralSurfacesDependenciesModule;
import com.android.systemui.statusbar.notification.dagger.NotificationsModule;
import com.android.systemui.statusbar.notification.row.NotificationRowModule;
import com.android.systemui.wallpapers.dagger.NoopWallpaperModule;

import dagger.Subcomponent;

@@ -39,6 +40,7 @@ import dagger.Subcomponent;
        DefaultComponentBinder.class,
        DependencyProvider.class,
        KeyguardModule.class,
        NoopWallpaperModule.class,
        NotificationRowModule.class,
        NotificationsModule.class,
        RecentsModule.class,
Loading