Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java +10 −2 Original line number Diff line number Diff line Loading @@ -52,7 +52,9 @@ import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.DeviceStateRotationLockSettingController; import com.android.systemui.statusbar.policy.RotationLockController; import com.android.systemui.statusbar.policy.RotationLockControllerImpl; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.settings.FakeSettings; import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.util.wrapper.RotationPolicyWrapper; import org.junit.After; Loading Loading @@ -111,6 +113,7 @@ public class RotationLockTileTest extends SysuiTestCase { private TestableLooper mTestableLooper; private RotationLockTile mLockTile; private TestableResources mTestableResources; private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock()); public RotationLockTileTest(FlagsParameterization flags) { super(); Loading @@ -128,8 +131,13 @@ public class RotationLockTileTest extends SysuiTestCase { mTestableResources.addOverride(com.android.internal.R.bool.config_allowRotationResolver, true); mController = new RotationLockControllerImpl(mRotationPolicyWrapper, mDeviceStateRotationLockSettingController, DEFAULT_SETTINGS); mController = new RotationLockControllerImpl( mRotationPolicyWrapper, mDeviceStateRotationLockSettingController, DEFAULT_SETTINGS, mFakeExecutor, mFakeExecutor ); mLockTile = new RotationLockTile( mHost, Loading packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/RotationLockControllerImplTest.java +9 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,8 @@ import androidx.test.filters.SmallTest; import com.android.internal.view.RotationPolicy; import com.android.systemui.SysuiTestCase; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.util.wrapper.RotationPolicyWrapper; import org.junit.Before; Loading @@ -53,6 +55,8 @@ public class RotationLockControllerImplTest extends SysuiTestCase { private ArgumentCaptor<RotationPolicy.RotationPolicyListener> mRotationPolicyListenerCaptor; private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock()); @Before public void setUp() { MockitoAnnotations.initMocks(/* testClass= */ this); Loading @@ -79,6 +83,7 @@ public class RotationLockControllerImplTest extends SysuiTestCase { public void whenFlagOn_deviceStateRotationControllerAddedToCallbacks() { createRotationLockController(); captureRotationPolicyListener().onChange(); mFakeExecutor.runAllReady(); verify(mDeviceStateRotationLockSettingController) .onRotationLockStateChanged(anyBoolean(), anyBoolean()); Loading @@ -98,6 +103,9 @@ public class RotationLockControllerImplTest extends SysuiTestCase { new RotationLockControllerImpl( mRotationPolicyWrapper, Optional.of(mDeviceStateRotationLockSettingController), deviceStateRotationLockDefaults); deviceStateRotationLockDefaults, mFakeExecutor, mFakeExecutor ); } } packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockControllerImpl.java +37 −7 Original line number Diff line number Diff line Loading @@ -23,15 +23,18 @@ import android.content.Context; import android.content.pm.PackageManager; import android.os.UserHandle; import androidx.annotation.MainThread; 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.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.util.wrapper.RotationPolicyWrapper; import java.util.Optional; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Named; Loading @@ -55,13 +58,17 @@ public final class RotationLockControllerImpl implements RotationLockController private final Optional<DeviceStateRotationLockSettingController> mDeviceStateRotationLockSettingController; private final boolean mIsPerDeviceStateRotationLockEnabled; private final Executor mBgExecutor; private final Executor mMainExecutor; @Inject public RotationLockControllerImpl( RotationPolicyWrapper rotationPolicyWrapper, Optional<DeviceStateRotationLockSettingController> deviceStateRotationLockSettingController, @Named(DEVICE_STATE_ROTATION_LOCK_DEFAULTS) String[] deviceStateRotationLockDefaults @Named(DEVICE_STATE_ROTATION_LOCK_DEFAULTS) String[] deviceStateRotationLockDefaults, @Background Executor bgExecutor, @Main Executor mainExecutor ) { mRotationPolicy = rotationPolicyWrapper; mIsPerDeviceStateRotationLockEnabled = deviceStateRotationLockDefaults.length > 0; Loading @@ -72,6 +79,8 @@ public final class RotationLockControllerImpl implements RotationLockController && mDeviceStateRotationLockSettingController.isPresent()) { mCallbacks.add(mDeviceStateRotationLockSettingController.get()); } mBgExecutor = bgExecutor; mMainExecutor = mainExecutor; setListening(true); } Loading Loading @@ -126,14 +135,35 @@ public final class RotationLockControllerImpl implements RotationLockController } private void notifyChanged() { mBgExecutor.execute(() -> { boolean isRotationLocked = mRotationPolicy.isRotationLocked(); boolean isRotationLockToggleVisible = mRotationPolicy.isRotationLockToggleVisible(); for (RotationLockControllerCallback callback : mCallbacks) { notifyChanged(callback); mMainExecutor.execute( () -> notifyChanged(callback, isRotationLocked, isRotationLockToggleVisible) ); } }); } private void notifyChanged(RotationLockControllerCallback callback) { callback.onRotationLockStateChanged(mRotationPolicy.isRotationLocked(), mRotationPolicy.isRotationLockToggleVisible()); mBgExecutor.execute(() -> { boolean isRotationLocked = mRotationPolicy.isRotationLocked(); boolean isRotationLockToggleVisible = mRotationPolicy.isRotationLockToggleVisible(); mMainExecutor.execute( () -> notifyChanged(callback, isRotationLocked, isRotationLockToggleVisible) ); }); } @MainThread // This should be called in main thread as consumers expect it. private void notifyChanged( RotationLockControllerCallback callback, boolean isRotationLocked, boolean isRotationLockToggleVisible ) { callback.onRotationLockStateChanged(isRotationLocked, isRotationLockToggleVisible); } public static boolean hasSufficientPermission(Context context) { Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/RotationLockTileTest.java +10 −2 Original line number Diff line number Diff line Loading @@ -52,7 +52,9 @@ import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.DeviceStateRotationLockSettingController; import com.android.systemui.statusbar.policy.RotationLockController; import com.android.systemui.statusbar.policy.RotationLockControllerImpl; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.settings.FakeSettings; import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.util.wrapper.RotationPolicyWrapper; import org.junit.After; Loading Loading @@ -111,6 +113,7 @@ public class RotationLockTileTest extends SysuiTestCase { private TestableLooper mTestableLooper; private RotationLockTile mLockTile; private TestableResources mTestableResources; private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock()); public RotationLockTileTest(FlagsParameterization flags) { super(); Loading @@ -128,8 +131,13 @@ public class RotationLockTileTest extends SysuiTestCase { mTestableResources.addOverride(com.android.internal.R.bool.config_allowRotationResolver, true); mController = new RotationLockControllerImpl(mRotationPolicyWrapper, mDeviceStateRotationLockSettingController, DEFAULT_SETTINGS); mController = new RotationLockControllerImpl( mRotationPolicyWrapper, mDeviceStateRotationLockSettingController, DEFAULT_SETTINGS, mFakeExecutor, mFakeExecutor ); mLockTile = new RotationLockTile( mHost, Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/RotationLockControllerImplTest.java +9 −1 Original line number Diff line number Diff line Loading @@ -28,6 +28,8 @@ import androidx.test.filters.SmallTest; import com.android.internal.view.RotationPolicy; import com.android.systemui.SysuiTestCase; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.util.wrapper.RotationPolicyWrapper; import org.junit.Before; Loading @@ -53,6 +55,8 @@ public class RotationLockControllerImplTest extends SysuiTestCase { private ArgumentCaptor<RotationPolicy.RotationPolicyListener> mRotationPolicyListenerCaptor; private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock()); @Before public void setUp() { MockitoAnnotations.initMocks(/* testClass= */ this); Loading @@ -79,6 +83,7 @@ public class RotationLockControllerImplTest extends SysuiTestCase { public void whenFlagOn_deviceStateRotationControllerAddedToCallbacks() { createRotationLockController(); captureRotationPolicyListener().onChange(); mFakeExecutor.runAllReady(); verify(mDeviceStateRotationLockSettingController) .onRotationLockStateChanged(anyBoolean(), anyBoolean()); Loading @@ -98,6 +103,9 @@ public class RotationLockControllerImplTest extends SysuiTestCase { new RotationLockControllerImpl( mRotationPolicyWrapper, Optional.of(mDeviceStateRotationLockSettingController), deviceStateRotationLockDefaults); deviceStateRotationLockDefaults, mFakeExecutor, mFakeExecutor ); } }
packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockControllerImpl.java +37 −7 Original line number Diff line number Diff line Loading @@ -23,15 +23,18 @@ import android.content.Context; import android.content.pm.PackageManager; import android.os.UserHandle; import androidx.annotation.MainThread; 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.dagger.qualifiers.Background; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.util.wrapper.RotationPolicyWrapper; import java.util.Optional; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Executor; import javax.inject.Inject; import javax.inject.Named; Loading @@ -55,13 +58,17 @@ public final class RotationLockControllerImpl implements RotationLockController private final Optional<DeviceStateRotationLockSettingController> mDeviceStateRotationLockSettingController; private final boolean mIsPerDeviceStateRotationLockEnabled; private final Executor mBgExecutor; private final Executor mMainExecutor; @Inject public RotationLockControllerImpl( RotationPolicyWrapper rotationPolicyWrapper, Optional<DeviceStateRotationLockSettingController> deviceStateRotationLockSettingController, @Named(DEVICE_STATE_ROTATION_LOCK_DEFAULTS) String[] deviceStateRotationLockDefaults @Named(DEVICE_STATE_ROTATION_LOCK_DEFAULTS) String[] deviceStateRotationLockDefaults, @Background Executor bgExecutor, @Main Executor mainExecutor ) { mRotationPolicy = rotationPolicyWrapper; mIsPerDeviceStateRotationLockEnabled = deviceStateRotationLockDefaults.length > 0; Loading @@ -72,6 +79,8 @@ public final class RotationLockControllerImpl implements RotationLockController && mDeviceStateRotationLockSettingController.isPresent()) { mCallbacks.add(mDeviceStateRotationLockSettingController.get()); } mBgExecutor = bgExecutor; mMainExecutor = mainExecutor; setListening(true); } Loading Loading @@ -126,14 +135,35 @@ public final class RotationLockControllerImpl implements RotationLockController } private void notifyChanged() { mBgExecutor.execute(() -> { boolean isRotationLocked = mRotationPolicy.isRotationLocked(); boolean isRotationLockToggleVisible = mRotationPolicy.isRotationLockToggleVisible(); for (RotationLockControllerCallback callback : mCallbacks) { notifyChanged(callback); mMainExecutor.execute( () -> notifyChanged(callback, isRotationLocked, isRotationLockToggleVisible) ); } }); } private void notifyChanged(RotationLockControllerCallback callback) { callback.onRotationLockStateChanged(mRotationPolicy.isRotationLocked(), mRotationPolicy.isRotationLockToggleVisible()); mBgExecutor.execute(() -> { boolean isRotationLocked = mRotationPolicy.isRotationLocked(); boolean isRotationLockToggleVisible = mRotationPolicy.isRotationLockToggleVisible(); mMainExecutor.execute( () -> notifyChanged(callback, isRotationLocked, isRotationLockToggleVisible) ); }); } @MainThread // This should be called in main thread as consumers expect it. private void notifyChanged( RotationLockControllerCallback callback, boolean isRotationLocked, boolean isRotationLockToggleVisible ) { callback.onRotationLockStateChanged(isRotationLocked, isRotationLockToggleVisible); } public static boolean hasSufficientPermission(Context context) { Loading