Migrating to new footer button for fingerprint and face enrolling pages.

Bug: 120805516
Test: RunSettingsRoboTests
Change-Id: I89a5e3674b8ba9ec66945c03c9b783664eee214f
This commit is contained in:
pastychang
2018-12-18 10:53:34 +08:00
parent ed889a3788
commit 1b1666855e
36 changed files with 234 additions and 414 deletions

View File

@@ -70,41 +70,6 @@
android:layout_height="wrap_content"
android:text="@string/security_settings_fingerprint_enroll_finish_message"/>
<Space
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<com.google.android.setupdesign.view.ButtonBarLayout
style="@style/SuwGlifButtonBar.Stackable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:clipChildren="false"
android:clipToPadding="false">
<Button
style="@style/SetupWizardButton.Negative"
android:id="@+id/add_another_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="@string/fingerprint_enroll_button_add" />
<Space
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
style="@style/SetupWizardButton.Positive"
android:id="@+id/next_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/security_settings_fingerprint_enroll_done" />
</com.google.android.setupdesign.view.ButtonBarLayout>
</LinearLayout>
<com.google.android.setupdesign.view.FillContentLayout

View File

@@ -21,8 +21,7 @@
android:id="@+id/setup_wizard_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="?attr/face_layout_theme"
app:sucFooter="@layout/face_enroll_enrolling_footer">
style="?attr/face_layout_theme">
<LinearLayout
style="@style/SuwContentFrame"

View File

@@ -1,31 +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
-->
<!-- 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/security_settings_face_enroll_enrolling_skip" />
</LinearLayout>

View File

@@ -21,8 +21,7 @@
android:id="@+id/setup_wizard_layout"
style="?attr/face_layout_theme"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:sucFooter="@layout/face_enroll_finish_footer">
android:layout_height="match_parent">
<LinearLayout
style="@style/SuwContentFrame"

View File

@@ -1,37 +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
-->
<!-- TODO: Use aapt:attr when it is fixed (b/36809755) -->
<com.google.android.setupdesign.view.ButtonBarLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/SuwGlifButtonBar.Stackable"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Space
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
style="@style/SuwGlifButton.Primary"
android:id="@+id/next_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/security_settings_face_enroll_done" />
</com.google.android.setupdesign.view.ButtonBarLayout>

View File

@@ -22,8 +22,7 @@
style="?attr/face_layout_theme"
android:id="@+id/setup_wizard_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:sucFooter="@layout/face_enroll_introduction_footer">
android:layout_height="match_parent">
<LinearLayout
style="@style/SuwContentFrame"

View File

@@ -1,44 +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
-->
<!-- TODO: Use aapt:attr when it is fixed (b/36809755) -->
<com.google.android.setupdesign.view.ButtonBarLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/SuwGlifButtonBar.Stackable"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/face_cancel_button"
style="@style/SuwGlifButton.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/security_settings_face_enroll_introduction_cancel" />
<Space
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
android:id="@+id/face_next_button"
style="@style/SuwGlifButton.Primary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/wizard_next" />
</com.google.android.setupdesign.view.ButtonBarLayout>

View File

@@ -21,8 +21,7 @@
android:id="@+id/setup_wizard_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="?attr/fingerprint_layout_theme"
app:sucFooter="@layout/fingerprint_enroll_enrolling_base_footer">
style="?attr/fingerprint_layout_theme">
<LinearLayout
style="@style/SuwContentFrame"

View File

@@ -1,31 +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.
-->
<!-- 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/security_settings_fingerprint_enroll_enrolling_skip" />
</LinearLayout>

View File

@@ -21,8 +21,7 @@
android:id="@+id/setup_wizard_layout"
style="?attr/fingerprint_layout_theme"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:sucFooter="@layout/fingerprint_enroll_find_sensor_base_footer">
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"

View File

@@ -1,31 +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.
-->
<!-- 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>

View File

@@ -21,8 +21,7 @@
android:id="@+id/setup_wizard_layout"
style="?attr/fingerprint_layout_theme"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:sucFooter="@layout/fingerprint_enroll_finish_base_footer">
android:layout_height="match_parent">
<LinearLayout
style="@style/SuwContentFrame"

View File

