Merge "Bouncer - New PIN animations"

This commit is contained in:
Matt Pietal
2021-01-22 13:26:55 +00:00
committed by Android (Google) Code Review
16 changed files with 304 additions and 164 deletions

View File

@@ -13,8 +13,13 @@
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
<vector android:height="36sp" android:viewportHeight="36"
android:viewportWidth="36" android:width="36sp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?android:attr/colorAccent" android:pathData="M18,18m-18,0a18,18 0,1 1,36 0a18,18 0,1 1,-36 0"/>
<path android:fillColor="?android:attr/textColorPrimaryInverse" android:pathData="M17.59,13.41L21.17,17H7v2h14.17l-3.59,3.59L19,24l6,-6l-6,-6L17.59,13.41zM26,12v12h2V12H26z"/>
</vector>
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:height="36sp"
android:viewportHeight="36"
android:viewportWidth="36"
android:width="36sp">
<path android:fillColor="?android:attr/colorBackground"
android:pathData="M17.59,13.41L21.17,17H7v2h14.17l-3.59,3.59L19,24l6,-6l-6,-6L17.59,
13.41zM26,12v12h2V12H26z"/>
</vector>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
* Copyright 2021, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-->
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="?android:attr/colorBackground" />
<corners android:radius="10dp" />
</shape>

View File

@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2017 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/pin_divider_color" />
</shape>

View File

@@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2018 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:attr/colorControlHighlight"
android:radius="40dp"/>

View File

@@ -17,15 +17,18 @@
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/digit_text"
style="@style/Widget.TextView.NumPadKey"
style="@style/Widget.TextView.NumPadKey.Digit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<!-- b/172360102: Setting visibility to gone for now, in order to see if there are many
issues with removing the alpha characters. -->
<TextView
android:id="@+id/klondike_text"
style="@style/Widget.TextView.NumPadKey.Klondike"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
/>
</merge>

View File

@@ -24,7 +24,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
androidprv:layout_maxWidth="@dimen/keyguard_security_width"
androidprv:layout_maxHeight="@dimen/keyguard_security_max_height"
android:orientation="vertical"
>
<LinearLayout
@@ -34,37 +33,34 @@
android:orientation="vertical"
android:layout_weight="1"
android:layoutDirection="ltr"
android:layout_marginBottom="8dp"
>
<com.android.keyguard.AlphaOptimizedRelativeLayout
android:id="@+id/row0"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:paddingBottom="16dp"
>
<Space
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
<com.android.keyguard.AlphaOptimizedRelativeLayout
android:id="@+id/row0"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="16dp"
>
<com.android.keyguard.PasswordTextView
android:id="@+id/pinEntry"
android:layout_width="@dimen/keyguard_security_width"
android:layout_height="match_parent"
android:layout_height="@dimen/keyguard_password_height"
style="@style/Widget.TextView.Password"
android:layout_centerHorizontal="true"
android:layout_marginRight="72dp"
androidprv:scaledTextSize="@integer/scaled_password_text_size"
android:contentDescription="@string/keyguard_accessibility_pin_area"
/>
<View
android:id="@+id/divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true"
android:background="@drawable/pin_divider"
/>
</com.android.keyguard.AlphaOptimizedRelativeLayout>
<LinearLayout
android:id="@+id/row1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.android.keyguard.NumPadKey
@@ -95,8 +91,7 @@
<LinearLayout
android:id="@+id/row2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.android.keyguard.NumPadKey
@@ -127,9 +122,8 @@
<LinearLayout
android:id="@+id/row3"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
>
<com.android.keyguard.NumPadKey
android:id="@+id/key7"
@@ -159,18 +153,16 @@
<LinearLayout
android:id="@+id/row4"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.android.keyguard.AlphaOptimizedImageButton
<com.android.keyguard.NumPadButton
android:id="@+id/delete_button"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/ripple_drawable_pin"
android:contentDescription="@string/keyboardview_keycode_delete"
style="@style/Keyguard.ImageButton.NumPadDelete"
style="@style/NumPadKey.Delete"
/>
<com.android.keyguard.NumPadKey
android:id="@+id/key0"
@@ -180,13 +172,12 @@
androidprv:textView="@+id/pinEntry"
androidprv:digit="0"
/>
<com.android.keyguard.AlphaOptimizedImageButton
<com.android.keyguard.NumPadButton
android:id="@+id/key_enter"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
style="@style/Keyguard.ImageButton.NumPadEnter"
android:background="@drawable/ripple_drawable_pin"
style="@style/NumPadKey.Enter"
android:contentDescription="@string/keyboardview_keycode_enter"
/>
</LinearLayout>

