diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 4bb1a8c530a..9929f8b27a5 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2958,6 +2958,17 @@ + + + + + + + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index aa43f12f4b6..9e3bc4b9094 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -9769,6 +9769,9 @@ Winscope Trace + + Sensors Off + Work profile settings diff --git a/src/com/android/settings/development/qstile/DevelopmentTiles.java b/src/com/android/settings/development/qstile/DevelopmentTiles.java index 5edbc7031ff..bb791abef81 100644 --- a/src/com/android/settings/development/qstile/DevelopmentTiles.java +++ b/src/com/android/settings/development/qstile/DevelopmentTiles.java @@ -16,9 +16,12 @@ package com.android.settings.development.qstile; +import android.app.settings.SettingsEnums; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; +import android.hardware.SensorPrivacyManager; +import android.app.KeyguardManager; import android.os.IBinder; import android.os.Parcel; import android.os.RemoteException; @@ -38,6 +41,8 @@ import androidx.annotation.VisibleForTesting; import com.android.internal.app.LocalePicker; import com.android.internal.statusbar.IStatusBarService; +import com.android.settings.overlay.FeatureFactory; +import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import com.android.settingslib.development.DevelopmentSettingsEnabler; import com.android.settingslib.development.SystemPropPoker; @@ -273,4 +278,45 @@ public abstract class DevelopmentTiles extends TileService { } } } -} \ No newline at end of file + + /** + * Tile to toggle sensors off to control camera, mic, and sensors managed by the SensorManager. + */ + public static class SensorsOff extends DevelopmentTiles { + private Context mContext; + private SensorPrivacyManager mSensorPrivacyManager; + private KeyguardManager mKeyguardManager; + private MetricsFeatureProvider mMetricsFeatureProvider; + private boolean mIsEnabled; + + @Override + public void onCreate() { + super.onCreate(); + mContext = getApplicationContext(); + mSensorPrivacyManager = (SensorPrivacyManager) mContext.getSystemService( + Context.SENSOR_PRIVACY_SERVICE); + mIsEnabled = mSensorPrivacyManager.isSensorPrivacyEnabled(); + mMetricsFeatureProvider = FeatureFactory.getFactory( + mContext).getMetricsFeatureProvider(); + mKeyguardManager = (KeyguardManager) mContext.getSystemService( + Context.KEYGUARD_SERVICE); + } + + @Override + protected boolean isEnabled() { + return mIsEnabled; + } + + @Override + public void setIsEnabled(boolean isEnabled) { + // Don't allow sensors to be reenabled from the lock screen. + if (mIsEnabled && mKeyguardManager.isKeyguardLocked()) { + return; + } + mMetricsFeatureProvider.action(getApplicationContext(), SettingsEnums.QS_SENSOR_PRIVACY, + isEnabled); + mIsEnabled = isEnabled; + mSensorPrivacyManager.setSensorPrivacy(isEnabled); + } + } +}