Switch fingerprint setup to biometric setup instead

* Generic, handles both face and fingerprint
* Works the same as before for fingerprint
* Works the same as fingerprint for face
* What else could one ask for?

Change-Id: I9ddd7b46548c8107239fdec457bbaae6b12876e6
This commit is contained in:
Chirayu Desai
2020-05-28 00:26:19 +05:30
committed by Alessandro Astone
parent 799d3cb3b3
commit 103ac80d23
10 changed files with 116 additions and 40 deletions

View File

@@ -80,7 +80,7 @@ public abstract class BaseSetupWizardActivity extends Activity implements Naviga
protected static final int EMERGENCY_DIAL_ACTIVITY_REQUEST = 10038;
protected static final int WIFI_ACTIVITY_REQUEST = 10004;
protected static final int BLUETOOTH_ACTIVITY_REQUEST = 10100;
protected static final int FINGERPRINT_ACTIVITY_REQUEST = 10101;
protected static final int BIOMETRIC_ACTIVITY_REQUEST = 10101;
protected static final int SCREENLOCK_ACTIVITY_REQUEST = 10102;
private static final int IMMERSIVE_FLAGS =
@@ -610,8 +610,8 @@ public abstract class BaseSetupWizardActivity extends Activity implements Naviga
case BLUETOOTH_ACTIVITY_REQUEST:
sb.append("BLUETOOTH_ACTIVITY_REQUEST");
break;
case FINGERPRINT_ACTIVITY_REQUEST:
sb.append("FINGERPRINT_ACTIVITY_REQUEST");
case BIOMETRIC_ACTIVITY_REQUEST:
sb.append("BIOMETRIC_ACTIVITY_REQUEST");
break;
case SCREENLOCK_ACTIVITY_REQUEST:
sb.append("SCREENLOCK_ACTIVITY_REQUEST");
@@ -652,7 +652,7 @@ public abstract class BaseSetupWizardActivity extends Activity implements Naviga
default:
break;
}
case FINGERPRINT_ACTIVITY_REQUEST:
case BIOMETRIC_ACTIVITY_REQUEST:
switch (resultCode) {
case RESULT_OK:
sb.append("RESULT_OK");
@@ -661,7 +661,7 @@ public abstract class BaseSetupWizardActivity extends Activity implements Naviga
sb.append("RESULT_CANCELED");
break;
case RESULT_SKIP:
sb.append("RESULT_FINGERPRINT_SKIP");
sb.append("RESULT_BIOMETRIC_SKIP");
break;
default:
break;

View File

@@ -17,7 +17,7 @@
package org.lineageos.setupwizard;
import static org.lineageos.setupwizard.SetupWizardApp.ACTION_SETUP_FINGERPRINT;
import static org.lineageos.setupwizard.SetupWizardApp.ACTION_SETUP_BIOMETRIC;
import static org.lineageos.setupwizard.SetupWizardApp.EXTRA_ALLOW_SKIP;
import static org.lineageos.setupwizard.SetupWizardApp.EXTRA_AUTO_FINISH;
import static org.lineageos.setupwizard.SetupWizardApp.EXTRA_DETAILS;
@@ -26,48 +26,75 @@ import static org.lineageos.setupwizard.SetupWizardApp.EXTRA_MATERIAL_LIGHT;
import static org.lineageos.setupwizard.SetupWizardApp.EXTRA_THEME;
import static org.lineageos.setupwizard.SetupWizardApp.EXTRA_TITLE;
import static org.lineageos.setupwizard.SetupWizardApp.EXTRA_USE_IMMERSIVE;
import static org.lineageos.setupwizard.SetupWizardApp.REQUEST_CODE_SETUP_FINGERPRINT;
import static org.lineageos.setupwizard.SetupWizardApp.REQUEST_CODE_SETUP_BIOMETRIC;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class FingerprintActivity extends SubBaseActivity {
import com.google.android.setupcompat.util.WizardManagerHelper;
public static final String TAG = FingerprintActivity.class.getSimpleName();
import org.lineageos.setupwizard.util.SetupWizardUtils;
public class BiometricActivity extends SubBaseActivity {
public static final String TAG = BiometricActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final TextView setupBiometricSummary = (TextView) findViewById(R.id.setup_biometric_summary);
final TextView setupAddBiometric = (TextView) findViewById(R.id.setup_add_biometric);
if (SetupWizardUtils.hasFace(this)) {
setupBiometricSummary.setText(getString(R.string.face_setup_summary));
setupAddBiometric.setText(R.string.face_setup_add_face);
} else {
setupBiometricSummary.setText(getString(R.string.fingerprint_setup_summary));
setupAddBiometric.setText(R.string.fingerprint_setup_add_fingerprint);
}
}
@Override
protected void onStartSubactivity() {
setNextAllowed(true);
findViewById(R.id.setup_fingerprint).setOnClickListener(view -> launchFingerprintSetup());
findViewById(R.id.setup_biometric).setOnClickListener(view -> launchBiometricSetup());
}
@Override
protected int getLayoutResId() {
return R.layout.setup_fingerprint;
return R.layout.setup_biometric;
}
@Override
protected int getTitleResId() {
if (SetupWizardUtils.hasFace(this)) {
return R.string.face_setup_title;
}
return R.string.fingerprint_setup_title;
}
@Override
protected int getIconResId() {
if (SetupWizardUtils.hasFace(this)) {
return R.drawable.ic_face;
}
return R.drawable.ic_fingerprint;
}
private void launchFingerprintSetup() {
Intent intent = new Intent(ACTION_SETUP_FINGERPRINT);
private void launchBiometricSetup() {
Intent intent = new Intent(ACTION_SETUP_BIOMETRIC);
intent.putExtra(EXTRA_FIRST_RUN, true);
intent.putExtra(EXTRA_ALLOW_SKIP, true);
intent.putExtra(EXTRA_USE_IMMERSIVE, true);
intent.putExtra(EXTRA_THEME, EXTRA_MATERIAL_LIGHT);
intent.putExtra(EXTRA_AUTO_FINISH, false);
/*intent.putExtra(LockPatternUtils.LOCKSCREEN_FINGERPRINT_FALLBACK, true);*/
/*intent.putExtra(LockPatternUtils.LOCKSCREEN_BIOMETRIC_FALLBACK, true);*/
intent.putExtra(EXTRA_TITLE,
getString(R.string.settings_fingerprint_setup_title));
getString(getTitleResId()));
intent.putExtra(EXTRA_DETAILS,
getString(R.string.settings_fingerprint_setup_details));
startSubactivity(intent, REQUEST_CODE_SETUP_FINGERPRINT);
getString(R.string.settings_biometric_setup_details));
intent.putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true);
startSubactivity(intent, REQUEST_CODE_SETUP_BIOMETRIC);
}
}

