Fix locale changing
This commit is contained in:
@@ -1,10 +1,16 @@
|
|||||||
package org.koitharu.kotatsu.core.ui
|
package org.koitharu.kotatsu.core.ui
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.lifecycle.LifecycleService
|
import androidx.lifecycle.LifecycleService
|
||||||
import leakcanary.AppWatcher
|
import leakcanary.AppWatcher
|
||||||
|
|
||||||
abstract class BaseService : LifecycleService() {
|
abstract class BaseService : LifecycleService() {
|
||||||
|
|
||||||
|
override fun attachBaseContext(newBase: Context) {
|
||||||
|
super.attachBaseContext(ContextCompat.getContextForLanguage(newBase))
|
||||||
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
AppWatcher.objectWatcher.watch(
|
AppWatcher.objectWatcher.watch(
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import android.os.Build
|
|||||||
import android.provider.SearchRecentSuggestions
|
import android.provider.SearchRecentSuggestions
|
||||||
import android.text.Html
|
import android.text.Html
|
||||||
import androidx.collection.arraySetOf
|
import androidx.collection.arraySetOf
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.room.InvalidationTracker
|
import androidx.room.InvalidationTracker
|
||||||
import androidx.work.WorkManager
|
import androidx.work.WorkManager
|
||||||
import coil3.ImageLoader
|
import coil3.ImageLoader
|
||||||
@@ -76,6 +77,12 @@ interface AppModule {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@LocalizedAppContext
|
||||||
|
fun provideLocalizedContext(
|
||||||
|
@ApplicationContext context: Context,
|
||||||
|
): Context = ContextCompat.getContextForLanguage(context)
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun provideNetworkState(
|
fun provideNetworkState(
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package org.koitharu.kotatsu.core
|
||||||
|
|
||||||
|
import javax.inject.Qualifier
|
||||||
|
|
||||||
|
@Qualifier
|
||||||
|
@Target(
|
||||||
|
AnnotationTarget.FUNCTION,
|
||||||
|
AnnotationTarget.PROPERTY_GETTER,
|
||||||
|
AnnotationTarget.PROPERTY_SETTER,
|
||||||
|
AnnotationTarget.VALUE_PARAMETER,
|
||||||
|
AnnotationTarget.FIELD,
|
||||||
|
)
|
||||||
|
annotation class LocalizedAppContext
|
||||||
@@ -19,11 +19,11 @@ import coil3.size.Scale
|
|||||||
import dagger.assisted.Assisted
|
import dagger.assisted.Assisted
|
||||||
import dagger.assisted.AssistedFactory
|
import dagger.assisted.AssistedFactory
|
||||||
import dagger.assisted.AssistedInject
|
import dagger.assisted.AssistedInject
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
|
||||||
import kotlinx.coroutines.sync.Mutex
|
import kotlinx.coroutines.sync.Mutex
|
||||||
import kotlinx.coroutines.sync.withLock
|
import kotlinx.coroutines.sync.withLock
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
import org.koitharu.kotatsu.core.ErrorReporterReceiver
|
import org.koitharu.kotatsu.core.ErrorReporterReceiver
|
||||||
|
import org.koitharu.kotatsu.core.LocalizedAppContext
|
||||||
import org.koitharu.kotatsu.core.model.LocalMangaSource
|
import org.koitharu.kotatsu.core.model.LocalMangaSource
|
||||||
import org.koitharu.kotatsu.core.nav.AppRouter
|
import org.koitharu.kotatsu.core.nav.AppRouter
|
||||||
import org.koitharu.kotatsu.core.util.ext.getDrawableOrThrow
|
import org.koitharu.kotatsu.core.util.ext.getDrawableOrThrow
|
||||||
@@ -43,7 +43,7 @@ private const val CHANNEL_ID_SILENT = "download_bg"
|
|||||||
private const val GROUP_ID = "downloads"
|
private const val GROUP_ID = "downloads"
|
||||||
|
|
||||||
class DownloadNotificationFactory @AssistedInject constructor(
|
class DownloadNotificationFactory @AssistedInject constructor(
|
||||||
@ApplicationContext private val context: Context,
|
@LocalizedAppContext private val context: Context,
|
||||||
private val workManager: WorkManager,
|
private val workManager: WorkManager,
|
||||||
private val coil: ImageLoader,
|
private val coil: ImageLoader,
|
||||||
@Assisted private val uuid: UUID,
|
@Assisted private val uuid: UUID,
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import kotlinx.coroutines.flow.flatMapLatest
|
|||||||
import kotlinx.coroutines.flow.map
|
import kotlinx.coroutines.flow.map
|
||||||
import kotlinx.coroutines.flow.onStart
|
import kotlinx.coroutines.flow.onStart
|
||||||
import org.koitharu.kotatsu.BuildConfig
|
import org.koitharu.kotatsu.BuildConfig
|
||||||
|
import org.koitharu.kotatsu.core.LocalizedAppContext
|
||||||
import org.koitharu.kotatsu.core.db.MangaDatabase
|
import org.koitharu.kotatsu.core.db.MangaDatabase
|
||||||
import org.koitharu.kotatsu.core.db.dao.MangaSourcesDao
|
import org.koitharu.kotatsu.core.db.dao.MangaSourcesDao
|
||||||
import org.koitharu.kotatsu.core.db.entity.MangaSourceEntity
|
import org.koitharu.kotatsu.core.db.entity.MangaSourceEntity
|
||||||
@@ -42,7 +43,7 @@ import javax.inject.Singleton
|
|||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class MangaSourcesRepository @Inject constructor(
|
class MangaSourcesRepository @Inject constructor(
|
||||||
@ApplicationContext private val context: Context,
|
@LocalizedAppContext private val context: Context,
|
||||||
private val db: MangaDatabase,
|
private val db: MangaDatabase,
|
||||||
private val settings: AppSettings,
|
private val settings: AppSettings,
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import org.koitharu.kotatsu.core.LocalizedAppContext
|
||||||
import org.koitharu.kotatsu.core.ui.BaseViewModel
|
import org.koitharu.kotatsu.core.ui.BaseViewModel
|
||||||
import org.koitharu.kotatsu.core.util.LocaleComparator
|
import org.koitharu.kotatsu.core.util.LocaleComparator
|
||||||
import org.koitharu.kotatsu.core.util.ext.mapSortedByCount
|
import org.koitharu.kotatsu.core.util.ext.mapSortedByCount
|
||||||
@@ -25,7 +26,7 @@ import javax.inject.Inject
|
|||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class WelcomeViewModel @Inject constructor(
|
class WelcomeViewModel @Inject constructor(
|
||||||
private val repository: MangaSourcesRepository,
|
private val repository: MangaSourcesRepository,
|
||||||
@ApplicationContext context: Context,
|
@LocalizedAppContext context: Context,
|
||||||
) : BaseViewModel() {
|
) : BaseViewModel() {
|
||||||
|
|
||||||
private val allSources = repository.allMangaSources
|
private val allSources = repository.allMangaSources
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import okhttp3.OkHttpClient
|
|||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
import okio.use
|
import okio.use
|
||||||
import org.jetbrains.annotations.Blocking
|
import org.jetbrains.annotations.Blocking
|
||||||
|
import org.koitharu.kotatsu.core.LocalizedAppContext
|
||||||
import org.koitharu.kotatsu.core.image.BitmapDecoderCompat
|
import org.koitharu.kotatsu.core.image.BitmapDecoderCompat
|
||||||
import org.koitharu.kotatsu.core.network.CommonHeaders
|
import org.koitharu.kotatsu.core.network.CommonHeaders
|
||||||
import org.koitharu.kotatsu.core.network.MangaHttpClient
|
import org.koitharu.kotatsu.core.network.MangaHttpClient
|
||||||
@@ -71,7 +72,7 @@ import kotlin.coroutines.CoroutineContext
|
|||||||
|
|
||||||
@ActivityRetainedScoped
|
@ActivityRetainedScoped
|
||||||
class PageLoader @Inject constructor(
|
class PageLoader @Inject constructor(
|
||||||
@ApplicationContext private val context: Context,
|
@LocalizedAppContext private val context: Context,
|
||||||
lifecycle: ActivityRetainedLifecycle,
|
lifecycle: ActivityRetainedLifecycle,
|
||||||
@MangaHttpClient private val okHttp: OkHttpClient,
|
@MangaHttpClient private val okHttp: OkHttpClient,
|
||||||
private val cache: PagesCache,
|
private val cache: PagesCache,
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import okio.buffer
|
|||||||
import okio.openZip
|
import okio.openZip
|
||||||
import okio.sink
|
import okio.sink
|
||||||
import okio.source
|
import okio.source
|
||||||
|
import org.koitharu.kotatsu.core.LocalizedAppContext
|
||||||
import org.koitharu.kotatsu.core.image.BitmapDecoderCompat
|
import org.koitharu.kotatsu.core.image.BitmapDecoderCompat
|
||||||
import org.koitharu.kotatsu.core.os.OpenDocumentTreeHelper
|
import org.koitharu.kotatsu.core.os.OpenDocumentTreeHelper
|
||||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||||
@@ -46,7 +47,7 @@ import kotlin.coroutines.resume
|
|||||||
|
|
||||||
class PageSaveHelper @AssistedInject constructor(
|
class PageSaveHelper @AssistedInject constructor(
|
||||||
@Assisted activityResultCaller: ActivityResultCaller,
|
@Assisted activityResultCaller: ActivityResultCaller,
|
||||||
@ApplicationContext private val context: Context,
|
@LocalizedAppContext private val context: Context,
|
||||||
private val settings: AppSettings,
|
private val settings: AppSettings,
|
||||||
private val pageLoaderProvider: Provider<PageLoader>,
|
private val pageLoaderProvider: Provider<PageLoader>,
|
||||||
) : ActivityResultCallback<Uri?> {
|
) : ActivityResultCallback<Uri?> {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import androidx.preference.get
|
|||||||
import dagger.Reusable
|
import dagger.Reusable
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
|
import org.koitharu.kotatsu.core.LocalizedAppContext
|
||||||
import org.koitharu.kotatsu.settings.AppearanceSettingsFragment
|
import org.koitharu.kotatsu.settings.AppearanceSettingsFragment
|
||||||
import org.koitharu.kotatsu.settings.DownloadsSettingsFragment
|
import org.koitharu.kotatsu.settings.DownloadsSettingsFragment
|
||||||
import org.koitharu.kotatsu.settings.NetworkSettingsFragment
|
import org.koitharu.kotatsu.settings.NetworkSettingsFragment
|
||||||
@@ -28,7 +29,7 @@ import javax.inject.Inject
|
|||||||
@Reusable
|
@Reusable
|
||||||
@SuppressLint("RestrictedApi")
|
@SuppressLint("RestrictedApi")
|
||||||
class SettingsSearchHelper @Inject constructor(
|
class SettingsSearchHelper @Inject constructor(
|
||||||
@ApplicationContext private val context: Context,
|
@LocalizedAppContext private val context: Context,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
fun inflatePreferences(): List<SettingsItem> {
|
fun inflatePreferences(): List<SettingsItem> {
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import kotlinx.coroutines.flow.onEach
|
|||||||
import kotlinx.coroutines.flow.update
|
import kotlinx.coroutines.flow.update
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
|
import org.koitharu.kotatsu.core.LocalizedAppContext
|
||||||
import org.koitharu.kotatsu.core.db.TABLE_SOURCES
|
import org.koitharu.kotatsu.core.db.TABLE_SOURCES
|
||||||
import org.koitharu.kotatsu.core.model.getTitle
|
import org.koitharu.kotatsu.core.model.getTitle
|
||||||
import org.koitharu.kotatsu.core.model.isNsfw
|
import org.koitharu.kotatsu.core.model.isNsfw
|
||||||
@@ -31,7 +32,7 @@ import javax.inject.Inject
|
|||||||
@ViewModelScoped
|
@ViewModelScoped
|
||||||
class SourcesListProducer @Inject constructor(
|
class SourcesListProducer @Inject constructor(
|
||||||
lifecycle: ViewModelLifecycle,
|
lifecycle: ViewModelLifecycle,
|
||||||
@ApplicationContext private val context: Context,
|
@LocalizedAppContext private val context: Context,
|
||||||
private val repository: MangaSourcesRepository,
|
private val repository: MangaSourcesRepository,
|
||||||
private val settings: AppSettings,
|
private val settings: AppSettings,
|
||||||
) : InvalidationTracker.Observer(TABLE_SOURCES) {
|
) : InvalidationTracker.Observer(TABLE_SOURCES) {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import coil3.ImageLoader
|
|||||||
import coil3.request.ImageRequest
|
import coil3.request.ImageRequest
|
||||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||||
import org.koitharu.kotatsu.R
|
import org.koitharu.kotatsu.R
|
||||||
|
import org.koitharu.kotatsu.core.LocalizedAppContext
|
||||||
import org.koitharu.kotatsu.core.nav.AppRouter
|
import org.koitharu.kotatsu.core.nav.AppRouter
|
||||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||||
import org.koitharu.kotatsu.core.util.ext.checkNotificationPermission
|
import org.koitharu.kotatsu.core.util.ext.checkNotificationPermission
|
||||||
@@ -26,7 +27,7 @@ import org.koitharu.kotatsu.parsers.model.MangaChapter
|
|||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class TrackerNotificationHelper @Inject constructor(
|
class TrackerNotificationHelper @Inject constructor(
|
||||||
@ApplicationContext private val applicationContext: Context,
|
@LocalizedAppContext private val applicationContext: Context,
|
||||||
private val settings: AppSettings,
|
private val settings: AppSettings,
|
||||||
private val coil: ImageLoader,
|
private val coil: ImageLoader,
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
package org.koitharu.kotatsu.core.ui
|
package org.koitharu.kotatsu.core.ui
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.lifecycle.LifecycleService
|
import androidx.lifecycle.LifecycleService
|
||||||
|
|
||||||
abstract class BaseService : LifecycleService()
|
abstract class BaseService : LifecycleService() {
|
||||||
|
|
||||||
|
override fun attachBaseContext(newBase: Context) {
|
||||||
|
super.attachBaseContext(ContextCompat.getContextForLanguage(newBase))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
package org.koitharu.kotatsu.core.ui
|
package org.koitharu.kotatsu.core.ui
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.lifecycle.LifecycleService
|
import androidx.lifecycle.LifecycleService
|
||||||
|
|
||||||
abstract class BaseService : LifecycleService()
|
abstract class BaseService : LifecycleService() {
|
||||||
|
|
||||||
|
override fun attachBaseContext(newBase: Context) {
|
||||||
|
super.attachBaseContext(ContextCompat.getContextForLanguage(newBase))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user