Merge "Refine FingerprintEnrollmentActivity"

This commit is contained in:
TreeHugger Robot
2023-01-20 09:04:40 +00:00
committed by Android (Google) Code Review
18 changed files with 428 additions and 194 deletions

View File

@@ -29,6 +29,7 @@ import androidx.lifecycle.viewmodel.CreationExtras;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.settings.biometrics.fingerprint.FingerprintUpdater; import com.android.settings.biometrics.fingerprint.FingerprintUpdater;
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.viewmodel.AutoCredentialViewModel; import com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel;
import com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel.ChallengeGenerator; import com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel.ChallengeGenerator;
import com.android.settings.biometrics2.ui.viewmodel.DeviceFoldedViewModel; import com.android.settings.biometrics2.ui.viewmodel.DeviceFoldedViewModel;
@@ -47,8 +48,11 @@ public class BiometricsViewModelFactory implements ViewModelProvider.Factory {
private static final String TAG = "BiometricsViewModelFact"; private static final String TAG = "BiometricsViewModelFact";
public static final CreationExtras.Key<ChallengeGenerator> CHALLENGE_GENERATOR = public static final CreationExtras.Key<ChallengeGenerator> CHALLENGE_GENERATOR_KEY =
new CreationExtras.Key<ChallengeGenerator>() {}; new CreationExtras.Key<>() {};
public static final CreationExtras.Key<EnrollmentRequest> ENROLLMENT_REQUEST_KEY =
new CreationExtras.Key<>() {};
public static final CreationExtras.Key<Integer> USER_ID_KEY = new CreationExtras.Key<>() {};
@NonNull @NonNull
@Override @Override
@@ -68,7 +72,7 @@ public class BiometricsViewModelFactory implements ViewModelProvider.Factory {
if (modelClass.isAssignableFrom(AutoCredentialViewModel.class)) { if (modelClass.isAssignableFrom(AutoCredentialViewModel.class)) {
final LockPatternUtils lockPatternUtils = final LockPatternUtils lockPatternUtils =
featureFactory.getSecurityFeatureProvider().getLockPatternUtils(application); featureFactory.getSecurityFeatureProvider().getLockPatternUtils(application);
final ChallengeGenerator challengeGenerator = extras.get(CHALLENGE_GENERATOR); final ChallengeGenerator challengeGenerator = extras.get(CHALLENGE_GENERATOR_KEY);
if (challengeGenerator != null) { if (challengeGenerator != null) {
return (T) new AutoCredentialViewModel(application, lockPatternUtils, return (T) new AutoCredentialViewModel(application, lockPatternUtils,
challengeGenerator); challengeGenerator);
@@ -79,21 +83,31 @@ public class BiometricsViewModelFactory implements ViewModelProvider.Factory {
} else if (modelClass.isAssignableFrom(DeviceRotationViewModel.class)) { } else if (modelClass.isAssignableFrom(DeviceRotationViewModel.class)) {
return (T) new DeviceRotationViewModel(application); return (T) new DeviceRotationViewModel(application);
} else if (modelClass.isAssignableFrom(FingerprintEnrollFindSensorViewModel.class)) { } else if (modelClass.isAssignableFrom(FingerprintEnrollFindSensorViewModel.class)) {
return (T) new FingerprintEnrollFindSensorViewModel(application); final EnrollmentRequest request = extras.get(ENROLLMENT_REQUEST_KEY);
if (request != null) {
return (T) new FingerprintEnrollFindSensorViewModel(application, request.isSuw());
}
} else if (modelClass.isAssignableFrom(FingerprintEnrollIntroViewModel.class)) { } else if (modelClass.isAssignableFrom(FingerprintEnrollIntroViewModel.class)) {
final FingerprintRepository repository = provider.getFingerprintRepository(application); final FingerprintRepository repository = provider.getFingerprintRepository(application);
if (repository != null) { final EnrollmentRequest request = extras.get(ENROLLMENT_REQUEST_KEY);
return (T) new FingerprintEnrollIntroViewModel(application, repository); final Integer userId = extras.get(USER_ID_KEY);
if (repository != null && request != null && userId != null) {
return (T) new FingerprintEnrollIntroViewModel(application, repository, request,
userId);
} }
} else if (modelClass.isAssignableFrom(FingerprintEnrollmentViewModel.class)) { } else if (modelClass.isAssignableFrom(FingerprintEnrollmentViewModel.class)) {
final FingerprintRepository repository = provider.getFingerprintRepository(application); final FingerprintRepository repository = provider.getFingerprintRepository(application);
if (repository != null) { final EnrollmentRequest request = extras.get(ENROLLMENT_REQUEST_KEY);
if (repository != null && request != null) {
return (T) new FingerprintEnrollmentViewModel(application, repository, return (T) new FingerprintEnrollmentViewModel(application, repository,
application.getSystemService(KeyguardManager.class)); application.getSystemService(KeyguardManager.class), request);
} }
} else if (modelClass.isAssignableFrom(FingerprintEnrollProgressViewModel.class)) { } else if (modelClass.isAssignableFrom(FingerprintEnrollProgressViewModel.class)) {
return (T) new FingerprintEnrollProgressViewModel(application, final Integer userId = extras.get(USER_ID_KEY);
new FingerprintUpdater(application)); if (userId != null) {
return (T) new FingerprintEnrollProgressViewModel(application,
new FingerprintUpdater(application), userId);
}
} }
return create(modelClass); return create(modelClass);
} }

View File

@@ -82,7 +82,10 @@ public final class CredentialModel {
@Nullable @Nullable
private Long mClearGkPwHandleMillis = null; private Long mClearGkPwHandleMillis = null;
public CredentialModel(@NonNull Bundle bundle, @NonNull Clock clock) { public CredentialModel(@Nullable Bundle bundle, @NonNull Clock clock) {
if (bundle == null) {
bundle = new Bundle();
}
mUserId = bundle.getInt(Intent.EXTRA_USER_ID, UserHandle.myUserId()); mUserId = bundle.getInt(Intent.EXTRA_USER_ID, UserHandle.myUserId());
mSensorId = bundle.getInt(EXTRA_KEY_SENSOR_ID, INVALID_SENSOR_ID); mSensorId = bundle.getInt(EXTRA_KEY_SENSOR_ID, INVALID_SENSOR_ID);
mChallenge = bundle.getLong(EXTRA_KEY_CHALLENGE, INVALID_CHALLENGE); mChallenge = bundle.getLong(EXTRA_KEY_CHALLENGE, INVALID_CHALLENGE);

View File

@@ -163,7 +163,7 @@ public class FingerprintEnrollIntroFragment extends Fragment {
mIconShield.setVisibility(View.GONE); mIconShield.setVisibility(View.GONE);
} }
mSecondaryFooterButton.setText(context, mSecondaryFooterButton.setText(context,
mViewModel.getEnrollmentRequest().isAfterSuwOrSuwSuggestedAction() mViewModel.getRequest().isAfterSuwOrSuwSuggestedAction()
? R.string.security_settings_fingerprint_enroll_introduction_cancel ? R.string.security_settings_fingerprint_enroll_introduction_cancel
: R.string.security_settings_fingerprint_enroll_introduction_no_thanks); : R.string.security_settings_fingerprint_enroll_introduction_no_thanks);
@@ -209,16 +209,9 @@ public class FingerprintEnrollIntroFragment extends Fragment {
public void onAttach(@NonNull Context context) { public void onAttach(@NonNull Context context) {
mViewModel = new ViewModelProvider(getActivity()) mViewModel = new ViewModelProvider(getActivity())
.get(FingerprintEnrollIntroViewModel.class); .get(FingerprintEnrollIntroViewModel.class);
getLifecycle().addObserver(mViewModel);
super.onAttach(context); super.onAttach(context);
} }
@Override
public void onDetach() {
getLifecycle().removeObserver(mViewModel);
super.onDetach();
}
@NonNull @NonNull
private PorterDuffColorFilter getIconColorFilter(@NonNull Context context) { private PorterDuffColorFilter getIconColorFilter(@NonNull Context context) {
if (mIconColorFilter == null) { if (mIconColorFilter == null) {

View File

@@ -19,7 +19,9 @@ package com.android.settings.biometrics2.ui.view;
import static androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult; import static androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;
import static androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY; import static androidx.lifecycle.ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY;
import static com.android.settings.biometrics2.factory.BiometricsViewModelFactory.CHALLENGE_GENERATOR; import static com.android.settings.biometrics2.factory.BiometricsViewModelFactory.CHALLENGE_GENERATOR_KEY;
import static com.android.settings.biometrics2.factory.BiometricsViewModelFactory.ENROLLMENT_REQUEST_KEY;
import static com.android.settings.biometrics2.factory.BiometricsViewModelFactory.USER_ID_KEY;
import static com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel.CREDENTIAL_FAIL_NEED_TO_CHOOSE_LOCK; import static com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel.CREDENTIAL_FAIL_NEED_TO_CHOOSE_LOCK;
import static com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel.CREDENTIAL_FAIL_NEED_TO_CONFIRM_LOCK; import static com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel.CREDENTIAL_FAIL_NEED_TO_CONFIRM_LOCK;
import static com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel.CREDENTIAL_IS_GENERATING_CHALLENGE; import static com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel.CREDENTIAL_IS_GENERATING_CHALLENGE;
@@ -37,9 +39,11 @@ import android.annotation.StyleRes;
import android.app.Application; import android.app.Application;
import android.content.Intent; import android.content.Intent;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Color; import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log; import android.util.Log;
import androidx.activity.result.ActivityResult; import androidx.activity.result.ActivityResult;
@@ -63,9 +67,11 @@ import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling;
import com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollEnrolling; import com.android.settings.biometrics.fingerprint.SetupFingerprintEnrollEnrolling;
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.EnrollmentRequest; import com.android.settings.biometrics2.ui.model.EnrollmentRequest;
import com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel; import com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel;
import com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel.FingerprintChallengeGenerator; import com.android.settings.biometrics2.ui.viewmodel.AutoCredentialViewModel.FingerprintChallengeGenerator;
import com.android.settings.biometrics2.ui.viewmodel.DeviceFoldedViewModel;
import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel; import com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel;
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;
@@ -126,7 +132,6 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
mViewModelProvider = new ViewModelProvider(this); mViewModelProvider = new ViewModelProvider(this);
mViewModel = mViewModelProvider.get(FingerprintEnrollmentViewModel.class); mViewModel = mViewModelProvider.get(FingerprintEnrollmentViewModel.class);
mViewModel.setRequest(new EnrollmentRequest(getIntent(), getApplicationContext()));
mViewModel.setSavedInstanceState(savedInstanceState); mViewModel.setSavedInstanceState(savedInstanceState);
mAutoCredentialViewModel = mViewModelProvider.get(AutoCredentialViewModel.class); mAutoCredentialViewModel = mViewModelProvider.get(AutoCredentialViewModel.class);
@@ -173,7 +178,6 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
} }
// observe LiveData // observe LiveData
getLifecycle().addObserver(mViewModel);
mViewModel.getSetResultLiveData().observe(this, this::onSetActivityResult); mViewModel.getSetResultLiveData().observe(this, this::onSetActivityResult);
mAutoCredentialViewModel.getGenerateChallengeFailedLiveData().observe(this, mAutoCredentialViewModel.getGenerateChallengeFailedLiveData().observe(this,
@@ -193,9 +197,6 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
final FingerprintEnrollIntroViewModel introViewModel = final FingerprintEnrollIntroViewModel introViewModel =
mViewModelProvider.get(FingerprintEnrollIntroViewModel.class); mViewModelProvider.get(FingerprintEnrollIntroViewModel.class);
introViewModel.setEnrollmentRequest(mViewModel.getRequest());
introViewModel.setUserId(mAutoCredentialViewModel.getUserId());
// Clear ActionLiveData in FragmentViewModel to prevent getting previous action during // Clear ActionLiveData in FragmentViewModel to prevent getting previous action during
// recreate, like press 'Agree' then press 'back' in FingerprintEnrollFindSensor activity. // recreate, like press 'Agree' then press 'back' in FingerprintEnrollFindSensor activity.
introViewModel.clearActionLiveData(); introViewModel.clearActionLiveData();
@@ -224,12 +225,10 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
if (initProgressViewModel) { if (initProgressViewModel) {
final FingerprintEnrollProgressViewModel progressViewModel = final FingerprintEnrollProgressViewModel progressViewModel =
mViewModelProvider.get(FingerprintEnrollProgressViewModel.class); mViewModelProvider.get(FingerprintEnrollProgressViewModel.class);
progressViewModel.setUserId(mAutoCredentialViewModel.getUserId());
progressViewModel.setToken(mAutoCredentialViewModel.getToken()); progressViewModel.setToken(mAutoCredentialViewModel.getToken());
} }
final FingerprintEnrollFindSensorViewModel findSensorViewModel = final FingerprintEnrollFindSensorViewModel findSensorViewModel =
mViewModelProvider.get(FingerprintEnrollFindSensorViewModel.class); mViewModelProvider.get(FingerprintEnrollFindSensorViewModel.class);
findSensorViewModel.setIsSuw(mViewModel.getRequest().isSuw());
getSupportFragmentManager().beginTransaction() getSupportFragmentManager().beginTransaction()
.setReorderingAllowed(true) .setReorderingAllowed(true)
.setCustomAnimations(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out, .setCustomAnimations(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out,
@@ -408,9 +407,19 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
super.getDefaultViewModelCreationExtras().get(APPLICATION_KEY); super.getDefaultViewModelCreationExtras().get(APPLICATION_KEY);
final MutableCreationExtras ret = new MutableCreationExtras(); final MutableCreationExtras ret = new MutableCreationExtras();
ret.set(APPLICATION_KEY, application); ret.set(APPLICATION_KEY, application);
final FingerprintRepository repository = FeatureFactory.getFactory(application) final FingerprintRepository repository = FeatureFactory.getFactory(application)
.getBiometricsRepositoryProvider().getFingerprintRepository(application); .getBiometricsRepositoryProvider().getFingerprintRepository(application);
ret.set(CHALLENGE_GENERATOR, new FingerprintChallengeGenerator(repository)); ret.set(CHALLENGE_GENERATOR_KEY, new FingerprintChallengeGenerator(repository));
ret.set(ENROLLMENT_REQUEST_KEY, new EnrollmentRequest(getIntent(),
getApplicationContext()));
Bundle extras = getIntent().getExtras();
final CredentialModel credentialModel = new CredentialModel(extras,
SystemClock.elapsedRealtimeClock());
ret.set(USER_ID_KEY, credentialModel.getUserId());
return ret; return ret;
} }
@@ -433,9 +442,9 @@ public class FingerprintEnrollmentActivity extends FragmentActivity {
} }
@Override @Override
protected void onDestroy() { public void onConfigurationChanged(@NonNull Configuration newConfig) {
getLifecycle().removeObserver(mViewModel); mViewModelProvider.get(DeviceFoldedViewModel.class).onConfigurationChanged(newConfig);
super.onDestroy(); super.onConfigurationChanged(newConfig);
} }
@Override @Override

View File

@@ -201,8 +201,7 @@ public class AutoCredentialViewModel extends AndroidViewModel {
} else { } else {
bundle = intent.getExtras(); bundle = intent.getExtras();
} }
mCredentialModel = new CredentialModel(bundle != null ? bundle : new Bundle(), mCredentialModel = new CredentialModel(bundle, SystemClock.elapsedRealtimeClock());
SystemClock.elapsedRealtimeClock());
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "setCredentialModel " + mCredentialModel + ", savedInstanceState exist:" Log.d(TAG, "setCredentialModel " + mCredentialModel + ", savedInstanceState exist:"

View File

@@ -16,6 +16,7 @@
package com.android.settings.biometrics2.ui.viewmodel; package com.android.settings.biometrics2.ui.viewmodel;
import android.content.res.Configuration;
import android.util.Log; import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@@ -51,6 +52,13 @@ public class DeviceFoldedViewModel extends ViewModel {
mScreenSizeFoldProvider.registerCallback(mIsFoldedCallback, executor); mScreenSizeFoldProvider.registerCallback(mIsFoldedCallback, executor);
} }
/**
* Calls this method when activity gets configuration change
*/
public void onConfigurationChanged(@NonNull Configuration newConfig) {
mScreenSizeFoldProvider.onConfigurationChange(newConfig);
}
/** /**
* Returns FoldedLiveData * Returns FoldedLiveData
*/ */

View File

@@ -29,17 +29,25 @@ import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import com.android.internal.annotations.VisibleForTesting;
/** /**
* ViewModel explaining the fingerprint sensor location for fingerprint enrollment. * ViewModel explaining the fingerprint sensor location for fingerprint enrollment.
*/ */
public class DeviceRotationViewModel extends AndroidViewModel { public class DeviceRotationViewModel extends AndroidViewModel {
private static final boolean DEBUG = false; private static final boolean DEBUG = false;
private static final String TAG = "RotationViewModel"; private static final String TAG = "DeviceRotationViewModel";
private final DisplayManager mDisplayManager; private final DisplayManager mDisplayManager;
private final boolean mIsReverseDefaultRotation;
@NonNull private final DisplayInfo mDisplayInfo = new DisplayInfo(); @NonNull private final DisplayInfo mDisplayInfo = new DisplayInfo();
private final DisplayListener mDisplayListener = new DisplayListener() {
/** {@link android.hardware.display.DisplayManager} is a final class, set this member visibility
* to 'protected' for testing
*/
@VisibleForTesting
protected final DisplayListener mDisplayListener = new DisplayListener() {
@Override @Override
public void onDisplayAdded(int displayId) { public void onDisplayAdded(int displayId) {
} }
@@ -58,29 +66,43 @@ public class DeviceRotationViewModel extends AndroidViewModel {
} }
}; };
@NonNull private final MutableLiveData<Integer> mLiveData = @NonNull private final MutableLiveData<Integer> mLiveData = new MutableLiveData<>();
new MutableLiveData<>(getRotation());
public DeviceRotationViewModel(@NonNull Application application) { public DeviceRotationViewModel(@NonNull Application application) {
super(application); super(application);
mDisplayManager = application.getSystemService(DisplayManager.class); mDisplayManager = application.getSystemService(DisplayManager.class);
mDisplayManager.registerDisplayListener(mDisplayListener, mDisplayManager.registerDisplayListener(mDisplayListener,
application.getMainThreadHandler()); application.getMainThreadHandler());
mIsReverseDefaultRotation = application.getResources().getBoolean(
com.android.internal.R.bool.config_reverseDefaultRotation);
} }
/** /**
* Returns current rotation * Returns current rotation.
*
* {@link android.view.Display} is a final class, set this method visibility to "protected" for
* inheriting it in test
*/ */
@VisibleForTesting
@Surface.Rotation @Surface.Rotation
private int getRotation() { protected int getRotation() {
getApplication().getDisplay().getDisplayInfo(mDisplayInfo); getApplication().getDisplay().getDisplayInfo(mDisplayInfo);
return mDisplayInfo.rotation; if (mIsReverseDefaultRotation) {
return (mDisplayInfo.rotation + 1) % 4;
} else {
return mDisplayInfo.rotation;
}
} }
/** /**
* Returns RotationLiveData * Returns RotationLiveData
*/ */
public LiveData<Integer> getLiveData() { public LiveData<Integer> getLiveData() {
if (mLiveData.getValue() == null) {
// Init data here because if we set it through getDisplay().getRotation() or through
// getDisplay().getDisplayInfo() in constructor(), we always get incorrect value.
mLiveData.setValue(getRotation());
}
return mLiveData; return mLiveData;
} }

View File

@@ -62,18 +62,12 @@ public class FingerprintEnrollFindSensorViewModel extends AndroidViewModel {
private final AccessibilityManager mAccessibilityManager; private final AccessibilityManager mAccessibilityManager;
private boolean mIsSuw = false; private final boolean mIsSuw;
@NonNull private final MutableLiveData<Integer> mActionLiveData = new MutableLiveData<>(); @NonNull private final MutableLiveData<Integer> mActionLiveData = new MutableLiveData<>();
public FingerprintEnrollFindSensorViewModel(@NonNull Application application) { public FingerprintEnrollFindSensorViewModel(@NonNull Application application, boolean isSuw) {
super(application); super(application);
mAccessibilityManager = application.getSystemService(AccessibilityManager.class); mAccessibilityManager = application.getSystemService(AccessibilityManager.class);
}
/**
* Sets isSetupWizard or not
*/
public void setIsSuw(boolean isSuw) {
mIsSuw = isSuw; mIsSuw = isSuw;
} }

View File

@@ -22,13 +22,10 @@ import static com.android.settings.biometrics2.ui.model.FingerprintEnrollIntroSt
import android.annotation.IntDef; import android.annotation.IntDef;
import android.app.Application; import android.app.Application;
import android.os.UserHandle;
import android.util.Log; import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MediatorLiveData; import androidx.lifecycle.MediatorLiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
@@ -43,8 +40,7 @@ import java.lang.annotation.RetentionPolicy;
/** /**
* Fingerprint intro onboarding page view model implementation * Fingerprint intro onboarding page view model implementation
*/ */
public class FingerprintEnrollIntroViewModel extends AndroidViewModel public class FingerprintEnrollIntroViewModel extends AndroidViewModel {
implements DefaultLifecycleObserver {
private static final String TAG = "FingerprintEnrollIntroViewModel"; private static final String TAG = "FingerprintEnrollIntroViewModel";
private static final boolean HAS_SCROLLED_TO_BOTTOM_DEFAULT = false; private static final boolean HAS_SCROLLED_TO_BOTTOM_DEFAULT = false;
@@ -82,13 +78,16 @@ public class FingerprintEnrollIntroViewModel extends AndroidViewModel
private final MediatorLiveData<FingerprintEnrollIntroStatus> mPageStatusLiveData = private final MediatorLiveData<FingerprintEnrollIntroStatus> mPageStatusLiveData =
new MediatorLiveData<>(); new MediatorLiveData<>();
private final MutableLiveData<Integer> mActionLiveData = new MutableLiveData<>(); private final MutableLiveData<Integer> mActionLiveData = new MutableLiveData<>();
private int mUserId = UserHandle.myUserId(); private final int mUserId;
private EnrollmentRequest mEnrollmentRequest = null; @NonNull private final EnrollmentRequest mRequest;
public FingerprintEnrollIntroViewModel(@NonNull Application application, public FingerprintEnrollIntroViewModel(@NonNull Application application,
@NonNull FingerprintRepository fingerprintRepository) { @NonNull FingerprintRepository fingerprintRepository,
@NonNull EnrollmentRequest request, int userId) {
super(application); super(application);
mFingerprintRepository = fingerprintRepository; mFingerprintRepository = fingerprintRepository;
mRequest = request;
mUserId = userId;
mPageStatusLiveData.addSource( mPageStatusLiveData.addSource(
mEnrollableStatusLiveData, mEnrollableStatusLiveData,
@@ -108,27 +107,21 @@ public class FingerprintEnrollIntroViewModel extends AndroidViewModel
enrollableValue != null ? enrollableValue : ENROLLABLE_STATUS_DEFAULT); enrollableValue != null ? enrollableValue : ENROLLABLE_STATUS_DEFAULT);
mPageStatusLiveData.setValue(status); mPageStatusLiveData.setValue(status);
}); });
}
public void setUserId(int userId) { updateEnrollableStatus();
mUserId = userId;
}
public void setEnrollmentRequest(@NonNull EnrollmentRequest enrollmentRequest) {
mEnrollmentRequest = enrollmentRequest;
} }
/** /**
* Get enrollment request * Get enrollment request
*/ */
public EnrollmentRequest getEnrollmentRequest() { public EnrollmentRequest getRequest() {
return mEnrollmentRequest; return mRequest;
} }
private void updateEnrollableStatus() { private void updateEnrollableStatus() {
final int num = mFingerprintRepository.getNumOfEnrolledFingerprintsSize(mUserId); final int num = mFingerprintRepository.getNumOfEnrolledFingerprintsSize(mUserId);
final int max = final int max =
mEnrollmentRequest.isSuw() && !mEnrollmentRequest.isAfterSuwOrSuwSuggestedAction() mRequest.isSuw() && !mRequest.isAfterSuwOrSuwSuggestedAction()
? mFingerprintRepository.getMaxFingerprintsInSuw(getApplication().getResources()) ? mFingerprintRepository.getMaxFingerprintsInSuw(getApplication().getResources())
: mFingerprintRepository.getMaxFingerprints(); : mFingerprintRepository.getMaxFingerprints();
mEnrollableStatusLiveData.postValue(num >= max mEnrollableStatusLiveData.postValue(num >= max
@@ -208,10 +201,4 @@ public class FingerprintEnrollIntroViewModel extends AndroidViewModel
public void onSkipOrCancelButtonClick() { public void onSkipOrCancelButtonClick() {
mActionLiveData.postValue(FINGERPRINT_ENROLL_INTRO_ACTION_SKIP_OR_CANCEL); mActionLiveData.postValue(FINGERPRINT_ENROLL_INTRO_ACTION_SKIP_OR_CANCEL);
} }
@Override
public void onStart(@NonNull LifecycleOwner owner) {
updateEnrollableStatus();
}
} }

View File

@@ -25,7 +25,6 @@ import android.hardware.fingerprint.FingerprintManager.EnrollReason;
import android.hardware.fingerprint.FingerprintManager.EnrollmentCallback; import android.hardware.fingerprint.FingerprintManager.EnrollmentCallback;
import android.os.CancellationSignal; import android.os.CancellationSignal;
import android.os.SystemClock; import android.os.SystemClock;
import android.os.UserHandle;
import android.util.Log; import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@@ -58,7 +57,7 @@ public class FingerprintEnrollProgressViewModel extends AndroidViewModel {
new MutableLiveData<>(); new MutableLiveData<>();
private byte[] mToken = null; private byte[] mToken = null;
private int mUserId = UserHandle.myUserId(); private final int mUserId;
private final FingerprintUpdater mFingerprintUpdater; private final FingerprintUpdater mFingerprintUpdater;
private final MessageDisplayController mMessageDisplayController; private final MessageDisplayController mMessageDisplayController;
@@ -90,9 +89,11 @@ public class FingerprintEnrollProgressViewModel extends AndroidViewModel {
}; };
public FingerprintEnrollProgressViewModel(@NonNull Application application, public FingerprintEnrollProgressViewModel(@NonNull Application application,
@NonNull FingerprintUpdater fingerprintUpdater) { @NonNull FingerprintUpdater fingerprintUpdater, int userId) {
super(application); super(application);
mFingerprintUpdater = fingerprintUpdater; mFingerprintUpdater = fingerprintUpdater;
mUserId = userId;
final Resources res = application.getResources(); final Resources res = application.getResources();
mMessageDisplayController = mMessageDisplayController =
res.getBoolean(R.bool.enrollment_message_display_controller_flag) res.getBoolean(R.bool.enrollment_message_display_controller_flag)
@@ -112,10 +113,6 @@ public class FingerprintEnrollProgressViewModel extends AndroidViewModel {
mToken = token; mToken = token;
} }
public void setUserId(int userId) {
mUserId = userId;
}
/** /**
* clear progress * clear progress
*/ */

View File

@@ -33,7 +33,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
@@ -47,8 +46,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
/** /**
* Fingerprint enrollment view model implementation * Fingerprint enrollment view model implementation
*/ */
public class FingerprintEnrollmentViewModel extends AndroidViewModel implements public class FingerprintEnrollmentViewModel extends AndroidViewModel {
DefaultLifecycleObserver {
private static final String TAG = "FingerprintEnrollmentViewModel"; private static final String TAG = "FingerprintEnrollmentViewModel";
@@ -60,32 +58,23 @@ public class FingerprintEnrollmentViewModel extends AndroidViewModel implements
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;
/**
* Even this variable may be nullable, but activity will call setIntent() immediately during
* its onCreate(), we do not assign @Nullable for this variable here.
*/
private EnrollmentRequest mRequest = null;
public FingerprintEnrollmentViewModel( public FingerprintEnrollmentViewModel(
@NonNull Application application, @NonNull Application application,
@NonNull FingerprintRepository fingerprintRepository, @NonNull FingerprintRepository fingerprintRepository,
@Nullable KeyguardManager keyguardManager) { @Nullable KeyguardManager keyguardManager,
@NonNull EnrollmentRequest request) {
super(application); super(application);
mFingerprintRepository = fingerprintRepository; mFingerprintRepository = fingerprintRepository;
mKeyguardManager = keyguardManager; mKeyguardManager = keyguardManager;
}
/**
* Set EnrollmentRequest
*/
public void setRequest(@NonNull EnrollmentRequest request) {
mRequest = request; mRequest = request;
} }
/** /**
* Get EnrollmentRequest * Get EnrollmentRequest
*/ */
@NonNull
public EnrollmentRequest getRequest() { public EnrollmentRequest getRequest() {
return mRequest; return mRequest;
} }

View File

@@ -29,6 +29,7 @@ import android.annotation.NonNull;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.SystemClock; import android.os.SystemClock;
import android.os.UserHandle;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -145,7 +146,14 @@ public class CredentialModelTest {
} }
@Test @Test
public void sameValueFromBundle() { public void testNullBundle() {
final CredentialModel credentialModel = new CredentialModel(null, mClock);
assertThat(credentialModel.getUserId()).isEqualTo(UserHandle.myUserId());
}
@Test
public void testSameValueFromBundle() {
final Bundle bundle = newCredentialModelIntentExtras(1234, 6677L, 1, final Bundle bundle = newCredentialModelIntentExtras(1234, 6677L, 1,
new byte[] { 33, 44, 55 }, 987654321); new byte[] { 33, 44, 55 }, 987654321);
@@ -156,7 +164,7 @@ public class CredentialModelTest {
} }
@Test @Test
public void sameValueFromBundle_nullToken() { public void testSameValueFromBundle_nullToken() {
final Bundle bundle = newCredentialModelIntentExtras(22, 33L, 1, null, 21L); final Bundle bundle = newCredentialModelIntentExtras(22, 33L, 1, null, 21L);
final CredentialModel model1 = new CredentialModel(bundle, mClock); final CredentialModel model1 = new CredentialModel(bundle, mClock);

View File

@@ -0,0 +1,61 @@
/*
* Copyright (C) 2022 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.ui.viewmodel;
import static com.google.common.truth.Truth.assertThat;
import android.app.Application;
import android.content.res.Configuration;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.testutils.InstantTaskExecutorRule;
import com.android.systemui.unfold.compat.ScreenSizeFoldProvider;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class DeviceFoldedViewModelTest {
@Rule public final InstantTaskExecutorRule mTaskExecutorRule = new InstantTaskExecutorRule();
private DeviceFoldedViewModel mViewModel;
@Before
public void setUp() {
final Application application = ApplicationProvider.getApplicationContext();
mViewModel = new DeviceFoldedViewModel(new ScreenSizeFoldProvider(application),
application.getMainExecutor());
}
@Test
public void testLiveData() {
final Configuration config1 = new Configuration();
config1.smallestScreenWidthDp = 601;
mViewModel.onConfigurationChanged(config1);
assertThat(mViewModel.getLiveData().getValue()).isFalse();
final Configuration config2 = new Configuration();
config2.smallestScreenWidthDp = 599;
mViewModel.onConfigurationChanged(config2);
assertThat(mViewModel.getLiveData().getValue()).isTrue();
}
}

View File

@@ -0,0 +1,80 @@
/*
* Copyright (C) 2022 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.ui.viewmodel;
import static com.google.common.truth.Truth.assertThat;
import android.app.Application;
import android.view.Surface;
import androidx.annotation.NonNull;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.testutils.InstantTaskExecutorRule;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
@RunWith(AndroidJUnit4.class)
public class DeviceRotationViewModelTest {
@Rule public final MockitoRule mockito = MockitoJUnit.rule();
@Rule public final InstantTaskExecutorRule mTaskExecutorRule = new InstantTaskExecutorRule();
private TestDeviceRotationViewModel mViewModel;
@Before
public void setUp() {
TestDeviceRotationViewModel.sTestRotation = 3;
mViewModel = new TestDeviceRotationViewModel(ApplicationProvider.getApplicationContext());
}
@Test
public void testDefaultLiveDataNotNull() {
assertThat(mViewModel.getLiveData().getValue()).isEqualTo(mViewModel.sTestRotation);
}
@Test
public void testOnDisplayChange() {
mViewModel.sTestRotation = 3;
mViewModel.triggerOnDisplayChanged();
assertThat(mViewModel.getLiveData().getValue()).isEqualTo(mViewModel.sTestRotation);
}
public static class TestDeviceRotationViewModel extends DeviceRotationViewModel {
@Surface.Rotation static int sTestRotation = 0;
public TestDeviceRotationViewModel(@NonNull Application application) {
super(application);
}
void triggerOnDisplayChanged() {
mDisplayListener.onDisplayChanged(0);
}
@Override
protected int getRotation() {
return sTestRotation;
}
}
}

View File

@@ -0,0 +1,100 @@
/*
* 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.ui.viewmodel;
import static com.android.settings.biometrics2.ui.viewmodel.FingerprintEnrollFindSensorViewModel.FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_DIALOG;
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.google.common.truth.Truth.assertThat;
import android.app.Application;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.testutils.InstantTaskExecutorRule;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class FingerprintEnrollFindSensorViewModelTest {
@Rule public final InstantTaskExecutorRule mTaskExecutorRule = new InstantTaskExecutorRule();
private Application mApplication;
@Before
public void setUp() {
mApplication = ApplicationProvider.getApplicationContext();
}
@Test
public void testClickStartButton() {
final FingerprintEnrollFindSensorViewModel viewModel =
new FingerprintEnrollFindSensorViewModel(mApplication, false);
viewModel.onStartButtonClick();
assertThat(viewModel.getActionLiveData().getValue()).isEqualTo(
FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_START);
}
@Test
public void testClickSkipButton() {
final FingerprintEnrollFindSensorViewModel viewModel =
new FingerprintEnrollFindSensorViewModel(mApplication, false);
viewModel.onSkipButtonClick();
assertThat(viewModel.getActionLiveData().getValue()).isEqualTo(
FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_SKIP);
}
@Test
public void testClickSkipButtonInSuw() {
final FingerprintEnrollFindSensorViewModel viewModel =
new FingerprintEnrollFindSensorViewModel(mApplication, true);
viewModel.onSkipButtonClick();
assertThat(viewModel.getActionLiveData().getValue()).isEqualTo(
FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_DIALOG);
}
@Test
public void testClickSkipDialogButton() {
final FingerprintEnrollFindSensorViewModel viewModel =
new FingerprintEnrollFindSensorViewModel(mApplication, true);
viewModel.onSkipDialogButtonClick();
assertThat(viewModel.getActionLiveData().getValue()).isEqualTo(
FINGERPRINT_ENROLL_FIND_SENSOR_ACTION_SKIP);
}
@Test
public void testClearActionLiveData() {
final FingerprintEnrollFindSensorViewModel viewModel =
new FingerprintEnrollFindSensorViewModel(mApplication, false);
viewModel.onStartButtonClick();
assertThat(viewModel.getActionLiveData().getValue()).isNotNull();
viewModel.clearActionLiveData();
assertThat(viewModel.getActionLiveData().getValue()).isNull();
}
}

View File

@@ -22,7 +22,6 @@ import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFP
import static com.android.settings.biometrics2.ui.model.FingerprintEnrollIntroStatus.FINGERPRINT_ENROLLABLE_ERROR_REACH_MAX; import static com.android.settings.biometrics2.ui.model.FingerprintEnrollIntroStatus.FINGERPRINT_ENROLLABLE_ERROR_REACH_MAX;
import static com.android.settings.biometrics2.ui.model.FingerprintEnrollIntroStatus.FINGERPRINT_ENROLLABLE_OK; import static com.android.settings.biometrics2.ui.model.FingerprintEnrollIntroStatus.FINGERPRINT_ENROLLABLE_OK;
import static com.android.settings.biometrics2.ui.model.FingerprintEnrollIntroStatus.FINGERPRINT_ENROLLABLE_UNKNOWN;
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;
@@ -45,7 +44,6 @@ import android.content.res.Resources;
import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.FingerprintManager;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
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;
@@ -66,19 +64,22 @@ import org.mockito.junit.MockitoRule;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public class FingerprintEnrollIntroViewModelTest { public class FingerprintEnrollIntroViewModelTest {
private static final int TEST_USER_ID = 33;
@Rule public final MockitoRule mockito = MockitoJUnit.rule(); @Rule public final MockitoRule mockito = MockitoJUnit.rule();
@Rule public final InstantTaskExecutorRule mTaskExecutorRule = new InstantTaskExecutorRule(); @Rule public final InstantTaskExecutorRule mTaskExecutorRule = new InstantTaskExecutorRule();
@Mock private Resources mResources; @Mock private Resources mResources;
@Mock private LifecycleOwner mLifecycleOwner;
@Mock private FingerprintManager mFingerprintManager; @Mock private FingerprintManager mFingerprintManager;
private Application mApplication; private Application mApplication;
private FingerprintEnrollIntroViewModel newFingerprintEnrollIntroViewModel( private FingerprintEnrollIntroViewModel newFingerprintEnrollIntroViewModel(
@NonNull FingerprintRepository fingerprintRepository) { @NonNull FingerprintRepository fingerprintRepository,
@NonNull EnrollmentRequest enrollmentRequest) {
final FingerprintEnrollIntroViewModel viewModel = final FingerprintEnrollIntroViewModel viewModel =
new FingerprintEnrollIntroViewModel(mApplication, fingerprintRepository); new FingerprintEnrollIntroViewModel(mApplication, fingerprintRepository,
enrollmentRequest, TEST_USER_ID);
// MediatorLiveData won't update itself unless observed // MediatorLiveData won't update itself unless observed
viewModel.getPageStatusLiveData().observeForever(event -> {}); viewModel.getPageStatusLiveData().observeForever(event -> {});
return viewModel; return viewModel;
@@ -92,16 +93,18 @@ public class FingerprintEnrollIntroViewModelTest {
@Test @Test
public void testPageStatusLiveDataDefaultValue() { public void testPageStatusLiveDataDefaultValue() {
final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel( final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5)); newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5),
newAllFalseRequest(mApplication));
final FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue(); final FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue();
assertThat(status.hasScrollToBottom()).isFalse(); assertThat(status.hasScrollToBottom()).isFalse();
assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_UNKNOWN); assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_OK);
} }
@Test @Test
public void testClearActionLiveData() { public void testClearActionLiveData() {
final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel( final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5)); newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5),
newAllFalseRequest(mApplication));
final MutableLiveData<Integer> actionLiveData = final MutableLiveData<Integer> actionLiveData =
(MutableLiveData<Integer>) viewModel.getActionLiveData(); (MutableLiveData<Integer>) viewModel.getActionLiveData();
@@ -116,40 +119,32 @@ public class FingerprintEnrollIntroViewModelTest {
@Test @Test
public void testGetEnrollmentRequest() { public void testGetEnrollmentRequest() {
final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel( final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5)); newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5),
final EnrollmentRequest request = newAllFalseRequest(mApplication); newAllFalseRequest(mApplication));
viewModel.setEnrollmentRequest(request); assertThat(viewModel.getRequest()).isNotNull();
assertThat(viewModel.getEnrollmentRequest()).isEqualTo(request);
} }
@Test @Test
public void testOnStartToUpdateEnrollableStatusOk_isSuw() { public void testOnStartToUpdateEnrollableStatusOk_isSuw() {
final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel( setupFingerprintEnrolledFingerprints(mFingerprintManager, TEST_USER_ID, 0);
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5));
final int userId = 44;
viewModel.setUserId(userId);
viewModel.setEnrollmentRequest(newIsSuwRequest(mApplication));
setupFingerprintEnrolledFingerprints(mFingerprintManager, userId, 0);
setupSuwMaxFingerprintsEnrollable(mApplication, mResources, 1); setupSuwMaxFingerprintsEnrollable(mApplication, mResources, 1);
viewModel.onStart(mLifecycleOwner); final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5),
newIsSuwRequest(mApplication));
final FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue(); final FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue();
assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_OK); assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_OK);
} }
@Test @Test
public void testOnStartToUpdateEnrollableStatusReachMax_isSuw() { public void testOnStartToUpdateEnrollableStatusReachMax_isSuw() {
final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel( setupFingerprintEnrolledFingerprints(mFingerprintManager, TEST_USER_ID, 1);
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5));
final int userId = 44;
viewModel.setUserId(userId);
viewModel.setEnrollmentRequest(newIsSuwRequest(mApplication));
setupFingerprintEnrolledFingerprints(mFingerprintManager, userId, 1);
setupSuwMaxFingerprintsEnrollable(mApplication, mResources, 1); setupSuwMaxFingerprintsEnrollable(mApplication, mResources, 1);
viewModel.onStart(mLifecycleOwner); final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5),
newIsSuwRequest(mApplication));
final FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue(); final FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue();
assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_ERROR_REACH_MAX); assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_ERROR_REACH_MAX);
} }
@@ -196,27 +191,21 @@ public class FingerprintEnrollIntroViewModelTest {
} }
private void testOnStartToUpdateEnrollableStatusOk(@NonNull EnrollmentRequest request) { private void testOnStartToUpdateEnrollableStatusOk(@NonNull EnrollmentRequest request) {
final int userId = 45; setupFingerprintEnrolledFingerprints(mFingerprintManager, TEST_USER_ID, 0);
final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5));
viewModel.setUserId(userId);
viewModel.setEnrollmentRequest(request);
setupFingerprintEnrolledFingerprints(mFingerprintManager, userId, 0);
viewModel.onStart(mLifecycleOwner); final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5),
request);
FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue(); FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue();
assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_OK); assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_OK);
} }
private void testOnStartToUpdateEnrollableStatusReachMax(@NonNull EnrollmentRequest request) { private void testOnStartToUpdateEnrollableStatusReachMax(@NonNull EnrollmentRequest request) {
final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel( setupFingerprintEnrolledFingerprints(mFingerprintManager, TEST_USER_ID, 5);
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5));
final int userId = 45;
viewModel.setUserId(userId);
viewModel.setEnrollmentRequest(request);
setupFingerprintEnrolledFingerprints(mFingerprintManager, userId, 5);
viewModel.onStart(mLifecycleOwner); final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5),
request);
FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue(); FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue();
assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_ERROR_REACH_MAX); assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_ERROR_REACH_MAX);
} }
@@ -224,7 +213,8 @@ public class FingerprintEnrollIntroViewModelTest {
@Test @Test
public void textCanAssumeUdfps_forUdfpsUltrasonicSensor() { public void textCanAssumeUdfps_forUdfpsUltrasonicSensor() {
final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel( final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_ULTRASONIC, 5)); newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_ULTRASONIC, 5),
newAllFalseRequest(mApplication));
assertThat(viewModel.canAssumeUdfps()).isEqualTo(true); assertThat(viewModel.canAssumeUdfps()).isEqualTo(true);
} }
@@ -232,7 +222,8 @@ public class FingerprintEnrollIntroViewModelTest {
@Test @Test
public void textCanAssumeUdfps_forRearSensor() { public void textCanAssumeUdfps_forRearSensor() {
final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel( final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_REAR, 5)); newFingerprintRepository(mFingerprintManager, TYPE_REAR, 5),
newAllFalseRequest(mApplication));
assertThat(viewModel.canAssumeUdfps()).isEqualTo(false); assertThat(viewModel.canAssumeUdfps()).isEqualTo(false);
} }
@@ -243,8 +234,9 @@ public class FingerprintEnrollIntroViewModelTest {
// FingerprintRepository.isParentalConsentRequired() calls static method inside, we can't // FingerprintRepository.isParentalConsentRequired() calls static method inside, we can't
// mock static method // mock static method
final FingerprintRepository fingerprintRepository = mock(FingerprintRepository.class); final FingerprintRepository fingerprintRepository = mock(FingerprintRepository.class);
final FingerprintEnrollIntroViewModel viewModel = final FingerprintEnrollIntroViewModel viewModel = new FingerprintEnrollIntroViewModel(
new FingerprintEnrollIntroViewModel(mApplication, fingerprintRepository); mApplication, fingerprintRepository, newAllFalseRequest(mApplication),
TEST_USER_ID);
when(fingerprintRepository.isParentalConsentRequired(mApplication)).thenReturn(true); when(fingerprintRepository.isParentalConsentRequired(mApplication)).thenReturn(true);
assertThat(viewModel.isParentalConsentRequired()).isEqualTo(true); assertThat(viewModel.isParentalConsentRequired()).isEqualTo(true);
@@ -259,23 +251,22 @@ public class FingerprintEnrollIntroViewModelTest {
// FingerprintRepository.isDisabledByAdmin() calls static method inside, we can't mock // FingerprintRepository.isDisabledByAdmin() calls static method inside, we can't mock
// static method // static method
final FingerprintRepository fingerprintRepository = mock(FingerprintRepository.class); final FingerprintRepository fingerprintRepository = mock(FingerprintRepository.class);
final FingerprintEnrollIntroViewModel viewModel = final FingerprintEnrollIntroViewModel viewModel = new FingerprintEnrollIntroViewModel(
new FingerprintEnrollIntroViewModel(mApplication, fingerprintRepository); mApplication, fingerprintRepository, newAllFalseRequest(mApplication),
TEST_USER_ID);
final int userId = 33; when(fingerprintRepository.isDisabledByAdmin(mApplication, TEST_USER_ID)).thenReturn(true);
viewModel.setUserId(userId);
when(fingerprintRepository.isDisabledByAdmin(mApplication, userId)).thenReturn(true);
assertThat(viewModel.isBiometricUnlockDisabledByAdmin()).isEqualTo(true); assertThat(viewModel.isBiometricUnlockDisabledByAdmin()).isEqualTo(true);
when(fingerprintRepository.isDisabledByAdmin(mApplication, userId)).thenReturn(false); when(fingerprintRepository.isDisabledByAdmin(mApplication, TEST_USER_ID)).thenReturn(false);
assertThat(viewModel.isBiometricUnlockDisabledByAdmin()).isEqualTo(false); assertThat(viewModel.isBiometricUnlockDisabledByAdmin()).isEqualTo(false);
} }
@Test @Test
public void testSetHasScrolledToBottom() { public void testSetHasScrolledToBottom() {
final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel( final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5)); newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5),
newAllFalseRequest(mApplication));
viewModel.setHasScrolledToBottom(true); viewModel.setHasScrolledToBottom(true);
FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue(); FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue();
@@ -288,17 +279,13 @@ public class FingerprintEnrollIntroViewModelTest {
@Test @Test
public void testOnNextButtonClick_enrollNext() { public void testOnNextButtonClick_enrollNext() {
final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5));
final int userId = 46;
viewModel.setUserId(userId);
viewModel.setEnrollmentRequest(newIsSuwRequest(mApplication));
// Set latest status to FINGERPRINT_ENROLLABLE_OK // Set latest status to FINGERPRINT_ENROLLABLE_OK
setupFingerprintEnrolledFingerprints(mFingerprintManager, userId, 0); setupFingerprintEnrolledFingerprints(mFingerprintManager, TEST_USER_ID, 0);
setupSuwMaxFingerprintsEnrollable(mApplication, mResources, 1); setupSuwMaxFingerprintsEnrollable(mApplication, mResources, 1);
viewModel.onStart(mLifecycleOwner); final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5),
newIsSuwRequest(mApplication));
FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue(); FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue();
assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_OK); assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_OK);
@@ -311,17 +298,13 @@ public class FingerprintEnrollIntroViewModelTest {
@Test @Test
public void testOnNextButtonClick_doneAndFinish() { public void testOnNextButtonClick_doneAndFinish() {
final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5));
final int userId = 46;
viewModel.setUserId(userId);
viewModel.setEnrollmentRequest(newIsSuwRequest(mApplication));
// Set latest status to FINGERPRINT_ENROLLABLE_ERROR_REACH_MAX // Set latest status to FINGERPRINT_ENROLLABLE_ERROR_REACH_MAX
setupFingerprintEnrolledFingerprints(mFingerprintManager, userId, 1); setupFingerprintEnrolledFingerprints(mFingerprintManager, TEST_USER_ID, 1);
setupSuwMaxFingerprintsEnrollable(mApplication, mResources, 1); setupSuwMaxFingerprintsEnrollable(mApplication, mResources, 1);
viewModel.onStart(mLifecycleOwner); final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5),
newIsSuwRequest(mApplication));
FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue(); FingerprintEnrollIntroStatus status = viewModel.getPageStatusLiveData().getValue();
assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_ERROR_REACH_MAX); assertThat(status.getEnrollableStatus()).isEqualTo(FINGERPRINT_ENROLLABLE_ERROR_REACH_MAX);
@@ -335,7 +318,8 @@ public class FingerprintEnrollIntroViewModelTest {
@Test @Test
public void testOnSkipOrCancelButtonClick() { public void testOnSkipOrCancelButtonClick() {
final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel( final FingerprintEnrollIntroViewModel viewModel = newFingerprintEnrollIntroViewModel(
newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5)); newFingerprintRepository(mFingerprintManager, TYPE_UDFPS_OPTICAL, 5),
newAllFalseRequest(mApplication));
viewModel.onSkipOrCancelButtonClick(); viewModel.onSkipOrCancelButtonClick();

View File

@@ -56,6 +56,8 @@ import org.mockito.junit.MockitoRule;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public class FingerprintEnrollProgressViewModelTest { public class FingerprintEnrollProgressViewModelTest {
private static final int TEST_USER_ID = 334;
@Rule public final MockitoRule mockito = MockitoJUnit.rule(); @Rule public final MockitoRule mockito = MockitoJUnit.rule();
@Rule public final InstantTaskExecutorRule mTaskExecutorRule = new InstantTaskExecutorRule(); @Rule public final InstantTaskExecutorRule mTaskExecutorRule = new InstantTaskExecutorRule();
@@ -70,23 +72,22 @@ public class FingerprintEnrollProgressViewModelTest {
when(mApplication.getResources()).thenReturn(mResources); when(mApplication.getResources()).thenReturn(mResources);
when(mResources.getBoolean(R.bool.enrollment_message_display_controller_flag)) when(mResources.getBoolean(R.bool.enrollment_message_display_controller_flag))
.thenReturn(false); .thenReturn(false);
mViewModel = new FingerprintEnrollProgressViewModel(mApplication, mFingerprintUpdater); mViewModel = new FingerprintEnrollProgressViewModel(mApplication, mFingerprintUpdater,
TEST_USER_ID);
} }
@Test @Test
public void testStartEnrollment() { public void testStartEnrollment() {
@EnrollReason final int enrollReason = ENROLL_FIND_SENSOR; @EnrollReason final int enrollReason = ENROLL_FIND_SENSOR;
final int userId = 334;
final byte[] token = new byte[] { 1, 2, 3 }; final byte[] token = new byte[] { 1, 2, 3 };
mViewModel.setToken(token); mViewModel.setToken(token);
mViewModel.setUserId(userId);
// Start enrollment // Start enrollment
final boolean ret = mViewModel.startEnrollment(enrollReason); final boolean ret = mViewModel.startEnrollment(enrollReason);
assertThat(ret).isTrue(); assertThat(ret).isTrue();
verify(mFingerprintUpdater, only()).enroll(eq(token), any(CancellationSignal.class), verify(mFingerprintUpdater, only()).enroll(eq(token), any(CancellationSignal.class),
eq(userId), any(EnrollmentCallback.class), eq(enrollReason)); eq(TEST_USER_ID), any(EnrollmentCallback.class), eq(enrollReason));
} }
@Test @Test
@@ -102,17 +103,15 @@ public class FingerprintEnrollProgressViewModelTest {
@Test @Test
public void testCancelEnrollment() { public void testCancelEnrollment() {
@EnrollReason final int enrollReason = ENROLL_ENROLL; @EnrollReason final int enrollReason = ENROLL_ENROLL;
final int userId = 334;
final byte[] token = new byte[] { 1, 2, 3 }; final byte[] token = new byte[] { 1, 2, 3 };
mViewModel.setToken(token); mViewModel.setToken(token);
mViewModel.setUserId(userId);
final TestWrapper<CancellationSignal> signalWrapper = new TestWrapper<>(); final TestWrapper<CancellationSignal> signalWrapper = new TestWrapper<>();
doAnswer(invocation -> { doAnswer(invocation -> {
signalWrapper.mValue = invocation.getArgument(1); signalWrapper.mValue = invocation.getArgument(1);
return null; return null;
}).when(mFingerprintUpdater).enroll(any(byte[].class), any(CancellationSignal.class), }).when(mFingerprintUpdater).enroll(any(byte[].class), any(CancellationSignal.class),
eq(userId), any(EnrollmentCallback.class), anyInt()); eq(TEST_USER_ID), any(EnrollmentCallback.class), anyInt());
// Start enrollment // Start enrollment
final boolean ret = mViewModel.startEnrollment(enrollReason); final boolean ret = mViewModel.startEnrollment(enrollReason);
@@ -128,17 +127,15 @@ public class FingerprintEnrollProgressViewModelTest {
@Test @Test
public void testProgressUpdate() { public void testProgressUpdate() {
@EnrollReason final int enrollReason = ENROLL_ENROLL; @EnrollReason final int enrollReason = ENROLL_ENROLL;
final int userId = 334;
final byte[] token = new byte[] { 1, 2, 3 }; final byte[] token = new byte[] { 1, 2, 3 };
mViewModel.setToken(token); mViewModel.setToken(token);
mViewModel.setUserId(userId);
final TestWrapper<EnrollmentCallback> callbackWrapper = new TestWrapper<>(); final TestWrapper<EnrollmentCallback> callbackWrapper = new TestWrapper<>();
doAnswer(invocation -> { doAnswer(invocation -> {
callbackWrapper.mValue = invocation.getArgument(3); callbackWrapper.mValue = invocation.getArgument(3);
return null; return null;
}).when(mFingerprintUpdater).enroll(any(byte[].class), any(CancellationSignal.class), }).when(mFingerprintUpdater).enroll(any(byte[].class), any(CancellationSignal.class),
eq(userId), any(EnrollmentCallback.class), anyInt()); eq(TEST_USER_ID), any(EnrollmentCallback.class), anyInt());
// Start enrollment // Start enrollment
final boolean ret = mViewModel.startEnrollment(enrollReason); final boolean ret = mViewModel.startEnrollment(enrollReason);

View File

@@ -40,7 +40,6 @@ 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.biometrics2.ui.model.EnrollmentRequest;
import com.android.settings.password.SetupSkipDialog; import com.android.settings.password.SetupSkipDialog;
import com.android.settings.testutils.InstantTaskExecutorRule; import com.android.settings.testutils.InstantTaskExecutorRule;
@@ -70,28 +69,21 @@ 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); mKeyguardManager, newAllFalseRequest(mApplication));
} }
@Test @Test
public void testGetRequest() { public void testGetRequest() {
when(mKeyguardManager.isKeyguardSecure()).thenReturn(true); assertThat(mViewModel.getRequest()).isNotNull();
assertThat(mViewModel.getRequest()).isNull();
final EnrollmentRequest request = newAllFalseRequest(mApplication);
mViewModel.setRequest(request);
assertThat(mViewModel.getRequest()).isEqualTo(request);
} }
@Test @Test
public void testGetNextActivityBaseIntentExtras() { public void testGetNextActivityBaseIntentExtras() {
mViewModel.setRequest(newAllFalseRequest(mApplication));
assertThat(mViewModel.getNextActivityBaseIntentExtras()).isNotNull(); assertThat(mViewModel.getNextActivityBaseIntentExtras()).isNotNull();
} }
@Test @Test
public void testOnContinueEnrollActivityResult_shouldRelaySkip1Result() { public void testOnContinueEnrollActivityResult_shouldRelaySkip1Result() {
mViewModel.setRequest(newAllFalseRequest(mApplication));
final ActivityResult result = new ActivityResult(RESULT_SKIP, null); final ActivityResult result = new ActivityResult(RESULT_SKIP, null);
// Run onContinueEnrollActivityResult // Run onContinueEnrollActivityResult
@@ -102,7 +94,6 @@ public class FingerprintEnrollmentViewModelTest {
@Test @Test
public void testOnContinueEnrollActivityResult_shouldRelaySkip2Result() { public void testOnContinueEnrollActivityResult_shouldRelaySkip2Result() {
mViewModel.setRequest(newAllFalseRequest(mApplication));
final ActivityResult result = new ActivityResult(SetupSkipDialog.RESULT_SKIP, null); final ActivityResult result = new ActivityResult(SetupSkipDialog.RESULT_SKIP, null);
// Run onContinueEnrollActivityResult // Run onContinueEnrollActivityResult
@@ -113,7 +104,6 @@ public class FingerprintEnrollmentViewModelTest {
@Test @Test
public void testOnContinueEnrollActivityResult_shouldRelayNullDataTimeoutResult() { public void testOnContinueEnrollActivityResult_shouldRelayNullDataTimeoutResult() {
mViewModel.setRequest(newAllFalseRequest(mApplication));
final ActivityResult result = new ActivityResult(RESULT_TIMEOUT, null); final ActivityResult result = new ActivityResult(RESULT_TIMEOUT, null);
// Run onContinueEnrollActivityResult // Run onContinueEnrollActivityResult
@@ -127,7 +117,6 @@ public class FingerprintEnrollmentViewModelTest {
@Test @Test
public void testOnContinueEnrollActivityResult_shouldRelayWithDataTimeoutResult() { public void testOnContinueEnrollActivityResult_shouldRelayWithDataTimeoutResult() {
mViewModel.setRequest(newAllFalseRequest(mApplication));
final Intent intent = new Intent("testAction"); final Intent intent = new Intent("testAction");
intent.putExtra("testKey", "testValue"); intent.putExtra("testKey", "testValue");
final ActivityResult result = new ActivityResult(RESULT_TIMEOUT, intent); final ActivityResult result = new ActivityResult(RESULT_TIMEOUT, intent);
@@ -143,7 +132,6 @@ public class FingerprintEnrollmentViewModelTest {
@Test @Test
public void testOnContinueEnrollActivityResult_shouldRelayNullDataFinishResult() { public void testOnContinueEnrollActivityResult_shouldRelayNullDataFinishResult() {
mViewModel.setRequest(newAllFalseRequest(mApplication));
final ActivityResult result = new ActivityResult(RESULT_FINISHED, null); final ActivityResult result = new ActivityResult(RESULT_FINISHED, null);
// Run onContinueEnrollActivityResult // Run onContinueEnrollActivityResult
@@ -157,7 +145,6 @@ public class FingerprintEnrollmentViewModelTest {
@Test @Test
public void testOnContinueEnrollActivityResult_shouldRelayWithDataFinishResult() { public void testOnContinueEnrollActivityResult_shouldRelayWithDataFinishResult() {
mViewModel.setRequest(newAllFalseRequest(mApplication));
final Intent intent = new Intent("testAction"); final Intent intent = new Intent("testAction");
intent.putExtra("testKey", "testValue"); intent.putExtra("testKey", "testValue");
final ActivityResult result = new ActivityResult(RESULT_FINISHED, intent); final ActivityResult result = new ActivityResult(RESULT_FINISHED, intent);
@@ -173,11 +160,12 @@ public class FingerprintEnrollmentViewModelTest {
@Test @Test
public void testOnContinueEnrollActivityResult_shouldRelayNullDataFinishResultAsNewData() { public void testOnContinueEnrollActivityResult_shouldRelayNullDataFinishResultAsNewData() {
mViewModel = new FingerprintEnrollmentViewModel(mApplication, mFingerprintRepository,
mKeyguardManager, newIsSuwRequest(mApplication));
when(mKeyguardManager.isKeyguardSecure()).thenReturn(true); when(mKeyguardManager.isKeyguardSecure()).thenReturn(true);
final int userId = 111; final int userId = 111;
final int numOfFp = 4; final int numOfFp = 4;
setupFingerprintEnrolledFingerprints(mFingerprintManager, userId, numOfFp); setupFingerprintEnrolledFingerprints(mFingerprintManager, userId, numOfFp);
mViewModel.setRequest(newIsSuwRequest(mApplication));
final ActivityResult result = new ActivityResult(RESULT_FINISHED, null); final ActivityResult result = new ActivityResult(RESULT_FINISHED, null);
// Run onContinueEnrollActivityResult // Run onContinueEnrollActivityResult
@@ -194,11 +182,12 @@ public class FingerprintEnrollmentViewModelTest {
@Test @Test
public void testOnContinueEnrollActivityResult_shouldRelayWithDataFinishResultAsNewData() { public void testOnContinueEnrollActivityResult_shouldRelayWithDataFinishResultAsNewData() {
mViewModel = new FingerprintEnrollmentViewModel(mApplication, mFingerprintRepository,
mKeyguardManager, newIsSuwRequest(mApplication));
when(mKeyguardManager.isKeyguardSecure()).thenReturn(true); when(mKeyguardManager.isKeyguardSecure()).thenReturn(true);
final int userId = 20; final int userId = 20;
final int numOfFp = 9; final int numOfFp = 9;
setupFingerprintEnrolledFingerprints(mFingerprintManager, userId, numOfFp); setupFingerprintEnrolledFingerprints(mFingerprintManager, userId, numOfFp);
mViewModel.setRequest(newIsSuwRequest(mApplication));
final String action = "testAction"; final String action = "testAction";
final String key = "testKey"; final String key = "testKey";
final String value = "testValue"; final String value = "testValue";