Merge "[Fingerprint] Make enroll progress bar scalable"

This commit is contained in:
Maurice Lam
2016-10-22 00:17:59 +00:00
committed by Android (Google) Code Review
17 changed files with 254 additions and 102 deletions

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 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.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@android:color/white"
android:alpha="?android:attr/disabledAlpha" />
</selector>

View File

@@ -17,14 +17,14 @@
<vector
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="enrollment_fingerprint_isolated"
android:width="75dp"
android:viewportWidth="75"
android:width="88dp"
android:height="88dp"
android:viewportHeight="88" >
android:viewportWidth="176"
android:viewportHeight="176" >
<group
android:name="fingerprint_ridges_2"
android:translateX="37.5835"
android:translateY="43.66685" >
android:translateX="88"
android:translateY="87.66685" >
<group
android:name="ridge_5" >
<path

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2016 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
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/fingerprint_background"
android:drawable="@drawable/fp_illustration_enrollment" />
<item
android:id="@+id/fingerprint_animation"
android:drawable="@drawable/enrollment_fingerprint_isolated_animation" />
</layer-list>

View File

@@ -16,21 +16,25 @@ Copyright (C) 2015 The Android Open Source Project
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="88.0dp"
android:height="88.0dp"
android:viewportWidth="88.0"
android:viewportHeight="88.0">
<path
android:fillColor="#FF000000"
android:pathData="M67.74,11.59c-0.41,0.0 -0.82,-0.1 -1.2,-0.31c-7.44,-4.06 -15.0,-6.04 -23.11,-6.04c-7.92,0.0 -14.67,1.85 -21.88,6.01c-1.2,0.69 -2.73,0.28 -3.42,-0.92s-0.28,-2.72 0.92,-3.41c7.9,-4.55 15.65,-6.68 24.37,-6.68c8.97,0.0 17.32,2.17 25.51,6.65c1.21,0.66 1.66,2.18 1.0,3.39C69.48,11.12 68.62,11.59 67.74,11.59z"/>
<path
android:fillColor="#FF000000"
android:pathData="M9.25,34.74c-0.48,0.0 -0.96,-0.14 -1.39,-0.42c-1.15,-0.77 -1.45,-2.32 -0.68,-3.47c4.09,-6.09 9.3,-10.89 15.49,-14.27c6.52,-3.55 13.91,-5.43 21.38,-5.43c7.44,0.0 14.8,1.86 21.3,5.39c6.17,3.35 11.38,8.12 15.47,14.16c0.77,1.14 0.47,2.7 -0.67,3.47c-1.14,0.77 -2.7,0.47 -3.47,-0.67c-3.64,-5.38 -8.25,-9.61 -13.71,-12.57c-5.77,-3.13 -12.31,-4.78 -18.92,-4.78c-6.63,0.0 -13.2,1.67 -18.98,4.82c-5.48,2.99 -10.1,7.25 -13.73,12.66C10.85,34.35 10.06,34.74 9.25,34.74z"/>
<path
android:fillColor="#FF000000"
android:pathData="M34.76,86.82c-0.67,0.0 -1.33,-0.27 -1.82,-0.79c-3.49,-3.72 -5.51,-6.25 -8.26,-11.45c-2.84,-5.35 -4.34,-11.88 -4.34,-18.86c0.0,-13.02 10.59,-23.61 23.61,-23.61c13.02,0.0 23.61,10.59 23.61,23.61c0.0,1.38 -1.12,2.5 -2.5,2.5s-2.5,-1.12 -2.5,-2.5c0.0,-10.26 -8.35,-18.61 -18.61,-18.61c-10.26,0.0 -18.61,8.35 -18.61,18.61c0.0,6.17 1.3,11.89 3.76,16.52c2.62,4.94 4.37,7.04 7.49,10.37c0.94,1.01 0.89,2.59 -0.11,3.53C35.99,86.6 35.38,86.82 34.76,86.82z"/>
<path
android:fillColor="#FF000000"
android:pathData="M64.28,78.84c-4.99,0.0 -9.35,-1.32 -12.98,-3.92c-6.17,-4.43 -9.86,-11.6 -9.86,-19.19c0.0,-1.38 1.12,-2.5 2.5,-2.5s2.5,1.12 2.5,2.5c0.0,5.98 2.91,11.64 7.77,15.13c2.8,2.01 6.09,2.98 10.06,2.98c0.97,0.0 2.57,-0.11 4.17,-0.4c1.36,-0.25 2.66,0.64 2.92,2.0c0.25,1.36 -0.64,2.66 -2.0,2.92C66.93,78.8 64.86,78.84 64.28,78.84z"/>
<path
android:fillColor="#FF000000"
android:pathData="M55.92,87.75c-0.23,0.0 -0.46,-0.03 -0.7,-0.1c-6.6,-1.91 -10.92,-4.49 -15.4,-9.2c-5.76,-6.06 -8.94,-14.13 -8.94,-22.72c0.0,-7.2 5.86,-13.05 13.05,-13.05c7.2,0.0 13.05,5.86 13.05,13.05c0.0,4.44 3.61,8.05 8.05,8.05s8.05,-3.61 8.05,-8.05c0.0,-16.08 -13.08,-29.16 -29.16,-29.16c-11.43,0.0 -21.86,6.73 -26.58,17.15c-1.57,3.48 -2.37,7.52 -2.37,12.01c0.0,3.36 0.28,8.62 2.71,15.49c0.46,1.3 -0.22,2.73 -1.52,3.19c-1.3,0.46 -2.73,-0.22 -3.19,-1.52c-2.02,-5.7 -3.0,-11.31 -3.0,-17.16c0.0,-5.21 0.95,-9.94 2.82,-14.07c5.52,-12.2 17.74,-20.09 31.13,-20.09c18.83,0.0 34.16,15.32 34.16,34.16c0.0,7.2 -5.86,13.05 -13.05,13.05S52.0,62.92 52.0,55.73c0.0,-4.44 -3.61,-8.05 -8.05,-8.05s-8.05,3.61 -8.05,8.05c0.0,7.3 2.69,14.15 7.56,19.28c3.86,4.06 7.43,6.18 13.17,7.84c1.33,0.38 2.09,1.77 1.71,3.1C58.01,87.04 57.01,87.75 55.92,87.75z"/>
android:viewportWidth="176.0"
android:viewportHeight="176.0">
<group
android:translateX="44"
android:translateY="44">
<path
android:fillColor="#FF000000"
android:pathData="M67.74,11.59c-0.41,0.0 -0.82,-0.1 -1.2,-0.31c-7.44,-4.06 -15.0,-6.04 -23.11,-6.04c-7.92,0.0 -14.67,1.85 -21.88,6.01c-1.2,0.69 -2.73,0.28 -3.42,-0.92s-0.28,-2.72 0.92,-3.41c7.9,-4.55 15.65,-6.68 24.37,-6.68c8.97,0.0 17.32,2.17 25.51,6.65c1.21,0.66 1.66,2.18 1.0,3.39C69.48,11.12 68.62,11.59 67.74,11.59z"/>
<path
android:fillColor="#FF000000"
android:pathData="M9.25,34.74c-0.48,0.0 -0.96,-0.14 -1.39,-0.42c-1.15,-0.77 -1.45,-2.32 -0.68,-3.47c4.09,-6.09 9.3,-10.89 15.49,-14.27c6.52,-3.55 13.91,-5.43 21.38,-5.43c7.44,0.0 14.8,1.86 21.3,5.39c6.17,3.35 11.38,8.12 15.47,14.16c0.77,1.14 0.47,2.7 -0.67,3.47c-1.14,0.77 -2.7,0.47 -3.47,-0.67c-3.64,-5.38 -8.25,-9.61 -13.71,-12.57c-5.77,-3.13 -12.31,-4.78 -18.92,-4.78c-6.63,0.0 -13.2,1.67 -18.98,4.82c-5.48,2.99 -10.1,7.25 -13.73,12.66C10.85,34.35 10.06,34.74 9.25,34.74z"/>
<path
android:fillColor="#FF000000"
android:pathData="M34.76,86.82c-0.67,0.0 -1.33,-0.27 -1.82,-0.79c-3.49,-3.72 -5.51,-6.25 -8.26,-11.45c-2.84,-5.35 -4.34,-11.88 -4.34,-18.86c0.0,-13.02 10.59,-23.61 23.61,-23.61c13.02,0.0 23.61,10.59 23.61,23.61c0.0,1.38 -1.12,2.5 -2.5,2.5s-2.5,-1.12 -2.5,-2.5c0.0,-10.26 -8.35,-18.61 -18.61,-18.61c-10.26,0.0 -18.61,8.35 -18.61,18.61c0.0,6.17 1.3,11.89 3.76,16.52c2.62,4.94 4.37,7.04 7.49,10.37c0.94,1.01 0.89,2.59 -0.11,3.53C35.99,86.6 35.38,86.82 34.76,86.82z"/>
<path
android:fillColor="#FF000000"
android:pathData="M64.28,78.84c-4.99,0.0 -9.35,-1.32 -12.98,-3.92c-6.17,-4.43 -9.86,-11.6 -9.86,-19.19c0.0,-1.38 1.12,-2.5 2.5,-2.5s2.5,1.12 2.5,2.5c0.0,5.98 2.91,11.64 7.77,15.13c2.8,2.01 6.09,2.98 10.06,2.98c0.97,0.0 2.57,-0.11 4.17,-0.4c1.36,-0.25 2.66,0.64 2.92,2.0c0.25,1.36 -0.64,2.66 -2.0,2.92C66.93,78.8 64.86,78.84 64.28,78.84z"/>
<path
android:fillColor="#FF000000"
android:pathData="M55.92,87.75c-0.23,0.0 -0.46,-0.03 -0.7,-0.1c-6.6,-1.91 -10.92,-4.49 -15.4,-9.2c-5.76,-6.06 -8.94,-14.13 -8.94,-22.72c0.0,-7.2 5.86,-13.05 13.05,-13.05c7.2,0.0 13.05,5.86 13.05,13.05c0.0,4.44 3.61,8.05 8.05,8.05s8.05,-3.61 8.05,-8.05c0.0,-16.08 -13.08,-29.16 -29.16,-29.16c-11.43,0.0 -21.86,6.73 -26.58,17.15c-1.57,3.48 -2.37,7.52 -2.37,12.01c0.0,3.36 0.28,8.62 2.71,15.49c0.46,1.3 -0.22,2.73 -1.52,3.19c-1.3,0.46 -2.73,-0.22 -3.19,-1.52c-2.02,-5.7 -3.0,-11.31 -3.0,-17.16c0.0,-5.21 0.95,-9.94 2.82,-14.07c5.52,-12.2 17.74,-20.09 31.13,-20.09c18.83,0.0 34.16,15.32 34.16,34.16c0.0,7.2 -5.86,13.05 -13.05,13.05S52.0,62.92 52.0,55.73c0.0,-4.44 -3.61,-8.05 -8.05,-8.05s-8.05,3.61 -8.05,8.05c0.0,7.3 2.69,14.15 7.56,19.28c3.86,4.06 7.43,6.18 13.17,7.84c1.33,0.38 2.09,1.77 1.71,3.1C58.01,87.04 57.01,87.75 55.92,87.75z"/>
</group>
</vector>

