Everything works
This commit is contained in:
parent
9f6dd91088
commit
b8766fbcd4
6 changed files with 89 additions and 32 deletions
|
@ -9,7 +9,6 @@ import android.content.Intent.ACTION_VIEW
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.text.Html
|
import android.text.Html
|
||||||
import android.util.Base64
|
|
||||||
import android.view.ActionMode
|
import android.view.ActionMode
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
|
@ -33,7 +32,6 @@ import io.heckel.ntfy.db.Subscription
|
||||||
import io.heckel.ntfy.firebase.FirebaseMessenger
|
import io.heckel.ntfy.firebase.FirebaseMessenger
|
||||||
import io.heckel.ntfy.util.Log
|
import io.heckel.ntfy.util.Log
|
||||||
import io.heckel.ntfy.msg.ApiService
|
import io.heckel.ntfy.msg.ApiService
|
||||||
import io.heckel.ntfy.msg.MESSAGE_ENCODING_BASE64
|
|
||||||
import io.heckel.ntfy.msg.NotificationService
|
import io.heckel.ntfy.msg.NotificationService
|
||||||
import io.heckel.ntfy.service.SubscriberServiceManager
|
import io.heckel.ntfy.service.SubscriberServiceManager
|
||||||
import io.heckel.ntfy.util.*
|
import io.heckel.ntfy.util.*
|
||||||
|
@ -249,15 +247,24 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mark this subscription as "open" so we don't receive notifications for it
|
// Mark this subscription as "open" so we don't receive notifications for it
|
||||||
Log.d(TAG, "onCreate hook: Marking subscription $subscriptionId as 'open'")
|
|
||||||
repository.detailViewSubscriptionId.set(subscriptionId)
|
repository.detailViewSubscriptionId.set(subscriptionId)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
|
|
||||||
Log.d(TAG, "onResume hook: Marking subscription $subscriptionId as 'open'")
|
// Mark as "open" so we don't send notifications while this is open
|
||||||
repository.detailViewSubscriptionId.set(subscriptionId) // Mark as "open" so we don't send notifications while this is open
|
repository.detailViewSubscriptionId.set(subscriptionId)
|
||||||
|
|
||||||
|
// Update buttons (this is for when we return from the preferences screen)
|
||||||
|
lifecycleScope.launch(Dispatchers.IO) {
|
||||||
|
val subscription = repository.getSubscription(subscriptionId) ?: return@launch
|
||||||
|
subscriptionInstant = subscription.instant
|
||||||
|
subscriptionMutedUntil = subscription.mutedUntil
|
||||||
|
|
||||||
|
showHideInstantMenuItems(subscriptionInstant)
|
||||||
|
showHideMutedUntilMenuItems(subscriptionMutedUntil)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
|
@ -290,7 +297,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
||||||
|
|
||||||
// Show and hide buttons
|
// Show and hide buttons
|
||||||
showHideInstantMenuItems(subscriptionInstant)
|
showHideInstantMenuItems(subscriptionInstant)
|
||||||
showHideNotificationMenuItems(subscriptionMutedUntil)
|
showHideMutedUntilMenuItems(subscriptionMutedUntil)
|
||||||
|
|
||||||
// Regularly check if "notification muted" time has passed
|
// Regularly check if "notification muted" time has passed
|
||||||
// NOTE: This is done here, because then we know that we've initialized the menu items.
|
// NOTE: This is done here, because then we know that we've initialized the menu items.
|
||||||
|
@ -300,6 +307,8 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun startNotificationMutedChecker() {
|
private fun startNotificationMutedChecker() {
|
||||||
|
// FIXME This is awful and has to go.
|
||||||
|
|
||||||
lifecycleScope.launch(Dispatchers.IO) {
|
lifecycleScope.launch(Dispatchers.IO) {
|
||||||
delay(1000) // Just to be sure we've initialized all the things, we wait a bit ...
|
delay(1000) // Just to be sure we've initialized all the things, we wait a bit ...
|
||||||
while (isActive) {
|
while (isActive) {
|
||||||
|
@ -309,7 +318,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
||||||
if (mutedUntilExpired) {
|
if (mutedUntilExpired) {
|
||||||
val newSubscription = subscription.copy(mutedUntil = 0L)
|
val newSubscription = subscription.copy(mutedUntil = 0L)
|
||||||
repository.updateSubscription(newSubscription)
|
repository.updateSubscription(newSubscription)
|
||||||
showHideNotificationMenuItems(0L)
|
showHideMutedUntilMenuItems(0L)
|
||||||
}
|
}
|
||||||
delay(60_000)
|
delay(60_000)
|
||||||
}
|
}
|
||||||
|
@ -414,7 +423,7 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
||||||
val newSubscription = subscription?.copy(mutedUntil = mutedUntilTimestamp)
|
val newSubscription = subscription?.copy(mutedUntil = mutedUntilTimestamp)
|
||||||
newSubscription?.let { repository.updateSubscription(newSubscription) }
|
newSubscription?.let { repository.updateSubscription(newSubscription) }
|
||||||
subscriptionMutedUntil = mutedUntilTimestamp
|
subscriptionMutedUntil = mutedUntilTimestamp
|
||||||
showHideNotificationMenuItems(mutedUntilTimestamp)
|
showHideMutedUntilMenuItems(mutedUntilTimestamp)
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
when (mutedUntilTimestamp) {
|
when (mutedUntilTimestamp) {
|
||||||
0L -> Toast.makeText(this@DetailActivity, getString(R.string.notification_dialog_enabled_toast_message), Toast.LENGTH_LONG).show()
|
0L -> Toast.makeText(this@DetailActivity, getString(R.string.notification_dialog_enabled_toast_message), Toast.LENGTH_LONG).show()
|
||||||
|
@ -493,6 +502,9 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showHideInstantMenuItems(enable: Boolean) {
|
private fun showHideInstantMenuItems(enable: Boolean) {
|
||||||
|
if (!this::menu.isInitialized) {
|
||||||
|
return
|
||||||
|
}
|
||||||
subscriptionInstant = enable
|
subscriptionInstant = enable
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
val appBaseUrl = getString(R.string.app_base_url)
|
val appBaseUrl = getString(R.string.app_base_url)
|
||||||
|
@ -509,7 +521,10 @@ class DetailActivity : AppCompatActivity(), ActionMode.Callback, NotificationFra
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showHideNotificationMenuItems(mutedUntilTimestamp: Long) {
|
private fun showHideMutedUntilMenuItems(mutedUntilTimestamp: Long) {
|
||||||
|
if (!this::menu.isInitialized) {
|
||||||
|
return
|
||||||
|
}
|
||||||
subscriptionMutedUntil = mutedUntilTimestamp
|
subscriptionMutedUntil = mutedUntilTimestamp
|
||||||
runOnUiThread {
|
runOnUiThread {
|
||||||
val notificationsEnabledItem = menu.findItem(R.id.detail_menu_notifications_enabled)
|
val notificationsEnabledItem = menu.findItem(R.id.detail_menu_notifications_enabled)
|
||||||
|
|
|
@ -3,20 +3,14 @@ package io.heckel.ntfy.ui
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.*
|
||||||
import androidx.preference.Preference
|
import io.heckel.ntfy.BuildConfig
|
||||||
import androidx.preference.PreferenceDataStore
|
|
||||||
import androidx.preference.PreferenceFragmentCompat
|
|
||||||
import io.heckel.ntfy.R
|
import io.heckel.ntfy.R
|
||||||
import io.heckel.ntfy.db.Repository
|
import io.heckel.ntfy.db.Repository
|
||||||
import io.heckel.ntfy.db.Subscription
|
import io.heckel.ntfy.db.Subscription
|
||||||
import io.heckel.ntfy.util.Log
|
|
||||||
import io.heckel.ntfy.service.SubscriberServiceManager
|
import io.heckel.ntfy.service.SubscriberServiceManager
|
||||||
import io.heckel.ntfy.util.formatDateShort
|
import io.heckel.ntfy.util.*
|
||||||
import io.heckel.ntfy.util.toPriorityString
|
import kotlinx.coroutines.*
|
||||||
import io.heckel.ntfy.util.topicShortUrl
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -77,18 +71,43 @@ class DetailSettingsActivity : AppCompatActivity() {
|
||||||
|
|
||||||
// Load subscription and users
|
// Load subscription and users
|
||||||
val subscriptionId = arguments?.getLong(DetailActivity.EXTRA_SUBSCRIPTION_ID) ?: return
|
val subscriptionId = arguments?.getLong(DetailActivity.EXTRA_SUBSCRIPTION_ID) ?: return
|
||||||
lifecycleScope.launch(Dispatchers.IO) {
|
runBlocking {
|
||||||
subscription = repository.getSubscription(subscriptionId) ?: return@launch
|
withContext(Dispatchers.IO) {
|
||||||
activity?.runOnUiThread {
|
subscription = repository.getSubscription(subscriptionId) ?: return@withContext
|
||||||
loadView()
|
activity?.runOnUiThread {
|
||||||
|
loadView()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadView() {
|
private fun loadView() {
|
||||||
|
// Instant delivery
|
||||||
|
val appBaseUrl = getString(R.string.app_base_url)
|
||||||
|
val instantEnabledPrefId = context?.getString(R.string.detail_settings_notifications_instant_key) ?: return
|
||||||
|
val instantEnabled: SwitchPreference? = findPreference(instantEnabledPrefId)
|
||||||
|
instantEnabled?.isVisible = BuildConfig.FIREBASE_AVAILABLE && subscription.baseUrl == appBaseUrl
|
||||||
|
instantEnabled?.isChecked = subscription.instant
|
||||||
|
instantEnabled?.preferenceDataStore = object : PreferenceDataStore() {
|
||||||
|
override fun putBoolean(key: String?, value: Boolean) {
|
||||||
|
save(subscription.copy(instant = value), refresh = true)
|
||||||
|
}
|
||||||
|
override fun getBoolean(key: String?, defValue: Boolean): Boolean {
|
||||||
|
return subscription.instant
|
||||||
|
}
|
||||||
|
}
|
||||||
|
instantEnabled?.summaryProvider = Preference.SummaryProvider<SwitchPreference> { pref ->
|
||||||
|
if (pref.isChecked) {
|
||||||
|
getString(R.string.detail_settings_notifications_instant_summary_on)
|
||||||
|
} else {
|
||||||
|
getString(R.string.detail_settings_notifications_instant_summary_off)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Notifications muted until
|
// Notifications muted until
|
||||||
val mutedUntilPrefId = context?.getString(R.string.detail_settings_notifications_muted_until_key) ?: return
|
val mutedUntilPrefId = context?.getString(R.string.detail_settings_notifications_muted_until_key) ?: return
|
||||||
val mutedUntil: ListPreference? = findPreference(mutedUntilPrefId)
|
val mutedUntil: ListPreference? = findPreference(mutedUntilPrefId)
|
||||||
|
mutedUntil?.isVisible = true // Hack: Show all settings at once, because subscription is loaded asynchronously
|
||||||
mutedUntil?.value = subscription.mutedUntil.toString()
|
mutedUntil?.value = subscription.mutedUntil.toString()
|
||||||
mutedUntil?.preferenceDataStore = object : PreferenceDataStore() {
|
mutedUntil?.preferenceDataStore = object : PreferenceDataStore() {
|
||||||
override fun putString(key: String?, value: String?) {
|
override fun putString(key: String?, value: String?) {
|
||||||
|
@ -130,6 +149,7 @@ class DetailSettingsActivity : AppCompatActivity() {
|
||||||
// Minimum priority
|
// Minimum priority
|
||||||
val minPriorityPrefId = context?.getString(R.string.detail_settings_notifications_min_priority_key) ?: return
|
val minPriorityPrefId = context?.getString(R.string.detail_settings_notifications_min_priority_key) ?: return
|
||||||
val minPriority: ListPreference? = findPreference(minPriorityPrefId)
|
val minPriority: ListPreference? = findPreference(minPriorityPrefId)
|
||||||
|
minPriority?.isVisible = true // Hack: Show all settings at once, because subscription is loaded asynchronously
|
||||||
minPriority?.value = subscription.minPriority.toString()
|
minPriority?.value = subscription.minPriority.toString()
|
||||||
minPriority?.preferenceDataStore = object : PreferenceDataStore() {
|
minPriority?.preferenceDataStore = object : PreferenceDataStore() {
|
||||||
override fun putString(key: String?, value: String?) {
|
override fun putString(key: String?, value: String?) {
|
||||||
|
@ -160,6 +180,7 @@ class DetailSettingsActivity : AppCompatActivity() {
|
||||||
// Auto delete
|
// Auto delete
|
||||||
val autoDeletePrefId = context?.getString(R.string.detail_settings_notifications_auto_delete_key) ?: return
|
val autoDeletePrefId = context?.getString(R.string.detail_settings_notifications_auto_delete_key) ?: return
|
||||||
val autoDelete: ListPreference? = findPreference(autoDeletePrefId)
|
val autoDelete: ListPreference? = findPreference(autoDeletePrefId)
|
||||||
|
autoDelete?.isVisible = true // Hack: Show all settings at once, because subscription is loaded asynchronously
|
||||||
autoDelete?.value = subscription.autoDelete.toString()
|
autoDelete?.value = subscription.autoDelete.toString()
|
||||||
autoDelete?.preferenceDataStore = object : PreferenceDataStore() {
|
autoDelete?.preferenceDataStore = object : PreferenceDataStore() {
|
||||||
override fun putString(key: String?, value: String?) {
|
override fun putString(key: String?, value: String?) {
|
||||||
|
@ -189,16 +210,19 @@ class DetailSettingsActivity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun save(newSubscription: Subscription) {
|
private fun save(newSubscription: Subscription, refresh: Boolean = false) {
|
||||||
subscription = newSubscription
|
subscription = newSubscription
|
||||||
lifecycleScope.launch(Dispatchers.IO) {
|
lifecycleScope.launch(Dispatchers.IO) {
|
||||||
repository.updateSubscription(newSubscription)
|
repository.updateSubscription(newSubscription)
|
||||||
|
if (refresh) {
|
||||||
|
SubscriberServiceManager.refresh(requireContext())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun maybeAppendGlobal(summary: String, global: Boolean): String {
|
private fun maybeAppendGlobal(summary: String, global: Boolean): String {
|
||||||
return if (global) {
|
return if (global) {
|
||||||
summary + " (" + getString(R.string.settings_global_setting_suffix) + ")"
|
summary + " (" + getString(R.string.detail_settings_global_setting_suffix) + ")"
|
||||||
} else {
|
} else {
|
||||||
summary
|
summary
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import io.heckel.ntfy.db.Subscription
|
||||||
import io.heckel.ntfy.service.SubscriberServiceManager
|
import io.heckel.ntfy.service.SubscriberServiceManager
|
||||||
import io.heckel.ntfy.util.Log
|
import io.heckel.ntfy.util.Log
|
||||||
import io.heckel.ntfy.util.randomString
|
import io.heckel.ntfy.util.randomString
|
||||||
|
import io.heckel.ntfy.util.shortUrl
|
||||||
import io.heckel.ntfy.util.topicUrlUp
|
import io.heckel.ntfy.util.topicUrlUp
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.GlobalScope
|
import kotlinx.coroutines.GlobalScope
|
||||||
|
@ -95,6 +96,10 @@ class BroadcastReceiver : android.content.BroadcastReceiver() {
|
||||||
Log.w(TAG, "Failed to add subscription", e)
|
Log.w(TAG, "Failed to add subscription", e)
|
||||||
distributor.sendRegistrationFailed(appId, connectorToken, e.message)
|
distributor.sendRegistrationFailed(appId, connectorToken, e.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add to log scrubber
|
||||||
|
Log.addScrubTerm(shortUrl(baseUrl), Log.TermType.Domain)
|
||||||
|
Log.addScrubTerm(topic)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -334,8 +334,13 @@
|
||||||
<string name="settings_about_version_title">Version</string>
|
<string name="settings_about_version_title">Version</string>
|
||||||
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
<string name="settings_about_version_format">ntfy %1$s (%2$s)</string>
|
||||||
<string name="settings_about_version_copied_to_clipboard_message">Copied to clipboard</string>
|
<string name="settings_about_version_copied_to_clipboard_message">Copied to clipboard</string>
|
||||||
<string name="settings_global_setting_title">Use global setting</string>
|
|
||||||
<string name="settings_global_setting_suffix">global</string>
|
<!-- Subscription settings (most strings are re-used from above) -->
|
||||||
|
<string name="detail_settings_notifications_instant_title">Instant delivery</string>
|
||||||
|
<string name="detail_settings_notifications_instant_summary_on">Notifications are delivered instantly. Requires a foreground service and consumes more battery.</string>
|
||||||
|
<string name="detail_settings_notifications_instant_summary_off">Notifications are delivered using Firebase. Delivery may be delayed, but consumes less battery.</string>
|
||||||
|
<string name="detail_settings_global_setting_title">Use global setting</string>
|
||||||
|
<string name="detail_settings_global_setting_suffix">global</string>
|
||||||
|
|
||||||
<!-- User add/edit dialog -->
|
<!-- User add/edit dialog -->
|
||||||
<string name="user_dialog_title_add">Add user</string>
|
<string name="user_dialog_title_add">Add user</string>
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
<string name="settings_about_version_key" translatable="false">Version</string>
|
<string name="settings_about_version_key" translatable="false">Version</string>
|
||||||
|
|
||||||
<!-- Detail settings constants -->
|
<!-- Detail settings constants -->
|
||||||
|
<string name="detail_settings_notifications_instant_key" translatable="false">SubscriptionInstant</string>
|
||||||
<string name="detail_settings_notifications_muted_until_key" translatable="false">SubscriptionMutedUntil</string>
|
<string name="detail_settings_notifications_muted_until_key" translatable="false">SubscriptionMutedUntil</string>
|
||||||
<string name="detail_settings_notifications_min_priority_key" translatable="false">SubscriptionMinPriority</string>
|
<string name="detail_settings_notifications_min_priority_key" translatable="false">SubscriptionMinPriority</string>
|
||||||
<string name="detail_settings_notifications_auto_delete_key" translatable="false">SubscriptionAutoDelete</string>
|
<string name="detail_settings_notifications_auto_delete_key" translatable="false">SubscriptionAutoDelete</string>
|
||||||
|
@ -69,7 +70,7 @@
|
||||||
<item>5</item>
|
<item>5</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="detail_settings_notifications_min_priority_entries">
|
<string-array name="detail_settings_notifications_min_priority_entries">
|
||||||
<item>@string/settings_global_setting_title</item>
|
<item>@string/detail_settings_global_setting_title</item>
|
||||||
<item>@string/settings_notifications_min_priority_min</item>
|
<item>@string/settings_notifications_min_priority_min</item>
|
||||||
<item>@string/settings_notifications_min_priority_low</item>
|
<item>@string/settings_notifications_min_priority_low</item>
|
||||||
<item>@string/settings_notifications_min_priority_default</item>
|
<item>@string/settings_notifications_min_priority_default</item>
|
||||||
|
@ -121,7 +122,7 @@
|
||||||
<item>7776000</item>
|
<item>7776000</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string-array name="detail_settings_notifications_auto_delete_entries">
|
<string-array name="detail_settings_notifications_auto_delete_entries">
|
||||||
<item>@string/settings_global_setting_title</item>
|
<item>@string/detail_settings_global_setting_title</item>
|
||||||
<item>@string/settings_notifications_auto_delete_never</item>
|
<item>@string/settings_notifications_auto_delete_never</item>
|
||||||
<item>@string/settings_notifications_auto_delete_one_day</item>
|
<item>@string/settings_notifications_auto_delete_one_day</item>
|
||||||
<item>@string/settings_notifications_auto_delete_three_days</item>
|
<item>@string/settings_notifications_auto_delete_three_days</item>
|
||||||
|
|
|
@ -1,23 +1,30 @@
|
||||||
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
|
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
app:title="@string/detail_settings_title">
|
app:title="@string/detail_settings_title">
|
||||||
<PreferenceCategory app:title="@string/settings_notifications_header">
|
<PreferenceCategory app:title="@string/settings_notifications_header">
|
||||||
|
<SwitchPreference
|
||||||
|
app:key="@string/detail_settings_notifications_instant_key"
|
||||||
|
app:title="@string/detail_settings_notifications_instant_title"
|
||||||
|
app:isPreferenceVisible="false"/>
|
||||||
<ListPreference
|
<ListPreference
|
||||||
app:key="@string/detail_settings_notifications_muted_until_key"
|
app:key="@string/detail_settings_notifications_muted_until_key"
|
||||||
app:title="@string/settings_notifications_muted_until_title"
|
app:title="@string/settings_notifications_muted_until_title"
|
||||||
app:entries="@array/settings_notifications_muted_until_entries"
|
app:entries="@array/settings_notifications_muted_until_entries"
|
||||||
app:entryValues="@array/settings_notifications_muted_until_values"
|
app:entryValues="@array/settings_notifications_muted_until_values"
|
||||||
app:defaultValue="0"/>
|
app:defaultValue="0"
|
||||||
|
app:isPreferenceVisible="false"/>
|
||||||
<ListPreference
|
<ListPreference
|
||||||
app:key="@string/detail_settings_notifications_min_priority_key"
|
app:key="@string/detail_settings_notifications_min_priority_key"
|
||||||
app:title="@string/settings_notifications_min_priority_title"
|
app:title="@string/settings_notifications_min_priority_title"
|
||||||
app:entries="@array/detail_settings_notifications_min_priority_entries"
|
app:entries="@array/detail_settings_notifications_min_priority_entries"
|
||||||
app:entryValues="@array/detail_settings_notifications_min_priority_values"
|
app:entryValues="@array/detail_settings_notifications_min_priority_values"
|
||||||
app:defaultValue="0"/> <!-- Same as Repository.MIN_PRIORITY_USE_GLOBAL -->
|
app:defaultValue="0"
|
||||||
|
app:isPreferenceVisible="false"/> <!-- Same as Repository.MIN_PRIORITY_USE_GLOBAL -->
|
||||||
<ListPreference
|
<ListPreference
|
||||||
app:key="@string/detail_settings_notifications_auto_delete_key"
|
app:key="@string/detail_settings_notifications_auto_delete_key"
|
||||||
app:title="@string/settings_notifications_auto_delete_title"
|
app:title="@string/settings_notifications_auto_delete_title"
|
||||||
app:entries="@array/detail_settings_notifications_auto_delete_entries"
|
app:entries="@array/detail_settings_notifications_auto_delete_entries"
|
||||||
app:entryValues="@array/detail_settings_notifications_auto_delete_values"
|
app:entryValues="@array/detail_settings_notifications_auto_delete_values"
|
||||||
app:defaultValue="-1"/> <!-- Same as Repository.AUTO_DELETE_USE_GLOBAL -->
|
app:defaultValue="-1"
|
||||||
|
app:isPreferenceVisible="false"/> <!-- Same as Repository.AUTO_DELETE_USE_GLOBAL -->
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
Loading…
Reference in a new issue