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

Commit 0998abfc authored by Steven Ng's avatar Steven Ng
Browse files

Update the OEM unlock preference summary to reflect the disable reason

3 cases implemented:
1) Bootloader unlocked
2) Device SIM-locked
3) Device Configuration, such as SIM-lock, has not been retrieved.

Bug: 29047618
Change-Id: Idf5cc1c9b1d105a0efd408cc2aa0e229e874442e
parent 018444ab
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -7689,4 +7689,10 @@
    <string name="gesture_setting_on">On</string>
    <string name="gesture_setting_off">Off</string>
    <!-- setting enable OEM unlock Checkbox's summary to explain this Checkbox is disabled because the bootloader has been unlocked [CHAR_LIMIT=60] -->
    <string name="oem_unlock_enable_disabled_summary_bootloader_unlocked">Bootloader is already unlocked</string>
    <!-- setting enable OEM unlock Checkbox's summary to explain this Checkbox is disabled because there is no connectivity. [CHAR_LIMIT=60] -->
    <string name="oem_unlock_enable_disabled_summary_connectivity">Connect to the Internet first</string>
    <!-- setting enable OEM unlock Checkbox's summary to explain this Checkbox is disabled because this setting is unavailable on sim-locked devices. [CHAR_LIMIT=60] -->
    <string name="oem_unlock_enable_disabled_summary_sim_locked_device">Unavailable on carrier-locked devices</string>
</resources>
+55 −8
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
import android.support.v7.preference.PreferenceGroup;
import android.support.v7.preference.PreferenceScreen;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
import android.view.ThreadedRenderer;
@@ -224,6 +225,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
    private UserManager mUm;
    private WifiManager mWifiManager;
    private PersistentDataBlockManager mOemUnlockManager;
    private TelephonyManager mTelephonyManager;

    private SwitchBar mSwitchBar;
    private boolean mLastEnabledState;
@@ -332,6 +334,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
            IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
        mOemUnlockManager = (PersistentDataBlockManager)getActivity()
                .getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
        mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

        mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE);
        mUm = (UserManager) getSystemService(Context.USER_SERVICE);
@@ -658,6 +661,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
                Settings.Secure.BLUETOOTH_HCI_LOG, 0) != 0);
        if (mEnableOemUnlock != null) {
            updateSwitchPreference(mEnableOemUnlock, Utils.isOemUnlockEnabled(getActivity()));
            updateOemUnlockSettingDescription();
        }
        updateSwitchPreference(mDebugViewAttributes, Settings.Global.getInt(cr,
                Settings.Global.DEBUG_VIEW_ATTRIBUTES, 0) != 0);
@@ -1003,14 +1007,7 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
    }

    private boolean enableOemUnlockPreference() {
        int flashLockState = PersistentDataBlockManager.FLASH_LOCK_UNKNOWN;
        if (mOemUnlockManager != null) {
            flashLockState = mOemUnlockManager.getFlashLockState();
        }

        return flashLockState != PersistentDataBlockManager.FLASH_LOCK_UNLOCKED
                && Settings.Global.getInt(getActivity().getContentResolver(),
                        Settings.Global.OEM_UNLOCK_DISALLOWED, 0) == 0;
        return !isBootloaderUnlocked() && isOemUnlockAllowed();
    }

    private void updateOemUnlockOptions() {
@@ -2181,4 +2178,54 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
                .show();

    }

    private void updateOemUnlockSettingDescription() {
        if (mEnableOemUnlock != null) {
            int oemUnlockSummary = R.string.oem_unlock_enable_summary;
            if (isBootloaderUnlocked()) {
                oemUnlockSummary = R.string.oem_unlock_enable_disabled_summary_bootloader_unlocked;
            } else if (isSimLockedDevice()) {
                oemUnlockSummary = R.string.oem_unlock_enable_disabled_summary_sim_locked_device;
            } else if (!isOemUnlockAllowed()) {
                // If the device isn't SIM-locked but OEM unlock is disabled by Global setting, this
                // means the device hasn't been able to confirm whether SIM-lock or any other
                // restrictions apply (or hasn't been able to apply such restrictions yet). Ask the
                // user to connect to the internet in order to retrieve all restrictions.
                oemUnlockSummary = R.string.oem_unlock_enable_disabled_summary_connectivity;
            }
            mEnableOemUnlock.setSummary(getString(oemUnlockSummary));
        }
    }

    /** Returns {@code true} if the device is SIM-locked. Otherwise, returns {@code false}. */
    private boolean isSimLockedDevice() {
        int phoneCount = mTelephonyManager.getPhoneCount();
        for (int i = 0; i < phoneCount; i++) {
            if (mTelephonyManager.getAllowedCarriers(i).size() > 0) {
                return true;
            }
        }
        return false;
    }

    /**
     * Returns {@code true} if the bootloader has been unlocked. Otherwise, returns {code false}.
     */
    private boolean isBootloaderUnlocked() {
        int flashLockState = PersistentDataBlockManager.FLASH_LOCK_UNKNOWN;
        if (mOemUnlockManager != null) {
            flashLockState = mOemUnlockManager.getFlashLockState();
        }

        return flashLockState == PersistentDataBlockManager.FLASH_LOCK_UNLOCKED;
    }

    /**
     * Returns {@code true} if OEM unlock is not disabled by Global policy. Otherwise, returns
     * {@code false}.
     */
    private boolean isOemUnlockAllowed() {
        return Settings.Global.getInt(getActivity().getContentResolver(),
                Settings.Global.OEM_UNLOCK_DISALLOWED, 0) == 0;
    }
}