diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java index b6e07b1f85306..3841daca7ebe5 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java @@ -36,6 +36,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController; +import com.android.systemui.statusbar.policy.KeyguardStateController; import javax.inject.Inject; @@ -49,9 +50,10 @@ public class CameraToggleTile extends SensorPrivacyToggleTile { StatusBarStateController statusBarStateController, ActivityStarter activityStarter, QSLogger qsLogger, - IndividualSensorPrivacyController sensorPrivacyController) { + IndividualSensorPrivacyController sensorPrivacyController, + KeyguardStateController keyguardStateController) { super(host, backgroundLooper, mainHandler, metricsLogger, statusBarStateController, - activityStarter, qsLogger, sensorPrivacyController); + activityStarter, qsLogger, sensorPrivacyController, keyguardStateController); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java index 9cc6f09f543c1..2f0071a1f198d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java @@ -36,6 +36,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.qs.QSHost; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController; +import com.android.systemui.statusbar.policy.KeyguardStateController; import javax.inject.Inject; @@ -49,9 +50,10 @@ public class MicrophoneToggleTile extends SensorPrivacyToggleTile { StatusBarStateController statusBarStateController, ActivityStarter activityStarter, QSLogger qsLogger, - IndividualSensorPrivacyController sensorPrivacyController) { + IndividualSensorPrivacyController sensorPrivacyController, + KeyguardStateController keyguardStateController) { super(host, backgroundLooper, mainHandler, metricsLogger, statusBarStateController, - activityStarter, qsLogger, sensorPrivacyController); + activityStarter, qsLogger, sensorPrivacyController, keyguardStateController); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java index 12205d6483a8a..00703e7f84038 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/SensorPrivacyToggleTile.java @@ -35,6 +35,7 @@ import com.android.systemui.qs.QSHost; import com.android.systemui.qs.logging.QSLogger; import com.android.systemui.qs.tileimpl.QSTileImpl; import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController; +import com.android.systemui.statusbar.policy.KeyguardStateController; /** * Superclass to toggle individual sensor privacy via quick settings tiles @@ -42,6 +43,7 @@ import com.android.systemui.statusbar.policy.IndividualSensorPrivacyController; public abstract class SensorPrivacyToggleTile extends QSTileImpl implements IndividualSensorPrivacyController.Callback { + private final KeyguardStateController mKeyguard; private IndividualSensorPrivacyController mSensorPrivacyController; /** @@ -61,10 +63,12 @@ public abstract class SensorPrivacyToggleTile extends QSTileImpl { + mSensorPrivacyController.setSensorBlocked(getSensorId(), + !mSensorPrivacyController.isSensorBlocked(getSensorId())); + }); + return; + } mSensorPrivacyController.setSensorBlocked(getSensorId(), !mSensorPrivacyController.isSensorBlocked(getSensorId())); } diff --git a/packages/SystemUI/src/com/android/systemui/sensorprivacy/SensorUseStartedActivity.kt b/packages/SystemUI/src/com/android/systemui/sensorprivacy/SensorUseStartedActivity.kt index c1161f1a08635..d707bca0383eb 100644 --- a/packages/SystemUI/src/com/android/systemui/sensorprivacy/SensorUseStartedActivity.kt +++ b/packages/SystemUI/src/com/android/systemui/sensorprivacy/SensorUseStartedActivity.kt @@ -17,14 +17,19 @@ package com.android.systemui.sensorprivacy import android.app.AppOpsManager +import android.app.KeyguardManager +import android.app.KeyguardManager.KeyguardDismissCallback import android.content.DialogInterface import android.content.Intent.EXTRA_PACKAGE_NAME import android.content.pm.PackageManager import android.content.res.Resources import android.hardware.SensorPrivacyManager -import android.hardware.SensorPrivacyManager.* +import android.hardware.SensorPrivacyManager.EXTRA_SENSOR +import android.hardware.SensorPrivacyManager.INDIVIDUAL_SENSOR_CAMERA +import android.hardware.SensorPrivacyManager.INDIVIDUAL_SENSOR_MICROPHONE import android.os.Bundle import android.text.Html +import android.util.Log import com.android.internal.app.AlertActivity import com.android.systemui.R @@ -35,18 +40,29 @@ import com.android.systemui.R *

The dialog is started for the user the app is running for which might be a secondary users. */ class SensorUseStartedActivity : AlertActivity(), DialogInterface.OnClickListener { + + companion object { + private val LOG_TAG = SensorUseStartedActivity::class.java.simpleName + } + private var sensor = -1 private lateinit var sensorUsePackageName: String private lateinit var sensorPrivacyManager: SensorPrivacyManager private lateinit var appOpsManager: AppOpsManager + private lateinit var keyguardManager: KeyguardManager override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + setShowWhenLocked(true) + + setFinishOnTouchOutside(false) + setResult(RESULT_CANCELED) sensorPrivacyManager = getSystemService(SensorPrivacyManager::class.java)!! appOpsManager = getSystemService(AppOpsManager::class.java)!! + keyguardManager = getSystemService(KeyguardManager::class.java)!! sensorUsePackageName = intent.getStringExtra(EXTRA_PACKAGE_NAME) ?: return sensor = intent.getIntExtra(EXTRA_SENSOR, -1).also { @@ -107,8 +123,23 @@ class SensorUseStartedActivity : AlertActivity(), DialogInterface.OnClickListene override fun onClick(dialog: DialogInterface?, which: Int) { when (which) { BUTTON_POSITIVE -> { - sensorPrivacyManager.setIndividualSensorPrivacyForProfileGroup(sensor, false) - setResult(RESULT_OK) + if (keyguardManager.isDeviceLocked) { + keyguardManager + .requestDismissKeyguard(this, object : KeyguardDismissCallback() { + override fun onDismissError() { + Log.e(LOG_TAG, "Cannot dismiss keyguard") + } + + override fun onDismissSucceeded() { + sensorPrivacyManager + .setIndividualSensorPrivacyForProfileGroup(sensor, false) + setResult(RESULT_OK) + } + }) + } else { + sensorPrivacyManager.setIndividualSensorPrivacyForProfileGroup(sensor, false) + setResult(RESULT_OK) + } } } @@ -120,4 +151,8 @@ class SensorUseStartedActivity : AlertActivity(), DialogInterface.OnClickListene sensorPrivacyManager.suppressIndividualSensorPrivacyReminders(sensorUsePackageName, false) } + + override fun onBackPressed() { + // do not allow backing out + } } \ No newline at end of file