AIRA-android/app/src/main/java/sushi/hardcore/aira/CreateIdentityFragment.kt

88 lines
3.4 KiB
Kotlin

package sushi.hardcore.aira
import android.content.Context
import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import sushi.hardcore.aira.databinding.FragmentCreateIdentityBinding
import sushi.hardcore.aira.utils.AvatarPicker
class CreateIdentityFragment(private val activity: AppCompatActivity) : Fragment() {
private external fun createNewIdentity(databaseFolder: String, name: String, password: ByteArray?): Boolean
companion object {
fun newInstance(activity: AppCompatActivity): CreateIdentityFragment {
return CreateIdentityFragment(activity)
}
}
private val avatarPicker = AvatarPicker(activity) { picker, avatar ->
picker.setOnAvatarCompressed { compressedAvatar ->
AIRADatabase.setIdentityAvatar(Constants.getDatabaseFolder(activity), compressedAvatar)
}
avatar.circleCrop().into(binding.avatar)
}
private lateinit var binding: FragmentCreateIdentityBinding
override fun onAttach(context: Context) {
super.onAttach(context)
avatarPicker.register()
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
binding = FragmentCreateIdentityBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
binding.buttonSetAvatar.setOnClickListener {
avatarPicker.launch()
}
binding.checkboxEnablePassword.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) {
binding.editPassword.visibility = View.VISIBLE
binding.editPasswordConfirm.visibility = View.VISIBLE
} else {
binding.editPassword.visibility = View.GONE
binding.editPasswordConfirm.visibility = View.GONE
}
}
binding.buttonCreate.setOnClickListener {
val identityName = binding.editName.text.toString()
val password = binding.editPassword.text.toString().toByteArray()
if (password.isEmpty()) {
createIdentity(identityName, null)
} else {
val passwordConfirm = binding.editPasswordConfirm.text.toString().toByteArray()
if (password.contentEquals(passwordConfirm)) {
createIdentity(identityName, password)
} else {
Toast.makeText(activity, R.string.password_mismatch, Toast.LENGTH_SHORT).show()
}
passwordConfirm.fill(0)
password.fill(0)
}
}
}
private fun createIdentity(identityName: String, password: ByteArray?) {
val databaseFolder = Constants.getDatabaseFolder(requireContext())
if (createNewIdentity(
databaseFolder,
identityName,
password
)) {
val intent = Intent(activity, MainActivity::class.java)
intent.putExtra("identityName", identityName)
startActivity(intent)
activity.finish()
} else {
Toast.makeText(activity, R.string.identity_create_failed, Toast.LENGTH_SHORT).show()
}
}
}