mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Pass group icon selection and time through viewmodel
This commit is contained in:
@@ -171,9 +171,15 @@ class EntryEditActivity : LockingActivity(),
|
|||||||
|
|
||||||
mEntryEditViewModel.requestDateTimeSelection.observe(this) { dateInstant ->
|
mEntryEditViewModel.requestDateTimeSelection.observe(this) { dateInstant ->
|
||||||
if (dateInstant.type == DateInstant.Type.TIME) {
|
if (dateInstant.type == DateInstant.Type.TIME) {
|
||||||
selectTime(dateInstant)
|
// Launch the time picker
|
||||||
|
val dateTime = DateTime(dateInstant.date)
|
||||||
|
TimePickerFragment.getInstance(dateTime.hourOfDay, dateTime.minuteOfHour)
|
||||||
|
.show(supportFragmentManager, "TimePickerFragment")
|
||||||
} else {
|
} else {
|
||||||
selectDate(dateInstant)
|
// Launch the date picker
|
||||||
|
val dateTime = DateTime(dateInstant.date)
|
||||||
|
DatePickerFragment.getInstance(dateTime.year, dateTime.monthOfYear - 1, dateTime.dayOfMonth)
|
||||||
|
.show(supportFragmentManager, "DatePickerFragment")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -587,25 +593,6 @@ class EntryEditActivity : LockingActivity(),
|
|||||||
return super.onOptionsItemSelected(item)
|
return super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Launch the date picker
|
|
||||||
private fun selectDate(dateInstant: DateInstant) {
|
|
||||||
val dateTime = DateTime(dateInstant.date)
|
|
||||||
val defaultYear = dateTime.year
|
|
||||||
val defaultMonth = dateTime.monthOfYear - 1
|
|
||||||
val defaultDay = dateTime.dayOfMonth
|
|
||||||
DatePickerFragment.getInstance(defaultYear, defaultMonth, defaultDay)
|
|
||||||
.show(supportFragmentManager, "DatePickerFragment")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Launch the time picker
|
|
||||||
private fun selectTime(dateInstant: DateInstant) {
|
|
||||||
val dateTime = DateTime(dateInstant.date)
|
|
||||||
val defaultHour = dateTime.hourOfDay
|
|
||||||
val defaultMinute = dateTime.minuteOfHour
|
|
||||||
TimePickerFragment.getInstance(defaultHour, defaultMinute)
|
|
||||||
.show(supportFragmentManager, "TimePickerFragment")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDateSet(datePicker: DatePicker?, year: Int, month: Int, day: Int) {
|
override fun onDateSet(datePicker: DatePicker?, year: Int, month: Int, day: Int) {
|
||||||
// To fix android 4.4 issue
|
// To fix android 4.4 issue
|
||||||
// https://stackoverflow.com/questions/12436073/datepicker-ondatechangedlistener-called-twice
|
// https://stackoverflow.com/questions/12436073/datepicker-ondatechangedlistener-called-twice
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ import com.kunzisoft.keepass.tasks.ActionRunnable
|
|||||||
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
import com.kunzisoft.keepass.timeout.TimeoutHelper
|
||||||
import com.kunzisoft.keepass.utils.MenuUtil
|
import com.kunzisoft.keepass.utils.MenuUtil
|
||||||
import com.kunzisoft.keepass.view.*
|
import com.kunzisoft.keepass.view.*
|
||||||
|
import com.kunzisoft.keepass.viewmodels.GroupEditViewModel
|
||||||
import com.kunzisoft.keepass.viewmodels.GroupViewModel
|
import com.kunzisoft.keepass.viewmodels.GroupViewModel
|
||||||
import org.joda.time.DateTime
|
import org.joda.time.DateTime
|
||||||
|
|
||||||
@@ -102,6 +103,7 @@ class GroupActivity : LockingActivity(),
|
|||||||
private var groupNameView: TextView? = null
|
private var groupNameView: TextView? = null
|
||||||
|
|
||||||
private val mGroupViewModel: GroupViewModel by viewModels()
|
private val mGroupViewModel: GroupViewModel by viewModels()
|
||||||
|
private val mGroupEditViewModel: GroupEditViewModel by viewModels()
|
||||||
|
|
||||||
// TODO Remove and pass through viewModel
|
// TODO Remove and pass through viewModel
|
||||||
private var mGroupFragment: GroupFragment? = null
|
private var mGroupFragment: GroupFragment? = null
|
||||||
@@ -280,6 +282,24 @@ class GroupActivity : LockingActivity(),
|
|||||||
|
|
||||||
Log.i(TAG, "Finished creating tree")
|
Log.i(TAG, "Finished creating tree")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mGroupEditViewModel.requestIconSelection.observe(this) { iconImage ->
|
||||||
|
IconPickerActivity.launch(this@GroupActivity, iconImage)
|
||||||
|
}
|
||||||
|
|
||||||
|
mGroupEditViewModel.requestDateTimeSelection.observe(this) { dateInstant ->
|
||||||
|
if (dateInstant.type == DateInstant.Type.TIME) {
|
||||||
|
// Launch the time picker
|
||||||
|
val dateTime = DateTime(dateInstant.date)
|
||||||
|
TimePickerFragment.getInstance(dateTime.hourOfDay, dateTime.minuteOfHour)
|
||||||
|
.show(supportFragmentManager, "TimePickerFragment")
|
||||||
|
} else {
|
||||||
|
// Launch the date picker
|
||||||
|
val dateTime = DateTime(dateInstant.date)
|
||||||
|
DatePickerFragment.getInstance(dateTime.year, dateTime.monthOfYear - 1, dateTime.dayOfMonth)
|
||||||
|
.show(supportFragmentManager, "DatePickerFragment")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDatabaseRetrieved(database: Database?) {
|
override fun onDatabaseRetrieved(database: Database?) {
|
||||||
@@ -686,33 +706,12 @@ class GroupActivity : LockingActivity(),
|
|||||||
// To fix android 4.4 issue
|
// To fix android 4.4 issue
|
||||||
// https://stackoverflow.com/questions/12436073/datepicker-ondatechangedlistener-called-twice
|
// https://stackoverflow.com/questions/12436073/datepicker-ondatechangedlistener-called-twice
|
||||||
if (datePicker?.isShown == true) {
|
if (datePicker?.isShown == true) {
|
||||||
val groupEditFragment = supportFragmentManager.findFragmentByTag(GroupEditDialogFragment.TAG_CREATE_GROUP) as? GroupEditDialogFragment
|
mGroupEditViewModel.selectDate(year, month, day)
|
||||||
groupEditFragment?.getExpiryTime()?.date?.let { expiresDate ->
|
|
||||||
groupEditFragment.setExpiryTime(DateInstant(DateTime(expiresDate)
|
|
||||||
.withYear(year)
|
|
||||||
.withMonthOfYear(month + 1)
|
|
||||||
.withDayOfMonth(day)
|
|
||||||
.toDate()))
|
|
||||||
// Launch the time picker
|
|
||||||
val dateTime = DateTime(expiresDate)
|
|
||||||
val defaultHour = dateTime.hourOfDay
|
|
||||||
val defaultMinute = dateTime.minuteOfHour
|
|
||||||
TimePickerFragment.getInstance(defaultHour, defaultMinute)
|
|
||||||
.show(supportFragmentManager, "TimePickerFragment")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onTimeSet(view: TimePicker?, hours: Int, minutes: Int) {
|
override fun onTimeSet(view: TimePicker?, hours: Int, minutes: Int) {
|
||||||
val groupEditFragment = supportFragmentManager.findFragmentByTag(GroupEditDialogFragment.TAG_CREATE_GROUP) as? GroupEditDialogFragment
|
mGroupEditViewModel.selectTime(hours, minutes)
|
||||||
groupEditFragment?.getExpiryTime()?.date?.let { expiresDate ->
|
|
||||||
// Save the date
|
|
||||||
groupEditFragment.setExpiryTime(
|
|
||||||
DateInstant(DateTime(expiresDate)
|
|
||||||
.withHourOfDay(hours)
|
|
||||||
.withMinuteOfHour(minutes)
|
|
||||||
.toDate()))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun finishNodeAction() {
|
private fun finishNodeAction() {
|
||||||
@@ -1059,9 +1058,7 @@ class GroupActivity : LockingActivity(),
|
|||||||
|
|
||||||
// To create tree dialog for icon
|
// To create tree dialog for icon
|
||||||
IconPickerActivity.onActivityResult(requestCode, resultCode, data) { icon ->
|
IconPickerActivity.onActivityResult(requestCode, resultCode, data) { icon ->
|
||||||
(supportFragmentManager
|
mGroupEditViewModel.selectIcon(icon)
|
||||||
.findFragmentByTag(GroupEditDialogFragment.TAG_CREATE_GROUP) as GroupEditDialogFragment)
|
|
||||||
.setIcon(icon)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
|||||||
@@ -28,28 +28,31 @@ import android.widget.Button
|
|||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.activityViewModels
|
||||||
import com.google.android.material.textfield.TextInputLayout
|
import com.google.android.material.textfield.TextInputLayout
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
import com.kunzisoft.keepass.activities.IconPickerActivity
|
|
||||||
import com.kunzisoft.keepass.activities.dialogs.GroupEditDialogFragment.EditGroupDialogAction.CREATION
|
import com.kunzisoft.keepass.activities.dialogs.GroupEditDialogFragment.EditGroupDialogAction.CREATION
|
||||||
import com.kunzisoft.keepass.activities.dialogs.GroupEditDialogFragment.EditGroupDialogAction.UPDATE
|
import com.kunzisoft.keepass.activities.dialogs.GroupEditDialogFragment.EditGroupDialogAction.UPDATE
|
||||||
|
import com.kunzisoft.keepass.activities.fragments.DatabaseDialogFragment
|
||||||
import com.kunzisoft.keepass.database.element.Database
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
import com.kunzisoft.keepass.database.element.DateInstant
|
import com.kunzisoft.keepass.database.element.DateInstant
|
||||||
import com.kunzisoft.keepass.database.element.icon.IconImage
|
import com.kunzisoft.keepass.database.element.icon.IconImage
|
||||||
import com.kunzisoft.keepass.model.GroupInfo
|
import com.kunzisoft.keepass.model.GroupInfo
|
||||||
import com.kunzisoft.keepass.view.DateTimeEditFieldView
|
import com.kunzisoft.keepass.view.DateTimeEditFieldView
|
||||||
|
import com.kunzisoft.keepass.viewmodels.GroupEditViewModel
|
||||||
import org.joda.time.DateTime
|
import org.joda.time.DateTime
|
||||||
|
|
||||||
class GroupEditDialogFragment : DialogFragment() {
|
class GroupEditDialogFragment : DatabaseDialogFragment() {
|
||||||
|
|
||||||
private var mEditGroupListener: EditGroupListener? = null
|
private var mEditGroupListener: EditGroupListener? = null
|
||||||
|
private val mGroupEditViewModel: GroupEditViewModel by activityViewModels()
|
||||||
|
|
||||||
|
private var populateIconMethod: ((ImageView, IconImage) -> Unit)? = null
|
||||||
private var mEditGroupDialogAction = EditGroupDialogAction.NONE
|
private var mEditGroupDialogAction = EditGroupDialogAction.NONE
|
||||||
private var mGroupInfo = GroupInfo()
|
private var mGroupInfo = GroupInfo()
|
||||||
|
|
||||||
private lateinit var iconButtonView: ImageView
|
private lateinit var iconButtonView: ImageView
|
||||||
private var iconColor: Int = 0
|
private var mIconColor: Int = 0
|
||||||
private lateinit var nameTextLayoutView: TextInputLayout
|
private lateinit var nameTextLayoutView: TextInputLayout
|
||||||
private lateinit var nameTextView: TextView
|
private lateinit var nameTextView: TextView
|
||||||
private lateinit var notesTextLayoutView: TextInputLayout
|
private lateinit var notesTextLayoutView: TextInputLayout
|
||||||
@@ -74,8 +77,10 @@ class GroupEditDialogFragment : DialogFragment() {
|
|||||||
mEditGroupListener = context as EditGroupListener
|
mEditGroupListener = context as EditGroupListener
|
||||||
} catch (e: ClassCastException) {
|
} catch (e: ClassCastException) {
|
||||||
// The activity doesn't implement the interface, throw exception
|
// The activity doesn't implement the interface, throw exception
|
||||||
throw ClassCastException(context.toString()
|
throw ClassCastException(
|
||||||
+ " must implement " + GroupEditDialogFragment::class.java.name)
|
context.toString()
|
||||||
|
+ " must implement " + GroupEditDialogFragment::class.java.name
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,6 +89,48 @@ class GroupEditDialogFragment : DialogFragment() {
|
|||||||
super.onDetach()
|
super.onDetach()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDatabaseRetrieved(database: Database?) {
|
||||||
|
populateIconMethod = { imageView, icon ->
|
||||||
|
database?.iconDrawableFactory?.assignDatabaseIcon(imageView, icon, mIconColor)
|
||||||
|
}
|
||||||
|
populateIconMethod?.invoke(iconButtonView, mGroupInfo.icon)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
mGroupEditViewModel.onIconSelected.observe(this) { iconImage ->
|
||||||
|
mGroupInfo.icon = iconImage
|
||||||
|
populateIconMethod?.invoke(iconButtonView, mGroupInfo.icon)
|
||||||
|
}
|
||||||
|
|
||||||
|
mGroupEditViewModel.onDateSelected.observe(this) { viewModelDate ->
|
||||||
|
// Save the date
|
||||||
|
mGroupInfo.expiryTime = DateInstant(
|
||||||
|
DateTime(mGroupInfo.expiryTime.date)
|
||||||
|
.withYear(viewModelDate.year)
|
||||||
|
.withMonthOfYear(viewModelDate.month + 1)
|
||||||
|
.withDayOfMonth(viewModelDate.day)
|
||||||
|
.toDate())
|
||||||
|
expirationView.dateTime = mGroupInfo.expiryTime
|
||||||
|
if (expirationView.dateTime.type == DateInstant.Type.DATE_TIME) {
|
||||||
|
val instantTime = DateInstant(mGroupInfo.expiryTime.date, DateInstant.Type.TIME)
|
||||||
|
// Trick to recall selection with time
|
||||||
|
mGroupEditViewModel.requestDateTimeSelection(instantTime)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mGroupEditViewModel.onTimeSelected.observe(this) { viewModelTime ->
|
||||||
|
// Save the time
|
||||||
|
mGroupInfo.expiryTime = DateInstant(
|
||||||
|
DateTime(mGroupInfo.expiryTime.date)
|
||||||
|
.withHourOfDay(viewModelTime.hours)
|
||||||
|
.withMinuteOfHour(viewModelTime.minutes)
|
||||||
|
.toDate(), mGroupInfo.expiryTime.type)
|
||||||
|
expirationView.dateTime = mGroupInfo.expiryTime
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
activity?.let { activity ->
|
activity?.let { activity ->
|
||||||
val root = activity.layoutInflater.inflate(R.layout.fragment_group_edit, null)
|
val root = activity.layoutInflater.inflate(R.layout.fragment_group_edit, null)
|
||||||
@@ -96,7 +143,7 @@ class GroupEditDialogFragment : DialogFragment() {
|
|||||||
|
|
||||||
// Retrieve the textColor to tint the icon
|
// Retrieve the textColor to tint the icon
|
||||||
val ta = activity.theme.obtainStyledAttributes(intArrayOf(android.R.attr.textColor))
|
val ta = activity.theme.obtainStyledAttributes(intArrayOf(android.R.attr.textColor))
|
||||||
iconColor = ta.getColor(0, Color.WHITE)
|
mIconColor = ta.getColor(0, Color.WHITE)
|
||||||
ta.recycle()
|
ta.recycle()
|
||||||
|
|
||||||
if (savedInstanceState != null
|
if (savedInstanceState != null
|
||||||
@@ -115,16 +162,13 @@ class GroupEditDialogFragment : DialogFragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// populate info in views
|
// populate info in views
|
||||||
populateInfoToViews()
|
populateInfoToViews(mGroupInfo)
|
||||||
expirationView.setOnDateClickListener = {
|
|
||||||
expirationView.dateTime.date.let { expiresDate ->
|
iconButtonView.setOnClickListener { _ ->
|
||||||
val dateTime = DateTime(expiresDate)
|
mGroupEditViewModel.requestIconSelection(mGroupInfo.icon)
|
||||||
val defaultYear = dateTime.year
|
}
|
||||||
val defaultMonth = dateTime.monthOfYear-1
|
expirationView.setOnDateClickListener = { dateInstant ->
|
||||||
val defaultDay = dateTime.dayOfMonth
|
mGroupEditViewModel.requestDateTimeSelection(dateInstant)
|
||||||
DatePickerFragment.getInstance(defaultYear, defaultMonth, defaultDay)
|
|
||||||
.show(parentFragmentManager, "DatePickerFragment")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val builder = AlertDialog.Builder(activity)
|
val builder = AlertDialog.Builder(activity)
|
||||||
@@ -137,10 +181,6 @@ class GroupEditDialogFragment : DialogFragment() {
|
|||||||
mGroupInfo)
|
mGroupInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
iconButtonView.setOnClickListener { _ ->
|
|
||||||
IconPickerActivity.launch(activity, mGroupInfo.icon)
|
|
||||||
}
|
|
||||||
|
|
||||||
return builder.create()
|
return builder.create()
|
||||||
}
|
}
|
||||||
return super.onCreateDialog(savedInstanceState)
|
return super.onCreateDialog(savedInstanceState)
|
||||||
@@ -165,25 +205,15 @@ class GroupEditDialogFragment : DialogFragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getExpiryTime(): DateInstant {
|
private fun populateInfoToViews(groupInfo: GroupInfo) {
|
||||||
retrieveGroupInfoFromViews()
|
mGroupEditViewModel.selectIcon(groupInfo.icon)
|
||||||
return mGroupInfo.expiryTime
|
nameTextView.text = groupInfo.title
|
||||||
}
|
notesTextLayoutView.visibility = if (groupInfo.notes == null) View.GONE else View.VISIBLE
|
||||||
|
groupInfo.notes?.let {
|
||||||
fun setExpiryTime(expiryTime: DateInstant) {
|
|
||||||
mGroupInfo.expiryTime = expiryTime
|
|
||||||
populateInfoToViews()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun populateInfoToViews() {
|
|
||||||
assignIconView()
|
|
||||||
nameTextView.text = mGroupInfo.title
|
|
||||||
notesTextLayoutView.visibility = if (mGroupInfo.notes == null) View.GONE else View.VISIBLE
|
|
||||||
mGroupInfo.notes?.let {
|
|
||||||
notesTextView.text = it
|
notesTextView.text = it
|
||||||
}
|
}
|
||||||
expirationView.activation = mGroupInfo.expires
|
expirationView.activation = groupInfo.expires
|
||||||
expirationView.dateTime = mGroupInfo.expiryTime
|
expirationView.dateTime = groupInfo.expiryTime
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun retrieveGroupInfoFromViews() {
|
private fun retrieveGroupInfoFromViews() {
|
||||||
@@ -197,16 +227,6 @@ class GroupEditDialogFragment : DialogFragment() {
|
|||||||
mGroupInfo.expiryTime = expirationView.dateTime
|
mGroupInfo.expiryTime = expirationView.dateTime
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun assignIconView() {
|
|
||||||
// TODO Database
|
|
||||||
Database.getInstance()?.iconDrawableFactory?.assignDatabaseIcon(iconButtonView, mGroupInfo.icon, iconColor)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setIcon(icon: IconImage) {
|
|
||||||
mGroupInfo.icon = icon
|
|
||||||
assignIconView()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
retrieveGroupInfoFromViews()
|
retrieveGroupInfoFromViews()
|
||||||
outState.putInt(KEY_ACTION_ID, mEditGroupDialogAction.ordinal)
|
outState.putInt(KEY_ACTION_ID, mEditGroupDialogAction.ordinal)
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package com.kunzisoft.keepass.activities.fragments
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import androidx.fragment.app.DialogFragment
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import com.kunzisoft.keepass.activities.DatabaseRetrieval
|
||||||
|
import com.kunzisoft.keepass.database.element.Database
|
||||||
|
import com.kunzisoft.keepass.tasks.ActionRunnable
|
||||||
|
import com.kunzisoft.keepass.viewmodels.DatabaseViewModel
|
||||||
|
|
||||||
|
abstract class DatabaseDialogFragment : DialogFragment(), DatabaseRetrieval {
|
||||||
|
|
||||||
|
private val mDatabaseViewModel: DatabaseViewModel by activityViewModels()
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
|
mDatabaseViewModel.database.observe(this) { database ->
|
||||||
|
// TODO requireView().resetAppTimeoutWhenViewFocusedOrChanged(requireContext(), database)
|
||||||
|
onDatabaseRetrieved(database)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDatabaseActionFinished(
|
||||||
|
database: Database,
|
||||||
|
actionTask: String,
|
||||||
|
result: ActionRunnable.Result
|
||||||
|
) {
|
||||||
|
// Can be overridden by a subclass
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,7 +3,6 @@ package com.kunzisoft.keepass.viewmodels
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.ViewModel
|
|
||||||
import com.kunzisoft.keepass.app.database.IOActionTask
|
import com.kunzisoft.keepass.app.database.IOActionTask
|
||||||
import com.kunzisoft.keepass.database.element.*
|
import com.kunzisoft.keepass.database.element.*
|
||||||
import com.kunzisoft.keepass.database.element.icon.IconImage
|
import com.kunzisoft.keepass.database.element.icon.IconImage
|
||||||
@@ -12,13 +11,12 @@ import com.kunzisoft.keepass.database.element.node.NodeId
|
|||||||
import com.kunzisoft.keepass.database.element.template.Template
|
import com.kunzisoft.keepass.database.element.template.Template
|
||||||
import com.kunzisoft.keepass.model.*
|
import com.kunzisoft.keepass.model.*
|
||||||
import com.kunzisoft.keepass.otp.OtpElement
|
import com.kunzisoft.keepass.otp.OtpElement
|
||||||
import com.kunzisoft.keepass.view.DataDate
|
|
||||||
import com.kunzisoft.keepass.view.DataTime
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
|
||||||
class EntryEditViewModel: ViewModel() {
|
class EntryEditViewModel: NodeEditViewModel() {
|
||||||
|
|
||||||
|
// TODO Better variable implementation
|
||||||
private var mDatabase: Database? = null
|
private var mDatabase: Database? = null
|
||||||
private var mParent: Group? = null
|
private var mParent: Group? = null
|
||||||
private var mEntry: Entry? = null
|
private var mEntry: Entry? = null
|
||||||
@@ -39,11 +37,6 @@ class EntryEditViewModel: ViewModel() {
|
|||||||
val onTemplateChanged : LiveData<Template> get() = _onTemplateChanged
|
val onTemplateChanged : LiveData<Template> get() = _onTemplateChanged
|
||||||
private val _onTemplateChanged = SingleLiveEvent<Template>()
|
private val _onTemplateChanged = SingleLiveEvent<Template>()
|
||||||
|
|
||||||
val requestIconSelection : LiveData<IconImage> get() = _requestIconSelection
|
|
||||||
private val _requestIconSelection = SingleLiveEvent<IconImage>()
|
|
||||||
val onIconSelected : LiveData<IconImage> get() = _onIconSelected
|
|
||||||
private val _onIconSelected = SingleLiveEvent<IconImage>()
|
|
||||||
|
|
||||||
val requestPasswordSelection : LiveData<Field> get() = _requestPasswordSelection
|
val requestPasswordSelection : LiveData<Field> get() = _requestPasswordSelection
|
||||||
private val _requestPasswordSelection = SingleLiveEvent<Field>()
|
private val _requestPasswordSelection = SingleLiveEvent<Field>()
|
||||||
val onPasswordSelected : LiveData<Field> get() = _onPasswordSelected
|
val onPasswordSelected : LiveData<Field> get() = _onPasswordSelected
|
||||||
@@ -56,13 +49,6 @@ class EntryEditViewModel: ViewModel() {
|
|||||||
val onCustomFieldError : LiveData<Void?> get() = _onCustomFieldError
|
val onCustomFieldError : LiveData<Void?> get() = _onCustomFieldError
|
||||||
private val _onCustomFieldError = SingleLiveEvent<Void?>()
|
private val _onCustomFieldError = SingleLiveEvent<Void?>()
|
||||||
|
|
||||||
val requestDateTimeSelection : LiveData<DateInstant> get() = _requestDateTimeSelection
|
|
||||||
private val _requestDateTimeSelection = SingleLiveEvent<DateInstant>()
|
|
||||||
val onDateSelected : LiveData<DataDate> get() = _onDateSelected
|
|
||||||
private val _onDateSelected = SingleLiveEvent<DataDate>()
|
|
||||||
val onTimeSelected : LiveData<DataTime> get() = _onTimeSelected
|
|
||||||
private val _onTimeSelected = SingleLiveEvent<DataTime>()
|
|
||||||
|
|
||||||
val requestSetupOtp : LiveData<Void?> get() = _requestSetupOtp
|
val requestSetupOtp : LiveData<Void?> get() = _requestSetupOtp
|
||||||
private val _requestSetupOtp = SingleLiveEvent<Void?>()
|
private val _requestSetupOtp = SingleLiveEvent<Void?>()
|
||||||
val onOtpCreated : LiveData<OtpElement> get() = _onOtpCreated
|
val onOtpCreated : LiveData<OtpElement> get() = _onOtpCreated
|
||||||
@@ -287,14 +273,6 @@ class EntryEditViewModel: ViewModel() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun requestIconSelection(oldIconImage: IconImage) {
|
|
||||||
_requestIconSelection.value = oldIconImage
|
|
||||||
}
|
|
||||||
|
|
||||||
fun selectIcon(iconImage: IconImage) {
|
|
||||||
_onIconSelected.value = iconImage
|
|
||||||
}
|
|
||||||
|
|
||||||
fun requestPasswordSelection(passwordField: Field) {
|
fun requestPasswordSelection(passwordField: Field) {
|
||||||
_requestPasswordSelection.value = passwordField
|
_requestPasswordSelection.value = passwordField
|
||||||
}
|
}
|
||||||
@@ -323,18 +301,6 @@ class EntryEditViewModel: ViewModel() {
|
|||||||
_onCustomFieldError.call()
|
_onCustomFieldError.call()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun requestDateTimeSelection(dateInstant: DateInstant) {
|
|
||||||
_requestDateTimeSelection.value = dateInstant
|
|
||||||
}
|
|
||||||
|
|
||||||
fun selectDate(year: Int, month: Int, day: Int) {
|
|
||||||
_onDateSelected.value = DataDate(year, month, day)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun selectTime(hours: Int, minutes: Int) {
|
|
||||||
_onTimeSelected.value = DataTime(hours, minutes)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setupOtp() {
|
fun setupOtp() {
|
||||||
_requestSetupOtp.call()
|
_requestSetupOtp.call()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package com.kunzisoft.keepass.viewmodels
|
||||||
|
|
||||||
|
class GroupEditViewModel: NodeEditViewModel() {
|
||||||
|
|
||||||
|
// TODO Move fragment listeners
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package com.kunzisoft.keepass.viewmodels
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import com.kunzisoft.keepass.database.element.DateInstant
|
||||||
|
import com.kunzisoft.keepass.database.element.icon.IconImage
|
||||||
|
import com.kunzisoft.keepass.view.DataDate
|
||||||
|
import com.kunzisoft.keepass.view.DataTime
|
||||||
|
|
||||||
|
abstract class NodeEditViewModel : ViewModel() {
|
||||||
|
|
||||||
|
val requestIconSelection : LiveData<IconImage> get() = _requestIconSelection
|
||||||
|
private val _requestIconSelection = SingleLiveEvent<IconImage>()
|
||||||
|
val onIconSelected : LiveData<IconImage> get() = _onIconSelected
|
||||||
|
private val _onIconSelected = SingleLiveEvent<IconImage>()
|
||||||
|
|
||||||
|
val requestDateTimeSelection : LiveData<DateInstant> get() = _requestDateTimeSelection
|
||||||
|
private val _requestDateTimeSelection = SingleLiveEvent<DateInstant>()
|
||||||
|
val onDateSelected : LiveData<DataDate> get() = _onDateSelected
|
||||||
|
private val _onDateSelected = SingleLiveEvent<DataDate>()
|
||||||
|
val onTimeSelected : LiveData<DataTime> get() = _onTimeSelected
|
||||||
|
private val _onTimeSelected = SingleLiveEvent<DataTime>()
|
||||||
|
|
||||||
|
fun requestIconSelection(oldIconImage: IconImage) {
|
||||||
|
_requestIconSelection.value = oldIconImage
|
||||||
|
}
|
||||||
|
|
||||||
|
fun selectIcon(iconImage: IconImage) {
|
||||||
|
_onIconSelected.value = iconImage
|
||||||
|
}
|
||||||
|
|
||||||
|
fun requestDateTimeSelection(dateInstant: DateInstant) {
|
||||||
|
_requestDateTimeSelection.value = dateInstant
|
||||||
|
}
|
||||||
|
|
||||||
|
fun selectDate(year: Int, month: Int, day: Int) {
|
||||||
|
_onDateSelected.value = DataDate(year, month, day)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun selectTime(hours: Int, minutes: Int) {
|
||||||
|
_onTimeSelected.value = DataTime(hours, minutes)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user