diff --git a/packages/SettingsLib/EmergencyNumber/src/com/android/settingslib/emergencynumber/EmergencyNumberUtils.java b/packages/SettingsLib/EmergencyNumber/src/com/android/settingslib/emergencynumber/EmergencyNumberUtils.java index 1c0e718a17b20..4d454941af7ce 100644 --- a/packages/SettingsLib/EmergencyNumber/src/com/android/settingslib/emergencynumber/EmergencyNumberUtils.java +++ b/packages/SettingsLib/EmergencyNumber/src/com/android/settingslib/emergencynumber/EmergencyNumberUtils.java @@ -19,9 +19,11 @@ package com.android.settingslib.emergencynumber; import static android.telephony.emergency.EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE; import static android.telephony.emergency.EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE; +import android.content.ContentResolver; import android.content.Context; import android.content.pm.PackageManager; -import android.provider.Settings; +import android.net.Uri; +import android.os.Bundle; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.emergency.EmergencyNumber; @@ -40,7 +42,16 @@ import java.util.Map; */ public class EmergencyNumberUtils { private static final String TAG = "EmergencyNumberUtils"; - private static final String EMERGENCY_GESTURE_CALL_NUMBER = "emergency_gesture_call_number"; + + public static final Uri EMERGENCY_NUMBER_OVERRIDE_AUTHORITY = new Uri.Builder().scheme( + ContentResolver.SCHEME_CONTENT) + .authority("com.android.emergency.numbers") + .build(); + public static final String METHOD_NAME_GET_EMERGENCY_NUMBER_OVERRIDE = + "GET_EMERGENCY_NUMBER_OVERRIDE"; + public static final String METHOD_NAME_SET_EMERGENCY_NUMBER_OVERRIDE = + "SET_EMERGENCY_NUMBER_OVERRIDE"; + public static final String EMERGENCY_GESTURE_CALL_NUMBER = "emergency_gesture_call_number"; @VisibleForTesting static final String FALL_BACK_NUMBER = "112"; @@ -77,12 +88,28 @@ public class EmergencyNumberUtils { * #getDefaultPoliceNumber()}). */ public String getPoliceNumber() { - final String userProvidedNumber = Settings.Secure.getString(mContext.getContentResolver(), - EMERGENCY_GESTURE_CALL_NUMBER); + final String userProvidedNumber = getEmergencyNumberOverride(); return TextUtils.isEmpty(userProvidedNumber) ? getDefaultPoliceNumber() : userProvidedNumber; } + /** + * Sets device-local emergency number override + */ + public void setEmergencyNumberOverride(String number) { + final Bundle bundle = new Bundle(); + bundle.putString(EMERGENCY_GESTURE_CALL_NUMBER, number); + mContext.getContentResolver().call(EMERGENCY_NUMBER_OVERRIDE_AUTHORITY, + METHOD_NAME_SET_EMERGENCY_NUMBER_OVERRIDE, null /* args */, bundle); + } + + private String getEmergencyNumberOverride() { + final Bundle bundle = mContext.getContentResolver().call( + EMERGENCY_NUMBER_OVERRIDE_AUTHORITY, + METHOD_NAME_GET_EMERGENCY_NUMBER_OVERRIDE, null /* args */, null /* bundle */); + return bundle == null ? null : bundle.getString(EMERGENCY_GESTURE_CALL_NUMBER); + } + private List getPromotedEmergencyNumbers(int categories) { // TODO(b/171542607): Use platform API when its bug is fixed. Map> allLists = filterEmergencyNumbersByCategories( diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/emergencynumber/EmergencyNumberUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/emergencynumber/EmergencyNumberUtilsTest.java index 99d2ff7f322f0..695b5b6ba0616 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/emergencynumber/EmergencyNumberUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/emergencynumber/EmergencyNumberUtilsTest.java @@ -18,15 +18,21 @@ package com.android.settingslib.emergencynumber; import static android.telephony.emergency.EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE; +import static com.android.settingslib.emergencynumber.EmergencyNumberUtils.EMERGENCY_GESTURE_CALL_NUMBER; + import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.nullable; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import android.content.ContentResolver; import android.content.Context; import android.content.pm.PackageManager; -import android.provider.Settings; +import android.net.Uri; +import android.os.Bundle; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.emergency.EmergencyNumber; @@ -38,7 +44,6 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; import java.util.ArrayList; import java.util.List; @@ -55,12 +60,15 @@ public class EmergencyNumberUtilsTest { private PackageManager mPackageManager; @Mock private TelephonyManager mTelephonyManager; + @Mock + ContentResolver mContentResolver; private EmergencyNumberUtils mUtils; @Before public void setup() { MockitoAnnotations.initMocks(this); when(mContext.getPackageManager()).thenReturn(mPackageManager); + when(mContext.getContentResolver()).thenReturn(mContentResolver); } @Test @@ -89,11 +97,10 @@ public class EmergencyNumberUtilsTest { when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); addEmergencyNumberToTelephony(); - ContentResolver resolver = RuntimeEnvironment.application.getContentResolver(); - when(mContext.getContentResolver()).thenReturn(resolver); - Settings.Secure.putString(resolver, Settings.Secure.EMERGENCY_GESTURE_CALL_NUMBER, - USER_OVERRIDE_EMERGENCY_NUMBER); - + Bundle bundle = new Bundle(); + bundle.putString(EMERGENCY_GESTURE_CALL_NUMBER, USER_OVERRIDE_EMERGENCY_NUMBER); + when(mContentResolver.call(any(Uri.class), anyString(), nullable(String.class), nullable( + Bundle.class))).thenReturn(bundle); mUtils = new EmergencyNumberUtils(mContext); assertThat(mUtils.getPoliceNumber()).isEqualTo(USER_OVERRIDE_EMERGENCY_NUMBER);