diff --git a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java index 5a1effdd01e..f088967ef7c 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java +++ b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java @@ -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; diff --git a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPreferenceController.java index e601a66436a..425b2166046 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPreferenceController.java @@ -16,12 +16,14 @@ 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); } } diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultEmergencyPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultEmergencyPickerTest.java index 6aa4babff2b..5d97f524a2b 100644 --- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultEmergencyPickerTest.java +++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultEmergencyPickerTest.java @@ -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); } }