diff --git a/app/src/main/kotlin/com/github/gotify/MarkwonFactory.kt b/app/src/main/kotlin/com/github/gotify/MarkwonFactory.kt index 566d3fef..6d700b85 100644 --- a/app/src/main/kotlin/com/github/gotify/MarkwonFactory.kt +++ b/app/src/main/kotlin/com/github/gotify/MarkwonFactory.kt @@ -40,11 +40,17 @@ import org.commonmark.parser.Parser import org.tinylog.kotlin.Logger internal object MarkwonFactory { - fun createForMessage(context: Context, imageLoader: ImageLoader): Markwon { - return Markwon.builder(context) + fun createForMessage( + context: Context, + imageLoader: ImageLoader, + lowDataMode: Boolean = false + ): Markwon { + val builder = Markwon.builder(context) .usePlugin(CorePlugin.create()) .usePlugin(MovementMethodPlugin.create(TableAwareMovementMethod.create())) - .usePlugin( + + if (!lowDataMode) { + builder.usePlugin( CoilImagesPlugin.create( object : CoilImagesPlugin.CoilStore { override fun load(drawable: AsyncDrawable): ImageRequest { @@ -68,6 +74,9 @@ internal object MarkwonFactory { imageLoader ) ) + } + + return builder .usePlugin(StrikethroughPlugin.create()) .usePlugin(TablePlugin.create(context)) .usePlugin(object : AbstractMarkwonPlugin() { diff --git a/app/src/main/kotlin/com/github/gotify/messages/ListMessageAdapter.kt b/app/src/main/kotlin/com/github/gotify/messages/ListMessageAdapter.kt index d87ef7a7..19a7a71f 100644 --- a/app/src/main/kotlin/com/github/gotify/messages/ListMessageAdapter.kt +++ b/app/src/main/kotlin/com/github/gotify/messages/ListMessageAdapter.kt @@ -40,7 +40,8 @@ internal class ListMessageAdapter( private val delete: Delete ) : ListAdapter(DiffCallback) { private val prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(context) - private val markwon: Markwon = MarkwonFactory.createForMessage(context, imageLoader) + private val lowDataMode = prefs.getBoolean(context.getString(R.string.setting_key_low_data_mode), false) + private val markwon: Markwon = MarkwonFactory.createForMessage(context, imageLoader, lowDataMode) private val timeFormatRelative = context.resources.getString(R.string.time_format_value_relative) @@ -81,11 +82,18 @@ internal class ListMessageAdapter( holder.message.text = message.message.message } holder.title.text = message.message.title - if (message.image != null) { - val url = Utils.resolveAbsoluteUrl("${settings.url}/", message.image) - holder.image.load(url, imageLoader) { - error(R.drawable.ic_alarm) - placeholder(R.drawable.ic_placeholder) + if (lowDataMode) { + holder.image.visibility = View.GONE + } else { + holder.image.visibility = View.VISIBLE + if (message.image != null) { + val url = Utils.resolveAbsoluteUrl("${settings.url}/", message.image) + holder.image.load(url, imageLoader) { + error(R.drawable.ic_alarm) + placeholder(R.drawable.ic_placeholder) + } + } else { + holder.image.setImageDrawable(null) } } diff --git a/app/src/main/kotlin/com/github/gotify/messages/MessagesActivity.kt b/app/src/main/kotlin/com/github/gotify/messages/MessagesActivity.kt index 145928de..ccd863c7 100644 --- a/app/src/main/kotlin/com/github/gotify/messages/MessagesActivity.kt +++ b/app/src/main/kotlin/com/github/gotify/messages/MessagesActivity.kt @@ -198,6 +198,10 @@ internal class MessagesActivity : val menu: Menu = binding.navView.menu menu.removeGroup(R.id.apps) viewModel.targetReferences.clear() + + val prefs = PreferenceManager.getDefaultSharedPreferences(this) + val lowDataMode = prefs.getBoolean(getString(R.string.setting_key_low_data_mode), false) + updateMessagesAndStopLoading(viewModel.messages[viewModel.appId]) var selectedItem = menu.findItem(R.id.nav_all_messages) applications.indices.forEach { index -> @@ -205,16 +209,20 @@ internal class MessagesActivity : val item = menu.add(R.id.apps, index, APPLICATION_ORDER, app.name) item.isCheckable = true if (app.id == viewModel.appId) selectedItem = item - val t = Utils.toDrawable { icon -> item.icon = icon } - viewModel.targetReferences.add(t) - val request = ImageRequest.Builder(this) - .data(Utils.resolveAbsoluteUrl(viewModel.settings.url + "/", app.image)) - .error(R.drawable.ic_alarm) - .placeholder(R.drawable.ic_placeholder) - .size(100, 100) - .target(t) - .build() - CoilInstance.get(this).enqueue(request) + if (lowDataMode) { + item.setIcon(R.drawable.ic_placeholder) + } else { + val t = Utils.toDrawable { icon -> item.icon = icon } + viewModel.targetReferences.add(t) + val request = ImageRequest.Builder(this) + .data(Utils.resolveAbsoluteUrl(viewModel.settings.url + "/", app.image)) + .error(R.drawable.ic_alarm) + .placeholder(R.drawable.ic_placeholder) + .size(100, 100) + .target(t) + .build() + CoilInstance.get(this).enqueue(request) + } } selectAppInMenu(selectedItem) } diff --git a/app/src/main/kotlin/com/github/gotify/settings/SettingsActivity.kt b/app/src/main/kotlin/com/github/gotify/settings/SettingsActivity.kt index f341270b..104a1a45 100644 --- a/app/src/main/kotlin/com/github/gotify/settings/SettingsActivity.kt +++ b/app/src/main/kotlin/com/github/gotify/settings/SettingsActivity.kt @@ -78,6 +78,13 @@ internal class SettingsActivity : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + findPreference( + getString(R.string.setting_key_low_data_mode) + )?.onPreferenceChangeListener = + Preference.OnPreferenceChangeListener { _, _ -> + showRestartDialog() + true + } findPreference( getString(R.string.setting_key_message_layout) )?.onPreferenceChangeListener = diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d96bb587..47343de9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -99,6 +99,12 @@ Confirm onReceive intents prompt_onreceive_intent If enabled, a dialog is shown before onReceive.intentUrl is executed. + + General + Low data mode + Disable loading images from the server + low_data_mode + Push message App: Priority: diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 89cac847..00e444c7 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -2,6 +2,14 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> + + + +