@@ -1,44 +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.
-->
<!-- TODO: Use aapt:attr when it is fixed (b/36809755) -->
<com.google.android.setupdesign.view.ButtonBarLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/SuwGlifButtonBar.Stackable"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
style="@style/SuwGlifButton.Secondary"
android:id="@+id/add_another_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/fingerprint_enroll_button_add" />
<Space
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
style="@style/SuwGlifButton.Primary"
android:id="@+id/next_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/security_settings_fingerprint_enroll_done" />
</com.google.android.setupdesign.view.ButtonBarLayout>

View File

@@ -21,8 +21,7 @@
style="?attr/fingerprint_layout_theme"
android:id="@+id/setup_wizard_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:sucFooter="@layout/fingerprint_enroll_introduction_footer">
android:layout_height="match_parent">
<LinearLayout
style="@style/SuwContentFrame"

View File

@@ -1,44 +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
-->
<!-- TODO: Use aapt:attr when it is fixed (b/36809755) -->
<com.google.android.setupdesign.view.ButtonBarLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/SuwGlifButtonBar.Stackable"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/fingerprint_cancel_button"
style="@style/SuwGlifButton.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/security_settings_fingerprint_enroll_introduction_cancel" />
<Space
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
android:id="@+id/fingerprint_next_button"
style="@style/SuwGlifButton.Primary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/wizard_next" />
</com.google.android.setupdesign.view.ButtonBarLayout>

View File

