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.SearchManager;
2048b9b0d068844af9eb37c215484831c4d6b831b0Jim Millerimport android.app.admin.DevicePolicyManager;
21dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.content.ComponentName;
22dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.content.Context;
23dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.content.Intent;
24efbfa685b678c010342f28ebed1b3b70efae201cChris Wrenimport android.graphics.drawable.Drawable;
25dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.os.UserHandle;
26fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlockimport android.provider.Settings;
27dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.util.AttributeSet;
28dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.util.Log;
29dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.util.Slog;
30dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.view.View;
31dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.widget.LinearLayout;
32dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
3347df44aad773fb2a46d4c07e20278c7d8c0b16beJim Millerimport com.android.internal.telephony.IccCardConstants.State;
34dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.widget.LockPatternUtils;
35dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.widget.multiwaveview.GlowPadView;
36dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener;
37dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.R;
38dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
39dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerpublic class KeyguardSelectorView extends LinearLayout implements KeyguardSecurityView {
40dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private static final boolean DEBUG = KeyguardHostView.DEBUG;
41dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private static final String TAG = "SecuritySelectorView";
42dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private static final String ASSIST_ICON_METADATA_NAME =
43dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        "com.android.systemui.action_assist_icon";
4447df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller
45dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private KeyguardSecurityCallback mCallback;
46dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private GlowPadView mGlowPadView;
47dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private ObjectAnimator mAnim;
48109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller    private View mFadeView;
49efbfa685b678c010342f28ebed1b3b70efae201cChris Wren    private boolean mIsBouncing;
50dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private boolean mCameraDisabled;
51dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private boolean mSearchDisabled;
52dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private LockPatternUtils mLockPatternUtils;
53efbfa685b678c010342f28ebed1b3b70efae201cChris Wren    private SecurityMessageDisplay mSecurityMessageDisplay;
54efbfa685b678c010342f28ebed1b3b70efae201cChris Wren    private Drawable mBouncerFrame;
55dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
56dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    OnTriggerListener mOnTriggerListener = new OnTriggerListener() {
57dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
58dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public void onTrigger(View v, int target) {
59dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            final int resId = mGlowPadView.getResourceIdForTarget(target);
60dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            switch (resId) {
61dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                case com.android.internal.R.drawable.ic_action_assist_generic:
62dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    Intent assistIntent =
63dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                            ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
64dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                            .getAssistIntent(mContext, UserHandle.USER_CURRENT);
65dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    if (assistIntent != null) {
6657f928fc4afc02d2fe45523efea687eee7f86c02John Spurlock                        mActivityLauncher.launchActivity(assistIntent, false, true, null, null);
67dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    } else {
68dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                        Log.w(TAG, "Failed to get intent for assist activity");
69dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    }
70dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    mCallback.userActivity(0);
71dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    break;
72dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
73dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                case com.android.internal.R.drawable.ic_lockscreen_camera:
7457f928fc4afc02d2fe45523efea687eee7f86c02John Spurlock                    mActivityLauncher.launchCamera(null, null);
75dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    mCallback.userActivity(0);
76dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    break;
77dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
78dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                case com.android.internal.R.drawable.ic_lockscreen_unlock_phantom:
79dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                case com.android.internal.R.drawable.ic_lockscreen_unlock:
803dc524bc31a1578693ca958ef442dfa092b7aa7fJeff Brown                    mCallback.userActivity(0);
81dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    mCallback.dismiss(false);
82dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                break;
83dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            }
84dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
85dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
86dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public void onReleased(View v, int handle) {
87efbfa685b678c010342f28ebed1b3b70efae201cChris Wren            if (!mIsBouncing) {
88efbfa685b678c010342f28ebed1b3b70efae201cChris Wren                doTransition(mFadeView, 1.0f);
89efbfa685b678c010342f28ebed1b3b70efae201cChris Wren            }
90dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
91dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
92dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public void onGrabbed(View v, int handle) {
933dc524bc31a1578693ca958ef442dfa092b7aa7fJeff Brown            mCallback.userActivity(0);
94109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller            doTransition(mFadeView, 0.0f);
95dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
96dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
97dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public void onGrabbedStateChange(View v, int handle) {
98dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
99dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
100dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
101dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public void onFinishFinalAnimation() {
102dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
103dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
104dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
105dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    };
106dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
10747df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller    KeyguardUpdateMonitorCallback mInfoCallback = new KeyguardUpdateMonitorCallback() {
108dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
109dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        @Override
110dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public void onDevicePolicyManagerStateChanged() {
111dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            updateTargets();
112dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
113dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
114dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        @Override
11547df44aad773fb2a46d4c07e20278c7d8c0b16beJim Miller        public void onSimStateChanged(State simState) {
116dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            updateTargets();
117dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
118dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    };
119dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
120dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock    private final KeyguardActivityLauncher mActivityLauncher = new KeyguardActivityLauncher() {
121dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
122dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        @Override
123dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        KeyguardSecurityCallback getCallback() {
124dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock            return mCallback;
125ee82f8fa2d47fc1dbfc29582ae348b3c45ff8fe0Jim Miller        }
126ee82f8fa2d47fc1dbfc29582ae348b3c45ff8fe0Jim Miller
127dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        @Override
128dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        LockPatternUtils getLockPatternUtils() {
129dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock            return mLockPatternUtils;
1305f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller        }
131dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock
132dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        @Override
133dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        Context getContext() {
134dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock            return mContext;
135dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        }};
136dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock
137dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock    public KeyguardSelectorView(Context context) {
138dcc9681b0d4f52e1f441ef2abdda3eb949cc0c4bJohn Spurlock        this(context, null);
1395f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller    }
1405f75aa15d7c1c5ea1c1eecd95bf2bb0920173eb2Jim Miller
141dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public KeyguardSelectorView(Context context, AttributeSet attrs) {
142dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        super(context, attrs);
143dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mLockPatternUtils = new LockPatternUtils(getContext());
144dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
145dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
146dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
147dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    protected void onFinishInflate() {
148dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        super.onFinishInflate();
149dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mGlowPadView = (GlowPadView) findViewById(R.id.glow_pad_view);
150dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mGlowPadView.setOnTriggerListener(mOnTriggerListener);
151dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        updateTargets();
152efbfa685b678c010342f28ebed1b3b70efae201cChris Wren
153efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        mSecurityMessageDisplay = new KeyguardMessageArea.Helper(this);
154efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        View bouncerFrameView = findViewById(R.id.keyguard_selector_view_frame);
155efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        mBouncerFrame = bouncerFrameView.getBackground();
156dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
157dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
1580ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller    public void setCarrierArea(View carrierArea) {
1590ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller        mFadeView = carrierArea;
1600ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller    }
1610ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller
162dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public boolean isTargetPresent(int resId) {
163dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        return mGlowPadView.getTargetPosition(resId) != -1;
164dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
165dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
1666fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen    @Override
1676fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen    public void showUsabilityHint() {
1680a8d32673b3d34153c287916f0ca8d4439f3087eAdam Cohen        mGlowPadView.ping();
1690a8d32673b3d34153c287916f0ca8d4439f3087eAdam Cohen    }
1700a8d32673b3d34153c287916f0ca8d4439f3087eAdam Cohen
171dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private void updateTargets() {
172599dd7ce9adf8ca067cefb0b191a5ac20ec35a79Amith Yamasani        int currentUserHandle = mLockPatternUtils.getCurrentUser();
17348b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller        DevicePolicyManager dpm = mLockPatternUtils.getDevicePolicyManager();
17448b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller        int disabledFeatures = dpm.getKeyguardDisabledFeatures(null, currentUserHandle);
17548b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller        boolean secureCameraDisabled = mLockPatternUtils.isSecure()
17648b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller                && (disabledFeatures & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA) != 0;
17748b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller        boolean cameraDisabledByAdmin = dpm.getCameraDisabled(null, currentUserHandle)
17848b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller                || secureCameraDisabled;
179dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        final KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(getContext());
180dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        boolean disabledBySimState = monitor.isSimLocked();
181dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        boolean cameraTargetPresent =
182dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            isTargetPresent(com.android.internal.R.drawable.ic_lockscreen_camera);
183dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        boolean searchTargetPresent =
184dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            isTargetPresent(com.android.internal.R.drawable.ic_action_assist_generic);
185dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
18648b9b0d068844af9eb37c215484831c4d6b831b0Jim Miller        if (cameraDisabledByAdmin) {
187dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            Log.v(TAG, "Camera disabled by Device Policy");
188dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        } else if (disabledBySimState) {
189dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            Log.v(TAG, "Camera disabled by Sim State");
190dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
191fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock        boolean currentUserSetup = 0 != Settings.Secure.getIntForUser(
192fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock                mContext.getContentResolver(),
193fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock                Settings.Secure.USER_SETUP_COMPLETE,
194fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock                0 /*default */,
195fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock                currentUserHandle);
196dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        boolean searchActionAvailable =
197dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
198dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                .getAssistIntent(mContext, UserHandle.USER_CURRENT) != null;
199fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock        mCameraDisabled = cameraDisabledByAdmin || disabledBySimState || !cameraTargetPresent
200fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock                || !currentUserSetup;
201fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock        mSearchDisabled = disabledBySimState || !searchActionAvailable || !searchTargetPresent
202fafdb6f9ca2ded293ed45e9436f04bbc03e75072John Spurlock                || !currentUserSetup;
203dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        updateResources();
204dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
205dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
206dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void updateResources() {
207dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        // Update the search icon with drawable from the search .apk
208dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        if (!mSearchDisabled) {
209dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
210dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    .getAssistIntent(mContext, UserHandle.USER_CURRENT);
211dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            if (intent != null) {
212dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                // XXX Hack. We need to substitute the icon here but haven't formalized
213dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                // the public API. The "_google" metadata will be going away, so
214dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                // DON'T USE IT!
215dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                ComponentName component = intent.getComponent();
216dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                boolean replaced = mGlowPadView.replaceTargetDrawablesIfPresent(component,
217dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                        ASSIST_ICON_METADATA_NAME + "_google",
218dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                        com.android.internal.R.drawable.ic_action_assist_generic);
219dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
220dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                if (!replaced && !mGlowPadView.replaceTargetDrawablesIfPresent(component,
221dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                            ASSIST_ICON_METADATA_NAME,
222dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                            com.android.internal.R.drawable.ic_action_assist_generic)) {
223dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                        Slog.w(TAG, "Couldn't grab icon from package " + component);
224dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                }
225dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            }
226dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
227dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
228dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mGlowPadView.setEnableTarget(com.android.internal.R.drawable
229dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                .ic_lockscreen_camera, !mCameraDisabled);
230dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mGlowPadView.setEnableTarget(com.android.internal.R.drawable
231dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                .ic_action_assist_generic, !mSearchDisabled);
232dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
233dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
234109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller    void doTransition(View view, float to) {
235dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        if (mAnim != null) {
236dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            mAnim.cancel();
237dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
238109f1fd80c90409c0d7f21d49989641dfdf2ad1bJim Miller        mAnim = ObjectAnimator.ofFloat(view, "alpha", to);
239dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mAnim.start();
240dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
241dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
242dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void setKeyguardCallback(KeyguardSecurityCallback callback) {
243dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mCallback = callback;
244dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
245dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
246dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void setLockPatternUtils(LockPatternUtils utils) {
247dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mLockPatternUtils = utils;
248dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
249dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
250dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
251dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void reset() {
252dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mGlowPadView.reset(false);
253dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
254dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
255dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
256dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public boolean needsInput() {
257dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        return false;
258dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
259dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
260dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
261dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void onPause() {
262dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        KeyguardUpdateMonitor.getInstance(getContext()).removeCallback(mInfoCallback);
263dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
264dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
265dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
266a042ac90640c0c3fd3c5349083b86bbfd6319b64Chris Wren    public void onResume(int reason) {
267dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        KeyguardUpdateMonitor.getInstance(getContext()).registerCallback(mInfoCallback);
268dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
269dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
270dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
271dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public KeyguardSecurityCallback getCallback() {
272dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        return mCallback;
273dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
274c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren
275c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren    @Override
276c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren    public void showBouncer(int duration) {
277efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        mIsBouncing = true;
278efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        KeyguardSecurityViewHelper.
279efbfa685b678c010342f28ebed1b3b70efae201cChris Wren                showBouncer(mSecurityMessageDisplay, mFadeView, mBouncerFrame, duration);
280c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren    }
281c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren
282c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren    @Override
283c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren    public void hideBouncer(int duration) {
284efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        mIsBouncing = false;
285efbfa685b678c010342f28ebed1b3b70efae201cChris Wren        KeyguardSecurityViewHelper.
286efbfa685b678c010342f28ebed1b3b70efae201cChris Wren                hideBouncer(mSecurityMessageDisplay, mFadeView, mBouncerFrame, duration);
287c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren    }
288dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller}
289