Skip to content

Conversation

@williscool
Copy link
Owner

@williscool williscool commented Jan 22, 2026

refs #15


Note

Modernizes UI with Material components and refactors time selection flows.

  • Replace AlertDialog, platform DatePicker/TimePicker, and Toast with MaterialAlertDialogBuilder, MaterialDatePicker, MaterialTimePicker, and Snackbar across activities/fragments (edit/view/snooze, main, settings, dismissed events, pre-action)
  • Update layouts to Material widgets: MaterialToolbar, MaterialDivider, Material checkboxes/radio buttons/cards, exposed dropdown menus; remove legacy date/time picker layouts
  • Refactor reminder/time interval pickers to use AutoCompleteTextView (exposed dropdown) instead of Spinner, updating logic in TimeIntervalPickerController and ReminderPatternPreferenceX
  • Improve date/time handling (UTC-to-local conversions, restore listeners) and add visibility/UX tweaks (e.g., hide empty time text)
  • Adjust tests to look for R.string.choose_date; mark one flaky calendar monitor test as @Ignore
  • Minor type cleanups in adapters (View/ViewGroup vs RelativeLayout) and add calendar_color_indicator drawable

Written by Cursor Bugbot for commit 4b80163. This will update automatically on new commits. Configure here.

@github-actions
Copy link

Build artifacts for PR #237 (commit 9d50996) are available:

You can download these artifacts from the "Artifacts" section of the workflow run.

@github-actions
Copy link

github-actions bot commented Jan 22, 2026

Code Coverage Report

Overall Project 34.75% -2.16% 🍏
Files changed 14.62%

Module Coverage
app 42.4% -2.09%
x8664Debug 27.26% -2.24%
Files
Module File Coverage
app DismissedEventsActivity.kt 74.93% 🍏
DismissedEventsFragment.kt 70.01% 🍏
MainActivityLegacy.kt 55.93% -1.11%
ActiveEventsFragment.kt 55.22% -0.08% 🍏
MainActivityBase.kt 53.32% -2.27%
ViewEventActivityNoRecents.kt 52.44% -12.86%
SnoozeAllActivity.kt 51.72% -15.94%
MainActivityModern.kt 50.41% -0.83%
DismissedEventListAdapter.kt 50.08% -0.88% 🍏
EventListAdapter.kt 41.21% -0.74% 🍏
TimeIntervalPickerController.kt 38.87% -9.03% 🍏
SnoozePresetPreferenceX.kt 27.07% -1.27%
MiscSettingsFragmentX.kt 11.06% -3.8%
NavigationSettingsFragmentX.kt 0% -3.92%
CalendarsActivity.kt 0% -0.53%
ListPreference.kt 0% -5.08%
ReminderPatternPreferenceX.kt 0% -15.67%
ReportABugActivity.kt 0% -5.52%
EditEventActivity.kt 0% -17.63%
PreActionActivity.kt 0% -2.84%
x8664Debug TimeIntervalPickerController.kt 78.99% -5.04% 🍏
CalendarsActivity.kt 69.44% -0.53%
DismissedEventsFragment.kt 57.83% -0.54%
PreActionActivity.kt 54.8% -2.84%
MainActivityLegacy.kt 52.12% -1.11%
MainActivityModern.kt 50.09% -0.83%
ActiveEventsFragment.kt 49.92% -0.08% 🍏
EventListAdapter.kt 49.06% -0.74% 🍏
DismissedEventsActivity.kt 48.99% -1.44%
MainActivityBase.kt 48.49% -1.51%
ViewEventActivityNoRecents.kt 44.95% -16.51%
DismissedEventListAdapter.kt 44.23% -0.88% 🍏
SnoozeAllActivity.kt 34.08% -20.48%
SnoozePresetPreferenceX.kt 27.07% -1.27%
ReminderPatternPreferenceX.kt 13.64% -15.67%
MiscSettingsFragmentX.kt 11.06% -3.8%
NavigationSettingsFragmentX.kt 0% -3.92%
ListPreference.kt 0% -5.08%
ReportABugActivity.kt 0% -5.52%
EditEventActivity.kt 0% -17.63%

@github-actions
Copy link

📊 Code Coverage Summary

Coverage Type Coverage
Overall 34.89
Changed Files 100

View detailed coverage report

@williscool williscool force-pushed the fix/bottom_sheet_styles_material_update branch from 9d50996 to 7ac3324 Compare January 22, 2026 04:18
@williscool williscool changed the title fix: bottom sheet styles material feat: ui material design overhaul (formerly bottom sheet material) Jan 22, 2026
cursor[bot]

This comment was marked as outdated.

@github-actions
Copy link

Build artifacts for PR #237 (commit 7ac3324) are available:

You can download these artifacts from the "Artifacts" section of the workflow run.

@github-actions
Copy link

📊 Code Coverage Summary

Coverage Type Coverage
Overall 34.91
Changed Files 100

View detailed coverage report

cursor[bot]

This comment was marked as outdated.

@github-actions
Copy link

Build artifacts for PR #237 (commit 6385243) are available:

You can download these artifacts from the "Artifacts" section of the workflow run.

@github-actions
Copy link

📊 Code Coverage Summary

Coverage Type Coverage
Overall 27.35
Changed Files 34.15

View detailed coverage report

cursor[bot]

This comment was marked as outdated.

@github-actions
Copy link

Build artifacts for PR #237 (commit 7acc307) are available:

