OSDN Git Service

Update buttons in FP find sensor
authorMaurice Lam <yukl@google.com>
Sat, 24 Jun 2017 00:47:23 +0000 (17:47 -0700)
committerMaurice Lam <yukl@google.com>
Sat, 24 Jun 2017 01:05:20 +0000 (18:05 -0700)
Remove the next button (so the user has to touch the sensor to
proceed), and add a skip button.

Test: cd tests/robotests && mma
Bug: 62839648
Change-Id: I555948ac2f3235e08b91f0957aa8e0ce24535c08

res/layout-land/fingerprint_enroll_find_sensor.xml
res/layout/fingerprint_enroll_find_sensor_base.xml
res/layout/fingerprint_enroll_find_sensor_base_footer.xml [new file with mode: 0644]
src/com/android/settings/fingerprint/FingerprintEnrollFindSensor.java
tests/robotests/res/layout-mcc999/fingerprint_enroll_find_sensor.xml
tests/robotests/src/com/android/settings/fingerprint/FingerprintEnrollFindSensorTest.java

index a43534f..7877d98 100644 (file)
@@ -42,7 +42,7 @@
 
             <LinearLayout
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content"
+                android:layout_height="match_parent"
                 android:orientation="vertical"
                 android:clipChildren="false"
                 android:clipToPadding="false">
@@ -52,6 +52,7 @@
                     style="@style/SuwGlifIcon"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
+                    android:layout_gravity="?attr/suwGlifHeaderGravity"
                     android:layout_marginStart="0dp"
                     android:layout_marginEnd="0dp"
                     android:src="@drawable/ic_fingerprint_header" />
                     android:layout_height="wrap_content"
                     android:text="@string/security_settings_fingerprint_enroll_find_sensor_message"/>
 
+                <Space
+                    android:layout_width="0dp"
+                    android:layout_height="0dp"
+                    android:layout_weight="1" />
+
                 <Button
-                    style="@style/SetupWizardButton.Positive"
-                    android:id="@+id/next_button"
+                    style="@style/SetupWizardButton.Negative"
+                    android:id="@+id/skip_button"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="8dp"
-                    android:text="@string/fingerprint_enroll_button_next" />
+                    android:text="@string/skip_label" />
 
             </LinearLayout>
 
index fa344ab..44455c5 100644 (file)
 
 <com.android.setupwizardlib.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/setup_wizard_layout"
     style="?attr/fingerprint_layout_theme"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    app:suwFooter="@layout/fingerprint_enroll_find_sensor_base_footer">
 
     <FrameLayout
         android:layout_width="match_parent"
@@ -56,7 +58,7 @@
                 android:layout_weight="1"/>
 
             <Button
-                style="@style/SuwGlifButton.Primary"
+                style="@style/SuwGlifButton.Secondary"
                 android:id="@+id/next_button"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
diff --git a/res/layout/fingerprint_enroll_find_sensor_base_footer.xml b/res/layout/fingerprint_enroll_find_sensor_base_footer.xml
new file mode 100644 (file)
index 0000000..e93fae9
--- /dev/null
@@ -0,0 +1,31 @@
+<?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.
+-->
+
+<!-- TODO: Use aapt:attr when it is fixed (b/36809755) -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/SuwGlifButtonBar"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <Button
+        style="@style/SuwGlifButton.Secondary"
+        android:id="@+id/skip_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/skip_label" />
+
+</LinearLayout>
index e34a90b..1902a52 100644 (file)
@@ -22,6 +22,7 @@ import android.os.Bundle;
 import android.os.UserHandle;
 import android.support.annotation.Nullable;
 import android.view.View;
