Migrate emergency default app to role manager.
Bug: 123293861
Test: atest DefaultEmergencyPickerTest
Change-Id: I07f5e0b23a2fff91d724348a682ee3aab4ce51ec
diff --git a/src/com/android/phone/EmergencyAssistanceHelper.java b/src/com/android/phone/EmergencyAssistanceHelper.java
index 9e1ac21..a98d81d 100644
--- a/src/com/android/phone/EmergencyAssistanceHelper.java
+++ b/src/com/android/phone/EmergencyAssistanceHelper.java
@@ -16,6 +16,8 @@
package com.android.phone;
+import android.app.role.RoleManager;
+import android.app.role.RoleManagerCallback;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -23,10 +25,15 @@
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
-import android.provider.Settings;
+import android.os.AsyncTask;
+import android.os.Binder;
+import android.os.Process;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.FeatureFlagUtils;
+import android.util.Log;
+
+import com.android.internal.util.CollectionUtils;
import java.util.List;
@@ -34,7 +41,7 @@
* A helper to query activities of emergency assistance.
*/
public class EmergencyAssistanceHelper {
-
+ private static final String TAG = EmergencyAssistanceHelper.class.getSimpleName();
/**
* Get intent action of target emergency app.
*
@@ -61,8 +68,8 @@
* or null if there is no installed system application of emergency assistance.
*/
public static List<ResolveInfo> resolveAssistPackageAndQueryActivities(Context context) {
- List<ResolveInfo> infos = queryAssistActivities(context);
-
+ final String assistPackage = getDefaultEmergencyPackage(context);
+ List<ResolveInfo> infos = queryAssistActivities(context, assistPackage);
if (infos == null || infos.isEmpty()) {
PackageManager packageManager = context.getPackageManager();
Intent queryIntent = new Intent(getIntentAction(context));
@@ -86,9 +93,8 @@
}
if (bestMatch != null) {
- Settings.Secure.putString(context.getContentResolver(),
- Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION, bestMatch.packageName);
- return queryAssistActivities(context);
+ setDefaultEmergencyPackageAsync(context, bestMatch.packageName);
+ return queryAssistActivities(context, bestMatch.packageName);
} else {
return null;
}
@@ -106,9 +112,7 @@
resolveInfo.activityInfo.name);
}
- private static List<ResolveInfo> queryAssistActivities(Context context) {
- final String assistPackage = Settings.Secure.getString(context.getContentResolver(),
- Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION);
+ private static List<ResolveInfo> queryAssistActivities(Context context, String assistPackage) {
List<ResolveInfo> infos = null;
if (!TextUtils.isEmpty(assistPackage)) {
@@ -123,4 +127,34 @@
return info.applicationInfo != null
&& (info.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
}
+
+ private static String getDefaultEmergencyPackage(Context context) {
+ long identity = Binder.clearCallingIdentity();
+ try {
+ return CollectionUtils.firstOrNull(context.getSystemService(RoleManager.class)
+ .getRoleHolders(RoleManager.ROLE_EMERGENCY));
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ private static boolean setDefaultEmergencyPackageAsync(Context context, String pkgName) {
+ long identity = Binder.clearCallingIdentity();
+ try {
+ context.getSystemService(RoleManager.class).addRoleHolderAsUser(
+ RoleManager.ROLE_EMERGENCY, pkgName, 0, Process.myUserHandle(),
+ AsyncTask.THREAD_POOL_EXECUTOR, new RoleManagerCallback() {
+ @Override
+ public void onSuccess() {
+ }
+ @Override
+ public void onFailure() {
+ Log.e(TAG, "Failed to set emergency default app.");
+ }
+ });
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ return true;
+ }
}