PasswordGeneratorDialogFragment: Rewrite in Kotlin (#569)

Signed-off-by: Harsh Shandilya <msfjarvis@gmail.com>
This commit is contained in:
Harsh Shandilya 2019-11-12 21:55:59 +05:30 committed by GitHub
parent 4c7f46aa8a
commit 5749c97d7c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 109 additions and 160 deletions

View file

@ -1,157 +0,0 @@
/*
* Copyright © 2014-2019 The Android Password Store Authors. All Rights Reserved.
* SPDX-License-Identifier: GPL-3.0-only
*/
package com.zeapo.pwdstore;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.AppCompatEditText;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.fragment.app.DialogFragment;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.zeapo.pwdstore.pwgen.PasswordGenerator;
import java.util.ArrayList;
import org.jetbrains.annotations.NotNull;
/** A placeholder fragment containing a simple view. */
public class PasswordGeneratorDialogFragment extends DialogFragment {
public PasswordGeneratorDialogFragment() {}
@NotNull
@SuppressLint("SetTextI18n")
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext());
final Activity callingActivity = requireActivity();
LayoutInflater inflater = callingActivity.getLayoutInflater();
@SuppressLint("InflateParams")
final View view = inflater.inflate(R.layout.fragment_pwgen, null);
Typeface monoTypeface =
Typeface.createFromAsset(callingActivity.getAssets(), "fonts/sourcecodepro.ttf");
builder.setView(view);
SharedPreferences prefs =
requireActivity()
.getApplicationContext()
.getSharedPreferences("PasswordGenerator", Context.MODE_PRIVATE);
CheckBox checkBox = view.findViewById(R.id.numerals);
checkBox.setChecked(!prefs.getBoolean("0", false));
checkBox = view.findViewById(R.id.symbols);
checkBox.setChecked(prefs.getBoolean("y", false));
checkBox = view.findViewById(R.id.uppercase);
checkBox.setChecked(!prefs.getBoolean("A", false));
checkBox = view.findViewById(R.id.lowercase);
checkBox.setChecked(!prefs.getBoolean("L", false));
checkBox = view.findViewById(R.id.ambiguous);
checkBox.setChecked(!prefs.getBoolean("B", false));
checkBox = view.findViewById(R.id.pronounceable);
checkBox.setChecked(!prefs.getBoolean("s", true));
AppCompatEditText textView = view.findViewById(R.id.lengthNumber);
textView.setText(Integer.toString(prefs.getInt("length", 20)));
AppCompatTextView passwordText = view.findViewById(R.id.passwordText);
passwordText.setTypeface(monoTypeface);
builder.setPositiveButton(
getResources().getString(R.string.dialog_ok),
(dialog, which) -> {
EditText edit = callingActivity.findViewById(R.id.crypto_password_edit);
edit.setText(passwordText.getText());
});
builder.setNegativeButton(
getResources().getString(R.string.dialog_cancel), (dialog, which) -> {});
builder.setNeutralButton(getResources().getString(R.string.pwgen_generate), null);
final AlertDialog ad =
builder.setTitle(this.getResources().getString(R.string.pwgen_title)).create();
ad.setOnShowListener(
dialog -> {
setPreferences();
try {
passwordText.setText(
PasswordGenerator.generate(
requireActivity().getApplicationContext())
.get(0));
} catch (PasswordGenerator.PasswordGeneratorExeption e) {
Toast.makeText(requireActivity(), e.getMessage(), Toast.LENGTH_SHORT)
.show();
passwordText.setText("");
}
Button b = ad.getButton(AlertDialog.BUTTON_NEUTRAL);
b.setOnClickListener(
v -> {
setPreferences();
try {
passwordText.setText(
PasswordGenerator.generate(
callingActivity.getApplicationContext())
.get(0));
} catch (PasswordGenerator.PasswordGeneratorExeption e) {
Toast.makeText(
requireActivity(),
e.getMessage(),
Toast.LENGTH_SHORT)
.show();
passwordText.setText("");
}
});
});
return ad;
}
private void setPreferences() {
ArrayList<String> preferences = new ArrayList<>();
if (!((CheckBox) getDialog().findViewById(R.id.numerals)).isChecked()) {
preferences.add("0");
}
if (((CheckBox) getDialog().findViewById(R.id.symbols)).isChecked()) {
preferences.add("y");
}
if (!((CheckBox) getDialog().findViewById(R.id.uppercase)).isChecked()) {
preferences.add("A");
}
if (!((CheckBox) getDialog().findViewById(R.id.ambiguous)).isChecked()) {
preferences.add("B");
}
if (!((CheckBox) getDialog().findViewById(R.id.pronounceable)).isChecked()) {
preferences.add("s");
}
if (!((CheckBox) getDialog().findViewById(R.id.lowercase)).isChecked()) {
preferences.add("L");
}
EditText editText = getDialog().findViewById(R.id.lengthNumber);
try {
int length = Integer.valueOf(editText.getText().toString());
PasswordGenerator.setPrefs(
requireActivity().getApplicationContext(), preferences, length);
} catch (NumberFormatException e) {
PasswordGenerator.setPrefs(requireActivity().getApplicationContext(), preferences);
}
}
}

View file