View File

@@ -25,9 +25,14 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
androidprv:layout_maxWidth="@dimen/keyguard_security_width"
androidprv:layout_maxHeight="@dimen/keyguard_security_max_height"
android:gravity="center_horizontal">
<Space
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
<ImageView
android:id="@+id/keyguard_sim"
android:layout_width="match_parent"
@@ -37,10 +42,9 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:layout_weight="1"
android:layoutDirection="ltr"
>
<include layout="@layout/keyguard_esim_area"
@@ -52,32 +56,23 @@
<RelativeLayout
android:id="@+id/row0"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:paddingBottom="16dp"
>
<com.android.keyguard.PasswordTextView
android:id="@+id/simPinEntry"
android:layout_width="@dimen/keyguard_security_width"
android:layout_height="match_parent"
android:layout_height="@dimen/keyguard_password_height"
android:gravity="center"
android:layout_centerHorizontal="true"
android:layout_marginRight="72dp"
androidprv:scaledTextSize="@integer/scaled_password_text_size"
android:contentDescription="@string/keyguard_accessibility_sim_pin_area"
/>
<View
android:id="@+id/divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true"
android:background="@drawable/pin_divider"
/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.android.keyguard.NumPadKey
@@ -107,8 +102,7 @@
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.android.keyguard.NumPadKey
@@ -138,9 +132,8 @@
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
>
<com.android.keyguard.NumPadKey
android:id="@+id/key7"
@@ -169,18 +162,16 @@
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.android.keyguard.AlphaOptimizedImageButton
<com.android.keyguard.NumPadButton
android:id="@+id/delete_button"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/ripple_drawable_pin"
android:contentDescription="@string/keyboardview_keycode_delete"
style="@style/Keyguard.ImageButton.NumPadDelete"
style="@style/NumPadKey.Delete"
/>
<com.android.keyguard.NumPadKey
android:id="@+id/key0"
@@ -190,13 +181,12 @@
androidprv:textView="@+id/simPinEntry"
androidprv:digit="0"
/>
<com.android.keyguard.AlphaOptimizedImageButton
<com.android.keyguard.NumPadButton
android:id="@+id/key_enter"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
style="@style/Keyguard.ImageButton.NumPadEnter"
android:background="@drawable/ripple_drawable_pin"
style="@style/NumPadKey.Enter"
android:contentDescription="@string/keyboardview_keycode_enter"
/>
</LinearLayout>

View File

@@ -26,9 +26,14 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
androidprv:layout_maxWidth="@dimen/keyguard_security_width"
androidprv:layout_maxHeight="@dimen/keyguard_security_max_height"
android:gravity="center_horizontal">
<Space
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
<ImageView
android:id="@+id/keyguard_sim"
android:layout_width="match_parent"
@@ -38,7 +43,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:layout_weight="1"
@@ -53,32 +58,23 @@
<RelativeLayout
android:id="@+id/row0"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:paddingBottom="16dp"
>
<com.android.keyguard.PasswordTextView
android:id="@+id/pukEntry"
android:layout_width="@dimen/keyguard_security_width"
android:layout_height="match_parent"
android:layout_height="@dimen/keyguard_password_height"
android:gravity="center"
android:layout_centerHorizontal="true"
android:layout_marginRight="72dp"
androidprv:scaledTextSize="@integer/scaled_password_text_size"
android:contentDescription="@string/keyguard_accessibility_sim_puk_area"
/>
<View
android:id="@+id/divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="true"
android:background="@drawable/pin_divider"
/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.android.keyguard.NumPadKey
@@ -108,8 +104,7 @@
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.android.keyguard.NumPadKey
@@ -139,9 +134,8 @@
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_weight="1"
>
<com.android.keyguard.NumPadKey
android:id="@+id/key7"
@@ -170,18 +164,16 @@
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.android.keyguard.AlphaOptimizedImageButton
<com.android.keyguard.NumPadButton
android:id="@+id/delete_button"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/ripple_drawable_pin"
android:contentDescription="@string/keyboardview_keycode_delete"
style="@style/Keyguard.ImageButton.NumPadDelete"
style="@style/NumPadKey.Delete"
/>
<com.android.keyguard.NumPadKey
android:id="@+id/key0"
@@ -191,13 +183,12 @@
androidprv:textView="@+id/pukEntry"
androidprv:digit="0"
/>
<com.android.keyguard.AlphaOptimizedImageButton
<com.android.keyguard.NumPadButton
android:id="@+id/key_enter"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_weight="1"
style="@style/Keyguard.ImageButton.NumPadEnter"
android:background="@drawable/ripple_drawable_pin"
style="@style/NumPadKey.Enter"
android:contentDescription="@string/keyboardview_keycode_enter"
/>
</LinearLayout>

