Loading packages/SystemUI/docs/device-entry/quickaffordance.md +4 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,10 @@ A picker experience may: * Unselect an already-selected quick affordance from a slot * Unselect all already-selected quick affordances from a slot ## Testing * Add a unit test for your implementation of `KeyguardQuickAffordanceConfig` * Manually verify that your implementation works in multi-user environments from both the main user and a secondary user ## Debugging To see the current state of the system, you can run `dumpsys`: Loading packages/SystemUI/src/com/android/systemui/keyguard/CustomizationProvider.kt +11 −6 Original line number Diff line number Diff line Loading @@ -31,10 +31,12 @@ import android.os.Bundle import android.util.Log import com.android.systemui.SystemUIAppComponentFactoryBase import com.android.systemui.SystemUIAppComponentFactoryBase.ContextAvailableCallback import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.keyguard.domain.interactor.KeyguardQuickAffordanceInteractor import com.android.systemui.keyguard.ui.preview.KeyguardRemotePreviewManager import com.android.systemui.shared.customization.data.content.CustomizationProviderContract as Contract import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.runBlocking class CustomizationProvider : Loading @@ -42,6 +44,7 @@ class CustomizationProvider : @Inject lateinit var interactor: KeyguardQuickAffordanceInteractor @Inject lateinit var previewManager: KeyguardRemotePreviewManager @Inject @Main lateinit var mainDispatcher: CoroutineDispatcher private lateinit var contextAvailableCallback: ContextAvailableCallback Loading Loading @@ -138,14 +141,16 @@ class CustomizationProvider : selectionArgs: Array<out String>?, sortOrder: String?, ): Cursor? { return when (uriMatcher.match(uri)) { MATCH_CODE_ALL_AFFORDANCES -> runBlocking { queryAffordances() } return runBlocking(mainDispatcher) { when (uriMatcher.match(uri)) { MATCH_CODE_ALL_AFFORDANCES -> queryAffordances() MATCH_CODE_ALL_SLOTS -> querySlots() MATCH_CODE_ALL_SELECTIONS -> runBlocking { querySelections() } MATCH_CODE_ALL_SELECTIONS -> querySelections() MATCH_CODE_ALL_FLAGS -> queryFlags() else -> null } } } override fun update( uri: Uri, Loading packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/CameraQuickAffordanceConfig.kt +3 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.keyguard.data.quickaffordance import android.app.StatusBarManager import android.content.Context import android.content.pm.PackageManager import com.android.systemui.R import com.android.systemui.animation.Expandable import com.android.systemui.camera.CameraGestureHelper Loading @@ -26,7 +27,6 @@ import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.Icon import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.statusbar.StatusBarState import dagger.Lazy import javax.inject.Inject import kotlinx.coroutines.flow.Flow Loading @@ -37,6 +37,7 @@ class CameraQuickAffordanceConfig @Inject constructor( @Application private val context: Context, private val packageManager: PackageManager, private val cameraGestureHelper: Lazy<CameraGestureHelper>, ) : KeyguardQuickAffordanceConfig { Loading Loading @@ -79,6 +80,6 @@ constructor( } private fun isLaunchable(): Boolean { return cameraGestureHelper.get().canCameraGestureBeLaunched(StatusBarState.KEYGUARD) return packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY) } } packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java +0 −2 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.systemui.statusbar.policy; import android.annotation.WorkerThread; import android.content.Intent; import android.content.pm.PackageManager; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCharacteristics; Loading Loading @@ -255,7 +254,6 @@ public class FlashlightControllerImpl implements FlashlightController { setTorchMode(enabled); mSecureSettings.putInt(Settings.Secure.FLASHLIGHT_AVAILABLE, 1); mSecureSettings.putInt(Secure.FLASHLIGHT_ENABLED, enabled ? 1 : 0); mBroadcastSender.sendBroadcast(new Intent(ACTION_FLASHLIGHT_CHANGED)); } } Loading packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt +2 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test Loading Loading @@ -184,6 +185,7 @@ class CustomizationProviderTest : SysuiTestCase() { mainDispatcher = testDispatcher, backgroundHandler = backgroundHandler, ) underTest.mainDispatcher = UnconfinedTestDispatcher() underTest.attachInfoForTesting( context, Loading Loading
packages/SystemUI/docs/device-entry/quickaffordance.md +4 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,10 @@ A picker experience may: * Unselect an already-selected quick affordance from a slot * Unselect all already-selected quick affordances from a slot ## Testing * Add a unit test for your implementation of `KeyguardQuickAffordanceConfig` * Manually verify that your implementation works in multi-user environments from both the main user and a secondary user ## Debugging To see the current state of the system, you can run `dumpsys`: Loading
packages/SystemUI/src/com/android/systemui/keyguard/CustomizationProvider.kt +11 −6 Original line number Diff line number Diff line Loading @@ -31,10 +31,12 @@ import android.os.Bundle import android.util.Log import com.android.systemui.SystemUIAppComponentFactoryBase import com.android.systemui.SystemUIAppComponentFactoryBase.ContextAvailableCallback import com.android.systemui.dagger.qualifiers.Main import com.android.systemui.keyguard.domain.interactor.KeyguardQuickAffordanceInteractor import com.android.systemui.keyguard.ui.preview.KeyguardRemotePreviewManager import com.android.systemui.shared.customization.data.content.CustomizationProviderContract as Contract import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.runBlocking class CustomizationProvider : Loading @@ -42,6 +44,7 @@ class CustomizationProvider : @Inject lateinit var interactor: KeyguardQuickAffordanceInteractor @Inject lateinit var previewManager: KeyguardRemotePreviewManager @Inject @Main lateinit var mainDispatcher: CoroutineDispatcher private lateinit var contextAvailableCallback: ContextAvailableCallback Loading Loading @@ -138,14 +141,16 @@ class CustomizationProvider : selectionArgs: Array<out String>?, sortOrder: String?, ): Cursor? { return when (uriMatcher.match(uri)) { MATCH_CODE_ALL_AFFORDANCES -> runBlocking { queryAffordances() } return runBlocking(mainDispatcher) { when (uriMatcher.match(uri)) { MATCH_CODE_ALL_AFFORDANCES -> queryAffordances() MATCH_CODE_ALL_SLOTS -> querySlots() MATCH_CODE_ALL_SELECTIONS -> runBlocking { querySelections() } MATCH_CODE_ALL_SELECTIONS -> querySelections() MATCH_CODE_ALL_FLAGS -> queryFlags() else -> null } } } override fun update( uri: Uri, Loading
packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/CameraQuickAffordanceConfig.kt +3 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.keyguard.data.quickaffordance import android.app.StatusBarManager import android.content.Context import android.content.pm.PackageManager import com.android.systemui.R import com.android.systemui.animation.Expandable import com.android.systemui.camera.CameraGestureHelper Loading @@ -26,7 +27,6 @@ import com.android.systemui.common.shared.model.ContentDescription import com.android.systemui.common.shared.model.Icon import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.statusbar.StatusBarState import dagger.Lazy import javax.inject.Inject import kotlinx.coroutines.flow.Flow Loading @@ -37,6 +37,7 @@ class CameraQuickAffordanceConfig @Inject constructor( @Application private val context: Context, private val packageManager: PackageManager, private val cameraGestureHelper: Lazy<CameraGestureHelper>, ) : KeyguardQuickAffordanceConfig { Loading Loading @@ -79,6 +80,6 @@ constructor( } private fun isLaunchable(): Boolean { return cameraGestureHelper.get().canCameraGestureBeLaunched(StatusBarState.KEYGUARD) return packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_ANY) } }
packages/SystemUI/src/com/android/systemui/statusbar/policy/FlashlightControllerImpl.java +0 −2 Original line number Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.systemui.statusbar.policy; import android.annotation.WorkerThread; import android.content.Intent; import android.content.pm.PackageManager; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCharacteristics; Loading Loading @@ -255,7 +254,6 @@ public class FlashlightControllerImpl implements FlashlightController { setTorchMode(enabled); mSecureSettings.putInt(Settings.Secure.FLASHLIGHT_AVAILABLE, 1); mSecureSettings.putInt(Secure.FLASHLIGHT_ENABLED, enabled ? 1 : 0); mBroadcastSender.sendBroadcast(new Intent(ACTION_FLASHLIGHT_CHANGED)); } } Loading
packages/SystemUI/tests/src/com/android/systemui/keyguard/CustomizationProviderTest.kt +2 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Test Loading Loading @@ -184,6 +185,7 @@ class CustomizationProviderTest : SysuiTestCase() { mainDispatcher = testDispatcher, backgroundHandler = backgroundHandler, ) underTest.mainDispatcher = UnconfinedTestDispatcher() underTest.attachInfoForTesting( context, Loading