Skip to content

Commit 177796a

Browse files
committed
[enhancement] Dedicated title/description input fields: #22
1 parent c2332f0 commit 177796a

File tree

17 files changed

+199
-81
lines changed

17 files changed

+199
-81
lines changed

app/src/main/java/dev/arkbuilders/arkmemo/repo/NotesRepoHelper.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import dev.arkbuilders.arklib.user.properties.PropertiesStorage
99
import dev.arkbuilders.arklib.user.properties.PropertiesStorageRepo
1010
import dev.arkbuilders.arkmemo.models.Note
1111
import dev.arkbuilders.arkmemo.preferences.MemoPreferences
12+
import dev.arkbuilders.arkmemo.utils.isEqual
1213
import kotlinx.coroutines.Dispatchers
1314
import kotlinx.coroutines.withContext
1415
import java.nio.file.Path
@@ -32,11 +33,23 @@ class NotesRepoHelper @Inject constructor(
3233
propertiesStorage = propertiesStorageRepo.provide(RootIndex.provide(root))
3334
}
3435

35-
suspend fun persistNoteProperties(resourceId: ResourceId, noteTitle: String) {
36+
suspend fun persistNoteProperties(resourceId: ResourceId,
37+
noteTitle: String,
38+
description: String? = null): Boolean {
3639
with(propertiesStorage) {
37-
val properties = Properties(setOf(noteTitle), setOf())
38-
setProperties(resourceId, properties)
39-
persist()
40+
val properties = Properties(
41+
setOf(noteTitle),
42+
mutableSetOf<String>().apply {
43+
description?.let { this.add(description) }
44+
})
45+
val currentProperties = getProperties(resourceId)
46+
if (currentProperties.isEqual(properties)) {
47+
return false
48+
} else {
49+
setProperties(resourceId, properties)
50+
persist()
51+
return true
52+
}
4053
}
4154
}
4255

app/src/main/java/dev/arkbuilders/arkmemo/repo/graphics/GraphicNotesRepo.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,19 @@ class GraphicNotesRepo @Inject constructor(
6060
val size = tempPath.fileSize()
6161
val id = computeId(size, tempPath)
6262
Log.d(GRAPHICS_REPO, "initial resource name is ${tempPath.name}")
63-
helper.persistNoteProperties(resourceId = id, noteTitle = note.title)
63+
val isPropertiesChanged = helper.persistNoteProperties(
64+
resourceId = id,
65+
noteTitle = note.title,
66+
description = note.description)
6467

6568
val resourcePath = root.resolve("${id}.$SVG_EXT")
6669
if (resourcePath.exists()) {
67-
Log.d(
68-
GRAPHICS_REPO,
69-
"resource with similar content already exists"
70-
)
71-
callback(SaveNoteResult.ERROR_EXISTING)
70+
if (isPropertiesChanged) {
71+
callback(SaveNoteResult.SUCCESS)
72+
} else {
73+
Log.d(GRAPHICS_REPO, "resource with similar content already exists")
74+
callback(SaveNoteResult.ERROR_EXISTING)
75+
}
7276
return@withContext
7377
}
7478

app/src/main/java/dev/arkbuilders/arkmemo/repo/text/TextNotesRepo.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,19 @@ class TextNotesRepo @Inject constructor(
6060
val size = tempPath.fileSize()
6161
val id = computeId(size, tempPath)
6262
Log.d(TEXT_REPO, "initial resource name is ${tempPath.name}")
63-
helper.persistNoteProperties(resourceId = id, noteTitle = note.title)
63+
val isPropertiesChanged = helper.persistNoteProperties(
64+
resourceId = id,
65+
noteTitle = note.title,
66+
description = note.description)
6467

6568
val resourcePath = root.resolve("$id.$NOTE_EXT")
6669
if (resourcePath.exists()) {
67-
Log.d(
68-
TEXT_REPO,
69-
"resource with similar content already exists"
70-
)
71-
callback(SaveNoteResult.ERROR_EXISTING)
70+
if (isPropertiesChanged) {
71+
callback(SaveNoteResult.SUCCESS)
72+
} else {
73+
Log.d(TEXT_REPO, "resource with similar content already exists")
74+
callback(SaveNoteResult.ERROR_EXISTING)
75+
}
7276
return@withContext
7377
}
7478

app/src/main/java/dev/arkbuilders/arkmemo/ui/adapters/NotesListAdapter.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import dev.arkbuilders.arkmemo.ui.activities.MainActivity
1616
import dev.arkbuilders.arkmemo.ui.dialogs.NoteDeleteDialog
1717
import dev.arkbuilders.arkmemo.ui.fragments.EditGraphicNotesFragment
1818
import dev.arkbuilders.arkmemo.ui.fragments.EditTextNotesFragment
19+
import dev.arkbuilders.arkmemo.utils.getAutoTitle
1920
import dev.arkbuilders.arkmemo.utils.replaceFragment
2021

2122
class NotesListAdapter(private val notes: List<Note>):
@@ -38,7 +39,7 @@ class NotesListAdapter(private val notes: List<Note>):
3839
}
3940

4041
override fun onBindViewHolder(holder: NoteViewHolder, position: Int) {
41-
holder.title.text = notes[position].title
42+
holder.title.text = notes[position].getAutoTitle(activity)
4243
holder.date.text = notes[position].resource?.modified?.toString() ?:
4344
activity.getString(R.string.ark_memo_just_now)
4445
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package dev.arkbuilders.arkmemo.ui.fragments
2+
3+
import android.os.Bundle
4+
import android.view.View
5+
import androidx.fragment.app.Fragment
6+
import by.kirich1409.viewbindingdelegate.viewBinding
7+
import dev.arkbuilders.arkmemo.R
8+
import dev.arkbuilders.arkmemo.databinding.FragmentEditNotesBinding
9+
10+
open class BaseEditNoteFragment: Fragment(R.layout.fragment_edit_notes) {
11+
12+
val binding by viewBinding(FragmentEditNotesBinding::bind)
13+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
14+
super.onViewCreated(view, savedInstanceState)
15+
16+
binding.tvDescription.setOnClickListener {
17+
if (binding.editTextDescription.visibility == View.GONE) {
18+
binding.tvDescription.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_chevron_down, 0)
19+
binding.editTextDescription.visibility = View.VISIBLE
20+
} else {
21+
binding.tvDescription.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_chevron_right, 0)
22+
binding.editTextDescription.visibility = View.GONE
23+
}
24+
}
25+
}
26+
}

