OSDN Git Service

Migrate emegency default app to role manager.
authorHongming Jin <hongmingjin@google.com>
Wed, 23 Jan 2019 19:56:18 +0000 (11:56 -0800)
committerHongming Jin <hongmingjin@google.com>
Wed, 20 Feb 2019 19:46:02 +0000 (11:46 -0800)
Bug: 123293861
Test: atest DefaultEmergencyPickerTest
Change-Id: I7bd9e2655b22a35fc3268091d38c6770911d4046

src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java
src/com/android/settings/applications/defaultapps/DefaultEmergencyPreferenceController.java
tests/robotests/src/com/android/settings/applications/defaultapps/DefaultEmergencyPickerTest.java

index 5a1effd..f088967 100644 (file)
@@ -16,6 +16,8 @@
 
 package com.android.settings.applications.defaultapps;
 
+import android.app.role.RoleManager;
+import android.app.role.RoleManagerCallback;
 import android.app.settings.SettingsEnums;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -23,9 +25,13 @@ import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.os.AsyncTask;
+import android.os.Process;
 import android.provider.Settings;
 import android.text.TextUtils;
+import android.util.Log;
 
+import com.android.internal.util.CollectionUtils;
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settingslib.applications.DefaultAppInfo;
@@ -35,7 +41,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 public class DefaultEmergencyPicker extends DefaultAppPickerFragment {
-
+    private static final String TAG = "DefaultEmergencyPicker";
     @Override
     public int getMetricsCategory() {
         return SettingsEnums.DEFAULT_EMERGENCY_APP_PICKER;
@@ -85,20 +91,27 @@ public class DefaultEmergencyPicker extends DefaultAppPickerFragment {
 
     @Override
     protected String getDefaultKey() {
-        return Settings.Secure.getString(getContext().getContentResolver(),
-                Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION);
+        RoleManager roleManager = getContext().getSystemService(RoleManager.class);
+        return CollectionUtils.firstOrNull(roleManager.getRoleHolders(RoleManager.ROLE_EMERGENCY));
     }
 
     @Override
     protected boolean setDefaultKey(String key) {
-        final ContentResolver contentResolver = getContext().getContentResolver();
-        final String previousValue = Settings.Secure.getString(contentResolver,
-                Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION);
+        final String previousValue = getDefaultKey();
 
         if (!TextUtils.isEmpty(key) && !TextUtils.equals(key, previousValue)) {
-            Settings.Secure.putString(contentResolver,
-                    Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION,
-                    key);
+            getContext().getSystemService(RoleManager.class)
+                      .addRoleHolderAsUser(
+                              RoleManager.ROLE_EMERGENCY, key, 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.");
+                                  }
+                              });
             return true;
         }
         return false;
index e601a66..425b216 100644 (file)
 
 package com.android.settings.applications.defaultapps;
 
+import android.app.role.RoleManager;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ResolveInfo;
 import android.provider.Settings;
 import android.telephony.TelephonyManager;
 
+import com.android.internal.util.CollectionUtils;
 import com.android.settingslib.applications.DefaultAppInfo;
 
 import java.util.List;
@@ -69,8 +71,9 @@ public class DefaultEmergencyPreferenceController extends DefaultAppPreferenceCo
     }
 
     public static boolean isEmergencyDefault(String pkg, Context context) {
-        String defaultPackage = Settings.Secure.getString(context.getContentResolver(),
-                Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION);
+      String defaultPackage = CollectionUtils.firstOrNull(
+              context.getSystemService(RoleManager.class)
+                        .getRoleHolders(RoleManager.ROLE_EMERGENCY));
         return defaultPackage != null && defaultPackage.equals(pkg);
     }
 }
index 6aa4bab..5d97f52 100644 (file)
@@ -18,15 +18,24 @@ package com.android.settings.applications.defaultapps;
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.app.Activity;
+import android.app.role.RoleManager;
+import android.app.role.RoleManagerCallback;
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.os.AsyncTask;
+import android.os.Process;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
+import android.util.Log;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -36,11 +45,15 @@ import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadows.ShadowApplication;
 import org.robolectric.util.ReflectionHelpers;
 
+import java.util.Arrays;
+import java.util.concurrent.Executor;
+
 @RunWith(RobolectricTestRunner.class)
 public class DefaultEmergencyPickerTest {
-
+    private static final String TAG = DefaultEmergencyPickerTest.class.getSimpleName();
     private static final String TEST_APP_KEY = "test_app";
 
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -49,34 +62,41 @@ public class DefaultEmergencyPickerTest {
     private UserManager mUserManager;
     @Mock
     private PackageManager mPackageManager;
+    @Mock
+    private RoleManager mRoleManager;
 
     private DefaultEmergencyPicker mPicker;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        ShadowApplication shadowApplication = ShadowApplication.getInstance();
+        shadowApplication.setSystemService(Context.ROLE_SERVICE, mRoleManager);
         when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
 
         mPicker = spy(new DefaultEmergencyPicker());
         mPicker.onAttach(mActivity);
 
         ReflectionHelpers.setField(mPicker, "mPm", mPackageManager);
-
-        doReturn(RuntimeEnvironment.application).when(mPicker).getContext();
+        when(mPicker.getContext()).thenReturn(RuntimeEnvironment.application);
     }
 
     @Test
     public void setDefaultAppKey_shouldUpdateDefault() {
-        assertThat(mPicker.setDefaultKey(TEST_APP_KEY)).isTrue();
-        assertThat(mPicker.getDefaultKey()).isEqualTo(TEST_APP_KEY);
+        mPicker.setDefaultKey(TEST_APP_KEY);
+        verify(mRoleManager).addRoleHolderAsUser(
+            eq(RoleManager.ROLE_EMERGENCY),
+            eq(TEST_APP_KEY),
+            eq(0),
+            any(UserHandle.class),
+            any(Executor.class),
+            any(RoleManagerCallback.class));
     }
 
     @Test
     public void getDefaultAppKey_shouldReturnDefault() {
-        Settings.Secure.putString(RuntimeEnvironment.application.getContentResolver(),
-                Settings.Secure.EMERGENCY_ASSISTANCE_APPLICATION,
-                TEST_APP_KEY);
-
-        assertThat(mPicker.getDefaultKey()).isEqualTo(TEST_APP_KEY);
+      when(mRoleManager.getRoleHolders(RoleManager.ROLE_EMERGENCY))
+              .thenReturn(Arrays.asList(TEST_APP_KEY));
+      assertThat(mPicker.getDefaultKey()).isEqualTo(TEST_APP_KEY);
     }
 }