KeyguardSelectorView.java revision 47df44aad773fb2a46d4c07e20278c7d8c0b16be
1dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller/* 2dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * Copyright (C) 2012 The Android Open Source Project 3dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * 4dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * Licensed under the Apache License, Version 2.0 (the "License"); 5dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * you may not use this file except in compliance with the License. 6dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * You may obtain a copy of the License at 7dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * 8dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * http://www.apache.org/licenses/LICENSE-2.0 9dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * 10dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * Unless required by applicable law or agreed to in writing, software 11dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * distributed under the License is distributed on an "AS IS" BASIS, 12dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * See the License for the specific language governing permissions and 14dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * limitations under the License. 15dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller */ 16dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerpackage com.android.internal.policy.impl.keyguard; 17dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 18dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.animation.ObjectAnimator; 19dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.app.ActivityManagerNative; 20dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.app.SearchManager; 21dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.content.ActivityNotFoundException; 22dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.content.ComponentName; 23dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.content.Context; 24dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.content.Intent; 25dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.os.RemoteException; 26dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.os.UserHandle; 27dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.provider.MediaStore; 2847df44aad773fb2a46d4c07e20278c7d8c0b16beJim Millerimport android.telephony.TelephonyManager; 29dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.util.AttributeSet; 30dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.util.Log; 31dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.util.Slog; 32dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.view.View; 33dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.widget.Button; 34dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.widget.LinearLayout; 35dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 36dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.telephony.IccCardConstants; 3747df44aad773fb2a46d4c07e20278c7d8c0b16beJim Millerimport com.android.internal.telephony.IccCardConstants.State; 38dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.widget.LockPatternUtils; 39dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.widget.multiwaveview.GlowPadView; 40dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener; 41dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.R; 42dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 43dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerpublic class KeyguardSelectorView extends LinearLayout implements KeyguardSecurityView { 44dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private static final boolean DEBUG = KeyguardHostView.DEBUG; 45dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private static final String TAG = "SecuritySelectorView"; 46dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private static final String ASSIST_ICON_METADATA_NAME = 47dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller "com.android.systemui.action_assist_icon"; 4847df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller private static final int EMERGENCY_CALL_TIMEOUT = 10000; // screen timeout after starting e.d. 4947df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller static final String ACTION_EMERGENCY_DIAL = "com.android.phone.EmergencyDialer.DIAL"; 5047df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller 51dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private KeyguardSecurityCallback mCallback; 52dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private GlowPadView mGlowPadView; 53dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private Button mEmergencyCallButton; 54dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private ObjectAnimator mAnim; 55dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private boolean mCameraDisabled; 56dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private boolean mSearchDisabled; 57dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private LockPatternUtils mLockPatternUtils; 58dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 59dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller OnTriggerListener mOnTriggerListener = new OnTriggerListener() { 60dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 61dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void onTrigger(View v, int target) { 62dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller final int resId = mGlowPadView.getResourceIdForTarget(target); 63dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller switch (resId) { 64dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller case com.android.internal.R.drawable.ic_action_assist_generic: 65dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller Intent assistIntent = 66dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE)) 67dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller .getAssistIntent(mContext, UserHandle.USER_CURRENT); 68dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller if (assistIntent != null) { 695f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller launchActivity(assistIntent, false); 70dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } else { 71dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller Log.w(TAG, "Failed to get intent for assist activity"); 72dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 73dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mCallback.userActivity(0); 74dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller break; 75dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 76dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller case com.android.internal.R.drawable.ic_lockscreen_camera: 775f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller launchCamera(); 78dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mCallback.userActivity(0); 79dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller break; 80dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 81dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller case com.android.internal.R.drawable.ic_lockscreen_unlock_phantom: 82dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller case com.android.internal.R.drawable.ic_lockscreen_unlock: 83dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mCallback.dismiss(false); 84dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller break; 85dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 86dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 87dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 88dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void onReleased(View v, int handle) { 89dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller doTransition(mEmergencyCallButton, 1.0f); 90dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 91dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 92dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void onGrabbed(View v, int handle) { 93dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller doTransition(mEmergencyCallButton, 0.0f); 94dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 95dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 96dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void onGrabbedStateChange(View v, int handle) { 97dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 98dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 99dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 100dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void onFinishFinalAnimation() { 101dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 102dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 103dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 104dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller }; 105dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 10647df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller private void updateEmergencyCallButton(State simState, int phoneState) { 10747df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller if (mEmergencyCallButton != null) { 10847df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller boolean en = mLockPatternUtils.isEmergencyCallCapable() 10947df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller || (phoneState == TelephonyManager.CALL_STATE_OFFHOOK); // voice call in progress 11047df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller if (en && KeyguardUpdateMonitor.isSimLocked(simState)) { 11147df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller // Some countries can't handle emergency calls while SIM is locked. 11247df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller en = mLockPatternUtils.isEmergencyCallEnabledWhileSimLocked(); 11347df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller } 11447df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton, phoneState, en); 11547df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller } 11647df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller } 117dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 11847df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() { 119dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 120dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 121dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void onDevicePolicyManagerStateChanged() { 122dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller updateTargets(); 123dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 124dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 125dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 12647df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller public void onSimStateChanged(State simState) { 12747df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller int phoneState = KeyguardUpdateMonitor.getInstance(mContext).getPhoneState(); 12847df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller updateEmergencyCallButton(simState, phoneState); 129dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller updateTargets(); 130dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 131dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 132dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller void onPhoneStateChanged(int phoneState) { 13347df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller State simState = KeyguardUpdateMonitor.getInstance(mContext).getSimState(); 13447df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller updateEmergencyCallButton(simState, phoneState); 135dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller }; 136dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller }; 137dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 138dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public KeyguardSelectorView(Context context) { 139dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller this(context, null); 140dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 141dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 1425f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller protected void launchCamera() { 1435f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller if (mLockPatternUtils.isSecure()) { 1445f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller // Launch the secure version of the camera 1455f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller launchActivity(new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE), true); 1465f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller } else { 1475f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller // Launch the normal camera 1485f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller launchActivity(new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA), false); 1495f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller } 1505f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller } 1515f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller 152dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public KeyguardSelectorView(Context context, AttributeSet attrs) { 153dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller super(context, attrs); 154dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mLockPatternUtils = new LockPatternUtils(getContext()); 155dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 156dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 157dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 158dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller protected void onFinishInflate() { 159dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller super.onFinishInflate(); 160dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mGlowPadView = (GlowPadView) findViewById(R.id.glow_pad_view); 161dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mGlowPadView.setOnTriggerListener(mOnTriggerListener); 162dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mEmergencyCallButton = (Button) findViewById(R.id.emergency_call_button); 16347df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller mEmergencyCallButton.setOnClickListener(new OnClickListener() { 16447df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller public void onClick(View v) { 16547df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller takeEmergencyCallAction(); 16647df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller } 16747df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller }); 168dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller updateTargets(); 169dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 170dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 17147df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller /** 17247df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller * Shows the emergency dialer or returns the user to the existing call. 17347df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller */ 17447df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller public void takeEmergencyCallAction() { 17547df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller mCallback.userActivity(EMERGENCY_CALL_TIMEOUT); 17647df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller if (TelephonyManager.getDefault().getCallState() 17747df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller == TelephonyManager.CALL_STATE_OFFHOOK) { 17847df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller mLockPatternUtils.resumeCall(); 17947df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller } else { 18047df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller Intent intent = new Intent(ACTION_EMERGENCY_DIAL); 18147df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 18247df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 18347df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller getContext().startActivity(intent); 18447df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller } 18547df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller } 18647df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller 187dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public boolean isTargetPresent(int resId) { 188dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller return mGlowPadView.getTargetPosition(resId) != -1; 189dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 190dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 191dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private void updateTargets() { 192dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller boolean disabledByAdmin = mLockPatternUtils.getDevicePolicyManager() 193dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller .getCameraDisabled(null); 194dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller final KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(getContext()); 195dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller boolean disabledBySimState = monitor.isSimLocked(); 196dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller boolean cameraTargetPresent = 197dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller isTargetPresent(com.android.internal.R.drawable.ic_lockscreen_camera); 198dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller boolean searchTargetPresent = 199dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller isTargetPresent(com.android.internal.R.drawable.ic_action_assist_generic); 200dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 201dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller if (disabledByAdmin) { 202dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller Log.v(TAG, "Camera disabled by Device Policy"); 203dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } else if (disabledBySimState) { 204dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller Log.v(TAG, "Camera disabled by Sim State"); 205dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 206dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller boolean searchActionAvailable = 207dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE)) 208dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller .getAssistIntent(mContext, UserHandle.USER_CURRENT) != null; 209dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mCameraDisabled = disabledByAdmin || disabledBySimState || !cameraTargetPresent; 210dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mSearchDisabled = disabledBySimState || !searchActionAvailable || !searchTargetPresent; 211dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller updateResources(); 212dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 213dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 214dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void updateResources() { 215dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller // Update the search icon with drawable from the search .apk 216dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller if (!mSearchDisabled) { 217dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE)) 218dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller .getAssistIntent(mContext, UserHandle.USER_CURRENT); 219dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller if (intent != null) { 220dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller // XXX Hack. We need to substitute the icon here but haven't formalized 221dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller // the public API. The "_google" metadata will be going away, so 222dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller // DON'T USE IT! 223dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller ComponentName component = intent.getComponent(); 224dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller boolean replaced = mGlowPadView.replaceTargetDrawablesIfPresent(component, 225dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller ASSIST_ICON_METADATA_NAME + "_google", 226dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller com.android.internal.R.drawable.ic_action_assist_generic); 227dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 228dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller if (!replaced && !mGlowPadView.replaceTargetDrawablesIfPresent(component, 229dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller ASSIST_ICON_METADATA_NAME, 230dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller com.android.internal.R.drawable.ic_action_assist_generic)) { 231dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller Slog.w(TAG, "Couldn't grab icon from package " + component); 232dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 233dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 234dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 235dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 236dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mGlowPadView.setEnableTarget(com.android.internal.R.drawable 237dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller .ic_lockscreen_camera, !mCameraDisabled); 238dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mGlowPadView.setEnableTarget(com.android.internal.R.drawable 239dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller .ic_action_assist_generic, !mSearchDisabled); 240dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 241dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 242dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller void doTransition(Object v, float to) { 243dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller if (mAnim != null) { 244dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mAnim.cancel(); 245dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 246dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mAnim = ObjectAnimator.ofFloat(mEmergencyCallButton, "alpha", to); 247dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mAnim.start(); 248dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 249dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 250dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void setKeyguardCallback(KeyguardSecurityCallback callback) { 251dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mCallback = callback; 252dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 253dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 254dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void setLockPatternUtils(LockPatternUtils utils) { 255dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mLockPatternUtils = utils; 256dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 257dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 258dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller /** 259dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * Launches the said intent for the current foreground user. 260dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * @param intent 2615f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller * @param showsWhileLocked true if the activity can be run on top of keyguard. 2625f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller * See {@link WindowManager#FLAG_SHOW_WHEN_LOCKED} 263dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller */ 2645f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller private void launchActivity(final Intent intent, boolean showsWhileLocked) { 265dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller intent.setFlags( 266dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller Intent.FLAG_ACTIVITY_NEW_TASK 267dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller | Intent.FLAG_ACTIVITY_SINGLE_TOP 268dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller | Intent.FLAG_ACTIVITY_CLEAR_TOP); 2695f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller boolean isSecure = mLockPatternUtils.isSecure(); 2705f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller if (!isSecure || showsWhileLocked) { 2715f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller if (!isSecure) try { 2725f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller ActivityManagerNative.getDefault().dismissKeyguardOnNextActivity(); 2735f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller } catch (RemoteException e) { 2745f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller Log.w(TAG, "can't dismiss keyguard on launch"); 2755f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller } 2765f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller try { 2775f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller mContext.startActivityAsUser(intent, new UserHandle(UserHandle.USER_CURRENT)); 2785f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller } catch (ActivityNotFoundException e) { 2795f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller Log.w(TAG, "Activity not found for intent + " + intent.getAction()); 2805f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller } 2815f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller } else { 2825f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller // Create a runnable to start the activity and ask the user to enter their 2835f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller // credentials. 2845f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller mCallback.setOnDismissRunnable(new Runnable() { 2855f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller @Override 2865f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller public void run() { 2875f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller mContext.startActivityAsUser(intent, new UserHandle(UserHandle.USER_CURRENT)); 2885f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller } 2895f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller }); 2905f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller mCallback.dismiss(false); 291dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 292dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 293dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 294dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 295dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void reset() { 296dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mGlowPadView.reset(false); 297dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 298dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 299dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 300dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public boolean needsInput() { 301dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller return false; 302dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 303dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 304dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 305dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void onPause() { 306dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller KeyguardUpdateMonitor.getInstance(getContext()).removeCallback(mInfoCallback); 307dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 308dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 309dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 310dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void onResume() { 311dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller KeyguardUpdateMonitor.getInstance(getContext()).registerCallback(mInfoCallback); 312dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 313dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 314dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 315dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public KeyguardSecurityCallback getCallback() { 316dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller return mCallback; 317dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 318dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 319dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller} 320