Dynamic preferences for sim status
- Support N-sim devices for sim status preference Bug: 36458278 Test: make RunSettingsRoboTests -j40 Change-Id: I0cea3f765f89c30a6595631ed501ab1c0010b736
This commit is contained in:
@@ -6441,9 +6441,7 @@
|
|||||||
<!-- SIM status title [CHAR LIMIT=40] -->
|
<!-- SIM status title [CHAR LIMIT=40] -->
|
||||||
<string name="sim_status_title">SIM status</string>
|
<string name="sim_status_title">SIM status</string>
|
||||||
<!-- SIM status title [CHAR LIMIT=40] -->
|
<!-- SIM status title [CHAR LIMIT=40] -->
|
||||||
<string name="sim_status_title_sim_slot_1">SIM status (sim slot 1)</string>
|
<string name="sim_status_title_sim_slot">SIM status (sim slot %1$d)</string>
|
||||||
<!-- SIM status title [CHAR LIMIT=40] -->
|
|
||||||
<string name="sim_status_title_sim_slot_2">SIM status (sim slot 2)</string>
|
|
||||||
<!-- Title for call back. [CHAR LIMIT=60] -->
|
<!-- Title for call back. [CHAR LIMIT=60] -->
|
||||||
<string name="sim_call_back_title">Call back from default SIM</string>
|
<string name="sim_call_back_title">Call back from default SIM</string>
|
||||||
<!-- Title for outgoing back. [CHAR LIMIT=60] -->
|
<!-- Title for outgoing back. [CHAR LIMIT=60] -->
|
||||||
|
@@ -29,21 +29,13 @@
|
|||||||
android:title="@string/status_number"
|
android:title="@string/status_number"
|
||||||
android:summary="@string/summary_placeholder"/>
|
android:summary="@string/summary_placeholder"/>
|
||||||
|
|
||||||
<!-- SIM status Sim Slot 1 -->
|
<!-- SIM status -->
|
||||||
<Preference
|
<Preference
|
||||||
android:key="sim_status_sim_1"
|
android:key="sim_status"
|
||||||
android:order="10"
|
android:order="10"
|
||||||
android:title="@string/sim_status_title"
|
android:title="@string/sim_status_title"
|
||||||
android:summary="@string/summary_placeholder"/>
|
android:summary="@string/summary_placeholder"/>
|
||||||
|
|
||||||
<!-- SIM status Sim Slot 2-->
|
|
||||||
<Preference
|
|
||||||
android:key="sim_status_sim_2"
|
|
||||||
android:order="11"
|
|
||||||
android:title="@string/sim_status_title_sim_slot_2"
|
|
||||||
android:summary="@string/summary_placeholder"/>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Model & hardware -->
|
<!-- Model & hardware -->
|
||||||
<Preference
|
<Preference
|
||||||
android:key="device_model"
|
android:key="device_model"
|
||||||
|
@@ -42,7 +42,6 @@ import com.android.settings.deviceinfo.SecurityPatchPreferenceController;
|
|||||||
import com.android.settings.deviceinfo.WifiMacAddressPreferenceController;
|
import com.android.settings.deviceinfo.WifiMacAddressPreferenceController;
|
||||||
import com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceControllerV2;
|
import com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceControllerV2;
|
||||||
import com.android.settings.deviceinfo.imei.ImeiInfoPreferenceControllerV2;
|
import com.android.settings.deviceinfo.imei.ImeiInfoPreferenceControllerV2;
|
||||||
import com.android.settings.deviceinfo.simstatus.SimStatusDualSimPreferenceController;
|
|
||||||
import com.android.settings.deviceinfo.simstatus.SimStatusPreferenceControllerV2;
|
import com.android.settings.deviceinfo.simstatus.SimStatusPreferenceControllerV2;
|
||||||
import com.android.settings.search.BaseSearchIndexProvider;
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
import com.android.settings.search.Indexable;
|
import com.android.settings.search.Indexable;
|
||||||
@@ -133,8 +132,6 @@ public class DeviceInfoSettings extends DashboardFragment implements Indexable {
|
|||||||
|
|
||||||
controllers.add(new SimStatusPreferenceControllerV2(context, fragment));
|
controllers.add(new SimStatusPreferenceControllerV2(context, fragment));
|
||||||
|
|
||||||
controllers.add(new SimStatusDualSimPreferenceController(context, fragment));
|
|
||||||
|
|
||||||
controllers.add(new DeviceModelPreferenceController(context, fragment));
|
controllers.add(new DeviceModelPreferenceController(context, fragment));
|
||||||
|
|
||||||
controllers.add(new ImeiInfoPreferenceControllerV2(context, fragment));
|
controllers.add(new ImeiInfoPreferenceControllerV2(context, fragment));
|
||||||
|
@@ -1,98 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 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.simstatus;
|
|
||||||
|
|
||||||
import android.app.Fragment;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.support.v7.preference.Preference;
|
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
|
||||||
import android.telephony.SubscriptionInfo;
|
|
||||||
import android.telephony.SubscriptionManager;
|
|
||||||
import android.telephony.TelephonyManager;
|
|
||||||
import android.text.TextUtils;
|
|
||||||
|
|
||||||
import com.android.settings.R;
|
|
||||||
import com.android.settings.core.PreferenceControllerMixin;
|
|
||||||
import com.android.settingslib.deviceinfo.AbstractSimStatusImeiInfoPreferenceController;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public abstract class AbstractSimStatusPreferenceController extends
|
|
||||||
AbstractSimStatusImeiInfoPreferenceController implements PreferenceControllerMixin {
|
|
||||||
|
|
||||||
protected final boolean mIsMultiSim;
|
|
||||||
protected final TelephonyManager mTelephonyManager;
|
|
||||||
private final SubscriptionManager mSubscriptionManager;
|
|
||||||
private final Fragment mFragment;
|
|
||||||
|
|
||||||
private Preference mPreference;
|
|
||||||
|
|
||||||
public AbstractSimStatusPreferenceController(Context context, Fragment fragment) {
|
|
||||||
super(context);
|
|
||||||
|
|
||||||
mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
|
||||||
mSubscriptionManager = (SubscriptionManager) context.getSystemService(
|
|
||||||
Context.TELEPHONY_SUBSCRIPTION_SERVICE);
|
|
||||||
mFragment = fragment;
|
|
||||||
mIsMultiSim = mTelephonyManager.getPhoneCount() > 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void displayPreference(PreferenceScreen screen) {
|
|
||||||
super.displayPreference(screen);
|
|
||||||
mPreference = screen.findPreference(getPreferenceKey());
|
|
||||||
if (mPreference == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
mPreference.setTitle(getPreferenceTitle());
|
|
||||||
mPreference.setSummary(getCarrierName());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean handlePreferenceTreeClick(Preference preference) {
|
|
||||||
if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
SimStatusDialogFragment.show(mFragment, getSimSlot(), getPreferenceTitle());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return The preference title for the displayed preference.
|
|
||||||
*/
|
|
||||||
protected abstract String getPreferenceTitle();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return The sim slot to retrieve sim status information about.
|
|
||||||
*/
|
|
||||||
protected abstract int getSimSlot();
|
|
||||||
|
|
||||||
private CharSequence getCarrierName() {
|
|
||||||
final List<SubscriptionInfo> subscriptionInfoList =
|
|
||||||
mSubscriptionManager.getActiveSubscriptionInfoList();
|
|
||||||
if (subscriptionInfoList != null) {
|
|
||||||
for (SubscriptionInfo info : subscriptionInfoList) {
|
|
||||||
if (info.getSimSlotIndex() == getSimSlot()) {
|
|
||||||
return info.getCarrierName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return mContext.getText(R.string.device_info_not_available);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,52 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 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.simstatus;
|
|
||||||
|
|
||||||
import android.app.Fragment;
|
|
||||||
import android.content.Context;
|
|
||||||
|
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
public class SimStatusDualSimPreferenceController extends AbstractSimStatusPreferenceController {
|
|
||||||
|
|
||||||
private static final int SIM_SLOT = 1;
|
|
||||||
private static final String SIM_STATUS_DUAL_SIM_KEY = "sim_status_sim_2";
|
|
||||||
|
|
||||||
public SimStatusDualSimPreferenceController(Context context, Fragment fragment) {
|
|
||||||
super(context, fragment);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isAvailable() {
|
|
||||||
return super.isAvailable() && mIsMultiSim;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getPreferenceTitle() {
|
|
||||||
return mContext.getResources().getString(R.string.sim_status_title_sim_slot_2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getSimSlot() {
|
|
||||||
return SIM_SLOT;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPreferenceKey() {
|
|
||||||
return SIM_STATUS_DUAL_SIM_KEY;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -18,32 +18,107 @@ package com.android.settings.deviceinfo.simstatus;
|
|||||||
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.support.annotation.VisibleForTesting;
|
||||||
|
import android.support.v7.preference.Preference;
|
||||||
|
import android.support.v7.preference.PreferenceScreen;
|
||||||
|
import android.telephony.SubscriptionInfo;
|
||||||
|
import android.telephony.SubscriptionManager;
|
||||||
|
import android.telephony.TelephonyManager;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.core.PreferenceControllerMixin;
|
||||||
|
import com.android.settingslib.deviceinfo.AbstractSimStatusImeiInfoPreferenceController;
|
||||||
|
|
||||||
public class SimStatusPreferenceControllerV2 extends AbstractSimStatusPreferenceController {
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public static final int SIM_SLOT = 0;
|
public class SimStatusPreferenceControllerV2 extends
|
||||||
|
AbstractSimStatusImeiInfoPreferenceController implements PreferenceControllerMixin {
|
||||||
|
|
||||||
private static final String KEY_SIM_1_STATUS = "sim_status_sim_1";
|
private static final String KEY_SIM_STATUS = "sim_status";
|
||||||
|
|
||||||
|
private final TelephonyManager mTelephonyManager;
|
||||||
|
private final SubscriptionManager mSubscriptionManager;
|
||||||
|
private final Fragment mFragment;
|
||||||
|
private final List<Preference> mPreferenceList = new ArrayList<>();
|
||||||
|
|
||||||
public SimStatusPreferenceControllerV2(Context context, Fragment fragment) {
|
public SimStatusPreferenceControllerV2(Context context, Fragment fragment) {
|
||||||
super(context, fragment);
|
super(context);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
|
||||||
protected String getPreferenceTitle() {
|
mSubscriptionManager = (SubscriptionManager) context.getSystemService(
|
||||||
return mIsMultiSim ? mContext.getResources().getString(R.string.sim_status_title_sim_slot_1)
|
Context.TELEPHONY_SUBSCRIPTION_SERVICE);
|
||||||
: mContext.getResources().getString(R.string.sim_status_title);
|
mFragment = fragment;
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getSimSlot() {
|
|
||||||
return SIM_SLOT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getPreferenceKey() {
|
public String getPreferenceKey() {
|
||||||
return KEY_SIM_1_STATUS;
|
return KEY_SIM_STATUS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void displayPreference(PreferenceScreen screen) {
|
||||||
|
super.displayPreference(screen);
|
||||||
|
final Preference preference = screen.findPreference(getPreferenceKey());
|
||||||
|
if (!isAvailable() || preference == null || !preference.isVisible()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mPreferenceList.add(preference);
|
||||||
|
|
||||||
|
final int simStatusOrder = preference.getOrder();
|
||||||
|
// Add additional preferences for each sim in the device
|
||||||
|
for (int simSlotNumber = 1; simSlotNumber < mTelephonyManager.getPhoneCount();
|
||||||
|
simSlotNumber++) {
|
||||||
|
final Preference multiSimPreference = createNewPreference(screen.getContext());
|
||||||
|
multiSimPreference.setOrder(simStatusOrder + simSlotNumber);
|
||||||
|
multiSimPreference.setKey(KEY_SIM_STATUS + simSlotNumber);
|
||||||
|
screen.addPreference(multiSimPreference);
|
||||||
|
mPreferenceList.add(multiSimPreference);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateState(Preference preference) {
|
||||||
|
for (int simSlotNumber = 0; simSlotNumber < mPreferenceList.size(); simSlotNumber++) {
|
||||||
|
final Preference simStatusPreference = mPreferenceList.get(simSlotNumber);
|
||||||
|
simStatusPreference.setTitle(getPreferenceTitle(simSlotNumber /* sim slot */));
|
||||||
|
simStatusPreference.setSummary(getCarrierName(simSlotNumber /* sim slot */));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean handlePreferenceTreeClick(Preference preference) {
|
||||||
|
final int simSlot = mPreferenceList.indexOf(preference);
|
||||||
|
if (simSlot == -1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
SimStatusDialogFragment.show(mFragment, simSlot, getPreferenceTitle(simSlot));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getPreferenceTitle(int simSlot) {
|
||||||
|
return mTelephonyManager.getPhoneCount() > 1 ? mContext.getString(
|
||||||
|
R.string.sim_status_title_sim_slot, simSlot + 1) : mContext.getString(
|
||||||
|
R.string.sim_status_title);
|
||||||
|
}
|
||||||
|
|
||||||
|
private CharSequence getCarrierName(int simSlot) {
|
||||||
|
final List<SubscriptionInfo> subscriptionInfoList =
|
||||||
|
mSubscriptionManager.getActiveSubscriptionInfoList();
|
||||||
|
if (subscriptionInfoList != null) {
|
||||||
|
for (SubscriptionInfo info : subscriptionInfoList) {
|
||||||
|
if (info.getSimSlotIndex() == simSlot) {
|
||||||
|
return info.getCarrierName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mContext.getText(R.string.device_info_not_available);
|
||||||
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
Preference createNewPreference(Context context) {
|
||||||
|
return new Preference(context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,113 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 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.simstatus;
|
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.anyString;
|
|
||||||
import static org.mockito.Mockito.doReturn;
|
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.spy;
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import android.app.Fragment;
|
|
||||||
import android.app.FragmentManager;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.UserManager;
|
|
||||||
import android.support.v7.preference.Preference;
|
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
|
||||||
|
|
||||||
import com.android.settings.TestConfig;
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.Answers;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.MockitoAnnotations;
|
|
||||||
import org.robolectric.RuntimeEnvironment;
|
|
||||||
import org.robolectric.annotation.Config;
|
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
|
||||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
|
||||||
public class AbstractSimStatusPreferenceControllerTest {
|
|
||||||
|
|
||||||
@Mock
|
|
||||||
private Preference mPreference;
|
|
||||||
@Mock
|
|
||||||
private PreferenceScreen mScreen;
|
|
||||||
@Mock
|
|
||||||
private UserManager mUserManager;
|
|
||||||
@Mock
|
|
||||||
private Fragment mFragment;
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
private AbstractSimStatusPreferenceControllerImpl mController;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setup() {
|
|
||||||
MockitoAnnotations.initMocks(this);
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
|
||||||
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
|
||||||
mController = new AbstractSimStatusPreferenceControllerImpl(mContext, mFragment);
|
|
||||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
|
||||||
when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void displayPreference_shouldSetTitleAndSummary() {
|
|
||||||
mController.displayPreference(mScreen);
|
|
||||||
|
|
||||||
verify(mPreference).setTitle(mController.getPreferenceTitle());
|
|
||||||
verify(mPreference).setSummary(anyString());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void handlePreferenceTreeClick_shouldStartDialogFragment() {
|
|
||||||
when(mFragment.getChildFragmentManager()).thenReturn(
|
|
||||||
mock(FragmentManager.class, Answers.RETURNS_DEEP_STUBS));
|
|
||||||
when(mPreference.getTitle()).thenReturn("foo");
|
|
||||||
mController.displayPreference(mScreen);
|
|
||||||
|
|
||||||
mController.handlePreferenceTreeClick(mPreference);
|
|
||||||
|
|
||||||
verify(mFragment).getChildFragmentManager();
|
|
||||||
}
|
|
||||||
|
|
||||||
public class AbstractSimStatusPreferenceControllerImpl extends
|
|
||||||
AbstractSimStatusPreferenceController {
|
|
||||||
|
|
||||||
public AbstractSimStatusPreferenceControllerImpl(Context context, Fragment fragment) {
|
|
||||||
super(context, fragment);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getPreferenceKey() {
|
|
||||||
return "foo";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected String getPreferenceTitle() {
|
|
||||||
return "bar";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected int getSimSlot() {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,93 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2017 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.simstatus;
|
|
||||||
|
|
||||||
import static org.mockito.Mockito.doReturn;
|
|
||||||
import static org.mockito.Mockito.spy;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import android.app.Fragment;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.net.ConnectivityManager;
|
|
||||||
import android.os.UserManager;
|
|
||||||
import android.support.v7.preference.Preference;
|
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
|
||||||
import android.telephony.TelephonyManager;
|
|
||||||
|
|
||||||
import com.android.settings.TestConfig;
|
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
|
||||||
|
|
||||||
import com.google.common.truth.Truth;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.MockitoAnnotations;
|
|
||||||
import org.robolectric.RuntimeEnvironment;
|
|
||||||
import org.robolectric.annotation.Config;
|
|
||||||
import org.robolectric.util.ReflectionHelpers;
|
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
|
||||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
|
||||||
public class SimStatusDualSimPreferenceControllerTest {
|
|
||||||
|
|
||||||
@Mock
|
|
||||||
private Preference mPreference;
|
|
||||||
@Mock
|
|
||||||
private PreferenceScreen mScreen;
|
|
||||||
@Mock
|
|
||||||
private TelephonyManager mTelephonyManager;
|
|
||||||
@Mock
|
|
||||||
private UserManager mUserManager;
|
|
||||||
@Mock
|
|
||||||
private ConnectivityManager mConnectivityManager;
|
|
||||||
@Mock
|
|
||||||
private Fragment mFragment;
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
private SimStatusDualSimPreferenceController mController;
|
|
||||||
|
|
||||||
@Before
|
|
||||||
public void setUp() {
|
|
||||||
MockitoAnnotations.initMocks(this);
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
|
||||||
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
|
||||||
doReturn(mConnectivityManager).when(mContext).getSystemService(ConnectivityManager.class);
|
|
||||||
when(mUserManager.isAdminUser()).thenReturn(true);
|
|
||||||
when(mConnectivityManager.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(
|
|
||||||
true);
|
|
||||||
mController = new SimStatusDualSimPreferenceController(mContext, mFragment);
|
|
||||||
ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager);
|
|
||||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
|
||||||
when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isAvailable_multiSim_shouldBeTrue() {
|
|
||||||
ReflectionHelpers.setField(mController, "mIsMultiSim", true);
|
|
||||||
|
|
||||||
Truth.assertThat(mController.isAvailable()).isTrue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isAvailable_notMultiSim_shouldBeFalse() {
|
|
||||||
ReflectionHelpers.setField(mController, "mIsMultiSim", false);
|
|
||||||
|
|
||||||
Truth.assertThat(mController.isAvailable()).isFalse();
|
|
||||||
}
|
|
||||||
}
|
|
@@ -16,13 +16,16 @@
|
|||||||
|
|
||||||
package com.android.settings.deviceinfo.simstatus;
|
package com.android.settings.deviceinfo.simstatus;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
|
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
|
import android.app.FragmentManager;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
@@ -31,11 +34,13 @@ import android.telephony.TelephonyManager;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.TestConfig;
|
import com.android.settings.TestConfig;
|
||||||
|
import com.android.settings.deviceinfo.imei.ImeiInfoPreferenceControllerV2;
|
||||||
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
import com.android.settings.testutils.SettingsRobolectricTestRunner;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Answers;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
@@ -49,6 +54,8 @@ public class SimStatusPreferenceControllerV2Test {
|
|||||||
@Mock
|
@Mock
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
@Mock
|
@Mock
|
||||||
|
private Preference mSecondSimPreference;
|
||||||
|
@Mock
|
||||||
private PreferenceScreen mScreen;
|
private PreferenceScreen mScreen;
|
||||||
@Mock
|
@Mock
|
||||||
private TelephonyManager mTelephonyManager;
|
private TelephonyManager mTelephonyManager;
|
||||||
@@ -65,25 +72,60 @@ public class SimStatusPreferenceControllerV2Test {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
||||||
mController = new SimStatusPreferenceControllerV2(mContext, mFragment);
|
mController = spy(new SimStatusPreferenceControllerV2(mContext, mFragment));
|
||||||
|
doReturn(true).when(mController).isAvailable();
|
||||||
|
when(mScreen.getContext()).thenReturn(mContext);
|
||||||
|
doReturn(mSecondSimPreference).when(mController).createNewPreference(mContext);
|
||||||
ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager);
|
ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager);
|
||||||
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
|
||||||
when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
|
final String prefKey = mController.getPreferenceKey();
|
||||||
|
when(mPreference.getKey()).thenReturn(prefKey);
|
||||||
|
when(mPreference.isVisible()).thenReturn(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPreferenceTitle_noMultiSim_shouldReturnSingleSimString() {
|
public void displayPreference_multiSim_shouldAddSecondPreference() {
|
||||||
ReflectionHelpers.setField(mController, "mIsMultiSim", false);
|
when(mTelephonyManager.getPhoneCount()).thenReturn(2);
|
||||||
|
|
||||||
assertThat(mController.getPreferenceTitle()).isEqualTo(mContext.getResources().getString(
|
mController.displayPreference(mScreen);
|
||||||
R.string.sim_status_title));
|
|
||||||
|
verify(mScreen).addPreference(mSecondSimPreference);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getPreferenceTitle_multiSim_shouldReturnMultiSimString() {
|
public void updateState_singleSim_shouldSetSingleSimTitleAndSummary() {
|
||||||
ReflectionHelpers.setField(mController, "mIsMultiSim", true);
|
when(mTelephonyManager.getPhoneCount()).thenReturn(1);
|
||||||
|
mController.displayPreference(mScreen);
|
||||||
|
|
||||||
assertThat(mController.getPreferenceTitle()).isEqualTo(mContext.getResources().getString(
|
mController.updateState(mPreference);
|
||||||
R.string.sim_status_title_sim_slot_1));
|
|
||||||
|
verify(mPreference).setTitle(mContext.getString(R.string.sim_status_title));
|
||||||
|
verify(mPreference).setSummary(anyString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void updateState_multiSim_shouldSetMultiSimTitleAndSummary() {
|
||||||
|
when(mTelephonyManager.getPhoneCount()).thenReturn(2);
|
||||||
|
mController.displayPreference(mScreen);
|
||||||
|
|
||||||
|
mController.updateState(mPreference);
|
||||||
|
|
||||||
|
verify(mPreference).setTitle(
|
||||||
|
mContext.getString(R.string.sim_status_title_sim_slot, 1 /* sim slot */));
|
||||||
|
verify(mSecondSimPreference).setTitle(
|
||||||
|
mContext.getString(R.string.sim_status_title_sim_slot, 2 /* sim slot */));
|
||||||
|
verify(mPreference).setSummary(anyString());
|
||||||
|
verify(mSecondSimPreference).setSummary(anyString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void handlePreferenceTreeClick_shouldStartDialogFragment() {
|
||||||
|
when(mFragment.getChildFragmentManager()).thenReturn(
|
||||||
|
mock(FragmentManager.class, Answers.RETURNS_DEEP_STUBS));
|
||||||
|
mController.displayPreference(mScreen);
|
||||||
|
|
||||||
|
mController.handlePreferenceTreeClick(mPreference);
|
||||||
|
|
||||||
|
verify(mFragment).getChildFragmentManager();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user