From abc6e0c51bdb356e1d6ab2abc77be6ec3672d490 Mon Sep 17 00:00:00 2001 From: Matt Pietal Date: Fri, 14 May 2021 13:00:01 -0400 Subject: [PATCH] Controls - Use new privacy setting Wallet/controls privacy setting has been moved and split into two. Migrate the old setting if the user had previously used controls. From the QS tile, launch the activity differently when on the lock screen. Fixes: 188175341 Test: atest DeviceControlsTileTest Change-Id: If38ae1c3f0bcc8e0e75146dda09276c13a0604e9 --- core/java/android/provider/Settings.java | 14 +++++++++++ .../settings/backup/SecureSettings.java | 2 ++ .../validators/SecureSettingsValidators.java | 2 ++ .../providers/settings/SettingsProvider.java | 23 ++++++++++++++++++- .../controls/dagger/ControlsComponent.kt | 5 ++-- .../systemui/qs/tiles/DeviceControlsTile.kt | 16 +++++++++---- .../controls/dagger/ControlsComponentTest.kt | 6 ++--- .../qs/tiles/DeviceControlsTileTest.kt | 9 ++++++-- 8 files changed, 63 insertions(+), 14 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index b948ce2172ff5..0c23ae6b4b29d 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -9514,6 +9514,20 @@ public final class Settings { public static final String POWER_MENU_LOCKED_SHOW_CONTENT = "power_menu_locked_show_content"; + /** + * Whether home controls should be accessible from the lockscreen + * + * @hide + */ + public static final String LOCKSCREEN_SHOW_CONTROLS = "lockscreen_show_controls"; + + /** + * Whether wallet should be accessible from the lockscreen + * + * @hide + */ + public static final String LOCKSCREEN_SHOW_WALLET = "lockscreen_show_wallet"; + /** * Specifies whether the web action API is enabled. * diff --git a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java index 1cfdff8e24ed2..cf5408348babf 100644 --- a/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java +++ b/packages/SettingsProvider/src/android/provider/settings/backup/SecureSettings.java @@ -190,5 +190,7 @@ public class SecureSettings { Settings.Secure.ACCESSIBILITY_FLOATING_MENU_FADE_ENABLED, Settings.Secure.NOTIFICATION_BUBBLES, Settings.Secure.LOCATION_TIME_ZONE_DETECTION_ENABLED, + Settings.Secure.LOCKSCREEN_SHOW_CONTROLS, + Settings.Secure.LOCKSCREEN_SHOW_WALLET, }; } diff --git a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java index 36f5dba613557..50fab4fb42e6d 100644 --- a/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java +++ b/packages/SettingsProvider/src/android/provider/settings/validators/SecureSettingsValidators.java @@ -146,6 +146,8 @@ public class SecureSettingsValidators { VALIDATORS.put(Secure.QS_TILES, TILE_LIST_VALIDATOR); VALIDATORS.put(Secure.CONTROLS_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.POWER_MENU_LOCKED_SHOW_CONTENT, BOOLEAN_VALIDATOR); + VALIDATORS.put(Secure.LOCKSCREEN_SHOW_CONTROLS, BOOLEAN_VALIDATOR); + VALIDATORS.put(Secure.LOCKSCREEN_SHOW_WALLET, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.DOZE_ENABLED, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.DOZE_ALWAYS_ON, BOOLEAN_VALIDATOR); VALIDATORS.put(Secure.DOZE_PICK_UP_GESTURE, BOOLEAN_VALIDATOR); diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 959b6ba213844..bce576d1e1d8d 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -3547,7 +3547,7 @@ public class SettingsProvider extends ContentProvider { } private final class UpgradeController { - private static final int SETTINGS_VERSION = 202; + private static final int SETTINGS_VERSION = 203; private final int mUserId; @@ -5130,6 +5130,27 @@ public class SettingsProvider extends ContentProvider { currentVersion = 202; } + if (currentVersion == 202) { + // Version 202: Power menu has been removed, and the privacy setting + // has been split into two for wallet and controls + final SettingsState secureSettings = getSecureSettingsLocked(userId); + final Setting showLockedContent = secureSettings.getSettingLocked( + Secure.POWER_MENU_LOCKED_SHOW_CONTENT); + if (!showLockedContent.isNull()) { + String currentValue = showLockedContent.getValue(); + + secureSettings.insertSettingOverrideableByRestoreLocked( + Secure.LOCKSCREEN_SHOW_CONTROLS, + currentValue, null /* tag */, false /* makeDefault */, + SettingsState.SYSTEM_PACKAGE_NAME); + secureSettings.insertSettingOverrideableByRestoreLocked( + Secure.LOCKSCREEN_SHOW_WALLET, + currentValue, null /* tag */, false /* makeDefault */, + SettingsState.SYSTEM_PACKAGE_NAME); + } + currentVersion = 203; + } + // vXXX: Add new settings above this point. if (currentVersion != newVersion) { diff --git a/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsComponent.kt b/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsComponent.kt index 5557c86725961..469e60a3852e7 100644 --- a/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsComponent.kt +++ b/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsComponent.kt @@ -51,7 +51,6 @@ class ControlsComponent @Inject constructor( private val userTracker: UserTracker, private val secureSettings: SecureSettings ) { - private val contentResolver: ContentResolver get() = context.contentResolver @@ -66,7 +65,7 @@ class ControlsComponent @Inject constructor( init { if (featureEnabled) { secureSettings.registerContentObserver( - Settings.Secure.getUriFor(Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT), + Settings.Secure.getUriFor(Settings.Secure.LOCKSCREEN_SHOW_CONTROLS), false, /* notifyForDescendants */ showWhileLockedObserver ) @@ -116,7 +115,7 @@ class ControlsComponent @Inject constructor( private fun updateShowWhileLocked() { canShowWhileLockedSetting = secureSettings.getInt( - Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT, 0) != 0 + Settings.Secure.LOCKSCREEN_SHOW_CONTROLS, 0) != 0 } enum class Visibility { diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt index 71f42d819a1a4..11b0e010e7401 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DeviceControlsTile.kt @@ -40,6 +40,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.qs.QSHost import com.android.systemui.qs.logging.QSLogger import com.android.systemui.qs.tileimpl.QSTileImpl +import com.android.systemui.statusbar.policy.KeyguardStateController import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject @@ -52,7 +53,8 @@ class DeviceControlsTile @Inject constructor( statusBarStateController: StatusBarStateController, activityStarter: ActivityStarter, qsLogger: QSLogger, - private val controlsComponent: ControlsComponent + private val controlsComponent: ControlsComponent, + private val keyguardStateController: KeyguardStateController ) : QSTileImpl( host, backgroundLooper, @@ -101,11 +103,15 @@ class DeviceControlsTile @Inject constructor( addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) putExtra(ControlsUiController.EXTRA_ANIMATE, true) } - - val animationController = view?.let { - ActivityLaunchAnimator.Controller.fromView(it) + if (keyguardStateController.isUnlocked()) { + val animationController = view?.let { + ActivityLaunchAnimator.Controller.fromView(it) + } + mActivityStarter.startActivity(i, true /* dismissShade */, animationController) + } else { + mHost.collapsePanels() + mContext.startActivity(i) } - mActivityStarter.startActivity(i, true /* dismissShade */, animationController) } } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/dagger/ControlsComponentTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/dagger/ControlsComponentTest.kt index c678f46c0c7e7..ecefb5533c37a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/controls/dagger/ControlsComponentTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/controls/dagger/ControlsComponentTest.kt @@ -115,7 +115,7 @@ class ControlsComponentTest : SysuiTestCase() { `when`(lockPatternUtils.getStrongAuthForUser(anyInt())) .thenReturn(STRONG_AUTH_NOT_REQUIRED) `when`(keyguardStateController.isUnlocked()).thenReturn(false) - `when`(secureSettings.getInt(eq(Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT), anyInt())) + `when`(secureSettings.getInt(eq(Settings.Secure.LOCKSCREEN_SHOW_CONTROLS), anyInt())) .thenReturn(0) val component = setupComponent(true) @@ -127,7 +127,7 @@ class ControlsComponentTest : SysuiTestCase() { `when`(lockPatternUtils.getStrongAuthForUser(anyInt())) .thenReturn(STRONG_AUTH_NOT_REQUIRED) `when`(keyguardStateController.isUnlocked()).thenReturn(false) - `when`(secureSettings.getInt(eq(Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT), anyInt())) + `when`(secureSettings.getInt(eq(Settings.Secure.LOCKSCREEN_SHOW_CONTROLS), anyInt())) .thenReturn(1) val component = setupComponent(true) @@ -136,7 +136,7 @@ class ControlsComponentTest : SysuiTestCase() { @Test fun testFeatureEnabledAndCanShowWhileUnlockedVisibility() { - `when`(secureSettings.getInt(eq(Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT), anyInt())) + `when`(secureSettings.getInt(eq(Settings.Secure.LOCKSCREEN_SHOW_CONTROLS), anyInt())) .thenReturn(0) `when`(lockPatternUtils.getStrongAuthForUser(anyInt())) .thenReturn(STRONG_AUTH_NOT_REQUIRED) diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt index 6cf3434d21826..f17fe9aefbb90 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt @@ -39,6 +39,7 @@ import com.android.systemui.plugins.ActivityStarter import com.android.systemui.plugins.statusbar.StatusBarStateController import com.android.systemui.qs.QSHost import com.android.systemui.qs.logging.QSLogger +import com.android.systemui.statusbar.policy.KeyguardStateController import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.capture import com.android.systemui.util.mockito.eq @@ -87,6 +88,8 @@ class DeviceControlsTileTest : SysuiTestCase() { private lateinit var serviceInfo: ControlsServiceInfo @Mock private lateinit var uiEventLogger: UiEventLogger + @Mock + private lateinit var keyguardStateController: KeyguardStateController @Captor private lateinit var listingCallbackCaptor: ArgumentCaptor @@ -109,7 +112,8 @@ class DeviceControlsTileTest : SysuiTestCase() { `when`(qsHost.context).thenReturn(spiedContext) `when`(qsHost.uiEventLogger).thenReturn(uiEventLogger) `when`(controlsComponent.isEnabled()).thenReturn(true) - secureSettings.putInt(Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT, 1) + `when`(keyguardStateController.isUnlocked()).thenReturn(true) + secureSettings.putInt(Settings.Secure.LOCKSCREEN_SHOW_CONTROLS, 1) setupControlsComponent() @@ -306,7 +310,8 @@ class DeviceControlsTileTest : SysuiTestCase() { statusBarStateController, activityStarter, qsLogger, - controlsComponent + controlsComponent, + keyguardStateController ) } }