100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller/* 200d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * Copyright (C) 2010 The Android Open Source Project 300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * 400d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * Licensed under the Apache License, Version 2.0 (the "License"); 500d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * you may not use this file except in compliance with the License. 600d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * You may obtain a copy of the License at 700d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * 800d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * http://www.apache.org/licenses/LICENSE-2.0 900d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * 1000d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * Unless required by applicable law or agreed to in writing, software 1100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * distributed under the License is distributed on an "AS IS" BASIS, 1200d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * See the License for the specific language governing permissions and 1400d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * limitations under the License. 1500d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller */ 1600d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller 1700d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Millerpackage com.android.settings; 1800d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller 19b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasaniimport com.android.internal.widget.LockPatternUtils; 20b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani 2100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Millerimport android.app.Activity; 22b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasaniimport android.app.Fragment; 23af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Millerimport android.app.admin.DevicePolicyManager; 2400d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Millerimport android.content.Intent; 2500d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller 260e88f4dd19a80e9e4d759595439773fb3e1f0c50Brian Carlstrompublic final class ChooseLockSettingsHelper { 270e88f4dd19a80e9e4d759595439773fb3e1f0c50Brian Carlstrom 280e88f4dd19a80e9e4d759595439773fb3e1f0c50Brian Carlstrom static final String EXTRA_KEY_PASSWORD = "password"; 290e88f4dd19a80e9e4d759595439773fb3e1f0c50Brian Carlstrom 3000d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller private LockPatternUtils mLockPatternUtils; 3100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller private Activity mActivity; 32b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani private Fragment mFragment; 3300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller 3400d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller public ChooseLockSettingsHelper(Activity activity) { 3500d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller mActivity = activity; 3647d380f1e6c823cea444004cb799d4c791145cc6Jim Miller mLockPatternUtils = new LockPatternUtils(activity); 3700d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller } 3800d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller 39b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani public ChooseLockSettingsHelper(Activity activity, Fragment fragment) { 40b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani this(activity); 41b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani mFragment = fragment; 42b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani } 43b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani 4400d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller public LockPatternUtils utils() { 4500d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller return mLockPatternUtils; 4600d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller } 4700d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller 4800d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller /** 4900d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * If a pattern, password or PIN exists, prompt the user before allowing them to change it. 502deec7edc937b1d19df0a74c4cd0c5ee3ef33070Jim Miller * @param message optional message to display about the action about to be done 512deec7edc937b1d19df0a74c4cd0c5ee3ef33070Jim Miller * @param details optional detail message to display 5200d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * @return true if one exists and we launched an activity to confirm it 5300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * @see #onActivityResult(int, int, android.content.Intent) 5400d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller */ 550e88f4dd19a80e9e4d759595439773fb3e1f0c50Brian Carlstrom boolean launchConfirmationActivity(int request, CharSequence message, CharSequence details) { 5600d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller boolean launched = false; 57af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller switch (mLockPatternUtils.getKeyguardStoredPasswordQuality()) { 58af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: 592deec7edc937b1d19df0a74c4cd0c5ee3ef33070Jim Miller launched = confirmPattern(request, message, details); 6000d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller break; 61af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: 62af366a3ed66dcb3c3ecb1dd101e5d8869b518598Jim Miller case DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC: 639c1e7f8c4c6adcf9cd9ea127c4fe3650c232fbceJim Miller case DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC: 6457fbf694a53afb9c1924d81272179dceb3acfa4dKonstantin Lopyrev case DevicePolicyManager.PASSWORD_QUALITY_COMPLEX: 652deec7edc937b1d19df0a74c4cd0c5ee3ef33070Jim Miller // TODO: update UI layout for ConfirmPassword to show message and details 6600d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller launched = confirmPassword(request); 6700d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller break; 6800d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller } 6900d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller return launched; 7000d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller } 7100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller 7200d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller /** 7300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * Launch screen to confirm the existing lock pattern. 742deec7edc937b1d19df0a74c4cd0c5ee3ef33070Jim Miller * @param message shown in header of ConfirmLockPattern if not null 752deec7edc937b1d19df0a74c4cd0c5ee3ef33070Jim Miller * @param details shown in footer of ConfirmLockPattern if not null 7600d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * @see #onActivityResult(int, int, android.content.Intent) 7700d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * @return true if we launched an activity to confirm pattern 7800d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller */ 792deec7edc937b1d19df0a74c4cd0c5ee3ef33070Jim Miller private boolean confirmPattern(int request, CharSequence message, CharSequence details) { 8000d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller if (!mLockPatternUtils.isLockPatternEnabled() || !mLockPatternUtils.savedPatternExists()) { 8100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller return false; 8200d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller } 8300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller final Intent intent = new Intent(); 842deec7edc937b1d19df0a74c4cd0c5ee3ef33070Jim Miller // supply header and footer text in the intent 852deec7edc937b1d19df0a74c4cd0c5ee3ef33070Jim Miller intent.putExtra(ConfirmLockPattern.HEADER_TEXT, message); 862deec7edc937b1d19df0a74c4cd0c5ee3ef33070Jim Miller intent.putExtra(ConfirmLockPattern.FOOTER_TEXT, details); 8700d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPattern"); 88b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani if (mFragment != null) { 89b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani mFragment.startActivityForResult(intent, request); 90b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani } else { 91b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani mActivity.startActivityForResult(intent, request); 92b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani } 9300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller return true; 9400d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller } 9500d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller 9600d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller /** 9700d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * Launch screen to confirm the existing lock password. 9800d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * @see #onActivityResult(int, int, android.content.Intent) 9900d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller * @return true if we launched an activity to confirm password 10000d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller */ 10100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller private boolean confirmPassword(int request) { 10200d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller if (!mLockPatternUtils.isLockPasswordEnabled()) return false; 10300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller final Intent intent = new Intent(); 10400d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller intent.setClassName("com.android.settings", "com.android.settings.ConfirmLockPassword"); 105b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani if (mFragment != null) { 106b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani mFragment.startActivityForResult(intent, request); 107b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani } else { 108b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani mActivity.startActivityForResult(intent, request); 109b14e1e04939ca610fd5f2439f879265450b0a6cdAmith Yamasani } 11000d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller return true; 11100d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller } 11200d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller 11300d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller 11400d2476d8fc122b4eef59d6be6f7aa41e9c56fdeJim Miller} 115