Fix FingerprintEnrollIntroFragment buttons

1. Fix FingerprintEnrollIntroFragment button status not sync after
   rotation.
2. Finetune code orders in FingerprintEnrollmentActivity.onCreate(),
3. Refine some API names and java doc

Bug: 260205364
Test: atest AutoCredentialViewModelTest
            FingerprintEnrollIntroViewModelTest
Test: Manually test rotation with different display size
Change-Id: Ib992e10a1c90e3bbac6cf73114df4e96b5ab0a03
This commit is contained in:
Milton Wu
2022-11-23 13:33:23 +08:00
parent 0514e9a96a
commit 505be79cc5
6 changed files with 150 additions and 140 deletions

View File

@@ -44,6 +44,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.ViewModelProvider;
import com.android.settings.R;
@@ -120,15 +121,6 @@ public class FingerprintEnrollIntroFragment extends Fragment {
footerTitle2.setText(
R.string.security_settings_fingerprint_enroll_introduction_footer_title_2);
return mView;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final Context context = view.getContext();
final TextView footerLink = mView.findViewById(R.id.footer_learn_more);
footerLink.setMovementMethod(LinkMovementMethod.getInstance());
final String footerLinkStr = getContext().getString(
@@ -139,18 +131,28 @@ public class FingerprintEnrollIntroFragment extends Fragment {
// footer buttons
mPrimaryFooterButton = new FooterButton.Builder(context)
.setText(R.string.security_settings_fingerprint_enroll_introduction_agree)
.setListener(mViewModel::onNextButtonClick)
.setButtonType(FooterButton.ButtonType.OPT_IN)
.setTheme(R.style.SudGlifButton_Primary)
.build();
mSecondaryFooterButton = new FooterButton.Builder(context)
.setListener(mViewModel::onSkipOrCancelButtonClick)
.setButtonType(FooterButton.ButtonType.NEXT)
.setTheme(R.style.SudGlifButton_Primary)
.build();
getFooterBarMixin().setPrimaryButton(mPrimaryFooterButton);
getFooterBarMixin().setSecondaryButton(mSecondaryFooterButton, true /* usePrimaryStyle */);
return mView;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
final Context context = view.getContext();
mPrimaryFooterButton.setOnClickListener(mViewModel::onNextButtonClick);
mSecondaryFooterButton.setOnClickListener(mViewModel::onSkipOrCancelButtonClick);
if (mViewModel.canAssumeUdfps()) {
mFooterMessage6.setVisibility(View.VISIBLE);
mIconShield.setVisibility(View.VISIBLE);
@@ -158,7 +160,7 @@ public class FingerprintEnrollIntroFragment extends Fragment {
mFooterMessage6.setVisibility(View.GONE);
mIconShield.setVisibility(View.GONE);
}
mSecondaryFooterButton.setText(getContext(),
mSecondaryFooterButton.setText(context,
mViewModel.getEnrollmentRequest().isAfterSuwOrSuwSuggestedAction()
? R.string.security_settings_fingerprint_enroll_introduction_cancel
: R.string.security_settings_fingerprint_enroll_introduction_no_thanks);
@@ -174,18 +176,31 @@ public class FingerprintEnrollIntroFragment extends Fragment {
setHeaderText(getActivity(),
R.string.security_settings_fingerprint_enroll_introduction_title);
}
observePageStatusLiveDataIfNeed();
}
mViewModel.getPageStatusLiveData().observe(this, this::updateFooterButtons);
private void observePageStatusLiveDataIfNeed() {
final LiveData<FingerprintEnrollIntroStatus> statusLiveData =
mViewModel.getPageStatusLiveData();
final FingerprintEnrollIntroStatus status = statusLiveData.getValue();
if (status != null && status.hasScrollToBottom()) {
// Do not requireScrollWithButton() again when "I agree" or "Done" button is visible,
// because if we requireScrollWithButton() again, it will become "More" after scroll-up.
return;
}
final RequireScrollMixin requireScrollMixin = getLayout()
.getMixin(RequireScrollMixin.class);
requireScrollMixin.requireScrollWithButton(getActivity(), mPrimaryFooterButton,
getMoreButtonTextRes(), mViewModel::onNextButtonClick);
requireScrollMixin.setOnRequireScrollStateChangedListener(scrollNeeded -> {
if (!scrollNeeded) {
mViewModel.setHasScrolledToBottom();
}
});
// Always set true to setHasScrolledToBottom() before registering listener through
// setOnRequireScrollStateChangedListener(), because listener will not be called if first
// scrollNeeded is true
mViewModel.setHasScrolledToBottom(true);
requireScrollMixin.setOnRequireScrollStateChangedListener(
scrollNeeded -> mViewModel.setHasScrolledToBottom(!scrollNeeded));
statusLiveData.observe(this, this::updateFooterButtons);
}
@Override