diff options
7 files changed, 36 insertions, 30 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt b/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt index 11c7a3196913..ecbd3f97f4e5 100644 --- a/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt +++ b/packages/SystemUI/src/com/android/systemui/camera/CameraGestureHelper.kt @@ -69,7 +69,7 @@ class CameraGestureHelper @Inject constructor( } val resolveInfo: ResolveInfo? = packageManager.resolveActivityAsUser( - getStartCameraIntent(), + getStartCameraIntent(selectedUserInteractor.getSelectedUserId()), PackageManager.MATCH_DEFAULT_ONLY, selectedUserInteractor.getSelectedUserId() ) @@ -85,7 +85,7 @@ class CameraGestureHelper @Inject constructor( * @param source The source of the camera launch, to be passed to the camera app via [Intent] */ fun launchCamera(source: Int) { - val intent: Intent = getStartCameraIntent() + val intent: Intent = getStartCameraIntent(selectedUserInteractor.getSelectedUserId()) intent.putExtra(CameraIntents.EXTRA_LAUNCH_SOURCE, source) val wouldLaunchResolverActivity = activityIntentHelper.wouldLaunchResolverActivity( intent, selectedUserInteractor.getSelectedUserId() @@ -143,13 +143,13 @@ class CameraGestureHelper @Inject constructor( * Returns an [Intent] that can be used to start the camera app such that it occludes the * lock-screen, if needed. */ - private fun getStartCameraIntent(): Intent { + private fun getStartCameraIntent(userId: Int): Intent { val isLockScreenDismissible = keyguardStateController.canDismissLockScreen() val isSecure = keyguardStateController.isMethodSecure return if (isSecure && !isLockScreenDismissible) { - cameraIntents.getSecureCameraIntent() + cameraIntents.getSecureCameraIntent(userId) } else { - cameraIntents.getInsecureCameraIntent() + cameraIntents.getInsecureCameraIntent(userId) } } } diff --git a/packages/SystemUI/src/com/android/systemui/camera/CameraIntents.kt b/packages/SystemUI/src/com/android/systemui/camera/CameraIntents.kt index 1e17059d20e4..11375862142c 100644 --- a/packages/SystemUI/src/com/android/systemui/camera/CameraIntents.kt +++ b/packages/SystemUI/src/com/android/systemui/camera/CameraIntents.kt @@ -18,9 +18,11 @@ package com.android.systemui.camera import android.content.Context import android.content.Intent +import android.content.pm.PackageManager import android.provider.MediaStore import android.text.TextUtils import com.android.systemui.res.R +import android.util.Log class CameraIntents { companion object { @@ -28,28 +30,33 @@ class CameraIntents { val DEFAULT_INSECURE_CAMERA_INTENT_ACTION = MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA private val VIDEO_CAMERA_INTENT_ACTION = MediaStore.INTENT_ACTION_VIDEO_CAMERA const val EXTRA_LAUNCH_SOURCE = "com.android.systemui.camera_launch_source" + const val TAG = "CameraIntents" @JvmStatic - fun getOverrideCameraPackage(context: Context): String? { - context.resources.getString(R.string.config_cameraGesturePackage)?.let { - if (!TextUtils.isEmpty(it)) { - return it + fun getOverrideCameraPackage(context: Context, userId: Int): String? { + val packageName = context.resources.getString(R.string.config_cameraGesturePackage)!! + try { + if (!TextUtils.isEmpty(packageName) + && context.packageManager.getApplicationInfoAsUser(packageName, 0, userId).enabled ?: false) { + return packageName } + } catch (e: PackageManager.NameNotFoundException) { + Log.w(TAG, "Missing cameraGesturePackage $packageName", e) } return null } @JvmStatic - fun getInsecureCameraIntent(context: Context): Intent { + fun getInsecureCameraIntent(context: Context, userId: Int): Intent { val intent = Intent(DEFAULT_INSECURE_CAMERA_INTENT_ACTION) - getOverrideCameraPackage(context)?.let { intent.setPackage(it) } + getOverrideCameraPackage(context, userId)?.let { intent.setPackage(it) } return intent } @JvmStatic - fun getSecureCameraIntent(context: Context): Intent { + fun getSecureCameraIntent(context: Context, userId: Int): Intent { val intent = Intent(DEFAULT_SECURE_CAMERA_INTENT_ACTION) - getOverrideCameraPackage(context)?.let { intent.setPackage(it) } + getOverrideCameraPackage(context, userId)?.let { intent.setPackage(it) } return intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) } @@ -65,7 +72,7 @@ class CameraIntents { /** Returns an [Intent] that can be used to start the camera in video mode. */ @JvmStatic - fun getVideoCameraIntent(): Intent { + fun getVideoCameraIntent(userId: Int): Intent { return Intent(VIDEO_CAMERA_INTENT_ACTION) } } diff --git a/packages/SystemUI/src/com/android/systemui/camera/CameraIntentsWrapper.kt b/packages/SystemUI/src/com/android/systemui/camera/CameraIntentsWrapper.kt index a434617f2da7..b65c0d49fd96 100644 --- a/packages/SystemUI/src/com/android/systemui/camera/CameraIntentsWrapper.kt +++ b/packages/SystemUI/src/com/android/systemui/camera/CameraIntentsWrapper.kt @@ -29,22 +29,22 @@ constructor( /** * Returns an [Intent] that can be used to start the camera, suitable for when the device is - * already unlocked + * locked */ - fun getSecureCameraIntent(): Intent { - return CameraIntents.getSecureCameraIntent(context) + fun getSecureCameraIntent(userId: Int): Intent { + return CameraIntents.getSecureCameraIntent(context, userId) } /** * Returns an [Intent] that can be used to start the camera, suitable for when the device is not * already unlocked */ - fun getInsecureCameraIntent(): Intent { - return CameraIntents.getInsecureCameraIntent(context) + fun getInsecureCameraIntent(userId: Int): Intent { + return CameraIntents.getInsecureCameraIntent(context, userId) } /** Returns an [Intent] that can be used to start the camera in video mode. */ - fun getVideoCameraIntent(): Intent { - return CameraIntents.getVideoCameraIntent() + fun getVideoCameraIntent(userId: Int): Intent { + return CameraIntents.getVideoCameraIntent(userId) } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/VideoCameraQuickAffordanceConfig.kt b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/VideoCameraQuickAffordanceConfig.kt index bbdd90375ece..3e6e3b79a820 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/VideoCameraQuickAffordanceConfig.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/data/quickaffordance/VideoCameraQuickAffordanceConfig.kt @@ -50,14 +50,13 @@ constructor( @Background private val backgroundDispatcher: CoroutineDispatcher, ) : KeyguardQuickAffordanceConfig { - private val intent: Intent by lazy { - cameraIntents.getVideoCameraIntent().apply { + private val intent: Intent + get() = cameraIntents.getVideoCameraIntent(userTracker.userId).apply { putExtra( CameraIntents.EXTRA_LAUNCH_SOURCE, StatusBarManager.CAMERA_LAUNCH_SOURCE_QUICK_AFFORDANCE, ) } - } override val key: String get() = BuiltInKeyguardQuickAffordanceKeys.VIDEO_CAMERA diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java index 60a4606ef0d0..1fcec662dcb1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesCommandQueueCallbacks.java @@ -347,7 +347,7 @@ public class CentralSurfacesCommandQueueCallbacks implements CommandQueue.Callba } if (!mKeyguardStateController.isShowing()) { - final Intent cameraIntent = CameraIntents.getInsecureCameraIntent(mContext); + final Intent cameraIntent = CameraIntents.getInsecureCameraIntent(mContext, mUserTracker.getUserId()); cameraIntent.putExtra(CameraIntents.EXTRA_LAUNCH_SOURCE, source); mActivityStarter.startActivityDismissingKeyguard(cameraIntent, false /* onlyProvisioned */, true /* dismissShade */, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index 6e3aabf7c754..21052d72c1bc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -1800,10 +1800,10 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { } pw.println("Camera gesture intents:"); - pw.println(" Insecure camera: " + CameraIntents.getInsecureCameraIntent(mContext)); - pw.println(" Secure camera: " + CameraIntents.getSecureCameraIntent(mContext)); + pw.println(" Insecure camera: " + CameraIntents.getInsecureCameraIntent(mContext, mUserTracker.getUserId())); + pw.println(" Secure camera: " + CameraIntents.getSecureCameraIntent(mContext, mUserTracker.getUserId())); pw.println(" Override package: " - + CameraIntents.getOverrideCameraPackage(mContext)); + + CameraIntents.getOverrideCameraPackage(mContext, mUserTracker.getUserId())); } private void createAndAddWindows(@Nullable RegisterStatusBarResult result) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt b/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt index 6d3cc4c536f1..669795bc91a8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/camera/CameraGestureHelperTest.kt @@ -81,10 +81,10 @@ class CameraGestureHelperTest : SysuiTestCase() { @Before fun setUp() { MockitoAnnotations.initMocks(this) - whenever(cameraIntents.getSecureCameraIntent()).thenReturn( + whenever(cameraIntents.getSecureCameraIntent(anyInt())).thenReturn( Intent(CameraIntents.DEFAULT_SECURE_CAMERA_INTENT_ACTION) ) - whenever(cameraIntents.getInsecureCameraIntent()).thenReturn( + whenever(cameraIntents.getInsecureCameraIntent(anyInt())).thenReturn( Intent(CameraIntents.DEFAULT_INSECURE_CAMERA_INTENT_ACTION) ) |