diff options
7 files changed, 98 insertions, 14 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java index fee358a7c15d..83860ecf168b 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java @@ -63,6 +63,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.util.List; +import java.util.Optional; import platform.test.runner.parameterized.ParameterizedAndroidJunit4; import platform.test.runner.parameterized.Parameters; @@ -100,7 +101,7 @@ public class RotationLockTileTest extends SysuiTestCase { @Mock private BatteryController mBatteryController; @Mock - DeviceStateRotationLockSettingController mDeviceStateRotationLockSettingController; + Optional<DeviceStateRotationLockSettingController> mDeviceStateRotationLockSettingController; @Mock RotationPolicyWrapper mRotationPolicyWrapper; @Mock diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/RotationLockControllerImplTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/RotationLockControllerImplTest.java index 8593f6a08b5a..605e4a47275b 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/RotationLockControllerImplTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/RotationLockControllerImplTest.java @@ -37,15 +37,19 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import java.util.Optional; + @RunWith(AndroidJUnit4.class) @TestableLooper.RunWithLooper @SmallTest public class RotationLockControllerImplTest extends SysuiTestCase { - private static final String[] DEFAULT_SETTINGS = new String[] {"0:0", "1:2"}; + private static final String[] DEFAULT_SETTINGS = new String[]{"0:0", "1:2"}; - @Mock RotationPolicyWrapper mRotationPolicyWrapper; - @Mock DeviceStateRotationLockSettingController mDeviceStateRotationLockSettingController; + @Mock + RotationPolicyWrapper mRotationPolicyWrapper; + @Mock + DeviceStateRotationLockSettingController mDeviceStateRotationLockSettingController; private ArgumentCaptor<RotationPolicy.RotationPolicyListener> mRotationPolicyListenerCaptor; @@ -93,7 +97,7 @@ public class RotationLockControllerImplTest extends SysuiTestCase { private void createRotationLockController(String[] deviceStateRotationLockDefaults) { new RotationLockControllerImpl( mRotationPolicyWrapper, - mDeviceStateRotationLockSettingController, + Optional.of(mDeviceStateRotationLockSettingController), deviceStateRotationLockDefaults); } } diff --git a/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java index 3c68e3a09f02..a25faa3a7aec 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSystemUIModule.java @@ -56,6 +56,7 @@ import com.android.systemui.reardisplay.RearDisplayModule; import com.android.systemui.recents.Recents; import com.android.systemui.recents.RecentsImplementation; import com.android.systemui.recents.RecentsModule; +import com.android.systemui.rotationlock.DeviceStateAutoRotateModule; import com.android.systemui.rotationlock.RotationLockModule; import com.android.systemui.rotationlock.RotationLockNewModule; import com.android.systemui.scene.SceneContainerFrameworkModule; @@ -132,6 +133,7 @@ import javax.inject.Named; CollapsedStatusBarFragmentStartableModule.class, ConnectingDisplayViewModel.StartableModule.class, DefaultBlueprintModule.class, + DeviceStateAutoRotateModule.class, EmergencyGestureModule.class, GestureModule.class, HeadsUpModule.class, diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java index fe5a82cb5b8c..f8cf6b007041 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java @@ -105,6 +105,7 @@ import com.android.systemui.qs.footer.dagger.FooterActionsModule; import com.android.systemui.recents.Recents; import com.android.systemui.recordissue.RecordIssueModule; import com.android.systemui.retail.RetailModeModule; +import com.android.systemui.rotationlock.DeviceStateAutoRotateModule.BoundsDeviceStateAutoRotateModule; import com.android.systemui.scene.shared.model.SceneContainerConfig; import com.android.systemui.scene.shared.model.SceneDataSource; import com.android.systemui.scene.shared.model.SceneDataSourceDelegator; @@ -145,6 +146,7 @@ import com.android.systemui.statusbar.phone.CentralSurfaces; import com.android.systemui.statusbar.phone.ConfigurationControllerModule; import com.android.systemui.statusbar.phone.LetterboxModule; import com.android.systemui.statusbar.pipeline.dagger.StatusBarPipelineModule; +import com.android.systemui.statusbar.policy.DeviceStateRotationLockSettingController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.PolicyModule; import com.android.systemui.statusbar.policy.SensitiveNotificationProtectionController; @@ -391,6 +393,11 @@ public abstract class SystemUIModule { @BindsOptionalOf abstract LockscreenContent optionalLockscreenContent(); + @BindsOptionalOf + @BoundsDeviceStateAutoRotateModule + abstract Optional<DeviceStateRotationLockSettingController> + optionalDeviceStateRotationLockSettingController(); + @SysUISingleton @Binds abstract SystemClock bindSystemClock(SystemClockImpl systemClock); @@ -466,6 +473,16 @@ public abstract class SystemUIModule { return new SceneDataSourceDelegator(applicationScope, config); } + @Provides + @SysUISingleton + static Optional<DeviceStateRotationLockSettingController> + provideDeviceStateRotationLockSettingController( + @BoundsDeviceStateAutoRotateModule + Optional<Optional<DeviceStateRotationLockSettingController>> optionalOfOptional + ) { + return optionalOfOptional.orElseGet(Optional::empty); + } + @Binds abstract SceneDataSource bindSceneDataSource(SceneDataSourceDelegator delegator); diff --git a/packages/SystemUI/src/com/android/systemui/rotationlock/DeviceStateAutoRotateModule.kt b/packages/SystemUI/src/com/android/systemui/rotationlock/DeviceStateAutoRotateModule.kt new file mode 100644 index 000000000000..628280210236 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/rotationlock/DeviceStateAutoRotateModule.kt @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2025 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.rotationlock + +import com.android.systemui.dagger.SysUISingleton +import com.android.systemui.statusbar.policy.DeviceStateRotationLockSettingController +import com.android.window.flags.Flags +import dagger.Module +import dagger.Provides +import java.util.Optional +import javax.inject.Provider +import javax.inject.Qualifier + +@Module +class DeviceStateAutoRotateModule { + /** Qualifier for dependencies to be bound with [DeviceStateAutoRotateModule]. */ + @Qualifier + @MustBeDocumented + @Retention(AnnotationRetention.RUNTIME) + annotation class BoundsDeviceStateAutoRotateModule + + /** + * Provides an instance of [DeviceStateRotationLockSettingController]. + * + * @param controllerProvider The provider for [DeviceStateRotationLockSettingController]. + * @return An [Optional] containing the [DeviceStateRotationLockSettingController] instance if + * the `Flags.enableDeviceStateAutoRotateSettingRefactor()` flag is disabled, or an empty + * [Optional] otherwise. + */ + @Provides + @BoundsDeviceStateAutoRotateModule + @SysUISingleton + fun provideDeviceStateRotationLockSettingController( + controllerProvider: Provider<DeviceStateRotationLockSettingController> + ): Optional<DeviceStateRotationLockSettingController> = + if (Flags.enableDeviceStateAutoRotateSettingRefactor()) { + Optional.empty() + } else { + Optional.of(controllerProvider.get()) + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingController.java index 88cf46a0ca07..b13e01be40f7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceStateRotationLockSettingController.java @@ -29,7 +29,6 @@ import androidx.annotation.NonNull; import com.android.settingslib.devicestate.DeviceStateRotationLockSettingsManager; import com.android.systemui.Dumpable; -import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dump.DumpManager; import com.android.systemui.util.wrapper.RotationPolicyWrapper; @@ -43,7 +42,6 @@ import javax.inject.Inject; * Handles reading and writing of rotation lock settings per device state, as well as setting the * rotation lock when device state changes. */ -@SysUISingleton public final class DeviceStateRotationLockSettingController implements Listenable, RotationLockController.RotationLockControllerCallback, Dumpable { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockControllerImpl.java index 797aa1f3a3dd..3ee7f33e3d3a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockControllerImpl.java @@ -27,8 +27,10 @@ import androidx.annotation.NonNull; import com.android.internal.view.RotationPolicy.RotationPolicyListener; import com.android.systemui.dagger.SysUISingleton; +import com.android.systemui.rotationlock.DeviceStateAutoRotateModule.BoundsDeviceStateAutoRotateModule; import com.android.systemui.util.wrapper.RotationPolicyWrapper; +import java.util.Optional; import java.util.concurrent.CopyOnWriteArrayList; import javax.inject.Inject; @@ -50,21 +52,25 @@ public final class RotationLockControllerImpl implements RotationLockController }; private final RotationPolicyWrapper mRotationPolicy; - private final DeviceStateRotationLockSettingController + private final Optional<DeviceStateRotationLockSettingController> mDeviceStateRotationLockSettingController; private final boolean mIsPerDeviceStateRotationLockEnabled; @Inject public RotationLockControllerImpl( RotationPolicyWrapper rotationPolicyWrapper, - DeviceStateRotationLockSettingController deviceStateRotationLockSettingController, + Optional<DeviceStateRotationLockSettingController> + deviceStateRotationLockSettingController, @Named(DEVICE_STATE_ROTATION_LOCK_DEFAULTS) String[] deviceStateRotationLockDefaults ) { mRotationPolicy = rotationPolicyWrapper; - mDeviceStateRotationLockSettingController = deviceStateRotationLockSettingController; mIsPerDeviceStateRotationLockEnabled = deviceStateRotationLockDefaults.length > 0; - if (mIsPerDeviceStateRotationLockEnabled) { - mCallbacks.add(mDeviceStateRotationLockSettingController); + mDeviceStateRotationLockSettingController = + deviceStateRotationLockSettingController; + + if (mIsPerDeviceStateRotationLockEnabled + && mDeviceStateRotationLockSettingController.isPresent()) { + mCallbacks.add(mDeviceStateRotationLockSettingController.get()); } setListening(true); @@ -113,8 +119,9 @@ public final class RotationLockControllerImpl implements RotationLockController } else { mRotationPolicy.unregisterRotationPolicyListener(mRotationPolicyListener); } - if (mIsPerDeviceStateRotationLockEnabled) { - mDeviceStateRotationLockSettingController.setListening(listening); + if (mIsPerDeviceStateRotationLockEnabled + && mDeviceStateRotationLockSettingController.isPresent()) { + mDeviceStateRotationLockSettingController.get().setListening(listening); } } |