<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">
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>
<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"
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"
--- /dev/null
+<?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>
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;
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);
}
@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) {
<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"
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"
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;
}
@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 =
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 =
.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);