package com.beemdevelopment.aegis.ui; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.hardware.fingerprint.FingerprintManager; import android.text.Editable; import android.text.InputType; import android.text.TextWatcher; import android.view.LayoutInflater; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.EditText; import android.widget.NumberPicker; import android.widget.TextView; import com.beemdevelopment.aegis.Preferences; import com.beemdevelopment.aegis.R; import com.beemdevelopment.aegis.crypto.KeyStoreHandle; import com.beemdevelopment.aegis.crypto.KeyStoreHandleException; import com.beemdevelopment.aegis.db.slots.FingerprintSlot; import com.beemdevelopment.aegis.db.slots.PasswordSlot; import com.beemdevelopment.aegis.db.slots.Slot; import com.beemdevelopment.aegis.db.slots.SlotException; import com.beemdevelopment.aegis.helpers.EditTextHelper; import com.beemdevelopment.aegis.helpers.FingerprintHelper; import com.beemdevelopment.aegis.helpers.FingerprintUiHelper; import com.beemdevelopment.aegis.ui.tasks.DerivationTask; import com.mattprecious.swirl.SwirlView; import java.util.concurrent.atomic.AtomicReference; import javax.crypto.Cipher; import javax.crypto.SecretKey; import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog; public class Dialogs { private Dialogs() { } public static void secureDialog(Dialog dialog) { dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); } public static void showSecureDialog(Dialog dialog) { if (new Preferences(dialog.getContext()).isSecureScreenEnabled()) { secureDialog(dialog); } dialog.show(); } public static void showDeleteEntryDialog(Activity activity, DialogInterface.OnClickListener onDelete) { showSecureDialog(new AlertDialog.Builder(activity) .setTitle(activity.getString(R.string.delete_entry)) .setMessage(activity.getString(R.string.delete_entry_description)) .setPositiveButton(android.R.string.yes, onDelete) .setNegativeButton(android.R.string.no, null) .create()); } public static void showDiscardDialog(Activity activity, DialogInterface.OnClickListener onSave, DialogInterface.OnClickListener onDiscard) { showSecureDialog(new AlertDialog.Builder(activity) .setTitle(activity.getString(R.string.discard_changes)) .setMessage(activity.getString(R.string.discard_changes_description)) .setPositiveButton(R.string.save, onSave) .setNegativeButton(R.string.discard, onDiscard) .create()); } public static void showSetPasswordDialog(Activity activity, Dialogs.SlotListener listener) { View view = activity.getLayoutInflater().inflate(R.layout.dialog_password, null); EditText textPassword = view.findViewById(R.id.text_password); EditText textPasswordConfirm = view.findViewById(R.id.text_password_confirm); AlertDialog dialog = new AlertDialog.Builder(activity) .setTitle(R.string.set_password) .setView(view) .setPositiveButton(android.R.string.ok, null) .setNegativeButton(android.R.string.cancel, null) .create(); final AtomicReference