Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d8851476 authored by Robin Lee's avatar Robin Lee Committed by Android (Google) Code Review
Browse files

Merge "Use the camera override only if it resolves" into main

parents d647980c a30a1aa0
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -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)
        }
    }
}
+16 −9
Original line number Diff line number Diff line
@@ -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)
        }
    }
+7 −7
Original line number Diff line number Diff line
@@ -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)
    }
}
+2 −3
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -352,7 +352,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 */,
Loading