Option to control pages preloading
This commit is contained in:
@@ -2,6 +2,7 @@ package org.koitharu.kotatsu.core.prefs
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
|
import android.net.ConnectivityManager
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.provider.Settings
|
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 =
|
fun getDateFormat(format: String = prefs.getString(KEY_DATE_FORMAT, "").orEmpty()): DateFormat =
|
||||||
when (format) {
|
when (format) {
|
||||||
"" -> DateFormat.getDateInstance(DateFormat.SHORT)
|
"" -> DateFormat.getDateInstance(DateFormat.SHORT)
|
||||||
@@ -231,6 +240,7 @@ class AppSettings(context: Context) {
|
|||||||
const val KEY_HISTORY_EXCLUDE_NSFW = "history_exclude_nsfw"
|
const val KEY_HISTORY_EXCLUDE_NSFW = "history_exclude_nsfw"
|
||||||
const val KEY_PAGES_NUMBERS = "pages_numbers"
|
const val KEY_PAGES_NUMBERS = "pages_numbers"
|
||||||
const val KEY_SCREENSHOTS_POLICY = "screenshots_policy"
|
const val KEY_SCREENSHOTS_POLICY = "screenshots_policy"
|
||||||
|
const val KEY_PAGES_PRELOAD = "pages_preload"
|
||||||
|
|
||||||
// About
|
// About
|
||||||
const val KEY_APP_UPDATE = "app_update"
|
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_FEEDBACK_GITHUB = "about_feedback_github"
|
||||||
const val KEY_SUPPORT_DEVELOPER = "about_support_developer"
|
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
|
val isDynamicColorAvailable: Boolean
|
||||||
get() = DynamicColors.isDynamicColorAvailable() ||
|
get() = DynamicColors.isDynamicColorAvailable() ||
|
||||||
(isSamsung && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
|
(isSamsung && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import android.content.BroadcastReceiver
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
import android.net.ConnectivityManager
|
|
||||||
import android.os.Binder
|
import android.os.Binder
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.os.PowerManager
|
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.model.Manga
|
||||||
import org.koitharu.kotatsu.core.prefs.AppSettings
|
import org.koitharu.kotatsu.core.prefs.AppSettings
|
||||||
import org.koitharu.kotatsu.download.domain.DownloadManager
|
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.ext.toArraySet
|
||||||
import org.koitharu.kotatsu.utils.progress.ProgressJob
|
import org.koitharu.kotatsu.utils.progress.ProgressJob
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
@@ -183,9 +183,8 @@ class DownloadService : BaseService() {
|
|||||||
.putExtra(ACTION_DOWNLOAD_CANCEL, startId)
|
.putExtra(ACTION_DOWNLOAD_CANCEL, startId)
|
||||||
|
|
||||||
private fun confirmDataTransfer(context: Context, callback: () -> Unit) {
|
private fun confirmDataTransfer(context: Context, callback: () -> Unit) {
|
||||||
val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
|
||||||
val settings = GlobalContext.get().get<AppSettings>()
|
val settings = GlobalContext.get().get<AppSettings>()
|
||||||
if (cm.isActiveNetworkMetered && settings.isTrafficWarningEnabled) {
|
if (context.connectivityManager.isActiveNetworkMetered && settings.isTrafficWarningEnabled) {
|
||||||
CheckBoxAlertDialog.Builder(context)
|
CheckBoxAlertDialog.Builder(context)
|
||||||
.setTitle(R.string.warning)
|
.setTitle(R.string.warning)
|
||||||
.setMessage(R.string.network_consumption_warning)
|
.setMessage(R.string.network_consumption_warning)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.koitharu.kotatsu.reader.domain
|
package org.koitharu.kotatsu.reader.domain
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import android.net.Uri
|
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.network.CommonHeaders
|
||||||
import org.koitharu.kotatsu.core.parser.MangaRepository
|
import org.koitharu.kotatsu.core.parser.MangaRepository
|
||||||
import org.koitharu.kotatsu.core.parser.RemoteMangaRepository
|
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.local.data.PagesCache
|
||||||
import org.koitharu.kotatsu.reader.ui.pager.ReaderPage
|
import org.koitharu.kotatsu.reader.ui.pager.ReaderPage
|
||||||
import org.koitharu.kotatsu.utils.ext.await
|
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.ext.mangaRepositoryOf
|
||||||
import org.koitharu.kotatsu.utils.progress.ProgressDeferred
|
import org.koitharu.kotatsu.utils.progress.ProgressDeferred
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -39,6 +42,8 @@ class PageLoader : KoinComponent, Closeable {
|
|||||||
|
|
||||||
private val okHttp = get<OkHttpClient>()
|
private val okHttp = get<OkHttpClient>()
|
||||||
private val cache = get<PagesCache>()
|
private val cache = get<PagesCache>()
|
||||||
|
private val settings = get<AppSettings>()
|
||||||
|
private val connectivityManager = get<Context>().connectivityManager
|
||||||
private val tasks = LongSparseArray<ProgressDeferred<File, Float>>()
|
private val tasks = LongSparseArray<ProgressDeferred<File, Float>>()
|
||||||
private val convertLock = Mutex()
|
private val convertLock = Mutex()
|
||||||
private var repository: MangaRepository? = null
|
private var repository: MangaRepository? = null
|
||||||
@@ -53,7 +58,7 @@ class PageLoader : KoinComponent, Closeable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun isPrefetchApplicable(): Boolean {
|
fun isPrefetchApplicable(): Boolean {
|
||||||
return repository is RemoteMangaRepository
|
return repository is RemoteMangaRepository && settings.isPagesPreloadAllowed(connectivityManager)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun prefetch(pages: List<ReaderPage>) {
|
fun prefetch(pages: List<ReaderPage>) {
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
|||||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
|
|
||||||
|
val Context.connectivityManager: ConnectivityManager
|
||||||
|
get() = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
|
|
||||||
suspend fun ConnectivityManager.waitForNetwork(): Network {
|
suspend fun ConnectivityManager.waitForNetwork(): Network {
|
||||||
val request = NetworkRequest.Builder().build()
|
val request = NetworkRequest.Builder().build()
|
||||||
return suspendCancellableCoroutine<Network> { cont ->
|
return suspendCancellableCoroutine<Network> { cont ->
|
||||||
|
|||||||
@@ -29,4 +29,9 @@
|
|||||||
<item>@string/screenshots_block_nsfw</item>
|
<item>@string/screenshots_block_nsfw</item>
|
||||||
<item>@string/screenshots_block_all</item>
|
<item>@string/screenshots_block_all</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
<string-array name="network_policy">
|
||||||
|
<item>@string/always</item>
|
||||||
|
<item>@string/only_using_wifi</item>
|
||||||
|
<item>@string/never</item>
|
||||||
|
</string-array>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -25,4 +25,9 @@
|
|||||||
<item>block_nsfw</item>
|
<item>block_nsfw</item>
|
||||||
<item>block_all</item>
|
<item>block_all</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
<string-array name="values_network_policy">
|
||||||
|
<item>1</item>
|
||||||
|
<item>2</item>
|
||||||
|
<item>0</item>
|
||||||
|
</string-array>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -255,4 +255,8 @@
|
|||||||
<string name="screenshots_allow">Allow</string>
|
<string name="screenshots_allow">Allow</string>
|
||||||
<string name="screenshots_block_nsfw">Block on NSFW</string>
|
<string name="screenshots_block_nsfw">Block on NSFW</string>
|
||||||
<string name="screenshots_block_all">Block always</string>
|
<string name="screenshots_block_all">Block always</string>
|
||||||
|
<string name="never">Never</string>
|
||||||
|
<string name="only_using_wifi">Only using WiFi</string>
|
||||||
|
<string name="always">Always</string>
|
||||||
|
<string name="preload_pages">Preload pages</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -47,4 +47,13 @@
|
|||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
app:useSimpleSummaryProvider="true" />
|
app:useSimpleSummaryProvider="true" />
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
android:entries="@array/network_policy"
|
||||||
|
android:entryValues="@array/values_network_policy"
|
||||||
|
android:key="pages_preload"
|
||||||
|
android:title="@string/preload_pages"
|
||||||
|
app:defaultValue="2"
|
||||||
|
app:iconSpaceReserved="false"
|
||||||
|
app:useSimpleSummaryProvider="true" />
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
Reference in New Issue
Block a user