Add getter/setter to access emergency number overrides

This value is migrated from Settings.Secure to EmergencyInfo app via a contentprovider.


Bug: 177006940
Test: Robotests
Change-Id: I345d9ff828021da35556f2d51da512840dda8026
This commit is contained in:
Fan Zhang
2021-01-07 18:06:39 -08:00
parent 097aef6f10
commit d46c53b8e4
2 changed files with 45 additions and 11 deletions

View File

@@ -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_NUMBER_SOURCE_DATABASE;
import static android.telephony.emergency.EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE; import static android.telephony.emergency.EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE;
import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.provider.Settings; import android.net.Uri;
import android.os.Bundle;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.telephony.emergency.EmergencyNumber; import android.telephony.emergency.EmergencyNumber;
@@ -40,7 +42,16 @@ import java.util.Map;
*/ */
public class EmergencyNumberUtils { public class EmergencyNumberUtils {
private static final String TAG = "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 @VisibleForTesting
static final String FALL_BACK_NUMBER = "112"; static final String FALL_BACK_NUMBER = "112";
@@ -77,12 +88,28 @@ public class EmergencyNumberUtils {
* #getDefaultPoliceNumber()}). * #getDefaultPoliceNumber()}).
*/ */
public String getPoliceNumber() { public String getPoliceNumber() {
final String userProvidedNumber = Settings.Secure.getString(mContext.getContentResolver(), final String userProvidedNumber = getEmergencyNumberOverride();
EMERGENCY_GESTURE_CALL_NUMBER);
return TextUtils.isEmpty(userProvidedNumber) return TextUtils.isEmpty(userProvidedNumber)
? getDefaultPoliceNumber() : 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<EmergencyNumber> getPromotedEmergencyNumbers(int categories) { private List<EmergencyNumber> getPromotedEmergencyNumbers(int categories) {
// TODO(b/171542607): Use platform API when its bug is fixed. // TODO(b/171542607): Use platform API when its bug is fixed.
Map<Integer, List<EmergencyNumber>> allLists = filterEmergencyNumbersByCategories( Map<Integer, List<EmergencyNumber>> allLists = filterEmergencyNumbersByCategories(

View File

@@ -18,15 +18,21 @@ package com.android.settingslib.emergencynumber;
import static android.telephony.emergency.EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE; 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 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.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.provider.Settings; import android.net.Uri;
import android.os.Bundle;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.telephony.emergency.EmergencyNumber; import android.telephony.emergency.EmergencyNumber;
@@ -38,7 +44,6 @@ import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -55,12 +60,15 @@ public class EmergencyNumberUtilsTest {
private PackageManager mPackageManager; private PackageManager mPackageManager;
@Mock @Mock
private TelephonyManager mTelephonyManager; private TelephonyManager mTelephonyManager;
@Mock
ContentResolver mContentResolver;
private EmergencyNumberUtils mUtils; private EmergencyNumberUtils mUtils;
@Before @Before
public void setup() { public void setup() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
when(mContext.getPackageManager()).thenReturn(mPackageManager); when(mContext.getPackageManager()).thenReturn(mPackageManager);
when(mContext.getContentResolver()).thenReturn(mContentResolver);
} }
@Test @Test
@@ -89,11 +97,10 @@ public class EmergencyNumberUtilsTest {
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
addEmergencyNumberToTelephony(); addEmergencyNumberToTelephony();
ContentResolver resolver = RuntimeEnvironment.application.getContentResolver(); Bundle bundle = new Bundle();
when(mContext.getContentResolver()).thenReturn(resolver); bundle.putString(EMERGENCY_GESTURE_CALL_NUMBER, USER_OVERRIDE_EMERGENCY_NUMBER);
Settings.Secure.putString(resolver, Settings.Secure.EMERGENCY_GESTURE_CALL_NUMBER, when(mContentResolver.call(any(Uri.class), anyString(), nullable(String.class), nullable(
USER_OVERRIDE_EMERGENCY_NUMBER); Bundle.class))).thenReturn(bundle);
mUtils = new EmergencyNumberUtils(mContext); mUtils = new EmergencyNumberUtils(mContext);
assertThat(mUtils.getPoliceNumber()).isEqualTo(USER_OVERRIDE_EMERGENCY_NUMBER); assertThat(mUtils.getPoliceNumber()).isEqualTo(USER_OVERRIDE_EMERGENCY_NUMBER);