@ -36,9 +36,9 @@ import androidx.preference.PreferenceManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.snackbar.Snackbar
import com.zeapo.pwdstore.PasswordEntry
import com.zeapo.pwdstore.PasswordGeneratorDialogFragment
import com.zeapo.pwdstore.R
import com.zeapo.pwdstore.UserPreference
import com.zeapo.pwdstore.ui.dialogs.PasswordGeneratorDialogFragment
import com.zeapo.pwdstore.utils.Otp
import java.io.ByteArrayInputStream
import java.io.ByteArrayOutputStream
@ -132,7 +132,8 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
setContentView(R.layout.encrypt_layout)
generate_password?.setOnClickListener {
PasswordGeneratorDialogFragment().show(supportFragmentManager, "generator")
PasswordGeneratorDialogFragment()
.show(supportFragmentManager, "generator")
}
title = getString(R.string.new_password_title)
@ -490,7 +491,8 @@ class PgpActivity : AppCompatActivity(), OpenPgpServiceConnection.OnBound {
private fun editPassword() {
setContentView(R.layout.encrypt_layout)
generate_password?.setOnClickListener {
PasswordGeneratorDialogFragment().show(supportFragmentManager, "generator")
PasswordGeneratorDialogFragment()
.show(supportFragmentManager, "generator")
}
title = getString(R.string.edit_password_title)

View file

@ -0,0 +1,104 @@
/*
* Copyright © 2014-2019 The Android Password Store Authors. All Rights Reserved.
* SPDX-License-Identifier: GPL-3.0-only
*/
package com.zeapo.pwdstore.ui.dialogs
import android.app.Activity
import android.app.Dialog
import android.content.Context
import android.graphics.Typeface
import android.os.Bundle
import android.widget.CheckBox
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.AppCompatEditText
import androidx.appcompat.widget.AppCompatTextView
import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.zeapo.pwdstore.R
import com.zeapo.pwdstore.pwgen.PasswordGenerator.PasswordGeneratorExeption
import com.zeapo.pwdstore.pwgen.PasswordGenerator.generate
import com.zeapo.pwdstore.pwgen.PasswordGenerator.setPrefs
/** A placeholder fragment containing a simple view. */
class PasswordGeneratorDialogFragment : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val builder = MaterialAlertDialogBuilder(requireContext())
val callingActivity: Activity = requireActivity()
val inflater = callingActivity.layoutInflater
val view = inflater.inflate(R.layout.fragment_pwgen, null)
val monoTypeface = Typeface.createFromAsset(callingActivity.assets, "fonts/sourcecodepro.ttf")
builder.setView(view)
val prefs = requireActivity().applicationContext
.getSharedPreferences("PasswordGenerator", Context.MODE_PRIVATE)
view.findViewById<CheckBox>(R.id.numerals)?.isChecked = !prefs.getBoolean("0", false)
view.findViewById<CheckBox>(R.id.symbols)?.isChecked = prefs.getBoolean("y", false)
view.findViewById<CheckBox>(R.id.uppercase)?.isChecked = !prefs.getBoolean("A", false)
view.findViewById<CheckBox>(R.id.lowercase)?.isChecked = !prefs.getBoolean("L", false)
view.findViewById<CheckBox>(R.id.ambiguous)?.isChecked = !prefs.getBoolean("B", false)
view.findViewById<CheckBox>(R.id.pronounceable)?.isChecked = !prefs.getBoolean("s", true)
val textView: AppCompatEditText = view.findViewById(R.id.lengthNumber)
textView.setText(prefs.getInt("length", 20).toString())
val passwordText: AppCompatTextView = view.findViewById(R.id.passwordText)
passwordText.typeface = monoTypeface
builder.setPositiveButton(resources.getString(R.string.dialog_ok)) { _, _ ->
val edit = callingActivity.findViewById<EditText>(R.id.crypto_password_edit)
edit.setText(passwordText.text)
}
builder.setNegativeButton(resources.getString(R.string.dialog_cancel)) { _, _ -> }
builder.setNeutralButton(resources.getString(R.string.pwgen_generate), null)
val dialog = builder.setTitle(this.resources.getString(R.string.pwgen_title)).create()
dialog.setOnShowListener {
setPreferences()
try {
passwordText.text = generate(requireActivity().applicationContext)[0]
} catch (e: PasswordGeneratorExeption) {
Toast.makeText(requireActivity(), e.message, Toast.LENGTH_SHORT).show()
passwordText.text = ""
}
dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener {
setPreferences()
try {
passwordText.text = generate(callingActivity.applicationContext)[0]
} catch (e: PasswordGeneratorExeption) {
Toast.makeText(requireActivity(), e.message, Toast.LENGTH_SHORT).show()
passwordText.text = ""
}
}
}
return dialog
}
private fun setPreferences() {
val preferences = ArrayList<String>()
if (!(dialog!!.findViewById<CheckBox>(R.id.numerals)).isChecked) {
preferences.add("0")
}
if ((dialog!!.findViewById<CheckBox>(R.id.symbols)).isChecked) {
preferences.add("y")
}
if (!(dialog!!.findViewById<CheckBox>(R.id.uppercase)).isChecked) {
preferences.add("A")
}
if (!(dialog!!.findViewById<CheckBox>(R.id.ambiguous)).isChecked) {
preferences.add("B")
}
if (!(dialog!!.findViewById<CheckBox>(R.id.pronounceable)).isChecked) {
preferences.add("s")
}
if (!(dialog!!.findViewById<CheckBox>(R.id.lowercase)).isChecked) {
preferences.add("L")
}
val editText = dialog!!.findViewById<EditText>(R.id.lengthNumber)
try {
val length = Integer.valueOf(editText.text.toString())
setPrefs(requireActivity().applicationContext, preferences, length)
} catch (e: NumberFormatException) {
setPrefs(requireActivity().applicationContext, preferences)
}
}
}