Merge "Default lockscreen customization on AOSP to disabled" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
8f9666c0b5
@@ -20,6 +20,10 @@ Begins with the device in low power mode, with the display active for [AOD][3] o
|
|||||||
|
|
||||||
An indication to power off the device most likely comes from one of two signals: the user presses the power button or the screen timeout has passed. This may [lock the device](#How-the-device-locks)
|
An indication to power off the device most likely comes from one of two signals: the user presses the power button or the screen timeout has passed. This may [lock the device](#How-the-device-locks)
|
||||||
|
|
||||||
|
#### Long-pressing on keyguard
|
||||||
|
|
||||||
|
OEMs may choose to enable a long-press action that displays a button at the bottom of lockscreen. This button links to lockscreen customization. This can be achieved by overriding the `long_press_keyguard_customize_lockscreen_enabled` resource in `packages/SystemUI/res/values/config.xml`.
|
||||||
|
|
||||||
#### On Lockscreen
|
#### On Lockscreen
|
||||||
|
|
||||||
#### On Lockscreen, occluded by an activity
|
#### On Lockscreen, occluded by an activity
|
||||||
|
|||||||
@@ -17,7 +17,9 @@ Tests belong in the `packages/SystemUI/tests/src/com/android/systemui/keyguard/d
|
|||||||
By default, AOSP ships with a "bottom right" and a "bottom left" slot, each with a slot capacity of `1`, allowing only one Quick Affordance on each side of the lock screen.
|
By default, AOSP ships with a "bottom right" and a "bottom left" slot, each with a slot capacity of `1`, allowing only one Quick Affordance on each side of the lock screen.
|
||||||
|
|
||||||
### Customizing Slots
|
### Customizing Slots
|
||||||
OEMs may choose to override the IDs and number of slots and/or override the default capacities. This can be achieved by overridding the `config_keyguardQuickAffordanceSlots` resource in `packages/SystemUI/res/values/config.xml`.
|
OEMs may choose to enable customization of slots. An entry point in settings will appear when overriding the `custom_lockscreen_shortcuts_enabled` resource in `packages/SystemUI/res/values/config.xml`.
|
||||||
|
|
||||||
|
OEMs may also choose to override the IDs and number of slots and/or override the default capacities. This can be achieved by overridding the `config_keyguardQuickAffordanceSlots` resource in `packages/SystemUI/res/values/config.xml`.
|
||||||
|
|
||||||
### Default Quick Affordances
|
### Default Quick Affordances
|
||||||
OEMs may also choose to predefine default Quick Affordances for each slot. To achieve this, a developer may override the `config_keyguardQuickAffordanceDefaults` resource in `packages/SystemUI/res/values/config.xml`. Note that defaults only work until the user of the device selects a different quick affordance for that slot, even if they select the "None" option.
|
OEMs may also choose to predefine default Quick Affordances for each slot. To achieve this, a developer may override the `config_keyguardQuickAffordanceDefaults` resource in `packages/SystemUI/res/values/config.xml`. Note that defaults only work until the user of the device selects a different quick affordance for that slot, even if they select the "None" option.
|
||||||
|
|||||||
@@ -44,6 +44,12 @@
|
|||||||
<!-- orientation of the dead zone when touches have recently occurred elsewhere on screen -->
|
<!-- orientation of the dead zone when touches have recently occurred elsewhere on screen -->
|
||||||
<integer name="navigation_bar_deadzone_orientation">0</integer>
|
<integer name="navigation_bar_deadzone_orientation">0</integer>
|
||||||
|
|
||||||
|
<!-- Whether or not lockscreen shortcuts can be customized -->
|
||||||
|
<bool name="custom_lockscreen_shortcuts_enabled">false</bool>
|
||||||
|
|
||||||
|
<!-- Whether or not long-pressing on keyguard will display to customize lockscreen -->
|
||||||
|
<bool name="long_press_keyguard_customize_lockscreen_enabled">false</bool>
|
||||||
|
|
||||||
<bool name="config_dead_zone_flash">false</bool>
|
<bool name="config_dead_zone_flash">false</bool>
|
||||||
|
|
||||||
<!-- Whether to enable dimming navigation buttons when wallpaper is not visible, should be
|
<!-- Whether to enable dimming navigation buttons when wallpaper is not visible, should be
|
||||||
|
|||||||
@@ -17,12 +17,14 @@
|
|||||||
|
|
||||||
package com.android.systemui.keyguard.domain.interactor
|
package com.android.systemui.keyguard.domain.interactor
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
import android.view.accessibility.AccessibilityManager
|
import android.view.accessibility.AccessibilityManager
|
||||||
import androidx.annotation.VisibleForTesting
|
import androidx.annotation.VisibleForTesting
|
||||||
import com.android.internal.logging.UiEvent
|
import com.android.internal.logging.UiEvent
|
||||||
import com.android.internal.logging.UiEventLogger
|
import com.android.internal.logging.UiEventLogger
|
||||||
|
import com.android.systemui.R
|
||||||
import com.android.systemui.broadcast.BroadcastDispatcher
|
import com.android.systemui.broadcast.BroadcastDispatcher
|
||||||
import com.android.systemui.dagger.SysUISingleton
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
import com.android.systemui.dagger.qualifiers.Application
|
import com.android.systemui.dagger.qualifiers.Application
|
||||||
@@ -55,6 +57,7 @@ import kotlinx.coroutines.launch
|
|||||||
class KeyguardLongPressInteractor
|
class KeyguardLongPressInteractor
|
||||||
@Inject
|
@Inject
|
||||||
constructor(
|
constructor(
|
||||||
|
@Application private val appContext: Context,
|
||||||
@Application private val scope: CoroutineScope,
|
@Application private val scope: CoroutineScope,
|
||||||
transitionInteractor: KeyguardTransitionInteractor,
|
transitionInteractor: KeyguardTransitionInteractor,
|
||||||
repository: KeyguardRepository,
|
repository: KeyguardRepository,
|
||||||
@@ -169,7 +172,8 @@ constructor(
|
|||||||
|
|
||||||
private fun isFeatureEnabled(): Boolean {
|
private fun isFeatureEnabled(): Boolean {
|
||||||
return featureFlags.isEnabled(Flags.LOCK_SCREEN_LONG_PRESS_ENABLED) &&
|
return featureFlags.isEnabled(Flags.LOCK_SCREEN_LONG_PRESS_ENABLED) &&
|
||||||
featureFlags.isEnabled(Flags.REVAMPED_WALLPAPER_UI)
|
featureFlags.isEnabled(Flags.REVAMPED_WALLPAPER_UI) &&
|
||||||
|
appContext.resources.getBoolean(R.bool.long_press_keyguard_customize_lockscreen_enabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Updates application state to ask to show the menu. */
|
/** Updates application state to ask to show the menu. */
|
||||||
|
|||||||
@@ -19,12 +19,15 @@ package com.android.systemui.keyguard.domain.interactor
|
|||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.app.admin.DevicePolicyManager
|
import android.app.admin.DevicePolicyManager
|
||||||
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.android.internal.widget.LockPatternUtils
|
import com.android.internal.widget.LockPatternUtils
|
||||||
|
import com.android.systemui.R
|
||||||
import com.android.systemui.animation.DialogLaunchAnimator
|
import com.android.systemui.animation.DialogLaunchAnimator
|
||||||
import com.android.systemui.animation.Expandable
|
import com.android.systemui.animation.Expandable
|
||||||
import com.android.systemui.dagger.SysUISingleton
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
|
import com.android.systemui.dagger.qualifiers.Application
|
||||||
import com.android.systemui.dagger.qualifiers.Background
|
import com.android.systemui.dagger.qualifiers.Background
|
||||||
import com.android.systemui.devicepolicy.areKeyguardShortcutsDisabled
|
import com.android.systemui.devicepolicy.areKeyguardShortcutsDisabled
|
||||||
import com.android.systemui.dock.DockManager
|
import com.android.systemui.dock.DockManager
|
||||||
@@ -75,6 +78,7 @@ constructor(
|
|||||||
private val devicePolicyManager: DevicePolicyManager,
|
private val devicePolicyManager: DevicePolicyManager,
|
||||||
private val dockManager: DockManager,
|
private val dockManager: DockManager,
|
||||||
@Background private val backgroundDispatcher: CoroutineDispatcher,
|
@Background private val backgroundDispatcher: CoroutineDispatcher,
|
||||||
|
@Application private val appContext: Context,
|
||||||
) {
|
) {
|
||||||
private val isUsingRepository: Boolean
|
private val isUsingRepository: Boolean
|
||||||
get() = featureFlags.isEnabled(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES)
|
get() = featureFlags.isEnabled(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES)
|
||||||
@@ -408,7 +412,8 @@ constructor(
|
|||||||
name = Contract.FlagsTable.FLAG_NAME_CUSTOM_LOCK_SCREEN_QUICK_AFFORDANCES_ENABLED,
|
name = Contract.FlagsTable.FLAG_NAME_CUSTOM_LOCK_SCREEN_QUICK_AFFORDANCES_ENABLED,
|
||||||
value =
|
value =
|
||||||
!isFeatureDisabledByDevicePolicy() &&
|
!isFeatureDisabledByDevicePolicy() &&
|
||||||
featureFlags.isEnabled(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES),
|
featureFlags.isEnabled(Flags.CUSTOMIZABLE_LOCK_SCREEN_QUICK_AFFORDANCES) &&
|
||||||
|
appContext.resources.getBoolean(R.bool.custom_lockscreen_shortcuts_enabled),
|
||||||
),
|
),
|
||||||
KeyguardPickerFlag(
|
KeyguardPickerFlag(
|
||||||
name = Contract.FlagsTable.FLAG_NAME_CUSTOM_CLOCKS_ENABLED,
|
name = Contract.FlagsTable.FLAG_NAME_CUSTOM_CLOCKS_ENABLED,
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import android.testing.TestableLooper
|
|||||||
import android.view.SurfaceControlViewHost
|
import android.view.SurfaceControlViewHost
|
||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.internal.widget.LockPatternUtils
|
import com.android.internal.widget.LockPatternUtils
|
||||||
|
import com.android.systemui.R
|
||||||
import com.android.systemui.SystemUIAppComponentFactoryBase
|
import com.android.systemui.SystemUIAppComponentFactoryBase
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.animation.DialogLaunchAnimator
|
import com.android.systemui.animation.DialogLaunchAnimator
|
||||||
@@ -67,6 +68,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
|
|||||||
import kotlinx.coroutines.test.TestScope
|
import kotlinx.coroutines.test.TestScope
|
||||||
import kotlinx.coroutines.test.UnconfinedTestDispatcher
|
import kotlinx.coroutines.test.UnconfinedTestDispatcher
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
|
import org.junit.After
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
@@ -103,6 +105,7 @@ class CustomizationProviderTest : SysuiTestCase() {
|
|||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
|
overrideResource(R.bool.custom_lockscreen_shortcuts_enabled, true)
|
||||||
whenever(previewRenderer.surfacePackage).thenReturn(previewSurfacePackage)
|
whenever(previewRenderer.surfacePackage).thenReturn(previewSurfacePackage)
|
||||||
whenever(previewRendererFactory.create(any())).thenReturn(previewRenderer)
|
whenever(previewRendererFactory.create(any())).thenReturn(previewRenderer)
|
||||||
whenever(backgroundHandler.looper).thenReturn(TestableLooper.get(this).looper)
|
whenever(backgroundHandler.looper).thenReturn(TestableLooper.get(this).looper)
|
||||||
@@ -195,6 +198,7 @@ class CustomizationProviderTest : SysuiTestCase() {
|
|||||||
devicePolicyManager = devicePolicyManager,
|
devicePolicyManager = devicePolicyManager,
|
||||||
dockManager = dockManager,
|
dockManager = dockManager,
|
||||||
backgroundDispatcher = testDispatcher,
|
backgroundDispatcher = testDispatcher,
|
||||||
|
appContext = mContext,
|
||||||
)
|
)
|
||||||
underTest.previewManager =
|
underTest.previewManager =
|
||||||
KeyguardRemotePreviewManager(
|
KeyguardRemotePreviewManager(
|
||||||
@@ -216,6 +220,13 @@ class CustomizationProviderTest : SysuiTestCase() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
fun tearDown() {
|
||||||
|
mContext
|
||||||
|
.getOrCreateTestableResources()
|
||||||
|
.removeOverride(R.bool.custom_lockscreen_shortcuts_enabled)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun onAttachInfo_reportsContext() {
|
fun onAttachInfo_reportsContext() {
|
||||||
val callback: SystemUIAppComponentFactoryBase.ContextAvailableCallback = mock()
|
val callback: SystemUIAppComponentFactoryBase.ContextAvailableCallback = mock()
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import android.content.Intent
|
|||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.internal.logging.UiEventLogger
|
import com.android.internal.logging.UiEventLogger
|
||||||
|
import com.android.systemui.R
|
||||||
import com.android.systemui.RoboPilotTest
|
import com.android.systemui.RoboPilotTest
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.coroutines.collectLastValue
|
import com.android.systemui.coroutines.collectLastValue
|
||||||
@@ -39,6 +40,7 @@ import kotlinx.coroutines.test.TestScope
|
|||||||
import kotlinx.coroutines.test.advanceTimeBy
|
import kotlinx.coroutines.test.advanceTimeBy
|
||||||
import kotlinx.coroutines.test.runCurrent
|
import kotlinx.coroutines.test.runCurrent
|
||||||
import kotlinx.coroutines.test.runTest
|
import kotlinx.coroutines.test.runTest
|
||||||
|
import org.junit.After
|
||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
@@ -65,6 +67,7 @@ class KeyguardLongPressInteractorTest : SysuiTestCase() {
|
|||||||
@Before
|
@Before
|
||||||
fun setUp() {
|
fun setUp() {
|
||||||
MockitoAnnotations.initMocks(this)
|
MockitoAnnotations.initMocks(this)
|
||||||
|
overrideResource(R.bool.long_press_keyguard_customize_lockscreen_enabled, true)
|
||||||
whenever(accessibilityManager.getRecommendedTimeoutMillis(anyInt(), anyInt())).thenAnswer {
|
whenever(accessibilityManager.getRecommendedTimeoutMillis(anyInt(), anyInt())).thenAnswer {
|
||||||
it.arguments[0]
|
it.arguments[0]
|
||||||
}
|
}
|
||||||
@@ -76,6 +79,13 @@ class KeyguardLongPressInteractorTest : SysuiTestCase() {
|
|||||||
runBlocking { createUnderTest() }
|
runBlocking { createUnderTest() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
fun tearDown() {
|
||||||
|
mContext
|
||||||
|
.getOrCreateTestableResources()
|
||||||
|
.removeOverride(R.bool.long_press_keyguard_customize_lockscreen_enabled)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun isEnabled() =
|
fun isEnabled() =
|
||||||
testScope.runTest {
|
testScope.runTest {
|
||||||
@@ -107,6 +117,17 @@ class KeyguardLongPressInteractorTest : SysuiTestCase() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun isEnabled_alwaysFalseWhenConfigEnabledBooleanIsFalse() =
|
||||||
|
testScope.runTest {
|
||||||
|
overrideResource(R.bool.long_press_keyguard_customize_lockscreen_enabled, false)
|
||||||
|
createUnderTest()
|
||||||
|
val isEnabled by collectLastValue(underTest.isLongPressHandlingEnabled)
|
||||||
|
runCurrent()
|
||||||
|
|
||||||
|
assertThat(isEnabled).isFalse()
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun longPressed_menuClicked_showsSettings() =
|
fun longPressed_menuClicked_showsSettings() =
|
||||||
testScope.runTest {
|
testScope.runTest {
|
||||||
@@ -267,6 +288,7 @@ class KeyguardLongPressInteractorTest : SysuiTestCase() {
|
|||||||
) {
|
) {
|
||||||
underTest =
|
underTest =
|
||||||
KeyguardLongPressInteractor(
|
KeyguardLongPressInteractor(
|
||||||
|
appContext = mContext,
|
||||||
scope = testScope.backgroundScope,
|
scope = testScope.backgroundScope,
|
||||||
transitionInteractor =
|
transitionInteractor =
|
||||||
KeyguardTransitionInteractor(
|
KeyguardTransitionInteractor(
|
||||||
|
|||||||
@@ -340,6 +340,7 @@ class KeyguardQuickAffordanceInteractorParameterizedTest : SysuiTestCase() {
|
|||||||
devicePolicyManager = devicePolicyManager,
|
devicePolicyManager = devicePolicyManager,
|
||||||
dockManager = dockManager,
|
dockManager = dockManager,
|
||||||
backgroundDispatcher = testDispatcher,
|
backgroundDispatcher = testDispatcher,
|
||||||
|
appContext = mContext,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -200,6 +200,7 @@ class KeyguardQuickAffordanceInteractorTest : SysuiTestCase() {
|
|||||||
devicePolicyManager = devicePolicyManager,
|
devicePolicyManager = devicePolicyManager,
|
||||||
dockManager = dockManager,
|
dockManager = dockManager,
|
||||||
backgroundDispatcher = testDispatcher,
|
backgroundDispatcher = testDispatcher,
|
||||||
|
appContext = mContext,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -211,6 +211,7 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
|||||||
)
|
)
|
||||||
val keyguardLongPressInteractor =
|
val keyguardLongPressInteractor =
|
||||||
KeyguardLongPressInteractor(
|
KeyguardLongPressInteractor(
|
||||||
|
appContext = mContext,
|
||||||
scope = testScope.backgroundScope,
|
scope = testScope.backgroundScope,
|
||||||
transitionInteractor =
|
transitionInteractor =
|
||||||
KeyguardTransitionInteractor(
|
KeyguardTransitionInteractor(
|
||||||
@@ -240,6 +241,7 @@ class KeyguardBottomAreaViewModelTest : SysuiTestCase() {
|
|||||||
devicePolicyManager = devicePolicyManager,
|
devicePolicyManager = devicePolicyManager,
|
||||||
dockManager = dockManager,
|
dockManager = dockManager,
|
||||||
backgroundDispatcher = testDispatcher,
|
backgroundDispatcher = testDispatcher,
|
||||||
|
appContext = mContext,
|
||||||
),
|
),
|
||||||
bottomAreaInteractor = KeyguardBottomAreaInteractor(repository = repository),
|
bottomAreaInteractor = KeyguardBottomAreaInteractor(repository = repository),
|
||||||
burnInHelperWrapper = burnInHelperWrapper,
|
burnInHelperWrapper = burnInHelperWrapper,
|
||||||
|
|||||||
Reference in New Issue
Block a user