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;
@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
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;
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();
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) {
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) {
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);
}
@VisibleForTesting
- String getPhoneNumber() {
- return DeviceInfoUtils.getFormattedPhoneNumber(mContext, mSubscriptionInfo);
- }
-
- @VisibleForTesting
SignalStrength getSignalStrength() {
return mTelephonyManager.getSignalStrength();
}
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;
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() {
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
*/
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
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;
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;
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
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());
.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";
@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();
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);
}
public void initialize_doNotShowSignalStrength_shouldRemoveSignalStrengthSetting() {
when(mPersistableBundle.getBoolean(
CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL))
- .thenReturn(false);
+ .thenReturn(false);
mController.initialize();
@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();
@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();
--- /dev/null
+/*
+ * 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;
+ }
+}