feat(ui): добавлены новые состояния и компоненты для отображения статуса работы
This commit is contained in:
@@ -2,9 +2,10 @@ package com.github.nullptroma.wallenc.app
|
||||
|
||||
import android.app.Application
|
||||
import androidx.work.Configuration
|
||||
import androidx.hilt.work.HiltWorkerFactory
|
||||
import com.github.nullptroma.wallenc.app.di.HiltWorkerFactoryEntryPoint
|
||||
import com.github.nullptroma.wallenc.app.sync.StorageSyncBootstrap
|
||||
import com.github.nullptroma.wallenc.app.tasks.TaskPipelineForegroundBootstrap
|
||||
import dagger.hilt.android.EntryPointAccessors
|
||||
import dagger.hilt.android.HiltAndroidApp
|
||||
import javax.inject.Inject
|
||||
|
||||
@@ -17,9 +18,6 @@ class WallencApplication : Application(), Configuration.Provider {
|
||||
@Inject
|
||||
lateinit var storageSyncBootstrap: StorageSyncBootstrap
|
||||
|
||||
@Inject
|
||||
lateinit var workerFactory: HiltWorkerFactory
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
taskPipelineForegroundBootstrap.start()
|
||||
@@ -27,7 +25,13 @@ class WallencApplication : Application(), Configuration.Provider {
|
||||
}
|
||||
|
||||
override val workManagerConfiguration: Configuration
|
||||
get() = Configuration.Builder()
|
||||
.setWorkerFactory(workerFactory)
|
||||
.build()
|
||||
get() {
|
||||
val factory = EntryPointAccessors.fromApplication(
|
||||
applicationContext,
|
||||
HiltWorkerFactoryEntryPoint::class.java,
|
||||
).hiltWorkerFactory()
|
||||
return Configuration.Builder()
|
||||
.setWorkerFactory(factory)
|
||||
.build()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.github.nullptroma.wallenc.app.di
|
||||
|
||||
import androidx.hilt.work.HiltWorkerFactory
|
||||
import dagger.hilt.EntryPoint
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
|
||||
/**
|
||||
* WorkManager инициализируется до [android.app.Application.onCreate], поэтому
|
||||
* нельзя читать `@Inject lateinit var workerFactory` в [Configuration.Provider].
|
||||
* Фабрика берётся через EntryPoint.
|
||||
*/
|
||||
@EntryPoint
|
||||
@InstallIn(SingletonComponent::class)
|
||||
interface HiltWorkerFactoryEntryPoint {
|
||||
fun hiltWorkerFactory(): HiltWorkerFactory
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.github.nullptroma.wallenc.app.di
|
||||
|
||||
import android.content.Context
|
||||
import com.github.nullptroma.wallenc.ui.resources.UiStringResolver
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
object UiStringModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideUiStringResolver(@ApplicationContext context: Context): UiStringResolver =
|
||||
UiStringResolver { id, args ->
|
||||
if (args.isEmpty()) {
|
||||
context.getString(id)
|
||||
} else {
|
||||
context.getString(id, *args)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.github.nullptroma.wallenc.app.sync
|
||||
|
||||
import com.github.nullptroma.wallenc.domain.interfaces.IVaultsManager
|
||||
import com.github.nullptroma.wallenc.ui.R
|
||||
import com.github.nullptroma.wallenc.ui.resources.UiStringResolver
|
||||
import com.github.nullptroma.wallenc.usecases.RunStorageSyncUseCase
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -21,6 +23,7 @@ class StorageSyncBootstrap @Inject constructor(
|
||||
private val scheduler: StorageSyncScheduler,
|
||||
private val vaultsManager: IVaultsManager,
|
||||
private val syncRunner: RunStorageSyncUseCase,
|
||||
private val uiStrings: UiStringResolver,
|
||||
) {
|
||||
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO)
|
||||
|
||||
@@ -40,7 +43,10 @@ class StorageSyncBootstrap @Inject constructor(
|
||||
merge(*triggers.toTypedArray())
|
||||
.debounce(DEBOUNCE_AFTER_CHANGE_MS)
|
||||
.collect {
|
||||
syncRunner.enqueue("debounce")
|
||||
syncRunner.enqueue(
|
||||
displayTitle = uiStrings(R.string.task_title_storage_sync_background),
|
||||
logReason = "debounce",
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<resources>
|
||||
<string name="app_name">Wallenc</string>
|
||||
<string name="task_notification_channel_name">Background tasks</string>
|
||||
<string name="task_notification_title">Wallenc tasks</string>
|
||||
<string name="task_notification_preparing">Preparing…</string>
|
||||
<string name="task_notification_indeterminate">Working…</string>
|
||||
<string name="task_notification_cancel">Cancel</string>
|
||||
</resources>
|
||||
<string name="task_notification_channel_name">Фоновые задачи</string>
|
||||
<string name="task_notification_title">Задачи Wallenc</string>
|
||||
<string name="task_notification_preparing">Подготовка…</string>
|
||||
<string name="task_notification_indeterminate">Выполняется…</string>
|
||||
<string name="task_notification_cancel">Отмена</string>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user