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

Commit 71decb7b authored by Jason Monk's avatar Jason Monk Committed by Android (Google) Code Review
Browse files

Merge "Restriction pin changes."

parents 7494ff47 6e1102d9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -80,7 +80,8 @@
                android:persistent="false"
                android:fragment="com.android.settings.TrustedCredentialsSettings"/>

        <Preference android:title="@string/credentials_install"
        <Preference android:key="credentials_install"
                android:title="@string/credentials_install"
                android:summary="@string/credentials_install_summary"
                android:persistent="false">
            <intent android:action="android.credentials.INSTALL"
+2 −12
Original line number Diff line number Diff line
@@ -54,7 +54,6 @@ import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceFragment;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.provider.Settings;
@@ -210,7 +209,6 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
            = new ArrayList<CheckBoxPreference>();

    private final HashSet<Preference> mDisabledPrefs = new HashSet<Preference>();
    private final HashSet<Preference> mProtectedByRestrictionsPrefs = new HashSet<Preference>();

    // To track whether a confirmation dialog was clicked.
    private boolean mDialogClicked;
@@ -362,12 +360,6 @@ public class DevelopmentSettings extends RestrictedSettingsFragment
        }
    }

    private void protectByRestrictions(Preference pref) {
        if (pref != null) {
            mProtectedByRestrictionsPrefs.add(pref);
        }
    }

    private CheckBoxPreference findAndInitCheckboxPref(String key) {
        CheckBoxPreference pref = (CheckBoxPreference) findPreference(key);
        if (pref == null) {
@@ -1178,11 +1170,9 @@ public class DevelopmentSettings extends RestrictedSettingsFragment

    @Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
        if (mProtectedByRestrictionsPrefs.contains(preference)
                && !restrictionsPinCheck(RESTRICTIONS_PIN_SET)) {
            return false;
        if (super.onPreferenceTreeClick(preferenceScreen, preference)) {
            return true;
        }

        if (Utils.isMonkeyRunning()) {
            return false;
        }
+32 −0
Original line number Diff line number Diff line
@@ -16,11 +16,15 @@

package com.android.settings;

import java.util.HashSet;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.UserManager;
import android.preference.Preference;
import android.preference.PreferenceScreen;

/**
 * Base class for settings activities that should be pin protected when in restricted mode.
@@ -50,6 +54,8 @@ public class RestrictedSettingsFragment extends SettingsPreferenceFragment {

    private final String mRestrictionKey;

    private final HashSet<Preference> mProtectedByRestictionsPrefs = new HashSet<Preference>();

    /**
     * @param restrictionKey The restriction key to check before pin protecting
     *            this settings page. Pass in {@link RESTRICTIONS_PIN_SET} if it should
@@ -162,4 +168,30 @@ public class RestrictedSettingsFragment extends SettingsPreferenceFragment {
               || mUserManager.hasUserRestriction(restrictionKey);
       return restricted && mUserManager.hasRestrictionsPin();
   }

   /**
    * If the preference is one that was added by protectByRestrictions(), then it will
    * prompt the user for the restrictions pin if they haven't entered it already.
    * Intended to be called at the top of onPreferenceTreeClick.  If this function returns
    * true, then onPreferenceTreeClick should return true.
    */
   boolean ensurePinRestrictedPreference(Preference preference) {
       return mProtectedByRestictionsPrefs.contains(preference)
               && !restrictionsPinCheck(RESTRICTIONS_PIN_SET);
   }

    /**
     * Call this with any preferences that should require the PIN to be entered
     * before they are accessible.
     */
   protected void protectByRestrictions(Preference pref) {
       if (pref != null) {
           mProtectedByRestictionsPrefs.add(pref);
       }
   }

   protected void protectByRestrictions(String key) {
       Preference pref = findPreference(key);
       protectByRestrictions(pref);
   }
}
+6 −14
Original line number Diff line number Diff line
@@ -45,7 +45,6 @@ import android.util.Log;
import com.android.internal.widget.LockPatternUtils;

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

/**
@@ -75,6 +74,7 @@ public class SecuritySettings extends RestrictedSettingsFragment
    private static final String KEY_SHOW_PASSWORD = "show_password";
    private static final String KEY_CREDENTIAL_STORAGE_TYPE = "credential_storage_type";
    private static final String KEY_RESET_CREDENTIALS = "reset_credentials";
    private static final String KEY_CREDENTIALS_INSTALL = "credentials_install";
    private static final String KEY_TOGGLE_INSTALL_APPLICATIONS = "toggle_install_applications";
    private static final String KEY_TOGGLE_VERIFY_APPLICATIONS = "toggle_verify_applications";
    private static final String KEY_POWER_INSTANTLY_LOCKS = "power_button_instantly_locks";
@@ -82,8 +82,6 @@ public class SecuritySettings extends RestrictedSettingsFragment
    private static final String KEY_NOTIFICATION_ACCESS = "manage_notification_access";
    private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";

    private final HashSet<Preference> mProtectedByRestictionsPrefs = new HashSet<Preference>();

    private PackageManager mPM;
    DevicePolicyManager mDPM;

@@ -245,6 +243,7 @@ public class SecuritySettings extends RestrictedSettingsFragment

        // Show password
        mShowPassword = (CheckBoxPreference) root.findPreference(KEY_SHOW_PASSWORD);
        mResetCredentials = root.findPreference(KEY_RESET_CREDENTIALS);

        // Credential storage
        final UserManager um = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
@@ -257,7 +256,6 @@ public class SecuritySettings extends RestrictedSettingsFragment
                        : R.string.credential_storage_type_software;
            credentialStorageType.setSummary(storageSummaryRes);

            mResetCredentials = root.findPreference(KEY_RESET_CREDENTIALS);
        } else {
            removePreference(KEY_CREDENTIALS_MANAGER);
        }
@@ -312,16 +310,12 @@ public class SecuritySettings extends RestrictedSettingsFragment
        if (shouldBePinProtected(RESTRICTIONS_PIN_SET)) {
            protectByRestrictions(mToggleAppInstallation);
            protectByRestrictions(mToggleVerifyApps);
            protectByRestrictions(mResetCredentials);
            protectByRestrictions(root.findPreference(KEY_CREDENTIALS_INSTALL));
        }
        return root;
    }

    private void protectByRestrictions(Preference pref) {
        if (pref != null) {
            mProtectedByRestictionsPrefs.add(pref);
        }
    }

    private int getNumEnabledNotificationListeners() {
        final String flat = Settings.Secure.getString(getContentResolver(),
                Settings.Secure.ENABLED_NOTIFICATION_LISTENERS);
@@ -487,11 +481,9 @@ public class SecuritySettings extends RestrictedSettingsFragment

    @Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
        if (mProtectedByRestictionsPrefs.contains(preference)
                && !restrictionsPinCheck(RESTRICTIONS_PIN_SET)) {
            return false;
        if (ensurePinRestrictedPreference(preference)) {
            return true;
        }

        final String key = preference.getKey();

        final LockPatternUtils lockPatternUtils = mChooseLockSettingsHelper.utils();
+53 −0
Original line number Diff line number Diff line
@@ -16,14 +16,18 @@

package com.android.settings;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.Fragment;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.http.SslCertificate;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.UserManager;
import android.security.IKeyChainService;
import android.security.KeyChain;
import android.security.KeyChain.KeyChainConnection;
@@ -52,6 +56,14 @@ public class TrustedCredentialsSettings extends Fragment {

    private static final String TAG = "TrustedCredentialsSettings";

    private UserManager mUserManager;

    private static final int REQUEST_PIN_CHALLENGE = 12309;
    // If the restriction PIN is entered correctly.
    private boolean mChallengeSucceeded;
    private boolean mChallengeRequested;


    private enum Tab {
        SYSTEM("system",
               R.string.trusted_credentials_system_tab,
@@ -142,6 +154,13 @@ public class TrustedCredentialsSettings extends Fragment {

    private TabHost mTabHost;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
    }


    @Override public View onCreateView(
            LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        mTabHost = (TabHost) inflater.inflate(R.layout.trusted_credentials, parent, false);
@@ -355,6 +374,11 @@ public class TrustedCredentialsSettings extends Fragment {
        removeButton.setText(certHolder.mTab.getButtonLabel(certHolder));
        removeButton.setOnClickListener(new View.OnClickListener() {
            @Override public void onClick(View v) {
                if (mUserManager.hasRestrictionsPin() && !mChallengeSucceeded) {
                    ensurePin();
                    return;
                }

                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                builder.setMessage(certHolder.mTab.getButtonConfirmation(certHolder));
                builder.setPositiveButton(
@@ -379,6 +403,35 @@ public class TrustedCredentialsSettings extends Fragment {
        certDialog.show();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_PIN_CHALLENGE) {
            mChallengeRequested = false;
            if (resultCode == Activity.RESULT_OK) {
                mChallengeSucceeded = true;
            }
            return;
        }

        super.onActivityResult(requestCode, resultCode, data);
    }

    private void ensurePin() {
        if (!mChallengeSucceeded) {
            final UserManager um = UserManager.get(getActivity());
            if (!mChallengeRequested) {
                if (um.hasRestrictionsPin()) {
                    Intent requestPin =
                            new Intent(Intent.ACTION_RESTRICTIONS_PIN_CHALLENGE);
                    startActivityForResult(requestPin, REQUEST_PIN_CHALLENGE);
                    mChallengeRequested = true;
                }
            }
        }
        mChallengeSucceeded = false;
    }


    private class AliasOperation extends AsyncTask<Void, Void, Boolean> {
        private final CertHolder mCertHolder;
        private AliasOperation(CertHolder certHolder) {
Loading