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 */
165ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerpackage com.android.keyguard;
17dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
18dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.animation.ObjectAnimator;
19d54281061c1d610fde54cbc4e7408b73a82e6378Jim Millerimport android.app.ActivityManager;
2042c3e02c52fb487676251b297461f6ff7beff3efSandeep Siddharthaimport android.app.PendingIntent;
21dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.app.SearchManager;
2248b9b0d068844af9eb37c215484831c4d6b831b0Jim Millerimport android.app.admin.DevicePolicyManager;
23dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.content.ComponentName;
24dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.content.Context;
25dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.content.Intent;
26efbfa685b678c010342f28ebed1b3b70efae201cChris Wrenimport android.graphics.drawable.Drawable;
2742c3e02c52fb487676251b297461f6ff7beff3efSandeep Siddharthaimport android.os.Bundle;
28f4d922b2d9c2011bcdc0543b5cdf2dd53ca04b25Sandeep Siddharthaimport android.os.PowerManager;
29dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.os.UserHandle;
30fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlockimport android.provider.Settings;
31f4d922b2d9c2011bcdc0543b5cdf2dd53ca04b25Sandeep Siddharthaimport android.telephony.TelephonyManager;
32dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.util.AttributeSet;
33dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.util.Log;
34dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.util.Slog;
35dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.view.View;
36dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.widget.LinearLayout;
37dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
3847df44aad773fb2a46d4c07e20278c7d8c0b16beJim Millerimport com.android.internal.telephony.IccCardConstants.State;
39dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.widget.LockPatternUtils;
40dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.widget.multiwaveview.GlowPadView;
41dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener;
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";
48d54281061c1d610fde54cbc4e7408b73a82e6378Jim Miller
49dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private KeyguardSecurityCallback mCallback;
50dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private GlowPadView mGlowPadView;
51dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private ObjectAnimator mAnim;
52109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller    private View mFadeView;
53efbfa685b678c010342f28ebed1b3b70efae201cChris Wren    private boolean mIsBouncing;
54dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private boolean mCameraDisabled;
55dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private boolean mSearchDisabled;
56dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private LockPatternUtils mLockPatternUtils;
57efbfa685b678c010342f28ebed1b3b70efae201cChris Wren    private SecurityMessageDisplay mSecurityMessageDisplay;
58efbfa685b678c010342f28ebed1b3b70efae201cChris Wren    private Drawable mBouncerFrame;
59dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
60dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    OnTriggerListener mOnTriggerListener = new OnTriggerListener() {
61dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
62dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public void onTrigger(View v, int target) {
63dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            final int resId = mGlowPadView.getResourceIdForTarget(target);
6442c3e02c52fb487676251b297461f6ff7beff3efSandeep Siddhartha
65dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            switch (resId) {
665ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                case R.drawable.ic_action_assist_generic:
67dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    Intent assistIntent =
68dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                            ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
69f9c5e0fe837a3090820da502ecaabc5accc00aceDianne Hackborn                            .getAssistIntent(mContext, true, UserHandle.USER_CURRENT);
70dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    if (assistIntent != null) {
7157f928fc4afc02d2fe45523efea687eee7f86c02John Spurlock                        mActivityLauncher.launchActivity(assistIntent, false, true, null, null);
72dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    } else {
73dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                        Log.w(TAG, "Failed to get intent for assist activity");
74dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    }
75dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    mCallback.userActivity(0);
76dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    break;
77dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
785ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                case R.drawable.ic_lockscreen_camera:
7957f928fc4afc02d2fe45523efea687eee7f86c02John Spurlock                    mActivityLauncher.launchCamera(null, null);
80dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    mCallback.userActivity(0);
81dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    break;
82dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
835ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                case R.drawable.ic_lockscreen_unlock_phantom:
845ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                case R.drawable.ic_lockscreen_unlock:
853dc524bc31a1578693ca958ef442dfa092b7aa7fJeff Brown                    mCallback.userActivity(0);
86dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    mCallback.dismiss(false);
87dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                break;
88dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            }
89dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
90dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
91dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public void onReleased(View v, int handle) {
92efbfa685b678c010342f28ebed1b3b70efae201cChris Wren            if (!mIsBouncing) {
93efbfa685b678c010342f28ebed1b3b70efae201cChris Wren                doTransition(mFadeView, 1.0f);
94efbfa685b678c010342f28ebed1b3b70efae201cChris Wren            }
95dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
96dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
97dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public void onGrabbed(View v, int handle) {
983dc524bc31a1578693ca958ef442dfa092b7aa7fJeff Brown            mCallback.userActivity(0);
99109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller            doTransition(mFadeView, 0.0f);
100dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
101dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
102dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public void onGrabbedStateChange(View v, int handle) {
103dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
104dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
105dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
106dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public void onFinishFinalAnimation() {
107dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
108dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
109dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
110dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    };
111dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
112f4d922b2d9c2011bcdc0543b5cdf2dd53ca04b25Sandeep Siddhartha    KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() {
113dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
114dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        @Override
115dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public void onDevicePolicyManagerStateChanged() {
116dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            updateTargets();
117dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
118dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
119dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        @Override
12047df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller        public void onSimStateChanged(State simState) {
121dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            updateTargets();
122dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
123dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    };
124dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
125dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock    private final KeyguardActivityLauncher mActivityLauncher = new KeyguardActivityLauncher() {
126dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
127dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        @Override
128dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        KeyguardSecurityCallback getCallback() {
129dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock            return mCallback;
130ee82f8fa2d47fc1dbfc29582ae348b3c45ff8fe0Jim Miller        }
131ee82f8fa2d47fc1dbfc29582ae348b3c45ff8fe0Jim Miller
132dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        @Override
133dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        LockPatternUtils getLockPatternUtils() {
134dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock            return mLockPatternUtils;
1355f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller        }
136dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock
137dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        @Override
138dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        Context getContext() {
139dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock            return mContext;
140dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        }};
141dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock
142dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock    public KeyguardSelectorView(Context context) {
143dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        this(context, null);
1445f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller    }
1455f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller
146dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public KeyguardSelectorView(Context context, AttributeSet attrs) {
147dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        super(context, attrs);
148dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mLockPatternUtils = new LockPatternUtils(getContext());
149dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
150dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
151dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
152dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    protected void onFinishInflate() {
153dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        super.onFinishInflate();
154dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mGlowPadView = (GlowPadView) findViewById(R.id.glow_pad_view);
155dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mGlowPadView.setOnTriggerListener(mOnTriggerListener);
156dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        updateTargets();
157efbfa685b678c010342f28ebed1b3b70efae201cChris Wren
158efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        mSecurityMessageDisplay = new KeyguardMessageArea.Helper(this);
159efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        View bouncerFrameView = findViewById(R.id.keyguard_selector_view_frame);
160efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        mBouncerFrame = bouncerFrameView.getBackground();
161dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
162dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
1630ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller    public void setCarrierArea(View carrierArea) {
1640ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller        mFadeView = carrierArea;
1650ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller    }
1660ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller
167dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public boolean isTargetPresent(int resId) {
168dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        return mGlowPadView.getTargetPosition(resId) != -1;
169dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
170dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
1716fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen    @Override
1726fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen    public void showUsabilityHint() {
1730a8d32673b3d34153c287916f0ca8d4439f3087eAdam Cohen        mGlowPadView.ping();
1740a8d32673b3d34153c287916f0ca8d4439f3087eAdam Cohen    }
1750a8d32673b3d34153c287916f0ca8d4439f3087eAdam Cohen
176dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private void updateTargets() {
177599dd7ce9adf8ca067cefb0b191a5ac20ec35a79Amith Yamasani        int currentUserHandle = mLockPatternUtils.getCurrentUser();
17848b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller        DevicePolicyManager dpm = mLockPatternUtils.getDevicePolicyManager();
17948b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller        int disabledFeatures = dpm.getKeyguardDisabledFeatures(null, currentUserHandle);
18048b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller        boolean secureCameraDisabled = mLockPatternUtils.isSecure()
18148b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller                && (disabledFeatures & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA) != 0;
18248b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller        boolean cameraDisabledByAdmin = dpm.getCameraDisabled(null, currentUserHandle)
18348b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller                || secureCameraDisabled;
184dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        final KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(getContext());
185dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        boolean disabledBySimState = monitor.isSimLocked();
186dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        boolean cameraTargetPresent =
1875ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller            isTargetPresent(R.drawable.ic_lockscreen_camera);
188dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        boolean searchTargetPresent =
1895ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller            isTargetPresent(R.drawable.ic_action_assist_generic);
190dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
19148b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller        if (cameraDisabledByAdmin) {
192dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            Log.v(TAG, "Camera disabled by Device Policy");
193dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        } else if (disabledBySimState) {
194dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            Log.v(TAG, "Camera disabled by Sim State");
195dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
196fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock        boolean currentUserSetup = 0 != Settings.Secure.getIntForUser(
197fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock                mContext.getContentResolver(),
198fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock                Settings.Secure.USER_SETUP_COMPLETE,
199fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock                0 /*default */,
200fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock                currentUserHandle);
201dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        boolean searchActionAvailable =
202dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
203f9c5e0fe837a3090820da502ecaabc5accc00aceDianne Hackborn                .getAssistIntent(mContext, false, UserHandle.USER_CURRENT) != null;
204fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock        mCameraDisabled = cameraDisabledByAdmin || disabledBySimState || !cameraTargetPresent
205fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock                || !currentUserSetup;
206fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock        mSearchDisabled = disabledBySimState || !searchActionAvailable || !searchTargetPresent
207fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock                || !currentUserSetup;
208dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        updateResources();
209dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
210dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
211dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void updateResources() {
212dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        // Update the search icon with drawable from the search .apk
213dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        if (!mSearchDisabled) {
214dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
215f9c5e0fe837a3090820da502ecaabc5accc00aceDianne Hackborn                    .getAssistIntent(mContext, false, UserHandle.USER_CURRENT);
216dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            if (intent != null) {
217dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                // XXX Hack. We need to substitute the icon here but haven't formalized
218dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                // the public API. The "_google" metadata will be going away, so
219dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                // DON'T USE IT!
220dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                ComponentName component = intent.getComponent();
221dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                boolean replaced = mGlowPadView.replaceTargetDrawablesIfPresent(component,
2225ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                        ASSIST_ICON_METADATA_NAME + "_google", R.drawable.ic_action_assist_generic);
223dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
224dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                if (!replaced && !mGlowPadView.replaceTargetDrawablesIfPresent(component,
2255ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller                            ASSIST_ICON_METADATA_NAME, R.drawable.ic_action_assist_generic)) {
226dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                        Slog.w(TAG, "Couldn't grab icon from package " + component);
227dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                }
228dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            }
229dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
230dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
2315ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller        mGlowPadView.setEnableTarget(R.drawable.ic_lockscreen_camera, !mCameraDisabled);
2325ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller        mGlowPadView.setEnableTarget(R.drawable.ic_action_assist_generic, !mSearchDisabled);
233dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
234dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
235109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller    void doTransition(View view, float to) {
236dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        if (mAnim != null) {
237dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            mAnim.cancel();
238dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
239109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller        mAnim = ObjectAnimator.ofFloat(view, "alpha", to);
240dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mAnim.start();
241dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
242dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
243dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void setKeyguardCallback(KeyguardSecurityCallback callback) {
244dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mCallback = callback;
245dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
246dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
247dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void setLockPatternUtils(LockPatternUtils utils) {
248dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mLockPatternUtils = utils;
249dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
250dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
251dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
252dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void reset() {
253dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mGlowPadView.reset(false);
254dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
255dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
256dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
257dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public boolean needsInput() {
258dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        return false;
259dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
260dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
261dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
262dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void onPause() {
263f4d922b2d9c2011bcdc0543b5cdf2dd53ca04b25Sandeep Siddhartha        KeyguardUpdateMonitor.getInstance(getContext()).removeCallback(mUpdateCallback);
264dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
265dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
266dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
267a042ac90640c0c3fd3c5349083b86bbfd6319b64Chris Wren    public void onResume(int reason) {
268f4d922b2d9c2011bcdc0543b5cdf2dd53ca04b25Sandeep Siddhartha        KeyguardUpdateMonitor.getInstance(getContext()).registerCallback(mUpdateCallback);
269dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
270dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
271dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
272dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public KeyguardSecurityCallback getCallback() {
273dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        return mCallback;
274dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
275c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren
276c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren    @Override
277c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren    public void showBouncer(int duration) {
278efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        mIsBouncing = true;
279efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        KeyguardSecurityViewHelper.
280efbfa685b678c010342f28ebed1b3b70efae201cChris Wren                showBouncer(mSecurityMessageDisplay, mFadeView, mBouncerFrame, duration);
281c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren    }
282c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren
283c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren    @Override
284c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren    public void hideBouncer(int duration) {
285efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        mIsBouncing = false;
286efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        KeyguardSecurityViewHelper.
287efbfa685b678c010342f28ebed1b3b70efae201cChris Wren                hideBouncer(mSecurityMessageDisplay, mFadeView, mBouncerFrame, duration);
288c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren    }
289dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller}
290