diff --git a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt index 29f565fc3..f20afcc48 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/prefs/AppSettings.kt @@ -2,6 +2,7 @@ package org.koitharu.kotatsu.core.prefs import android.content.Context import android.content.SharedPreferences +import android.net.ConnectivityManager import android.net.Uri import android.os.Build import android.provider.Settings @@ -141,6 +142,14 @@ class AppSettings(context: Context) { } } + fun isPagesPreloadAllowed(cm: ConnectivityManager): Boolean { + return when (prefs.getString(KEY_PAGES_PRELOAD, null)?.toIntOrNull()) { + NETWORK_ALWAYS -> true + NETWORK_NEVER -> false + else -> cm.isActiveNetworkMetered + } + } + fun getDateFormat(format: String = prefs.getString(KEY_DATE_FORMAT, "").orEmpty()): DateFormat = when (format) { "" -> DateFormat.getDateInstance(DateFormat.SHORT) @@ -231,6 +240,7 @@ class AppSettings(context: Context) { const val KEY_HISTORY_EXCLUDE_NSFW = "history_exclude_nsfw" const val KEY_PAGES_NUMBERS = "pages_numbers" const val KEY_SCREENSHOTS_POLICY = "screenshots_policy" + const val KEY_PAGES_PRELOAD = "pages_preload" // About const val KEY_APP_UPDATE = "app_update" @@ -242,6 +252,10 @@ class AppSettings(context: Context) { const val KEY_FEEDBACK_GITHUB = "about_feedback_github" const val KEY_SUPPORT_DEVELOPER = "about_support_developer" + private const val NETWORK_NEVER = 0 + private const val NETWORK_ALWAYS = 1 + private const val NETWORK_NON_METERED = 2 + val isDynamicColorAvailable: Boolean get() = DynamicColors.isDynamicColorAvailable() || (isSamsung && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) diff --git a/app/src/main/java/org/koitharu/kotatsu/download/ui/service/DownloadService.kt b/app/src/main/java/org/koitharu/kotatsu/download/ui/service/DownloadService.kt index e7fb68375..5d62833fc 100644 --- a/app/src/main/java/org/koitharu/kotatsu/download/ui/service/DownloadService.kt +++ b/app/src/main/java/org/koitharu/kotatsu/download/ui/service/DownloadService.kt @@ -4,7 +4,6 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter -import android.net.ConnectivityManager import android.os.Binder import android.os.IBinder import android.os.PowerManager @@ -31,6 +30,7 @@ import org.koitharu.kotatsu.base.ui.dialog.CheckBoxAlertDialog import org.koitharu.kotatsu.core.model.Manga import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.download.domain.DownloadManager +import org.koitharu.kotatsu.utils.ext.connectivityManager import org.koitharu.kotatsu.utils.ext.toArraySet import org.koitharu.kotatsu.utils.progress.ProgressJob import java.util.concurrent.TimeUnit @@ -183,9 +183,8 @@ class DownloadService : BaseService() { .putExtra(ACTION_DOWNLOAD_CANCEL, startId) private fun confirmDataTransfer(context: Context, callback: () -> Unit) { - val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val settings = GlobalContext.get().get() - if (cm.isActiveNetworkMetered && settings.isTrafficWarningEnabled) { + if (context.connectivityManager.isActiveNetworkMetered && settings.isTrafficWarningEnabled) { CheckBoxAlertDialog.Builder(context) .setTitle(R.string.warning) .setMessage(R.string.network_consumption_warning) diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/domain/PageLoader.kt b/app/src/main/java/org/koitharu/kotatsu/reader/domain/PageLoader.kt index 965d9bcfc..fc87ba5d6 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/domain/PageLoader.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/domain/PageLoader.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.reader.domain +import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactory import android.net.Uri @@ -20,9 +21,11 @@ import org.koitharu.kotatsu.core.model.MangaSource import org.koitharu.kotatsu.core.network.CommonHeaders import org.koitharu.kotatsu.core.parser.MangaRepository import org.koitharu.kotatsu.core.parser.RemoteMangaRepository +import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.local.data.PagesCache import org.koitharu.kotatsu.reader.ui.pager.ReaderPage import org.koitharu.kotatsu.utils.ext.await +import org.koitharu.kotatsu.utils.ext.connectivityManager import org.koitharu.kotatsu.utils.ext.mangaRepositoryOf import org.koitharu.kotatsu.utils.progress.ProgressDeferred import java.io.File @@ -39,6 +42,8 @@ class PageLoader : KoinComponent, Closeable { private val okHttp = get() private val cache = get() + private val settings = get() + private val connectivityManager = get().connectivityManager private val tasks = LongSparseArray>() private val convertLock = Mutex() private var repository: MangaRepository? = null @@ -53,7 +58,7 @@ class PageLoader : KoinComponent, Closeable { } fun isPrefetchApplicable(): Boolean { - return repository is RemoteMangaRepository + return repository is RemoteMangaRepository && settings.isPagesPreloadAllowed(connectivityManager) } fun prefetch(pages: List) { diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ext/AndroidExt.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ext/AndroidExt.kt index 9c94b1a6c..c9f5a5753 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ext/AndroidExt.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ext/AndroidExt.kt @@ -11,6 +11,9 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.suspendCancellableCoroutine import kotlin.coroutines.resume +val Context.connectivityManager: ConnectivityManager + get() = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + suspend fun ConnectivityManager.waitForNetwork(): Network { val request = NetworkRequest.Builder().build() return suspendCancellableCoroutine { cont -> diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index bcfb4dddb..03bed46af 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -29,4 +29,9 @@ @string/screenshots_block_nsfw @string/screenshots_block_all + + @string/always + @string/only_using_wifi + @string/never + \ No newline at end of file diff --git a/app/src/main/res/values/constants.xml b/app/src/main/res/values/constants.xml index 7e400c72e..da6a0a024 100644 --- a/app/src/main/res/values/constants.xml +++ b/app/src/main/res/values/constants.xml @@ -25,4 +25,9 @@ block_nsfw block_all + + 1 + 2 + 0 + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6adb549de..a22b7a3a3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -255,4 +255,8 @@ Allow Block on NSFW Block always + Never + Only using WiFi + Always + Preload pages \ No newline at end of file diff --git a/app/src/main/res/xml/pref_reader.xml b/app/src/main/res/xml/pref_reader.xml index 1d3db4527..8fa00ef0e 100644 --- a/app/src/main/res/xml/pref_reader.xml +++ b/app/src/main/res/xml/pref_reader.xml @@ -47,4 +47,13 @@ app:iconSpaceReserved="false" app:useSimpleSummaryProvider="true" /> + + \ No newline at end of file