Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fc8048c3 authored by cketti's avatar cketti
Browse files

Move code dealing with persistence to UnreadWidgetRepository

parent de77a55f
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ package com.fsck.k9

import android.app.Application
import com.fsck.k9.ui.settings.settingsUiModule
import com.fsck.k9.widget.unread.unreadWidgetModule
import org.koin.Koin
import org.koin.KoinContext
import org.koin.android.ext.koin.with
@@ -18,7 +19,8 @@ object DI {

    val appModules = listOf(
        mainModule,
        settingsUiModule
        settingsUiModule,
        unreadWidgetModule
    )

    @JvmStatic fun start(application: Application) {
+4 −35
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@ package com.fsck.k9.activity

import android.app.Activity
import android.appwidget.AppWidgetManager
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.preference.CheckBoxPreference
@@ -16,6 +15,8 @@ import com.fsck.k9.R
import com.fsck.k9.helper.UnreadWidgetProperties
import com.fsck.k9.provider.UnreadWidgetProvider
import com.fsck.k9.search.SearchAccount
import com.fsck.k9.widget.unread.UnreadWidgetRepository
import org.koin.android.ext.android.inject

import timber.log.Timber

@@ -24,6 +25,7 @@ import timber.log.Timber
 * Activity to select an account for the unread widget.
 */
class UnreadWidgetConfiguration : K9PreferenceActivity() {
    private val repository: UnreadWidgetRepository by inject()

    /**
     * The ID of the widget we are configuring.
@@ -167,7 +169,7 @@ class UnreadWidgetConfiguration : K9PreferenceActivity() {

    private fun updateWidgetAndExit() {
        val properties = UnreadWidgetProperties(appWidgetId, selectedAccountUuid!!, selectedFolder)
        saveWidgetProperties(this, properties)
        repository.saveWidgetProperties(properties)

        // Update widget
        val context = applicationContext
@@ -182,44 +184,11 @@ class UnreadWidgetConfiguration : K9PreferenceActivity() {
    }

    companion object {
        /**
         * Name of the preference file to store the widget configuration.
         */
        private const val PREFS_NAME = "unread_widget_configuration.xml"

        /**
         * Prefixes for the preference keys
         */
        private const val PREF_PREFIX_KEY = "unread_widget."
        private const val PREF_FOLDER_NAME_SUFFIX_KEY = ".folder_name"

        private const val PREFERENCE_UNREAD_ACCOUNT = "unread_account"
        private const val PREFERENCE_UNREAD_FOLDER_ENABLED = "unread_folder_enabled"
        private const val PREFERENCE_UNREAD_FOLDER = "unread_folder"

        private const val REQUEST_CHOOSE_ACCOUNT = 1
        private const val REQUEST_CHOOSE_FOLDER = 2

        private fun saveWidgetProperties(context: Context, properties: UnreadWidgetProperties) {
            val appWidgetId = properties.appWidgetId
            val editor = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit()
            editor.putString(PREF_PREFIX_KEY + appWidgetId, properties.accountUuid)
            editor.putString(PREF_PREFIX_KEY + appWidgetId + PREF_FOLDER_NAME_SUFFIX_KEY, properties.folderServerId)
            editor.apply()
        }

        fun getWidgetProperties(context: Context, appWidgetId: Int): UnreadWidgetProperties {
            val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
            val accountUuid = prefs.getString(PREF_PREFIX_KEY + appWidgetId, null)
            val folderServerId = prefs.getString(PREF_PREFIX_KEY + appWidgetId + PREF_FOLDER_NAME_SUFFIX_KEY, null)
            return UnreadWidgetProperties(appWidgetId, accountUuid!!, folderServerId)
        }

        fun deleteWidgetConfiguration(context: Context, appWidgetId: Int) {
            val editor = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit()
            editor.remove(PREF_PREFIX_KEY + appWidgetId)
            editor.remove(PREF_PREFIX_KEY + appWidgetId + PREF_FOLDER_NAME_SUFFIX_KEY)
            editor.apply()
        }
    }
}
+12 −4
Original line number Diff line number Diff line
@@ -13,15 +13,23 @@ import android.content.Intent
import timber.log.Timber
import android.view.View
import android.widget.RemoteViews
import com.fsck.k9.widget.unread.UnreadWidgetRepository
import org.koin.standalone.KoinComponent
import org.koin.standalone.inject

class UnreadWidgetProvider : AppWidgetProvider(), KoinComponent {
    private val repository: UnreadWidgetRepository by inject()


class UnreadWidgetProvider : AppWidgetProvider() {
    /**
     * Called when one or more widgets need to be updated.
     */
    override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
        for (widgetId in appWidgetIds) {
            val properties = UnreadWidgetConfiguration.getWidgetProperties(context, widgetId)
            updateWidget(context, appWidgetManager, properties)
            val properties = repository.getWidgetProperties(widgetId)
            properties?.let {
                updateWidget(context, appWidgetManager, it)
            }
        }
    }

@@ -30,7 +38,7 @@ class UnreadWidgetProvider : AppWidgetProvider() {
     */
    override fun onDeleted(context: Context, appWidgetIds: IntArray) {
        for (appWidgetId in appWidgetIds) {
            UnreadWidgetConfiguration.deleteWidgetConfiguration(context, appWidgetId)
            repository.deleteWidgetConfiguration(appWidgetId)
        }
    }

+7 −0
Original line number Diff line number Diff line
package com.fsck.k9.widget.unread

import org.koin.dsl.module.applicationContext

val unreadWidgetModule = applicationContext {
    bean { UnreadWidgetRepository(get()) }
}
+36 −0
Original line number Diff line number Diff line
package com.fsck.k9.widget.unread

import android.content.Context
import com.fsck.k9.helper.UnreadWidgetProperties

class UnreadWidgetRepository(val context: Context) {

    fun saveWidgetProperties(properties: UnreadWidgetProperties) {
        val appWidgetId = properties.appWidgetId
        val editor = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit()
        editor.putString(PREF_PREFIX_KEY + appWidgetId, properties.accountUuid)
        editor.putString(PREF_PREFIX_KEY + appWidgetId + PREF_FOLDER_NAME_SUFFIX_KEY, properties.folderServerId)
        editor.apply()
    }

    fun getWidgetProperties(appWidgetId: Int): UnreadWidgetProperties? {
        val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
        val accountUuid = prefs.getString(PREF_PREFIX_KEY + appWidgetId, null) ?: return null
        val folderServerId = prefs.getString(PREF_PREFIX_KEY + appWidgetId + PREF_FOLDER_NAME_SUFFIX_KEY, null)
        return UnreadWidgetProperties(appWidgetId, accountUuid, folderServerId)
    }

    fun deleteWidgetConfiguration(appWidgetId: Int) {
        val editor = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE).edit()
        editor.remove(PREF_PREFIX_KEY + appWidgetId)
        editor.remove(PREF_PREFIX_KEY + appWidgetId + PREF_FOLDER_NAME_SUFFIX_KEY)
        editor.apply()
    }

    companion object {
        private const val PREFS_NAME = "unread_widget_configuration.xml"

        private const val PREF_PREFIX_KEY = "unread_widget."
        private const val PREF_FOLDER_NAME_SUFFIX_KEY = ".folder_name"
    }
}