@@ -24,7 +24,6 @@ import android.os.Bundle;
import android.os.UserHandle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.android.settings.R;
@@ -33,13 +32,14 @@ import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling;
import com.android.settings.core.InstrumentedActivity;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.google.android.setupcompat.item.FooterButton;
import com.google.android.setupcompat.template.ButtonFooterMixin;
import com.google.android.setupdesign.GlifLayout;
/**
* Base activity for all biometric enrollment steps.
*/
public abstract class BiometricEnrollBase extends InstrumentedActivity
implements View.OnClickListener {
public abstract class BiometricEnrollBase extends InstrumentedActivity {
public static final String EXTRA_KEY_LAUNCHED_CONFIRM = "launched_confirm_lock";
public static final String EXTRA_KEY_REQUIRE_VISION = "accessibility_vision";
@@ -78,6 +78,7 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity
protected boolean mLaunchedConfirmLock;
protected byte[] mToken;
protected int mUserId;
protected ButtonFooterMixin mButtonFooterMixin;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -112,10 +113,6 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity
protected void initViews() {
getWindow().setStatusBarColor(Color.TRANSPARENT);
Button nextButton = getNextButton();
if (nextButton != null) {
nextButton.setOnClickListener(this);
}
}
protected GlifLayout getLayout() {
@@ -139,18 +136,14 @@ public abstract class BiometricEnrollBase extends InstrumentedActivity
setHeaderText(resId, false /* force */);
}
protected Button getNextButton() {
return (Button) findViewById(R.id.next_button);
}
@Override
public void onClick(View v) {
if (v == getNextButton()) {
onNextButtonClick();
protected FooterButton getNextButton() {
if (mButtonFooterMixin != null) {
return mButtonFooterMixin.getPrimaryButton();
}
return null;
}
protected void onNextButtonClick() {
protected void onNextButtonClick(View view) {
}
protected Intent getFingerprintEnrollingIntent() {

View File

@@ -22,13 +22,13 @@ import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.android.settings.R;
import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.google.android.setupcompat.item.FooterButton;
import com.google.android.setupdesign.span.LinkSpan;
/**
@@ -70,12 +70,12 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
/**
* @return the cancel button
*/
protected abstract Button getCancelButton();
protected abstract FooterButton getCancelButton();
/**
* @return the next button
*/
protected abstract Button getNextButton();
protected abstract FooterButton getNextButton();
/**
* @return the error TextView
@@ -127,9 +127,6 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
setHeaderText(getHeaderResDefault());
}
Button cancelButton = getCancelButton();
cancelButton.setOnClickListener(v -> onCancelButtonClick());
mErrorText = getErrorTextView();
mUserManager = UserManager.get(this);
@@ -164,7 +161,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
}
@Override
protected void onNextButtonClick() {
protected void onNextButtonClick(View view) {
// Lock thingy is already set up, launch directly to the next page
launchNextEnrollingActivity(mToken);
}
@@ -234,7 +231,7 @@ public abstract class BiometricEnrollIntroduction extends BiometricEnrollBase
super.onActivityResult(requestCode, resultCode, data);
}
protected void onCancelButtonClick() {
protected void onCancelButtonClick(View view) {
finish();
}

View File

@@ -85,16 +85,9 @@ public abstract class BiometricsEnrollEnrolling extends BiometricEnrollBase
super.onBackPressed();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.skip_button:
setResult(RESULT_SKIP);
finish();
break;
default:
super.onClick(v);
}
protected void onSkipButtonClick(View view) {
setResult(RESULT_SKIP);
finish();
}
public void startEnrollment() {

View File

@@ -24,7 +24,6 @@ import android.util.Log;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.Button;
import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto;
@@ -36,6 +35,8 @@ import com.android.settings.biometrics.BiometricsEnrollEnrolling;
import java.util.ArrayList;
import com.google.android.setupcompat.item.FooterButton;
import com.google.android.setupcompat.template.ButtonFooterMixin;
public class FaceEnrollEnrolling extends BiometricsEnrollEnrolling {
@@ -91,8 +92,15 @@ public class FaceEnrollEnrolling extends BiometricsEnrollEnrolling {
mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(
this, android.R.interpolator.linear_out_slow_in);
Button skipButton = findViewById(R.id.skip_button);
skipButton.setOnClickListener(this);
mButtonFooterMixin = getLayout().getMixin(ButtonFooterMixin.class);
mButtonFooterMixin.setSecondaryButton(
new FooterButton(
this,
R.string.security_settings_face_enroll_enrolling_skip,
this::onSkipButtonClick,
FooterButton.ButtonType.SKIP,
R.style.SuwGlifButton_Secondary)
);
if (!getIntent().getBooleanExtra(BiometricEnrollBase.EXTRA_KEY_REQUIRE_DIVERSITY, true)) {
mDisabledFeatures.add(FaceManager.FEATURE_REQUIRE_REQUIRE_DIVERSITY);

View File

@@ -17,11 +17,15 @@
package com.android.settings.biometrics.face;
import android.os.Bundle;
import android.view.View;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.biometrics.BiometricEnrollBase;
import com.google.android.setupcompat.item.FooterButton;
import com.google.android.setupcompat.template.ButtonFooterMixin;
/**
* Activity which concludes face enrollment.
*/
@@ -32,6 +36,16 @@ public class FaceEnrollFinish extends BiometricEnrollBase {
super.onCreate(savedInstanceState);
setContentView(R.layout.face_enroll_finish);
setHeaderText(R.string.security_settings_face_enroll_finish_title);
mButtonFooterMixin = getLayout().getMixin(ButtonFooterMixin.class);
mButtonFooterMixin.setPrimaryButton(
new FooterButton(
this,
R.string.security_settings_face_enroll_done,
this::onNextButtonClick,
FooterButton.ButtonType.NEXT,
R.style.SuwGlifButton_Primary)
);
}
@Override
@@ -40,7 +54,7 @@ public class FaceEnrollFinish extends BiometricEnrollBase {
}
@Override
public void onNextButtonClick() {
public void onNextButtonClick(View view) {
setResult(RESULT_FINISHED);
finish();
}

View File

@@ -32,6 +32,8 @@ import com.android.settings.biometrics.BiometricEnrollIntroduction;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.google.android.setupcompat.item.FooterButton;
import com.google.android.setupcompat.template.ButtonFooterMixin;
import com.google.android.setupdesign.span.LinkSpan;
public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
@@ -55,6 +57,25 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
mSwitchVision = findViewById(R.id.toggle_vision);
mSwitchDiversity = findViewById(R.id.toggle_diversity);
mButtonFooterMixin = getLayout().getMixin(ButtonFooterMixin.class);
mButtonFooterMixin.setSecondaryButton(
new FooterButton(
this,
R.string.security_settings_face_enroll_introduction_cancel,
this::onCancelButtonClick,
FooterButton.ButtonType.SKIP,
R.style.SuwGlifButton_Secondary)
);
mButtonFooterMixin.setPrimaryButton(
new FooterButton(
this,
R.string.wizard_next,
this::onNextButtonClick,
FooterButton.ButtonType.NEXT,
R.style.SuwGlifButton_Primary)
);
}
@Override
@@ -84,13 +105,19 @@ public class FaceEnrollIntroduction extends BiometricEnrollIntroduction {
}
@Override
protected Button getCancelButton() {
return findViewById(R.id.face_cancel_button);
protected FooterButton getCancelButton() {
if (mButtonFooterMixin != null) {
return mButtonFooterMixin.getSecondaryButton();
}
return null;
}
@Override
protected Button getNextButton() {
return findViewById(R.id.face_next_button);
protected FooterButton getNextButton() {
if (mButtonFooterMixin != null) {
return mButtonFooterMixin.getPrimaryButton();
}
return null;
}
@Override

View File

@@ -35,7 +35,6 @@ import android.view.MotionEvent;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
@@ -48,6 +47,9 @@ import com.android.settings.biometrics.BiometricErrorDialog;
import com.android.settings.biometrics.BiometricsEnrollEnrolling;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.google.android.setupcompat.item.FooterButton;
import com.google.android.setupcompat.template.ButtonFooterMixin;
/**
* Activity which handles the actual enrolling for fingerprint.
*/
@@ -135,8 +137,15 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling {
mProgressBar = (ProgressBar) findViewById(R.id.fingerprint_progress_bar);
mVibrator = getSystemService(Vibrator.class);
Button skipButton = findViewById(R.id.skip_button);
skipButton.setOnClickListener(this);
mButtonFooterMixin = getLayout().getMixin(ButtonFooterMixin.class);
mButtonFooterMixin.setSecondaryButton(
new FooterButton(
this,
R.string.security_settings_fingerprint_enroll_enrolling_skip,
this::onSkipButtonClick,
FooterButton.ButtonType.SKIP,
R.style.SuwGlifButton_Secondary)
);
final LayerDrawable fingerprintDrawable = (LayerDrawable) mProgressBar.getBackground();
mIconAnimationDrawable = (AnimatedVectorDrawable)

View File

@@ -20,7 +20,6 @@ import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.annotation.Nullable;
@@ -30,6 +29,8 @@ import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollBase;
import com.android.settings.biometrics.BiometricEnrollSidecar.Listener;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.google.android.setupcompat.item.FooterButton;
import com.google.android.setupcompat.template.ButtonFooterMixin;
/**
* Activity explaining the fingerprint sensor location for fingerprint enrollment.
@@ -46,8 +47,15 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentView());
Button skipButton = findViewById(R.id.skip_button);
skipButton.setOnClickListener(this);
mButtonFooterMixin = getLayout().getMixin(ButtonFooterMixin.class);
mButtonFooterMixin.setSecondaryButton(
new FooterButton(
this,
R.string.skip_label,
this::onSkipButtonClick,
FooterButton.ButtonType.SKIP,
R.style.SuwGlifButton_Secondary)
);
setHeaderText(R.string.security_settings_fingerprint_enroll_find_sensor_title);
@@ -120,18 +128,7 @@ public class FingerprintEnrollFindSensor extends BiometricEnrollBase {
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.skip_button:
onSkipButtonClick();
break;
default:
super.onClick(v);
}
}
protected void onSkipButtonClick() {
protected void onSkipButtonClick(View view) {
setResult(RESULT_SKIP);
finish();
}

View File

@@ -20,13 +20,15 @@ import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricEnrollBase;
import com.google.android.setupcompat.item.FooterButton;
import com.google.android.setupcompat.template.ButtonFooterMixin;
/**
* Activity which concludes fingerprint enrollment.
*/
@@ -39,13 +41,32 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase {
super.onCreate(savedInstanceState);
setContentView(R.layout.fingerprint_enroll_finish);
setHeaderText(R.string.security_settings_fingerprint_enroll_finish_title);
mButtonFooterMixin = getLayout().getMixin(ButtonFooterMixin.class);
mButtonFooterMixin.setSecondaryButton(
new FooterButton(
this,
R.string.fingerprint_enroll_button_add,
null,
FooterButton.ButtonType.SKIP,
R.style.SuwGlifButton_Secondary)
);
mButtonFooterMixin.setPrimaryButton(
new FooterButton(
this,
R.string.security_settings_fingerprint_enroll_done,
this::onNextButtonClick,
FooterButton.ButtonType.NEXT,
R.style.SuwGlifButton_Primary)
);
}
@Override
protected void onResume() {
super.onResume();
Button addButton = (Button) findViewById(R.id.add_another_button);
FooterButton addButton = mButtonFooterMixin.getSecondaryButton();
final FingerprintManager fpm = Utils.getFingerprintManagerOrNull(this);
boolean hideAddAnother = false;
@@ -59,22 +80,18 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase {
// Don't show "Add" button if too many fingerprints already added
addButton.setVisibility(View.INVISIBLE);
} else {
addButton.setOnClickListener(this);
addButton.setOnClickListener(this::onAddAnotherButtonClick);
}
}
@Override
protected void onNextButtonClick() {
protected void onNextButtonClick(View view) {
setResult(RESULT_FINISHED);
finish();
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.add_another_button) {
startActivityForResult(getFingerprintEnrollingIntent(), REQUEST_ADD_ANOTHER);
}
super.onClick(v);
private void onAddAnotherButtonClick(View view) {
startActivityForResult(getFingerprintEnrollingIntent(), REQUEST_ADD_ANOTHER);
}
@Override

View File

@@ -22,7 +22,6 @@ import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto;
@@ -33,6 +32,8 @@ import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settingslib.HelpUtils;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.google.android.setupcompat.item.FooterButton;
import com.google.android.setupcompat.template.ButtonFooterMixin;
import com.google.android.setupdesign.span.LinkSpan;
public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
@@ -45,6 +46,25 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mFingerprintManager = Utils.getFingerprintManagerOrNull(this);
mButtonFooterMixin = getLayout().getMixin(ButtonFooterMixin.class);
mButtonFooterMixin.setSecondaryButton(
new FooterButton(
this,
R.string.security_settings_face_enroll_introduction_cancel,
this::onCancelButtonClick,
FooterButton.ButtonType.SKIP,
R.style.SuwGlifButton_Secondary)
);
mButtonFooterMixin.setPrimaryButton(
new FooterButton(
this,
R.string.wizard_next,
this::onNextButtonClick,
FooterButton.ButtonType.NEXT,
R.style.SuwGlifButton_Primary)
);
}
@Override
@@ -74,13 +94,19 @@ public class FingerprintEnrollIntroduction extends BiometricEnrollIntroduction {
}
@Override
protected Button getCancelButton() {
return findViewById(R.id.fingerprint_cancel_button);
protected FooterButton getCancelButton() {
if (mButtonFooterMixin != null) {
return mButtonFooterMixin.getSecondaryButton();
}
return null;
}
@Override
protected Button getNextButton() {
return findViewById(R.id.fingerprint_next_button);
protected FooterButton getNextButton() {
if (mButtonFooterMixin != null) {
return mButtonFooterMixin.getPrimaryButton();
}
return null;
}
@Override

View File

@@ -19,19 +19,21 @@ package com.android.settings.biometrics.fingerprint;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.hardware.fingerprint.FingerprintManager;
import android.widget.Button;
import com.android.settings.R;
import com.android.settings.Utils;
import com.google.android.setupcompat.item.FooterButton;
public class FingerprintSuggestionActivity extends SetupFingerprintEnrollIntroduction {
@Override
protected void initViews() {
super.initViews();
final Button cancelButton = findViewById(R.id.fingerprint_cancel_button);
cancelButton.setText(R.string.security_settings_fingerprint_enroll_introduction_cancel);
final FooterButton cancelButton = getCancelButton();
cancelButton.setText(
this, R.string.security_settings_fingerprint_enroll_introduction_cancel);
}
@Override

View File

@@ -22,6 +22,7 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
@@ -53,7 +54,7 @@ public class SetupFingerprintEnrollFindSensor extends FingerprintEnrollFindSenso
}
@Override
protected void onSkipButtonClick() {
protected void onSkipButtonClick(View view) {
new SkipFingerprintDialog().show(getSupportFragmentManager());
}

View File

@@ -25,6 +25,8 @@ import com.android.settings.R;
import com.android.settings.SetupWizardUtils;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.google.android.setupcompat.item.FooterButton;
public class SetupFingerprintEnrollFinish extends FingerprintEnrollFinish {
@Override
@@ -41,8 +43,8 @@ public class SetupFingerprintEnrollFinish extends FingerprintEnrollFinish {
@Override
protected void initViews() {
super.initViews();
Button nextButton = findViewById(R.id.next_button);
nextButton.setText(R.string.next_label);
FooterButton nextButton = getNextButton();
nextButton.setText(this, R.string.next_label);
}
@Override

View File

@@ -23,7 +23,7 @@ import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.storage.StorageManager;
import android.widget.Button;
import android.view.View;
import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -34,6 +34,8 @@ import com.android.settings.password.ChooseLockGeneric.ChooseLockGenericFragment
import com.android.settings.password.SetupChooseLockGeneric;
import com.android.settings.password.SetupSkipDialog;
import com.google.android.setupcompat.item.FooterButton;
public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntroduction {
private static final String KEY_LOCK_SCREEN_PRESENT = "wasLockScreenPresent";
private boolean mAlreadyHadLockScreenSetup = false;
@@ -84,13 +86,13 @@ public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntrodu
description.setText(
R.string.security_settings_fingerprint_enroll_introduction_message_setup);
Button nextButton = getNextButton();
FooterButton nextButton = getNextButton();
nextButton.setText(
R.string.security_settings_fingerprint_enroll_introduction_continue_setup);
this, R.string.security_settings_fingerprint_enroll_introduction_continue_setup);
final Button cancelButton = (Button) findViewById(R.id.fingerprint_cancel_button);
final FooterButton cancelButton = getCancelButton();
cancelButton.setText(
R.string.security_settings_fingerprint_enroll_introduction_cancel_setup);
this, R.string.security_settings_fingerprint_enroll_introduction_cancel_setup);
}
@Override
@@ -116,7 +118,7 @@ public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntrodu
}
@Override
protected void onCancelButtonClick() {
protected void onCancelButtonClick(View view) {
if (isKeyguardSecure()) {
// If the keyguard is already set up securely (maybe the user added a backup screen
// lock and skipped fingerprint), return RESULT_SKIP directly.

View File

@@ -21,8 +21,7 @@
android:id="@+id/setup_wizard_layout"
style="?attr/fingerprint_layout_theme"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:sucFooter="@layout/fingerprint_enroll_find_sensor_base_footer">
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"

View File

@@ -37,6 +37,9 @@ import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowUtils;
import com.google.android.setupcompat.PartnerCustomizationLayout;
import com.google.android.setupcompat.template.ButtonFooterMixin;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -133,8 +136,8 @@ public class FingerprintEnrollFindSensorTest {
@Test
public void clickSkip_shouldReturnResultSkip() {
Button skipButton = mActivity.findViewById(R.id.skip_button);
skipButton.performClick();
PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().performClick();
ShadowActivity shadowActivity = Shadows.shadowOf(mActivity);
assertThat(shadowActivity.getResultCode()).named("result code")

View File

@@ -31,6 +31,9 @@ import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.google.android.setupcompat.PartnerCustomizationLayout;
import com.google.android.setupcompat.template.ButtonFooterMixin;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -62,7 +65,10 @@ public class FingerprintSuggestionActivityTest {
mController.create().resume();
final Button cancelButton = mController.get().findViewById(R.id.fingerprint_cancel_button);
PartnerCustomizationLayout layout =
mController.get().findViewById(R.id.setup_wizard_layout);
final Button cancelButton =
layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
assertThat(cancelButton.getText().toString()).isEqualTo("Cancel");
assertThat(cancelButton.getVisibility()).named("Cancel visible").isEqualTo(View.VISIBLE);
cancelButton.performClick();

View File

@@ -32,6 +32,9 @@ import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.testutils.shadow.ShadowUtils;
import com.google.android.setupcompat.PartnerCustomizationLayout;
import com.google.android.setupcompat.template.ButtonFooterMixin;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -71,8 +74,8 @@ public class SetupFingerprintEnrollFindSensorTest {
Robolectric.buildActivity(SetupFingerprintEnrollFindSensor.class,
intent).setup().get();
final Button skipButton = activity.findViewById(R.id.skip_button);
skipButton.performClick();
PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView().performClick();
final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
assertThat(alertDialog).isNotNull();

View File

@@ -37,6 +37,9 @@ import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
import com.android.settings.testutils.shadow.ShadowStorageManager;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.google.android.setupcompat.PartnerCustomizationLayout;
import com.google.android.setupcompat.template.ButtonFooterMixin;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -83,7 +86,10 @@ public class SetupFingerprintEnrollIntroductionTest {
mController.create().resume();
final Button skipButton = mController.get().findViewById(R.id.fingerprint_cancel_button);
PartnerCustomizationLayout layout =
mController.get().findViewById(R.id.setup_wizard_layout);
final Button skipButton =
layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
assertThat(skipButton.getVisibility()).named("Skip visible").isEqualTo(View.VISIBLE);
skipButton.performClick();
@@ -99,7 +105,10 @@ public class SetupFingerprintEnrollIntroductionTest {
mController.create().resume();
final Button skipButton = mController.get().findViewById(R.id.fingerprint_cancel_button);
PartnerCustomizationLayout layout =
mController.get().findViewById(R.id.setup_wizard_layout);
final Button skipButton =
layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
assertThat(skipButton.getVisibility()).named("Skip visible").isEqualTo(View.VISIBLE);
skipButton.performClick();
@@ -141,7 +150,9 @@ public class SetupFingerprintEnrollIntroductionTest {
getShadowKeyguardManager().setIsKeyguardSecure(false);
SetupFingerprintEnrollIntroduction activity = mController.create().resume().get();
final Button skipButton = activity.findViewById(R.id.fingerprint_cancel_button);
PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
final Button skipButton =
layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
getShadowKeyguardManager().setIsKeyguardSecure(true);
skipButton.performClick();
@@ -156,7 +167,9 @@ public class SetupFingerprintEnrollIntroductionTest {
getShadowKeyguardManager().setIsKeyguardSecure(true);
SetupFingerprintEnrollIntroduction activity = mController.create().resume().get();
final Button skipButton = activity.findViewById(R.id.fingerprint_cancel_button);
PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
final Button skipButton =
layout.getMixin(ButtonFooterMixin.class).getSecondaryButtonView();
skipButton.performClick();
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
@@ -199,8 +212,9 @@ public class SetupFingerprintEnrollIntroductionTest {
SetupFingerprintEnrollIntroduction activity = mController.get();
final Button nextButton = activity.findViewById(R.id.fingerprint_next_button);
nextButton.performClick();
PartnerCustomizationLayout layout = activity.findViewById(R.id.setup_wizard_layout);
layout.getMixin(ButtonFooterMixin.class).getPrimaryButtonView().performClick();
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
IntentForResult startedActivity = shadowActivity.getNextStartedActivityForResult();

View File

@@ -36,6 +36,9 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.settings.R;
import com.google.android.setupcompat.PartnerCustomizationLayout;
import com.google.android.setupcompat.template.ButtonFooterMixin;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -57,7 +60,9 @@ public class FingerprintEnrollFinishTest {
intending(hasComponent(enrollingComponent))
.respondWith(new ActivityResult(Activity.RESULT_CANCELED, null));
onView(withId(R.id.add_another_button)).perform(click());
PartnerCustomizationLayout layout =
mActivityRule.getActivity().findViewById(R.id.setup_wizard_layout);
layout.getMixin(ButtonFooterMixin.class).getPrimaryButtonView().performClick();
intended(hasComponent(enrollingComponent));
assertFalse(mActivityRule.getActivity().isFinishing());
@@ -72,7 +77,9 @@ public class FingerprintEnrollFinishTest {
intending(hasComponent(enrollingComponent))
.respondWith(new ActivityResult(Activity.RESULT_OK, null));
onView(withId(R.id.add_another_button)).perform(click());
PartnerCustomizationLayout layout =
mActivityRule.getActivity().findViewById(R.id.setup_wizard_layout);
layout.getMixin(ButtonFooterMixin.class).getPrimaryButtonView().performClick();
intended(hasComponent(enrollingComponent));
assertTrue(mActivityRule.getActivity().isFinishing());

View File

@@ -32,6 +32,9 @@ import android.widget.TextView;
import com.android.settings.R;
import com.google.android.setupcompat.PartnerCustomizationLayout;
import com.google.android.setupcompat.template.ButtonFooterMixin;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -80,7 +83,8 @@ public class FingerprintEnrollIntroductionTest
final TextView errorTextView = (TextView) mActivity.findViewById(R.id.error_text);
assertNotNull(errorTextView.getText().toString());
final Button nextButton = (Button) mActivity.findViewById(R.id.fingerprint_next_button);
PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
final Button nextButton = layout.getMixin(ButtonFooterMixin.class).getPrimaryButtonView();
assertEquals(View.GONE, nextButton.getVisibility());
}