KeyguardService.java revision 380ecb81db52a9d0197ca969951d07b91c20d2b9
1380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi/* 2380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * Copyright (C) 2014 The Android Open Source Project 3380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * 4380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License"); 5380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * you may not use this file except in compliance with the License. 6380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * You may obtain a copy of the License at 7380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * 8380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * http://www.apache.org/licenses/LICENSE-2.0 9380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * 10380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * Unless required by applicable law or agreed to in writing, software 11380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS, 12380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * See the License for the specific language governing permissions and 14380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * limitations under the License 15380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi */ 16380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 17380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggipackage com.android.systemui.keyguard; 18380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 19380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport com.android.internal.policy.IKeyguardExitCallback; 20380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport com.android.internal.policy.IKeyguardService; 21380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport com.android.internal.policy.IKeyguardServiceConstants; 22380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport com.android.internal.policy.IKeyguardShowCallback; 23380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport com.android.systemui.statusbar.CommandQueue; 24380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 25380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.app.ActivityManagerNative; 26380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.app.Service; 27380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.app.StatusBarManager; 28380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.content.Context; 29380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.content.Intent; 30380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.os.Binder; 31380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.os.Bundle; 32380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.os.Debug; 33380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.os.IBinder; 34380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.os.RemoteException; 35380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.util.Log; 36380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport android.view.MotionEvent; 37380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 38380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggiimport static android.content.pm.PackageManager.PERMISSION_GRANTED; 39380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 40380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggipublic class KeyguardService extends Service { 41380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi static final String TAG = "KeyguardService"; 42380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi static final String PERMISSION = android.Manifest.permission.CONTROL_KEYGUARD; 43380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 44380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public static final String ACTION_STATUS_BAR_BIND = "action.status_bar_bind"; 45380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 46380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi private CommandQueue mCommandQueue; 47380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi private StatusBarManager mStatusBarManager; 48380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 49380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 50380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public void onCreate() { 51380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 52380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 53380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 54380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public IBinder onBind(Intent intent) { 55380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if (ACTION_STATUS_BAR_BIND.equals(intent.getAction())) { 56380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi return mKeyguardStatusBarBinder; 57380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } else { 58380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi return mBinder; 59380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 60380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 61380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 62380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi void checkPermission() { 63380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if (getBaseContext().checkCallingOrSelfPermission(PERMISSION) != PERMISSION_GRANTED) { 64380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi Log.w(TAG, "Caller needs permission '" + PERMISSION + "' to call " + Debug.getCaller()); 65380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi throw new SecurityException("Access denied to process: " + Binder.getCallingPid() 66380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi + ", must have permission " + PERMISSION); 67380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 68380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 69380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 70380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi private final KeyguardStatusBarBinder mKeyguardStatusBarBinder = 71380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi new KeyguardStatusBarBinder() { 72380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 73380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 74380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public void register(CommandQueue commandQueue) { 75380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mCommandQueue = commandQueue; 76380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 77380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 78380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 79380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public void dismissKeyguard() { 80380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi try { 81380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mBinder.dismiss(); 82380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } catch (RemoteException e) { 83380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi Log.e(TAG, "Could not dismiss keyguard", e); 84380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 85380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 86380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi }; 87380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 88380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi private final IKeyguardService.Stub mBinder = new IKeyguardService.Stub() { 89380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 90380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi /** Whether the Keyguard is visible. */ 91380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi private boolean mShowing; 92380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 93380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi /** 94380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * Whether the Keyguard is hidden by a window with 95380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * {@link android.view.WindowManager.LayoutParams#FLAG_SHOW_WHEN_LOCKED}. So mShowing might 96380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi * be true, but also mHidden. So in the end, the Keyguard would not be visible. 97380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi */ 98380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi private boolean mHidden; 99380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi private boolean mShowingDream; 100380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 101380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 102380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized boolean isShowing() { 103380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi return mShowing; 104380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 105380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 106380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 107380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized boolean isSecure() { 108380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi return true; 109380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 110380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 111380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 112380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized boolean isShowingAndNotHidden() { 113380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi return mShowing && !mHidden; 114380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 115380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 116380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 117380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized boolean isInputRestricted() { 118380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi return false; 119380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 120380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 121380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 122380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void verifyUnlock(IKeyguardExitCallback callback) { 123380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 124380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 125380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 126380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void keyguardDone(boolean authenticated, boolean wakeup) { 127380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 128380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mShowing = false; 129380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi adjustStatusBarLocked(); 130380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if (mCommandQueue != null) { 131380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mCommandQueue.setKeyguardShown(false, null, true); 132380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 133380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 134380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 135380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 136380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized int setHidden(boolean isHidden) { 137380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 138380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if (mHidden == isHidden) { 139380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi return IKeyguardServiceConstants.KEYGUARD_SERVICE_HIDE_RESULT_NONE; 140380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 141380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mHidden = isHidden; 142380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi try { 143380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi ActivityManagerNative.getDefault().setLockScreenShown(mShowing && !mHidden 144380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi || mShowingDream); 145380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } catch (RemoteException e) { 146380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi Log.e(TAG, "Could not update activity manager lock screen state", e); 147380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 148380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi adjustStatusBarLocked(); 149380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if (mCommandQueue != null) { 150380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mCommandQueue.setKeyguardShown(!isHidden, null, false); 151380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 152380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi return isShowingAndNotHidden() 153380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi ? IKeyguardServiceConstants.KEYGUARD_SERVICE_HIDE_RESULT_SET_FLAGS 154380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi : IKeyguardServiceConstants.KEYGUARD_SERVICE_HIDE_RESULT_UNSET_FLAGS; 155380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 156380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 157380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 158380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void dismiss() { 159380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 160380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mShowing = false; 161380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi adjustStatusBarLocked(); 162380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if (mCommandQueue != null) { 163380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mCommandQueue.setKeyguardShown(false, null, true); 164380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 165380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 166380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 167380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 168380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void onDreamingStarted() { 169380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 170380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mShowingDream = true; 171380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 172380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 173380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 174380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void onDreamingStopped() { 175380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 176380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mShowingDream = false; 177380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 178380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 179380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 180380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void onScreenTurnedOff(int reason) { 181380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 182380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 183380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 184380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 185380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void onScreenTurnedOn(IKeyguardShowCallback callback) { 186380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 187380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mShowing = true; 188380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi adjustStatusBarLocked(); 189380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if (mCommandQueue != null) { 190380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mCommandQueue.setKeyguardShown(isShowingAndNotHidden(), callback, true); 191380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 192380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 193380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 194380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 195380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void setKeyguardEnabled(boolean enabled) { 196380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 197380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 198380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 199380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 200380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized boolean isDismissable() { 201380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi return !isSecure(); 202380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 203380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 204380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 205380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void onSystemReady() { 206380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 207380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 208380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 209380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 210380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void doKeyguardTimeout(Bundle options) { 211380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 212380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 213380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 214380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 215380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void setCurrentUser(int userId) { 216380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 217380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 218380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 219380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 220380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void showAssistant() { 221380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 222380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 223380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 224380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 225380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void dispatch(MotionEvent event) { 226380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 227380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 228380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 229380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 230380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void launchCamera() { 231380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 232380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 233380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 234380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi @Override 235380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi public synchronized void onBootCompleted() { 236380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi checkPermission(); 237380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi onScreenTurnedOn(null); 238380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 239380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 240380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi private void adjustStatusBarLocked() { 241380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if (mStatusBarManager == null) { 242380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mStatusBarManager = (StatusBarManager) getSystemService(Context.STATUS_BAR_SERVICE); 243380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 244380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if (mStatusBarManager == null) { 245380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi Log.w(TAG, "Could not get status bar manager"); 246380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } else { 247380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi // Disable aspects of the system/status/navigation bars that must not be re-enabled by 248380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi // windows that appear on top, ever 249380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi int flags = StatusBarManager.DISABLE_NONE; 250380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if (isShowing()) { 251380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi // Permanently disable components not available when keyguard is enabled 252380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi // (like recents). Temporary enable/disable (e.g. the "back" button) are 253380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi // done in KeyguardHostView. 254380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi flags |= StatusBarManager.DISABLE_RECENT; 255380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if (isSecure()) { 256380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi // showing secure lockscreen; disable ticker and switch private notifications 257380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi // to show their public versions, if available. 258380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi flags |= StatusBarManager.DISABLE_PRIVATE_NOTIFICATIONS; 259380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 260380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if (false) { 261380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi flags |= StatusBarManager.DISABLE_SEARCH; 262380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 263380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 264380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi if (isShowingAndNotHidden()) { 265380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi flags |= StatusBarManager.DISABLE_HOME; 266380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 267380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi mStatusBarManager.disable(flags); 268380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 269380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi } 270380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi }; 271380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi} 272380ecb81db52a9d0197ca969951d07b91c20d2b9Jorim Jaggi 273