Merge "Fix sim pin lock preference disappear in dual sim." am: 2dd19966b7 am: 51c080aaf9

Change-Id: I33877d685c9da74b19570c00d1082d1190ef524d
This commit is contained in:
Treehugger Robot
2020-03-19 05:43:13 +00:00
committed by Automerger Merge Worker
3 changed files with 71 additions and 40 deletions

View File

@@ -28,6 +28,8 @@ import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -52,6 +54,7 @@ import androidx.preference.SwitchPreference;
import com.android.settings.network.ProxySubscriptionManager;
import java.util.ArrayList;
import java.util.List;
/**
@@ -219,8 +222,30 @@ public class IccLockSettings extends SettingsPreferenceFragment
Bundle savedInstanceState) {
final int numSims = mProxySubscriptionMgr.getActiveSubscriptionInfoCountMax();
final List<SubscriptionInfo> subInfoList =
mProxySubscriptionMgr.getActiveSubscriptionsInfo();
mSlotId = 0;
if (numSims > 1) {
final List<SubscriptionInfo> componenterList = new ArrayList<>();
for (int i = 0; i < numSims; ++i) {
final SubscriptionInfo subInfo =
getActiveSubscriptionInfoForSimSlotIndex(subInfoList, i);
final CarrierConfigManager carrierConfigManager = getContext().getSystemService(
CarrierConfigManager.class);
final PersistableBundle bundle = carrierConfigManager.getConfigForSubId(
subInfo.getSubscriptionId());
if (bundle != null
&& !bundle.getBoolean(CarrierConfigManager.KEY_HIDE_SIM_LOCK_SETTINGS_BOOL)) {
componenterList.add(subInfo);
}
}
if (componenterList.size() == 0) {
Log.e(TAG, "onCreateView: no sim info");
return null;
}
if (componenterList.size() > 1) {
final View view = inflater.inflate(R.layout.icc_lock_tabs, container, false);
final ViewGroup prefs_container = (ViewGroup) view.findViewById(R.id.prefs_container);
Utils.prepareCustomPreferencesList(container, view, prefs_container, false);
@@ -235,25 +260,22 @@ public class IccLockSettings extends SettingsPreferenceFragment
mTabHost.setOnTabChangedListener(mTabListener);
mTabHost.clearAllTabs();
final List<SubscriptionInfo> subInfoList =
mProxySubscriptionMgr.getActiveSubscriptionsInfo();
for (int i = 0; i < numSims; ++i) {
final SubscriptionInfo subInfo =
getActiveSubscriptionInfoForSimSlotIndex(subInfoList, i);
mTabHost.addTab(buildTabSpec(String.valueOf(i),
for (SubscriptionInfo subInfo : componenterList) {
int slot = subInfo.getSimSlotIndex();
mTabHost.addTab(buildTabSpec(String.valueOf(slot),
String.valueOf(subInfo == null
? getContext().getString(R.string.sim_editor_title, i + 1)
: subInfo.getDisplayName())));
? getContext().getString(R.string.sim_editor_title, slot + 1)
: subInfo.getDisplayName())));
}
final SubscriptionInfo sir = getActiveSubscriptionInfoForSimSlotIndex(
subInfoList, mSlotId);
mSubId = sir.getSubscriptionId();
mSubId = componenterList.get(0).getSubscriptionId();
if (savedInstanceState != null && savedInstanceState.containsKey(CURRENT_TAB)) {
mTabHost.setCurrentTabByTag(savedInstanceState.getString(CURRENT_TAB));
}
return view;
} else {
mSlotId = componenterList.get(0).getSimSlotIndex();
return super.onCreateView(inflater, container, savedInstanceState);
}
}

View File

@@ -52,13 +52,19 @@ public class SimLockPreferenceController extends BasePreferenceController {
@Override
public int getAvailabilityStatus() {
final PersistableBundle b = mCarrierConfigManager.getConfig();
final boolean IsAdmin = mUserManager.isAdminUser();
if (!IsAdmin || !isSimIccReady() ||
b.getBoolean(CarrierConfigManager.KEY_HIDE_SIM_LOCK_SETTINGS_BOOL)) {
final List<SubscriptionInfo> subInfoList =
mSubscriptionManager.getActiveSubscriptionInfoList();
if (subInfoList == null) {
return DISABLED_FOR_USER;
}
return AVAILABLE;
final boolean isAdmin = mUserManager.isAdminUser();
if (isAdmin && (!isHideSimLockSetting(subInfoList))) {
return AVAILABLE;
}
return DISABLED_FOR_USER;
}
@Override
@@ -78,34 +84,37 @@ public class SimLockPreferenceController extends BasePreferenceController {
private boolean isSimReady() {
final List<SubscriptionInfo> subInfoList =
mSubscriptionManager.getActiveSubscriptionInfoList();
if (subInfoList != null) {
for (SubscriptionInfo subInfo : subInfoList) {
final int simState = mTelephonyManager.getSimState(subInfo.getSimSlotIndex());
if ((simState != TelephonyManager.SIM_STATE_ABSENT) &&
(simState != TelephonyManager.SIM_STATE_UNKNOWN)) {
return true;
}
if (subInfoList == null) {
return false;
}
for (SubscriptionInfo subInfo : subInfoList) {
final int simState = mTelephonyManager.getSimState(subInfo.getSimSlotIndex());
if ((simState != TelephonyManager.SIM_STATE_ABSENT)
&& (simState != TelephonyManager.SIM_STATE_UNKNOWN)) {
return true;
}
}
return false;
}
/**
* Return true if a there is a Slot that has Icc
*/
private boolean isSimIccReady() {
final List<SubscriptionInfo> subInfoList =
mSubscriptionManager.getActiveSubscriptionInfoList();
private boolean isHideSimLockSetting(List<SubscriptionInfo> subInfoList) {
if (subInfoList == null) {
return true;
}
if (subInfoList != null) {
for (SubscriptionInfo subInfo : subInfoList) {
mTelephonyManager = mTelephonyManager
.createForSubscriptionId(subInfo.getSimSlotIndex());
if (mTelephonyManager.hasIccCard()) {
return true;
}
for (SubscriptionInfo subInfo : subInfoList) {
final TelephonyManager telephonyManager = mTelephonyManager
.createForSubscriptionId(subInfo.getSubscriptionId());
final PersistableBundle bundle = mCarrierConfigManager.getConfigForSubId(
subInfo.getSubscriptionId());
if (telephonyManager.hasIccCard() && bundle != null
&& !bundle.getBoolean(CarrierConfigManager.KEY_HIDE_SIM_LOCK_SETTINGS_BOOL)) {
// one or more sims show sim lock setting UI.
return false;
}
}
return false;
return true;
}
}

View File

@@ -103,7 +103,7 @@ public class SimLockPreferenceControllerTest {
setupMockIcc();
final PersistableBundle pb = new PersistableBundle();
pb.putBoolean(CarrierConfigManager.KEY_HIDE_SIM_LOCK_SETTINGS_BOOL, true);
when(mCarrierManager.getConfig()).thenReturn(pb);
when(mCarrierManager.getConfigForSubId(anyInt())).thenReturn(pb);
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
@@ -114,7 +114,7 @@ public class SimLockPreferenceControllerTest {
when(mUserManager.isAdminUser()).thenReturn(true);
setupMockIcc();
final PersistableBundle pb = new PersistableBundle();
when(mCarrierManager.getConfig()).thenReturn(pb);
when(mCarrierManager.getConfigForSubId(anyInt())).thenReturn(pb);
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.AVAILABLE);