From 92f4863b8aa9a3bffc8c3cf771c5274cc0822d79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Wed, 26 Jul 2023 11:43:18 +0200 Subject: [PATCH 01/13] Update UI of OpenNoteDialog This is related to #641 --- app/build.gradle | 2 +- .../notes/pro/adapters/OpenNoteAdapter.kt | 66 +++++++++++++++++ .../notes/pro/dialogs/OpenNoteDialog.kt | 55 ++++++--------- app/src/main/res/layout/dialog_open_note.xml | 70 +++++++++---------- app/src/main/res/layout/open_note_item.xml | 41 ++++++----- app/src/main/res/values/dimens.xml | 2 + 6 files changed, 148 insertions(+), 88 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt diff --git a/app/build.gradle b/app/build.gradle index c2f55d37..f0399680 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -66,7 +66,7 @@ android { } dependencies { - implementation 'com.github.SimpleMobileTools:Simple-Commons:f737f6c38b' + implementation 'com.github.esensar:Simple-Commons:2a2c17151e' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.documentfile:documentfile:1.0.1' diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt new file mode 100644 index 00000000..ce38150c --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt @@ -0,0 +1,66 @@ +package com.simplemobiletools.notes.pro.adapters + +import android.view.Menu +import android.view.View +import android.view.ViewGroup +import com.simplemobiletools.commons.activities.BaseSimpleActivity +import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter +import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor +import com.simplemobiletools.commons.helpers.MEDIUM_ALPHA_INT +import com.simplemobiletools.commons.views.MyRecyclerView +import com.simplemobiletools.notes.pro.R +import com.simplemobiletools.notes.pro.models.Note +import kotlinx.android.synthetic.main.open_note_item.view.open_note_item_holder +import kotlinx.android.synthetic.main.open_note_item.view.open_note_item_text +import kotlinx.android.synthetic.main.open_note_item.view.open_note_item_title + +class OpenNoteAdapter( + activity: BaseSimpleActivity, var items: List, + recyclerView: MyRecyclerView, itemClick: (Any) -> Unit +) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) { + + override fun getActionMenuId() = 0 + + override fun actionItemPressed(id: Int) {} + + override fun getSelectableItemCount() = items.size + + override fun getIsItemSelectable(position: Int) = false + + override fun getItemSelectionKey(position: Int) = items.getOrNull(position)?.id?.toInt() + + override fun getItemKeyPosition(key: Int) = items.indexOfFirst { it.id?.toInt() == key } + + override fun onActionModeCreated() {} + + override fun onActionModeDestroyed() {} + + override fun prepareActionMode(menu: Menu) {} + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.open_note_item, parent) + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val item = items[position] + holder.bindView(item, true, false) { itemView, layoutPosition -> + setupView(itemView, item) + } + bindViewHolder(holder) + } + + override fun getItemCount() = items.size + + private fun setupView(view: View, note: Note) { + view.apply { + open_note_item_holder.background = + activity.resources.getColoredDrawableWithColor(R.drawable.black_dialog_background, backgroundColor, MEDIUM_ALPHA_INT) + open_note_item_title.apply { + text = note.title + setTextColor(properPrimaryColor) + } + open_note_item_text.apply { + text = note.getNoteStoredValue(context) + setTextColor(textColor) + } + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt index b465a41c..abe1401f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt @@ -1,27 +1,24 @@ package com.simplemobiletools.notes.pro.dialogs -import android.app.Activity import android.view.View -import android.view.ViewGroup -import android.widget.RadioGroup import androidx.appcompat.app.AlertDialog -import com.simplemobiletools.commons.extensions.* +import androidx.recyclerview.widget.StaggeredGridLayoutManager +import com.simplemobiletools.commons.activities.BaseSimpleActivity +import com.simplemobiletools.commons.extensions.getAlertDialogBuilder +import com.simplemobiletools.commons.extensions.setupDialogStuff +import com.simplemobiletools.commons.views.AutoStaggeredGridLayoutManager import com.simplemobiletools.notes.pro.R -import com.simplemobiletools.notes.pro.extensions.config +import com.simplemobiletools.notes.pro.adapters.OpenNoteAdapter import com.simplemobiletools.notes.pro.helpers.NotesHelper import com.simplemobiletools.notes.pro.models.Note -import kotlinx.android.synthetic.main.dialog_open_note.view.* -import kotlinx.android.synthetic.main.open_note_item.view.* +import kotlinx.android.synthetic.main.dialog_open_note.view.dialog_open_note_list +import kotlinx.android.synthetic.main.dialog_open_note.view.dialog_open_note_new_radio -class OpenNoteDialog(val activity: Activity, val callback: (checkedId: Long, newNote: Note?) -> Unit) { +class OpenNoteDialog(val activity: BaseSimpleActivity, val callback: (checkedId: Long, newNote: Note?) -> Unit) { private var dialog: AlertDialog? = null init { val view = activity.layoutInflater.inflate(R.layout.dialog_open_note, null) - NotesHelper(activity).getNotes { - initDialog(it, view) - } - view.dialog_open_note_new_radio.setOnClickListener { view.dialog_open_note_new_radio.isChecked = false NewNoteDialog(activity, setChecklistAsDefault = false) { @@ -29,32 +26,20 @@ class OpenNoteDialog(val activity: Activity, val callback: (checkedId: Long, new dialog?.dismiss() } } + + val noteItemWidth = activity.resources.getDimensionPixelSize(R.dimen.grid_note_item_width) + + view.dialog_open_note_list.layoutManager = AutoStaggeredGridLayoutManager(noteItemWidth, StaggeredGridLayoutManager.VERTICAL) + + NotesHelper(activity).getNotes { + initDialog(it, view) + } } private fun initDialog(notes: List, view: View) { - val textColor = activity.getProperTextColor() - notes.forEach { - activity.layoutInflater.inflate(R.layout.open_note_item, null).apply { - val note = it - open_note_item_radio_button.apply { - text = note.title - isChecked = note.id == activity.config.currentNoteId - id = note.id!!.toInt() - - setOnClickListener { - callback(note.id!!, null) - dialog?.dismiss() - } - } - open_note_item_icon.apply { - beVisibleIf(note.path.isNotEmpty()) - applyColorFilter(textColor) - setOnClickListener { - activity.toast(note.path) - } - } - view.dialog_open_note_linear.addView(this, RadioGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)) - } + view.dialog_open_note_list.adapter = OpenNoteAdapter(activity, notes, view.dialog_open_note_list) { + callback((it as Note).id!!, null) + dialog?.dismiss() } activity.getAlertDialogBuilder().apply { diff --git a/app/src/main/res/layout/dialog_open_note.xml b/app/src/main/res/layout/dialog_open_note.xml index 0e015af1..659374c1 100644 --- a/app/src/main/res/layout/dialog_open_note.xml +++ b/app/src/main/res/layout/dialog_open_note.xml @@ -1,45 +1,45 @@ - - + android:layout_height="match_parent" + android:layout_above="@+id/dialog_open_note_divider" + android:layout_alignParentTop="true" + android:layout_marginStart="@dimen/small_margin" + android:layout_marginTop="@dimen/medium_margin" + android:layout_marginEnd="@dimen/small_margin" + tools:itemCount="2" + tools:listitem="@layout/open_note_item" /> - + + + + + android:text="@string/create_new_note" /> - - - - - - - - - + + diff --git a/app/src/main/res/layout/open_note_item.xml b/app/src/main/res/layout/open_note_item.xml index b4364e4d..f317a23f 100644 --- a/app/src/main/res/layout/open_note_item.xml +++ b/app/src/main/res/layout/open_note_item.xml @@ -1,24 +1,31 @@ - + android:layout_height="wrap_content" + android:layout_margin="@dimen/medium_margin" + android:background="@drawable/widget_round_background" + android:orientation="vertical" + android:padding="@dimen/normal_margin"> - - - + android:ellipsize="end" + android:lines="1" + android:textSize="@dimen/big_text_size" + android:textStyle="bold" + tools:text="Title" /> - + + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 1a0e9740..195c26d6 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -1,3 +1,5 @@ 56dp + 150dp + 300dp From 68991ce1cde448df7f342671850810b744deeff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Wed, 26 Jul 2023 12:40:32 +0200 Subject: [PATCH 02/13] Fix formatting for checklist notes --- .../notes/pro/adapters/OpenNoteAdapter.kt | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt index ce38150c..5306d66f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt @@ -1,15 +1,24 @@ package com.simplemobiletools.notes.pro.adapters +import android.content.Context +import android.text.SpannableString +import android.text.style.StrikethroughSpan import android.view.Menu import android.view.View import android.view.ViewGroup +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor import com.simplemobiletools.commons.helpers.MEDIUM_ALPHA_INT +import com.simplemobiletools.commons.helpers.SORT_BY_CUSTOM import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.notes.pro.R +import com.simplemobiletools.notes.pro.extensions.config +import com.simplemobiletools.notes.pro.models.ChecklistItem import com.simplemobiletools.notes.pro.models.Note +import com.simplemobiletools.notes.pro.models.NoteType import kotlinx.android.synthetic.main.open_note_item.view.open_note_item_holder import kotlinx.android.synthetic.main.open_note_item.view.open_note_item_text import kotlinx.android.synthetic.main.open_note_item.view.open_note_item_title @@ -58,9 +67,50 @@ class OpenNoteAdapter( setTextColor(properPrimaryColor) } open_note_item_text.apply { - text = note.getNoteStoredValue(context) + text = note.getFormattedValue(context) setTextColor(textColor) } } } + + private fun Note.getFormattedValue(context: Context): CharSequence? { + return when (type) { + NoteType.TYPE_TEXT -> getNoteStoredValue(context) + NoteType.TYPE_CHECKLIST -> { + val checklistItemType = object : TypeToken>() {}.type + var items = Gson().fromJson>(getNoteStoredValue(context), checklistItemType) ?: listOf() + items = items.filter { it.title != null }.let { + val sorting = context.config.sorting + ChecklistItem.sorting = sorting + if (ChecklistItem.sorting and SORT_BY_CUSTOM == 0) { + it.sorted().let { + if (context.config?.moveDoneChecklistItems == true) { + it.sortedBy { it.isDone } + } else { + it + } + } + } else { + it + } + } + val linePrefix = "• " + val stringifiedItems = items.joinToString(separator = System.lineSeparator()) { + "${linePrefix}${it.title}" + } + + val formattedText = SpannableString(stringifiedItems) + var currentPos = 0 + items.forEach { item -> + currentPos += linePrefix.length + if (item.isDone) { + formattedText.setSpan(StrikethroughSpan(), currentPos, currentPos + item.title.length, 0) + } + currentPos += item.title.length + currentPos += System.lineSeparator().length + } + formattedText + } + } + } } From 48d091924589f1b4a9b8d7e42cd2bd7221a2365e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Wed, 26 Jul 2023 12:52:37 +0200 Subject: [PATCH 03/13] Remove needless null check in OpenNoteAdapter --- .../com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt index 5306d66f..2a5f8c88 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt @@ -84,7 +84,7 @@ class OpenNoteAdapter( ChecklistItem.sorting = sorting if (ChecklistItem.sorting and SORT_BY_CUSTOM == 0) { it.sorted().let { - if (context.config?.moveDoneChecklistItems == true) { + if (context.config.moveDoneChecklistItems) { it.sortedBy { it.isDone } } else { it From c8f2f13b5387cfd2b4d8c922f5502ca7226e2af8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Wed, 26 Jul 2023 13:13:18 +0200 Subject: [PATCH 04/13] Fix appearance on different themes --- .../notes/pro/adapters/OpenNoteAdapter.kt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt index 2a5f8c88..8bf48306 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt @@ -1,6 +1,7 @@ package com.simplemobiletools.notes.pro.adapters import android.content.Context +import android.graphics.Color import android.text.SpannableString import android.text.style.StrikethroughSpan import android.view.Menu @@ -11,7 +12,8 @@ import com.google.gson.reflect.TypeToken import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor -import com.simplemobiletools.commons.helpers.MEDIUM_ALPHA_INT +import com.simplemobiletools.commons.extensions.isBlackAndWhiteTheme +import com.simplemobiletools.commons.helpers.LOWER_ALPHA_INT import com.simplemobiletools.commons.helpers.SORT_BY_CUSTOM import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.notes.pro.R @@ -60,8 +62,17 @@ class OpenNoteAdapter( private fun setupView(view: View, note: Note) { view.apply { - open_note_item_holder.background = - activity.resources.getColoredDrawableWithColor(R.drawable.black_dialog_background, backgroundColor, MEDIUM_ALPHA_INT) + if (context.isBlackAndWhiteTheme()) { + open_note_item_holder.setBackgroundResource(R.drawable.black_dialog_background) + } else { + val cardBackgroundColor = if (backgroundColor == Color.BLACK) { + Color.WHITE + } else { + Color.BLACK + } + open_note_item_holder.background = + activity.resources.getColoredDrawableWithColor(R.drawable.dialog_you_background, cardBackgroundColor, LOWER_ALPHA_INT) + } open_note_item_title.apply { text = note.title setTextColor(properPrimaryColor) From 1965df43f5982fe6787502324020840fcde42f3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Thu, 27 Jul 2023 11:03:48 +0200 Subject: [PATCH 05/13] Fix card background handling on older versions --- .../notes/pro/adapters/OpenNoteAdapter.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt index 8bf48306..48b826bc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt @@ -70,8 +70,13 @@ class OpenNoteAdapter( } else { Color.BLACK } + val cardBackground = if (context.config.isUsingSystemTheme) { + R.drawable.dialog_you_background + } else { + R.drawable.dialog_bg + } open_note_item_holder.background = - activity.resources.getColoredDrawableWithColor(R.drawable.dialog_you_background, cardBackgroundColor, LOWER_ALPHA_INT) + activity.resources.getColoredDrawableWithColor(cardBackground, cardBackgroundColor, LOWER_ALPHA_INT) } open_note_item_title.apply { text = note.title From b4314e8b4e43b57b1b9265628253a34f7db97c5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Thu, 27 Jul 2023 11:35:40 +0200 Subject: [PATCH 06/13] Add create a new note as an additional item in the list --- .../notes/pro/adapters/OpenNoteAdapter.kt | 77 +++++++++++++------ .../notes/pro/dialogs/OpenNoteDialog.kt | 33 ++++---- app/src/main/res/layout/dialog_open_note.xml | 44 ++++------- app/src/main/res/layout/open_note_item.xml | 2 +- 4 files changed, 89 insertions(+), 67 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt index 48b826bc..1b1141e7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt @@ -11,6 +11,8 @@ import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter +import com.simplemobiletools.commons.extensions.beGone +import com.simplemobiletools.commons.extensions.beVisible import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor import com.simplemobiletools.commons.extensions.isBlackAndWhiteTheme import com.simplemobiletools.commons.helpers.LOWER_ALPHA_INT @@ -29,18 +31,25 @@ class OpenNoteAdapter( activity: BaseSimpleActivity, var items: List, recyclerView: MyRecyclerView, itemClick: (Any) -> Unit ) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) { + private companion object { + const val NEW_NOTE_ID = -1 + } override fun getActionMenuId() = 0 override fun actionItemPressed(id: Int) {} - override fun getSelectableItemCount() = items.size + override fun getSelectableItemCount() = itemCount override fun getIsItemSelectable(position: Int) = false - override fun getItemSelectionKey(position: Int) = items.getOrNull(position)?.id?.toInt() + override fun getItemSelectionKey(position: Int) = items.getOrNull(position)?.id?.toInt() ?: NEW_NOTE_ID - override fun getItemKeyPosition(key: Int) = items.indexOfFirst { it.id?.toInt() == key } + override fun getItemKeyPosition(key: Int) = if (key == NEW_NOTE_ID) { + items.size + } else { + items.indexOfFirst { it.id?.toInt() == key } + } override fun onActionModeCreated() {} @@ -51,37 +60,29 @@ class OpenNoteAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.open_note_item, parent) override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val item = items[position] - holder.bindView(item, true, false) { itemView, layoutPosition -> - setupView(itemView, item) + if (position == items.size) { + holder.bindView(NEW_NOTE_ID, true, false) { itemView, layoutPosition -> + setupNewNoteView(itemView) + } + } else { + val item = items[position] + holder.bindView(item, true, false) { itemView, layoutPosition -> + setupView(itemView, item) + } } bindViewHolder(holder) } - override fun getItemCount() = items.size + override fun getItemCount() = items.size + 1 private fun setupView(view: View, note: Note) { view.apply { - if (context.isBlackAndWhiteTheme()) { - open_note_item_holder.setBackgroundResource(R.drawable.black_dialog_background) - } else { - val cardBackgroundColor = if (backgroundColor == Color.BLACK) { - Color.WHITE - } else { - Color.BLACK - } - val cardBackground = if (context.config.isUsingSystemTheme) { - R.drawable.dialog_you_background - } else { - R.drawable.dialog_bg - } - open_note_item_holder.background = - activity.resources.getColoredDrawableWithColor(cardBackground, cardBackgroundColor, LOWER_ALPHA_INT) - } + setupCard() open_note_item_title.apply { text = note.title setTextColor(properPrimaryColor) } + open_note_item_text.beVisible() open_note_item_text.apply { text = note.getFormattedValue(context) setTextColor(textColor) @@ -89,6 +90,36 @@ class OpenNoteAdapter( } } + private fun setupNewNoteView(view: View) { + view.apply { + setupCard() + open_note_item_title.apply { + setText(R.string.create_new_note) + setTextColor(properPrimaryColor) + } + open_note_item_text.beGone() + } + } + + private fun View.setupCard() { + if (context.isBlackAndWhiteTheme()) { + open_note_item_holder.setBackgroundResource(R.drawable.black_dialog_background) + } else { + val cardBackgroundColor = if (backgroundColor == Color.BLACK) { + Color.WHITE + } else { + Color.BLACK + } + val cardBackground = if (context.config.isUsingSystemTheme) { + R.drawable.dialog_you_background + } else { + R.drawable.dialog_bg + } + open_note_item_holder.background = + activity.resources.getColoredDrawableWithColor(cardBackground, cardBackgroundColor, LOWER_ALPHA_INT) + } + } + private fun Note.getFormattedValue(context: Context): CharSequence? { return when (type) { NoteType.TYPE_TEXT -> getNoteStoredValue(context) diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt index abe1401f..d8bf638c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt @@ -12,23 +12,14 @@ import com.simplemobiletools.notes.pro.adapters.OpenNoteAdapter import com.simplemobiletools.notes.pro.helpers.NotesHelper import com.simplemobiletools.notes.pro.models.Note import kotlinx.android.synthetic.main.dialog_open_note.view.dialog_open_note_list -import kotlinx.android.synthetic.main.dialog_open_note.view.dialog_open_note_new_radio class OpenNoteDialog(val activity: BaseSimpleActivity, val callback: (checkedId: Long, newNote: Note?) -> Unit) { private var dialog: AlertDialog? = null init { val view = activity.layoutInflater.inflate(R.layout.dialog_open_note, null) - view.dialog_open_note_new_radio.setOnClickListener { - view.dialog_open_note_new_radio.isChecked = false - NewNoteDialog(activity, setChecklistAsDefault = false) { - callback(0, it) - dialog?.dismiss() - } - } val noteItemWidth = activity.resources.getDimensionPixelSize(R.dimen.grid_note_item_width) - view.dialog_open_note_list.layoutManager = AutoStaggeredGridLayoutManager(noteItemWidth, StaggeredGridLayoutManager.VERTICAL) NotesHelper(activity).getNotes { @@ -38,14 +29,24 @@ class OpenNoteDialog(val activity: BaseSimpleActivity, val callback: (checkedId: private fun initDialog(notes: List, view: View) { view.dialog_open_note_list.adapter = OpenNoteAdapter(activity, notes, view.dialog_open_note_list) { - callback((it as Note).id!!, null) - dialog?.dismiss() - } - - activity.getAlertDialogBuilder().apply { - activity.setupDialogStuff(view, this, R.string.open_note) { alertDialog -> - dialog = alertDialog + if (it is Note) { + callback(it.id!!, null) + dialog?.dismiss() + } else { + // New note + NewNoteDialog(activity, setChecklistAsDefault = false) { + callback(0, it) + dialog?.dismiss() + } } } + + activity.getAlertDialogBuilder() + .setNegativeButton(R.string.cancel, null) + .apply { + activity.setupDialogStuff(view, this, R.string.open_note) { alertDialog -> + dialog = alertDialog + } + } } } diff --git a/app/src/main/res/layout/dialog_open_note.xml b/app/src/main/res/layout/dialog_open_note.xml index 659374c1..5f9e039f 100644 --- a/app/src/main/res/layout/dialog_open_note.xml +++ b/app/src/main/res/layout/dialog_open_note.xml @@ -1,45 +1,35 @@ - - + app:layout_constraintHeight_max="500dp"> + + - - - - - - + diff --git a/app/src/main/res/layout/open_note_item.xml b/app/src/main/res/layout/open_note_item.xml index f317a23f..bbb61d32 100644 --- a/app/src/main/res/layout/open_note_item.xml +++ b/app/src/main/res/layout/open_note_item.xml @@ -14,7 +14,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="end" - android:lines="1" + android:maxLines="2" android:textSize="@dimen/big_text_size" android:textStyle="bold" tools:text="Title" /> From 391271512eb270ea999a4a964cf738a2184d0667 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Thu, 27 Jul 2023 11:37:22 +0200 Subject: [PATCH 07/13] Hide note text if it is blank --- .../notes/pro/adapters/OpenNoteAdapter.kt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt index 1b1141e7..37d18568 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt @@ -11,10 +11,7 @@ import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter -import com.simplemobiletools.commons.extensions.beGone -import com.simplemobiletools.commons.extensions.beVisible -import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor -import com.simplemobiletools.commons.extensions.isBlackAndWhiteTheme +import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.LOWER_ALPHA_INT import com.simplemobiletools.commons.helpers.SORT_BY_CUSTOM import com.simplemobiletools.commons.views.MyRecyclerView @@ -82,9 +79,10 @@ class OpenNoteAdapter( text = note.title setTextColor(properPrimaryColor) } - open_note_item_text.beVisible() + val formattedText = note.getFormattedValue(context) + open_note_item_text.beGoneIf(formattedText.isNullOrBlank()) open_note_item_text.apply { - text = note.getFormattedValue(context) + text = formattedText setTextColor(textColor) } } From fb0020103abbb9e2d8eeba67581c399b9674aad2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Thu, 27 Jul 2023 12:24:50 +0200 Subject: [PATCH 08/13] Remove useless comment --- .../com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt index d8bf638c..a131b96a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt @@ -33,7 +33,6 @@ class OpenNoteDialog(val activity: BaseSimpleActivity, val callback: (checkedId: callback(it.id!!, null) dialog?.dismiss() } else { - // New note NewNoteDialog(activity, setChecklistAsDefault = false) { callback(0, it) dialog?.dismiss() From 1b94c4839f3ff80e281508acc1408ced4045397f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Thu, 27 Jul 2023 15:30:56 +0200 Subject: [PATCH 09/13] Remove divider from open note dialog --- app/src/main/res/layout/dialog_open_note.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/app/src/main/res/layout/dialog_open_note.xml b/app/src/main/res/layout/dialog_open_note.xml index 5f9e039f..7faee625 100644 --- a/app/src/main/res/layout/dialog_open_note.xml +++ b/app/src/main/res/layout/dialog_open_note.xml @@ -23,13 +23,4 @@ tools:itemCount="10" tools:listitem="@layout/open_note_item" /> - - - From 5f2cc8149bccf5d346afe445bfa3f69085b2d4e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Thu, 27 Jul 2023 15:53:09 +0200 Subject: [PATCH 10/13] Add a separate layout for new note item --- .../notes/pro/adapters/OpenNoteAdapter.kt | 39 ++++++++++++++----- .../main/res/layout/open_new_note_item.xml | 31 +++++++++++++++ app/src/main/res/layout/open_note_item.xml | 2 +- 3 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 app/src/main/res/layout/open_new_note_item.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt index 37d18568..92b85bce 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt @@ -11,7 +11,10 @@ import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter -import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.extensions.applyColorFilter +import com.simplemobiletools.commons.extensions.beGoneIf +import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor +import com.simplemobiletools.commons.extensions.isBlackAndWhiteTheme import com.simplemobiletools.commons.helpers.LOWER_ALPHA_INT import com.simplemobiletools.commons.helpers.SORT_BY_CUSTOM import com.simplemobiletools.commons.views.MyRecyclerView @@ -20,6 +23,9 @@ import com.simplemobiletools.notes.pro.extensions.config import com.simplemobiletools.notes.pro.models.ChecklistItem import com.simplemobiletools.notes.pro.models.Note import com.simplemobiletools.notes.pro.models.NoteType +import kotlinx.android.synthetic.main.open_new_note_item.view.open_new_note_icon +import kotlinx.android.synthetic.main.open_new_note_item.view.open_new_note_item_holder +import kotlinx.android.synthetic.main.open_new_note_item.view.open_new_note_item_title import kotlinx.android.synthetic.main.open_note_item.view.open_note_item_holder import kotlinx.android.synthetic.main.open_note_item.view.open_note_item_text import kotlinx.android.synthetic.main.open_note_item.view.open_note_item_title @@ -30,6 +36,8 @@ class OpenNoteAdapter( ) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) { private companion object { const val NEW_NOTE_ID = -1 + const val VIEW_TYPE_NOTE = 0 + const val VIEW_TYPE_NEW_NOTE = 1 } override fun getActionMenuId() = 0 @@ -54,7 +62,20 @@ class OpenNoteAdapter( override fun prepareActionMode(menu: Menu) {} - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.open_note_item, parent) + override fun getItemViewType(position: Int): Int = if (position == items.size) { + VIEW_TYPE_NEW_NOTE + } else { + VIEW_TYPE_NOTE + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val layout = if (viewType == VIEW_TYPE_NEW_NOTE) { + R.layout.open_new_note_item + } else { + R.layout.open_note_item + } + return createViewHolder(layout, parent) + } override fun onBindViewHolder(holder: ViewHolder, position: Int) { if (position == items.size) { @@ -74,7 +95,7 @@ class OpenNoteAdapter( private fun setupView(view: View, note: Note) { view.apply { - setupCard() + setupCard(open_note_item_holder) open_note_item_title.apply { text = note.title setTextColor(properPrimaryColor) @@ -90,18 +111,18 @@ class OpenNoteAdapter( private fun setupNewNoteView(view: View) { view.apply { - setupCard() - open_note_item_title.apply { + setupCard(open_new_note_item_holder) + open_new_note_item_title.apply { setText(R.string.create_new_note) setTextColor(properPrimaryColor) } - open_note_item_text.beGone() + open_new_note_icon.applyColorFilter(properPrimaryColor) } } - private fun View.setupCard() { + private fun View.setupCard(holder: View) { if (context.isBlackAndWhiteTheme()) { - open_note_item_holder.setBackgroundResource(R.drawable.black_dialog_background) + holder.setBackgroundResource(R.drawable.black_dialog_background) } else { val cardBackgroundColor = if (backgroundColor == Color.BLACK) { Color.WHITE @@ -113,7 +134,7 @@ class OpenNoteAdapter( } else { R.drawable.dialog_bg } - open_note_item_holder.background = + holder.background = activity.resources.getColoredDrawableWithColor(cardBackground, cardBackgroundColor, LOWER_ALPHA_INT) } } diff --git a/app/src/main/res/layout/open_new_note_item.xml b/app/src/main/res/layout/open_new_note_item.xml new file mode 100644 index 00000000..c00b510f --- /dev/null +++ b/app/src/main/res/layout/open_new_note_item.xml @@ -0,0 +1,31 @@ + + + + + + + + diff --git a/app/src/main/res/layout/open_note_item.xml b/app/src/main/res/layout/open_note_item.xml index bbb61d32..f317a23f 100644 --- a/app/src/main/res/layout/open_note_item.xml +++ b/app/src/main/res/layout/open_note_item.xml @@ -14,7 +14,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="end" - android:maxLines="2" + android:lines="1" android:textSize="@dimen/big_text_size" android:textStyle="bold" tools:text="Title" /> From da61c2eb32cc5159e7899b10fd4bbf89b38391f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Mon, 31 Jul 2023 10:17:06 +0200 Subject: [PATCH 11/13] Update Simple-Commons version --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index e21d2d02..d575ab1e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -66,7 +66,7 @@ android { } dependencies { - implementation 'com.github.SimpleMobileTools:Simple-Commons:91763fe00f' + implementation 'com.github.SimpleMobileTools:Simple-Commons:2a2c17151e' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.documentfile:documentfile:1.0.1' From 835168ef0a43d468c541997e5a1bed42c77e9cc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Tue, 1 Aug 2023 08:20:20 +0200 Subject: [PATCH 12/13] Add fab for OpenNoteDialog --- .../notes/pro/adapters/OpenNoteAdapter.kt | 56 +++---------------- .../notes/pro/dialogs/OpenNoteDialog.kt | 16 +++--- app/src/main/res/layout/dialog_open_note.xml | 25 ++++++--- app/src/main/res/values/dimens.xml | 2 + 4 files changed, 35 insertions(+), 64 deletions(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt index 92b85bce..0e0be36e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/adapters/OpenNoteAdapter.kt @@ -11,7 +11,6 @@ import com.google.gson.Gson import com.google.gson.reflect.TypeToken import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter -import com.simplemobiletools.commons.extensions.applyColorFilter import com.simplemobiletools.commons.extensions.beGoneIf import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor import com.simplemobiletools.commons.extensions.isBlackAndWhiteTheme @@ -23,9 +22,6 @@ import com.simplemobiletools.notes.pro.extensions.config import com.simplemobiletools.notes.pro.models.ChecklistItem import com.simplemobiletools.notes.pro.models.Note import com.simplemobiletools.notes.pro.models.NoteType -import kotlinx.android.synthetic.main.open_new_note_item.view.open_new_note_icon -import kotlinx.android.synthetic.main.open_new_note_item.view.open_new_note_item_holder -import kotlinx.android.synthetic.main.open_new_note_item.view.open_new_note_item_title import kotlinx.android.synthetic.main.open_note_item.view.open_note_item_holder import kotlinx.android.synthetic.main.open_note_item.view.open_note_item_text import kotlinx.android.synthetic.main.open_note_item.view.open_note_item_title @@ -34,12 +30,6 @@ class OpenNoteAdapter( activity: BaseSimpleActivity, var items: List, recyclerView: MyRecyclerView, itemClick: (Any) -> Unit ) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) { - private companion object { - const val NEW_NOTE_ID = -1 - const val VIEW_TYPE_NOTE = 0 - const val VIEW_TYPE_NEW_NOTE = 1 - } - override fun getActionMenuId() = 0 override fun actionItemPressed(id: Int) {} @@ -48,13 +38,9 @@ class OpenNoteAdapter( override fun getIsItemSelectable(position: Int) = false - override fun getItemSelectionKey(position: Int) = items.getOrNull(position)?.id?.toInt() ?: NEW_NOTE_ID + override fun getItemSelectionKey(position: Int) = items.getOrNull(position)?.id?.toInt() - override fun getItemKeyPosition(key: Int) = if (key == NEW_NOTE_ID) { - items.size - } else { - items.indexOfFirst { it.id?.toInt() == key } - } + override fun getItemKeyPosition(key: Int) = items.indexOfFirst { it.id?.toInt() == key } override fun onActionModeCreated() {} @@ -62,36 +48,19 @@ class OpenNoteAdapter( override fun prepareActionMode(menu: Menu) {} - override fun getItemViewType(position: Int): Int = if (position == items.size) { - VIEW_TYPE_NEW_NOTE - } else { - VIEW_TYPE_NOTE - } - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - val layout = if (viewType == VIEW_TYPE_NEW_NOTE) { - R.layout.open_new_note_item - } else { - R.layout.open_note_item - } - return createViewHolder(layout, parent) + return createViewHolder(R.layout.open_note_item, parent) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { - if (position == items.size) { - holder.bindView(NEW_NOTE_ID, true, false) { itemView, layoutPosition -> - setupNewNoteView(itemView) - } - } else { - val item = items[position] - holder.bindView(item, true, false) { itemView, layoutPosition -> - setupView(itemView, item) - } + val item = items[position] + holder.bindView(item, true, false) { itemView, layoutPosition -> + setupView(itemView, item) } bindViewHolder(holder) } - override fun getItemCount() = items.size + 1 + override fun getItemCount() = items.size private fun setupView(view: View, note: Note) { view.apply { @@ -109,17 +78,6 @@ class OpenNoteAdapter( } } - private fun setupNewNoteView(view: View) { - view.apply { - setupCard(open_new_note_item_holder) - open_new_note_item_title.apply { - setText(R.string.create_new_note) - setTextColor(properPrimaryColor) - } - open_new_note_icon.applyColorFilter(properPrimaryColor) - } - } - private fun View.setupCard(holder: View) { if (context.isBlackAndWhiteTheme()) { holder.setBackgroundResource(R.drawable.black_dialog_background) diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt index a131b96a..b32e069a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/dialogs/OpenNoteDialog.kt @@ -12,6 +12,7 @@ import com.simplemobiletools.notes.pro.adapters.OpenNoteAdapter import com.simplemobiletools.notes.pro.helpers.NotesHelper import com.simplemobiletools.notes.pro.models.Note import kotlinx.android.synthetic.main.dialog_open_note.view.dialog_open_note_list +import kotlinx.android.synthetic.main.dialog_open_note.view.new_note_fab class OpenNoteDialog(val activity: BaseSimpleActivity, val callback: (checkedId: Long, newNote: Note?) -> Unit) { private var dialog: AlertDialog? = null @@ -29,14 +30,15 @@ class OpenNoteDialog(val activity: BaseSimpleActivity, val callback: (checkedId: private fun initDialog(notes: List, view: View) { view.dialog_open_note_list.adapter = OpenNoteAdapter(activity, notes, view.dialog_open_note_list) { - if (it is Note) { - callback(it.id!!, null) + it as Note + callback(it.id!!, null) + dialog?.dismiss() + } + + view.new_note_fab.setOnClickListener { + NewNoteDialog(activity, setChecklistAsDefault = false) { + callback(0, it) dialog?.dismiss() - } else { - NewNoteDialog(activity, setChecklistAsDefault = false) { - callback(0, it) - dialog?.dismiss() - } } } diff --git a/app/src/main/res/layout/dialog_open_note.xml b/app/src/main/res/layout/dialog_open_note.xml index 7faee625..59dbcc0e 100644 --- a/app/src/main/res/layout/dialog_open_note.xml +++ b/app/src/main/res/layout/dialog_open_note.xml @@ -1,26 +1,35 @@ - + android:minHeight="@dimen/min_open_note_popup_height" + app:layout_constraintHeight_max="@dimen/max_open_note_popup_height"> + + - + + + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 195c26d6..387b5ed0 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -2,4 +2,6 @@ 56dp 150dp 300dp + 500dp + 200dp From 1a8871b81a2e863409360432856a8e570e724078 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Wed, 2 Aug 2023 13:12:13 +0200 Subject: [PATCH 13/13] Add extra bottom padding in open note dialog to prevent overlap with fab --- app/src/main/res/layout/dialog_open_note.xml | 1 + app/src/main/res/values/dimens.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/app/src/main/res/layout/dialog_open_note.xml b/app/src/main/res/layout/dialog_open_note.xml index 59dbcc0e..6abdb101 100644 --- a/app/src/main/res/layout/dialog_open_note.xml +++ b/app/src/main/res/layout/dialog_open_note.xml @@ -20,6 +20,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" tools:itemCount="10" + android:paddingBottom="@dimen/open_note_popup_bottom_extra_padding" tools:listitem="@layout/open_note_item" /> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 387b5ed0..1ee7e9c2 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -4,4 +4,5 @@ 300dp 500dp 200dp + 76dp