View File

@@ -40,6 +40,8 @@
<attr name="passwordStyle" format="reference" />
<attr name="numPadKeyStyle" format="reference" />
<declare-styleable name="AnimatableClockView">
<attr name="dozeWeight" format="integer" />
<attr name="lockScreenWeight" format="integer" />

View File

@@ -33,6 +33,9 @@
(includes 2x keyguard_security_view_top_margin) -->
<dimen name="keyguard_security_max_height">450dp</dimen>
<!-- pin/password field max height -->
<dimen name="keyguard_password_height">80dp</dimen>
<!-- Margin around the various security views -->
<dimen name="keyguard_security_view_top_margin">8dp</dimen>
<dimen name="keyguard_security_view_lateral_margin">36dp</dimen>
@@ -81,4 +84,7 @@
<!-- The translation for disappearing security views after having solved them. -->
<dimen name="disappear_y_translation">-32dp</dimen>
<!-- Spacing around each button used for PIN view -->
<dimen name="num_pad_key_margin">2dp</dimen>
</resources>

View File

@@ -30,7 +30,13 @@
<item name="android:paddingLeft">12dp</item>
<item name="android:paddingRight">12dp</item>
</style>
<style name="Widget.TextView.NumPadKey" parent="@android:style/Widget.DeviceDefault.TextView">
<style name="NumPadKey" parent="Theme.SystemUI">
<item name="android:colorControlNormal">?android:attr/colorBackground</item>
<item name="android:colorControlHighlight">?android:attr/colorAccent</item>
<item name="android:background">@drawable/num_pad_key_background</item>
</style>
<style name="Widget.TextView.NumPadKey.Digit"
parent="@android:style/Widget.DeviceDefault.TextView">
<item name="android:singleLine">true</item>
<item name="android:gravity">center_horizontal|center_vertical</item>
<item name="android:background">@null</item>
@@ -38,26 +44,25 @@
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
<item name="android:paddingBottom">-16dp</item>
<item name="android:colorControlHighlight">?android:attr/textColorPrimary</item>
</style>
<style name="Widget.TextView.Password" parent="@android:style/Widget.TextView">
<item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
<item name="android:gravity">center</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
</style>
<style name="Keyguard.ImageButton.NumPadDelete" parent="@android:style/Widget.DeviceDefault.ImageButton">
<style name="NumPadKey.Delete">
<item name="android:src">@drawable/ic_backspace_black_24dp</item>
<item name="android:paddingBottom">11sp</item>
<item name="android:tint">?android:attr/textColorSecondary</item>
<item name="android:tintMode">src_in</item>
<item name="android:src">@drawable/ic_backspace_black_24dp</item>
</style>
<style name="Keyguard.ImageButton.NumPadEnter" parent="@android:style/Widget.DeviceDefault.ImageButton">
<item name="android:src">@drawable/ic_keyboard_tab_36dp</item>
<item name="android:paddingBottom">11sp</item>
<style name="NumPadKey.Enter">
<item name="android:colorControlNormal">?android:attr/textColorSecondary</item>
<item name="android:src">@drawable/ic_keyboard_tab_36dp</item>
</style>
<style name="Widget.TextView.NumPadKey.Klondike">
<style name="Widget.TextView.NumPadKey.Klondike"
parent="@android:style/Widget.DeviceDefault.TextView">
<item name="android:textSize">12sp</item>
<item name="android:background">@null</item>
<item name="android:fontFamily">@*android:string/config_bodyFontFamily</item>
<item name="android:textColor">?android:attr/textColorSecondary</item>
<item name="android:paddingBottom">0dp</item>

View File

