Makes camera config dep. lazy.

This was needed because of a Dagger-related crash when querying the
content provider while a secondary user is selected. I don't understand
why it was happening, but this fixes it and is a safe fix.

Also formats the file using `ktfmt`.

Bug: 254333599
Test: when signed in with a secondary user and querying the quick
affordance content provider from the wallpaper picker experience, we no
longer see a crash.

Change-Id: Ie195b21934179576051371181560c2263284b98c
This commit is contained in:
Alejandro Nijamkin
2022-11-23 11:59:23 -08:00
parent 94f82c678b
commit 6d638a8956
2 changed files with 32 additions and 19 deletions

View File

@@ -26,14 +26,17 @@ 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 dagger.Lazy
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flowOf
import javax.inject.Inject
@SysUISingleton
class CameraQuickAffordanceConfig @Inject constructor(
@Application private val context: Context,
private val cameraGestureHelper: CameraGestureHelper,
class CameraQuickAffordanceConfig
@Inject
constructor(
@Application private val context: Context,
private val cameraGestureHelper: Lazy<CameraGestureHelper>,
) : KeyguardQuickAffordanceConfig {
override val key: String
@@ -46,17 +49,23 @@ class CameraQuickAffordanceConfig @Inject constructor(
get() = com.android.internal.R.drawable.perm_group_camera
override val lockScreenState: Flow<KeyguardQuickAffordanceConfig.LockScreenState>
get() = flowOf(
KeyguardQuickAffordanceConfig.LockScreenState.Visible(
icon = Icon.Resource(
get() =
flowOf(
KeyguardQuickAffordanceConfig.LockScreenState.Visible(
icon =
Icon.Resource(
com.android.internal.R.drawable.perm_group_camera,
ContentDescription.Resource(R.string.accessibility_camera_button)
)
)
)
)
)
override fun onTriggered(expandable: Expandable?): KeyguardQuickAffordanceConfig.OnTriggeredResult {
cameraGestureHelper.launchCamera(StatusBarManager.CAMERA_LAUNCH_SOURCE_QUICK_AFFORDANCE)
override fun onTriggered(
expandable: Expandable?
): KeyguardQuickAffordanceConfig.OnTriggeredResult {
cameraGestureHelper
.get()
.launchCamera(StatusBarManager.CAMERA_LAUNCH_SOURCE_QUICK_AFFORDANCE)
return KeyguardQuickAffordanceConfig.OnTriggeredResult.Handled
}
}
}

View File

@@ -37,25 +37,29 @@ class CameraQuickAffordanceConfigTest : SysuiTestCase() {
@Mock private lateinit var cameraGestureHelper: CameraGestureHelper
@Mock private lateinit var context: Context
private lateinit var underTest: CameraQuickAffordanceConfig
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
underTest = CameraQuickAffordanceConfig(
underTest =
CameraQuickAffordanceConfig(
context,
cameraGestureHelper,
)
) {
cameraGestureHelper
}
}
@Test
fun `affordance triggered -- camera launch called`() {
//when
// When
val result = underTest.onTriggered(null)
//then
// Then
verify(cameraGestureHelper)
.launchCamera(StatusBarManager.CAMERA_LAUNCH_SOURCE_QUICK_AFFORDANCE)
.launchCamera(StatusBarManager.CAMERA_LAUNCH_SOURCE_QUICK_AFFORDANCE)
assertEquals(KeyguardQuickAffordanceConfig.OnTriggeredResult.Handled, result)
}
}
}