diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 3f704ba7..ff47023b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -234,7 +234,7 @@
-
-
+
diff --git a/res/drawable/ic_face.xml b/res/drawable/ic_face.xml
new file mode 100644
index 00000000..9a540bd1
--- /dev/null
+++ b/res/drawable/ic_face.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/layout/setup_fingerprint.xml b/res/layout/setup_biometric.xml
similarity index 88%
rename from res/layout/setup_fingerprint.xml
rename to res/layout/setup_biometric.xml
index f4128b14..c8a5508f 100644
--- a/res/layout/setup_fingerprint.xml
+++ b/res/layout/setup_biometric.xml
@@ -39,14 +39,14 @@
style="@style/PageContent">
+ android:paddingRight="@dimen/location_text_margin_right"/>
+ android:text="@string/biometric_setup_backup_lock_method"/>
+ android:textStyle="bold"/>
+ android:textColor="@color/biometric_setup_text_color"
+ android:text="@string/biometric_setup_screen_lock_setup"/>
diff --git a/res/raw/lineage_wizard_script.xml b/res/raw/lineage_wizard_script.xml
index d7bc7af4..2a0fbf19 100644
--- a/res/raw/lineage_wizard_script.xml
+++ b/res/raw/lineage_wizard_script.xml
@@ -58,10 +58,10 @@
-
+
-
+
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 98020f4d..4e5bedbc 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -31,5 +31,5 @@
@color/primary
@color/primary
@color/primary
- #167C80
+ #167C80
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2eb29dfa..cacc01d6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -80,14 +80,17 @@
Require your account password in order to use your device even after a factory reset.
To turn this feature off/on, please go to Settings > Security
-
- Select backup screen lock type
- How would you like to lock your screen?
+
+ Select backup screen lock type
+ How would you like to lock your screen?
Fingerprint setup
To use your fingerprint sensor to unlock your screen, you\'ll need to:
- Setup a secondary unlock method
Add your fingerprint
- Setup screen lock
+ Face setup
+ To use your face to unlock your screen, you\'ll need to:
+ Add your face
+ Setup a secondary unlock method
+ Setup screen lock
%1$s SIM detected
diff --git a/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java b/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java
index da9f9b46..684328e3 100644
--- a/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java
+++ b/src/org/lineageos/setupwizard/BaseSetupWizardActivity.java
@@ -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;
diff --git a/src/org/lineageos/setupwizard/FingerprintActivity.java b/src/org/lineageos/setupwizard/BiometricActivity.java
similarity index 54%
rename from src/org/lineageos/setupwizard/FingerprintActivity.java
rename to src/org/lineageos/setupwizard/BiometricActivity.java
index 04a0f476..c3385560 100644
--- a/src/org/lineageos/setupwizard/FingerprintActivity.java
+++ b/src/org/lineageos/setupwizard/BiometricActivity.java
@@ -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);
}
}
diff --git a/src/org/lineageos/setupwizard/SetupWizardApp.java b/src/org/lineageos/setupwizard/SetupWizardApp.java
index 57c992ba..4d1dbd30 100644
--- a/src/org/lineageos/setupwizard/SetupWizardApp.java
+++ b/src/org/lineageos/setupwizard/SetupWizardApp.java
@@ -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;
diff --git a/src/org/lineageos/setupwizard/util/SetupWizardUtils.java b/src/org/lineageos/setupwizard/util/SetupWizardUtils.java
index 08e31ffa..e9a59783 100644
--- a/src/org/lineageos/setupwizard/util/SetupWizardUtils.java
+++ b/src/org/lineageos/setupwizard/util/SetupWizardUtils.java
@@ -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);