Make some small fixes to sensor privacy ui
Allow dialog to show on lock screen. Force the user to make a decision so they can't accidentally leave the dialog and miss the opportunity. Protect the changing of state using quicksettings by the keyguard. Protect disabling sensor privacy with the dialog by the keybguard. Test: Manual Bug: 162549680 Fixes: 178759375 Change-Id: I481eea900b2a9a25c700b847c5090ea64855d55d
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<QSTile.BooleanState> implements
|
||||
IndividualSensorPrivacyController.Callback {
|
||||
|
||||
private final KeyguardStateController mKeyguard;
|
||||
private IndividualSensorPrivacyController mSensorPrivacyController;
|
||||
|
||||
/**
|
||||
@@ -61,10 +63,12 @@ public abstract class SensorPrivacyToggleTile extends QSTileImpl<QSTile.BooleanS
|
||||
StatusBarStateController statusBarStateController,
|
||||
ActivityStarter activityStarter,
|
||||
QSLogger qsLogger,
|
||||
IndividualSensorPrivacyController sensorPrivacyController) {
|
||||
IndividualSensorPrivacyController sensorPrivacyController,
|
||||
KeyguardStateController keyguardStateController) {
|
||||
super(host, backgroundLooper, mainHandler, metricsLogger, statusBarStateController,
|
||||
activityStarter, qsLogger);
|
||||
mSensorPrivacyController = sensorPrivacyController;
|
||||
mKeyguard = keyguardStateController;
|
||||
mSensorPrivacyController.observe(getLifecycle(), this);
|
||||
}
|
||||
|
||||
@@ -75,6 +79,13 @@ public abstract class SensorPrivacyToggleTile extends QSTileImpl<QSTile.BooleanS
|
||||
|
||||
@Override
|
||||
protected void handleClick() {
|
||||
if (mKeyguard.isMethodSecure() && mKeyguard.isShowing()) {
|
||||
mActivityStarter.postQSRunnableDismissingKeyguard(() -> {
|
||||
mSensorPrivacyController.setSensorBlocked(getSensorId(),
|
||||
!mSensorPrivacyController.isSensorBlocked(getSensorId()));
|
||||
});
|
||||
return;
|
||||
}
|
||||
mSensorPrivacyController.setSensorBlocked(getSensorId(),
|
||||
!mSensorPrivacyController.isSensorBlocked(getSensorId()));
|
||||
}
|
||||
|
||||
@@ -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
|
||||
* <p>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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user