Merge "Fix sim pin lock preference disappear in dual sim." into rvc-dev am: 217740d640
am: 05985cb26e
Change-Id: I0e6ea23f432c71562274c69e1c203e15cef9ce45
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -52,13 +52,19 @@ 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;
|
||||||
}
|
}
|
||||||
return AVAILABLE;
|
|
||||||
|
final boolean isAdmin = mUserManager.isAdminUser();
|
||||||
|
if (isAdmin && (!isHideSimLockSetting(subInfoList))) {
|
||||||
|
return AVAILABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return DISABLED_FOR_USER;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -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) {
|
||||||
for (SubscriptionInfo subInfo : subInfoList) {
|
return false;
|
||||||
final int simState = mTelephonyManager.getSimState(subInfo.getSimSlotIndex());
|
}
|
||||||
if ((simState != TelephonyManager.SIM_STATE_ABSENT) &&
|
|
||||||
(simState != TelephonyManager.SIM_STATE_UNKNOWN)) {
|
for (SubscriptionInfo subInfo : subInfoList) {
|
||||||
return true;
|
final int simState = mTelephonyManager.getSimState(subInfo.getSimSlotIndex());
|
||||||
}
|
if ((simState != TelephonyManager.SIM_STATE_ABSENT)
|
||||||
|
&& (simState != TelephonyManager.SIM_STATE_UNKNOWN)) {
|
||||||
|
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) {
|
final TelephonyManager telephonyManager = mTelephonyManager
|
||||||
mTelephonyManager = mTelephonyManager
|
.createForSubscriptionId(subInfo.getSubscriptionId());
|
||||||
.createForSubscriptionId(subInfo.getSimSlotIndex());
|
final PersistableBundle bundle = mCarrierConfigManager.getConfigForSubId(
|
||||||
if (mTelephonyManager.hasIccCard()) {
|
subInfo.getSubscriptionId());
|
||||||
return true;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user