Merge "Attach FingerprintEnrollFinishFragment to activity"
This commit is contained in:
committed by
Android (Google) Code Review
commit
3f7cdbf12b
@@ -47,7 +47,7 @@ public class FingerprintEnrollFinish extends BiometricEnrollBase {
|
|||||||
private static final String ACTION_FINGERPRINT_SETTINGS =
|
private static final String ACTION_FINGERPRINT_SETTINGS =
|
||||||
"android.settings.FINGERPRINT_SETTINGS";
|
"android.settings.FINGERPRINT_SETTINGS";
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final String FINGERPRINT_SUGGESTION_ACTIVITY =
|
public static final String FINGERPRINT_SUGGESTION_ACTIVITY =
|
||||||
"com.android.settings.SetupFingerprintSuggestionActivity";
|
"com.android.settings.SetupFingerprintSuggestionActivity";
|
||||||
|
|
||||||
private FingerprintManager mFingerprintManager;
|
private FingerprintManager mFingerprintManager;
|
||||||
|
@@ -1,43 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2023 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.biometrics2.data.repository;
|
|
||||||
|
|
||||||
import android.annotation.NonNull;
|
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This repository is used to call all APIs in {@link PackageManager}
|
|
||||||
*/
|
|
||||||
public class PackageManagerRepository {
|
|
||||||
|
|
||||||
private final PackageManager mPackageManager;
|
|
||||||
|
|
||||||
public PackageManagerRepository(PackageManager packageManager) {
|
|
||||||
mPackageManager = packageManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the enabled setting for a package component (activity, receiver, service, provider).
|
|
||||||
* This setting will override any enabled state which may have been set by the component in its
|
|
||||||
* manifest.
|
|
||||||
*/
|
|
||||||
public void setComponentEnabledSetting(@NonNull ComponentName componentName,
|
|
||||||
@PackageManager.EnabledState int newState, @PackageManager.EnabledFlags int flags) {
|
|
||||||
mPackageManager.setComponentEnabledSetting(componentName, newState, flags);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -17,7 +17,6 @@
|
|||||||
package com.android.settings.biometrics2.factory;
|
package com.android.settings.biometrics2.factory;
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
import android.app.KeyguardManager;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
@@ -38,6 +37,7 @@ import com.android.settings.biometrics2.ui.viewmodel.DeviceFoldedViewModel;
|
|||||||
import com.android.settings.biometrics2.ui.viewmodel.DeviceRotationViewModel;
|
import com.android.settings.biometrics2.ui.viewmodel.DeviceRotationViewModel;
|
||||||
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel;
|
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel;
|
||||||
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel;
|
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel;
|
||||||
|
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFinishViewModel;
|
||||||
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollIntroViewModel;
|
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollIntroViewModel;
|
||||||
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollProgressViewModel;
|
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollProgressViewModel;
|
||||||
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollmentViewModel;
|
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollmentViewModel;
|
||||||
@@ -103,8 +103,7 @@ public class BiometricsViewModelFactory implements ViewModelProvider.Factory {
|
|||||||
final FingerprintRepository repository = provider.getFingerprintRepository(application);
|
final FingerprintRepository repository = provider.getFingerprintRepository(application);
|
||||||
final EnrollmentRequest request = extras.get(ENROLLMENT_REQUEST_KEY);
|
final EnrollmentRequest request = extras.get(ENROLLMENT_REQUEST_KEY);
|
||||||
if (repository != null && request != null) {
|
if (repository != null && request != null) {
|
||||||
return (T) new FingerprintEnrollmentViewModel(application, repository,
|
return (T) new FingerprintEnrollmentViewModel(application, repository, request);
|
||||||
application.getSystemService(KeyguardManager.class), request);
|
|
||||||
}
|
}
|
||||||
} else if (modelClass.isAssignableFrom(FingerprintEnrollProgressViewModel.class)) {
|
} else if (modelClass.isAssignableFrom(FingerprintEnrollProgressViewModel.class)) {
|
||||||
final Integer userId = extras.get(USER_ID_KEY);
|
final Integer userId = extras.get(USER_ID_KEY);
|
||||||
@@ -123,6 +122,15 @@ public class BiometricsViewModelFactory implements ViewModelProvider.Factory {
|
|||||||
return (T) new FingerprintEnrollEnrollingViewModel(application, userId, fingerprint,
|
return (T) new FingerprintEnrollEnrollingViewModel(application, userId, fingerprint,
|
||||||
accessibility, vibrator);
|
accessibility, vibrator);
|
||||||
}
|
}
|
||||||
|
} else if (modelClass.isAssignableFrom(FingerprintEnrollFinishViewModel.class)) {
|
||||||
|
final Integer userId = extras.get(USER_ID_KEY);
|
||||||
|
final EnrollmentRequest request = extras.get(ENROLLMENT_REQUEST_KEY);
|
||||||
|
final FingerprintRepository fingerprint = provider.getFingerprintRepository(
|
||||||
|
application);
|
||||||
|
if (fingerprint != null && userId != null) {
|
||||||
|
return (T) new FingerprintEnrollFinishViewModel(application, userId, request,
|
||||||
|
fingerprint);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return create(modelClass);
|
return create(modelClass);
|
||||||
}
|
}
|
||||||
|
@@ -26,7 +26,6 @@ import android.view.ViewGroup;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentActivity;
|
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
@@ -36,37 +35,23 @@ import com.google.android.setupcompat.template.FooterBarMixin;
|
|||||||
import com.google.android.setupcompat.template.FooterButton;
|
import com.google.android.setupcompat.template.FooterButton;
|
||||||
import com.google.android.setupdesign.GlifLayout;
|
import com.google.android.setupdesign.GlifLayout;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fragment which concludes fingerprint enrollment.
|
* Fragment which concludes fingerprint enrollment.
|
||||||
*/
|
*/
|
||||||
public class FingerprintEnrollFinishFragment extends Fragment {
|
public class FingerprintEnrollFinishFragment extends Fragment {
|
||||||
|
|
||||||
private static final String TAG = FingerprintEnrollFinishFragment.class.getSimpleName();
|
private FingerprintEnrollFinishViewModel mViewModel;
|
||||||
|
|
||||||
private FingerprintEnrollFinishViewModel mFingerprintEnrollFinishViewModel;
|
|
||||||
private boolean mCanAssumeSfps;
|
|
||||||
|
|
||||||
private View mView;
|
|
||||||
private FooterBarMixin mFooterBarMixin;
|
|
||||||
|
|
||||||
private final View.OnClickListener mAddButtonClickListener =
|
private final View.OnClickListener mAddButtonClickListener =
|
||||||
(v) -> mFingerprintEnrollFinishViewModel.onAddButtonClick();
|
(v) -> mViewModel.onAddButtonClick();
|
||||||
private final View.OnClickListener mNextButtonClickListener =
|
private final View.OnClickListener mNextButtonClickListener =
|
||||||
(v) -> mFingerprintEnrollFinishViewModel.onNextButtonClick();
|
(v) -> mViewModel.onNextButtonClick();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(@NonNull Context context) {
|
public void onAttach(@NonNull Context context) {
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
final FragmentActivity activity = getActivity();
|
final ViewModelProvider provider = new ViewModelProvider(getActivity());
|
||||||
final ViewModelProvider provider = new ViewModelProvider(activity);
|
mViewModel = provider.get(FingerprintEnrollFinishViewModel.class);
|
||||||
mFingerprintEnrollFinishViewModel = provider.get(FingerprintEnrollFinishViewModel.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
mCanAssumeSfps = mFingerprintEnrollFinishViewModel.canAssumeSfps();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -74,55 +59,45 @@ public class FingerprintEnrollFinishFragment extends Fragment {
|
|||||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
|
||||||
@Nullable Bundle savedInstanceState) {
|
@Nullable Bundle savedInstanceState) {
|
||||||
|
|
||||||
if (mCanAssumeSfps) {
|
GlifLayout view = (GlifLayout) inflater.inflate(
|
||||||
mView = inflater.inflate(R.layout.sfps_enroll_finish, container, false);
|
mViewModel.canAssumeSfps()
|
||||||
} else {
|
? R.layout.sfps_enroll_finish
|
||||||
mView = inflater.inflate(R.layout.fingerprint_enroll_finish, container, false);
|
: R.layout.fingerprint_enroll_finish,
|
||||||
}
|
container,
|
||||||
|
false);
|
||||||
|
|
||||||
final Activity activity = getActivity();
|
final Activity activity = getActivity();
|
||||||
final GlifLayoutHelper glifLayoutHelper = new GlifLayoutHelper(activity,
|
final GlifLayoutHelper glifLayoutHelper = new GlifLayoutHelper(activity, view);
|
||||||
(GlifLayout) mView);
|
|
||||||
|
|
||||||
glifLayoutHelper.setHeaderText(R.string.security_settings_fingerprint_enroll_finish_title);
|
glifLayoutHelper.setHeaderText(R.string.security_settings_fingerprint_enroll_finish_title);
|
||||||
glifLayoutHelper.setDescriptionText(getString(
|
if (mViewModel.canAssumeSfps() && mViewModel.isAnotherFingerprintEnrollable()) {
|
||||||
R.string.security_settings_fingerprint_enroll_finish_v2_message));
|
|
||||||
|
|
||||||
final int maxEnrollments = mFingerprintEnrollFinishViewModel.getMaxFingerprints();
|
|
||||||
final int enrolled = mFingerprintEnrollFinishViewModel.getNumOfEnrolledFingerprintsSize();
|
|
||||||
if (mCanAssumeSfps) {
|
|
||||||
if (enrolled < maxEnrollments) {
|
|
||||||
glifLayoutHelper.setDescriptionText(getString(R.string
|
glifLayoutHelper.setDescriptionText(getString(R.string
|
||||||
.security_settings_fingerprint_enroll_finish_v2_add_fingerprint_message));
|
.security_settings_fingerprint_enroll_finish_v2_add_fingerprint_message));
|
||||||
}
|
} else {
|
||||||
|
glifLayoutHelper.setDescriptionText(getString(
|
||||||
|
R.string.security_settings_fingerprint_enroll_finish_v2_message));
|
||||||
}
|
}
|
||||||
|
|
||||||
mFooterBarMixin = ((GlifLayout) mView).getMixin(FooterBarMixin.class);
|
final FooterBarMixin footerBarMixin = view.getMixin(FooterBarMixin.class);
|
||||||
mFooterBarMixin.setSecondaryButton(
|
footerBarMixin.setPrimaryButton(
|
||||||
new FooterButton.Builder(getActivity())
|
new FooterButton.Builder(activity)
|
||||||
.setText(R.string.fingerprint_enroll_button_add)
|
.setText(mViewModel.getRequest().isSuw()
|
||||||
.setButtonType(FooterButton.ButtonType.SKIP)
|
? R.string.next_label
|
||||||
.setTheme(R.style.SudGlifButton_Secondary)
|
: R.string.security_settings_fingerprint_enroll_done)
|
||||||
.build()
|
|
||||||
);
|
|
||||||
|
|
||||||
mFooterBarMixin.setPrimaryButton(
|
|
||||||
new FooterButton.Builder(getActivity())
|
|
||||||
.setText(R.string.security_settings_fingerprint_enroll_done)
|
|
||||||
.setListener(mNextButtonClickListener)
|
.setListener(mNextButtonClickListener)
|
||||||
.setButtonType(FooterButton.ButtonType.NEXT)
|
.setButtonType(FooterButton.ButtonType.NEXT)
|
||||||
.setTheme(R.style.SudGlifButton_Primary)
|
.setTheme(R.style.SudGlifButton_Primary)
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
|
if (mViewModel.isAnotherFingerprintEnrollable()) {
|
||||||
FooterButton addButton = mFooterBarMixin.getSecondaryButton();
|
footerBarMixin.setSecondaryButton(new FooterButton.Builder(activity)
|
||||||
if (enrolled >= maxEnrollments) {
|
.setText(R.string.fingerprint_enroll_button_add)
|
||||||
addButton.setVisibility(View.INVISIBLE);
|
.setListener(mAddButtonClickListener)
|
||||||
} else {
|
.setButtonType(FooterButton.ButtonType.SKIP)
|
||||||
addButton.setOnClickListener(mAddButtonClickListener);
|
.setTheme(R.style.SudGlifButton_Secondary)
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
return mView;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -40,6 +40,9 @@ import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFin
|
|||||||
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel.FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_SKIP;
|
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel.FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_SKIP;
|
||||||
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel.FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_START;
|
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel.FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_START;
|
||||||
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel.FingerprintEnrollFindSensorAction;
|
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel.FingerprintEnrollFindSensorAction;
|
||||||
|
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFinishViewModel.FINGERPRINT_ENROLL_FINISH_ACTION_ADD_BUTTON_CLICK;
|
||||||
|
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFinishViewModel.FINGERPRINT_ENROLL_FINISH_ACTION_NEXT_BUTTON_CLICK;
|
||||||
|
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFinishViewModel.FingerprintEnrollFinishAction;
|
||||||
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollIntroViewModel.FINGERPRINT_ENROLL_INTRO_ACTION_CONTINUE_ENROLL;
|
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollIntroViewModel.FINGERPRINT_ENROLL_INTRO_ACTION_CONTINUE_ENROLL;
|
||||||
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollIntroViewModel.FINGERPRINT_ENROLL_INTRO_ACTION_DONE_AND_FINISH;
|
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollIntroViewModel.FINGERPRINT_ENROLL_INTRO_ACTION_DONE_AND_FINISH;
|
||||||
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollIntroViewModel.FINGERPRINT_ENROLL_INTRO_ACTION_SKIP_OR_CANCEL;
|
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollIntroViewModel.FINGERPRINT_ENROLL_INTRO_ACTION_SKIP_OR_CANCEL;
|
||||||
@@ -73,8 +76,6 @@ import androidx.lifecycle.viewmodel.MutableCreationExtras;
|
|||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.biometrics.BiometricEnrollBase;
|
import com.android.settings.biometrics.BiometricEnrollBase;
|
||||||
import com.android.settings.biometrics.fingerprint.FingerprintEnrollFinish;
|
|
||||||
import com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollFinish;
|
|
||||||
import com.android.settings.biometrics2.data.repository.FingerprintRepository;
|
import com.android.settings.biometrics2.data.repository.FingerprintRepository;
|
||||||
import com.android.settings.biometrics2.factory.BiometricsViewModelFactory;
|
import com.android.settings.biometrics2.factory.BiometricsViewModelFactory;
|
||||||
import com.android.settings.biometrics2.ui.model.CredentialModel;
|
import com.android.settings.biometrics2.ui.model.CredentialModel;
|
||||||
@@ -84,6 +85,7 @@ import com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel.Fin
|
|||||||
import com.android.settings.biometrics2.ui.viewmodel.DeviceFoldedViewModel;
|
import com.android.settings.biometrics2.ui.viewmodel.DeviceFoldedViewModel;
|
||||||
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel;
|
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollEnrollingViewModel;
|
||||||
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel;
|
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel;
|
||||||
|
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFinishViewModel;
|
||||||
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollIntroViewModel;
|
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollIntroViewModel;
|
||||||
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollProgressViewModel;
|
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollProgressViewModel;
|
||||||
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollmentViewModel;
|
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollmentViewModel;
|
||||||
@@ -156,11 +158,14 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
|
|||||||
onEnrollingErrorDialogAction(action);
|
onEnrollingErrorDialogAction(action);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
private final ActivityResultCallback<ActivityResult> mNextActivityResultCallback =
|
private final Observer<Integer> mFinishActionObserver = action -> {
|
||||||
result -> mViewModel.onContinueEnrollActivityResult(result,
|
if (DEBUG) {
|
||||||
mAutoCredentialViewModel.getUserId());
|
Log.d(TAG, "mFinishActionObserver(" + action + ")");
|
||||||
private final ActivityResultLauncher<Intent> mNextActivityLauncher =
|
}
|
||||||
registerForActivityResult(new StartActivityForResult(), mNextActivityResultCallback);
|
if (action != null) {
|
||||||
|
onFinishAction(action);
|
||||||
|
}
|
||||||
|
};
|
||||||
private final ActivityResultCallback<ActivityResult> mChooseLockResultCallback =
|
private final ActivityResultCallback<ActivityResult> mChooseLockResultCallback =
|
||||||
result -> onChooseOrConfirmLockResult(true /* isChooseLock */, result);
|
result -> onChooseOrConfirmLockResult(true /* isChooseLock */, result);
|
||||||
private final ActivityResultLauncher<Intent> mChooseLockLauncher =
|
private final ActivityResultLauncher<Intent> mChooseLockLauncher =
|
||||||
@@ -195,6 +200,7 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
|
|||||||
} else {
|
} else {
|
||||||
final FragmentManager manager = getSupportFragmentManager();
|
final FragmentManager manager = getSupportFragmentManager();
|
||||||
String[] tags = new String[] {
|
String[] tags = new String[] {
|
||||||
|
FINISH_TAG,
|
||||||
ENROLLING_UDFPS_TAG,
|
ENROLLING_UDFPS_TAG,
|
||||||
ENROLLING_SFPS_TAG,
|
ENROLLING_SFPS_TAG,
|
||||||
ENROLLING_RFPS_TAG,
|
ENROLLING_RFPS_TAG,
|
||||||
@@ -217,10 +223,15 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
|
|||||||
|| tag.equals(FIND_RFPS_TAG)) {
|
|| tag.equals(FIND_RFPS_TAG)) {
|
||||||
attachFindSensorViewModel();
|
attachFindSensorViewModel();
|
||||||
attachIntroViewModel();
|
attachIntroViewModel();
|
||||||
} else { // ENROLLING_UDFPS_TAG, ENROLLING_SFPS_TAG, ENROLLING_RFPS_TAG
|
} else if (tag.equals(ENROLLING_UDFPS_TAG) || tag.equals(ENROLLING_SFPS_TAG)
|
||||||
|
|| tag.equals(ENROLLING_RFPS_TAG)) {
|
||||||
attachEnrollingViewModel();
|
attachEnrollingViewModel();
|
||||||
attachFindSensorViewModel();
|
attachFindSensorViewModel();
|
||||||
attachIntroViewModel();
|
attachIntroViewModel();
|
||||||
|
} else { // FINISH_TAG
|
||||||
|
attachFinishViewModel();
|
||||||
|
attachFindSensorViewModel();
|
||||||
|
attachIntroViewModel();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -330,59 +341,37 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
|
|||||||
mEnrollingErrorDialogActionObserver);
|
mEnrollingErrorDialogActionObserver);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startFinishActivity() {
|
private void startFinishFragment() {
|
||||||
final FingerprintEnrollEnrollingViewModel enrollingViewModel =
|
attachFinishViewModel();
|
||||||
mViewModelProvider.get(FingerprintEnrollEnrollingViewModel.class);
|
|
||||||
enrollingViewModel.clearActionLiveData();
|
|
||||||
|
|
||||||
final boolean isSuw = mViewModel.getRequest().isSuw();
|
getSupportFragmentManager().beginTransaction()
|
||||||
if (!mViewModel.isWaitingActivityResult().compareAndSet(false, true)) {
|
.setReorderingAllowed(true)
|
||||||
Log.w(TAG, "startNext, isSuw:" + isSuw + ", fail to set isWaiting flag");
|
.setCustomAnimations(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out,
|
||||||
|
R.anim.sud_slide_back_in, R.anim.sud_slide_back_out)
|
||||||
|
.replace(R.id.fragment_container_view, FingerprintEnrollFinishFragment.class, null,
|
||||||
|
FINISH_TAG)
|
||||||
|
.addToBackStack(FINISH_TAG)
|
||||||
|
.commit();
|
||||||
}
|
}
|
||||||
Intent intent = new Intent(this, isSuw
|
|
||||||
? SetupFingerprintEnrollFinish.class
|
private void attachFinishViewModel() {
|
||||||
: FingerprintEnrollFinish.class);
|
final FingerprintEnrollFinishViewModel viewModel =
|
||||||
intent.putExtras(mAutoCredentialViewModel.createCredentialIntentExtra());
|
mViewModelProvider.get(FingerprintEnrollFinishViewModel.class);
|
||||||
intent.putExtras(mViewModel.getNextActivityBaseIntentExtras());
|
viewModel.clearActionLiveData();
|
||||||
mNextActivityLauncher.launch(intent);
|
viewModel.getActionLiveData().observe(this, mFinishActionObserver);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onGenerateChallengeFailed(@NonNull Boolean ignoredBoolean) {
|
private void onGenerateChallengeFailed(@NonNull Boolean ignoredBoolean) {
|
||||||
onSetActivityResult(new ActivityResult(RESULT_CANCELED, null));
|
onSetActivityResult(new ActivityResult(RESULT_CANCELED, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get intent which passing back to FingerprintSettings for late generateChallenge()
|
|
||||||
*/
|
|
||||||
@Nullable
|
|
||||||
private Intent createSetResultIntentWithGeneratingChallengeExtra(
|
|
||||||
@Nullable Intent activityResultIntent) {
|
|
||||||
if (!mViewModel.getRequest().isFromSettingsSummery()) {
|
|
||||||
return activityResultIntent;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Bundle extra = mAutoCredentialViewModel.createGeneratingChallengeExtras();
|
|
||||||
if (extra != null) {
|
|
||||||
if (activityResultIntent == null) {
|
|
||||||
activityResultIntent = new Intent();
|
|
||||||
}
|
|
||||||
activityResultIntent.putExtras(extra);
|
|
||||||
}
|
|
||||||
return activityResultIntent;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onSetActivityResult(@NonNull ActivityResult result) {
|
private void onSetActivityResult(@NonNull ActivityResult result) {
|
||||||
final int resultCode = mViewModel.getRequest().isAfterSuwOrSuwSuggestedAction()
|
final ActivityResult overrideResult = mViewModel.getOverrideActivityResult(
|
||||||
? RESULT_CANCELED
|
result, mAutoCredentialViewModel.createGeneratingChallengeExtras());
|
||||||
: result.getResultCode();
|
|
||||||
final Intent intent = resultCode == BiometricEnrollBase.RESULT_FINISHED
|
|
||||||
? createSetResultIntentWithGeneratingChallengeExtra(result.getData())
|
|
||||||
: result.getData();
|
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "onSetActivityResult(" + result + "), call setResult(" + resultCode
|
Log.d(TAG, "onSetActivityResult(" + result + "), override:" + overrideResult + ")");
|
||||||
+ ", " + intent + ")");
|
|
||||||
}
|
}
|
||||||
setResult(resultCode, intent);
|
setResult(overrideResult.getResultCode(), overrideResult.getData());
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -471,7 +460,12 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
|
|||||||
private void onEnrollingAction(@FingerprintEnrollEnrollingAction int action) {
|
private void onEnrollingAction(@FingerprintEnrollEnrollingAction int action) {
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case FINGERPRINT_ENROLL_ENROLLING_ACTION_DONE: {
|
case FINGERPRINT_ENROLL_ENROLLING_ACTION_DONE: {
|
||||||
startFinishActivity();
|
mViewModel.setIsNewFingerprintAdded();
|
||||||
|
|
||||||
|
// Remove Enrolling page from backstack, and add Finish page. Latest backstack will
|
||||||
|
// be changed from Intro->FindSensor->Enrolling to Intro->FindSensor->Finish
|
||||||
|
getSupportFragmentManager().popBackStack();
|
||||||
|
startFinishFragment();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FINGERPRINT_ENROLL_ENROLLING_ACTION_SKIP: {
|
case FINGERPRINT_ENROLL_ENROLLING_ACTION_SKIP: {
|
||||||
@@ -488,7 +482,18 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FINGERPRINT_ENROLL_ENROLLING_CANCELED_BECAUSE_BACK_PRESSED: {
|
case FINGERPRINT_ENROLL_ENROLLING_CANCELED_BECAUSE_BACK_PRESSED: {
|
||||||
|
if (mViewModel.isNewFingerprintAdded()) {
|
||||||
|
// Add another fingerprint case. Remove Enrolling page from
|
||||||
|
// backstack, and add Finish page. Latest backstack will be changed from
|
||||||
|
// Intro->FindSensor->Enrolling to Intro->FindSensor->Finish
|
||||||
getSupportFragmentManager().popBackStack();
|
getSupportFragmentManager().popBackStack();
|
||||||
|
startFinishFragment();
|
||||||
|
} else {
|
||||||
|
// First fingerprint case. Remove Enrolling page from backstack, and add Finish
|
||||||
|
// page. Latest backstack will be changed from
|
||||||
|
// Intro->FindSensor->Enrolling to Intro->FindSensor
|
||||||
|
getSupportFragmentManager().popBackStack();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -505,12 +510,40 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void onFinishAction(@FingerprintEnrollFinishAction int action) {
|
||||||
|
switch (action) {
|
||||||
|
case FINGERPRINT_ENROLL_FINISH_ACTION_ADD_BUTTON_CLICK: {
|
||||||
|
getSupportFragmentManager().popBackStack(); // Remove Finish page from backstack
|
||||||
|
startEnrollingFragment();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case FINGERPRINT_ENROLL_FINISH_ACTION_NEXT_BUTTON_CLICK: {
|
||||||
|
final Intent data;
|
||||||
|
if (mViewModel.getRequest().isSuw()) {
|
||||||
|
data = new Intent();
|
||||||
|
data.putExtras(mViewModel.getSuwFingerprintCountExtra(
|
||||||
|
mAutoCredentialViewModel.getUserId()));
|
||||||
|
} else {
|
||||||
|
data = null;
|
||||||
|
}
|
||||||
|
onSetActivityResult(new ActivityResult(BiometricEnrollBase.RESULT_FINISHED, data));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
super.onPause();
|
super.onPause();
|
||||||
mViewModel.checkFinishActivityDuringOnPause(isFinishing(), isChangingConfigurations());
|
mViewModel.checkFinishActivityDuringOnPause(isFinishing(), isChangingConfigurations());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
mViewModel.updateFingerprintSuggestionEnableState(mAutoCredentialViewModel.getUserId());
|
||||||
|
super.onDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onApplyThemeResource(Resources.Theme theme, @StyleRes int resid, boolean first) {
|
protected void onApplyThemeResource(Resources.Theme theme, @StyleRes int resid, boolean first) {
|
||||||
theme.applyStyle(R.style.SetupWizardPartnerResource, true);
|
theme.applyStyle(R.style.SetupWizardPartnerResource, true);
|
||||||
|
@@ -16,17 +16,20 @@
|
|||||||
|
|
||||||
package com.android.settings.biometrics2.ui.viewmodel;
|
package com.android.settings.biometrics2.ui.viewmodel;
|
||||||
|
|
||||||
|
import android.annotation.IntDef;
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
import android.content.ComponentName;
|
import android.util.Log;
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.lifecycle.AndroidViewModel;
|
import androidx.lifecycle.AndroidViewModel;
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
import com.android.settings.biometrics2.data.repository.FingerprintRepository;
|
import com.android.settings.biometrics2.data.repository.FingerprintRepository;
|
||||||
import com.android.settings.biometrics2.data.repository.PackageManagerRepository;
|
import com.android.settings.biometrics2.ui.model.EnrollmentRequest;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finish ViewModel handles the state of the fingerprint renroll final stage
|
* Finish ViewModel handles the state of the fingerprint renroll final stage
|
||||||
@@ -34,29 +37,43 @@ import com.android.settings.biometrics2.data.repository.PackageManagerRepository
|
|||||||
public class FingerprintEnrollFinishViewModel extends AndroidViewModel {
|
public class FingerprintEnrollFinishViewModel extends AndroidViewModel {
|
||||||
|
|
||||||
private static final String TAG = FingerprintEnrollFinishViewModel.class.getSimpleName();
|
private static final String TAG = FingerprintEnrollFinishViewModel.class.getSimpleName();
|
||||||
|
private static final boolean DEBUG = false;
|
||||||
|
|
||||||
private static final String FINGERPRINT_SUGGESTION_ACTIVITY =
|
/**
|
||||||
"com.android.settings.SetupFingerprintSuggestionActivity";
|
* User clicks "Add" button
|
||||||
|
*/
|
||||||
|
public static final int FINGERPRINT_ENROLL_FINISH_ACTION_ADD_BUTTON_CLICK = 0;
|
||||||
|
|
||||||
private static final int ACTION_NONE = -1;
|
/**
|
||||||
private static final int ACTION_ADD_BUTTON_CLICK = 0;
|
* User clicks "Next" button
|
||||||
private static final int ACTION_NEXT_BUTTON_CLICK = 1;
|
*/
|
||||||
|
public static final int FINGERPRINT_ENROLL_FINISH_ACTION_NEXT_BUTTON_CLICK = 1;
|
||||||
|
|
||||||
private final FingerprintRepository mFingerprintRepository;
|
@IntDef(prefix = { "FINGERPRINT_ENROLL_FINISH_ACTION_" }, value = {
|
||||||
private final PackageManagerRepository mPackageManagerRepository;
|
FINGERPRINT_ENROLL_FINISH_ACTION_ADD_BUTTON_CLICK,
|
||||||
|
FINGERPRINT_ENROLL_FINISH_ACTION_NEXT_BUTTON_CLICK
|
||||||
|
})
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
public @interface FingerprintEnrollFinishAction {}
|
||||||
|
|
||||||
|
@NonNull private final FingerprintRepository mFingerprintRepository;
|
||||||
|
@NonNull private final EnrollmentRequest mRequest;
|
||||||
private final int mUserId;
|
private final int mUserId;
|
||||||
|
|
||||||
private final MutableLiveData<Integer> mActionLiveData = new MutableLiveData<>();
|
private final MutableLiveData<Integer> mActionLiveData = new MutableLiveData<>();
|
||||||
|
|
||||||
public FingerprintEnrollFinishViewModel(@NonNull Application application,
|
public FingerprintEnrollFinishViewModel(@NonNull Application application, int userId,
|
||||||
FingerprintRepository fingerprintRepository,
|
@NonNull EnrollmentRequest request,
|
||||||
PackageManagerRepository packageManagerRepository,
|
@NonNull FingerprintRepository fingerprintRepository) {
|
||||||
int userId) {
|
|
||||||
super(application);
|
super(application);
|
||||||
mFingerprintRepository = fingerprintRepository;
|
|
||||||
mPackageManagerRepository = packageManagerRepository;
|
|
||||||
mUserId = userId;
|
mUserId = userId;
|
||||||
mActionLiveData.setValue(ACTION_NONE);
|
mRequest = request;
|
||||||
|
mFingerprintRepository = fingerprintRepository;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
public EnrollmentRequest getRequest() {
|
||||||
|
return mRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -67,57 +84,46 @@ public class FingerprintEnrollFinishViewModel extends AndroidViewModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get number of fingerprints that this user enrolled.
|
* Device allows user to enroll another fingerprint or not.
|
||||||
*/
|
*/
|
||||||
public int getNumOfEnrolledFingerprintsSize() {
|
public boolean isAnotherFingerprintEnrollable() {
|
||||||
return mFingerprintRepository.getNumOfEnrolledFingerprintsSize(mUserId);
|
return mFingerprintRepository.getNumOfEnrolledFingerprintsSize(mUserId)
|
||||||
|
< mFingerprintRepository.getMaxFingerprints();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get max possible number of fingerprints for a user
|
* Clear action LiveData
|
||||||
*/
|
*/
|
||||||
public int getMaxFingerprints() {
|
public void clearActionLiveData() {
|
||||||
return mFingerprintRepository.getMaxFingerprints();
|
mActionLiveData.setValue(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear life data
|
* Get action LiveData
|
||||||
*/
|
*/
|
||||||
public void clearLiveData() {
|
public LiveData<Integer> getActionLiveData() {
|
||||||
mActionLiveData.setValue(ACTION_NONE);
|
return mActionLiveData;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle add button Click
|
* Handle add button Click
|
||||||
*/
|
*/
|
||||||
public void onAddButtonClick() {
|
public void onAddButtonClick() {
|
||||||
mActionLiveData.postValue(ACTION_ADD_BUTTON_CLICK);
|
final int action = FINGERPRINT_ENROLL_FINISH_ACTION_ADD_BUTTON_CLICK;
|
||||||
|
if (DEBUG) {
|
||||||
|
Log.d(TAG, "onAddButtonClick post(" + action + ")");
|
||||||
|
}
|
||||||
|
mActionLiveData.postValue(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle next button Click
|
* Handle next button Click
|
||||||
*/
|
*/
|
||||||
public void onNextButtonClick() {
|
public void onNextButtonClick() {
|
||||||
updateFingerprintSuggestionEnableState();
|
final int action = FINGERPRINT_ENROLL_FINISH_ACTION_NEXT_BUTTON_CLICK;
|
||||||
mActionLiveData.postValue(ACTION_NEXT_BUTTON_CLICK);
|
if (DEBUG) {
|
||||||
|
Log.d(TAG, "onNextButtonClick post(" + action + ")");
|
||||||
}
|
}
|
||||||
|
mActionLiveData.postValue(action);
|
||||||
/**
|
|
||||||
* Handle back key pressed
|
|
||||||
*/
|
|
||||||
public void onBackKeyPressed() {
|
|
||||||
updateFingerprintSuggestionEnableState();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateFingerprintSuggestionEnableState() {
|
|
||||||
final int enrollNum = mFingerprintRepository.getNumOfEnrolledFingerprintsSize(mUserId);
|
|
||||||
final int flag = (enrollNum == 1) ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
|
|
||||||
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
|
|
||||||
|
|
||||||
ComponentName componentName = new ComponentName(getApplication(),
|
|
||||||
FINGERPRINT_SUGGESTION_ACTIVITY);
|
|
||||||
|
|
||||||
mPackageManagerRepository.setComponentEnabledSetting(componentName, flag,
|
|
||||||
PackageManager.DONT_KILL_APP);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,15 +16,13 @@
|
|||||||
|
|
||||||
package com.android.settings.biometrics2.ui.viewmodel;
|
package com.android.settings.biometrics2.ui.viewmodel;
|
||||||
|
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.EXTRA_FROM_SETTINGS_SUMMARY;
|
import static com.android.settings.biometrics.fingerprint.FingerprintEnrollFinish.FINGERPRINT_SUGGESTION_ACTIVITY;
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
|
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_SKIP;
|
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT;
|
|
||||||
import static com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollIntroduction.EXTRA_FINGERPRINT_ENROLLED_COUNT;
|
import static com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollIntroduction.EXTRA_FINGERPRINT_ENROLLED_COUNT;
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
import android.app.KeyguardManager;
|
import android.content.ComponentName;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@@ -39,7 +37,6 @@ import androidx.lifecycle.MutableLiveData;
|
|||||||
import com.android.settings.biometrics.BiometricEnrollBase;
|
import com.android.settings.biometrics.BiometricEnrollBase;
|
||||||
import com.android.settings.biometrics2.data.repository.FingerprintRepository;
|
import com.android.settings.biometrics2.data.repository.FingerprintRepository;
|
||||||
import com.android.settings.biometrics2.ui.model.EnrollmentRequest;
|
import com.android.settings.biometrics2.ui.model.EnrollmentRequest;
|
||||||
import com.android.settings.password.SetupSkipDialog;
|
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
@@ -53,21 +50,22 @@ public class FingerprintEnrollmentViewModel extends AndroidViewModel {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final String SAVED_STATE_IS_WAITING_ACTIVITY_RESULT = "is_waiting_activity_result";
|
static final String SAVED_STATE_IS_WAITING_ACTIVITY_RESULT = "is_waiting_activity_result";
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
static final String SAVED_STATE_IS_NEW_FINGERPRINT_ADDED = "is_new_fingerprint_added";
|
||||||
|
|
||||||
@NonNull private final FingerprintRepository mFingerprintRepository;
|
@NonNull private final FingerprintRepository mFingerprintRepository;
|
||||||
@Nullable private final KeyguardManager mKeyguardManager;
|
|
||||||
|
|
||||||
private final AtomicBoolean mIsWaitingActivityResult = new AtomicBoolean(false);
|
private final AtomicBoolean mIsWaitingActivityResult = new AtomicBoolean(false);
|
||||||
private final MutableLiveData<ActivityResult> mSetResultLiveData = new MutableLiveData<>();
|
private final MutableLiveData<ActivityResult> mSetResultLiveData = new MutableLiveData<>();
|
||||||
@NonNull private final EnrollmentRequest mRequest;
|
@NonNull private final EnrollmentRequest mRequest;
|
||||||
|
private boolean mIsNewFingerprintAdded = false;
|
||||||
|
|
||||||
public FingerprintEnrollmentViewModel(
|
public FingerprintEnrollmentViewModel(
|
||||||
@NonNull Application application,
|
@NonNull Application application,
|
||||||
@NonNull FingerprintRepository fingerprintRepository,
|
@NonNull FingerprintRepository fingerprintRepository,
|
||||||
@Nullable KeyguardManager keyguardManager,
|
|
||||||
@NonNull EnrollmentRequest request) {
|
@NonNull EnrollmentRequest request) {
|
||||||
super(application);
|
super(application);
|
||||||
mFingerprintRepository = fingerprintRepository;
|
mFingerprintRepository = fingerprintRepository;
|
||||||
mKeyguardManager = keyguardManager;
|
|
||||||
mRequest = request;
|
mRequest = request;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,41 +78,31 @@ public class FingerprintEnrollmentViewModel extends AndroidViewModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy necessary extra data from activity intent
|
* Get override activity result as current ViewModel status.
|
||||||
|
*
|
||||||
|
* FingerprintEnrollmentActivity supports user enrolls 2nd fingerprint or starts a new flow
|
||||||
|
* through Deferred-SUW, Portal-SUW, or SUW Suggestion. Use a method to get override activity
|
||||||
|
* result instead of putting these if-else on every setResult(), .
|
||||||
*/
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
public Bundle getNextActivityBaseIntentExtras() {
|
public ActivityResult getOverrideActivityResult(@NonNull ActivityResult result,
|
||||||
final Bundle bundle = mRequest.getSuwExtras();
|
@Nullable Bundle generatingChallengeExtras) {
|
||||||
bundle.putBoolean(EXTRA_FROM_SETTINGS_SUMMARY, mRequest.isFromSettingsSummery());
|
// TODO write tests
|
||||||
return bundle;
|
final int newResultCode = mIsNewFingerprintAdded
|
||||||
}
|
? BiometricEnrollBase.RESULT_FINISHED
|
||||||
|
: (mRequest.isAfterSuwOrSuwSuggestedAction()
|
||||||
|
? BiometricEnrollBase.RESULT_CANCELED
|
||||||
|
: result.getResultCode());
|
||||||
|
|
||||||
/**
|
Intent newData = result.getData();
|
||||||
* Handle activity result from FingerprintFindSensor
|
if (newResultCode == BiometricEnrollBase.RESULT_FINISHED
|
||||||
*/
|
&& generatingChallengeExtras != null) {
|
||||||
public void onContinueEnrollActivityResult(@NonNull ActivityResult result, int userId) {
|
if (newData == null) {
|
||||||
if (!mIsWaitingActivityResult.compareAndSet(true, false)) {
|
newData = new Intent();
|
||||||
Log.w(TAG, "fail to reset isWaiting flag for enrollment");
|
|
||||||
}
|
}
|
||||||
if (result.getResultCode() == RESULT_FINISHED
|
newData.putExtras(generatingChallengeExtras);
|
||||||
|| result.getResultCode() == RESULT_TIMEOUT) {
|
|
||||||
Intent data = result.getData();
|
|
||||||
if (mRequest.isSuw() && isKeyguardSecure()
|
|
||||||
&& result.getResultCode() == RESULT_FINISHED) {
|
|
||||||
if (data == null) {
|
|
||||||
data = new Intent();
|
|
||||||
}
|
}
|
||||||
data.putExtras(getSuwFingerprintCountExtra(userId));
|
return new ActivityResult(newResultCode, newData);
|
||||||
}
|
|
||||||
mSetResultLiveData.postValue(new ActivityResult(result.getResultCode(), data));
|
|
||||||
} else if (result.getResultCode() == RESULT_SKIP
|
|
||||||
|| result.getResultCode() == SetupSkipDialog.RESULT_SKIP) {
|
|
||||||
mSetResultLiveData.postValue(result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isKeyguardSecure() {
|
|
||||||
return mKeyguardManager != null && mKeyguardManager.isKeyguardSecure();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -130,11 +118,15 @@ public class FingerprintEnrollmentViewModel extends AndroidViewModel {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mSetResultLiveData.postValue(new ActivityResult(BiometricEnrollBase.RESULT_TIMEOUT, null));
|
mSetResultLiveData.postValue(
|
||||||
|
new ActivityResult(BiometricEnrollBase.RESULT_TIMEOUT, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Suw fingerprint count extra for statistics
|
||||||
|
*/
|
||||||
@NonNull
|
@NonNull
|
||||||
private Bundle getSuwFingerprintCountExtra(int userId) {
|
public Bundle getSuwFingerprintCountExtra(int userId) {
|
||||||
final Bundle bundle = new Bundle();
|
final Bundle bundle = new Bundle();
|
||||||
bundle.putInt(EXTRA_FINGERPRINT_ENROLLED_COUNT,
|
bundle.putInt(EXTRA_FINGERPRINT_ENROLLED_COUNT,
|
||||||
mFingerprintRepository.getNumOfEnrolledFingerprintsSize(userId));
|
mFingerprintRepository.getNumOfEnrolledFingerprintsSize(userId));
|
||||||
@@ -161,6 +153,8 @@ public class FingerprintEnrollmentViewModel extends AndroidViewModel {
|
|||||||
mIsWaitingActivityResult.set(
|
mIsWaitingActivityResult.set(
|
||||||
savedInstanceState.getBoolean(SAVED_STATE_IS_WAITING_ACTIVITY_RESULT, false)
|
savedInstanceState.getBoolean(SAVED_STATE_IS_WAITING_ACTIVITY_RESULT, false)
|
||||||
);
|
);
|
||||||
|
mIsNewFingerprintAdded = savedInstanceState.getBoolean(
|
||||||
|
SAVED_STATE_IS_NEW_FINGERPRINT_ADDED, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -168,6 +162,7 @@ public class FingerprintEnrollmentViewModel extends AndroidViewModel {
|
|||||||
*/
|
*/
|
||||||
public void onSaveInstanceState(@NonNull Bundle outState) {
|
public void onSaveInstanceState(@NonNull Bundle outState) {
|
||||||
outState.putBoolean(SAVED_STATE_IS_WAITING_ACTIVITY_RESULT, mIsWaitingActivityResult.get());
|
outState.putBoolean(SAVED_STATE_IS_WAITING_ACTIVITY_RESULT, mIsWaitingActivityResult.get());
|
||||||
|
outState.putBoolean(SAVED_STATE_IS_NEW_FINGERPRINT_ADDED, mIsNewFingerprintAdded);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -183,4 +178,35 @@ public class FingerprintEnrollmentViewModel extends AndroidViewModel {
|
|||||||
public boolean canAssumeSfps() {
|
public boolean canAssumeSfps() {
|
||||||
return mFingerprintRepository.canAssumeSfps();
|
return mFingerprintRepository.canAssumeSfps();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isNewFingerprintAdded() {
|
||||||
|
return mIsNewFingerprintAdded;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets mIsNewFingerprintAdded to true
|
||||||
|
*/
|
||||||
|
public void setIsNewFingerprintAdded() {
|
||||||
|
mIsNewFingerprintAdded = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update FINGERPRINT_SUGGESTION_ACTIVITY into package manager
|
||||||
|
*/
|
||||||
|
public void updateFingerprintSuggestionEnableState(int userId) {
|
||||||
|
final int enrolled = mFingerprintRepository.getNumOfEnrolledFingerprintsSize(userId);
|
||||||
|
|
||||||
|
// Only show "Add another fingerprint" if the user already enrolled one.
|
||||||
|
// "Add fingerprint" will be shown in the main flow if the user hasn't enrolled any
|
||||||
|
// fingerprints. If the user already added more than one fingerprint, they already know
|
||||||
|
// to add multiple fingerprints so we don't show the suggestion.
|
||||||
|
final int flag = (enrolled == 1) ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
|
||||||
|
: PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
|
||||||
|
|
||||||
|
ComponentName componentName = new ComponentName(getApplication(),
|
||||||
|
FINGERPRINT_SUGGESTION_ACTIVITY);
|
||||||
|
getApplication().getPackageManager().setComponentEnabledSetting(componentName, flag,
|
||||||
|
PackageManager.DONT_KILL_APP);
|
||||||
|
Log.d(TAG, FINGERPRINT_SUGGESTION_ACTIVITY + " enabled state = " + (enrolled == 1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,31 +16,20 @@
|
|||||||
|
|
||||||
package com.android.settings.biometrics2.ui.viewmodel;
|
package com.android.settings.biometrics2.ui.viewmodel;
|
||||||
|
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
|
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollmentViewModel.SAVED_STATE_IS_NEW_FINGERPRINT_ADDED;
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_SKIP;
|
|
||||||
import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT;
|
|
||||||
import static com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollIntroduction.EXTRA_FINGERPRINT_ENROLLED_COUNT;
|
|
||||||
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollmentViewModel.SAVED_STATE_IS_WAITING_ACTIVITY_RESULT;
|
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollmentViewModel.SAVED_STATE_IS_WAITING_ACTIVITY_RESULT;
|
||||||
import static com.android.settings.biometrics2.utils.EnrollmentRequestUtils.newAllFalseRequest;
|
import static com.android.settings.biometrics2.utils.EnrollmentRequestUtils.newAllFalseRequest;
|
||||||
import static com.android.settings.biometrics2.utils.EnrollmentRequestUtils.newIsSuwRequest;
|
|
||||||
import static com.android.settings.biometrics2.utils.FingerprintRepositoryUtils.setupFingerprintEnrolledFingerprints;
|
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
import android.app.KeyguardManager;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.hardware.fingerprint.FingerprintManager;
|
import android.hardware.fingerprint.FingerprintManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
|
||||||
import androidx.activity.result.ActivityResult;
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
|
||||||
import com.android.settings.biometrics2.data.repository.FingerprintRepository;
|
import com.android.settings.biometrics2.data.repository.FingerprintRepository;
|
||||||
import com.android.settings.password.SetupSkipDialog;
|
|
||||||
import com.android.settings.testutils.InstantTaskExecutorRule;
|
import com.android.settings.testutils.InstantTaskExecutorRule;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -58,7 +47,6 @@ public class FingerprintEnrollmentViewModelTest {
|
|||||||
@Rule public final InstantTaskExecutorRule mTaskExecutorRule = new InstantTaskExecutorRule();
|
@Rule public final InstantTaskExecutorRule mTaskExecutorRule = new InstantTaskExecutorRule();
|
||||||
|
|
||||||
@Mock private FingerprintManager mFingerprintManager;
|
@Mock private FingerprintManager mFingerprintManager;
|
||||||
@Mock private KeyguardManager mKeyguardManager;
|
|
||||||
|
|
||||||
private Application mApplication;
|
private Application mApplication;
|
||||||
private FingerprintRepository mFingerprintRepository;
|
private FingerprintRepository mFingerprintRepository;
|
||||||
@@ -69,7 +57,7 @@ public class FingerprintEnrollmentViewModelTest {
|
|||||||
mApplication = ApplicationProvider.getApplicationContext();
|
mApplication = ApplicationProvider.getApplicationContext();
|
||||||
mFingerprintRepository = new FingerprintRepository(mFingerprintManager);
|
mFingerprintRepository = new FingerprintRepository(mFingerprintManager);
|
||||||
mViewModel = new FingerprintEnrollmentViewModel(mApplication, mFingerprintRepository,
|
mViewModel = new FingerprintEnrollmentViewModel(mApplication, mFingerprintRepository,
|
||||||
mKeyguardManager, newAllFalseRequest(mApplication));
|
newAllFalseRequest(mApplication));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -77,165 +65,56 @@ public class FingerprintEnrollmentViewModelTest {
|
|||||||
assertThat(mViewModel.getRequest()).isNotNull();
|
assertThat(mViewModel.getRequest()).isNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testGetNextActivityBaseIntentExtras() {
|
|
||||||
assertThat(mViewModel.getNextActivityBaseIntentExtras()).isNotNull();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOnContinueEnrollActivityResult_shouldRelaySkip1Result() {
|
|
||||||
final ActivityResult result = new ActivityResult(RESULT_SKIP, null);
|
|
||||||
|
|
||||||
// Run onContinueEnrollActivityResult
|
|
||||||
mViewModel.onContinueEnrollActivityResult(result, 100);
|
|
||||||
|
|
||||||
assertThat(mViewModel.getSetResultLiveData().getValue()).isEqualTo(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOnContinueEnrollActivityResult_shouldRelaySkip2Result() {
|
|
||||||
final ActivityResult result = new ActivityResult(SetupSkipDialog.RESULT_SKIP, null);
|
|
||||||
|
|
||||||
// Run onContinueEnrollActivityResult
|
|
||||||
mViewModel.onContinueEnrollActivityResult(result, 100);
|
|
||||||
|
|
||||||
assertThat(mViewModel.getSetResultLiveData().getValue()).isEqualTo(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOnContinueEnrollActivityResult_shouldRelayNullDataTimeoutResult() {
|
|
||||||
final ActivityResult result = new ActivityResult(RESULT_TIMEOUT, null);
|
|
||||||
|
|
||||||
// Run onContinueEnrollActivityResult
|
|
||||||
mViewModel.onContinueEnrollActivityResult(result, 100);
|
|
||||||
final ActivityResult setResult = mViewModel.getSetResultLiveData().getValue();
|
|
||||||
|
|
||||||
assertThat(setResult).isNotNull();
|
|
||||||
assertThat(setResult.getResultCode()).isEqualTo(result.getResultCode());
|
|
||||||
assertThat(setResult.getData()).isEqualTo(result.getData());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOnContinueEnrollActivityResult_shouldRelayWithDataTimeoutResult() {
|
|
||||||
final Intent intent = new Intent("testAction");
|
|
||||||
intent.putExtra("testKey", "testValue");
|
|
||||||
final ActivityResult result = new ActivityResult(RESULT_TIMEOUT, intent);
|
|
||||||
|
|
||||||
// Run onContinueEnrollActivityResult
|
|
||||||
mViewModel.onContinueEnrollActivityResult(result, 100);
|
|
||||||
final ActivityResult setResult = mViewModel.getSetResultLiveData().getValue();
|
|
||||||
|
|
||||||
assertThat(setResult).isNotNull();
|
|
||||||
assertThat(setResult.getResultCode()).isEqualTo(result.getResultCode());
|
|
||||||
assertThat(setResult.getData()).isEqualTo(intent);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOnContinueEnrollActivityResult_shouldRelayNullDataFinishResult() {
|
|
||||||
final ActivityResult result = new ActivityResult(RESULT_FINISHED, null);
|
|
||||||
|
|
||||||
// Run onContinueEnrollActivityResult
|
|
||||||
mViewModel.onContinueEnrollActivityResult(result, 100);
|
|
||||||
final ActivityResult setResult = mViewModel.getSetResultLiveData().getValue();
|
|
||||||
|
|
||||||
assertThat(setResult).isNotNull();
|
|
||||||
assertThat(setResult.getResultCode()).isEqualTo(result.getResultCode());
|
|
||||||
assertThat(setResult.getData()).isEqualTo(result.getData());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOnContinueEnrollActivityResult_shouldRelayWithDataFinishResult() {
|
|
||||||
final Intent intent = new Intent("testAction");
|
|
||||||
intent.putExtra("testKey", "testValue");
|
|
||||||
final ActivityResult result = new ActivityResult(RESULT_FINISHED, intent);
|
|
||||||
|
|
||||||
// Run onContinueEnrollActivityResult
|
|
||||||
mViewModel.onContinueEnrollActivityResult(result, 100);
|
|
||||||
final ActivityResult setResult = mViewModel.getSetResultLiveData().getValue();
|
|
||||||
|
|
||||||
assertThat(setResult).isNotNull();
|
|
||||||
assertThat(setResult.getResultCode()).isEqualTo(result.getResultCode());
|
|
||||||
assertThat(setResult.getData()).isEqualTo(intent);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOnContinueEnrollActivityResult_shouldRelayNullDataFinishResultAsNewData() {
|
|
||||||
mViewModel = new FingerprintEnrollmentViewModel(mApplication, mFingerprintRepository,
|
|
||||||
mKeyguardManager, newIsSuwRequest(mApplication));
|
|
||||||
when(mKeyguardManager.isKeyguardSecure()).thenReturn(true);
|
|
||||||
final int userId = 111;
|
|
||||||
final int numOfFp = 4;
|
|
||||||
setupFingerprintEnrolledFingerprints(mFingerprintManager, userId, numOfFp);
|
|
||||||
final ActivityResult result = new ActivityResult(RESULT_FINISHED, null);
|
|
||||||
|
|
||||||
// Run onContinueEnrollActivityResult
|
|
||||||
mViewModel.onContinueEnrollActivityResult(result, userId);
|
|
||||||
final ActivityResult setResult = mViewModel.getSetResultLiveData().getValue();
|
|
||||||
|
|
||||||
assertThat(setResult).isNotNull();
|
|
||||||
assertThat(setResult.getResultCode()).isEqualTo(result.getResultCode());
|
|
||||||
assertThat(setResult.getData()).isNotNull();
|
|
||||||
assertThat(setResult.getData().getExtras()).isNotNull();
|
|
||||||
assertThat(setResult.getData().getExtras().getInt(EXTRA_FINGERPRINT_ENROLLED_COUNT, -1))
|
|
||||||
.isEqualTo(numOfFp);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testOnContinueEnrollActivityResult_shouldRelayWithDataFinishResultAsNewData() {
|
|
||||||
mViewModel = new FingerprintEnrollmentViewModel(mApplication, mFingerprintRepository,
|
|
||||||
mKeyguardManager, newIsSuwRequest(mApplication));
|
|
||||||
when(mKeyguardManager.isKeyguardSecure()).thenReturn(true);
|
|
||||||
final int userId = 20;
|
|
||||||
final int numOfFp = 9;
|
|
||||||
setupFingerprintEnrolledFingerprints(mFingerprintManager, userId, numOfFp);
|
|
||||||
final String action = "testAction";
|
|
||||||
final String key = "testKey";
|
|
||||||
final String value = "testValue";
|
|
||||||
final Intent intent = new Intent(action);
|
|
||||||
intent.putExtra(key, value);
|
|
||||||
final ActivityResult result = new ActivityResult(RESULT_FINISHED, intent);
|
|
||||||
|
|
||||||
// Run onContinueEnrollActivityResult
|
|
||||||
mViewModel.onContinueEnrollActivityResult(result, userId);
|
|
||||||
final ActivityResult setResult = mViewModel.getSetResultLiveData().getValue();
|
|
||||||
|
|
||||||
assertThat(setResult).isNotNull();
|
|
||||||
assertThat(setResult.getResultCode()).isEqualTo(result.getResultCode());
|
|
||||||
assertThat(setResult.getData()).isNotNull();
|
|
||||||
assertThat(setResult.getData().getExtras()).isNotNull();
|
|
||||||
assertThat(setResult.getData().getExtras().getInt(EXTRA_FINGERPRINT_ENROLLED_COUNT, -1))
|
|
||||||
.isEqualTo(numOfFp);
|
|
||||||
assertThat(setResult.getData().getExtras().getString(key)).isEqualTo(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSetSavedInstanceState() {
|
public void testSetSavedInstanceState() {
|
||||||
final Bundle bundle = new Bundle();
|
|
||||||
mViewModel.isWaitingActivityResult().set(true);
|
|
||||||
|
|
||||||
// setSavedInstanceState() as false
|
// setSavedInstanceState() as false
|
||||||
|
final Bundle bundle = new Bundle();
|
||||||
bundle.putBoolean(SAVED_STATE_IS_WAITING_ACTIVITY_RESULT, false);
|
bundle.putBoolean(SAVED_STATE_IS_WAITING_ACTIVITY_RESULT, false);
|
||||||
mViewModel.setSavedInstanceState(bundle);
|
mViewModel.setSavedInstanceState(bundle);
|
||||||
assertThat(mViewModel.isWaitingActivityResult().get()).isFalse();
|
assertThat(mViewModel.isWaitingActivityResult().get()).isFalse();
|
||||||
|
|
||||||
// setSavedInstanceState() as false
|
// setSavedInstanceState() as false
|
||||||
|
bundle.clear();
|
||||||
bundle.putBoolean(SAVED_STATE_IS_WAITING_ACTIVITY_RESULT, true);
|
bundle.putBoolean(SAVED_STATE_IS_WAITING_ACTIVITY_RESULT, true);
|
||||||
mViewModel.setSavedInstanceState(bundle);
|
mViewModel.setSavedInstanceState(bundle);
|
||||||
assertThat(mViewModel.isWaitingActivityResult().get()).isTrue();
|
assertThat(mViewModel.isWaitingActivityResult().get()).isTrue();
|
||||||
|
|
||||||
|
// setSavedInstanceState() as false
|
||||||
|
bundle.clear();
|
||||||
|
bundle.putBoolean(SAVED_STATE_IS_NEW_FINGERPRINT_ADDED, false);
|
||||||
|
mViewModel.setSavedInstanceState(bundle);
|
||||||
|
assertThat(mViewModel.isNewFingerprintAdded()).isFalse();
|
||||||
|
|
||||||
|
// setSavedInstanceState() as false
|
||||||
|
bundle.clear();
|
||||||
|
bundle.putBoolean(SAVED_STATE_IS_NEW_FINGERPRINT_ADDED, true);
|
||||||
|
mViewModel.setSavedInstanceState(bundle);
|
||||||
|
assertThat(mViewModel.isNewFingerprintAdded()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOnSaveInstanceState() {
|
public void testOnSaveInstanceState() {
|
||||||
final Bundle bundle = new Bundle();
|
// Test isWaitingActivityResult false
|
||||||
|
|
||||||
// setSavedInstanceState() as false
|
|
||||||
mViewModel.isWaitingActivityResult().set(false);
|
mViewModel.isWaitingActivityResult().set(false);
|
||||||
|
final Bundle bundle = new Bundle();
|
||||||
mViewModel.onSaveInstanceState(bundle);
|
mViewModel.onSaveInstanceState(bundle);
|
||||||
assertThat(bundle.getBoolean(SAVED_STATE_IS_WAITING_ACTIVITY_RESULT)).isFalse();
|
assertThat(bundle.getBoolean(SAVED_STATE_IS_WAITING_ACTIVITY_RESULT)).isFalse();
|
||||||
|
|
||||||
// setSavedInstanceState() as false
|
// Test isWaitingActivityResult true
|
||||||
mViewModel.isWaitingActivityResult().set(true);
|
mViewModel.isWaitingActivityResult().set(true);
|
||||||
|
bundle.clear();
|
||||||
mViewModel.onSaveInstanceState(bundle);
|
mViewModel.onSaveInstanceState(bundle);
|
||||||
assertThat(bundle.getBoolean(SAVED_STATE_IS_WAITING_ACTIVITY_RESULT)).isTrue();
|
assertThat(bundle.getBoolean(SAVED_STATE_IS_WAITING_ACTIVITY_RESULT)).isTrue();
|
||||||
|
|
||||||
|
// Test isNewFingerprintAdded default false
|
||||||
|
bundle.clear();
|
||||||
|
mViewModel.onSaveInstanceState(bundle);
|
||||||
|
assertThat(bundle.getBoolean(SAVED_STATE_IS_NEW_FINGERPRINT_ADDED)).isFalse();
|
||||||
|
|
||||||
|
// Test isNewFingerprintAdded true
|
||||||
|
mViewModel.setIsNewFingerprintAdded();
|
||||||
|
bundle.clear();
|
||||||
|
mViewModel.onSaveInstanceState(bundle);
|
||||||
|
assertThat(bundle.getBoolean(SAVED_STATE_IS_NEW_FINGERPRINT_ADDED)).isTrue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user