KeyguardManager.java revision 505312482782a600e997c91712f03f83c7a70428
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.app; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Binder; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.RemoteException; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.IBinder; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.ServiceManager; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.IWindowManager; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.IOnKeyguardExitResult; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Class that can be used to lock and unlock the keyboard. Get an instance of this 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * class by calling {@link android.content.Context#getSystemService(java.lang.String)} 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with argument {@link android.content.Context#KEYGUARD_SERVICE}. The 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Actual class to control the keyboard locking is 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.app.KeyguardManager.KeyguardLock}. 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class KeyguardManager { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IWindowManager mWM; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Handle returned by {@link KeyguardManager#newKeyguardLock} that allows 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you to disable / reenable the keyguard. 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public class KeyguardLock { 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IBinder mToken = new Binder(); 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String mTag; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project KeyguardLock(String tag) { 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTag = tag; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Disable the keyguard from showing. If the keyguard is currently 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * showing, hide it. The keyguard will be prevented from showing again 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * until {@link #reenableKeyguard()} is called. 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A good place to call this is from {@link android.app.Activity#onResume()} 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 56cb52cb52253c3832ccc7f5f1dbb4d8a0bd8178c0Jim Miller * Note: This call has no effect while any {@link android.app.admin.DevicePolicyManager} 57cb52cb52253c3832ccc7f5f1dbb4d8a0bd8178c0Jim Miller * is enabled that requires a password. 58d6b5705e188e55a3b9dbb07954b16564b1a31b9fJim Miller * 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #reenableKeyguard() 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void disableKeyguard() { 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWM.disableKeyguard(mToken, mTag); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Reenable the keyguard. The keyguard will reappear if the previous 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * call to {@link #disableKeyguard()} caused it it to be hidden. 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 72d6b5705e188e55a3b9dbb07954b16564b1a31b9fJim Miller * A good place to call this is from {@link android.app.Activity#onPause()} 73d6b5705e188e55a3b9dbb07954b16564b1a31b9fJim Miller * 74cb52cb52253c3832ccc7f5f1dbb4d8a0bd8178c0Jim Miller * Note: This call has no effect while any {@link android.app.admin.DevicePolicyManager} 75cb52cb52253c3832ccc7f5f1dbb4d8a0bd8178c0Jim Miller * is enabled that requires a password. 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #disableKeyguard() 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void reenableKeyguard() { 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWM.reenableKeyguard(mToken); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Callback passed to {@link KeyguardManager#exitKeyguardSecurely} to notify 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * caller of result. 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public interface OnKeyguardExitResult { 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param success True if the user was able to authenticate, false if 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not. 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void onKeyguardExitResult(boolean success); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project KeyguardManager() { 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWM = IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE)); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Enables you to lock or unlock the keyboard. Get an instance of this class by 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * calling {@link android.content.Context#getSystemService(java.lang.String) Context.getSystemService()}. 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This class is wrapped by {@link android.app.KeyguardManager KeyguardManager}. 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param tag A tag that informally identifies who you are (for debugging who 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is disabling he keyguard). 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A {@link KeyguardLock} handle to use to disable and reenable the 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * keyguard. 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public KeyguardLock newKeyguardLock(String tag) { 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new KeyguardLock(tag); 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 120520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * isKeyguardLocked 121520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * 122520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * Return whether the keyguard is currently locked. 123520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * 124520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * @return true if in keyguard is locked. 125520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * 126520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * @hide 127520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood */ 128520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood public boolean isKeyguardLocked() { 129520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood try { 130505312482782a600e997c91712f03f83c7a70428Mike Lockwood return mWM.isKeyguardLocked(); 131520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood } catch (RemoteException ex) { 132520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood return false; 133520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood } 134520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood } 135520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood 136520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood /** 137520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * isKeyguardSecure 138520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * 139520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * Return whether the keyguard requires a password to unlock. 140520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * 141520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * @return true if in keyguard is secure. 142520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * 143520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood * @hide 144520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood */ 145520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood public boolean isKeyguardSecure() { 146520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood try { 147520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood return mWM.isKeyguardSecure(); 148520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood } catch (RemoteException ex) { 149520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood return false; 150520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood } 151520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood } 152520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood 153520d8bc1d840966b5519195aaa514597a662c053Mike Lockwood /** 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If keyguard screen is showing or in restricted key input mode (i.e. in 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * keyguard password emergency screen). When in such mode, certain keys, 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * such as the Home key and the right soft keys, don't work. 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if in keyguard restricted input mode. 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.view.WindowManagerPolicy#inKeyguardRestrictedKeyInputMode 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean inKeyguardRestrictedInputMode() { 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mWM.inKeyguardRestrictedInputMode(); 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException ex) { 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Exit the keyguard securely. The use case for this api is that, after 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * disabling the keyguard, your app, which was granted permission to 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * disable the keyguard and show a limited amount of information deemed 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * safe without the user getting past the keyguard, needs to navigate to 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * something that is not safe to view without getting past the keyguard. 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This will, if the keyguard is secure, bring up the unlock screen of 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the keyguard. 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param callback Let's you know whether the operation was succesful and 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is safe to launch anything that would normally be considered safe 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * once the user has gotten past the keyguard. 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void exitKeyguardSecurely(final OnKeyguardExitResult callback) { 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mWM.exitKeyguardSecurely(new IOnKeyguardExitResult.Stub() { 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onKeyguardExitResult(boolean success) throws RemoteException { 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callback.onKeyguardExitResult(success); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (RemoteException e) { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 196