diff --git a/app/build.gradle b/app/build.gradle index 40a6012b..3ef68cce 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,7 +20,7 @@ android { minSdkVersion 16 targetSdkVersion 29 versionCode 57 - versionName "5.0-beta1" + versionName "5.0-beta2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true } diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index 259cfe2e..934c1e6a 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -12,7 +12,7 @@ "filters": [], "properties": [], "versionCode": 57, - "versionName": "5.0-beta1", + "versionName": "5.0-beta2", "enabled": true, "outputFile": "app-release.apk" } diff --git a/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt b/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt index 5e53a6f0..a7a5bdc3 100644 --- a/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt +++ b/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt @@ -138,7 +138,7 @@ class ReaderAdapter(private val activity: ReaderActivity, if (progress?.isInfinite() == true && image != null) { holder.view.reader_item_progressbar.visibility = View.INVISIBLE - holder.view.image.post { + CoroutineScope(Dispatchers.IO).launch { glide .load(image.readBytes()) .diskCacheStrategy(DiskCacheStrategy.NONE) @@ -155,16 +155,14 @@ class ReaderAdapter(private val activity: ReaderActivity, cache!!.metadata.imageList?.set(position, null) image.delete() DownloadService.cancel(holder.view.context, galleryID) - DownloadService.delete(holder.view.context, galleryID) + DownloadService.download(holder.view.context, galleryID, true) return true } override fun onResourceReady(resource: Drawable?, model: Any?, target: Target?, dataSource: DataSource?, isFirstResource: Boolean) = false - }) - .into(holder.view.image) + }).let { launch(Dispatchers.Main) { it.into(holder.view.image) } } } - } else { holder.view.reader_item_progressbar.visibility = View.VISIBLE 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 d22471d1..30b57157 100644 --- a/app/src/main/java/xyz/quaver/pupil/services/DownloadService.kt +++ b/app/src/main/java/xyz/quaver/pupil/services/DownloadService.kt @@ -103,7 +103,7 @@ class DownloadService : Service() { @SuppressLint("RestrictedApi") private fun notify(galleryID: Int) { val max = progress[galleryID]?.size ?: 0 - val progress = progress[galleryID]?.count { it.isInfinite() } ?: 0 + val progress = progress[galleryID]?.count { it == Float.POSITIVE_INFINITY } ?: 0 val notification = notification[galleryID] ?: return @@ -196,7 +196,7 @@ class DownloadService : Service() { */ val progress = SparseArray?>() - fun isCompleted(galleryID: Int) = progress[galleryID]?.toList()?.all { it.isInfinite() } == true + fun isCompleted(galleryID: Int) = progress[galleryID]?.toList()?.all { it == Float.POSITIVE_INFINITY } == true private val callback = object: Callback { @@ -308,10 +308,10 @@ class DownloadService : Service() { } if (progress.indexOfKey(galleryID) < 0) - progress.put(galleryID, mutableListOf()) + progress.put(galleryID, MutableList(reader.galleryInfo.files.size) { 0F }) - cache.metadata.imageList?.forEach { - progress[galleryID]?.add(if (it != null) Float.POSITIVE_INFINITY else 0F) + cache.metadata.imageList?.forEachIndexed { index, image -> + progress[galleryID]?.set(index, if (image != null) Float.POSITIVE_INFINITY else 0F) } notification[galleryID]?.setContentTitle(reader.galleryInfo.title?.ellipsize(30)) diff --git a/app/src/main/java/xyz/quaver/pupil/ui/dialog/DownloadLocationDialogFragment.kt b/app/src/main/java/xyz/quaver/pupil/ui/dialog/DownloadLocationDialogFragment.kt index 6e56e7e3..48776320 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/dialog/DownloadLocationDialogFragment.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/dialog/DownloadLocationDialogFragment.kt @@ -146,7 +146,7 @@ class DownloadLocationDialogFragment : DialogFragment() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) context.contentResolver.takePersistableUriPermission(uri, takeFlags) - if (FileX(context, uri).canWrite()) + if (kotlin.runCatching { FileX(context, uri).canWrite() }.getOrDefault(false)) Preferences["download_folder"] = uri.toString() else { Snackbar.make( 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 d19f7186..8dc8b271 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 @@ -66,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))) + getContext()?.startActivity(Intent.createChooser(it, getString(R.string.settings_backup_share))) } } }) 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 4557c8c6..2364f76e 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 @@ -91,7 +91,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc } if (dir.exists()) - dir.listFiles()?.forEach { (it as FileX).deleteRecursively() } + dir.listFiles()?.forEach { (it as? FileX)?.deleteRecursively() } job = launch { var size = 0L 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 54479db4..64ab2585 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 @@ -113,6 +113,7 @@ class DownloadManager private constructor(context: Context) : ContextWrapper(con downloadFolderMap[galleryID] = folder.name + downloadFolder.getChild(".download").let { if (!it.exists()) it.createNewFile() } downloadFolder.getChild(".download").writeText(Json.encodeToString(downloadFolderMap)) } @@ -126,6 +127,7 @@ class DownloadManager private constructor(context: Context) : ContextWrapper(con downloadFolder.getChild(it).delete() downloadFolderMap.remove(galleryID) + downloadFolder.getChild(".download").let { if (!it.exists()) it.createNewFile() } downloadFolder.getChild(".download").writeText(Json.encodeToString(downloadFolderMap)) } } 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 10e8653f..669e3dac 100644 --- a/app/src/main/java/xyz/quaver/pupil/util/update.kt +++ b/app/src/main/java/xyz/quaver/pupil/util/update.kt @@ -189,7 +189,7 @@ fun checkUpdate(context: Context, force: Boolean = false) { } } -fun restore(favorites: GalleryList, url: String, onFailure: ((Exception) -> Unit)? = null, onSuccess: ((List) -> Unit)? = null) { +fun restore(favorites: GalleryList, url: String, onFailure: ((Throwable) -> Unit)? = null, onSuccess: ((List) -> Unit)? = null) { if (!URLUtil.isValidUrl(url)) { onFailure?.invoke(IllegalArgumentException()) return @@ -206,10 +206,12 @@ fun restore(favorites: GalleryList, url: String, onFailure: ((Exception) -> Unit } override fun onResponse(call: Call, response: Response) { - Json.decodeFromString>(response.body().use { it?.string() } ?: "[]").let { - favorites.addAll(it) - onSuccess?.invoke(it) - } + kotlin.runCatching { + Json.decodeFromString>(response.body().use { it?.string() } ?: "[]").let { + favorites.addAll(it) + onSuccess?.invoke(it) + } + }.onFailure { onFailure?.invoke(it) } } }) }