Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions app/src/main/kotlin/com/github/gotify/MarkwonFactory.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -68,6 +74,9 @@ internal object MarkwonFactory {
imageLoader
)
)
}

return builder
.usePlugin(StrikethroughPlugin.create())
.usePlugin(TablePlugin.create(context))
.usePlugin(object : AbstractMarkwonPlugin() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ internal class ListMessageAdapter(
private val delete: Delete
) : ListAdapter<MessageWithImage, ListMessageAdapter.ViewHolder>(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)
Expand Down Expand Up @@ -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)
}
}

Expand Down
28 changes: 18 additions & 10 deletions app/src/main/kotlin/com/github/gotify/messages/MessagesActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -198,23 +198,31 @@ 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 ->
val app = applications[index]
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)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,13 @@ internal class SettingsActivity :

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
findPreference<SwitchPreferenceCompat>(
getString(R.string.setting_key_low_data_mode)
)?.onPreferenceChangeListener =
Preference.OnPreferenceChangeListener { _, _ ->
showRestartDialog()
true
}
findPreference<ListPreference>(
getString(R.string.setting_key_message_layout)
)?.onPreferenceChangeListener =
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,12 @@
<string name="setting_prompt_onreceive_intent">Confirm onReceive intents</string>
<string name="setting_key_prompt_onreceive_intent">prompt_onreceive_intent</string>
<string name="setting_summary_prompt_onreceive_intent">If enabled, a dialog is shown before onReceive.intentUrl is executed.</string>

<string name="setting_general">General</string>
<string name="setting_low_data_mode">Low data mode</string>
<string name="setting_low_data_mode_summary">Disable loading images from the server</string>
<string name="setting_key_low_data_mode">low_data_mode</string>

<string name="push_message">Push message</string>
<string name="appListDescription">App:</string>
<string name="priorityDescription">Priority:</string>
Expand Down
8 changes: 8 additions & 0 deletions app/src/main/res/xml/root_preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">

<PreferenceCategory app:title="@string/setting_general">
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="@string/setting_key_low_data_mode"
android:title="@string/setting_low_data_mode"
android:summary="@string/setting_low_data_mode_summary" />
</PreferenceCategory>

<PreferenceCategory app:title="@string/settings_appearance" >
<ListPreference
android:defaultValue="@string/theme_default"
Expand Down