OSDN Git Service

DO NOT MERGE. Grant MMS Uri permissions as the calling UID.
[android-x86/frameworks-base.git] / packages / Keyguard / src / com / android / keyguard / KeyguardPINView.java
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.android.keyguard;
18
19 import android.animation.Animator;
20 import android.animation.ObjectAnimator;
21 import android.content.Context;
22 import android.util.AttributeSet;
23 import android.view.RenderNode;
24 import android.view.RenderNodeAnimator;
25 import android.view.View;
26 import android.view.ViewGroup;
27 import android.view.animation.AnimationUtils;
28
29 import com.android.settingslib.animation.AppearAnimationUtils;
30 import com.android.settingslib.animation.DisappearAnimationUtils;
31
32 /**
33  * Displays a PIN pad for unlocking.
34  */
35 public class KeyguardPINView extends KeyguardPinBasedInputView {
36
37     private final AppearAnimationUtils mAppearAnimationUtils;
38     private final DisappearAnimationUtils mDisappearAnimationUtils;
39     private final DisappearAnimationUtils mDisappearAnimationUtilsLocked;
40     private ViewGroup mContainer;
41     private ViewGroup mRow0;
42     private ViewGroup mRow1;
43     private ViewGroup mRow2;
44     private ViewGroup mRow3;
45     private View mDivider;
46     private int mDisappearYTranslation;
47     private View[][] mViews;
48     private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
49
50     public KeyguardPINView(Context context) {
51         this(context, null);
52     }
53
54     public KeyguardPINView(Context context, AttributeSet attrs) {
55         super(context, attrs);
56         mAppearAnimationUtils = new AppearAnimationUtils(context);
57         mDisappearAnimationUtils = new DisappearAnimationUtils(context,
58                 125, 0.6f /* translationScale */,
59                 0.45f /* delayScale */, AnimationUtils.loadInterpolator(
60                         mContext, android.R.interpolator.fast_out_linear_in));
61         mDisappearAnimationUtilsLocked = new DisappearAnimationUtils(context,
62                 (long) (125 * KeyguardPatternView.DISAPPEAR_MULTIPLIER_LOCKED),
63                 0.6f /* translationScale */,
64                 0.45f /* delayScale */, AnimationUtils.loadInterpolator(
65                         mContext, android.R.interpolator.fast_out_linear_in));
66         mDisappearYTranslation = getResources().getDimensionPixelSize(
67                 R.dimen.disappear_y_translation);
68         mKeyguardUpdateMonitor = KeyguardUpdateMonitor.getInstance(context);
69     }
70
71     @Override
72     protected void resetState() {
73         super.resetState();
74         mSecurityMessageDisplay.setMessage(R.string.kg_pin_instructions, false);
75     }
76
77     @Override
78     protected int getPasswordTextViewId() {
79         return R.id.pinEntry;
80     }
81
82     @Override
83     protected void onFinishInflate() {
84         super.onFinishInflate();
85
86         mContainer = (ViewGroup) findViewById(R.id.container);
87         mRow0 = (ViewGroup) findViewById(R.id.row0);
88         mRow1 = (ViewGroup) findViewById(R.id.row1);
89         mRow2 = (ViewGroup) findViewById(R.id.row2);
90         mRow3 = (ViewGroup) findViewById(R.id.row3);
91         mDivider = findViewById(R.id.divider);
92         mViews = new View[][]{
93                 new View[]{
94                         mRow0, null, null
95                 },
96                 new View[]{
97                         findViewById(R.id.key1), findViewById(R.id.key2),
98                         findViewById(R.id.key3)
99                 },
100                 new View[]{
101                         findViewById(R.id.key4), findViewById(R.id.key5),
102                         findViewById(R.id.key6)
103                 },
104                 new View[]{
105                         findViewById(R.id.key7), findViewById(R.id.key8),
106                         findViewById(R.id.key9)
107                 },
108                 new View[]{
109                         null, findViewById(R.id.key0), findViewById(R.id.key_enter)
110                 },
111                 new View[]{
112                         null, mEcaView, null
113                 }};
114     }
115
116     @Override
117     public void showUsabilityHint() {
118     }
119
120     @Override
121     public int getWrongPasswordStringId() {
122         return R.string.kg_wrong_pin;
123     }
124
125     @Override
126     public void startAppearAnimation() {
127         enableClipping(false);
128         setAlpha(1f);
129         setTranslationY(mAppearAnimationUtils.getStartTranslation());
130         AppearAnimationUtils.startTranslationYAnimation(this, 0 /* delay */, 500 /* duration */,
131                 0, mAppearAnimationUtils.getInterpolator());
132         mAppearAnimationUtils.startAnimation2d(mViews,
133                 new Runnable() {
134                     @Override
135                     public void run() {
136                         enableClipping(true);
137                     }
138                 });
139     }
140
141     @Override
142     public boolean startDisappearAnimation(final Runnable finishRunnable) {
143         enableClipping(false);
144         setTranslationY(0);
145         AppearAnimationUtils.startTranslationYAnimation(this, 0 /* delay */, 280 /* duration */,
146                 mDisappearYTranslation, mDisappearAnimationUtils.getInterpolator());
147         DisappearAnimationUtils disappearAnimationUtils = mKeyguardUpdateMonitor.isUserUnlocked()
148                 ? mDisappearAnimationUtils
149                 : mDisappearAnimationUtilsLocked;
150         disappearAnimationUtils.startAnimation2d(mViews,
151                 new Runnable() {
152                     @Override
153                     public void run() {
154                         enableClipping(true);
155                         if (finishRunnable != null) {
156                             finishRunnable.run();
157                         }
158                     }
159                 });
160         return true;
161     }
162
163     private void enableClipping(boolean enable) {
164         mContainer.setClipToPadding(enable);
165         mContainer.setClipChildren(enable);
166         mRow1.setClipToPadding(enable);
167         mRow2.setClipToPadding(enable);
168         mRow3.setClipToPadding(enable);
169         setClipChildren(enable);
170     }
171
172     @Override
173     public boolean hasOverlappingRendering() {
174         return false;
175     }
176 }