@@ -319,6 +319,7 @@
<item name="android:colorControlHighlight">@*android:color/primary_text_material_dark</item>
<item name="*android:lockPatternStyle">@style/LockPatternStyle</item>
<item name="passwordStyle">@style/PasswordTheme</item>
<item name="numPadKeyStyle">@style/NumPadKey</item>
<item name="backgroundProtectedStyle">@style/BackgroundProtectedStyle</item>
<item name="android:homeAsUpIndicator">@drawable/ic_arrow_back</item>
<item name="shadowRadius">@dimen/keyguard_shadow_radius</item>

View File

@@ -27,10 +27,8 @@ import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.ContextThemeWrapper;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ImageButton;
import com.android.internal.widget.LockscreenCredential;
import com.android.settingslib.Utils;
@@ -42,10 +40,9 @@ import com.android.systemui.R;
public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView {
protected PasswordTextView mPasswordEntry;
private View mOkButton;
private ImageButton mDeleteButton;
private NumPadButton mOkButton;
private NumPadButton mDeleteButton;
private NumPadKey[] mButtons = new NumPadKey[10];
private View mDivider;
public KeyguardPinBasedInputView(Context context) {
this(context, null);
@@ -152,7 +149,6 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView
mDeleteButton = findViewById(R.id.delete_button);
mDeleteButton.setVisibility(View.VISIBLE);
mDivider = findViewById(R.id.divider);
mButtons[0] = findViewById(R.id.key0);
mButtons[1] = findViewById(R.id.key1);
@@ -181,12 +177,9 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView
int deleteColor = Utils.getColorAttr(getContext(), android.R.attr.textColorSecondary)
.getDefaultColor();
mDeleteButton.setImageTintList(ColorStateList.valueOf(deleteColor));
mDivider.setBackground(getContext().getDrawable(R.drawable.pin_divider));
ContextThemeWrapper themedContext = new ContextThemeWrapper(mContext,
R.style.Widget_TextView_NumPadKey);
mDeleteButton.setBackground(themedContext.getDrawable(R.drawable.ripple_drawable_pin));
mOkButton.setBackground(themedContext.getDrawable(R.drawable.ripple_drawable_pin));
mDeleteButton.reloadColors();
mOkButton.reloadColors();
}
@Override

View File

@@ -0,0 +1,96 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.keyguard;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.GradientDrawable;
import android.view.ContextThemeWrapper;
import android.view.ViewGroup;
import androidx.annotation.StyleRes;
import com.android.internal.graphics.ColorUtils;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
/**
* Provides background color and radius animations for key pad buttons.
*/
class NumPadAnimator {
private ValueAnimator mAnimator;
private GradientDrawable mBackground;
private int mMargin;
private int mNormalColor;
private int mHighlightColor;
private int mStyle;
NumPadAnimator(Context context, final GradientDrawable background, @StyleRes int style) {
mBackground = (GradientDrawable) background.mutate();
mStyle = style;
reloadColors(context);
mMargin = context.getResources().getDimensionPixelSize(R.dimen.num_pad_key_margin);
// Actual values will be updated later, usually during an onLayout() call
mAnimator = ValueAnimator.ofFloat(0f);
mAnimator.setDuration(250);
mAnimator.setInterpolator(Interpolators.LINEAR);
mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
public void onAnimationUpdate(ValueAnimator anim) {
mBackground.setCornerRadius((float) anim.getAnimatedValue());
mBackground.setColor(ColorUtils.blendARGB(mHighlightColor, mNormalColor,
anim.getAnimatedFraction()));
}
});
}
void updateMargin(ViewGroup.MarginLayoutParams lp) {
lp.setMargins(mMargin, mMargin, mMargin, mMargin);
}
void onLayout(int height) {
float startRadius = height / 10f;
float endRadius = height / 2f;
mBackground.setCornerRadius(endRadius);
mAnimator.setFloatValues(startRadius, endRadius);
}
void start() {
mAnimator.cancel();
mAnimator.start();
}
/**
* Reload colors from resources.
**/
void reloadColors(Context context) {
int[] customAttrs = {android.R.attr.colorControlNormal,
android.R.attr.colorControlHighlight};
ContextThemeWrapper ctw = new ContextThemeWrapper(context, mStyle);
TypedArray a = ctw.obtainStyledAttributes(customAttrs);
mNormalColor = a.getColor(0, 0);
mHighlightColor = a.getColor(1, 0);
a.recycle();
mBackground.setColor(mNormalColor);
}
}