View File

@@ -38,7 +38,7 @@ public class SetupWizardApp extends Application {
public static final String ACTION_SETUP_COMPLETE = "org.lineageos.setupwizard.LINEAGE_SETUP_COMPLETE";
public static final String ACTION_FINISHED = "org.lineageos.setupwizard.SETUP_FINISHED";
public static final String ACTION_SETUP_WIFI = "android.net.wifi.PICK_WIFI_NETWORK";
public static final String ACTION_SETUP_FINGERPRINT = "android.settings.FINGERPRINT_SETUP";
public static final String ACTION_SETUP_BIOMETRIC = "android.settings.BIOMETRIC_ENROLL";
public static final String ACTION_SETUP_LOCKSCREEN = "com.android.settings.SETUP_LOCK_SCREEN";
public static final String ACTION_RESTORE_FROM_BACKUP = "com.stevesoltys.seedvault.RESTORE_BACKUP";
public static final String ACTION_EMERGENCY_DIAL = "com.android.phone.EmergencyDialer.DIAL";
@@ -60,6 +60,7 @@ public class SetupWizardApp extends Application {
public static final String EXTRA_RESULT_CODE = "com.android.setupwizard.ResultCode";
public static final String EXTRA_PREFS_SHOW_BUTTON_BAR = "extra_prefs_show_button_bar";
public static final String EXTRA_PREFS_SET_BACK_TEXT = "extra_prefs_set_back_text";
public static final String EXTRA_IS_SETUP_FLOW = "isSetupFlow";
public static final String KEY_DETECT_CAPTIVE_PORTAL = "captive_portal_detection_enabled";
public static final String KEY_SEND_METRICS = "send_metrics";
@@ -69,7 +70,7 @@ public class SetupWizardApp extends Application {
public static final int REQUEST_CODE_SETUP_WIFI = 0;
public static final int REQUEST_CODE_SETUP_CAPTIVE_PORTAL= 4;
public static final int REQUEST_CODE_SETUP_BLUETOOTH= 5;
public static final int REQUEST_CODE_SETUP_FINGERPRINT = 7;
public static final int REQUEST_CODE_SETUP_BIOMETRIC = 7;
public static final int REQUEST_CODE_SETUP_LOCKSCREEN = 9;
public static final int REQUEST_CODE_RESTORE = 10;

View File

@@ -42,6 +42,7 @@ import android.content.pm.ComponentInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Binder;
import android.os.SystemProperties;
@@ -55,7 +56,7 @@ import android.util.Log;
import org.lineageos.setupwizard.BluetoothSetupActivity;
import org.lineageos.setupwizard.ChooseDataSimActivity;
import org.lineageos.setupwizard.FingerprintActivity;
import org.lineageos.setupwizard.BiometricActivity;
import org.lineageos.setupwizard.MobileDataActivity;
import org.lineageos.setupwizard.SetupWizardApp;
import org.lineageos.setupwizard.SimMissingActivity;
@@ -227,6 +228,10 @@ public class SetupWizardUtils {
return packageManager.hasSystemFeature(PackageManager.FEATURE_LEANBACK);
}
public static boolean hasBiometric(Context context) {
return hasFingerprint(context) || hasFace(context);
}
public static boolean hasFingerprint(Context context) {
PackageManager packageManager = context.getPackageManager();
if (packageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
@@ -238,6 +243,17 @@ public class SetupWizardUtils {
}
}
public static boolean hasFace(Context context) {
PackageManager packageManager = context.getPackageManager();
if (packageManager.hasSystemFeature(PackageManager.FEATURE_FACE)) {
FaceManager faceManager = (FaceManager)
context.getSystemService(Context.FACE_SERVICE);
return faceManager.isHardwareDetected();
} else {
return false;
}
}
public static boolean simMissing() {
return PhoneMonitor.getInstance().simMissing();
}
@@ -246,8 +262,8 @@ public class SetupWizardUtils {
if (!hasLeanback(context)) {
disableComponent(context, BluetoothSetupActivity.class);
}
if (!hasFingerprint(context)) {
disableComponent(context, FingerprintActivity.class);
if (!hasBiometric(context)) {
disableComponent(context, BiometricActivity.class);
}
if (!hasTelephony(context)) {
disableComponent(context, MobileDataActivity.class);