You can download these artifacts from the "Artifacts" section of the workflow run.

@github-actions
Copy link

📊 Code Coverage Summary

Coverage Type Coverage
Overall null
Changed Files 100

View detailed coverage report

cursor[bot]

This comment was marked as outdated.

@github-actions
Copy link

Build artifacts for PR #237 (commit a395f84) are available:

You can download these artifacts from the "Artifacts" section of the workflow run.

@github-actions
Copy link

Build artifacts for PR #237 (commit 02e5ecf) are available:

You can download these artifacts from the "Artifacts" section of the workflow run.

@github-actions
Copy link

📊 Code Coverage Summary

Coverage Type Coverage
Overall null
Changed Files 100

View detailed coverage report

@github-actions
Copy link

Build artifacts for PR #237 (commit 380f4a6) are available:

You can download these artifacts from the "Artifacts" section of the workflow run.

@github-actions
Copy link

📊 Code Coverage Summary

Coverage Type Coverage
Overall null
Changed Files 100

View detailed coverage report

3 similar comments
@github-actions
Copy link

📊 Code Coverage Summary

Coverage Type Coverage
Overall null
Changed Files 100

View detailed coverage report

@github-actions
Copy link

📊 Code Coverage Summary

Coverage Type Coverage
Overall null
Changed Files 100

View detailed coverage report

@github-actions
Copy link

📊 Code Coverage Summary

Coverage Type Coverage
Overall null
Changed Files 100

View detailed coverage report

@github-actions
Copy link

Build artifacts for PR #237 (commit d99dd33) are available:

You can download these artifacts from the "Artifacts" section of the workflow run.

@github-actions
Copy link

📊 Code Coverage Summary

Coverage Type Coverage
Overall 34.78
Changed Files 34.7

View detailed coverage report

.show()
}

private fun localMidnightMillisFromUtcDateSelection(dateSelectionUtcMillis: Long): Long {
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be in a utility function class somewhere and tested separately

picker.show(supportFragmentManager, "timeFromPicker")
}

@Suppress("UNUSED_PARAMETER")
Copy link
Owner Author

@williscool williscool Jan 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can We get rid of this suppression?

@@ -2,8 +2,8 @@ package com.github.quarck.calnotify.ui

import android.view.LayoutInflater
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given that we've changed the UI here will need to pay close attention to how this test changes things and make sure it's testing the right stuff

layoutCustomPattern = view.findOrThrow(R.id.layout_reminder_interval_custom)

timeUnitsSpinners.adapter = ArrayAdapter(
timeUnitsArray = view.context.resources.getStringArray(R.array.time_units_plurals_with_seconds)
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's this?

if (simpleIntervalMillis == 0L) {
simpleIntervalMillis = 60 * 1000L
Toast.makeText(context, R.string.invalid_reminder_interval, Toast.LENGTH_LONG).show()
Toast.makeText(requireContext(), R.string.invalid_reminder_interval, Toast.LENGTH_LONG).show()
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should have some guidelines in the docs on where to and not to use toasts and snackbars

var entry: DismissedEventAlertRecord? = null

var eventHolder: RelativeLayout?
var eventHolder: View?
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curious why this change?

undoLayout = itemView.find<ViewGroup?>(R.id.event_card_undo_layout)

compactViewContentLayout = itemView.find<RelativeLayout?>(R.id.compact_view_content_layout)
compactViewContentLayout = itemView.find<ViewGroup?>(R.id.compact_view_content_layout)
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why?

@@ -20,11 +20,10 @@
package com.github.quarck.calnotify.ui
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got to think deeply about this. One of the most important parts of the app need to make sure it does the right things

@@ -20,7 +20,11 @@

package com.github.quarck.calnotify.ui
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need a summary of the changes here. What are they? Why are we making them?


import android.annotation.SuppressLint
import android.app.AlertDialog
import com.google.android.material.dialog.MaterialAlertDialogBuilder
Copy link
Owner Author

@williscool williscool Jan 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need a summary of the changes here and why we are been making them. Also, it seems like there's a whole lot of overlap with what we are doing in the view event activity. Also, I wonder if we could refactor that to be shared somehow?

@github-actions
Copy link

Build artifacts for PR #237 (commit 4b80163) are available:

You can download these artifacts from the "Artifacts" section of the workflow run.

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.


private fun showToast(messageResId: Int) {
Toast.makeText(requireContext(), messageResId, Toast.LENGTH_LONG).show()
view?.let { Snackbar.make(it, messageResId, Snackbar.LENGTH_LONG).show() }
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Snackbar silently fails when fragment view unavailable

Low Severity

The showToast function was changed from using Toast.makeText(requireContext(), ...) to view?.let { Snackbar.make(it, ...) }. If view is null (e.g., fragment view destroyed during activity recreation while file picker is open), the Snackbar silently fails to show and users receive no feedback about export/import success or failure. The original Toast implementation would show messages regardless of fragment view state.

Fix in Cursor Fix in Web

@github-actions
Copy link

📊 Code Coverage Summary

Coverage Type Coverage
Overall 27.26
Changed Files 36.26

View detailed coverage report

1 similar comment
@github-actions
Copy link

📊 Code Coverage Summary

Coverage Type Coverage
Overall 27.26
Changed Files 36.26

View detailed coverage report

@github-actions
Copy link

📊 Code Coverage Summary

Coverage Type Coverage
Overall 34.75
Changed Files 34.64

View detailed coverage report

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants