mirror of
https://github.com/thunderbird/thunderbird-android.git
synced 2024-09-20 12:12:15 +02:00
Merge pull request #6633 from thundernest/use_koin_not_lazy
Replace custom `by lazy` code where Koin should have been used
This commit is contained in:
commit
d1e920c0ac
@ -1,12 +1,15 @@
|
||||
package com.fsck.k9
|
||||
|
||||
import android.view.ContextThemeWrapper
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.work.WorkerParameters
|
||||
import com.fsck.k9.job.MailSyncWorker
|
||||
import com.fsck.k9.ui.R
|
||||
import com.fsck.k9.ui.changelog.ChangeLogMode
|
||||
import com.fsck.k9.ui.changelog.ChangelogViewModel
|
||||
import com.fsck.k9.ui.endtoend.AutocryptKeyTransferActivity
|
||||
import com.fsck.k9.ui.endtoend.AutocryptKeyTransferPresenter
|
||||
import com.fsck.k9.ui.folders.FolderIconProvider
|
||||
import com.fsck.k9.ui.folders.FolderNameFormatter
|
||||
import com.fsck.k9.ui.helper.SizeFormatter
|
||||
import org.junit.Test
|
||||
@ -44,6 +47,9 @@ class DependencyInjectionTest : AutoCloseKoinTest() {
|
||||
withParameter<SizeFormatter> { RuntimeEnvironment.getApplication() }
|
||||
withParameter<ChangelogViewModel> { ChangeLogMode.CHANGE_LOG }
|
||||
withParameter<MailSyncWorker> { mock<WorkerParameters>() }
|
||||
withParameter<FolderIconProvider> {
|
||||
ContextThemeWrapper(RuntimeEnvironment.getApplication(), R.style.Theme_K9_DayNight).theme
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ import com.fsck.k9.ui.helper.HtmlToSpanned
|
||||
import com.fsck.k9.ui.helper.SizeFormatter
|
||||
import com.fsck.k9.ui.messageview.LinkTextHandler
|
||||
import com.fsck.k9.ui.share.ShareIntentBuilder
|
||||
import org.koin.core.qualifier.named
|
||||
import org.koin.dsl.module
|
||||
|
||||
val uiModule = module {
|
||||
@ -15,6 +16,7 @@ val uiModule = module {
|
||||
single<ThemeProvider> { K9ThemeProvider() }
|
||||
single { HtmlSettingsProvider(get()) }
|
||||
single { DisplayHtmlUiFactory(get()) }
|
||||
factory(named("MessageView")) { get<DisplayHtmlUiFactory>().createForMessageView() }
|
||||
factory { (context: Context) -> SizeFormatter(context.resources) }
|
||||
factory { ShareIntentBuilder(resourceProvider = get(), textPartFinder = get(), quoteDateFormatter = get()) }
|
||||
factory { LinkTextHandler(context = get(), clipboardManager = get()) }
|
||||
|
@ -31,7 +31,7 @@ class ChooseFolderActivity : K9Activity() {
|
||||
private val preferences: Preferences by inject()
|
||||
private val messagingController: MessagingController by inject()
|
||||
private val folderNameFormatter: FolderNameFormatter by inject { parametersOf(this) }
|
||||
private val folderIconProvider by lazy { FolderIconProvider(theme) }
|
||||
private val folderIconProvider: FolderIconProvider by inject { parametersOf(theme) }
|
||||
|
||||
private lateinit var recyclerView: RecyclerView
|
||||
private lateinit var itemAdapter: ItemAdapter<FolderListItem>
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.fsck.k9.ui.folders
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.Resources.Theme
|
||||
import org.koin.androidx.viewmodel.dsl.viewModel
|
||||
import org.koin.dsl.module
|
||||
|
||||
@ -8,4 +9,5 @@ val foldersUiModule = module {
|
||||
single { FolderNameFormatterFactory() }
|
||||
factory { (context: Context) -> FolderNameFormatter(context.resources) }
|
||||
viewModel { FoldersViewModel(folderRepository = get(), messageCountsProvider = get()) }
|
||||
factory { (theme: Theme) -> FolderIconProvider(theme) }
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ class ManageFoldersFragment : Fragment() {
|
||||
private val folderNameFormatter: FolderNameFormatter by inject { parametersOf(requireActivity()) }
|
||||
private val messagingController: MessagingController by inject()
|
||||
private val preferences: Preferences by inject()
|
||||
private val folderIconProvider by lazy { FolderIconProvider(requireActivity().theme) }
|
||||
private val folderIconProvider: FolderIconProvider by inject { parametersOf(requireActivity().theme) }
|
||||
|
||||
private lateinit var account: Account
|
||||
private lateinit var itemAdapter: ItemAdapter<FolderListItem>
|
||||
|
@ -53,7 +53,6 @@ import com.fsck.k9.ui.changelog.RecentChangesViewModel
|
||||
import com.fsck.k9.ui.choosefolder.ChooseFolderActivity
|
||||
import com.fsck.k9.ui.fab.ShrinkFabOnScrollListener
|
||||
import com.fsck.k9.ui.folders.FolderNameFormatter
|
||||
import com.fsck.k9.ui.folders.FolderNameFormatterFactory
|
||||
import com.fsck.k9.ui.helper.RelativeDateTimeFormatter
|
||||
import com.fsck.k9.ui.messagelist.MessageListFragment.MessageListFragmentListener.Companion.MAX_PROGRESS
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
@ -63,6 +62,7 @@ import java.util.concurrent.Future
|
||||
import net.jcip.annotations.GuardedBy
|
||||
import org.koin.android.ext.android.inject
|
||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||
import org.koin.core.parameter.parametersOf
|
||||
import timber.log.Timber
|
||||
|
||||
private const val MAXIMUM_MESSAGE_SORT_OVERRIDES = 3
|
||||
@ -77,8 +77,7 @@ class MessageListFragment :
|
||||
private val recentChangesViewModel: RecentChangesViewModel by viewModel()
|
||||
|
||||
private val sortTypeToastProvider: SortTypeToastProvider by inject()
|
||||
private val folderNameFormatterFactory: FolderNameFormatterFactory by inject()
|
||||
private val folderNameFormatter: FolderNameFormatter by lazy { folderNameFormatterFactory.create(requireContext()) }
|
||||
private val folderNameFormatter: FolderNameFormatter by inject { parametersOf(requireContext()) }
|
||||
private val messagingController: MessagingController by inject()
|
||||
private val preferences: Preferences by inject()
|
||||
private val clock: Clock by inject()
|
||||
|
@ -31,23 +31,21 @@ import com.fsck.k9.mail.Address
|
||||
import com.fsck.k9.mailstore.AttachmentResolver
|
||||
import com.fsck.k9.mailstore.AttachmentViewInfo
|
||||
import com.fsck.k9.mailstore.MessageViewInfo
|
||||
import com.fsck.k9.message.html.DisplayHtml
|
||||
import com.fsck.k9.ui.R
|
||||
import com.fsck.k9.ui.helper.DisplayHtmlUiFactory
|
||||
import com.fsck.k9.view.MessageWebView
|
||||
import com.fsck.k9.view.MessageWebView.OnPageFinishedListener
|
||||
import com.fsck.k9.view.WebViewConfigProvider
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.get
|
||||
import org.koin.core.component.inject
|
||||
import org.koin.core.qualifier.named
|
||||
|
||||
class MessageContainerView(context: Context, attrs: AttributeSet?) :
|
||||
LinearLayout(context, attrs),
|
||||
OnCreateContextMenuListener,
|
||||
KoinComponent {
|
||||
|
||||
private val displayHtml by lazy(mode = LazyThreadSafetyMode.NONE) {
|
||||
get<DisplayHtmlUiFactory>().createForMessageView()
|
||||
}
|
||||
private val displayHtml: DisplayHtml by inject(named("MessageView"))
|
||||
private val webViewConfigProvider: WebViewConfigProvider by inject()
|
||||
private val clipboardManager: ClipboardManager by inject()
|
||||
private val linkTextHandler: LinkTextHandler by inject()
|
||||
|
@ -3,6 +3,7 @@ package com.fsck.k9.ui.settings
|
||||
import com.fsck.k9.helper.NamedThreadFactory
|
||||
import com.fsck.k9.ui.settings.account.AccountSettingsDataStoreFactory
|
||||
import com.fsck.k9.ui.settings.account.AccountSettingsViewModel
|
||||
import com.fsck.k9.ui.settings.account.getSystemVibrator
|
||||
import com.fsck.k9.ui.settings.export.SettingsExportViewModel
|
||||
import com.fsck.k9.ui.settings.general.GeneralSettingsDataStore
|
||||
import com.fsck.k9.ui.settings.general.GeneralSettingsViewModel
|
||||
@ -33,6 +34,7 @@ val settingsUiModule = module {
|
||||
notificationController = get()
|
||||
)
|
||||
}
|
||||
factory { getSystemVibrator(context = get()) }
|
||||
|
||||
viewModel { SettingsExportViewModel(context = get(), preferences = get(), settingsExporter = get()) }
|
||||
viewModel { SettingsImportViewModel(get(), get()) }
|
||||
|
@ -4,12 +4,10 @@ import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Vibrator
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import android.widget.Toast
|
||||
import androidx.core.content.getSystemService
|
||||
import androidx.core.net.toUri
|
||||
import androidx.preference.ListPreference
|
||||
import androidx.preference.Preference
|
||||
@ -53,8 +51,8 @@ class AccountSettingsFragment : PreferenceFragmentCompat(), ConfirmationDialogFr
|
||||
private val accountRemover: BackgroundAccountRemover by inject()
|
||||
private val notificationChannelManager: NotificationChannelManager by inject()
|
||||
private val notificationSettingsUpdater: NotificationSettingsUpdater by inject()
|
||||
private val vibrator: Vibrator by inject()
|
||||
|
||||
private val vibrator by lazy { requireContext().getSystemService<Vibrator>() }
|
||||
private lateinit var dataStore: AccountSettingsDataStore
|
||||
|
||||
private var notificationSoundPreference: NotificationSoundPreference? = null
|
||||
@ -203,7 +201,7 @@ class AccountSettingsFragment : PreferenceFragmentCompat(), ConfirmationDialogFr
|
||||
}
|
||||
|
||||
private fun initializeNotifications(account: Account) {
|
||||
if (vibrator?.hasVibrator() != true) {
|
||||
if (!vibrator.hasVibrator) {
|
||||
findPreference<Preference>(PREFERENCE_NOTIFICATION_VIBRATION)?.remove()
|
||||
}
|
||||
|
||||
|
@ -3,8 +3,6 @@ package com.fsck.k9.ui.settings.account
|
||||
import android.app.Dialog
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.VibrationEffect
|
||||
import android.os.Vibrator
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.BaseAdapter
|
||||
@ -14,16 +12,16 @@ import android.widget.SeekBar.OnSeekBarChangeListener
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.widget.SwitchCompat
|
||||
import androidx.core.content.getSystemService
|
||||
import androidx.preference.PreferenceDialogFragmentCompat
|
||||
import com.fsck.k9.NotificationVibration
|
||||
import com.fsck.k9.VibratePattern
|
||||
import com.fsck.k9.ui.R
|
||||
import com.fsck.k9.ui.getEnum
|
||||
import com.fsck.k9.ui.putEnum
|
||||
import org.koin.android.ext.android.inject
|
||||
|
||||
class VibrationDialogFragment : PreferenceDialogFragmentCompat() {
|
||||
private val vibrator by lazy { requireContext().getSystemService<Vibrator>() ?: error("Vibrator service missing") }
|
||||
private val vibrator: Vibrator by inject()
|
||||
|
||||
private val vibrationPreference: VibrationPreference
|
||||
get() = preference as VibrationPreference
|
||||
@ -83,13 +81,7 @@ class VibrationDialogFragment : PreferenceDialogFragmentCompat() {
|
||||
val vibrationTimes = adapter.vibrationTimes
|
||||
val vibrationPattern = NotificationVibration.getSystemPattern(vibratePattern, vibrationTimes)
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
val vibrationEffect = VibrationEffect.createWaveform(vibrationPattern, -1)
|
||||
vibrator.vibrate(vibrationEffect)
|
||||
} else {
|
||||
@Suppress("DEPRECATION")
|
||||
vibrator.vibrate(vibrationPattern, -1)
|
||||
}
|
||||
vibrator.vibrate(vibrationPattern)
|
||||
}
|
||||
|
||||
private inner class VibrationPatternAdapter(
|
||||
|
@ -0,0 +1,32 @@
|
||||
package com.fsck.k9.ui.settings.account
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import android.os.VibrationEffect
|
||||
import androidx.core.content.getSystemService
|
||||
import android.os.Vibrator as VibratorService
|
||||
|
||||
interface Vibrator {
|
||||
val hasVibrator: Boolean
|
||||
fun vibrate(vibrationPattern: LongArray)
|
||||
}
|
||||
|
||||
internal class AndroidVibrator(private val vibrator: VibratorService) : Vibrator {
|
||||
override val hasVibrator: Boolean
|
||||
get() = vibrator.hasVibrator()
|
||||
|
||||
override fun vibrate(vibrationPattern: LongArray) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
val vibrationEffect = VibrationEffect.createWaveform(vibrationPattern, -1)
|
||||
vibrator.vibrate(vibrationEffect)
|
||||
} else {
|
||||
@Suppress("DEPRECATION")
|
||||
vibrator.vibrate(vibrationPattern, -1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun getSystemVibrator(context: Context): Vibrator {
|
||||
val vibratorService = context.getSystemService<VibratorService>() ?: error("Vibrator service missing")
|
||||
return AndroidVibrator(vibratorService)
|
||||
}
|
Loading…
Reference in New Issue
Block a user