Merge "Fix sim pin lock preference disappear in dual sim." into rvc-dev

This commit is contained in:
TreeHugger Robot
2020-03-17 11:32:34 +00:00
committed by Android (Google) Code Review
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.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.text.TextUtils; import android.text.TextUtils;
@@ -53,6 +55,7 @@ import androidx.preference.SwitchPreference;
import com.android.settings.network.ProxySubscriptionManager; import com.android.settings.network.ProxySubscriptionManager;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@@ -220,8 +223,30 @@ public class IccLockSettings extends SettingsPreferenceFragment
Bundle savedInstanceState) { Bundle savedInstanceState) {
final int numSims = mProxySubscriptionMgr.getActiveSubscriptionInfoCountMax(); final int numSims = mProxySubscriptionMgr.getActiveSubscriptionInfoCountMax();
final List<SubscriptionInfo> subInfoList =
mProxySubscriptionMgr.getActiveSubscriptionsInfo();
mSlotId = 0; 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 View view = inflater.inflate(R.layout.icc_lock_tabs, container, false);
final ViewGroup prefs_container = (ViewGroup) view.findViewById(R.id.prefs_container); final ViewGroup prefs_container = (ViewGroup) view.findViewById(R.id.prefs_container);
Utils.prepareCustomPreferencesList(container, view, prefs_container, false); Utils.prepareCustomPreferencesList(container, view, prefs_container, false);
@@ -236,25 +261,22 @@ public class IccLockSettings extends SettingsPreferenceFragment
mTabHost.setOnTabChangedListener(mTabListener); mTabHost.setOnTabChangedListener(mTabListener);
mTabHost.clearAllTabs(); mTabHost.clearAllTabs();
final List<SubscriptionInfo> subInfoList = for (SubscriptionInfo subInfo : componenterList) {
mProxySubscriptionMgr.getActiveSubscriptionsInfo(); int slot = subInfo.getSimSlotIndex();
for (int i = 0; i < numSims; ++i) { mTabHost.addTab(buildTabSpec(String.valueOf(slot),
final SubscriptionInfo subInfo =
getActiveSubscriptionInfoForSimSlotIndex(subInfoList, i);
mTabHost.addTab(buildTabSpec(String.valueOf(i),
String.valueOf(subInfo == null String.valueOf(subInfo == null
? getContext().getString(R.string.sim_editor_title, i + 1) ? getContext().getString(R.string.sim_editor_title, slot + 1)
: subInfo.getDisplayName()))); : subInfo.getDisplayName())));
} }
final SubscriptionInfo sir = getActiveSubscriptionInfoForSimSlotIndex(
subInfoList, mSlotId); mSubId = componenterList.get(0).getSubscriptionId();
mSubId = sir.getSubscriptionId();
if (savedInstanceState != null && savedInstanceState.containsKey(CURRENT_TAB)) { if (savedInstanceState != null && savedInstanceState.containsKey(CURRENT_TAB)) {
mTabHost.setCurrentTabByTag(savedInstanceState.getString(CURRENT_TAB)); mTabHost.setCurrentTabByTag(savedInstanceState.getString(CURRENT_TAB));
} }
return view; return view;
} else { } else {
mSlotId = componenterList.get(0).getSimSlotIndex();
return super.onCreateView(inflater, container, savedInstanceState); return super.onCreateView(inflater, container, savedInstanceState);
} }
} }

View File