View File

@@ -17,23 +17,27 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape
android:innerRadius="?attr/fingerprint_ring_radius"
android:innerRadiusRatio="2.2"
android:shape="ring"
android:thickness="@dimen/fingerprint_ring_thickness"
android:useLevel="false">
<solid android:color="@color/fingerprint_progress_ring_bg" />
android:thickness="@dimen/ring_progress_bar_thickness"
android:useLevel="false"
android:tint="?android:colorControlNormal">
<solid android:color="@color/white_disabled" />
</shape>
</item>
<item android:id="@android:id/progress">
<shape
android:innerRadius="?attr/fingerprint_ring_radius"
android:shape="ring"
android:thickness="@dimen/fingerprint_ring_thickness">
<gradient
android:startColor="@color/fingerprint_progress_ring"
android:endColor="@color/fingerprint_progress_ring"
android:angle="0"
/>
</shape>
<rotate
android:fromDegrees="270"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="270">
<shape
android:innerRadiusRatio="2.2"
android:shape="ring"
android:thickness="@dimen/ring_progress_bar_thickness"
android:tint="?android:attr/colorControlActivated">
<solid android:color="@android:color/white" />
</shape>
</rotate>
</item>
</layer-list>

View File

@@ -49,7 +49,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:src="@drawable/ic_lock" />
android:src="@drawable/ic_fingerprint_header" />
<TextView
android:id="@+id/suw_layout_title"
@@ -97,8 +97,8 @@
android:layout_height="match_parent">
<include layout="@layout/fingerprint_enroll_enrolling_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"/>
<TextView