app/src/main/java/dev/arkbuilders/arkmemo/ui/fragments/EditGraphicNotesFragment.kt

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,23 @@ import android.text.Editable
66
import android.text.TextWatcher
77
import android.view.View
88
import androidx.core.view.isVisible
9-
import androidx.fragment.app.Fragment
109
import androidx.fragment.app.activityViewModels
1110
import androidx.fragment.app.viewModels
12-
import by.kirich1409.viewbindingdelegate.viewBinding
1311
import dagger.hilt.android.AndroidEntryPoint
1412
import dev.arkbuilders.arkmemo.R
15-
import dev.arkbuilders.arkmemo.databinding.FragmentEditNotesBinding
1613
import dev.arkbuilders.arkmemo.models.GraphicNote
1714
import dev.arkbuilders.arkmemo.ui.activities.MainActivity
1815
import dev.arkbuilders.arkmemo.ui.viewmodels.GraphicNotesViewModel
1916
import dev.arkbuilders.arkmemo.ui.viewmodels.NotesViewModel
2017
import dev.arkbuilders.arkmemo.utils.observeSaveResult
21-
import java.time.LocalDate
22-
import java.time.format.DateTimeFormatter
2318

2419
@AndroidEntryPoint
25-
class EditGraphicNotesFragment: Fragment(R.layout.fragment_edit_notes) {
20+
class EditGraphicNotesFragment: BaseEditNoteFragment() {
2621

2722
private val activity by lazy {
2823
requireActivity() as MainActivity
2924
}
3025

31-
private val binding by viewBinding(FragmentEditNotesBinding::bind)
32-
3326
private val graphicNotesViewModel: GraphicNotesViewModel by viewModels()
3427
private val notesViewModel: NotesViewModel by activityViewModels()
3528

@@ -54,10 +47,6 @@ class EditGraphicNotesFragment: Fragment(R.layout.fragment_edit_notes) {
5447

5548
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
5649
super.onViewCreated(view, savedInstanceState)
57-
val defaultTitle = getString(
58-
R.string.ark_memo_graphic_note,
59-
LocalDate.now().format(DateTimeFormatter.ISO_DATE)
60-
)
6150
var title = note.title
6251
val notesCanvas = binding.notesCanvas
6352
val saveButton = binding.saveNote
@@ -67,6 +56,9 @@ class EditGraphicNotesFragment: Fragment(R.layout.fragment_edit_notes) {
6756

6857
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
6958
title = s?.toString() ?: ""
59+
if (title.isEmpty()) {
60+
binding.noteTitle.hint = getString(R.string.hint_new_graphical_note)
61+
}
7062
}
7163

7264
override fun afterTextChanged(s: Editable?) {}
@@ -77,22 +69,25 @@ class EditGraphicNotesFragment: Fragment(R.layout.fragment_edit_notes) {
7769
activity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
7870
activity.showSettingsButton(false)
7971

80-
noteTitle.hint = defaultTitle
72+
noteTitle.hint = getString(R.string.hint_new_graphical_note)
8173
noteTitle.setText(title)
8274
noteTitle.addTextChangedListener(noteTitleChangeListener)
8375
notesCanvas.isVisible = true
8476
notesCanvas.setViewModel(graphicNotesViewModel)
8577
saveButton.setOnClickListener {
8678
val svg = graphicNotesViewModel.svg()
8779
val note = GraphicNote(
88-
title = title.ifEmpty { defaultTitle },
80+
title = binding.noteTitle.text.toString(),
8981
svg = svg,
82+
description = binding.editTextDescription.text.toString(),
9083
resource = note.resource
9184
)
9285
notesViewModel.onSaveClick(note) { show ->
9386
activity.showProgressBar(show)
9487
}
9588
}
89+
90+
binding.editTextDescription.setText(this.note.description)
9691
}
9792

9893
override fun onResume() {

app/src/main/java/dev/arkbuilders/arkmemo/ui/fragments/EditTextNotesFragment.kt

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,23 @@ import android.text.Editable
66
import android.text.TextWatcher
77
import android.view.View
88
import androidx.core.view.isVisible
9-
import androidx.fragment.app.Fragment
109
import androidx.fragment.app.activityViewModels
11-
import by.kirich1409.viewbindingdelegate.viewBinding
1210
import dagger.hilt.android.AndroidEntryPoint
1311
import dev.arkbuilders.arkmemo.R
14-
import dev.arkbuilders.arkmemo.ui.viewmodels.NotesViewModel
15-
import dev.arkbuilders.arkmemo.databinding.FragmentEditNotesBinding
1612
import dev.arkbuilders.arkmemo.models.TextNote
1713
import dev.arkbuilders.arkmemo.ui.activities.MainActivity
14+
import dev.arkbuilders.arkmemo.ui.viewmodels.NotesViewModel
1815
import dev.arkbuilders.arkmemo.utils.observeSaveResult
19-
import java.time.LocalDate
20-
import java.time.format.DateTimeFormatter
2116

2217
@AndroidEntryPoint
23-
class EditTextNotesFragment: Fragment(R.layout.fragment_edit_notes) {
18+
class EditTextNotesFragment: BaseEditNoteFragment() {
2419

2520
private val activity: MainActivity by lazy{
2621
requireActivity() as MainActivity
2722
}
2823

2924
private val notesViewModel: NotesViewModel by activityViewModels()
3025

31-
private val binding by viewBinding(FragmentEditNotesBinding::bind)
32-
3326
private var note = TextNote()
3427
private var noteStr: String? = null
3528

@@ -51,10 +44,6 @@ class EditTextNotesFragment: Fragment(R.layout.fragment_edit_notes) {
5144

5245
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
5346
super.onViewCreated(view, savedInstanceState)
54-
val defaultTitle = getString(
55-
R.string.ark_memo_text_note,
56-
LocalDate.now().format(DateTimeFormatter.ISO_DATE)
57-
)
5847
var title = this.note.title
5948
var data = note.text
6049
val editTextListener = object: TextWatcher{
@@ -74,6 +63,9 @@ class EditTextNotesFragment: Fragment(R.layout.fragment_edit_notes) {
7463

7564
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
7665
title = s?.toString() ?: ""
66+
if (title.isEmpty()) {
67+
binding.noteTitle.hint = getString(R.string.hint_new_text_note)
68+
}
7769
}
7870

7971
override fun afterTextChanged(s: Editable?) {}
@@ -83,7 +75,6 @@ class EditTextNotesFragment: Fragment(R.layout.fragment_edit_notes) {
8375
activity.supportActionBar?.setDisplayHomeAsUpEnabled(true)
8476
activity.showSettingsButton(false)
8577

86-
noteTitle.hint = defaultTitle
8778
noteTitle.setText(this.note.title)
8879
noteTitle.addTextChangedListener(noteTitleChangeListener)
8980
editNote.isVisible = true
@@ -96,14 +87,17 @@ class EditTextNotesFragment: Fragment(R.layout.fragment_edit_notes) {
9687

9788
saveNoteButton.setOnClickListener {
9889
val note = TextNote(
99-
title = title.ifEmpty { defaultTitle },
90+
title = title,
91+
description = binding.editTextDescription.text.toString(),
10092
text = data,
10193
resource = note.resource
10294
)
10395
notesViewModel.onSaveClick(note) { show ->
10496
activity.showProgressBar(show)
10597
}
10698
}
99+
100+
binding.editTextDescription.setText(this.note.description)
107101
}
108102

109103
companion object{

app/src/main/java/dev/arkbuilders/arkmemo/ui/fragments/NotesFragment.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,13 @@ import android.widget.Button
66
import android.widget.Toast
77
import androidx.fragment.app.Fragment
88
import androidx.fragment.app.activityViewModels
9-
import androidx.lifecycle.Lifecycle
109
import androidx.lifecycle.lifecycleScope
11-
import androidx.lifecycle.repeatOnLifecycle
1210
import androidx.recyclerview.widget.LinearLayoutManager
1311
import androidx.recyclerview.widget.RecyclerView
1412
import by.kirich1409.viewbindingdelegate.viewBinding
1513
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
1614
import com.google.android.material.floatingactionbutton.FloatingActionButton
1715
import dagger.hilt.android.AndroidEntryPoint
18-
import kotlinx.coroutines.launch
1916
import dev.arkbuilders.arkmemo.R
2017
import dev.arkbuilders.arkmemo.ui.viewmodels.NotesViewModel
2118
import dev.arkbuilders.arkmemo.databinding.FragmentNotesBinding
@@ -48,11 +45,13 @@ class NotesFragment: Fragment(R.layout.fragment_notes) {
4845
private val newTextNoteClickListener = View.OnClickListener {
4946
activity.fragment = EditTextNotesFragment()
5047
activity.replaceFragment(activity.fragment, EditTextNotesFragment.TAG)
48+
showFabs = false
5149
}
5250

5351
private val newGraphicNoteClickListener = View.OnClickListener{
5452
activity.fragment = EditGraphicNotesFragment.newInstance()
5553
activity.replaceFragment(activity.fragment, EditGraphicNotesFragment.TAG)
54+
showFabs = false
5655
}
5756

5857
private val pasteNoteClickListener = View.OnClickListener {

app/src/main/java/dev/arkbuilders/arkmemo/ui/views/NotesCanvas.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@ class NotesCanvas(context: Context, attrs: AttributeSet): View(context, attrs) {
1717
private lateinit var viewModel: GraphicNotesViewModel
1818
private var path = Path()
1919

20-
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
21-
super.onSizeChanged(w, h, oldw, oldh)
22-
viewModel.svg().setViewBox(w.toFloat(), h.toFloat())
23-
}
24-
2520
override fun onDraw(canvas: Canvas) {
2621
super.onDraw(canvas)
2722
val paths = viewModel.paths()
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package dev.arkbuilders.arkmemo.utils
2+
3+
import android.content.Context
4+
import dev.arkbuilders.arkmemo.R
5+
import dev.arkbuilders.arkmemo.models.GraphicNote
6+
import dev.arkbuilders.arkmemo.models.Note
7+
import dev.arkbuilders.arkmemo.models.TextNote
8+
9+
fun Note.getAutoTitle(context: Context? = null): String {
10+
11+
return if (this is TextNote) {
12+
this.title.ifEmpty { this.text.take(20) }
13+
} else if (this is GraphicNote && context != null) {
14+
this.title.ifEmpty {
15+
String.format(context.getString(R.string.ark_memo_graphic_note), this.resource?.id)
16+
}
17+
} else {
18+
""
19+
}
20+
}

0 commit comments

Comments
 (0)