From f4ce911de9292a6215f3dcbb73764dd9f1dc3a0c Mon Sep 17 00:00:00 2001 From: tom5079 Date: Tue, 16 Feb 2021 16:57:23 +0900 Subject: [PATCH] Pupil-112 [Feature request] Add the ability to manage the maximum parallel downloads Dependency update --- app/build.gradle | 32 +++++++++--------- app/src/main/java/xyz/quaver/pupil/Pupil.kt | 9 ++++- .../xyz/quaver/pupil/ui/dialog/ProxyDialog.kt | 2 +- .../pupil/ui/fragment/SettingsFragment.kt | 33 ++++++++++++++----- app/src/main/res/values-ja/strings.xml | 5 +-- app/src/main/res/values-ko/strings.xml | 5 +-- app/src/main/res/values/arrays.xml | 22 ++++++++++++- app/src/main/res/values/strings.xml | 12 ++++--- app/src/main/res/xml/root_preferences.xml | 28 ++++++++++++---- 9 files changed, 106 insertions(+), 42 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6704f213..5713a131 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -38,7 +38,7 @@ android { minSdkVersion 16 targetSdkVersion 30 versionCode 64 - versionName "5.1.7-hotfix1" + versionName "5.1.8-beta1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true } @@ -84,34 +84,34 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.1" implementation "androidx.appcompat:appcompat:1.2.0" - implementation "androidx.activity:activity-ktx:1.2.0-beta01" - implementation "androidx.fragment:fragment-ktx:1.3.0-beta01" + implementation "androidx.activity:activity-ktx:1.3.0-alpha02" + implementation "androidx.fragment:fragment-ktx:1.3.0" implementation "androidx.preference:preference-ktx:1.1.1" implementation "androidx.recyclerview:recyclerview:1.1.0" implementation "androidx.constraintlayout:constraintlayout:2.0.4" implementation "androidx.gridlayout:gridlayout:1.0.0" - implementation "androidx.biometric:biometric:1.0.1" - implementation "androidx.work:work-runtime-ktx:2.4.0" + implementation "androidx.biometric:biometric:1.1.0" + implementation "androidx.work:work-runtime-ktx:2.5.0" implementation "com.daimajia.swipelayout:library:1.2.0@aar" - implementation "com.google.android.material:material:1.3.0-alpha04" + implementation "com.google.android.material:material:1.3.0" - implementation "com.google.firebase:firebase-core:18.0.0" - implementation "com.google.firebase:firebase-analytics:18.0.0" - implementation "com.google.firebase:firebase-crashlytics:17.3.0" - implementation "com.google.firebase:firebase-perf:19.0.10" + implementation "com.google.firebase:firebase-core:18.0.2" + implementation "com.google.firebase:firebase-analytics:18.0.2" + implementation "com.google.firebase:firebase-crashlytics:17.3.1" + implementation "com.google.firebase:firebase-perf:19.1.0" implementation "com.google.android.gms:play-services-oss-licenses:17.0.0" - implementation "com.google.android.gms:play-services-mlkit-face-detection:16.1.1" + implementation "com.google.android.gms:play-services-mlkit-face-detection:16.1.4" implementation "com.github.clans:fab:1.6.4" //implementation "com.quiph.ui:recyclerviewfastscroller:0.2.1" - implementation 'com.github.piasy:BigImageViewer:1.6.7' - implementation 'com.github.piasy:FrescoImageLoader:1.6.7' - implementation 'com.github.piasy:FrescoImageViewFactory:1.6.7' + implementation 'com.github.piasy:BigImageViewer:1.7.0' + implementation 'com.github.piasy:FrescoImageLoader:1.7.0' + implementation 'com.github.piasy:FrescoImageViewFactory:1.7.0' //noinspection GradleDependency implementation "com.squareup.okhttp3:okhttp:$okhttp_version" @@ -126,9 +126,9 @@ dependencies { implementation "ru.noties.markwon:core:3.1.0" - implementation "xyz.quaver:libpupil:1.8.16" + implementation "xyz.quaver:libpupil:1.9.7" implementation "xyz.quaver:documentfilex:0.4-alpha02" - implementation "xyz.quaver:floatingsearchview:1.0.7" + implementation "xyz.quaver:floatingsearchview:1.1.1" testImplementation "junit:junit:4.13.1" androidTestImplementation "androidx.test.ext:junit:1.1.2" diff --git a/app/src/main/java/xyz/quaver/pupil/Pupil.kt b/app/src/main/java/xyz/quaver/pupil/Pupil.kt index ef94a08c..f479968e 100644 --- a/app/src/main/java/xyz/quaver/pupil/Pupil.kt +++ b/app/src/main/java/xyz/quaver/pupil/Pupil.kt @@ -26,6 +26,7 @@ import android.content.Context import android.content.Intent import android.net.Uri import android.os.Build +import android.util.Log import androidx.appcompat.app.AppCompatDelegate import androidx.core.content.ContextCompat import androidx.preference.PreferenceManager @@ -34,8 +35,8 @@ import com.github.piasy.biv.loader.fresco.FrescoImageLoader import com.google.android.gms.common.GooglePlayServicesNotAvailableException import com.google.android.gms.common.GooglePlayServicesRepairableException import com.google.android.gms.security.ProviderInstaller -import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.crashlytics.FirebaseCrashlytics +import okhttp3.Dispatcher import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.Response @@ -46,6 +47,7 @@ import xyz.quaver.pupil.util.downloader.DownloadManager import xyz.quaver.setClient import java.io.File import java.util.* +import java.util.concurrent.Executors import java.util.concurrent.TimeUnit import kotlin.reflect.KClass @@ -96,6 +98,11 @@ class Pupil : Application() { val tag = request.tag() ?: return@addInterceptor chain.proceed(request) interceptors[tag::class]?.invoke(chain) ?: chain.proceed(request) + }.apply { + (Preferences.get("max_concurrent_download").toIntOrNull() ?: 0).let { + if (it != 0) + dispatcher(Dispatcher(Executors.newFixedThreadPool(it))) + } } try { diff --git a/app/src/main/java/xyz/quaver/pupil/ui/dialog/ProxyDialog.kt b/app/src/main/java/xyz/quaver/pupil/ui/dialog/ProxyDialog.kt index c0d4a093..47b36601 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/dialog/ProxyDialog.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/dialog/ProxyDialog.kt @@ -45,7 +45,7 @@ class ProxyDialog(context: Context) : AlertDialog(context) { super.onCreate(savedInstanceState) binding = ProxyDialogBinding.inflate(layoutInflater) - setView(binding.root) + setContentView(binding.root) initView() } diff --git a/app/src/main/java/xyz/quaver/pupil/ui/fragment/SettingsFragment.kt b/app/src/main/java/xyz/quaver/pupil/ui/fragment/SettingsFragment.kt index bef1ec55..b574ef85 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/fragment/SettingsFragment.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/fragment/SettingsFragment.kt @@ -29,15 +29,20 @@ import com.google.android.gms.oss.licenses.OssLicensesMenuActivity import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import okhttp3.Dispatcher import xyz.quaver.io.FileX import xyz.quaver.io.util.getChild import xyz.quaver.pupil.R +import xyz.quaver.pupil.client +import xyz.quaver.pupil.clientBuilder +import xyz.quaver.pupil.clientHolder import xyz.quaver.pupil.ui.LockActivity import xyz.quaver.pupil.ui.SettingsActivity import xyz.quaver.pupil.ui.dialog.* import xyz.quaver.pupil.util.* import xyz.quaver.pupil.util.downloader.DownloadManager import java.util.* +import java.util.concurrent.Executors class SettingsFragment : PreferenceFragmentCompat(), @@ -168,6 +173,18 @@ class SettingsFragment : "download_folder_name" -> { summary = Preferences["download_folder_name", "[-id-] -title-"] } + "max_concurrent_download" -> { + val newValue = Preferences.get(key).toIntOrNull() ?: 0 + + if (newValue == 0) + clientBuilder.dispatcher(Dispatcher()) + else + clientBuilder.dispatcher((Dispatcher(Executors.newFixedThreadPool(newValue)))) + + clientHolder = null + client + } + else -> return } } } @@ -247,6 +264,14 @@ class SettingsFragment : onPreferenceClickListener = this@SettingsFragment } + "mirrors" -> { + onPreferenceClickListener = this@SettingsFragment + } + "proxy" -> { + summary = getProxyInfo().type.name + + onPreferenceClickListener = this@SettingsFragment + } "tag_translation" -> { this as ListPreference @@ -268,14 +293,6 @@ class SettingsFragment : onPreferenceChangeListener = this@SettingsFragment } - "mirrors" -> { - onPreferenceClickListener = this@SettingsFragment - } - "proxy" -> { - summary = getProxyInfo().type.name - - onPreferenceClickListener = this@SettingsFragment - } "dark_mode" -> { onPreferenceChangeListener = this@SettingsFragment } diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 117f470c..dba21464 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -151,9 +151,10 @@ この機器には前面カメラが装着されていません エラー キャッシュサイズ制限 - 制限なし + 制限なし タグ言語 Githubにて翻訳に参加できます - 並列ダウンロード + 並列ダウンロード アンドロイド11以上では外部からのアプリ内部空間接近が不可能です。ダウンロードフォルダを変更しますか? + ネットワーク \ No newline at end of file diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index bad91ff6..9cc2e9ca 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -151,9 +151,10 @@ 이 장치에는 전면 카메라가 없습니다 오류 캐시 크기 제한 - 무제한 + 무제한 태그 언어 Github에서 번역에 참여하세요 - 병렬 다운로드 + 병렬 다운로드 안드로이드 11 이상에서는 외부에서 현재 다운로드 폴더에 접근할 수 없습니다. 변경하시겠습니까? + 네트워크 \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index dfb2976b..2f211b43 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -70,7 +70,7 @@ - @string/settings_cache_unlimited + @string/unlimited 1G 2G 4G @@ -79,4 +79,24 @@ 32G + + 0 + 1 + 2 + 4 + 8 + 16 + 32 + + + + @string/unlimited + 1 + 2 + 4 + 8 + 16 + 32 + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e35614fe..ee76168c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -30,6 +30,8 @@ Ignore + Unlimited + Copied to clipboard Download @@ -166,7 +168,6 @@ Custom Location This folder is not writable. Please select another folder. Cache Limit - Unlimited Hide image from gallery Low quality images Load low quality images to improve load speed and data usage @@ -176,14 +177,17 @@ App lock App lock type + + Networking + Load images from mirrors + Proxy + Concurrent Download + Miscellaneous Tag Language - Concurrent Download Participate in translation on Github - Load images from mirrors - Proxy Turn pages Right-to-Left Enable security mode Enable security mode to make the screen invisible on recent app window diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml index 816c44b4..71936739 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -1,5 +1,6 @@ - + - - + app:title="@string/settings_networking"> + + + + + + + +