From 413a5bab00b59ce0a62170b21b4e95c0be5895a9 Mon Sep 17 00:00:00 2001 From: Philipp Heckel Date: Fri, 26 Dec 2025 16:52:32 -0500 Subject: [PATCH] Fixes --- .../java/io/heckel/ntfy/ui/PriorityAdapter.kt | 4 +- .../java/io/heckel/ntfy/ui/PublishFragment.kt | 61 ++++- .../res/layout/fragment_publish_dialog.xml | 255 ++++++++++++------ app/src/main/res/values-night/colors.xml | 4 + app/src/main/res/values/colors.xml | 4 + app/src/main/res/values/strings.xml | 6 +- 6 files changed, 244 insertions(+), 90 deletions(-) diff --git a/app/src/main/java/io/heckel/ntfy/ui/PriorityAdapter.kt b/app/src/main/java/io/heckel/ntfy/ui/PriorityAdapter.kt index c756c5f7..0e0b75e2 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/PriorityAdapter.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/PriorityAdapter.kt @@ -13,7 +13,9 @@ data class PriorityItem( val priority: Int, val label: String, val iconResId: Int -) +) { + override fun toString(): String = label +} class PriorityAdapter( context: Context, diff --git a/app/src/main/java/io/heckel/ntfy/ui/PublishFragment.kt b/app/src/main/java/io/heckel/ntfy/ui/PublishFragment.kt index babf7b2c..5ceb104d 100644 --- a/app/src/main/java/io/heckel/ntfy/ui/PublishFragment.kt +++ b/app/src/main/java/io/heckel/ntfy/ui/PublishFragment.kt @@ -55,6 +55,9 @@ class PublishFragment : DialogFragment() { // Chips private lateinit var chipGroup: ChipGroup + private lateinit var chipTitle: Chip + private lateinit var chipTags: Chip + private lateinit var chipPriority: Chip private lateinit var chipClickUrl: Chip private lateinit var chipEmail: Chip private lateinit var chipDelay: Chip @@ -62,6 +65,11 @@ class PublishFragment : DialogFragment() { private lateinit var chipAttachFile: Chip private lateinit var chipPhoneCall: Chip + // Toggleable field layouts + private lateinit var titleLayout: View + private lateinit var tagsLayout: View + private lateinit var priorityLayout: View + // Optional field layouts private lateinit var clickUrlLayout: View private lateinit var emailLayout: View @@ -176,13 +184,18 @@ class PublishFragment : DialogFragment() { val priorityItems = PriorityAdapter.createPriorityItems(requireContext()) val priorityAdapter = PriorityAdapter(requireContext(), priorityItems) priorityDropdown.setAdapter(priorityAdapter) - priorityDropdown.setText(priorityItems[2].label, false) // Default priority (index 2 = priority 3) + // Set default priority (index 2 = priority 3) + priorityDropdown.setText(priorityItems[2].label, false) priorityDropdown.setOnItemClickListener { _, _, position, _ -> selectedPriority = priorityItems[position].priority + priorityDropdown.setText(priorityItems[position].label, false) } // Setup chips chipGroup = view.findViewById(R.id.publish_dialog_chip_group) + chipTitle = view.findViewById(R.id.publish_dialog_chip_title) + chipTags = view.findViewById(R.id.publish_dialog_chip_tags) + chipPriority = view.findViewById(R.id.publish_dialog_chip_priority) chipClickUrl = view.findViewById(R.id.publish_dialog_chip_click_url) chipEmail = view.findViewById(R.id.publish_dialog_chip_email) chipDelay = view.findViewById(R.id.publish_dialog_chip_delay) @@ -190,6 +203,11 @@ class PublishFragment : DialogFragment() { chipAttachFile = view.findViewById(R.id.publish_dialog_chip_attach_file) chipPhoneCall = view.findViewById(R.id.publish_dialog_chip_phone_call) + // Setup toggleable field layouts + titleLayout = view.findViewById(R.id.publish_dialog_title_layout) + tagsLayout = view.findViewById(R.id.publish_dialog_tags_layout) + priorityLayout = view.findViewById(R.id.publish_dialog_priority_layout) + // Setup optional field layouts clickUrlLayout = view.findViewById(R.id.publish_dialog_click_url_layout) emailLayout = view.findViewById(R.id.publish_dialog_email_layout) @@ -244,6 +262,26 @@ class PublishFragment : DialogFragment() { } private fun setupChipListeners() { + chipTitle.setOnCheckedChangeListener { _, isChecked -> + titleLayout.visibility = if (isChecked) View.VISIBLE else View.GONE + if (!isChecked) titleText.setText("") + } + + chipTags.setOnCheckedChangeListener { _, isChecked -> + tagsLayout.visibility = if (isChecked) View.VISIBLE else View.GONE + if (!isChecked) tagsText.setText("") + } + + chipPriority.setOnCheckedChangeListener { _, isChecked -> + priorityLayout.visibility = if (isChecked) View.VISIBLE else View.GONE + if (!isChecked) { + // Reset to default priority + selectedPriority = 3 + val priorityItems = PriorityAdapter.createPriorityItems(requireContext()) + priorityDropdown.setText(priorityItems[2].label, false) + } + } + chipClickUrl.setOnCheckedChangeListener { _, isChecked -> clickUrlLayout.visibility = if (isChecked) View.VISIBLE else View.GONE if (!isChecked) clickUrlText.setText("") @@ -291,6 +329,15 @@ class PublishFragment : DialogFragment() { } private fun setupRemoveButtonListeners(view: View) { + view.findViewById(R.id.publish_dialog_title_remove).setOnClickListener { + chipTitle.isChecked = false + } + view.findViewById(R.id.publish_dialog_tags_remove).setOnClickListener { + chipTags.isChecked = false + } + view.findViewById(R.id.publish_dialog_priority_remove).setOnClickListener { + chipPriority.isChecked = false + } view.findViewById(R.id.publish_dialog_click_url_remove).setOnClickListener { chipClickUrl.isChecked = false } @@ -359,10 +406,11 @@ class PublishFragment : DialogFragment() { } private fun onSendClick() { - val title = titleText.text.toString() + val title = if (chipTitle.isChecked) titleText.text.toString() else "" val message = messageText.text.toString() val markdown = markdownCheckbox.isChecked - val tagsString = tagsText.text.toString() + val priority = if (chipPriority.isChecked) selectedPriority else 3 // Default priority if not shown + val tagsString = if (chipTags.isChecked) tagsText.text.toString() else "" val tags = if (tagsString.isNotEmpty()) { tagsString.split(",").map { it.trim() }.filter { it.isNotEmpty() } } else { @@ -401,7 +449,7 @@ class PublishFragment : DialogFragment() { user = user, message = message, title = title, - priority = selectedPriority, + priority = priority, tags = tags, delay = delay, body = body, @@ -419,7 +467,7 @@ class PublishFragment : DialogFragment() { user = user, message = message, title = title, - priority = selectedPriority, + priority = priority, tags = tags, delay = delay, click = clickUrl, @@ -474,6 +522,9 @@ class PublishFragment : DialogFragment() { priorityDropdown.isEnabled = enable // Chips + chipTitle.isEnabled = enable + chipTags.isEnabled = enable + chipPriority.isEnabled = enable chipClickUrl.isEnabled = enable chipEmail.isEnabled = enable chipDelay.isEnabled = enable diff --git a/app/src/main/res/layout/fragment_publish_dialog.xml b/app/src/main/res/layout/fragment_publish_dialog.xml index 388c4419..6fa2e73f 100644 --- a/app/src/main/res/layout/fragment_publish_dialog.xml +++ b/app/src/main/res/layout/fragment_publish_dialog.xml @@ -61,23 +61,42 @@ - - + + android:orientation="horizontal" + android:visibility="gone" + android:layout_marginTop="8dp" + android:gravity="center_vertical"> - + android:layout_weight="1"> - + + + + + + + - + + android:gravity="center_vertical"> + android:layout_weight="1"> + + + + + + + + android:layout_weight="1" + android:hint="@string/publish_dialog_priority_hint"> + android:inputType="none"/> + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 88bf71d7..1fe7266d 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -144,4 +144,8 @@ #1B2023 #121212 + + + #2C2C2C + #424242 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 6a78d973..e615664d 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -145,6 +145,10 @@ #338574 #EEEEEE + + #E8E8E8 + #BDBDBD + @android:color/transparent @android:color/transparent diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fbe0803b..fd118e4f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -201,9 +201,10 @@ Publish to %1$s - Title (optional) + Title Message Tags + Priority Default priority Min priority Low priority @@ -215,6 +216,9 @@ Message published Format as Markdown Other features: + Title + Tags + Priority Click URL Email Delay