From 37be8ccf7f143fec5715b098e532834e193614a6 Mon Sep 17 00:00:00 2001 From: tom5079 Date: Wed, 2 Sep 2020 20:15:26 +0900 Subject: [PATCH] Bug fix --- app/build.gradle | 2 +- app/proguard-rules.pro | 1 + app/src/main/java/xyz/quaver/pupil/Pupil.kt | 8 ++ .../pupil/reciever/UpdateBroadcastReciever.kt | 2 +- .../ui/fragment/ManageStorageFragment.kt | 81 ++++++++++++------- .../java/xyz/quaver/pupil/util/Preferences.kt | 2 +- .../pupil/util/downloader/DownloadManager.kt | 1 + .../main/java/xyz/quaver/pupil/util/misc.kt | 17 ++-- .../main/java/xyz/quaver/pupil/util/update.kt | 6 +- app/src/main/res/values-ja/strings.xml | 2 - app/src/main/res/values-ko/strings.xml | 2 - app/src/main/res/values/strings.xml | 3 - 12 files changed, 76 insertions(+), 51 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 9309a624..76cba508 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -99,7 +99,7 @@ dependencies { implementation ("xyz.quaver:libpupil:1.3") { exclude group: 'org.jetbrains.kotlinx', module: 'kotlinx-serialization-core-jvm' } - implementation "xyz.quaver:documentfilex:0.2.11" + implementation "xyz.quaver:documentfilex:0.2.13" testImplementation 'junit:junit:4.13' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test:rules:1.3.0' diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index a4e83a1d..435a6fc1 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -21,6 +21,7 @@ #-renamesourcefileattribute SourceFile -dontobfuscate +-dontoptimize -keep public class * implements com.bumptech.glide.module.GlideModule -keep class * extends com.bumptech.glide.module.AppGlideModule { diff --git a/app/src/main/java/xyz/quaver/pupil/Pupil.kt b/app/src/main/java/xyz/quaver/pupil/Pupil.kt index eead367e..7c53b38d 100644 --- a/app/src/main/java/xyz/quaver/pupil/Pupil.kt +++ b/app/src/main/java/xyz/quaver/pupil/Pupil.kt @@ -23,6 +23,8 @@ import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context +import android.content.Intent +import android.net.Uri import android.os.Build import androidx.appcompat.app.AppCompatDelegate import androidx.core.content.ContextCompat @@ -95,6 +97,12 @@ class Pupil : Application() { try { Preferences.get("download_folder").also { + if (Build.VERSION.SDK_INT > 19) + contentResolver.takePersistableUriPermission( + Uri.parse(it), + Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION + ) + if (!FileX(this, it).canWrite()) throw Exception() } diff --git a/app/src/main/java/xyz/quaver/pupil/reciever/UpdateBroadcastReciever.kt b/app/src/main/java/xyz/quaver/pupil/reciever/UpdateBroadcastReciever.kt index c06fdc09..705de974 100644 --- a/app/src/main/java/xyz/quaver/pupil/reciever/UpdateBroadcastReciever.kt +++ b/app/src/main/java/xyz/quaver/pupil/reciever/UpdateBroadcastReciever.kt @@ -44,7 +44,7 @@ class UpdateBroadcastReciever : BroadcastReceiver() { val downloadID: Long = Preferences["update_download_id"] val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager - if (intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1) != downloadID) + if (intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -2) != downloadID) return // Get target uri diff --git a/app/src/main/java/xyz/quaver/pupil/ui/fragment/ManageStorageFragment.kt b/app/src/main/java/xyz/quaver/pupil/ui/fragment/ManageStorageFragment.kt index b3f929ed..9be3b2cf 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/fragment/ManageStorageFragment.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/fragment/ManageStorageFragment.kt @@ -24,9 +24,13 @@ import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import kotlinx.coroutines.launch +import xyz.quaver.io.FileX +import xyz.quaver.io.util.deleteRecursively import xyz.quaver.pupil.R import xyz.quaver.pupil.histories +import xyz.quaver.pupil.util.byteToString import xyz.quaver.pupil.util.downloader.DownloadManager import xyz.quaver.pupil.util.getDownloadDirectory import java.io.BufferedReader @@ -35,22 +39,14 @@ import java.io.InputStreamReader class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenceClickListener { + private var job: Job? = null + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.manage_storage_preferences, rootKey) initPreferences() } - private fun getDirSize(dir: File) : String { - return context?.getString(R.string.settings_storage_usage, - Runtime.getRuntime().exec("du -hs " + dir.canonicalPath).let { - BufferedReader(InputStreamReader(it.inputStream)).use { reader -> - reader.readLine()?.split('\t')?.firstOrNull() ?: "0" - } - } - ) ?: "" - } - override fun onPreferenceClick(preference: Preference?): Boolean { with(preference) { this ?: return false @@ -66,12 +62,15 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc if (dir.exists()) dir.deleteRecursively() - summary = getString(R.string.settings_storage_usage_loading) - + summary = getString(R.string.settings_storage_usage, byteToString(0)) CoroutineScope(Dispatchers.IO).launch { - getDirSize(dir).let { + var size = 0L + + dir.walk().forEach { + size += it.length() + launch(Dispatchers.Main) { - this@with.summary = it + summary = getString(R.string.settings_storage_usage, byteToString(size)) } } } @@ -86,15 +85,27 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc setTitle(R.string.warning) setMessage(R.string.settings_clear_downloads_alert_message) setPositiveButton(android.R.string.yes) { _, _ -> - if (dir.exists()) - dir.deleteRecursively() - - summary = getString(R.string.settings_storage_usage_loading) - CoroutineScope(Dispatchers.IO).launch { - getDirSize(dir).let { + job?.cancel() + launch(Dispatchers.Main) { + summary = getString(R.string.settings_storage_usage_loading) + } + + if (dir.exists()) + dir.listFiles()?.forEach { (it as FileX).deleteRecursively() } + + job = launch { + var size = 0L + launch(Dispatchers.Main) { - this@with.summary = it + summary = getString(R.string.settings_storage_usage, byteToString(size)) + } + dir.walk().forEach { + size += it.length() + + launch(Dispatchers.Main) { + summary = getString(R.string.settings_storage_usage, byteToString(size)) + } } } } @@ -126,11 +137,15 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc val dir = File(requireContext().cacheDir, "imageCache") - summary = getString(R.string.settings_storage_usage_loading) + summary = getString(R.string.settings_storage_usage, byteToString(0)) CoroutineScope(Dispatchers.IO).launch { - getDirSize(dir).let { + var size = 0L + + dir.walk().forEach { + size += it.length() + launch(Dispatchers.Main) { - this@with.summary = it + summary = getString(R.string.settings_storage_usage, byteToString(size)) } } } @@ -143,12 +158,17 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc val dir = DownloadManager.getInstance(context).downloadFolder - summary = getString(R.string.settings_storage_usage_loading) - CoroutineScope(Dispatchers.IO).launch { - getDirSize(dir).let { + summary = getString(R.string.settings_storage_usage, byteToString(0)) + job?.cancel() + job = CoroutineScope(Dispatchers.IO).launch { + var size = 0L + + dir.walk().forEach { launch(Dispatchers.Main) { - this@with.summary = it + summary = getString(R.string.settings_storage_usage, byteToString(size)) } + + size += it.length() } } @@ -164,4 +184,9 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc } } + override fun onDestroy() { + job?.cancel() + super.onDestroy() + } + } \ No newline at end of file diff --git a/app/src/main/java/xyz/quaver/pupil/util/Preferences.kt b/app/src/main/java/xyz/quaver/pupil/util/Preferences.kt index 3256683d..1fce3dff 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/Preferences.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/Preferences.kt @@ -28,7 +28,7 @@ object Preferences: SharedPreferences by preferences { val defMap = mapOf( String::class to "", Int::class to -1, - Long::class to -1, + Long::class to -1L, Boolean::class to false, Set::class to emptySet() ) diff --git a/app/src/main/java/xyz/quaver/pupil/util/downloader/DownloadManager.kt b/app/src/main/java/xyz/quaver/pupil/util/downloader/DownloadManager.kt index 6cf27f85..2484567b 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/downloader/DownloadManager.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/downloader/DownloadManager.kt @@ -20,6 +20,7 @@ package xyz.quaver.pupil.util.downloader import android.content.Context import android.content.ContextWrapper +import android.util.Log import kotlinx.coroutines.runBlocking import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString diff --git a/app/src/main/java/xyz/quaver/pupil/util/misc.kt b/app/src/main/java/xyz/quaver/pupil/util/misc.kt index 55c7945d..c67a51bf 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/misc.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/misc.kt @@ -53,15 +53,15 @@ fun String.wordCapitalize() : String { return result.joinToString(" ") } -fun byteToString(byte: Long, precision : Int = 1) : String { +private val suffix = listOf( + "B", + "kB", + "MB", + "GB", + "TB" //really? +) - val suffix = listOf( - "B", - "kB", - "MB", - "GB", - "TB" //really? - ) +fun byteToString(byte: Long, precision : Int = 1) : String { var size = byte.toDouble(); var suffixIndex = 0 while (size >= 1024) { @@ -70,7 +70,6 @@ fun byteToString(byte: Long, precision : Int = 1) : String { } return "%.${precision}f ${suffix[suffixIndex]}".format(size) - } /** diff --git a/app/src/main/java/xyz/quaver/pupil/util/update.kt b/app/src/main/java/xyz/quaver/pupil/util/update.kt index df894253..23b0b95f 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/update.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/update.kt @@ -138,13 +138,11 @@ fun checkUpdate(context: Context, force: Boolean = false) { setMessage(Markwon.create(context).toMarkdown(msg)) setPositiveButton(android.R.string.yes) { _, _ -> - val preference = PreferenceManager.getDefaultSharedPreferences(context) - val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager //Cancel any download queued before - val id = preference.getLong("update_download_id", -1) + val id: Long = Preferences["update_download_id"] if (id != -1L) downloadManager.remove(id) @@ -158,7 +156,7 @@ fun checkUpdate(context: Context, force: Boolean = false) { .setDestinationUri(Uri.fromFile(target)) downloadManager.enqueue(request).also { - preference.edit().putLong("update_download_id", it).apply() + Preferences["update_download_id"] = it } } setNegativeButton(if (force) android.R.string.no else R.string.ignore_update) { _, _ -> diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index a87f5870..c545a42f 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -49,8 +49,6 @@ 現ページ番号: %1$d\nページ数: %2$d hitomi.laに接続できません %1$dページへ移動 - (Korean only) - (Korean only) ダウンロード削除 ダウンロードしたギャラリーを全て削除します。\n実行しますか? ミラーサーバからイメージをロード diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 67f88eff..b0fb5fd0 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -48,8 +48,6 @@ 현재 페이지: %1$d\n페이지 수: %2$d hitomi.la에 연결할 수 없습니다 %1$d 페이지로 이동 - 접속 불가 현상 안내 - 최근 https 차단으로 접속이 안 되는 경우가 발생하고 있습니다 이 경우 플레이스토어에서 Intra앱을 이용하시면 정상이용이 가능합니다. 다운로드 삭제 다운로드 된 만화를 모두 삭제합니다.\n계속하시겠습니까? 즐겨찾기 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 12182e71..22749684 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -21,9 +21,6 @@ Warning - (Korean only) - (Korean only) - Ignore Download