1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
/*
* Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved.
* SPDX-License-Identifier: GPL-3.0-only
*/
package com.zeapo.pwdstore.sshkeygen
import android.os.Bundle
import android.text.InputType
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.InputMethodManager
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.CheckBox
import android.widget.EditText
import android.widget.Spinner
import androidx.core.content.getSystemService
import androidx.fragment.app.Fragment
import com.google.android.material.textfield.TextInputEditText
import com.zeapo.pwdstore.R
class SshKeyGenFragment : Fragment() {
private lateinit var checkBox: CheckBox
private lateinit var comment: EditText
private lateinit var generate: Button
private lateinit var passphrase: TextInputEditText
private lateinit var spinner: Spinner
private lateinit var activity: SshKeyGenActivity
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_ssh_keygen, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
activity = requireActivity() as SshKeyGenActivity
findViews(view)
val lengths = arrayOf(2048, 4096)
val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item, lengths)
spinner.adapter = adapter
generate.setOnClickListener { generate() }
checkBox.setOnCheckedChangeListener { _, isChecked: Boolean ->
val selection = passphrase.selectionEnd
if (isChecked) {
passphrase.inputType = (
InputType.TYPE_CLASS_TEXT
or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)
} else {
passphrase.inputType = (
InputType.TYPE_CLASS_TEXT
or InputType.TYPE_TEXT_VARIATION_PASSWORD)
}
passphrase.setSelection(selection)
}
}
private fun findViews(view: View) {
checkBox = view.findViewById(R.id.show_passphrase)
comment = view.findViewById(R.id.comment)
generate = view.findViewById(R.id.generate)
passphrase = view.findViewById(R.id.passphrase)
spinner = view.findViewById(R.id.length)
}
// Invoked when 'Generate' button of SshKeyGenFragment clicked. Generates a
// private and public key, then replaces the SshKeyGenFragment with a
// ShowSshKeyFragment which displays the public key.
fun generate() {
val length = (spinner.selectedItem as Int).toString()
val passphrase = passphrase.text.toString()
val comment = comment.text.toString()
KeyGenerateTask(activity).execute(length, passphrase, comment)
hideKeyboard()
}
private fun hideKeyboard() {
val imm = activity.getSystemService<InputMethodManager>()
var view = activity.currentFocus
if (view == null) {
view = View(activity)
}
imm?.hideSoftInputFromWindow(view.windowToken, 0)
}
}
|