summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2018-03-28 19:51:28 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-03-28 19:51:28 +0000
commite8b70d74223e05ff2724ec8afc2a49d666a56b7f (patch)
tree3d2f17ee1dda4e6ac1b4af2e4c3fa6e686e0ca26
parentf8ad32823c5709348a5fb9618166b07394e88d99 (diff)
parentd42af71001ec4265775b5b2702a0fdc394bc001e (diff)
downloadSettings-o-mr1-iot-preview-8.tar.gz
Merge "DO NOT MERGE Move IMS registration state to SIM status screen"android-o-mr1-iot-preview-8o-mr1-iot-preview-8
-rw-r--r--res/xml/device_info_sim_status.xml7
-rw-r--r--res/xml/device_info_status.xml6
-rw-r--r--src/com/android/settings/deviceinfo/SimStatus.java106
-rw-r--r--src/com/android/settings/deviceinfo/Status.java27
-rw-r--r--tests/robotests/src/com/android/settings/deviceinfo/SimStatusTest.java185
-rw-r--r--tests/robotests/src/com/android/settings/testutils/shadow/ShadowPhoneFactory.java37
6 files changed, 297 insertions, 71 deletions
diff --git a/res/xml/device_info_sim_status.xml b/res/xml/device_info_sim_status.xml
index aa8896c8cbb..e95d009f8cd 100644
--- a/res/xml/device_info_sim_status.xml
+++ b/res/xml/device_info_sim_status.xml
@@ -66,6 +66,13 @@
android:summary="@string/device_info_not_available"
android:persistent="false" />
+ <Preference android:key="ims_reg_state"
+ android:enabled="false"
+ android:shouldDisableView="false"
+ android:title="@string/ims_reg_title"
+ android:summary="@string/device_info_not_available"
+ android:persistent="false" />
+
<Preference android:key="number"
android:enabled="false"
android:shouldDisableView="false"
diff --git a/res/xml/device_info_status.xml b/res/xml/device_info_status.xml
index 3456f9199ea..b381d04242d 100644
--- a/res/xml/device_info_status.xml
+++ b/res/xml/device_info_status.xml
@@ -89,10 +89,4 @@
android:title="@string/status_wimax_mac_address"
android:summary="@string/summary_placeholder"
android:persistent="false" />
- <Preference
- android:key="ims_reg_state"
- android:enabled="false"
- android:shouldDisableView="false"
- android:title="@string/ims_reg_title"
- android:persistent="false" />
</PreferenceScreen>
diff --git a/src/com/android/settings/deviceinfo/SimStatus.java b/src/com/android/settings/deviceinfo/SimStatus.java
index 2cc76e75691..9a6d1cd9afd 100644
--- a/src/com/android/settings/deviceinfo/SimStatus.java
+++ b/src/com/android/settings/deviceinfo/SimStatus.java
@@ -30,7 +30,9 @@ import android.os.Bundle;
import android.os.PersistableBundle;
import android.os.UserHandle;
import android.os.UserManager;
+import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
import android.telephony.CarrierConfigManager;
import android.telephony.CellBroadcastMessage;
import android.telephony.PhoneStateListener;
@@ -89,6 +91,9 @@ public class SimStatus extends SettingsPreferenceFragment {
private static final String KEY_IMEI_SV = "imei_sv";
private static final String KEY_ICCID = "iccid";
+ @VisibleForTesting
+ static final String KEY_IMS_REGISTRATION_STATE = "ims_reg_state";
+
static private final String CB_AREA_INFO_RECEIVED_ACTION =
"com.android.cellbroadcastreceiver.CB_AREA_INFO_RECEIVED";
@@ -101,10 +106,10 @@ public class SimStatus extends SettingsPreferenceFragment {
private CarrierConfigManager mCarrierConfigManager;
private Phone mPhone = null;
private Resources mRes;
- private Preference mSignalStrength;
private SubscriptionInfo mSir;
private boolean mShowLatestAreaInfo;
private boolean mShowICCID;
+ private boolean mShowImsRegState;
// Default summary for items
private String mDefaultText;
@@ -148,8 +153,6 @@ public class SimStatus extends SettingsPreferenceFragment {
mRes = getResources();
mDefaultText = mRes.getString(R.string.device_info_default);
- // Note - missing in zaku build, be careful later...
- mSignalStrength = findPreference(KEY_SIGNAL_STRENGTH);
}
@Override
@@ -202,10 +205,11 @@ public class SimStatus extends SettingsPreferenceFragment {
public void onResume() {
super.onResume();
if (mPhone != null) {
- updatePreference();
+ updatePreference(false /* isTabChanged */);
updateSignalStrength(mPhone.getSignalStrength());
updateServiceState(mPhone.getServiceState());
+ updateImsRegistrationState();
updateDataState();
mTelephonyManager.listen(mPhoneStateListener,
PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
@@ -323,7 +327,7 @@ public class SimStatus extends SettingsPreferenceFragment {
break;
case ServiceState.STATE_OUT_OF_SERVICE:
// Set signal strength to 0 when service state is STATE_OUT_OF_SERVICE
- mSignalStrength.setSummary("0");
+ setSummaryText(KEY_SIGNAL_STRENGTH, "0");
case ServiceState.STATE_EMERGENCY_ONLY:
// Set summary string of service state to radioInfo_service_out when
// service state is both STATE_OUT_OF_SERVICE & STATE_EMERGENCY_ONLY
@@ -332,7 +336,7 @@ public class SimStatus extends SettingsPreferenceFragment {
case ServiceState.STATE_POWER_OFF:
display = mRes.getString(R.string.radioInfo_service_off);
// Also set signal strength to 0
- mSignalStrength.setSummary("0");
+ setSummaryText(KEY_SIGNAL_STRENGTH, "0");
break;
}
@@ -353,32 +357,46 @@ public class SimStatus extends SettingsPreferenceFragment {
}
void updateSignalStrength(SignalStrength signalStrength) {
- if (mSignalStrength != null) {
- final int state = mPhone.getServiceState().getState();
+ final int state = mPhone.getServiceState().getState();
- if ((ServiceState.STATE_OUT_OF_SERVICE == state) ||
- (ServiceState.STATE_POWER_OFF == state)) {
- mSignalStrength.setSummary("0");
- return;
- }
+ if ((ServiceState.STATE_OUT_OF_SERVICE == state) ||
+ (ServiceState.STATE_POWER_OFF == state)) {
+ setSummaryText(KEY_SIGNAL_STRENGTH, "0");
+ return;
+ }
- int signalDbm = signalStrength.getDbm();
- int signalAsu = signalStrength.getAsuLevel();
+ int signalDbm = signalStrength.getDbm();
+ int signalAsu = signalStrength.getAsuLevel();
- if (-1 == signalDbm) {
- signalDbm = 0;
- }
-
- if (-1 == signalAsu) {
- signalAsu = 0;
- }
+ if (-1 == signalDbm) {
+ signalDbm = 0;
+ }
- mSignalStrength.setSummary(mRes.getString(R.string.sim_signal_strength,
- signalDbm, signalAsu));
+ if (-1 == signalAsu) {
+ signalAsu = 0;
}
+
+ setSummaryText(KEY_SIGNAL_STRENGTH, mRes.getString(R.string.sim_signal_strength, signalDbm,
+ signalAsu));
+ }
+
+ @VisibleForTesting
+ void updateImsRegistrationState() {
+ boolean isImsRegistered = mTelephonyManager.isImsRegistered(mSir.getSubscriptionId());
+ setSummaryText(KEY_IMS_REGISTRATION_STATE, mRes.getString(isImsRegistered ?
+ R.string.ims_reg_status_registered : R.string.ims_reg_status_not_registered));
}
- private void updatePreference() {
+ @VisibleForTesting
+ void updatePreference(boolean isTabChanged) {
+ if (isTabChanged) {
+ PreferenceScreen preferenceScreen = getPreferenceScreen();
+ if (preferenceScreen != null) {
+ preferenceScreen.removeAll();
+ addPreferencesFromResource(R.xml.device_info_sim_status);
+ }
+ }
+
if (mPhone.getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA) {
mShowLatestAreaInfo = Resources.getSystem().getBoolean(
com.android.internal.R.bool.config_showAreaUpdateInfoSettings);
@@ -387,7 +405,8 @@ public class SimStatus extends SettingsPreferenceFragment {
mSir.getSubscriptionId());
mShowICCID = carrierConfig.getBoolean(
CarrierConfigManager.KEY_SHOW_ICCID_IN_SIM_STATUS_BOOL);
-
+ mShowImsRegState = carrierConfig.getBoolean(
+ CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL);
// If formattedNumber is null or empty, it'll display as "Unknown".
setSummaryText(KEY_PHONE_NUMBER,
@@ -412,6 +431,10 @@ public class SimStatus extends SettingsPreferenceFragment {
if (hideSignalStrength) {
removePreferenceFromScreen(KEY_SIGNAL_STRENGTH);
}
+
+ if (!mShowImsRegState) {
+ removePreferenceFromScreen(KEY_IMS_REGISTRATION_STATE);
+ }
}
private void updatePhoneInfos() {
@@ -448,29 +471,36 @@ public class SimStatus extends SettingsPreferenceFragment {
@Override
public void onServiceStateChanged(ServiceState serviceState) {
updateServiceState(serviceState);
+ updateImsRegistrationState();
}
};
}
}
}
+
private OnTabChangeListener mTabListener = new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
- final int slotId = Integer.parseInt(tabId);
- mSir = mSelectableSubInfos.get(slotId);
-
- // The User has changed tab; update the SIM information.
- updatePhoneInfos();
- mTelephonyManager.listen(mPhoneStateListener,
- PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
- | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
- | PhoneStateListener.LISTEN_SERVICE_STATE);
- updateDataState();
- updateNetworkType();
- updatePreference();
+ doTabChanged(tabId);
}
};
+ @VisibleForTesting
+ void doTabChanged(String tabId) {
+ final int slotId = Integer.parseInt(tabId);
+ mSir = mSelectableSubInfos.get(slotId);
+
+ // The User has changed tab; update the SIM information.
+ updatePhoneInfos();
+ updatePreference(true /* isTabChanged */);
+ mTelephonyManager.listen(mPhoneStateListener,
+ PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
+ | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
+ | PhoneStateListener.LISTEN_SERVICE_STATE);
+ updateDataState();
+ updateNetworkType();
+ }
+
private TabContentFactory mEmptyTabContent = new TabContentFactory() {
@Override
public View createTabContent(String tag) {
diff --git a/src/com/android/settings/deviceinfo/Status.java b/src/com/android/settings/deviceinfo/Status.java
index 228774f2657..8073304af66 100644
--- a/src/com/android/settings/deviceinfo/Status.java
+++ b/src/com/android/settings/deviceinfo/Status.java
@@ -28,16 +28,12 @@ import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
-import android.os.PersistableBundle;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserManager;
import android.provider.SearchIndexableResource;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
-import android.telephony.CarrierConfigManager;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
import android.text.TextUtils;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -65,7 +61,6 @@ public class Status extends SettingsPreferenceFragment implements Indexable {
private static final String KEY_WIMAX_MAC_ADDRESS = "wimax_mac_address";
private static final String KEY_SIM_STATUS = "sim_status";
private static final String KEY_IMEI_INFO = "imei_info";
- private static final String KEY_IMS_REGISTRATION_STATE = "ims_reg_state";
// Broadcasts to listen to for connectivity changes.
private static final String[] CONNECTIVITY_INTENTS = {
@@ -95,7 +90,6 @@ public class Status extends SettingsPreferenceFragment implements Indexable {
private Preference mIpAddress;
private Preference mWifiMacAddress;
private Preference mWimaxMacAddress;
- private Preference mImsStatus;
private Handler mHandler;
@@ -174,7 +168,6 @@ public class Status extends SettingsPreferenceFragment implements Indexable {
mWifiMacAddress = findPreference(KEY_WIFI_MAC_ADDRESS);
mWimaxMacAddress = findPreference(KEY_WIMAX_MAC_ADDRESS);
mIpAddress = findPreference(KEY_IP_ADDRESS);
- mImsStatus = findPreference(KEY_IMS_REGISTRATION_STATE);
mRes = getResources();
mUnavailable = mRes.getString(R.string.status_unavailable);
@@ -282,31 +275,11 @@ public class Status extends SettingsPreferenceFragment implements Indexable {
}
}
- private void setImsRegistrationStatus() {
- CarrierConfigManager configManager = (CarrierConfigManager)
- getSystemService(Context.CARRIER_CONFIG_SERVICE);
- int subId = SubscriptionManager.getDefaultDataSubscriptionId();
- PersistableBundle config = null;
- if (configManager != null) {
- config = configManager.getConfigForSubId(subId);
- }
- if (config != null && config.getBoolean(
- CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL)) {
- TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- mImsStatus.setSummary((tm != null && tm.isImsRegistered(subId)) ?
- R.string.ims_reg_status_registered : R.string.ims_reg_status_not_registered);
- } else {
- removePreferenceFromScreen(KEY_IMS_REGISTRATION_STATE);
- mImsStatus = null;
- }
- }
-
void updateConnectivity() {
setWimaxStatus();
setWifiStatus();
setBtStatus();
setIpAddressStatus();
- setImsRegistrationStatus();
}
void updateTimes() {
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/SimStatusTest.java b/tests/robotests/src/com/android/settings/deviceinfo/SimStatusTest.java
new file mode 100644
index 00000000000..4bcd1049a0f
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/deviceinfo/SimStatusTest.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2018 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.deviceinfo;
+
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.PersistableBundle;
+import android.os.UserManager;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionInfo;
+import android.telephony.TelephonyManager;
+
+import com.android.internal.telephony.Phone;
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.ShadowPhoneFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.util.ReflectionHelpers;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+ shadows = {
+ ShadowPhoneFactory.class
+ })
+public class SimStatusTest {
+ @Mock
+ private CarrierConfigManager mCarrierConfigManager;
+ @Mock
+ private Phone mPhone;
+ @Mock
+ private SubscriptionInfo mSubscriptionInfo;
+ @Mock
+ private TelephonyManager mTelephonyManager;
+ @Mock
+ private PreferenceScreen mMockScreen;
+ @Mock
+ private Preference mMockImsRegistrationStatePreference;
+ @Mock
+ private UserManager mMockUserManager;
+ @Mock
+ private Activity mMockActivity;
+
+ private Context mContext;
+ private Resources mResources;
+ private PersistableBundle mBundle;
+ private SimStatus mFragment;
+
+ private String mImsRegSummaryText;
+ private boolean mImsRegRemoved;
+ private boolean mResourceUpdated;
+ private List<SubscriptionInfo> mSelectableSubInfos = new ArrayList<>();
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+ mContext = spy(RuntimeEnvironment.application);
+ mResources = spy(mContext.getResources());
+ mBundle = new PersistableBundle();
+ mFragment = spy(new SimStatus());
+
+ doReturn(mContext).when(mFragment).getContext();
+ doReturn(mMockScreen).when(mFragment).getPreferenceScreen();
+ doReturn(mMockImsRegistrationStatePreference).when(mFragment).findPreference(
+ SimStatus.KEY_IMS_REGISTRATION_STATE);
+ doReturn(mMockActivity).when(mFragment).getActivity();
+ doReturn(mMockUserManager).when(mContext).getSystemService(Context.USER_SERVICE);
+ doReturn(mResources).when(mContext).getResources();
+ doReturn(0).when(mResources).getIdentifier(anyString(), anyString(), anyString());
+ doReturn(false).when(mResources).getBoolean(0);
+
+ doNothing().when(mFragment).addPreferencesFromResource(anyInt());
+
+ ReflectionHelpers.setField(mFragment, "mCarrierConfigManager", mCarrierConfigManager);
+ ReflectionHelpers.setField(mFragment, "mPhone", mPhone);
+ ReflectionHelpers.setField(mFragment, "mRes", mResources);
+ ReflectionHelpers.setField(mFragment, "mSir", mSubscriptionInfo);
+ ReflectionHelpers.setField(mFragment, "mTelephonyManager", mTelephonyManager);
+ mSelectableSubInfos.add(mSubscriptionInfo);
+ ReflectionHelpers.setField(mFragment, "mSelectableSubInfos", mSelectableSubInfos);
+
+ when(mSubscriptionInfo.getSubscriptionId()).thenReturn(0);
+ when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(mBundle);
+ when(mMockActivity.createPackageContext(anyString(), anyInt())).thenReturn(mContext);
+
+ ShadowPhoneFactory.setPhone(mPhone);
+ }
+
+ @Test
+ public void updateImsRegistrationState_imsRegistered_shouldSetSummaryToRegisterd() {
+ when(mTelephonyManager.isImsRegistered(anyInt())).thenReturn(true);
+
+ mFragment.updateImsRegistrationState();
+
+ // Check "Registered" is set in the summary text
+ verify(mMockImsRegistrationStatePreference).setSummary(mContext.getString(
+ R.string.ims_reg_status_registered));
+ }
+
+ @Test
+ public void updateImsRegistrationState_imsNotRegistered_shouldSetSummaryToNotRegisterd() {
+ when(mTelephonyManager.isImsRegistered(anyInt())).thenReturn(false);
+
+ mFragment.updateImsRegistrationState();
+
+ // Check "Not registered" is set in the summary text
+ verify(mMockImsRegistrationStatePreference).setSummary(mContext.getString(
+ R.string.ims_reg_status_not_registered));
+ }
+
+ @Test
+ public void updatePreference_configTrue_shouldNotRemoveImsStatusPreference() {
+ mBundle.putBoolean(CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL, true);
+
+ mFragment.updatePreference(false);
+
+ // Check the preference is not removed if the config is true
+ verify(mMockScreen, never()).removePreference(mMockImsRegistrationStatePreference);
+ }
+
+ @Test
+ public void updatePreference_configFalse_shouldRemoveImsStatusPreference() {
+ mBundle.putBoolean(CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL, false);
+
+ mFragment.updatePreference(false);
+
+ // Check the preference is removed if the config is false
+ verify(mMockScreen).removePreference(mMockImsRegistrationStatePreference);
+ }
+
+ @Test
+ public void updatePreference_tabChanged_shouldRemoveAndAddPreferences() {
+ mFragment.updatePreference(true);
+
+ // Check all preferences are removed once and added again
+ verify(mMockScreen).removeAll();
+ verify(mFragment).addPreferencesFromResource(R.xml.device_info_sim_status);
+ }
+
+ @Test
+ public void doTabChanged_shouldRemoveAndAddPreferences() {
+ mFragment.doTabChanged("0");
+
+ // Check all preferences are removed once and added again
+ verify(mMockScreen).removeAll();
+ verify(mFragment).addPreferencesFromResource(R.xml.device_info_sim_status);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPhoneFactory.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPhoneFactory.java
new file mode 100644
index 00000000000..33017d10d41
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPhoneFactory.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2018 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 com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneFactory;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+@Implements(PhoneFactory.class)
+public class ShadowPhoneFactory {
+ private static Phone sMockPhone;
+
+ public static void setPhone(Phone phone) {
+ sMockPhone = phone;
+ }
+
+ @Implementation
+ public static Phone getPhone(int phoneId) {
+ return sMockPhone;
+ }
+}