Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4059a7de authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

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

Merge "Fix sim pin lock preference disappear in dual sim." into rvc-dev am: 217740d6 am: 05985cb2

Change-Id: I0e6ea23f432c71562274c69e1c203e15cef9ce45
parents b8b7c24b 05985cb2
Loading
Loading
Loading
Loading
+34 −12
Original line number Diff line number Diff line
@@ -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;
@@ -53,6 +55,7 @@ import androidx.preference.SwitchPreference;

import com.android.settings.network.ProxySubscriptionManager;

import java.util.ArrayList;
import java.util.List;

/**
@@ -220,8 +223,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);
@@ -236,25 +261,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)
                                ? 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);
        }
    }
+35 −26
Original line number Diff line number Diff line
@@ -52,15 +52,21 @@ 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;
        }

        final boolean isAdmin = mUserManager.isAdminUser();
        if (isAdmin && (!isHideSimLockSetting(subInfoList))) {
            return AVAILABLE;
        }

        return DISABLED_FOR_USER;
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
@@ -78,34 +84,37 @@ public class SimLockPreferenceController extends BasePreferenceController {
    private boolean isSimReady() {
        final List<SubscriptionInfo> subInfoList =
                mSubscriptionManager.getActiveSubscriptionInfoList();
        if (subInfoList != null) {
        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)) {
            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();

        if (subInfoList != null) {
            for (SubscriptionInfo subInfo : subInfoList) {
                mTelephonyManager = mTelephonyManager
                        .createForSubscriptionId(subInfo.getSimSlotIndex());
                if (mTelephonyManager.hasIccCard()) {
    private boolean isHideSimLockSetting(List<SubscriptionInfo> subInfoList) {
        if (subInfoList == null) {
            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;
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -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);