aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/com/zeapo/pwdstore/UserPreference.kt
diff options
context:
space:
mode:
authorHarsh Shandilya <msfjarvis@gmail.com>2019-01-02 22:44:52 +0530
committerحسين <zidhussein@gmail.com>2019-01-02 17:14:52 +0000
commitc200566bcaec971e1756afe5ebf96baf09e88816 (patch)
tree15e692cdaffe08861df40849e31154409be96b46 /app/src/main/java/com/zeapo/pwdstore/UserPreference.kt
parentd5e589d7e48d4f44a052ecbf2817f5051bd1005f (diff)
downloadHardenedPass-c200566bcaec971e1756afe5ebf96baf09e88816.tar.gz
HardenedPass-c200566bcaec971e1756afe5ebf96baf09e88816.zip
Bump minSdk to 21 (#466)
* Bump minSdk to 21 Signed-off-by: Harsh Shandilya <msfjarvis@gmail.com> * PasswordGenerator: Constify things Signed-off-by: Harsh Shandilya <msfjarvis@gmail.com> * Deprecate PRNG fixes The problem being fixed doesn't exist on SDK 21 and above. Signed-off-by: Harsh Shandilya <msfjarvis@gmail.com> * treewide: Switch to lambdas Signed-off-by: Harsh Shandilya <msfjarvis@gmail.com> * treewide: Formatting fixes Signed-off-by: Harsh Shandilya <msfjarvis@gmail.com> * treewide: Remove useless casts and add missing annotations Signed-off-by: Harsh Shandilya <msfjarvis@gmail.com>
Diffstat (limited to 'app/src/main/java/com/zeapo/pwdstore/UserPreference.kt')
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/UserPreference.kt215
1 files changed, 120 insertions, 95 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/UserPreference.kt b/app/src/main/java/com/zeapo/pwdstore/UserPreference.kt
index 69a1cf1a..d93d6bcc 100644
--- a/app/src/main/java/com/zeapo/pwdstore/UserPreference.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/UserPreference.kt
@@ -15,16 +15,16 @@ import android.preference.Preference
import android.preference.PreferenceFragment
import android.preference.PreferenceManager
import android.provider.Settings
-import com.google.android.material.snackbar.Snackbar
-import androidx.core.app.ActivityCompat
-import androidx.core.content.ContextCompat
-import androidx.appcompat.app.AlertDialog
-import androidx.appcompat.app.AppCompatActivity
import android.util.Log
import android.view.MenuItem
import android.view.accessibility.AccessibilityManager
import android.widget.TextView
import android.widget.Toast
+import androidx.appcompat.app.AlertDialog
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
+import com.google.android.material.snackbar.Snackbar
import com.nononsenseapps.filepicker.FilePickerActivity
import com.zeapo.pwdstore.autofill.AutofillPreferenceActivity
import com.zeapo.pwdstore.crypto.PgpActivity
@@ -36,8 +36,9 @@ import org.openintents.openpgp.util.OpenPgpUtils
import java.io.File
import java.io.IOException
import java.text.SimpleDateFormat
-import java.util.*
-import kotlin.collections.HashSet
+import java.util.ArrayList
+import java.util.Date
+import java.util.Locale
class UserPreference : AppCompatActivity() {
private lateinit var prefsFragment: PrefsFragment
@@ -75,17 +76,19 @@ class UserPreference : AppCompatActivity() {
true
}
- findPreference("ssh_key_clear_passphrase").onPreferenceClickListener = Preference.OnPreferenceClickListener {
- sharedPreferences.edit().putString("ssh_key_passphrase", null).apply()
- it.isEnabled = false
- true
- }
+ findPreference("ssh_key_clear_passphrase").onPreferenceClickListener =
+ Preference.OnPreferenceClickListener {
+ sharedPreferences.edit().putString("ssh_key_passphrase", null).apply()
+ it.isEnabled = false
+ true
+ }
- findPreference("hotp_remember_clear_choice").onPreferenceClickListener = Preference.OnPreferenceClickListener {
- sharedPreferences.edit().putBoolean("hotp_remember_check", false).apply()
- it.isEnabled = false
- true
- }
+ findPreference("hotp_remember_clear_choice").onPreferenceClickListener =
+ Preference.OnPreferenceClickListener {
+ sharedPreferences.edit().putBoolean("hotp_remember_check", false).apply()
+ it.isEnabled = false
+ true
+ }
findPreference("git_server_info").onPreferenceClickListener = Preference.OnPreferenceClickListener {
val intent = Intent(callingActivity, GitActivity::class.java)
@@ -104,28 +107,30 @@ class UserPreference : AppCompatActivity() {
findPreference("git_delete_repo").onPreferenceClickListener = Preference.OnPreferenceClickListener {
val repoDir = PasswordRepository.getRepositoryDirectory(callingActivity.applicationContext)
AlertDialog.Builder(callingActivity)
- .setTitle(R.string.pref_dialog_delete_title)
- .setMessage("${resources.getString(R.string.dialog_delete_msg)} \n $repoDir")
- .setCancelable(false)
- .setPositiveButton(R.string.dialog_delete) { dialogInterface, _ ->
- try {
- FileUtils.cleanDirectory(PasswordRepository.getRepositoryDirectory(callingActivity.applicationContext))
- PasswordRepository.closeRepository()
- } catch (e: Exception) {
- //TODO Handle the diffent cases of exceptions
- }
-
- sharedPreferences.edit().putBoolean("repository_initialized", false).apply()
- dialogInterface.cancel()
- callingActivity.finish()
- }.setNegativeButton(R.string.dialog_do_not_delete) { dialogInterface, _ -> run { dialogInterface.cancel() } }
- .show()
+ .setTitle(R.string.pref_dialog_delete_title)
+ .setMessage("${resources.getString(R.string.dialog_delete_msg)} \n $repoDir")
+ .setCancelable(false)
+ .setPositiveButton(R.string.dialog_delete) { dialogInterface, _ ->
+ try {
+ FileUtils.cleanDirectory(PasswordRepository.getRepositoryDirectory(callingActivity.applicationContext))
+ PasswordRepository.closeRepository()
+ } catch (e: Exception) {
+ //TODO Handle the diffent cases of exceptions
+ }
+
+ sharedPreferences.edit().putBoolean("repository_initialized", false).apply()
+ dialogInterface.cancel()
+ callingActivity.finish()
+ }
+ .setNegativeButton(R.string.dialog_do_not_delete) { dialogInterface, _ -> run { dialogInterface.cancel() } }
+ .show()
true
}
val externalRepo = findPreference("pref_select_external")
- externalRepo.summary = sharedPreferences.getString("git_external_repo", callingActivity.getString(R.string.no_repo_selected))
+ externalRepo.summary =
+ sharedPreferences.getString("git_external_repo", callingActivity.getString(R.string.no_repo_selected))
externalRepo.onPreferenceClickListener = Preference.OnPreferenceClickListener {
callingActivity.selectExternalGitRepository()
true
@@ -148,10 +153,14 @@ class UserPreference : AppCompatActivity() {
}
findPreference("autofill_enable").onPreferenceClickListener = Preference.OnPreferenceClickListener {
- AlertDialog.Builder(callingActivity).setTitle(R.string.pref_autofill_enable_title).setView(R.layout.autofill_instructions).setPositiveButton(R.string.dialog_ok) { _, _ ->
+ AlertDialog.Builder(callingActivity).setTitle(R.string.pref_autofill_enable_title)
+ .setView(R.layout.autofill_instructions).setPositiveButton(R.string.dialog_ok) { _, _ ->
val intent = Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)
startActivity(intent)
- }.setNegativeButton(R.string.dialog_cancel, null).setOnDismissListener { (findPreference("autofill_enable") as CheckBoxPreference).isChecked = (activity as UserPreference).isServiceEnabled }.show()
+ }.setNegativeButton(R.string.dialog_cancel, null).setOnDismissListener {
+ (findPreference("autofill_enable") as CheckBoxPreference).isChecked =
+ (activity as UserPreference).isServiceEnabled
+ }.show()
true
}
@@ -164,24 +173,34 @@ class UserPreference : AppCompatActivity() {
override fun onStart() {
super.onStart()
val sharedPreferences = preferenceManager.sharedPreferences
- findPreference("pref_select_external").summary = preferenceManager.sharedPreferences.getString("git_external_repo", getString(R.string.no_repo_selected))
+ findPreference("pref_select_external").summary =
+ preferenceManager.sharedPreferences.getString("git_external_repo", getString(R.string.no_repo_selected))
findPreference("ssh_see_key").isEnabled = sharedPreferences.getBoolean("use_generated_key", false)
findPreference("git_delete_repo").isEnabled = !sharedPreferences.getBoolean("git_external", false)
- findPreference("ssh_key_clear_passphrase").isEnabled = sharedPreferences.getString("ssh_key_passphrase", null)?.isNotEmpty() ?: false
- findPreference("hotp_remember_clear_choice").isEnabled = sharedPreferences.getBoolean("hotp_remember_check", false)
+ findPreference("ssh_key_clear_passphrase").isEnabled = sharedPreferences.getString(
+ "ssh_key_passphrase",
+ null
+ )?.isNotEmpty() ?: false
+ findPreference("hotp_remember_clear_choice").isEnabled =
+ sharedPreferences.getBoolean("hotp_remember_check", false)
val keyPref = findPreference("openpgp_key_id_pref")
- val selectedKeys: Array<String> = ArrayList<String>(sharedPreferences.getStringSet("openpgp_key_ids_set", HashSet<String>())).toTypedArray()
+ val selectedKeys: Array<String> = ArrayList<String>(
+ sharedPreferences.getStringSet(
+ "openpgp_key_ids_set",
+ HashSet<String>()
+ )
+ ).toTypedArray()
if (selectedKeys.isEmpty()) {
keyPref.summary = this.resources.getString(R.string.pref_no_key_selected)
} else {
- keyPref.summary = selectedKeys.joinToString(separator = ";") {
- s ->
+ keyPref.summary = selectedKeys.joinToString(separator = ";") { s ->
OpenPgpUtils.convertKeyIdToHex(java.lang.Long.valueOf(s))
}
}
// see if the autofill service is enabled and check the preference accordingly
- (findPreference("autofill_enable") as CheckBoxPreference).isChecked = (activity as UserPreference).isServiceEnabled
+ (findPreference("autofill_enable") as CheckBoxPreference).isChecked =
+ (activity as UserPreference).isServiceEnabled
}
}
@@ -203,24 +222,23 @@ class UserPreference : AppCompatActivity() {
fun selectExternalGitRepository() {
val activity = this
AlertDialog.Builder(this)
- .setTitle(this.resources.getString(R.string.external_repository_dialog_title))
- .setMessage(this.resources.getString(R.string.external_repository_dialog_text))
- .setPositiveButton(R.string.dialog_ok) { _, _ ->
- // This always works
- val i = Intent(activity.applicationContext, FilePickerActivity::class.java)
- // This works if you defined the intent filter
- // Intent i = new Intent(Intent.ACTION_GET_CONTENT);
-
- // Set these depending on your use case. These are the defaults.
- i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false)
- i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true)
- i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_DIR)
-
- i.putExtra(FilePickerActivity.EXTRA_START_PATH, Environment.getExternalStorageDirectory().path)
-
- startActivityForResult(i, SELECT_GIT_DIRECTORY)
- }.setNegativeButton(R.string.dialog_cancel, null).show()
-
+ .setTitle(this.resources.getString(R.string.external_repository_dialog_title))
+ .setMessage(this.resources.getString(R.string.external_repository_dialog_text))
+ .setPositiveButton(R.string.dialog_ok) { _, _ ->
+ // This always works
+ val i = Intent(activity.applicationContext, FilePickerActivity::class.java)
+ // This works if you defined the intent filter
+ // Intent i = new Intent(Intent.ACTION_GET_CONTENT);
+
+ // Set these depending on your use case. These are the defaults.
+ i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false)
+ i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true)
+ i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_DIR)
+
+ i.putExtra(FilePickerActivity.EXTRA_START_PATH, Environment.getExternalStorageDirectory().path)
+
+ startActivityForResult(i, SELECT_GIT_DIRECTORY)
+ }.setNegativeButton(R.string.dialog_cancel, null).show()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
@@ -242,9 +260,9 @@ class UserPreference : AppCompatActivity() {
* Opens a file explorer to import the private key
*/
fun getSshKeyWithPermissions(useDefaultPicker: Boolean) = runWithPermissions(
- requestedPermission = Manifest.permission.READ_EXTERNAL_STORAGE,
- requestCode = REQUEST_EXTERNAL_STORAGE_SSH_KEY,
- reason = "We need access to the sd-card to import the ssh-key"
+ requestedPermission = Manifest.permission.READ_EXTERNAL_STORAGE,
+ requestCode = REQUEST_EXTERNAL_STORAGE_SSH_KEY,
+ reason = "We need access to the sd-card to import the ssh-key"
) {
getSshKey(useDefaultPicker)
}
@@ -282,9 +300,9 @@ class UserPreference : AppCompatActivity() {
if (ContextCompat.checkSelfPermission(this, requestedPermission) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, requestedPermission)) {
val snack = Snackbar.make(prefsFragment.view, reason, Snackbar.LENGTH_INDEFINITE)
- .setAction(R.string.dialog_ok) {
- ActivityCompat.requestPermissions(this, arrayOf(requestedPermission), requestCode)
- }
+ .setAction(R.string.dialog_ok) {
+ ActivityCompat.requestPermissions(this, arrayOf(requestedPermission), requestCode)
+ }
snack.show()
val view = snack.view
val tv = view.findViewById<TextView>(com.google.android.material.R.id.snackbar_text)
@@ -297,16 +315,15 @@ class UserPreference : AppCompatActivity() {
} else {
body()
}
-
}
/**
* Exports the passwords after requesting permissions
*/
fun exportPasswordsWithPermissions() = runWithPermissions(
- requestedPermission = Manifest.permission.WRITE_EXTERNAL_STORAGE,
- requestCode = REQUEST_EXTERNAL_STORAGE_SSH_KEY,
- reason = "We need access to the sd-card to export the passwords"
+ requestedPermission = Manifest.permission.WRITE_EXTERNAL_STORAGE,
+ requestCode = REQUEST_EXTERNAL_STORAGE_SSH_KEY,
+ reason = "We need access to the sd-card to export the passwords"
) {
exportPasswords()
}
@@ -355,15 +372,16 @@ class UserPreference : AppCompatActivity() {
private val isServiceEnabled: Boolean
get() {
val am = this
- .getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager
+ .getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager
val runningServices = am
- .getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_GENERIC)
+ .getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_GENERIC)
return runningServices.any { "com.zeapo.pwdstore/.autofill.AutofillService" == it.id }
}
-
- override fun onActivityResult(requestCode: Int, resultCode: Int,
- data: Intent?) {
+ override fun onActivityResult(
+ requestCode: Int, resultCode: Int,
+ data: Intent?
+ ) {
if (resultCode == Activity.RESULT_OK) {
if (data == null) {
setResult(Activity.RESULT_CANCELED)
@@ -376,7 +394,11 @@ class UserPreference : AppCompatActivity() {
val uri: Uri = data.data ?: throw IOException("Unable to open file")
copySshKey(uri)
- Toast.makeText(this, this.resources.getString(R.string.ssh_key_success_dialog_title), Toast.LENGTH_LONG).show()
+ Toast.makeText(
+ this,
+ this.resources.getString(R.string.ssh_key_success_dialog_title),
+ Toast.LENGTH_LONG
+ ).show()
val prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext)
prefs.edit().putBoolean("use_generated_key", false).apply()
@@ -388,11 +410,13 @@ class UserPreference : AppCompatActivity() {
finish()
} catch (e: IOException) {
- AlertDialog.Builder(this).setTitle(this.resources.getString(R.string.ssh_key_error_dialog_title)).setMessage(this.resources.getString(R.string.ssh_key_error_dialog_text) + e.message).setPositiveButton(this.resources.getString(R.string.dialog_ok)) { _, _ ->
- // pass
- }.show()
+ AlertDialog.Builder(this)
+ .setTitle(this.resources.getString(R.string.ssh_key_error_dialog_title))
+ .setMessage(this.resources.getString(R.string.ssh_key_error_dialog_text) + e.message)
+ .setPositiveButton(this.resources.getString(R.string.dialog_ok)) { _, _ ->
+ // pass
+ }.show()
}
-
}
EDIT_GIT_INFO -> {
@@ -403,21 +427,23 @@ class UserPreference : AppCompatActivity() {
if (uri?.path == Environment.getExternalStorageDirectory().path) {
// the user wants to use the root of the sdcard as a store...
AlertDialog.Builder(this)
- .setTitle("SD-Card root selected")
- .setMessage("You have selected the root of your sdcard for the store. " +
- "This is extremely dangerous and you will lose your data " +
- "as its content will, eventually, be deleted")
- .setPositiveButton("Remove everything") { _, _ ->
- PreferenceManager.getDefaultSharedPreferences(applicationContext)
- .edit()
- .putString("git_external_repo", uri?.path)
- .apply()
- }.setNegativeButton(R.string.dialog_cancel, null).show()
+ .setTitle("SD-Card root selected")
+ .setMessage(
+ "You have selected the root of your sdcard for the store. " +
+ "This is extremely dangerous and you will lose your data " +
+ "as its content will, eventually, be deleted"
+ )
+ .setPositiveButton("Remove everything") { _, _ ->
+ PreferenceManager.getDefaultSharedPreferences(applicationContext)
+ .edit()
+ .putString("git_external_repo", uri?.path)
+ .apply()
+ }.setNegativeButton(R.string.dialog_cancel, null).show()
} else {
PreferenceManager.getDefaultSharedPreferences(applicationContext)
- .edit()
- .putString("git_external_repo", uri?.path)
- .apply()
+ .edit()
+ .putString("git_external_repo", uri?.path)
+ .apply()
}
}
EXPORT_PASSWORDS -> {
@@ -433,7 +459,6 @@ class UserPreference : AppCompatActivity() {
} catch (e: IOException) {
Log.d("PWD_EXPORT", "Exception happened : " + e.message)
}
-
}
}
else -> {