View File

@@ -50,7 +50,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:src="@drawable/ic_lock" />
android:src="@drawable/ic_fingerprint_header" />
<TextView
android:id="@+id/suw_layout_title"

View File

@@ -55,8 +55,9 @@
</FrameLayout>
<include layout="@layout/fingerprint_enroll_enrolling_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="@dimen/fingerprint_progress_bar_max_size"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/fingerprint_enrolling_content_margin_top"/>

View File

@@ -15,32 +15,11 @@
~ limitations under the License
-->
<RelativeLayout
<com.android.settings.widget.RingProgressBar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fingerprint_progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<ImageView
android:id="@+id/fingerprint_animator"
android:layout_width="@dimen/fingerprint_animation_size"
android:layout_height="@dimen/fingerprint_animation_size"
android:layout_centerInParent="true"
android:background="@drawable/fp_illustration_enrollment"
android:backgroundTint="@color/fingerprint_indicator_background_resting"
android:src="@drawable/enrollment_fingerprint_isolated_animation"/>
<ProgressBar
android:id="@+id/fingerprint_progress_bar"
android:layout_width="?attr/fingerprint_progress_bar_size"
android:layout_height="?attr/fingerprint_progress_bar_size"
android:layout_centerInParent="true"
style="?android:attr/progressBarStyleHorizontal"
android:max="10000"
android:mirrorForRtl="false"
android:progress="0"
android:indeterminate="false"
android:progressDrawable="@drawable/fingerprint_progress_ring"
android:rotation="-90"/>
</RelativeLayout>
android:background="@drawable/fp_illustration"
android:minHeight="@dimen/fingerprint_progress_bar_min_size"
android:progress="0" />

