Loading src/com/android/settings/biometrics/face/FaceSettings.java +8 −1 Original line number Diff line number Diff line Loading @@ -59,6 +59,10 @@ public class FaceSettings extends DashboardFragment { private byte[] mToken; private FaceSettingsAttentionPreferenceController mAttentionController; private final FaceSettingsRemoveButtonPreferenceController.Listener mRemovalListener = () -> { getActivity().finish(); }; public static boolean isAvailable(Context context) { FaceManager manager = Utils.getFaceManagerOrNull(context); return manager != null && manager.isHardwareDetected(); Loading Loading @@ -146,10 +150,13 @@ public class FaceSettings extends DashboardFragment { protected List<AbstractPreferenceController> createPreferenceControllers(Context context) { final List<AbstractPreferenceController> controllers = buildPreferenceControllers(context, getSettingsLifecycle()); // There's no great way of doing this right now :/ for (AbstractPreferenceController controller : controllers) { if (controller instanceof FaceSettingsAttentionPreferenceController) { mAttentionController = (FaceSettingsAttentionPreferenceController) controller; break; } else if (controller instanceof FaceSettingsRemoveButtonPreferenceController) { ((FaceSettingsRemoveButtonPreferenceController) controller) .setListener(mRemovalListener); } } Loading src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java +63 −1 Original line number Diff line number Diff line Loading @@ -17,8 +17,13 @@ package com.android.settings.biometrics.face; import android.content.Context; import android.hardware.face.Face; import android.hardware.face.FaceManager; import android.os.UserHandle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; import androidx.preference.Preference; Loading @@ -26,18 +31,61 @@ import com.android.settings.R; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.widget.LayoutPreference; import java.util.List; /** * Controller for the remove button. * Controller for the remove button. This assumes that there is only a single face enrolled. The UI * will likely change if multiple enrollments are allowed/supported. */ public class FaceSettingsRemoveButtonPreferenceController extends BasePreferenceController implements View.OnClickListener { private static final String TAG = "FaceSettings/Remove"; private static final String KEY = "security_settings_face_delete_faces_container"; interface Listener { void onRemoved(); } private Button mButton; private List<Face> mFaces; private Listener mListener; private final Context mContext; private final int mUserId; private final FaceManager mFaceManager; private final FaceManager.RemovalCallback mRemovalCallback = new FaceManager.RemovalCallback() { @Override public void onRemovalError(Face face, int errMsgId, CharSequence errString) { Log.e(TAG, "Unable to remove face: " + face.getBiometricId() + " error: " + errMsgId + " " + errString); Toast.makeText(mContext, errString, Toast.LENGTH_SHORT).show(); } @Override public void onRemovalSucceeded(Face face, int remaining) { if (remaining == 0) { mFaces = mFaceManager.getEnrolledFaces(mUserId); if (!mFaces.isEmpty()) { mButton.setEnabled(true); } else { mListener.onRemoved(); } } else { Log.v(TAG, "Remaining: " + remaining); } } }; public FaceSettingsRemoveButtonPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); mContext = context; mFaceManager = context.getSystemService(FaceManager.class); // TODO: Use the profile-specific userId instead mUserId = UserHandle.myUserId(); if (mFaceManager != null) { mFaces = mFaceManager.getEnrolledFaces(mUserId); } } public FaceSettingsRemoveButtonPreferenceController(Context context) { Loading Loading @@ -66,7 +114,21 @@ public class FaceSettingsRemoveButtonPreferenceController extends BasePreference @Override public void onClick(View v) { if (v == mButton) { mButton.setEnabled(false); if (mFaces.isEmpty()) { Log.e(TAG, "No faces"); return; } if (mFaces.size() > 1) { Log.e(TAG, "Multiple enrollments: " + mFaces.size()); } // Remove the first/only face mFaceManager.remove(mFaces.get(0), mUserId, mRemovalCallback); } } public void setListener(Listener listener) { mListener = listener; } } Loading
src/com/android/settings/biometrics/face/FaceSettings.java +8 −1 Original line number Diff line number Diff line Loading @@ -59,6 +59,10 @@ public class FaceSettings extends DashboardFragment { private byte[] mToken; private FaceSettingsAttentionPreferenceController mAttentionController; private final FaceSettingsRemoveButtonPreferenceController.Listener mRemovalListener = () -> { getActivity().finish(); }; public static boolean isAvailable(Context context) { FaceManager manager = Utils.getFaceManagerOrNull(context); return manager != null && manager.isHardwareDetected(); Loading Loading @@ -146,10 +150,13 @@ public class FaceSettings extends DashboardFragment { protected List<AbstractPreferenceController> createPreferenceControllers(Context context) { final List<AbstractPreferenceController> controllers = buildPreferenceControllers(context, getSettingsLifecycle()); // There's no great way of doing this right now :/ for (AbstractPreferenceController controller : controllers) { if (controller instanceof FaceSettingsAttentionPreferenceController) { mAttentionController = (FaceSettingsAttentionPreferenceController) controller; break; } else if (controller instanceof FaceSettingsRemoveButtonPreferenceController) { ((FaceSettingsRemoveButtonPreferenceController) controller) .setListener(mRemovalListener); } } Loading
src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java +63 −1 Original line number Diff line number Diff line Loading @@ -17,8 +17,13 @@ package com.android.settings.biometrics.face; import android.content.Context; import android.hardware.face.Face; import android.hardware.face.FaceManager; import android.os.UserHandle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; import androidx.preference.Preference; Loading @@ -26,18 +31,61 @@ import com.android.settings.R; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.widget.LayoutPreference; import java.util.List; /** * Controller for the remove button. * Controller for the remove button. This assumes that there is only a single face enrolled. The UI * will likely change if multiple enrollments are allowed/supported. */ public class FaceSettingsRemoveButtonPreferenceController extends BasePreferenceController implements View.OnClickListener { private static final String TAG = "FaceSettings/Remove"; private static final String KEY = "security_settings_face_delete_faces_container"; interface Listener { void onRemoved(); } private Button mButton; private List<Face> mFaces; private Listener mListener; private final Context mContext; private final int mUserId; private final FaceManager mFaceManager; private final FaceManager.RemovalCallback mRemovalCallback = new FaceManager.RemovalCallback() { @Override public void onRemovalError(Face face, int errMsgId, CharSequence errString) { Log.e(TAG, "Unable to remove face: " + face.getBiometricId() + " error: " + errMsgId + " " + errString); Toast.makeText(mContext, errString, Toast.LENGTH_SHORT).show(); } @Override public void onRemovalSucceeded(Face face, int remaining) { if (remaining == 0) { mFaces = mFaceManager.getEnrolledFaces(mUserId); if (!mFaces.isEmpty()) { mButton.setEnabled(true); } else { mListener.onRemoved(); } } else { Log.v(TAG, "Remaining: " + remaining); } } }; public FaceSettingsRemoveButtonPreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); mContext = context; mFaceManager = context.getSystemService(FaceManager.class); // TODO: Use the profile-specific userId instead mUserId = UserHandle.myUserId(); if (mFaceManager != null) { mFaces = mFaceManager.getEnrolledFaces(mUserId); } } public FaceSettingsRemoveButtonPreferenceController(Context context) { Loading Loading @@ -66,7 +114,21 @@ public class FaceSettingsRemoveButtonPreferenceController extends BasePreference @Override public void onClick(View v) { if (v == mButton) { mButton.setEnabled(false); if (mFaces.isEmpty()) { Log.e(TAG, "No faces"); return; } if (mFaces.size() > 1) { Log.e(TAG, "Multiple enrollments: " + mFaces.size()); } // Remove the first/only face mFaceManager.remove(mFaces.get(0), mUserId, mRemovalCallback); } } public void setListener(Listener listener) { mListener = listener; } }