Loading packages/SystemUI/res/values/config.xml +4 −0 Original line number Diff line number Diff line Loading @@ -554,6 +554,10 @@ <!-- ID for the camera that needs extra protection --> <string translatable="false" name="config_protectedCameraId"></string> <!-- Comma-separated list of packages to exclude from camera protection e.g. "com.android.systemui,com.android.xyz" --> <string translatable="false" name="config_cameraProtectionExcludedPackages"></string> <!-- Flag to turn on the rendering of the above path or not --> <bool name="config_enableDisplayCutoutProtection">false</bool> Loading packages/SystemUI/src/com/android/systemui/CameraAvailabilityListener.kt +13 −5 Original line number Diff line number Diff line Loading @@ -37,20 +37,22 @@ class CameraAvailabilityListener( private val cameraManager: CameraManager, private val cutoutProtectionPath: Path, private val targetCameraId: String, excludedPackages: String, private val executor: Executor ) { private var cutoutBounds = Rect() private val excludedPackageIds: Set<String> private val listeners = mutableListOf<CameraTransitionCallback>() private val availabilityCallback: CameraManager.AvailabilityCallback = object : CameraManager.AvailabilityCallback() { override fun onCameraAvailable(cameraId: String) { override fun onCameraClosed(cameraId: String) { if (targetCameraId == cameraId) { notifyCameraInactive() } } override fun onCameraUnavailable(cameraId: String) { if (targetCameraId == cameraId) { override fun onCameraOpened(cameraId: String, packageId: String) { if (targetCameraId == cameraId && !isExcluded(packageId)) { notifyCameraActive() } } Loading @@ -64,6 +66,7 @@ class CameraAvailabilityListener( computed.top.roundToInt(), computed.right.roundToInt(), computed.bottom.roundToInt()) excludedPackageIds = excludedPackages.split(",").toSet() } /** Loading @@ -87,6 +90,10 @@ class CameraAvailabilityListener( listeners.remove(callback) } private fun isExcluded(packageId: String): Boolean { return excludedPackageIds.contains(packageId) } private fun registerCameraListener() { cameraManager.registerAvailabilityCallback(executor, availabilityCallback) } Loading Loading @@ -118,9 +125,10 @@ class CameraAvailabilityListener( val res = context.resources val pathString = res.getString(R.string.config_frontBuiltInDisplayCutoutProtection) val cameraId = res.getString(R.string.config_protectedCameraId) val excluded = res.getString(R.string.config_cameraProtectionExcludedPackages) return CameraAvailabilityListener( manager, pathFromString(pathString), cameraId, executor) manager, pathFromString(pathString), cameraId, excluded, executor) } private fun pathFromString(pathString: String): Path { Loading Loading
packages/SystemUI/res/values/config.xml +4 −0 Original line number Diff line number Diff line Loading @@ -554,6 +554,10 @@ <!-- ID for the camera that needs extra protection --> <string translatable="false" name="config_protectedCameraId"></string> <!-- Comma-separated list of packages to exclude from camera protection e.g. "com.android.systemui,com.android.xyz" --> <string translatable="false" name="config_cameraProtectionExcludedPackages"></string> <!-- Flag to turn on the rendering of the above path or not --> <bool name="config_enableDisplayCutoutProtection">false</bool> Loading
packages/SystemUI/src/com/android/systemui/CameraAvailabilityListener.kt +13 −5 Original line number Diff line number Diff line Loading @@ -37,20 +37,22 @@ class CameraAvailabilityListener( private val cameraManager: CameraManager, private val cutoutProtectionPath: Path, private val targetCameraId: String, excludedPackages: String, private val executor: Executor ) { private var cutoutBounds = Rect() private val excludedPackageIds: Set<String> private val listeners = mutableListOf<CameraTransitionCallback>() private val availabilityCallback: CameraManager.AvailabilityCallback = object : CameraManager.AvailabilityCallback() { override fun onCameraAvailable(cameraId: String) { override fun onCameraClosed(cameraId: String) { if (targetCameraId == cameraId) { notifyCameraInactive() } } override fun onCameraUnavailable(cameraId: String) { if (targetCameraId == cameraId) { override fun onCameraOpened(cameraId: String, packageId: String) { if (targetCameraId == cameraId && !isExcluded(packageId)) { notifyCameraActive() } } Loading @@ -64,6 +66,7 @@ class CameraAvailabilityListener( computed.top.roundToInt(), computed.right.roundToInt(), computed.bottom.roundToInt()) excludedPackageIds = excludedPackages.split(",").toSet() } /** Loading @@ -87,6 +90,10 @@ class CameraAvailabilityListener( listeners.remove(callback) } private fun isExcluded(packageId: String): Boolean { return excludedPackageIds.contains(packageId) } private fun registerCameraListener() { cameraManager.registerAvailabilityCallback(executor, availabilityCallback) } Loading Loading @@ -118,9 +125,10 @@ class CameraAvailabilityListener( val res = context.resources val pathString = res.getString(R.string.config_frontBuiltInDisplayCutoutProtection) val cameraId = res.getString(R.string.config_protectedCameraId) val excluded = res.getString(R.string.config_cameraProtectionExcludedPackages) return CameraAvailabilityListener( manager, pathFromString(pathString), cameraId, executor) manager, pathFromString(pathString), cameraId, excluded, executor) } private fun pathFromString(pathString: String): Path { Loading