@@ -52,15 +52,21 @@ public class SimLockPreferenceController extends BasePreferenceController {
@Override @Override
public int getAvailabilityStatus() { public int getAvailabilityStatus() {
final PersistableBundle b = mCarrierConfigManager.getConfig(); final List<SubscriptionInfo> subInfoList =
final boolean IsAdmin = mUserManager.isAdminUser(); mSubscriptionManager.getActiveSubscriptionInfoList();
if (!IsAdmin || !isSimIccReady() ||
b.getBoolean(CarrierConfigManager.KEY_HIDE_SIM_LOCK_SETTINGS_BOOL)) { if (subInfoList == null) {
return DISABLED_FOR_USER; return DISABLED_FOR_USER;
} }
final boolean isAdmin = mUserManager.isAdminUser();
if (isAdmin && (!isHideSimLockSetting(subInfoList))) {
return AVAILABLE; return AVAILABLE;
} }
return DISABLED_FOR_USER;
}
@Override @Override
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen); super.displayPreference(screen);
@@ -78,34 +84,37 @@ public class SimLockPreferenceController extends BasePreferenceController {
private boolean isSimReady() { private boolean isSimReady() {
final List<SubscriptionInfo> subInfoList = final List<SubscriptionInfo> subInfoList =
mSubscriptionManager.getActiveSubscriptionInfoList(); mSubscriptionManager.getActiveSubscriptionInfoList();
if (subInfoList != null) { if (subInfoList == null) {
return false;
}
for (SubscriptionInfo subInfo : subInfoList) { for (SubscriptionInfo subInfo : subInfoList) {
final int simState = mTelephonyManager.getSimState(subInfo.getSimSlotIndex()); final int simState = mTelephonyManager.getSimState(subInfo.getSimSlotIndex());
if ((simState != TelephonyManager.SIM_STATE_ABSENT) && if ((simState != TelephonyManager.SIM_STATE_ABSENT)
(simState != TelephonyManager.SIM_STATE_UNKNOWN)) { && (simState != TelephonyManager.SIM_STATE_UNKNOWN)) {
return true; return true;
} }
} }
}
return false; return false;
} }
/** private boolean isHideSimLockSetting(List<SubscriptionInfo> subInfoList) {
* Return true if a there is a Slot that has Icc if (subInfoList == null) {
*/ return true;
private boolean isSimIccReady() { }
final List<SubscriptionInfo> subInfoList =
mSubscriptionManager.getActiveSubscriptionInfoList();
if (subInfoList != null) {
for (SubscriptionInfo subInfo : subInfoList) { for (SubscriptionInfo subInfo : subInfoList) {
mTelephonyManager = mTelephonyManager final TelephonyManager telephonyManager = mTelephonyManager
.createForSubscriptionId(subInfo.getSimSlotIndex()); .createForSubscriptionId(subInfo.getSubscriptionId());
if (mTelephonyManager.hasIccCard()) { final PersistableBundle bundle = mCarrierConfigManager.getConfigForSubId(
return true; 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(); setupMockIcc();
final PersistableBundle pb = new PersistableBundle(); final PersistableBundle pb = new PersistableBundle();
pb.putBoolean(CarrierConfigManager.KEY_HIDE_SIM_LOCK_SETTINGS_BOOL, true); pb.putBoolean(CarrierConfigManager.KEY_HIDE_SIM_LOCK_SETTINGS_BOOL, true);
when(mCarrierManager.getConfig()).thenReturn(pb); when(mCarrierManager.getConfigForSubId(anyInt())).thenReturn(pb);
assertThat(mController.getAvailabilityStatus()) assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.DISABLED_FOR_USER); .isEqualTo(BasePreferenceController.DISABLED_FOR_USER);
@@ -114,7 +114,7 @@ public class SimLockPreferenceControllerTest {
when(mUserManager.isAdminUser()).thenReturn(true); when(mUserManager.isAdminUser()).thenReturn(true);
setupMockIcc(); setupMockIcc();
final PersistableBundle pb = new PersistableBundle(); final PersistableBundle pb = new PersistableBundle();
when(mCarrierManager.getConfig()).thenReturn(pb); when(mCarrierManager.getConfigForSubId(anyInt())).thenReturn(pb);
assertThat(mController.getAvailabilityStatus()) assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.AVAILABLE); .isEqualTo(BasePreferenceController.AVAILABLE);