Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc5c38c4 authored by Jason Chang's avatar Jason Chang Committed by Android (Google) Code Review
Browse files

Merge "Fix enrolled face id can't be deleted when changing device rotation...

Merge "Fix enrolled face id can't be deleted when changing device rotation then pressing back key" into main
parents b3646a49 97ec4cc3
Loading
Loading
Loading
Loading
+46 −4
Original line number Diff line number Diff line
@@ -29,7 +29,9 @@ import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.window.OnBackInvokedCallback;

import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;

@@ -57,9 +59,14 @@ public class FaceSettingsRemoveButtonPreferenceController extends BasePreference
    private static final String TAG = "FaceSettings/Remove";
    static final String KEY = "security_settings_face_delete_faces_container";

    public static class ConfirmRemoveDialog extends InstrumentedDialogFragment {
    public static class ConfirmRemoveDialog extends InstrumentedDialogFragment
            implements OnBackInvokedCallback {
        private static final String KEY_IS_CONVENIENCE = "is_convenience";
        private DialogInterface.OnClickListener mOnClickListener;
        @Nullable
        private AlertDialog mDialog = null;
        @Nullable
        private Preference mFaceUnlockPreference = null;

        /** Returns the new instance of the class */
        public static ConfirmRemoveDialog newInstance(boolean isConvenience) {
@@ -99,14 +106,41 @@ public class FaceSettingsRemoveButtonPreferenceController extends BasePreference
                    .setMessage(dialogMessageRes)
                    .setPositiveButton(R.string.delete, mOnClickListener)
                    .setNegativeButton(R.string.cancel, mOnClickListener);
            AlertDialog dialog = builder.create();
            dialog.setCanceledOnTouchOutside(false);
            return dialog;
            mDialog = builder.create();
            mDialog.setCanceledOnTouchOutside(false);
            mDialog.getOnBackInvokedDispatcher().registerOnBackInvokedCallback(0, this);
            return mDialog;
        }

        public void setOnClickListener(DialogInterface.OnClickListener listener) {
            mOnClickListener = listener;
        }

        public void setPreference(@Nullable Preference preference) {
            mFaceUnlockPreference = preference;
        }

        public void unregisterOnBackInvokedCallback() {
            if (mDialog != null) {
                mDialog.getOnBackInvokedDispatcher().unregisterOnBackInvokedCallback(this);
            }
        }

        @Override
        public void onBackInvoked() {
            if (mDialog != null) {
                mDialog.cancel();
            }
            unregisterOnBackInvokedCallback();

            if (mFaceUnlockPreference != null) {
                final Button removeButton = ((LayoutPreference) mFaceUnlockPreference)
                        .findViewById(R.id.security_settings_face_settings_remove_button);
                if (removeButton != null) {
                    removeButton.setEnabled(true);
                }
            }
        }
    }

    interface Listener {
@@ -171,6 +205,13 @@ public class FaceSettingsRemoveButtonPreferenceController extends BasePreference
                mButton.setEnabled(true);
                mRemoving = false;
            }

            final ConfirmRemoveDialog removeDialog =
                    (ConfirmRemoveDialog) mActivity.getSupportFragmentManager()
                            .findFragmentByTag(ConfirmRemoveDialog.class.getName());
            if (removeDialog != null) {
                removeDialog.unregisterOnBackInvokedCallback();
            }
        }
    };

@@ -210,6 +251,7 @@ public class FaceSettingsRemoveButtonPreferenceController extends BasePreference
                (ConfirmRemoveDialog) mActivity.getSupportFragmentManager()
                        .findFragmentByTag(ConfirmRemoveDialog.class.getName());
        if (removeDialog != null) {
            removeDialog.setPreference(mPreference);
            mRemoving = true;
            removeDialog.setOnClickListener(mOnConfirmDialogClickListener);
        }