diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b37bf24..bcc2c8c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -118,7 +118,7 @@ android:resource="@drawable/ic_notification"/> + Avoids "exposed beyond app through Intent.getData" exception, see see https://stackoverflow.com/a/57288352/1440785 --> - when (s) { - 0L -> getString(R.string.settings_notifications_muted_until_enabled) - 1L -> getString(R.string.settings_notifications_muted_until_disabled_forever) - else -> { - val formattedDate = formatDateShort(s) - getString(R.string.settings_notifications_muted_until_disabled_until, formattedDate) - } - } - } - val mutedUntil: Preference? = findPreference(mutedUntilPrefId) - mutedUntil?.preferenceDataStore = object : PreferenceDataStore() { } // Dummy store to protect from accidentally overwriting - mutedUntil?.summary = mutedUntilSummary(repository.getGlobalMutedUntil()) - mutedUntil?.onPreferenceClickListener = OnPreferenceClickListener { - if (repository.getGlobalMutedUntil() > 0) { - repository.setGlobalMutedUntil(0) - mutedUntil?.summary = mutedUntilSummary(0) - } else { - val notificationFragment = NotificationFragment() - notificationFragment.settingsListener = object : NotificationFragment.NotificationSettingsListener { - override fun onNotificationMutedUntilChanged(mutedUntilTimestamp: Long) { + val mutedUntil: ListPreference? = findPreference(mutedUntilPrefId) + mutedUntil?.value = repository.getGlobalMutedUntil().toString() + mutedUntil?.preferenceDataStore = object : PreferenceDataStore() { + override fun putString(key: String?, value: String?) { + val mutedUntilValue = value?.toLongOrNull() ?:return + when (mutedUntilValue) { + Repository.MUTED_UNTIL_SHOW_ALL -> repository.setGlobalMutedUntil(mutedUntilValue) + Repository.MUTED_UNTIL_FOREVER -> repository.setGlobalMutedUntil(mutedUntilValue) + Repository.MUTED_UNTIL_TOMORROW -> { + val date = Calendar.getInstance() + date.add(Calendar.DAY_OF_MONTH, 1) + date.set(Calendar.HOUR_OF_DAY, 8) + date.set(Calendar.MINUTE, 30) + date.set(Calendar.SECOND, 0) + date.set(Calendar.MILLISECOND, 0) + repository.setGlobalMutedUntil(date.timeInMillis/1000) + } + else -> { + val mutedUntilTimestamp = System.currentTimeMillis()/1000 + mutedUntilValue * 60 repository.setGlobalMutedUntil(mutedUntilTimestamp) - mutedUntil?.summary = mutedUntilSummary(mutedUntilTimestamp) } } - notificationFragment.show(supportFragmentManager, NotificationFragment.TAG) } - true + override fun getString(key: String?, defValue: String?): String { + return repository.getGlobalMutedUntil().toString() + } + } + mutedUntil?.summaryProvider = Preference.SummaryProvider { _ -> + val mutedUntilValue = repository.getGlobalMutedUntil() + when (mutedUntilValue) { + Repository.MUTED_UNTIL_SHOW_ALL -> getString(R.string.settings_notifications_muted_until_show_all) + Repository.MUTED_UNTIL_FOREVER -> getString(R.string.settings_notifications_muted_until_forever) + else -> { + val formattedDate = formatDateShort(mutedUntilValue) + getString(R.string.settings_notifications_muted_until_x, formattedDate) + } + } } // Minimum priority @@ -163,6 +173,30 @@ class SettingsActivity : AppCompatActivity() { } } + // Dark mode + val darkModePrefId = context?.getString(R.string.settings_appearance_dark_mode_key) ?: return + val darkMode: ListPreference? = findPreference(darkModePrefId) + darkMode?.value = repository.getDarkMode().toString() + darkMode?.preferenceDataStore = object : PreferenceDataStore() { + override fun putString(key: String?, value: String?) { + val darkModeValue = value?.toIntOrNull() ?: return + repository.setDarkMode(darkModeValue) + AppCompatDelegate.setDefaultNightMode(darkModeValue) + + } + override fun getString(key: String?, defValue: String?): String { + return repository.getDarkMode().toString() + } + } + darkMode?.summaryProvider = Preference.SummaryProvider { pref -> + val darkModeValue = pref.value.toIntOrNull() ?: repository.getDarkMode() + when (darkModeValue) { + AppCompatDelegate.MODE_NIGHT_NO -> getString(R.string.settings_appearance_dark_mode_summary_light) + AppCompatDelegate.MODE_NIGHT_YES -> getString(R.string.settings_appearance_dark_mode_summary_dark) + else -> getString(R.string.settings_appearance_dark_mode_summary_system) + } + } + // UnifiedPush enabled val upEnabledPrefId = context?.getString(R.string.settings_unified_push_enabled_key) ?: return val upEnabled: SwitchPreference? = findPreference(upEnabledPrefId) diff --git a/app/src/main/res/layout/fragment_detail_item.xml b/app/src/main/res/layout/fragment_detail_item.xml index 5206cd7..15b2d2b 100644 --- a/app/src/main/res/layout/fragment_detail_item.xml +++ b/app/src/main/res/layout/fragment_detail_item.xml @@ -42,7 +42,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/detail_item_message_text" - android:textColor="@color/primaryTextColor" + android:textColor="?android:attr/textColorPrimary" android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:autoLink="web" app:layout_constraintTop_toBottomOf="@id/detail_item_title_text" @@ -54,7 +54,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/detail_item_title_text" - android:textColor="@color/primaryTextColor" + android:textColor="?android:attr/textColorPrimary" android:textAppearance="@style/TextAppearance.AppCompat.Medium" android:autoLink="web" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="10dp" @@ -112,7 +112,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/detail_item_attachment_info" - android:textColor="@color/primaryTextColor" + android:textColor="?android:attr/textColorPrimary" android:textAppearance="@style/TextAppearance.AppCompat.Small" app:layout_constraintStart_toEndOf="@+id/detail_item_attachment_icon" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/fragment_main_item.xml b/app/src/main/res/layout/fragment_main_item.xml index 0e3914c..1190a19 100644 --- a/app/src/main/res/layout/fragment_main_item.xml +++ b/app/src/main/res/layout/fragment_main_item.xml @@ -1,7 +1,6 @@ + android:textColor="?android:attr/textColorPrimary"/> #338574 #338574 #2A6E60 - - #000000 #FFFFFF - #EEEEEE #C30000 - #C30000 #E10000 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7680393..00b01d1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -173,13 +173,14 @@ Save Notifications re-enabled Notifications are now paused - Notifications are now paused until %1$s + Notifications are paused until %1$s + Show all notifications 30 minutes 1 hour 2 hours 8 hours Until tomorrow - Forever + Until re-enabled Open @@ -196,9 +197,9 @@ Notifications MutedUntil Pause notifications - All notifications will be displayed - Notifications muted until re-enabled - Notifications muted until %1$s + All notifications will be displayed + Notifications muted until re-enabled + Notifications muted until %1$s MinPriority Minimum priority Notifications of all priorities are shown @@ -222,6 +223,15 @@ If smaller than 5 MB If smaller than 10 MB If smaller than 50 MB + Appearance + DarkMode + Dark mode + Use the system default + Light mode is enabled + Dark mode is enabled. Are you a vampire? + Use system default + Light mode + Dark mode UnifiedPush Allows other apps to use ntfy as a message distributor. Find out more at unifiedpush.org. UnifiedPushEnabled diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index cd451da..e2ed459 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,13 +1,19 @@ - - + + + +