diff --git a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java index 52ecc97b164..71bd8c5f849 100644 --- a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java +++ b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java @@ -24,8 +24,6 @@ import android.content.Context; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; -import android.text.BidiFormatter; -import android.text.TextDirectionHeuristics; import android.text.TextUtils; import android.widget.Toast; @@ -160,10 +158,10 @@ public class PhoneNumberPreferenceController extends BasePreferenceController { @VisibleForTesting CharSequence getFormattedPhoneNumber(SubscriptionInfo subscriptionInfo) { - final String phoneNumber = DeviceInfoUtils.getFormattedPhoneNumber(mContext, + final String phoneNumber = DeviceInfoUtils.getBidiFormattedPhoneNumber(mContext, subscriptionInfo); return TextUtils.isEmpty(phoneNumber) ? mContext.getString(R.string.device_info_default) - : BidiFormatter.getInstance().unicodeWrap(phoneNumber, TextDirectionHeuristics.LTR); + : phoneNumber; } @VisibleForTesting diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java index 86374b4d454..857f535084d 100644 --- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java +++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java @@ -26,17 +26,15 @@ import android.os.Bundle; import android.os.PersistableBundle; import android.os.UserHandle; import android.telephony.CarrierConfigManager; -import android.telephony.SmsCbMessage; import android.telephony.PhoneStateListener; import android.telephony.ServiceState; import android.telephony.SignalStrength; +import android.telephony.SmsCbMessage; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener; import android.telephony.TelephonyManager; import android.telephony.euicc.EuiccManager; -import android.text.BidiFormatter; -import android.text.TextDirectionHeuristics; import android.text.TextUtils; import androidx.annotation.NonNull; @@ -143,9 +141,9 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O mSlotIndex = slotId; mSubscriptionInfo = getPhoneSubscriptionInfo(slotId); - mTelephonyManager = mContext.getSystemService(TelephonyManager.class); - mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class); - mEuiccManager = mContext.getSystemService(EuiccManager.class); + mTelephonyManager = mContext.getSystemService(TelephonyManager.class); + mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class); + mEuiccManager = mContext.getSystemService(EuiccManager.class); mSubscriptionManager = mContext.getSystemService(SubscriptionManager.class); mRes = mContext.getResources(); @@ -184,9 +182,9 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O mTelephonyManager.createForSubscriptionId(mSubscriptionInfo.getSubscriptionId()) .listen(mPhoneStateListener, - PhoneStateListener.LISTEN_DATA_CONNECTION_STATE - | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS - | PhoneStateListener.LISTEN_SERVICE_STATE); + PhoneStateListener.LISTEN_DATA_CONNECTION_STATE + | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS + | PhoneStateListener.LISTEN_SERVICE_STATE); mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener); if (mShowLatestAreaInfo) { @@ -224,8 +222,8 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O private void updatePhoneNumber() { // If formattedNumber is null or empty, it'll display as "Unknown". - mDialog.setText(PHONE_NUMBER_VALUE_ID, BidiFormatter.getInstance().unicodeWrap( - getPhoneNumber(), TextDirectionHeuristics.LTR)); + mDialog.setText(PHONE_NUMBER_VALUE_ID, + DeviceInfoUtils.getBidiFormattedPhoneNumber(mContext, mSubscriptionInfo)); } private void updateDataState(int state) { @@ -407,13 +405,14 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O private void updateImsRegistrationState() { final int subscriptionId = mSubscriptionInfo.getSubscriptionId(); final PersistableBundle carrierConfig = - mCarrierConfigManager.getConfigForSubId(subscriptionId); + mCarrierConfigManager.getConfigForSubId(subscriptionId); final boolean showImsRegState = carrierConfig == null ? false : - carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL); + carrierConfig.getBoolean( + CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL); if (showImsRegState) { final boolean isImsRegistered = mTelephonyManager.isImsRegistered(subscriptionId); mDialog.setText(IMS_REGISTRATION_STATE_VALUE_ID, mRes.getString(isImsRegistered ? - R.string.ims_reg_status_registered : R.string.ims_reg_status_not_registered)); + R.string.ims_reg_status_registered : R.string.ims_reg_status_not_registered)); } else { mDialog.removeSettingFromScreen(IMS_REGISTRATION_STATE_LABEL_ID); mDialog.removeSettingFromScreen(IMS_REGISTRATION_STATE_VALUE_ID); @@ -461,11 +460,6 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O }; } - @VisibleForTesting - String getPhoneNumber() { - return DeviceInfoUtils.getFormattedPhoneNumber(mContext, mSubscriptionInfo); - } - @VisibleForTesting SignalStrength getSignalStrength() { return mTelephonyManager.getSignalStrength(); diff --git a/src/com/android/settings/homepage/contextualcards/deviceinfo/DeviceInfoSlice.java b/src/com/android/settings/homepage/contextualcards/deviceinfo/DeviceInfoSlice.java index 48a9aa54617..f3baaa1db6a 100644 --- a/src/com/android/settings/homepage/contextualcards/deviceinfo/DeviceInfoSlice.java +++ b/src/com/android/settings/homepage/contextualcards/deviceinfo/DeviceInfoSlice.java @@ -23,8 +23,6 @@ import android.content.Intent; import android.net.Uri; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; -import android.text.BidiFormatter; -import android.text.TextDirectionHeuristics; import android.text.TextUtils; import androidx.annotation.VisibleForTesting; @@ -100,10 +98,10 @@ public class DeviceInfoSlice implements CustomSliceable { if (subscriptionInfo == null) { return mContext.getString(R.string.device_info_default); } - final String phoneNumber = DeviceInfoUtils.getFormattedPhoneNumber(mContext, + final String phoneNumber = DeviceInfoUtils.getBidiFormattedPhoneNumber(mContext, subscriptionInfo); return TextUtils.isEmpty(phoneNumber) ? mContext.getString(R.string.device_info_default) - : BidiFormatter.getInstance().unicodeWrap(phoneNumber, TextDirectionHeuristics.LTR); + : phoneNumber; } private CharSequence getDeviceModel() { diff --git a/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragment.java b/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragment.java index a28fc91e43a..f572927bb86 100644 --- a/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragment.java +++ b/src/com/android/settings/network/telephony/RenameMobileNetworkDialogFragment.java @@ -28,29 +28,26 @@ import android.telephony.ServiceState; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; -import android.text.BidiFormatter; -import android.text.TextDirectionHeuristics; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageView; import android.widget.Spinner; import android.widget.TextView; -import com.android.settings.R; -import com.android.settings.core.instrumentation.InstrumentedDialogFragment; -import com.android.settingslib.DeviceInfoUtils; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; +import com.android.settings.R; +import com.android.settings.core.instrumentation.InstrumentedDialogFragment; +import com.android.settingslib.DeviceInfoUtils; + /** * A dialog allowing the display name of a mobile network subscription to be changed */ @@ -159,9 +156,7 @@ public class RenameMobileNetworkDialogFragment extends InstrumentedDialogFragmen phoneTitle.setVisibility(info.isOpportunistic() ? View.GONE : View.VISIBLE); final TextView phoneNumber = view.findViewById(R.id.number_value); - final String formattedNumber = DeviceInfoUtils.getFormattedPhoneNumber(getContext(), info); - phoneNumber.setText(BidiFormatter.getInstance().unicodeWrap(formattedNumber, - TextDirectionHeuristics.LTR)); + phoneNumber.setText(DeviceInfoUtils.getBidiFormattedPhoneNumber(getContext(), info)); } @Override diff --git a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java index 0f39fc9a520..3ecdcffb03c 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java @@ -16,35 +16,21 @@ package com.android.settings.deviceinfo.simstatus; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .CELL_DATA_NETWORK_TYPE_VALUE_ID; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .CELL_VOICE_NETWORK_TYPE_VALUE_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.CELL_DATA_NETWORK_TYPE_VALUE_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.CELL_VOICE_NETWORK_TYPE_VALUE_ID; import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.EID_INFO_VALUE_ID; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .ICCID_INFO_LABEL_ID; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .ICCID_INFO_VALUE_ID; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .IMS_REGISTRATION_STATE_LABEL_ID; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .IMS_REGISTRATION_STATE_VALUE_ID; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .NETWORK_PROVIDER_VALUE_ID; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .OPERATOR_INFO_LABEL_ID; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .OPERATOR_INFO_VALUE_ID; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .PHONE_NUMBER_VALUE_ID; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .ROAMING_INFO_VALUE_ID; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .SERVICE_STATE_VALUE_ID; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .SIGNAL_STRENGTH_LABEL_ID; -import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController - .SIGNAL_STRENGTH_VALUE_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.ICCID_INFO_LABEL_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.ICCID_INFO_VALUE_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.IMS_REGISTRATION_STATE_LABEL_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.IMS_REGISTRATION_STATE_VALUE_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.NETWORK_PROVIDER_VALUE_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.OPERATOR_INFO_LABEL_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.OPERATOR_INFO_VALUE_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.PHONE_NUMBER_VALUE_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.ROAMING_INFO_VALUE_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.SERVICE_STATE_VALUE_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.SIGNAL_STRENGTH_LABEL_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.SIGNAL_STRENGTH_VALUE_ID; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; @@ -70,8 +56,11 @@ import android.telephony.euicc.EuiccManager; import androidx.lifecycle.LifecycleOwner; import com.android.settings.R; +import com.android.settings.testutils.shadow.ShadowDeviceInfoUtils; +import com.android.settingslib.DeviceInfoUtils; import com.android.settingslib.core.lifecycle.Lifecycle; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -80,10 +69,12 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.Shadows; +import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowPackageManager; import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) +@Config(shadows = {ShadowDeviceInfoUtils.class}) public class SimStatusDialogControllerTest { @Mock @@ -120,11 +111,11 @@ public class SimStatusDialogControllerTest { mLifecycleOwner = () -> mLifecycle; mLifecycle = new Lifecycle(mLifecycleOwner); mController = spy(new SimStatusDialogController(mDialog, mLifecycle, 0 /* phone id */)); + ShadowDeviceInfoUtils.setPhoneNumber(""); doReturn(mServiceState).when(mController).getCurrentServiceState(); doReturn(0).when(mSignalStrength).getDbm(); doReturn(0).when(mSignalStrength).getAsuLevel(); doReturn(mPhoneStateListener).when(mController).getPhoneStateListener(); - doReturn("").when(mController).getPhoneNumber(); doReturn(mSignalStrength).when(mController).getSignalStrength(); doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(anyInt()); @@ -141,12 +132,17 @@ public class SimStatusDialogControllerTest { .thenReturn(true); final ShadowPackageManager shadowPackageManager = - Shadows.shadowOf(RuntimeEnvironment.application.getPackageManager()); + Shadows.shadowOf(RuntimeEnvironment.application.getPackageManager()); final PackageInfo sysUIPackageInfo = new PackageInfo(); sysUIPackageInfo.packageName = "com.android.systemui"; shadowPackageManager.addPackage(sysUIPackageInfo); } + @After + public void tearDown() { + ShadowDeviceInfoUtils.reset(); + } + @Test public void initialize_updateNetworkProviderWithFoobarCarrier_shouldUpdateCarrierWithFoobar() { final CharSequence carrierName = "foobar"; @@ -159,8 +155,10 @@ public class SimStatusDialogControllerTest { @Test public void initialize_updatePhoneNumberWith1111111111_shouldUpdatePhoneNumber() { - final String phoneNumber = "1111111111"; - doReturn(phoneNumber).when(mController).getPhoneNumber(); + ShadowDeviceInfoUtils.setPhoneNumber("1111111111"); + + final String phoneNumber = DeviceInfoUtils.getBidiFormattedPhoneNumber(mContext, + mSubscriptionInfo); mController.initialize(); @@ -239,7 +237,7 @@ public class SimStatusDialogControllerTest { mController.initialize(); final String signalStrengthString = - mContext.getString(R.string.sim_signal_strength, signalDbm, signalAsu); + mContext.getString(R.string.sim_signal_strength, signalDbm, signalAsu); verify(mDialog).setText(SIGNAL_STRENGTH_VALUE_ID, signalStrengthString); } @@ -321,7 +319,7 @@ public class SimStatusDialogControllerTest { public void initialize_doNotShowSignalStrength_shouldRemoveSignalStrengthSetting() { when(mPersistableBundle.getBoolean( CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL)) - .thenReturn(false); + .thenReturn(false); mController.initialize(); @@ -377,31 +375,31 @@ public class SimStatusDialogControllerTest { @Test public void initialize_imsRegistered_shouldSetImsRegistrationStateSummaryToRegisterd() { when(mPersistableBundle.getBoolean( - CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL)).thenReturn(true); + CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL)).thenReturn(true); when(mTelephonyManager.isImsRegistered(anyInt())).thenReturn(true); mController.initialize(); verify(mDialog).setText(IMS_REGISTRATION_STATE_VALUE_ID, - mContext.getString(R.string.ims_reg_status_registered)); + mContext.getString(R.string.ims_reg_status_registered)); } @Test public void initialize_imsNotRegistered_shouldSetImsRegistrationStateSummaryToNotRegisterd() { when(mPersistableBundle.getBoolean( - CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL)).thenReturn(true); + CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL)).thenReturn(true); when(mTelephonyManager.isImsRegistered(anyInt())).thenReturn(false); mController.initialize(); verify(mDialog).setText(IMS_REGISTRATION_STATE_VALUE_ID, - mContext.getString(R.string.ims_reg_status_not_registered)); + mContext.getString(R.string.ims_reg_status_not_registered)); } @Test public void initialize_showImsRegistration_shouldNotRemoveImsRegistrationStateSetting() { when(mPersistableBundle.getBoolean( - CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL)).thenReturn(true); + CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL)).thenReturn(true); mController.initialize(); @@ -411,7 +409,7 @@ public class SimStatusDialogControllerTest { @Test public void initialize_doNotShowImsRegistration_shouldRemoveImsRegistrationStateSetting() { when(mPersistableBundle.getBoolean( - CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL)).thenReturn(false); + CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL)).thenReturn(false); mController.initialize(); diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDeviceInfoUtils.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDeviceInfoUtils.java new file mode 100644 index 00000000000..f51cfe3e572 --- /dev/null +++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDeviceInfoUtils.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.settings.testutils.shadow; + +import android.content.Context; +import android.telephony.SubscriptionInfo; + +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; +import org.robolectric.annotation.Resetter; + +@Implements(com.android.settingslib.DeviceInfoUtils.class) +public class ShadowDeviceInfoUtils { + private static String sPhoneNumber; + + @Resetter + public static void reset() { + sPhoneNumber = ""; + } + + @Implementation + public static String getBidiFormattedPhoneNumber(Context context, + SubscriptionInfo subscriptionInfo) { + return sPhoneNumber; + } + + public static void setPhoneNumber(String phoneNumber) { + sPhoneNumber = phoneNumber; + } +}