Loading k9mail/src/main/java/com/fsck/k9/DI.kt +3 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -18,7 +19,8 @@ object DI { val appModules = listOf( mainModule, settingsUiModule settingsUiModule, unreadWidgetModule ) @JvmStatic fun start(application: Application) { Loading k9mail/src/main/java/com/fsck/k9/activity/UnreadWidgetConfiguration.kt +4 −35 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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. Loading Loading @@ -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 Loading @@ -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() } } } k9mail/src/main/java/com/fsck/k9/provider/UnreadWidgetProvider.kt +12 −4 Original line number Diff line number Diff line Loading @@ -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) } } } Loading @@ -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) } } Loading k9mail/src/main/java/com/fsck/k9/widget/unread/KoinModule.kt 0 → 100644 +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()) } } k9mail/src/main/java/com/fsck/k9/widget/unread/UnreadWidgetRepository.kt 0 → 100644 +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" } } Loading
k9mail/src/main/java/com/fsck/k9/DI.kt +3 −1 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -18,7 +19,8 @@ object DI { val appModules = listOf( mainModule, settingsUiModule settingsUiModule, unreadWidgetModule ) @JvmStatic fun start(application: Application) { Loading
k9mail/src/main/java/com/fsck/k9/activity/UnreadWidgetConfiguration.kt +4 −35 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading @@ -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. Loading Loading @@ -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 Loading @@ -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() } } }
k9mail/src/main/java/com/fsck/k9/provider/UnreadWidgetProvider.kt +12 −4 Original line number Diff line number Diff line Loading @@ -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) } } } Loading @@ -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) } } Loading
k9mail/src/main/java/com/fsck/k9/widget/unread/KoinModule.kt 0 → 100644 +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()) } }
k9mail/src/main/java/com/fsck/k9/widget/unread/UnreadWidgetRepository.kt 0 → 100644 +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" } }