View File

@@ -0,0 +1,67 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.keyguard;
import android.content.Context;
import android.graphics.drawable.GradientDrawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewGroup;
/**
* Similar to the {@link NumPadKey}, but displays an image.
*/
public class NumPadButton extends AlphaOptimizedImageButton {
private final NumPadAnimator mAnimator;
public NumPadButton(Context context, AttributeSet attrs) {
super(context, attrs);
mAnimator = new NumPadAnimator(context, (GradientDrawable) getBackground(),
attrs.getStyleAttribute());
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
mAnimator.updateMargin((ViewGroup.MarginLayoutParams) getLayoutParams());
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// Set width/height to the same value to ensure a smooth circle for the bg
setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth());
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
mAnimator.onLayout(b - t);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
mAnimator.start();
return super.onTouchEvent(event);
}
/**
* Reload colors from resources.
**/
public void reloadColors() {
mAnimator.reloadColors(getContext());
}
}

View File

@@ -18,11 +18,10 @@ package com.android.keyguard;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.os.PowerManager;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.view.ContextThemeWrapper;
import android.view.HapticFeedbackConstants;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -48,6 +47,8 @@ public class NumPadKey extends ViewGroup {
private int mTextViewResId;
private PasswordTextView mTextView;
private final NumPadAnimator mAnimator;
private View.OnClickListener mListener = new View.OnClickListener() {
@Override
public void onClick(View thisView) {
@@ -73,7 +74,7 @@ public class NumPadKey extends ViewGroup {
}
public NumPadKey(Context context, AttributeSet attrs) {
this(context, attrs, 0);
this(context, attrs, R.attr.numPadKeyStyle);
}
public NumPadKey(Context context, AttributeSet attrs, int defStyle) {
@@ -84,7 +85,8 @@ public class NumPadKey extends ViewGroup {
super(context, attrs, defStyle);
setFocusable(true);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.NumPadKey);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.NumPadKey, defStyle,
contentResource);
try {
mDigit = a.getInt(R.styleable.NumPadKey_digit, mDigit);
@@ -116,20 +118,16 @@ public class NumPadKey extends ViewGroup {
final int len = klondike.length();
if (len > 0) {
mKlondikeText.setText(klondike);
} else {
} else if (mKlondikeText.getVisibility() != View.GONE) {
mKlondikeText.setVisibility(View.INVISIBLE);
}
}
}
a = context.obtainStyledAttributes(attrs, android.R.styleable.View);
if (!a.hasValueOrEmpty(android.R.styleable.View_background)) {
Drawable rippleDrawable = new ContextThemeWrapper(mContext,
R.style.Widget_TextView_NumPadKey).getDrawable(R.drawable.ripple_drawable_pin);
setBackground(rippleDrawable);
}
a.recycle();
setContentDescription(mDigitText.getText().toString());
mAnimator = new NumPadAnimator(context, (GradientDrawable) getBackground(),
R.style.NumPadKey);
}
/**
@@ -142,9 +140,8 @@ public class NumPadKey extends ViewGroup {
.getDefaultColor();
mDigitText.setTextColor(textColor);
mKlondikeText.setTextColor(klondikeColor);
Drawable rippleDrawable = new ContextThemeWrapper(mContext,
R.style.Widget_TextView_NumPadKey).getDrawable(R.drawable.ripple_drawable_pin);
setBackground(rippleDrawable);
mAnimator.reloadColors(getContext());
}
@Override
@@ -152,13 +149,21 @@ public class NumPadKey extends ViewGroup {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
doHapticKeyClick();
}
mAnimator.start();
return super.onTouchEvent(event);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
mAnimator.updateMargin((ViewGroup.MarginLayoutParams) getLayoutParams());
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
measureChildren(widthMeasureSpec, heightMeasureSpec);
// Set width/height to the same value to ensure a smooth circle for the bg
setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth());
}
@Override
@@ -176,6 +181,8 @@ public class NumPadKey extends ViewGroup {
left = centerX - mKlondikeText.getMeasuredWidth() / 2;
mKlondikeText.layout(left, top, left + mKlondikeText.getMeasuredWidth(), bottom);
mAnimator.onLayout(b - t);
}
@Override