+import android.widget.Button;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
@@ -48,6 +49,9 @@ public class FingerprintEnrollFindSensor extends FingerprintEnrollBase {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(getContentView());
+        Button skipButton = findViewById(R.id.skip_button);
+        skipButton.setOnClickListener(this);
+
         setHeaderText(R.string.security_settings_fingerprint_enroll_find_sensor_title);
         if (savedInstanceState != null) {
             mLaunchedConfirmLock = savedInstanceState.getBoolean(EXTRA_KEY_LAUNCHED_CONFIRM);
@@ -132,9 +136,15 @@ public class FingerprintEnrollFindSensor extends FingerprintEnrollBase {
     }
 
     @Override
-    protected void onNextButtonClick() {
-        mNextClicked = true;
-        proceedToEnrolling(true /* cancelEnrollment */);
+    public void onClick(View v) {
+        switch (v.getId()) {
+            case R.id.skip_button:
+                setResult(RESULT_SKIP);
+                finish();
+                break;
+            default:
+                super.onClick(v);
+        }
     }
 
     private void proceedToEnrolling(boolean cancelEnrollment) {
index 04489de..cedf5b9 100644 (file)
 
 <com.android.setupwizardlib.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/setup_wizard_layout"
     style="?attr/fingerprint_layout_theme"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
+    android:layout_height="match_parent"
+    app:suwFooter="@layout/fingerprint_enroll_find_sensor_base_footer">
 
     <FrameLayout
         android:layout_width="match_parent"
@@ -65,7 +67,7 @@
                 android:layout_weight="1"/>
 
             <Button
-                style="@style/SuwGlifButton.Primary"
+                style="@style/SuwGlifButton.Secondary"
                 android:id="@+id/next_button"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
index 84dfbfd..344914a 100644 (file)
@@ -25,15 +25,16 @@ import static org.robolectric.RuntimeEnvironment.application;
 
 import android.content.ComponentName;
 import android.content.Intent;
+import android.hardware.fingerprint.FingerprintManager;
 import android.hardware.fingerprint.FingerprintManager.EnrollmentCallback;
 import android.os.CancellationSignal;
 import android.widget.Button;
 
 import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.TestConfig;
 import com.android.settings.password.ChooseLockSettingsHelper;
 import com.android.settings.password.IFingerprintManager;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.SettingsShadowResources;
 import com.android.settings.testutils.shadow.ShadowDynamicIndexableContentMonitor;
 import com.android.settings.testutils.shadow.ShadowEventLogWriter;
@@ -92,13 +93,26 @@ public class FingerprintEnrollFindSensorTest {
     }
 
     @Test
-    public void clickNextAndFingerprint_shouldNotCrash() {
+    public void enrollFingerprint_shouldProceed() {
         EnrollmentCallback enrollmentCallback = verifyAndCaptureEnrollmentCallback();
 
-        Button nextButton = mActivity.findViewById(R.id.next_button);
-        nextButton.performClick();
         enrollmentCallback.onEnrollmentProgress(123);
-        nextButton.performClick();
+        enrollmentCallback.onEnrollmentError(FingerprintManager.FINGERPRINT_ERROR_CANCELED, "test");
+
+        ShadowActivity shadowActivity = Shadows.shadowOf(mActivity);
+        IntentForResult startedActivity =
+                shadowActivity.getNextStartedActivityForResult();
+        assertThat(startedActivity).named("Next activity 1").isNotNull();
+        assertThat(startedActivity.intent.getComponent())
+                .isEqualTo(new ComponentName(application, FingerprintEnrollEnrolling.class));
+    }
+
+    @Test
+    public void enrollFingerprintTwice_shouldStartOneEnrolling() {
+        EnrollmentCallback enrollmentCallback = verifyAndCaptureEnrollmentCallback();
+
+        enrollmentCallback.onEnrollmentProgress(123);
+        enrollmentCallback.onEnrollmentProgress(123);  // A second enroll should be a no-op
 
         ShadowActivity shadowActivity = Shadows.shadowOf(mActivity);
         IntentForResult startedActivity =
@@ -120,9 +134,7 @@ public class FingerprintEnrollFindSensorTest {
     public void layoutWithoutAnimation_shouldNotCrash() {
         EnrollmentCallback enrollmentCallback = verifyAndCaptureEnrollmentCallback();
         enrollmentCallback.onEnrollmentProgress(123);
-
-        Button nextButton = mActivity.findViewById(R.id.next_button);
-        nextButton.performClick();
+        enrollmentCallback.onEnrollmentError(FingerprintManager.FINGERPRINT_ERROR_CANCELED, "test");
 
         ShadowActivity shadowActivity = Shadows.shadowOf(mActivity);
         IntentForResult startedActivity =
@@ -132,6 +144,16 @@ public class FingerprintEnrollFindSensorTest {
                 .isEqualTo(new ComponentName(application, FingerprintEnrollEnrolling.class));
     }
 
+    @Test
+    public void clickSkip_shouldReturnResultSkip() {
+        Button skipButton = mActivity.findViewById(R.id.skip_button);
+        skipButton.performClick();
+
+        ShadowActivity shadowActivity = Shadows.shadowOf(mActivity);
+        assertThat(shadowActivity.getResultCode()).named("result code")
+                .isEqualTo(FingerprintEnrollBase.RESULT_SKIP);
+    }
+
     private EnrollmentCallback verifyAndCaptureEnrollmentCallback() {
         ArgumentCaptor<EnrollmentCallback> callbackCaptor =
                 ArgumentCaptor.forClass(EnrollmentCallback.class);