View File

@@ -16,16 +16,10 @@
-->
<resources>
<dimen name="fingerprint_ring_radius">106dp</dimen>
<dimen name="fingerprint_animation_size">100dp</dimen>
<dimen name="fingerprint_progress_bar_size">220dp</dimen>
<dimen name="fingerprint_enrolling_content_margin_top">56dp</dimen>
<dimen name="fingerprint_in_app_indicator_size">176dp</dimen>
<dimen name="fingerprint_find_sensor_graphic_size">240dp</dimen>
<dimen name="setup_fingerprint_ring_radius">92dp</dimen>
<dimen name="setup_fingerprint_progress_bar_size">192dp</dimen>
<dimen name="support_escalation_card_padding_start">56dp</dimen>
<dimen name="support_escalation_card_padding_end">56dp</dimen>
</resources>

View File

@@ -53,8 +53,6 @@
<color name="fingerprint_title_area_bg">?android:attr/colorAccent</color>
<color name="fingerprint_title_color">#ffffffff</color>
<color name="fingerprint_message_color">#de000000</color>
<color name="fingerprint_progress_ring">?android:attr/colorAccent</color>
<color name="fingerprint_progress_ring_bg">#20000000</color>
<color name="fingerprint_indicator_background_resting">#12000000</color>
<color name="running_processes_system_ram">#ff384248</color>

