From 5ec67488ebd2ca709c7a6da65c6bad2c76bc0a84 Mon Sep 17 00:00:00 2001 From: tom5079 Date: Fri, 4 Sep 2020 07:51:55 +0900 Subject: [PATCH] Bug fix --- app/build.gradle | 2 +- app/release/output-metadata.json | 2 +- .../pupil/receiver/UpdateBroadcastReceiver.kt | 24 ++++++++++--------- .../quaver/pupil/services/DownloadService.kt | 10 +++++--- .../java/xyz/quaver/pupil/ui/MainActivity.kt | 4 +++- .../ui/fragment/ManageFavoritesFragment.kt | 11 +++++---- .../ui/fragment/ManageStorageFragment.kt | 17 ++++++------- .../xyz/quaver/pupil/util/downloader/Cache.kt | 8 +++---- 8 files changed, 44 insertions(+), 34 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 83943779..698b5919 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,7 +20,7 @@ android { minSdkVersion 16 targetSdkVersion 29 versionCode 57 - versionName "5.0-alpha2" + versionName "5.0-alpha3" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true } diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 393815fe..a4d973e5 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -12,7 +12,7 @@ "filters": [], "properties": [], "versionCode": 57, - "versionName": "5.0-alpha2", + "versionName": "5.0-alpha3", "enabled": true, "outputFile": "app-release.apk" } diff --git a/app/src/main/java/xyz/quaver/pupil/receiver/UpdateBroadcastReceiver.kt b/app/src/main/java/xyz/quaver/pupil/receiver/UpdateBroadcastReceiver.kt index 1058b94c..badff65e 100644 --- a/app/src/main/java/xyz/quaver/pupil/receiver/UpdateBroadcastReceiver.kt +++ b/app/src/main/java/xyz/quaver/pupil/receiver/UpdateBroadcastReceiver.kt @@ -53,19 +53,21 @@ class UpdateBroadcastReceiver : BroadcastReceiver() { .setFilterById(downloadID) val uri = downloadManager.query(query).use { cursor -> - cursor.moveToFirst() + if (cursor.moveToFirst()) { + cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)).let { + val uri = Uri.parse(it) - cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)).let { - val uri = Uri.parse(it) - - when (uri.scheme) { - "file" -> - FileProvider.getUriForFile(context, context.applicationContext.packageName + ".provider", File(uri.path!!)) - "content" -> uri - else -> return + when (uri.scheme) { + "file" -> + FileProvider.getUriForFile(context, context.applicationContext.packageName + ".provider", File(uri.path!!) + ) + "content" -> uri + else -> null + } } - } - } + } else + null + } ?: return // Build Notification diff --git a/app/src/main/java/xyz/quaver/pupil/services/DownloadService.kt b/app/src/main/java/xyz/quaver/pupil/services/DownloadService.kt index 6b48ee52..d22471d1 100644 --- a/app/src/main/java/xyz/quaver/pupil/services/DownloadService.kt +++ b/app/src/main/java/xyz/quaver/pupil/services/DownloadService.kt @@ -240,21 +240,25 @@ class DownloadService : Service() { } } - fun cancel() { + fun cancel(startId: Int? = null) { client.dispatcher().queuedCalls().filter { it.request().tag() is Tag }.forEach { + (it.request().tag() as? Tag)?.startId?.let { stopSelf(it) } it.cancel() } client.dispatcher().runningCalls().filter { it.request().tag() is Tag }.forEach { + (it.request().tag() as? Tag)?.startId?.let { stopSelf(it) } it.cancel() } progress.clear() notification.clear() notificationManager.cancelAll() + + startId?.let { stopSelf(it) } } fun cancel(galleryID: Int, startId: Int? = null) { @@ -324,7 +328,7 @@ class DownloadService : Service() { } } - reader.requestBuilders.filterIndexed { index, _ -> !progress[galleryID]!![index].isInfinite() }.forEachIndexed { index, it -> + reader.requestBuilders.filterIndexed { index, _ -> progress[galleryID]?.get(index)?.isInfinite() != true }.forEachIndexed { index, it -> val request = it.tag(Tag(galleryID, index, startId)).build() client.newCall(request).enqueue(callback) } @@ -374,7 +378,7 @@ class DownloadService : Service() { COMMAND_DOWNLOAD -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0) download(it, intent.getBooleanExtra(KEY_PRIORITY, false), startId) } - COMMAND_CANCEL -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0) cancel(it, startId) else cancel() } + COMMAND_CANCEL -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0) cancel(it, startId) else cancel(startId = startId) } COMMAND_DELETE -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0) delete(it, startId) } } diff --git a/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt b/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt index f2032e85..5b359dc5 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt @@ -819,7 +819,9 @@ class MainActivity : AppCompatActivity() { val currentQuery = query.split(" ").last().replace('_', ' ') suggestionJob = CoroutineScope(Dispatchers.IO).launch { - val suggestions = ArrayList(getSuggestionsForQuery(currentQuery).map { TagSuggestion(it) }) + val suggestions = kotlin.runCatching { + getSuggestionsForQuery(currentQuery).map { TagSuggestion(it) }.toMutableList() + }.getOrElse { mutableListOf() } suggestions.filter { val tag = "${it.n}:${it.s.replace(Regex("\\s"), "_")}" diff --git a/app/src/main/java/xyz/quaver/pupil/ui/fragment/ManageFavoritesFragment.kt b/app/src/main/java/xyz/quaver/pupil/ui/fragment/ManageFavoritesFragment.kt index 8fc6b8b8..91b1aaae 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/fragment/ManageFavoritesFragment.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/fragment/ManageFavoritesFragment.kt @@ -28,7 +28,6 @@ import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import com.google.android.material.snackbar.Snackbar import okhttp3.* -import xyz.quaver.pupil.Pupil import xyz.quaver.pupil.R import xyz.quaver.pupil.client import xyz.quaver.pupil.favorites @@ -45,12 +44,14 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() { } private fun initPreferences() { + val context = context ?: return + findPreference("backup")?.setOnPreferenceClickListener { val request = Request.Builder() .url(getString(R.string.backup_url)) .post( FormBody.Builder() - .add("f:1", File(ContextCompat.getDataDir(requireContext()), "favorites.json").readText()) + .add("f:1", File(ContextCompat.getDataDir(context), "favorites.json").readText()) .build() ).build() @@ -65,7 +66,7 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() { type = "text/plain" putExtra(Intent.EXTRA_TEXT, response.body()?.use { it.string() }?.replace("\n", "")) }.let { - context?.startActivity(Intent.createChooser(it, getString(R.string.settings_backup_share))) + context.startActivity(Intent.createChooser(it, getString(R.string.settings_backup_share))) } } }) @@ -73,11 +74,11 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() { true } findPreference("restore")?.setOnPreferenceClickListener { - val editText = EditText(requireContext()).apply { + val editText = EditText(context).apply { setText(getString(R.string.backup_url), TextView.BufferType.EDITABLE) } - AlertDialog.Builder(requireContext()) + AlertDialog.Builder(context) .setTitle(R.string.settings_restore_title) .setView(editText) .setPositiveButton(android.R.string.ok) { _, _ -> 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 9be3b2cf..053ff484 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 @@ -32,10 +32,7 @@ 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 import java.io.File -import java.io.InputStreamReader class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenceClickListener { @@ -48,14 +45,16 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc } override fun onPreferenceClick(preference: Preference?): Boolean { + val context = context ?: return false + with(preference) { this ?: return false when (key) { "delete_cache" -> { - val dir = File(requireContext().cacheDir, "imageCache") + val dir = File(context.cacheDir, "imageCache") - AlertDialog.Builder(requireContext()).apply { + AlertDialog.Builder(context).apply { setTitle(R.string.warning) setMessage(R.string.settings_clear_cache_alert_message) setPositiveButton(android.R.string.yes) { _, _ -> @@ -81,7 +80,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc "delete_downloads" -> { val dir = DownloadManager.getInstance(context).downloadFolder - AlertDialog.Builder(requireContext()).apply { + AlertDialog.Builder(context).apply { setTitle(R.string.warning) setMessage(R.string.settings_clear_downloads_alert_message) setPositiveButton(android.R.string.yes) { _, _ -> @@ -114,7 +113,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc }.show() } "clear_history" -> { - AlertDialog.Builder(requireContext()).apply { + AlertDialog.Builder(context).apply { setTitle(R.string.warning) setMessage(R.string.settings_clear_history_alert_message) setPositiveButton(android.R.string.yes) { _, _ -> @@ -132,10 +131,12 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc } private fun initPreferences() { + val context = context ?: return + with(findPreference("delete_cache")) { this ?: return@with - val dir = File(requireContext().cacheDir, "imageCache") + val dir = File(context.cacheDir, "imageCache") summary = getString(R.string.settings_storage_usage, byteToString(0)) CoroutineScope(Dispatchers.IO).launch { diff --git a/app/src/main/java/xyz/quaver/pupil/util/downloader/Cache.kt b/app/src/main/java/xyz/quaver/pupil/util/downloader/Cache.kt index 91244422..a781980f 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/downloader/Cache.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/downloader/Cache.kt @@ -135,11 +135,11 @@ class Cache private constructor(context: Context, val galleryID: Int) : ContextW suspend fun getThumbnail(): ByteArray? = findFile(".thumbnail")?.readBytes() ?: getGalleryBlock()?.thumbnails?.firstOrNull()?.let { withContext(Dispatchers.IO) { - val request = Request.Builder() - .url(it) - .build() - kotlin.runCatching { + val request = Request.Builder() + .url(it) + .build() + client.newCall(request).execute().body()?.use { it.bytes() } }.getOrNull()?.also { kotlin.run { cacheFolder.getChild(".thumbnail").writeBytes(it)