diff --git a/android/app/src/main/java/com/github/quarck/calnotify/prefs/CalendarsActivity.kt b/android/app/src/main/java/com/github/quarck/calnotify/prefs/CalendarsActivity.kt index cfc0a95fc..bfcd42d9a 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/prefs/CalendarsActivity.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/prefs/CalendarsActivity.kt @@ -35,7 +35,7 @@ import android.view.ViewGroup import android.widget.CheckBox import android.widget.LinearLayout import android.widget.TextView -import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar import androidx.recyclerview.widget.RecyclerView @@ -244,7 +244,7 @@ class CalendarsActivity : AppCompatActivity() { } private fun showCalendarSyncHelp() { - AlertDialog.Builder(this) + MaterialAlertDialogBuilder(this) .setTitle(R.string.calendar_sync_help_title) .setMessage(R.string.calendar_sync_help_message) .setPositiveButton(android.R.string.ok, null) diff --git a/android/app/src/main/java/com/github/quarck/calnotify/prefs/ListPreference.kt b/android/app/src/main/java/com/github/quarck/calnotify/prefs/ListPreference.kt index 37e062126..af0bc9490 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/prefs/ListPreference.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/prefs/ListPreference.kt @@ -19,7 +19,7 @@ package com.github.quarck.calnotify.prefs -import android.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import android.content.Context import android.widget.ArrayAdapter import com.github.quarck.calnotify.R @@ -35,7 +35,7 @@ class ListPreference( fun create() { - val builder = AlertDialog.Builder(context) + val builder = MaterialAlertDialogBuilder(context) builder.setIcon(R.drawable.ic_launcher) builder.setTitle(context.resources.getString(titleId)) diff --git a/android/app/src/main/java/com/github/quarck/calnotify/prefs/MiscSettingsFragmentX.kt b/android/app/src/main/java/com/github/quarck/calnotify/prefs/MiscSettingsFragmentX.kt index 751c460ae..86ecdbb50 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/prefs/MiscSettingsFragmentX.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/prefs/MiscSettingsFragmentX.kt @@ -22,9 +22,9 @@ package com.github.quarck.calnotify.prefs import android.app.Activity import android.content.Intent import android.os.Bundle -import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts -import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.android.material.snackbar.Snackbar import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import com.github.quarck.calnotify.R @@ -123,7 +123,7 @@ class MiscSettingsFragmentX : PreferenceFragmentCompat() { } private fun showImportConfirmation(uri: android.net.Uri) { - AlertDialog.Builder(requireContext()) + MaterialAlertDialogBuilder(requireContext()) .setTitle(R.string.import_confirm_title) .setMessage(R.string.import_confirm_message) .setPositiveButton(android.R.string.ok) { _, _ -> @@ -191,7 +191,7 @@ class MiscSettingsFragmentX : PreferenceFragmentCompat() { append(getString(R.string.import_summary_restart_note)) } - AlertDialog.Builder(requireContext()) + MaterialAlertDialogBuilder(requireContext()) .setTitle(R.string.import_summary_title) .setMessage(message) .setPositiveButton(android.R.string.ok, null) @@ -199,6 +199,6 @@ class MiscSettingsFragmentX : PreferenceFragmentCompat() { } private fun showToast(messageResId: Int) { - Toast.makeText(requireContext(), messageResId, Toast.LENGTH_LONG).show() + view?.let { Snackbar.make(it, messageResId, Snackbar.LENGTH_LONG).show() } } } diff --git a/android/app/src/main/java/com/github/quarck/calnotify/prefs/NavigationSettingsFragmentX.kt b/android/app/src/main/java/com/github/quarck/calnotify/prefs/NavigationSettingsFragmentX.kt index a99eb96a6..24679edf2 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/prefs/NavigationSettingsFragmentX.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/prefs/NavigationSettingsFragmentX.kt @@ -24,7 +24,7 @@ import android.os.Bundle import android.os.Handler import android.os.Looper import android.widget.Toast -import androidx.appcompat.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import com.github.quarck.calnotify.R @@ -61,7 +61,7 @@ class NavigationSettingsFragmentX : PreferenceFragmentCompat() { private fun showSwitchToClassicViewDialog() { val ctx = context ?: return - AlertDialog.Builder(ctx) + MaterialAlertDialogBuilder(ctx) .setMessage(R.string.switch_to_classic_view_confirm) .setPositiveButton(android.R.string.ok) { _, _ -> switchToClassicView() @@ -72,7 +72,7 @@ class NavigationSettingsFragmentX : PreferenceFragmentCompat() { private fun showSwitchToNewViewDialog() { val ctx = context ?: return - AlertDialog.Builder(ctx) + MaterialAlertDialogBuilder(ctx) .setMessage(R.string.switch_to_new_view_confirm) .setPositiveButton(android.R.string.ok) { _, _ -> switchToNewView() diff --git a/android/app/src/main/java/com/github/quarck/calnotify/prefs/ReminderPatternPreferenceX.kt b/android/app/src/main/java/com/github/quarck/calnotify/prefs/ReminderPatternPreferenceX.kt index 1c0190a92..9826a3971 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/prefs/ReminderPatternPreferenceX.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/prefs/ReminderPatternPreferenceX.kt @@ -23,9 +23,15 @@ import android.content.Context import android.os.Bundle import android.util.AttributeSet import android.view.View -import android.widget.* +import android.widget.ArrayAdapter +import android.widget.AutoCompleteTextView +import android.widget.CheckBox +import android.widget.EditText +import android.widget.LinearLayout +import android.widget.NumberPicker import androidx.preference.DialogPreference import androidx.preference.PreferenceDialogFragmentCompat +import com.google.android.material.snackbar.Snackbar import com.github.quarck.calnotify.Consts import com.github.quarck.calnotify.R import com.github.quarck.calnotify.utils.findOrThrow @@ -60,7 +66,7 @@ class ReminderPatternPreferenceX @JvmOverloads constructor( return a.getString(index) ?: "10m" } - class Dialog : PreferenceDialogFragmentCompat(), AdapterView.OnItemSelectedListener { + class Dialog : PreferenceDialogFragmentCompat() { private val SecondsIndex = 0 private val MinutesIndex = 1 private val HoursIndex = 2 @@ -68,9 +74,11 @@ class ReminderPatternPreferenceX @JvmOverloads constructor( private var reminderPatternMillis = longArrayOf(0) private var simpleIntervalMode = true + private var selectedPosition: Int = MinutesIndex private lateinit var numberPicker: NumberPicker - private lateinit var timeUnitsSpinners: Spinner + private lateinit var timeUnitsDropdown: AutoCompleteTextView + private lateinit var timeUnitsArray: Array private lateinit var checkboxCustomPattern: CheckBox private lateinit var editTextCustomPattern: EditText private lateinit var layoutSimpleInterval: LinearLayout @@ -80,20 +88,25 @@ class ReminderPatternPreferenceX @JvmOverloads constructor( super.onBindDialogView(view) numberPicker = view.findOrThrow(R.id.numberPickerTimeInterval) - timeUnitsSpinners = view.findOrThrow(R.id.spinnerTimeIntervalUnit) + timeUnitsDropdown = view.findOrThrow(R.id.spinnerTimeIntervalUnit) checkboxCustomPattern = view.findOrThrow(R.id.checkbox_custom_reminder_pattern) editTextCustomPattern = view.findOrThrow(R.id.edittext_custom_reminder_pattern) layoutSimpleInterval = view.findOrThrow(R.id.layout_reminder_interval_simple) layoutCustomPattern = view.findOrThrow(R.id.layout_reminder_interval_custom) - timeUnitsSpinners.adapter = ArrayAdapter( + timeUnitsArray = view.context.resources.getStringArray(R.array.time_units_plurals_with_seconds) + val adapter = ArrayAdapter( view.context, - android.R.layout.simple_list_item_1, - view.context.resources.getStringArray(R.array.time_units_plurals_with_seconds) + android.R.layout.simple_dropdown_item_1line, + timeUnitsArray ) + timeUnitsDropdown.setAdapter(adapter) - timeUnitsSpinners.onItemSelectedListener = this - timeUnitsSpinners.setSelection(MinutesIndex) + timeUnitsDropdown.setOnItemClickListener { _, _, position, _ -> + selectedPosition = position + onItemSelected(position) + } + setSelection(MinutesIndex) numberPicker.minValue = 1 numberPicker.maxValue = 100 @@ -113,6 +126,13 @@ class ReminderPatternPreferenceX @JvmOverloads constructor( updateLayout() } } + + private fun setSelection(position: Int) { + selectedPosition = position + if (position >= 0 && position < timeUnitsArray.size) { + timeUnitsDropdown.setText(timeUnitsArray[position], false) + } + } private fun updateLayout() { if (simpleIntervalMode) { @@ -128,7 +148,7 @@ class ReminderPatternPreferenceX @JvmOverloads constructor( private fun clearFocus() { numberPicker.clearFocus() - timeUnitsSpinners.clearFocus() + timeUnitsDropdown.clearFocus() } override fun onDialogClosed(positiveResult: Boolean) { @@ -142,7 +162,7 @@ class ReminderPatternPreferenceX @JvmOverloads constructor( var simpleIntervalMillis = simpleIntervalSeconds * 1000L if (simpleIntervalMillis == 0L) { simpleIntervalMillis = 60 * 1000L - Toast.makeText(context, R.string.invalid_reminder_interval, Toast.LENGTH_LONG).show() + view?.let { Snackbar.make(it, R.string.invalid_reminder_interval, Snackbar.LENGTH_LONG).show() } } reminderPatternMillis = longArrayOf(simpleIntervalMillis) newPattern = PreferenceUtils.formatPattern(reminderPatternMillis) @@ -156,7 +176,7 @@ class ReminderPatternPreferenceX @JvmOverloads constructor( }.toLongArray() newPattern = PreferenceUtils.formatPattern(reminderPatternMillis) } else { - Toast.makeText(context, R.string.error_cannot_parse_pattern, Toast.LENGTH_LONG).show() + view?.let { Snackbar.make(it, R.string.error_cannot_parse_pattern, Snackbar.LENGTH_LONG).show() } return } } @@ -167,7 +187,7 @@ class ReminderPatternPreferenceX @JvmOverloads constructor( } } - override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { + private fun onItemSelected(position: Int) { if (position == SecondsIndex) { numberPicker.minValue = Consts.MIN_REMINDER_INTERVAL_SECONDS numberPicker.maxValue = 60 @@ -177,13 +197,11 @@ class ReminderPatternPreferenceX @JvmOverloads constructor( } } - override fun onNothingSelected(parent: AdapterView<*>?) {} - private var simpleIntervalSeconds: Int get() { clearFocus() val number = numberPicker.value - val multiplier = when (timeUnitsSpinners.selectedItemPosition) { + val multiplier = when (selectedPosition) { SecondsIndex -> 1 MinutesIndex -> 60 HoursIndex -> 60 * 60 @@ -209,7 +227,7 @@ class ReminderPatternPreferenceX @JvmOverloads constructor( number /= 24 } - timeUnitsSpinners.setSelection(units) + setSelection(units) numberPicker.value = number } diff --git a/android/app/src/main/java/com/github/quarck/calnotify/prefs/SnoozePresetPreferenceX.kt b/android/app/src/main/java/com/github/quarck/calnotify/prefs/SnoozePresetPreferenceX.kt index ed2edcc8f..0369cc4ed 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/prefs/SnoozePresetPreferenceX.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/prefs/SnoozePresetPreferenceX.kt @@ -19,7 +19,7 @@ package com.github.quarck.calnotify.prefs -import android.app.AlertDialog +import com.google.android.material.dialog.MaterialAlertDialogBuilder import android.content.Context import android.os.Bundle import android.util.AttributeSet @@ -106,7 +106,7 @@ class SnoozePresetPreferenceX @JvmOverloads constructor( private fun showMessage(id: Int) { val context = requireContext() - AlertDialog.Builder(context) + MaterialAlertDialogBuilder(context) .setMessage(context.getString(id)) .setCancelable(false) .setPositiveButton(android.R.string.ok) { _, _ -> } diff --git a/android/app/src/main/java/com/github/quarck/calnotify/ui/ActiveEventsFragment.kt b/android/app/src/main/java/com/github/quarck/calnotify/ui/ActiveEventsFragment.kt index 669f84def..11dccc9ba 100644 --- a/android/app/src/main/java/com/github/quarck/calnotify/ui/ActiveEventsFragment.kt +++ b/android/app/src/main/java/com/github/quarck/calnotify/ui/ActiveEventsFragment.kt @@ -29,8 +29,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Button -import android.widget.ImageButton import android.widget.LinearLayout +import com.google.android.material.button.MaterialButton import android.widget.TextView import androidx.activity.OnBackPressedCallback import androidx.fragment.app.Fragment @@ -121,7 +121,7 @@ class ActiveEventsFragment : Fragment(), EventListCallback, SearchableFragment, private fun setupNewUIBanner(view: View) { newUIBanner = view.findViewById(R.id.new_ui_banner) val bannerText = view.findViewById(R.id.new_ui_banner_text) - val dismissButton = view.findViewById(R.id.new_ui_banner_dismiss) + val dismissButton = view.findViewById(R.id.new_ui_banner_dismiss) // Show banner if enabled in settings if (settings.showNewUIBanner) { @@ -146,7 +146,7 @@ class ActiveEventsFragment : Fragment(), EventListCallback, SearchableFragment, selectionCountText = view.findViewById(R.id.selection_count_text) // Close selection button - view.findViewById(R.id.btn_close_selection)?.setOnClickListener { + view.findViewById(R.id.btn_close_selection)?.setOnClickListener { adapter.exitSelectionMode() } @@ -156,7 +156,7 @@ class ActiveEventsFragment : Fragment(), EventListCallback, SearchableFragment, } // Snooze selected button - view.findViewById