View File

@@ -67,6 +67,7 @@
<dimen name="captioning_preview_height">200dp</dimen>
<dimen name="ring_progress_bar_thickness">4dp</dimen>
<dimen name="settings_side_margin">0dip</dimen>
<!-- Weight of the left pane in a multi-pane preference layout. -->
@@ -221,8 +222,6 @@
<dimen name="redaction_vertical_margins">8dp</dimen>
<!-- Fingerprint -->
<dimen name="fingerprint_ring_radius">92dip</dimen>
<dimen name="fingerprint_ring_thickness">4dip</dimen>
<dimen name="fingerprint_dot_radius">8dp</dimen>
<dimen name="fingerprint_pulse_radius">50dp</dimen>
<item name="fingerprint_sensor_location_fraction_x" type="fraction">50%</item>
@@ -233,15 +232,13 @@
<dimen name="fingerprint_error_text_appear_distance">16dp</dimen>
<dimen name="fingerprint_error_text_disappear_distance">-8dp</dimen>
<dimen name="fingerprint_animation_size">88dp</dimen>
<dimen name="fingerprint_progress_bar_size">192dp</dimen>
<dimen name="fingerprint_progress_bar_max_size">220dp</dimen>
<dimen name="fingerprint_progress_bar_min_size">120dp</dimen>
<dimen name="fingerprint_enrolling_content_margin_top">36dp</dimen>
<dimen name="fingerprint_in_app_indicator_size">124dp</dimen>
<dimen name="fingerprint_in_app_indicator_min_size">124dp</dimen>
<dimen name="fingerprint_in_app_indicator_max_size">264dp</dimen>
<dimen name="setup_fingerprint_ring_radius">80dip</dimen>
<dimen name="setup_fingerprint_progress_bar_size">168dp</dimen>
<dimen name="confirm_credentials_security_method_margin">48dp</dimen>
<dimen name="confirm_credentials_layout_width">@dimen/match_parent</dimen>
<dimen name="confirm_credentials_top_padding">0dp</dimen>

View File

@@ -445,4 +445,11 @@
<item name="android:lineSpacingMultiplier">1.2</item>
</style>
<style name="RingProgressBarStyle" parent="android:style/Widget.Material.ProgressBar.Horizontal">
<item name="android:indeterminate">false</item>
<item name="android:max">10000</item>
<item name="android:mirrorForRtl">false</item>
<item name="android:progressDrawable">@drawable/ring_progress</item>
</style>
</resources>

View File

@@ -16,8 +16,6 @@
<resources>
<attr name="fingerprint_layout_theme" format="reference" />
<attr name="fingerprint_progress_bar_size" format="reference|dimension" />
<attr name="fingerprint_ring_radius" format="reference|dimension" />
<attr name="ic_menu_moreoverflow" format="reference" />
<attr name="ic_wps" format="reference" />
<attr name="setup_divider_color" format="reference" />
@@ -38,8 +36,6 @@
<item name="android:windowBackground">?android:attr/colorBackground</item>
<item name="*android:preferencePanelStyle">@*android:style/PreferencePanel.Dialog</item>
<item name="fingerprint_layout_theme">@style/FingerprintLayoutTheme</item>
<item name="fingerprint_progress_bar_size">@dimen/setup_fingerprint_progress_bar_size</item>
<item name="fingerprint_ring_radius">@dimen/setup_fingerprint_ring_radius</item>
<item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item>
<item name="ic_wps">@drawable/ic_wps_dark</item>
<item name="setup_divider_color">@color/setup_divider_color_dark</item>
@@ -62,8 +58,6 @@
<item name="android:windowBackground">?android:attr/colorBackground</item>
<item name="*android:preferencePanelStyle">@*android:style/PreferencePanel.Dialog</item>
<item name="fingerprint_layout_theme">@style/FingerprintLayoutTheme</item>
<item name="fingerprint_progress_bar_size">@dimen/setup_fingerprint_progress_bar_size</item>
<item name="fingerprint_ring_radius">@dimen/setup_fingerprint_ring_radius</item>
<item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item>
<item name="ic_wps">@drawable/ic_wps_light</item>
<item name="setup_divider_color">@color/setup_divider_color_light</item>
@@ -141,8 +135,6 @@
<item name="*android:preferenceFragmentPaddingSide">@dimen/settings_side_margin</item>
<item name="fingerprint_layout_theme">@style/FingerprintLayoutTheme</item>
<item name="fingerprint_progress_bar_size">@dimen/fingerprint_progress_bar_size</item>
<item name="fingerprint_ring_radius">@dimen/fingerprint_ring_radius</item>
<item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_holo_dark</item>
<item name="ic_wps">@drawable/ic_wps_light</item>
<item name="wifi_signal">@drawable/wifi_signal</item>

View File

@@ -23,13 +23,12 @@ import android.animation.ValueAnimator;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.drawable.Animatable2;
import android.graphics.drawable.AnimatedVectorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.os.UserHandle;
@@ -37,7 +36,6 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
@@ -75,7 +73,6 @@ public class FingerprintEnrollEnrolling extends FingerprintEnrollBase
private static final int ICON_TOUCH_COUNT_SHOW_UNTIL_DIALOG_SHOWN = 3;
private ProgressBar mProgressBar;
private ImageView mFingerprintAnimator;
private ObjectAnimator mProgressAnim;
private TextView mStartMessage;
private TextView mRepeatMessage;
@@ -87,6 +84,7 @@ public class FingerprintEnrollEnrolling extends FingerprintEnrollBase
private FingerprintEnrollSidecar mSidecar;
private boolean mAnimationCancelled;
private AnimatedVectorDrawable mIconAnimationDrawable;
private Drawable mIconBackgroundDrawable;
private int mIndicatorBackgroundRestingColor;
private int mIndicatorBackgroundActivatedColor;
private boolean mRestoring;
@@ -100,8 +98,11 @@ public class FingerprintEnrollEnrolling extends FingerprintEnrollBase
mRepeatMessage = (TextView) findViewById(R.id.repeat_message);
mErrorText = (TextView) findViewById(R.id.error_text);
mProgressBar = (ProgressBar) findViewById(R.id.fingerprint_progress_bar);
mFingerprintAnimator = (ImageView) findViewById(R.id.fingerprint_animator);
mIconAnimationDrawable = (AnimatedVectorDrawable) mFingerprintAnimator.getDrawable();
final LayerDrawable fingerprintDrawable = (LayerDrawable) mProgressBar.getBackground();
mIconAnimationDrawable = (AnimatedVectorDrawable)
fingerprintDrawable.findDrawableByLayerId(R.id.fingerprint_animation);
mIconBackgroundDrawable =
fingerprintDrawable.findDrawableByLayerId(R.id.fingerprint_background);
mIconAnimationDrawable.registerAnimationCallback(mIconAnimationCallback);
mFastOutSlowInInterpolator = AnimationUtils.loadInterpolator(
this, android.R.interpolator.fast_out_slow_in);
@@ -109,7 +110,7 @@ public class FingerprintEnrollEnrolling extends FingerprintEnrollBase
this, android.R.interpolator.linear_out_slow_in);
mFastOutLinearInInterpolator = AnimationUtils.loadInterpolator(
this, android.R.interpolator.fast_out_linear_in);
mFingerprintAnimator.setOnTouchListener(new View.OnTouchListener() {
mProgressBar.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
@@ -117,12 +118,12 @@ public class FingerprintEnrollEnrolling extends FingerprintEnrollBase
if (mIconTouchCount == ICON_TOUCH_COUNT_SHOW_UNTIL_DIALOG_SHOWN) {
showIconTouchDialog();
} else {
mFingerprintAnimator.postDelayed(mShowDialogRunnable,
mProgressBar.postDelayed(mShowDialogRunnable,
ICON_TOUCH_DURATION_UNTIL_DIALOG_SHOWN);
}
} else if (event.getActionMasked() == MotionEvent.ACTION_CANCEL
|| event.getActionMasked() == MotionEvent.ACTION_UP) {
mFingerprintAnimator.removeCallbacks(mShowDialogRunnable);
mProgressBar.removeCallbacks(mShowDialogRunnable);
}
return true;
}
@@ -131,6 +132,7 @@ public class FingerprintEnrollEnrolling extends FingerprintEnrollBase
= getColor(R.color.fingerprint_indicator_background_resting);
mIndicatorBackgroundActivatedColor
= getColor(R.color.fingerprint_indicator_background_activated);
mIconBackgroundDrawable.setTint(mIndicatorBackgroundRestingColor);
mRestoring = savedInstanceState != null;
}
@@ -213,8 +215,7 @@ public class FingerprintEnrollEnrolling extends FingerprintEnrollBase
new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
mFingerprintAnimator.setBackgroundTintList(ColorStateList.valueOf(
(Integer) animation.getAnimatedValue()));
mIconBackgroundDrawable.setTint((Integer) animation.getAnimatedValue());
}
};
anim.addUpdateListener(listener);
@@ -400,7 +401,7 @@ public class FingerprintEnrollEnrolling extends FingerprintEnrollBase
}
// Start animation after it has ended.
mFingerprintAnimator.post(new Runnable() {
mProgressBar.post(new Runnable() {
@Override
public void run() {
startIconAnimation();

View File

@@ -0,0 +1,57 @@
/*
* Copyright (C) 2016 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.settings.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ProgressBar;
import com.android.settings.R;
/**
* A (determinate) progress bar in the form of a ring. The progress bar goes clockwise starting
* from the 12 o'clock position. This view maintain equal width and height using a strategy similar
* to "centerInside" for ImageView.
*/
public class RingProgressBar extends ProgressBar {
public RingProgressBar(Context context) {
this(context, null);
}
public RingProgressBar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public RingProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, R.style.RingProgressBarStyle);
}
public RingProgressBar(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final int measuredHeight = getMeasuredHeight();
final int measuredWidth = getMeasuredWidth();
final int shortSide = Math.min(measuredHeight, measuredWidth);
setMeasuredDimension(shortSide, shortSide);
}
}

View File

@@ -0,0 +1,70 @@
/*
* Copyright (C) 2016 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.settings.widget;
import static junit.framework.Assert.assertEquals;
import android.content.Context;
import android.view.View.MeasureSpec;
import com.android.settings.TestConfig;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class RingProgressBarTest {
private Context mContext = RuntimeEnvironment.application;
private RingProgressBar mProgressBar;
@Before
public void setUp() {
mProgressBar = new RingProgressBar(mContext);
}
@Test
public void testMeasurePortrait() {
mProgressBar.measure(
MeasureSpec.makeMeasureSpec(100, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY));
assertEquals(100, mProgressBar.getMeasuredHeight());
assertEquals(100, mProgressBar.getMeasuredWidth());
}
@Test
public void testMeasureLandscape() {
mProgressBar.measure(
MeasureSpec.makeMeasureSpec(200, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(100, MeasureSpec.EXACTLY));
assertEquals(100, mProgressBar.getMeasuredHeight());
assertEquals(100, mProgressBar.getMeasuredWidth());
}
@Test
public void testDefaultAttributes() {
assertEquals(false, mProgressBar.isIndeterminate());
assertEquals(0, mProgressBar.getProgress());
assertEquals(10000, mProgressBar.getMax());
}
}