From bf2d82723be37044f94e31072c715cf6602951b6 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Wed, 16 Dec 2020 15:28:58 +0200 Subject: [PATCH] Refactor objects to classes --- .../kotatsu/base/ui/BaseBottomSheet.kt | 4 +- .../koitharu/kotatsu/core/ui/CrashActivity.kt | 2 +- .../kotatsu/details/ui/DetailsActivity.kt | 4 +- .../kotatsu/local/ui/LocalListViewModel.kt | 4 +- .../koitharu/kotatsu/reader/ui/PageLoader.kt | 1 - .../kotatsu/reader/ui/ReaderActivity.kt | 2 +- .../kotatsu/reader/ui/ReaderViewModel.kt | 2 +- .../settings/backup/BackupDialogFragment.kt | 2 +- .../kotatsu/utils/MediaStoreCompat.kt | 13 +++-- .../org/koitharu/kotatsu/utils/ShareHelper.kt | 12 ++--- .../org/koitharu/kotatsu/utils/UiUtils.kt | 52 ------------------- .../kotatsu/utils/progress/Progress.kt | 3 ++ 12 files changed, 25 insertions(+), 76 deletions(-) delete mode 100644 app/src/main/java/org/koitharu/kotatsu/utils/UiUtils.kt diff --git a/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseBottomSheet.kt b/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseBottomSheet.kt index 4d9d55049..1a522dfb0 100644 --- a/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseBottomSheet.kt +++ b/app/src/main/java/org/koitharu/kotatsu/base/ui/BaseBottomSheet.kt @@ -8,7 +8,7 @@ import android.view.ViewGroup import androidx.appcompat.app.AppCompatDialog import androidx.viewbinding.ViewBinding import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import org.koitharu.kotatsu.utils.UiUtils +import org.koitharu.kotatsu.R abstract class BaseBottomSheet : BottomSheetDialogFragment() { @@ -34,7 +34,7 @@ abstract class BaseBottomSheet : } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - return if (UiUtils.isTablet(requireContext())) { + return if (resources.getBoolean(R.bool.is_tablet)) { AppCompatDialog(context, theme) } else super.onCreateDialog(savedInstanceState) } diff --git a/app/src/main/java/org/koitharu/kotatsu/core/ui/CrashActivity.kt b/app/src/main/java/org/koitharu/kotatsu/core/ui/CrashActivity.kt index 5d7ecda66..4ea8222bf 100644 --- a/app/src/main/java/org/koitharu/kotatsu/core/ui/CrashActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/core/ui/CrashActivity.kt @@ -35,7 +35,7 @@ class CrashActivity : Activity(), View.OnClickListener { override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.action_share -> { - ShareHelper.shareText(this, binding.textView.text.toString() ?: return false) + ShareHelper(this).shareText(binding.textView.text.toString()) } else -> return super.onOptionsItemSelected(item) } diff --git a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsActivity.kt b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsActivity.kt index 5ae2f9e64..9896c8464 100644 --- a/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/details/ui/DetailsActivity.kt @@ -127,9 +127,9 @@ class DetailsActivity : BaseActivity(), R.id.action_share -> { viewModel.manga.value?.let { if (it.source == MangaSource.LOCAL) { - ShareHelper.shareCbz(this, Uri.parse(it.url).toFile()) + ShareHelper(this).shareCbz(Uri.parse(it.url).toFile()) } else { - ShareHelper.shareMangaLink(this, it) + ShareHelper(this).shareMangaLink(it) } } true diff --git a/app/src/main/java/org/koitharu/kotatsu/local/ui/LocalListViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/local/ui/LocalListViewModel.kt index 1f7394022..57b634678 100644 --- a/app/src/main/java/org/koitharu/kotatsu/local/ui/LocalListViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/local/ui/LocalListViewModel.kt @@ -75,8 +75,8 @@ class LocalListViewModel( fun importFile(uri: Uri) { launchLoadingJob { val contentResolver = context.contentResolver - withContext(Dispatchers.Default) { - val name = MediaStoreCompat.getName(contentResolver, uri) + withContext(Dispatchers.IO) { + val name = MediaStoreCompat(contentResolver).getName(uri) ?: throw IOException("Cannot fetch name from uri: $uri") if (!LocalMangaRepository.isFileSupported(name)) { throw UnsupportedFileException("Unsupported file on $uri") diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/PageLoader.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/PageLoader.kt index b671bce5a..08d20518f 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/PageLoader.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/PageLoader.kt @@ -24,7 +24,6 @@ class PageLoader( private val tasks = ArrayMap>() private val convertLock = Mutex() - @Suppress("BlockingMethodInNonBlockingContext") suspend fun loadFile(url: String, force: Boolean): File { if (!force) { cache[url]?.let { diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt index 707997915..8955303f0 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderActivity.kt @@ -283,7 +283,7 @@ class ReaderActivity : BaseFullscreenActivity(), Snackbar.make(binding.container, R.string.page_saved, Snackbar.LENGTH_LONG) .setAnchorView(binding.appbarBottom) .setAction(R.string.share) { - ShareHelper.shareImage(this, uri) + ShareHelper(this).shareImage(uri) }.show() } else { Snackbar.make(binding.container, R.string.error_occurred, Snackbar.LENGTH_SHORT) diff --git a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt index 0b610fb42..0e537dffc 100644 --- a/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt +++ b/app/src/main/java/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt @@ -154,7 +154,7 @@ class ReaderViewModel( response.contentDisposition, response.mimeType ) - MediaStoreCompat.insertImage(resolver, fileName) { + MediaStoreCompat(resolver).insertImage(fileName) { checkNotNull(response.body).byteStream().copyTo(it) } } diff --git a/app/src/main/java/org/koitharu/kotatsu/settings/backup/BackupDialogFragment.kt b/app/src/main/java/org/koitharu/kotatsu/settings/backup/BackupDialogFragment.kt index 2eb2e517c..f97d04d11 100644 --- a/app/src/main/java/org/koitharu/kotatsu/settings/backup/BackupDialogFragment.kt +++ b/app/src/main/java/org/koitharu/kotatsu/settings/backup/BackupDialogFragment.kt @@ -60,7 +60,7 @@ class BackupDialogFragment : AlertDialogFragment() { } private fun onBackupDone(file: File) { - ShareHelper.shareBackup(context ?: return, file) + ShareHelper(context ?: return).shareBackup(file) dismiss() } diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/MediaStoreCompat.kt b/app/src/main/java/org/koitharu/kotatsu/utils/MediaStoreCompat.kt index 40c8c033d..7bf07f4c2 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/MediaStoreCompat.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/MediaStoreCompat.kt @@ -11,10 +11,9 @@ import androidx.core.database.getStringOrNull import org.koitharu.kotatsu.BuildConfig import java.io.OutputStream -object MediaStoreCompat { +class MediaStoreCompat(private val contentResolver: ContentResolver) { fun insertImage( - resolver: ContentResolver, fileName: String, block: (OutputStream) -> Unit ): Uri? { @@ -34,26 +33,26 @@ object MediaStoreCompat { } var uri: Uri? = null try { - uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, cv) - resolver.openOutputStream(uri!!)?.use(block) + uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, cv) + contentResolver.openOutputStream(uri!!)?.use(block) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { cv.clear() cv.put(MediaStore.Images.Media.IS_PENDING, 0) - resolver.update(uri, cv, null, null) + contentResolver.update(uri, cv, null, null) } } catch (e: Exception) { if (BuildConfig.DEBUG) { e.printStackTrace() } uri?.let { - resolver.delete(it, null, null) + contentResolver.delete(it, null, null) } uri = null } return uri } - fun getName(contentResolver: ContentResolver, uri: Uri): String? = + fun getName(uri: Uri): String? = (if (uri.scheme == "content") { contentResolver.query(uri, null, null, null, null)?.use { if (it.moveToFirst()) { diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/ShareHelper.kt b/app/src/main/java/org/koitharu/kotatsu/utils/ShareHelper.kt index 47109dfc0..d5ccfdfc1 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/ShareHelper.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/ShareHelper.kt @@ -9,9 +9,9 @@ import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.model.Manga import java.io.File -object ShareHelper { +class ShareHelper(private val context: Context) { - fun shareMangaLink(context: Context, manga: Manga) { + fun shareMangaLink(manga: Manga) { val intent = Intent(Intent.ACTION_SEND) intent.type = "text/plain" intent.putExtra(Intent.EXTRA_TEXT, buildString { @@ -24,7 +24,7 @@ object ShareHelper { context.startActivity(shareIntent) } - fun shareCbz(context: Context, file: File) { + fun shareCbz(file: File) { val uri = FileProvider.getUriForFile(context, "${BuildConfig.APPLICATION_ID}.files", file) val intent = Intent(Intent.ACTION_SEND) intent.setDataAndType(uri, context.contentResolver.getType(uri)) @@ -34,7 +34,7 @@ object ShareHelper { context.startActivity(shareIntent) } - fun shareBackup(context: Context, file: File) { + fun shareBackup(file: File) { val uri = FileProvider.getUriForFile(context, "${BuildConfig.APPLICATION_ID}.files", file) val intent = Intent(Intent.ACTION_SEND) intent.setDataAndType(uri, context.contentResolver.getType(uri)) @@ -44,7 +44,7 @@ object ShareHelper { context.startActivity(shareIntent) } - fun shareImage(context: Context, uri: Uri) { + fun shareImage(uri: Uri) { val intent = Intent(Intent.ACTION_SEND) intent.setDataAndType(uri, context.contentResolver.getType(uri)) intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) @@ -52,7 +52,7 @@ object ShareHelper { context.startActivity(shareIntent) } - fun shareText(context: Context, text: String) { + fun shareText(text: String) { val intent = Intent(Intent.ACTION_SEND) intent.type = "text/plain" intent.putExtra(Intent.EXTRA_TEXT, text) diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/UiUtils.kt b/app/src/main/java/org/koitharu/kotatsu/utils/UiUtils.kt deleted file mode 100644 index 4118e1bb1..000000000 --- a/app/src/main/java/org/koitharu/kotatsu/utils/UiUtils.kt +++ /dev/null @@ -1,52 +0,0 @@ -package org.koitharu.kotatsu.utils - -import android.content.Context -import android.view.View -import androidx.recyclerview.widget.GridLayoutManager -import androidx.recyclerview.widget.RecyclerView -import org.koin.core.component.KoinComponent -import org.koin.core.component.get -import org.koitharu.kotatsu.R -import org.koitharu.kotatsu.core.prefs.AppSettings -import org.koitharu.kotatsu.utils.ext.measureWidth -import kotlin.math.abs -import kotlin.math.roundToInt - -object UiUtils : KoinComponent { - - fun resolveGridSpanCount(context: Context, width: Int = 0): Int { - val scaleFactor = get().gridSize / 100f - val cellWidth = context.resources.getDimension(R.dimen.preferred_grid_width) * scaleFactor - val screenWidth = (if (width <= 0) { - context.resources.displayMetrics.widthPixels - } else width).toDouble() - val estimatedCount = (screenWidth / cellWidth).roundToInt() - return estimatedCount.coerceAtLeast(2) - } - - fun isTablet(context: Context) = context.resources.getBoolean(R.bool.is_tablet) - - @Deprecated("Use MangaListSpanResolver") - object SpanCountResolver : View.OnLayoutChangeListener { - override fun onLayoutChange( - v: View?, left: Int, top: Int, right: Int, bottom: Int, - oldLeft: Int, oldTop: Int, oldRight: Int, oldBottom: Int - ) { - val rv = v as? RecyclerView ?: return - val width = abs(right - left) - if (width == 0) { - return - } - (rv.layoutManager as? GridLayoutManager)?.spanCount = - resolveGridSpanCount(rv.context, width) - } - - fun update(rv: RecyclerView) { - val width = rv.measureWidth() - if (width > 0) { - (rv.layoutManager as? GridLayoutManager)?.spanCount = - resolveGridSpanCount(rv.context, width) - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/org/koitharu/kotatsu/utils/progress/Progress.kt b/app/src/main/java/org/koitharu/kotatsu/utils/progress/Progress.kt index 44d01f33a..f6a181f35 100644 --- a/app/src/main/java/org/koitharu/kotatsu/utils/progress/Progress.kt +++ b/app/src/main/java/org/koitharu/kotatsu/utils/progress/Progress.kt @@ -16,4 +16,7 @@ data class Progress( TODO() } } + + val isIndeterminate: Boolean + get() = total <= 0 } \ No newline at end of file