summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/permission/PermissionUsageHelper.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java15
2 files changed, 27 insertions, 2 deletions
diff --git a/core/java/android/permission/PermissionUsageHelper.java b/core/java/android/permission/PermissionUsageHelper.java
index 0e35ef98f1b7..4c9e77c35135 100644
--- a/core/java/android/permission/PermissionUsageHelper.java
+++ b/core/java/android/permission/PermissionUsageHelper.java
@@ -57,6 +57,8 @@ import android.util.ArraySet;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
+import com.android.internal.R;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -186,6 +188,15 @@ public class PermissionUsageHelper {
== PackageManager.PERMISSION_GRANTED;
}
+ private boolean isSpeechRecognizerUsage(String op, String packageName) {
+ if (!OPSTR_RECORD_AUDIO.equals(op)) {
+ return false;
+ }
+
+ return packageName.equals(
+ mContext.getString(R.string.config_systemSpeechRecognizer));
+ }
+
/**
* @see PermissionManager.getIndicatorAppOpUsageData
*/
@@ -317,7 +328,8 @@ public class PermissionUsageHelper {
if (packageName.equals(SYSTEM_PKG)
|| (!isUserSensitive(packageName, user, op)
&& !isLocationProvider(packageName, user)
- && !isAppPredictor(packageName, user))) {
+ && !isAppPredictor(packageName, user))
+ && !isSpeechRecognizerUsage(op, packageName)) {
continue;
}
diff --git a/packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java b/packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java
index 79f0688db869..2040347de1b5 100644
--- a/packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/appops/AppOpsControllerImpl.java
@@ -40,6 +40,7 @@ import android.util.SparseArray;
import androidx.annotation.WorkerThread;
+import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.Dumpable;
@@ -78,6 +79,7 @@ public class AppOpsControllerImpl extends BroadcastReceiver implements AppOpsCon
private static final boolean DEBUG = false;
private final BroadcastDispatcher mDispatcher;
+ private final Context mContext;
private final AppOpsManager mAppOps;
private final AudioManager mAudioManager;
private final LocationManager mLocationManager;
@@ -141,6 +143,7 @@ public class AppOpsControllerImpl extends BroadcastReceiver implements AppOpsCon
mCameraDisabled = mSensorPrivacyController.isSensorBlocked(CAMERA);
mLocationManager = context.getSystemService(LocationManager.class);
mPackageManager = context.getPackageManager();
+ mContext = context;
dumpManager.registerDumpable(TAG, this);
}
@@ -357,6 +360,15 @@ public class AppOpsControllerImpl extends BroadcastReceiver implements AppOpsCon
return mLocationProviderPackages.contains(packageName);
}
+ private boolean isSpeechRecognizerUsage(int opCode, String packageName) {
+ if (AppOpsManager.OP_RECORD_AUDIO != opCode) {
+ return false;
+ }
+
+ return packageName.equals(
+ mContext.getString(R.string.config_systemSpeechRecognizer));
+ }
+
// TODO ntmyren: remove after teamfood is finished
private boolean shouldShowAppPredictor(String pkgName) {
if (!DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, "permissions_hub_2_enabled",
@@ -388,7 +400,8 @@ public class AppOpsControllerImpl extends BroadcastReceiver implements AppOpsCon
}
// TODO ntmyren: Replace this with more robust check if this moves beyond teamfood
if ((appOpCode == AppOpsManager.OP_CAMERA && isLocationProvider(packageName))
- || shouldShowAppPredictor(packageName)) {
+ || shouldShowAppPredictor(packageName)
+ || isSpeechRecognizerUsage(appOpCode, packageName)) {
return true;
}