| /* |
| * Copyright (C) 2016 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.password; |
| |
| import android.app.Activity; |
| import android.app.Dialog; |
| import android.app.settings.SettingsEnums; |
| import android.content.DialogInterface; |
| import android.os.Bundle; |
| |
| import androidx.annotation.NonNull; |
| import androidx.annotation.StringRes; |
| import androidx.appcompat.app.AlertDialog; |
| import androidx.fragment.app.FragmentManager; |
| |
| import com.android.settings.R; |
| import com.android.settings.core.instrumentation.InstrumentedDialogFragment; |
| |
| public class SetupSkipDialog extends InstrumentedDialogFragment |
| implements DialogInterface.OnClickListener { |
| |
| public static final String EXTRA_FRP_SUPPORTED = ":settings:frp_supported"; |
| |
| private static final String ARG_FRP_SUPPORTED = "frp_supported"; |
| // The key indicates type of lock screen is pattern setup. |
| private static final String ARG_LOCK_TYPE_PATTERN = "lock_type_pattern"; |
| // The key indicates type of lock screen setup is alphanumeric for password setup. |
| private static final String ARG_LOCK_TYPE_ALPHANUMERIC = "lock_type_alphanumeric"; |
| private static final String TAG_SKIP_DIALOG = "skip_dialog"; |
| public static final int RESULT_SKIP = Activity.RESULT_FIRST_USER + 10; |
| |
| public static SetupSkipDialog newInstance(boolean isFrpSupported, boolean isPatternMode, |
| boolean isAlphanumericMode, boolean forFingerprint, boolean forFace, |
| boolean forBiometrics) { |
| SetupSkipDialog dialog = new SetupSkipDialog(); |
| Bundle args = new Bundle(); |
| args.putBoolean(ARG_FRP_SUPPORTED, isFrpSupported); |
| args.putBoolean(ARG_LOCK_TYPE_PATTERN, isPatternMode); |
| args.putBoolean(ARG_LOCK_TYPE_ALPHANUMERIC, isAlphanumericMode); |
| args.putBoolean(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, forFingerprint); |
| args.putBoolean(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FACE, forFace); |
| args.putBoolean(ChooseLockSettingsHelper.EXTRA_KEY_FOR_BIOMETRICS, forBiometrics); |
| dialog.setArguments(args); |
| return dialog; |
| } |
| |
| @Override |
| public int getMetricsCategory() { |
| return SettingsEnums.DIALOG_FINGERPRINT_SKIP_SETUP; |
| } |
| |
| @Override |
| public Dialog onCreateDialog(Bundle savedInstanceState) { |
| return onCreateDialogBuilder().create(); |
| } |
| |
| @NonNull |
| public AlertDialog.Builder onCreateDialogBuilder() { |
| Bundle args = getArguments(); |
| final boolean forFace = |
| args.getBoolean(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FACE); |
| final boolean forFingerprint = |
| args.getBoolean(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT); |
| final boolean forBiometrics = |
| args.getBoolean(ChooseLockSettingsHelper.EXTRA_KEY_FOR_BIOMETRICS); |
| if (forFace || forFingerprint || forBiometrics) { |
| final boolean hasFace = forFace || forBiometrics; |
| final boolean hasFingerprint = forFingerprint || forBiometrics; |
| |
| final int titleId; |
| final int msgResId; |
| if (args.getBoolean(ARG_LOCK_TYPE_PATTERN)) { |
| titleId = getPatternSkipTitleRes(hasFace, hasFingerprint); |
| msgResId = getPatternSkipMessageRes(hasFace, hasFingerprint); |
| } else if (args.getBoolean(ARG_LOCK_TYPE_ALPHANUMERIC)) { |
| titleId = getPasswordSkipTitleRes(hasFace, hasFingerprint); |
| msgResId = getPasswordSkipMessageRes(hasFace, hasFingerprint); |
| } else { |
| titleId = getPinSkipTitleRes(hasFace, hasFingerprint); |
| msgResId = getPinSkipMessageRes(hasFace, hasFingerprint); |
| } |
| |
| return new AlertDialog.Builder(getContext()) |
| .setPositiveButton(R.string.skip_lock_screen_dialog_button_label, this) |
| .setNegativeButton(R.string.cancel_lock_screen_dialog_button_label, this) |
| .setTitle(titleId) |
| .setMessage(msgResId); |
| } else { |
| return new AlertDialog.Builder(getContext()) |
| .setPositiveButton(R.string.skip_anyway_button_label, this) |
| .setNegativeButton(R.string.go_back_button_label, this) |
| .setTitle(R.string.lock_screen_intro_skip_title) |
| .setMessage(args.getBoolean(ARG_FRP_SUPPORTED) ? |
| R.string.lock_screen_intro_skip_dialog_text_frp : |
| R.string.lock_screen_intro_skip_dialog_text); |
| } |
| } |
| |
| @StringRes |
| private int getPatternSkipTitleRes(boolean hasFace, boolean hasFingerprint) { |
| if (hasFace && hasFingerprint) { |
| return R.string.lock_screen_pattern_skip_biometrics_title; |
| } else if (hasFace) { |
| return R.string.lock_screen_pattern_skip_face_title; |
| } else if (hasFingerprint) { |
| return R.string.lock_screen_pattern_skip_fingerprint_title; |
| } else { |
| return R.string.lock_screen_pattern_skip_title; |
| } |
| } |
| |
| @StringRes |
| private int getPatternSkipMessageRes(boolean hasFace, boolean hasFingerprint) { |
| if (hasFace && hasFingerprint) { |
| return R.string.lock_screen_pattern_skip_biometrics_message; |
| } else if (hasFace) { |
| return R.string.lock_screen_pattern_skip_face_message; |
| } else if (hasFingerprint) { |
| return R.string.lock_screen_pattern_skip_fingerprint_message; |
| } else { |
| return R.string.lock_screen_pattern_skip_message; |
| } |
| } |
| |
| @StringRes |
| private int getPasswordSkipTitleRes(boolean hasFace, boolean hasFingerprint) { |
| if (hasFace && hasFingerprint) { |
| return R.string.lock_screen_password_skip_biometrics_title; |
| } else if (hasFace) { |
| return R.string.lock_screen_password_skip_face_title; |
| } else if (hasFingerprint) { |
| return R.string.lock_screen_password_skip_fingerprint_title; |
| } else { |
| return R.string.lock_screen_password_skip_title; |
| } |
| } |
| |
| @StringRes |
| private int getPasswordSkipMessageRes(boolean hasFace, boolean hasFingerprint) { |
| if (hasFace && hasFingerprint) { |
| return R.string.lock_screen_password_skip_biometrics_message; |
| } else if (hasFace) { |
| return R.string.lock_screen_password_skip_face_message; |
| } else if (hasFingerprint) { |
| return R.string.lock_screen_password_skip_fingerprint_message; |
| } else { |
| return R.string.lock_screen_password_skip_message; |
| } |
| } |
| |
| @StringRes |
| private int getPinSkipTitleRes(boolean hasFace, boolean hasFingerprint) { |
| if (hasFace && hasFingerprint) { |
| return R.string.lock_screen_pin_skip_biometrics_title; |
| } else if (hasFace) { |
| return R.string.lock_screen_pin_skip_face_title; |
| } else if (hasFingerprint) { |
| return R.string.lock_screen_pin_skip_fingerprint_title; |
| } else { |
| return R.string.lock_screen_pin_skip_title; |
| } |
| } |
| |
| @StringRes |
| private int getPinSkipMessageRes(boolean hasFace, boolean hasFingerprint) { |
| if (hasFace && hasFingerprint) { |
| return R.string.lock_screen_pin_skip_biometrics_message; |
| } else if (hasFace) { |
| return R.string.lock_screen_pin_skip_face_message; |
| } else if (hasFingerprint) { |
| return R.string.lock_screen_pin_skip_fingerprint_message; |
| } else { |
| return R.string.lock_screen_pin_skip_message; |
| } |
| } |
| |
| @Override |
| public void onClick(DialogInterface dialog, int button) { |
| switch (button) { |
| case DialogInterface.BUTTON_POSITIVE: |
| Activity activity = getActivity(); |
| activity.setResult(RESULT_SKIP); |
| activity.finish(); |
| break; |
| } |
| } |
| |
| public void show(FragmentManager manager) { |
| show(manager, TAG_SKIP_DIALOG); |
| } |
| } |