Allow only preloaded voice recognition services to blame calling apps.

Bug: 170795434
Test: manual
Merged-In: Ided2b19661d937ff0b4ec881f2e629afe47435e5
Change-Id: I92a146e5763afd07a44f8e9c7a3c71a27d1f16bd
This commit is contained in:
Ahaan Ugale
2020-11-20 12:25:27 -08:00
parent 35c4f102e4
commit 19e29925ee

View File

@@ -34,6 +34,7 @@ import android.compat.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
import android.database.DatabaseUtils;
@@ -7649,23 +7650,28 @@ public class AppOpsManager {
}
final String voiceRecognitionComponent = Settings.Secure.getString(
context.getContentResolver(), Settings.Secure.VOICE_RECOGNITION_SERVICE);
final String voiceInteractionComponent = Settings.Secure.getString(
context.getContentResolver(), Settings.Secure.VOICE_INTERACTION_SERVICE);
final String voiceRecognitionServicePackageName =
getComponentPackagenameFromString(voiceRecognitionComponent);
final String voiceInteractionServicePackageName =
getComponentPackagenameFromString(voiceInteractionComponent);
return Objects.equals(packageName, voiceRecognitionServicePackageName) && Objects.equals(
voiceRecognitionServicePackageName, voiceInteractionServicePackageName);
getComponentPackageNameFromString(voiceRecognitionComponent);
return (Objects.equals(packageName, voiceRecognitionServicePackageName))
&& isPackagePreInstalled(context, packageName);
}
private static String getComponentPackagenameFromString(String from) {
private static String getComponentPackageNameFromString(String from) {
ComponentName componentName = from != null ? ComponentName.unflattenFromString(from) : null;
return componentName != null ? componentName.getPackageName() : "";
}
private static boolean isPackagePreInstalled(Context context, String packageName) {
try {
final PackageManager pm = context.getPackageManager();
final ApplicationInfo info = pm.getApplicationInfo(packageName, 0);
return ((info.flags & ApplicationInfo.FLAG_SYSTEM) != 0);
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
/**
* Do a quick check for whether an application might be able to perform an operation.
* This is <em>not</em> a security check; you must use {@link #noteOp(String, int, String,