summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/xml/security_settings_misc.xml3
-rw-r--r--src/com/android/settings/DevelopmentSettings.java14
-rw-r--r--src/com/android/settings/RestrictedSettingsFragment.java32
-rw-r--r--src/com/android/settings/SecuritySettings.java20
-rw-r--r--src/com/android/settings/SettingsPreferenceFragment.java2
-rw-r--r--src/com/android/settings/TrustedCredentialsSettings.java53
-rw-r--r--src/com/android/settings/WirelessSettings.java14
7 files changed, 98 insertions, 40 deletions
diff --git a/res/xml/security_settings_misc.xml b/res/xml/security_settings_misc.xml
index 1ead7a9..dbbeb1d 100644
--- a/res/xml/security_settings_misc.xml
+++ b/res/xml/security_settings_misc.xml
@@ -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"
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index dd04cd9..c727bcc 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -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;
}
diff --git a/src/com/android/settings/RestrictedSettingsFragment.java b/src/com/android/settings/RestrictedSettingsFragment.java
index ebf2bcf..e25570e 100644
--- a/src/com/android/settings/RestrictedSettingsFragment.java
+++ b/src/com/android/settings/RestrictedSettingsFragment.java
@@ -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);
+ }
}
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 7a442a9..f893c36 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -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();
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 60765a9..0a382b5 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -241,7 +241,7 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
mParentFragment = getFragmentManager().findFragmentById(mParentFragmentId);
if (!(mParentFragment instanceof DialogCreatable)) {
throw new IllegalArgumentException(
- (mParentFragment != null
+ (mParentFragment != null
? mParentFragment.getClass().getName()
: mParentFragmentId)
+ " must implement "
diff --git a/src/com/android/settings/TrustedCredentialsSettings.java b/src/com/android/settings/TrustedCredentialsSettings.java
index cdfe7cd..b3716e3 100644
--- a/src/com/android/settings/TrustedCredentialsSettings.java
+++ b/src/com/android/settings/TrustedCredentialsSettings.java
@@ -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) {
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index ecb984d..81c1794 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -16,7 +16,6 @@
package com.android.settings;
-import java.util.HashSet;
import android.app.Activity;
import android.app.AlertDialog;
@@ -75,7 +74,6 @@ public class WirelessSettings extends RestrictedSettingsFragment {
private static final int MANAGE_MOBILE_PLAN_DIALOG_ID = 1;
private static final String SAVED_MANAGE_MOBILE_PLAN_MSG = "mManageMobilePlanMessage";
- private final HashSet<Preference> mProtectedByRestictionsPrefs = new HashSet<Preference>();
public WirelessSettings() {
super(null);
@@ -87,9 +85,8 @@ public class WirelessSettings extends RestrictedSettingsFragment {
*/
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
- if (mProtectedByRestictionsPrefs.contains(preference) && !hasChallengeSucceeded()) {
- restrictionsPinCheck(RESTRICTIONS_PIN_SET);
- return false;
+ if (ensurePinRestrictedPreference(preference)) {
+ return true;
}
log("onPreferenceTreeClick: preference=" + preference);
if (preference == mAirplaneModePreference && Boolean.parseBoolean(
@@ -155,13 +152,6 @@ public class WirelessSettings extends RestrictedSettingsFragment {
}
}
- private void protectByRestrictions(String key) {
- Preference pref = findPreference(key);
- if (pref != null) {
- mProtectedByRestictionsPrefs.add(pref);
- }
- }
-
@Override
public Dialog onCreateDialog(int dialogId) {
log("onCreateDialog: dialogId=" + dialogId);