diff options
Diffstat (limited to 'src/com/android/settings')
-rw-r--r-- | src/com/android/settings/CryptKeeper.java | 28 | ||||
-rw-r--r-- | src/com/android/settings/CryptKeeperConfirm.java | 24 | ||||
-rw-r--r-- | src/com/android/settings/users/AppRestrictionsFragment.java | 19 |
3 files changed, 46 insertions, 25 deletions
diff --git a/src/com/android/settings/CryptKeeper.java b/src/com/android/settings/CryptKeeper.java index c2295e6..9a09647 100644 --- a/src/com/android/settings/CryptKeeper.java +++ b/src/com/android/settings/CryptKeeper.java @@ -37,9 +37,8 @@ import android.os.SystemProperties; import android.os.UserHandle; import android.os.storage.IMountService; import android.os.storage.StorageManager; - -import android.phone.PhoneManager; import android.provider.Settings; +import android.telecomm.TelecommManager; import android.telephony.TelephonyManager; import android.text.Editable; import android.text.TextUtils; @@ -133,6 +132,9 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList // how long we wait to clear a wrong pattern private static final int WRONG_PATTERN_CLEAR_TIMEOUT_MS = 1500; + // how long we wait to clear a right pattern + private static final int RIGHT_PATTERN_CLEAR_TIMEOUT_MS = 500; + private Runnable mClearPatternRunnable = new Runnable() { public void run() { mLockPatternView.clearPattern(); @@ -167,6 +169,10 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList if (failedAttempts == 0) { // The password was entered successfully. Simply do nothing // and wait for the service restart to switch to surfacefligner + if (mLockPatternView != null) { + mLockPatternView.removeCallbacks(mClearPatternRunnable); + mLockPatternView.postDelayed(mClearPatternRunnable, RIGHT_PATTERN_CLEAR_TIMEOUT_MS); + } } else if (failedAttempts == MAX_FAILED_ATTEMPTS) { // Factory reset the device. sendBroadcast(new Intent("android.intent.action.MASTER_CLEAR")); @@ -409,6 +415,7 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList new AsyncTask<Void, Void, Void>() { int type = StorageManager.CRYPT_TYPE_PASSWORD; String owner_info; + boolean pattern_visible; @Override public Void doInBackground(Void... v) { @@ -416,6 +423,7 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList final IMountService service = getMountService(); type = service.getPasswordType(); owner_info = service.getField("OwnerInfo"); + pattern_visible = !("0".equals(service.getField("PatternVisible"))); } catch (Exception e) { Log.e(TAG, "Error calling mount service " + e); } @@ -445,6 +453,10 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList passwordEntryInit(); + if (mLockPatternView != null) { + mLockPatternView.setInStealthMode(!pattern_visible); + } + if (mCooldown > 0) { setBackFunctionality(false); cooldown(); // in case we are cooling down and coming back from emergency dialler @@ -875,7 +887,7 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList } int textId; - if (getPhoneManager().isInAPhoneCall()) { + if (getTelecommManager().isInCall()) { // Show "return to call" textId = R.string.cryptkeeper_return_to_call; } else { @@ -889,9 +901,9 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList } private void takeEmergencyCallAction() { - PhoneManager phoneManager = getPhoneManager(); - if (phoneManager.isInAPhoneCall()) { - phoneManager.showCallScreen(false /* showDialpad */); + TelecommManager telecommManager = getTelecommManager(); + if (telecommManager.isInCall()) { + telecommManager.showInCallScreen(false /* showDialpad */); } else { launchEmergencyDialer(); } @@ -910,8 +922,8 @@ public class CryptKeeper extends Activity implements TextView.OnEditorActionList return (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); } - private PhoneManager getPhoneManager() { - return (PhoneManager) getSystemService(Context.PHONE_SERVICE); + private TelecommManager getTelecommManager() { + return (TelecommManager) getSystemService(Context.TELECOMM_SERVICE); } /** diff --git a/src/com/android/settings/CryptKeeperConfirm.java b/src/com/android/settings/CryptKeeperConfirm.java index 71d5e96..7641525 100644 --- a/src/com/android/settings/CryptKeeperConfirm.java +++ b/src/com/android/settings/CryptKeeperConfirm.java @@ -25,6 +25,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.ServiceManager; +import android.os.UserHandle; import android.os.storage.IMountService; import android.util.Log; import android.view.LayoutInflater; @@ -32,6 +33,8 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import com.android.internal.widget.LockPatternUtils; + public class CryptKeeperConfirm extends Fragment { public static class Blank extends Activity { @@ -90,6 +93,27 @@ public class CryptKeeperConfirm extends Fragment { return; } + /* WARNING - nasty hack! + Settings for the lock screen are not available to the crypto + screen (CryptKeeper) at boot. We duplicate the ones that + CryptKeeper needs to the crypto key/value store when they are + modified (see LockPatternUtils). + However, prior to encryption, the crypto key/value store is not + persisted across reboots, thus modified settings are lost to + CryptKeeper. + In order to make sure CryptKeeper had the correct settings after + first encrypting, we thus need to rewrite them, which ensures the + crypto key/value store is up to date. On encryption, this store + is then persisted, and the settings will be there on future + reboots. + */ + LockPatternUtils utils = new LockPatternUtils(getActivity()); + utils.setVisiblePatternEnabled(utils.isVisiblePatternEnabled()); + if (utils.isOwnerInfoEnabled()) { + utils.setOwnerInfo(utils.getOwnerInfo(UserHandle.USER_OWNER), + UserHandle.USER_OWNER); + } + Intent intent = new Intent(getActivity(), Blank.class); intent.putExtras(getArguments()); diff --git a/src/com/android/settings/users/AppRestrictionsFragment.java b/src/com/android/settings/users/AppRestrictionsFragment.java index 0518f56..9eee4ac 100644 --- a/src/com/android/settings/users/AppRestrictionsFragment.java +++ b/src/com/android/settings/users/AppRestrictionsFragment.java @@ -159,34 +159,17 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen private boolean panelOpen; private boolean immutable; private List<Preference> mChildren = new ArrayList<Preference>(); - private final ColorFilter grayscaleFilter; AppRestrictionsPreference(Context context, OnClickListener listener) { super(context); setLayoutResource(R.layout.preference_app_restrictions); this.listener = listener; - - ColorMatrix colorMatrix = new ColorMatrix(); - colorMatrix.setSaturation(0f); - float[] matrix = colorMatrix.getArray(); - matrix[18] = 0.5f; - grayscaleFilter = new ColorMatrixColorFilter(colorMatrix); } private void setSettingsEnabled(boolean enable) { hasSettings = enable; } - @Override - public void setChecked(boolean checked) { - if (checked) { - getIcon().setColorFilter(null); - } else { - getIcon().setColorFilter(grayscaleFilter); - } - super.setChecked(checked); - } - void setRestrictions(ArrayList<RestrictionEntry> restrictions) { this.restrictions = restrictions; } @@ -246,6 +229,8 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen final Switch toggle = (Switch) widget.getChildAt(0); toggle.setEnabled(!isImmutable()); toggle.setTag(this); + toggle.setClickable(true); + toggle.setFocusable(true); toggle.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { |