diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index 4c7eefc2..f0683223 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -1,17 +1,17 @@
-
+
-
+
-
-
+
+
-
-
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 9420a532..b10aba0e 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -27,9 +27,12 @@
+
+
+
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 1e273c91..2d99ebf9 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -63,18 +63,18 @@ dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.aar"))))
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2-native-mt")
- implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2")
+ implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.1")
- implementation("androidx.compose.ui:ui:1.0.2")
- implementation("androidx.compose.ui:ui-tooling:1.0.2")
- implementation("androidx.compose.foundation:foundation:1.0.2")
- implementation("androidx.compose.material:material:1.0.2")
- implementation("androidx.compose.material:material-icons-core:1.0.2")
- implementation("androidx.compose.material:material-icons-extended:1.0.2")
- implementation("androidx.compose.runtime:runtime-livedata:1.0.2")
- implementation("androidx.compose.material:material-icons-extended:1.0.2")
- implementation("androidx.activity:activity-compose:1.3.1")
- implementation("androidx.navigation:navigation-compose:2.4.0-alpha09")
+ implementation("androidx.compose.ui:ui:1.0.5")
+ implementation("androidx.compose.ui:ui-tooling:1.0.5")
+ implementation("androidx.compose.foundation:foundation:1.0.5")
+ implementation("androidx.compose.material:material:1.0.5")
+ implementation("androidx.compose.material:material-icons-core:1.0.5")
+ implementation("androidx.compose.material:material-icons-extended:1.0.5")
+ implementation("androidx.compose.runtime:runtime-livedata:1.0.5")
+ implementation("androidx.compose.material:material-icons-extended:1.0.5")
+ implementation("androidx.activity:activity-compose:1.4.0")
+ implementation("androidx.navigation:navigation-compose:2.4.0-beta02")
implementation("com.google.accompanist:accompanist-flowlayout:0.16.1")
implementation("com.google.accompanist:accompanist-appcompat-theme:0.16.0")
@@ -83,27 +83,27 @@ dependencies {
implementation("io.coil-kt:coil-compose:1.3.2")
- implementation("io.ktor:ktor-client-core:1.6.3")
- implementation("io.ktor:ktor-client-okhttp:1.6.3")
- implementation("io.ktor:ktor-client-serialization:1.6.3")
+ implementation("io.ktor:ktor-client-core:1.6.5")
+ implementation("io.ktor:ktor-client-okhttp:1.6.5")
+ implementation("io.ktor:ktor-client-serialization:1.6.5")
- implementation("androidx.appcompat:appcompat:1.3.1")
- implementation("androidx.activity:activity-ktx:1.3.1")
- implementation("androidx.fragment:fragment-ktx:1.3.6")
+ implementation("androidx.appcompat:appcompat:1.4.0")
+ implementation("androidx.activity:activity-ktx:1.4.0")
+ implementation("androidx.fragment:fragment-ktx:1.4.0")
implementation("androidx.preference:preference-ktx:1.1.1")
implementation("androidx.recyclerview:recyclerview:1.2.1")
- implementation("androidx.constraintlayout:constraintlayout:2.1.0")
+ implementation("androidx.constraintlayout:constraintlayout:2.1.2")
implementation("androidx.gridlayout:gridlayout:1.0.0")
implementation("androidx.biometric:biometric:1.1.0")
- implementation("androidx.work:work-runtime-ktx:2.6.0")
- implementation("androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha07")
+ implementation("androidx.work:work-runtime-ktx:2.7.1")
+ implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.4.0")
implementation("androidx.room:room-runtime:2.3.0")
annotationProcessor("androidx.room:room-compiler:2.3.0")
kapt("androidx.room:room-compiler:2.3.0")
implementation("androidx.room:room-ktx:2.3.0")
- implementation("org.kodein.di:kodein-di-framework-compose:7.7.0")
+ implementation("org.kodein.di:kodein-di-framework-compose:7.9.0")
implementation("com.daimajia.swipelayout:library:1.2.0@aar")
@@ -120,11 +120,7 @@ dependencies {
//implementation("com.quiph.ui:recyclerviewfastscroller:0.2.1")
- implementation("com.github.piasy:BigImageViewer:1.8.1")
- implementation("com.github.piasy:FrescoImageLoader:1.8.1")
- implementation("com.github.piasy:FrescoImageViewFactory:1.8.1")
-
- implementation("org.jsoup:jsoup:1.14.1")
+ implementation("org.jsoup:jsoup:1.14.3")
implementation("com.tbuonomo:dotsindicator:4.2")
@@ -133,20 +129,21 @@ dependencies {
implementation("ru.noties.markwon:core:3.1.0")
- implementation("xyz.quaver:libpupil:2.1.6")
- implementation("xyz.quaver:documentfilex:0.6.1")
+ implementation("xyz.quaver:libpupil:2.1.11")
+ implementation("xyz.quaver:documentfilex:0.7.1")
implementation("xyz.quaver:floatingsearchview:1.1.7")
+ implementation("xyz.quaver:subsampledimage:0.0.1-alpha01-SNAPSHOT")
implementation("org.kodein.log:kodein-log:0.11.1")
- debugImplementation("com.squareup.leakcanary:leakcanary-android:2.6")
+ debugImplementation("com.squareup.leakcanary:leakcanary-android:2.7")
testImplementation("junit:junit:4.13.2")
- testImplementation("org.mockito:mockito-inline:3.12.4")
+ testImplementation("org.mockito:mockito-inline:4.1.0")
androidTestImplementation("androidx.test.ext:junit:1.1.3")
androidTestImplementation("androidx.test:rules:1.4.0")
androidTestImplementation("androidx.test:runner:1.4.0")
androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
- androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.1.0-alpha03")
+ androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.1.0-beta03")
}
\ No newline at end of file
diff --git a/app/src/main/java/xyz/quaver/pupil/Pupil.kt b/app/src/main/java/xyz/quaver/pupil/Pupil.kt
index b2d061a4..3d135de4 100644
--- a/app/src/main/java/xyz/quaver/pupil/Pupil.kt
+++ b/app/src/main/java/xyz/quaver/pupil/Pupil.kt
@@ -27,10 +27,7 @@ import android.content.Intent
import android.net.Uri
import android.os.Build
import androidx.appcompat.app.AppCompatDelegate
-import androidx.core.content.ContextCompat
import androidx.preference.PreferenceManager
-import com.github.piasy.biv.BigImageViewer
-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
@@ -117,8 +114,6 @@ class Pupil : Application(), DIAware {
e.printStackTrace()
}
- BigImageViewer.initialize(FrescoImageLoader.with(this))
-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
diff --git a/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt b/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt
deleted file mode 100644
index ac9504d7..00000000
--- a/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Pupil, Hitomi.la viewer for Android
- * Copyright (C) 2019 tom5079
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package xyz.quaver.pupil.adapters
-
-import android.content.Context
-import android.graphics.drawable.Animatable
-import android.net.Uri
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.view.ViewGroup.LayoutParams.MATCH_PARENT
-import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
-import android.widget.ImageView
-import androidx.core.content.ContextCompat
-import androidx.recyclerview.widget.DiffUtil
-import androidx.recyclerview.widget.ListAdapter
-import androidx.recyclerview.widget.RecyclerView
-import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView
-import com.facebook.drawee.backends.pipeline.Fresco
-import com.facebook.drawee.controller.BaseControllerListener
-import com.facebook.drawee.drawable.ScalingUtils
-import com.facebook.drawee.interfaces.DraweeController
-import com.facebook.drawee.view.SimpleDraweeView
-import com.facebook.imagepipeline.image.ImageInfo
-import com.github.piasy.biv.view.BigImageView
-import com.github.piasy.biv.view.ImageShownCallback
-import com.github.piasy.biv.view.ImageViewFactory
-import xyz.quaver.pupil.R
-import xyz.quaver.pupil.databinding.ReaderItemBinding
-import java.io.File
-import kotlin.math.roundToInt
-
-data class ReaderItem(
- val progress: Float,
- val image: Uri?
-)
-
-class ReaderAdapter : ListAdapter(ReaderItemDiffCallback()) {
- var onItemClickListener : (() -> (Unit))? = null
- var fullscreen = false
-
- inner class ViewHolder(private val binding: ReaderItemBinding) : RecyclerView.ViewHolder(binding.root) {
- init {
- with (binding.image) {
- setImageViewFactory(FrescoImageViewFactory().apply {
- updateView = { imageInfo ->
- if (!fullscreen) {
- binding.root.layoutParams.height = imageInfo.height
- layoutParams.height = imageInfo.height
-
- (mainView as? SimpleDraweeView)?.aspectRatio = imageInfo.width / imageInfo.height.toFloat()
- }
- }
- })
- setImageShownCallback(object: ImageShownCallback {
- override fun onMainImageShown() {
- binding.progressGroup.visibility = View.INVISIBLE
-
- binding.root.layoutParams.height = if (fullscreen)
- MATCH_PARENT
- else
- WRAP_CONTENT
- }
-
- override fun onThumbnailShown() {}
- })
-
- setFailureImage(ContextCompat.getDrawable(itemView.context, R.drawable.image_broken_variant))
- setOnClickListener {
- onItemClickListener?.invoke()
- }
- }
-
- binding.root.setOnClickListener {
- onItemClickListener?.invoke()
- }
-
- binding.readerItemProgressbar.max = 100
- }
-
- fun bind(position: Int) {
- recycle()
-
- binding.root.layoutParams.height = MATCH_PARENT
-
- binding.readerIndex.text = (position+1).toString()
-
- val (progress, image) = getItem(position)
-
- binding.progressGroup.visibility = View.VISIBLE
-
- if (image != null) {
- binding.root.background = null
- binding.image.showImage(image)
- } else {
- binding.root.setBackgroundResource(R.drawable.reader_item_boundary)
-
- if (progress == Float.NEGATIVE_INFINITY)
- binding.image.showImage(Uri.EMPTY)
- else
- binding.readerItemProgressbar.progress = progress.roundToInt()
- }
- }
-
- fun recycle() {
- binding.image.mainView.run {
- when (this) {
- is SubsamplingScaleImageView -> recycle()
- is SimpleDraweeView -> recycle()
- is ImageView -> setImageBitmap(null)
- }
- }
- }
- }
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
- return ViewHolder(ReaderItemBinding.inflate(LayoutInflater.from(parent.context), parent, false))
- }
-
- override fun onBindViewHolder(holder: ViewHolder, position: Int) {
- holder.bind(position)
- }
-
- override fun onViewRecycled(holder: ViewHolder) {
- super.onViewRecycled(holder)
- holder.recycle()
- }
-
-}
-
-class ReaderItemDiffCallback : DiffUtil.ItemCallback() {
- override fun areItemsTheSame(oldItem: ReaderItem, newItem: ReaderItem) =
- true
-
- override fun areContentsTheSame(oldItem: ReaderItem, newItem: ReaderItem) =
- oldItem == newItem
-}
-
-class FrescoImageViewFactory : ImageViewFactory() {
- var updateView: ((ImageInfo) -> Unit)? = null
-
- override fun createAnimatedImageView(
- context: Context, imageType: Int,
- initScaleType: Int
- ): View {
- val view = SimpleDraweeView(context)
- view.hierarchy.actualImageScaleType = scaleType(initScaleType)
- return view
- }
-
- override fun loadAnimatedContent(
- view: View, imageType: Int,
- imageFile: File
- ) {
- if (view is SimpleDraweeView) {
- val controller: DraweeController = Fresco.newDraweeControllerBuilder()
- .setOldController(view.controller)
- .setUri(Uri.parse("file://" + imageFile.absolutePath))
- .setAutoPlayAnimations(true)
- .setControllerListener(object: BaseControllerListener() {
- override fun onIntermediateImageSet(id: String?, imageInfo: ImageInfo?) {
- imageInfo?.let { updateView?.invoke(it) }
- }
-
- override fun onFinalImageSet(id: String?, imageInfo: ImageInfo?, animatable: Animatable?) {
- imageInfo?.let { updateView?.invoke(it) }
- }
- })
- .build()
- view.controller = controller
- }
- }
-
- override fun createThumbnailView(
- context: Context,
- scaleType: ImageView.ScaleType, willLoadFromNetwork: Boolean
- ): View {
- return if (willLoadFromNetwork) {
- val thumbnailView = SimpleDraweeView(context)
- thumbnailView.hierarchy.actualImageScaleType = scaleType(scaleType)
- thumbnailView
- } else {
- super.createThumbnailView(context, scaleType, false)
- }
- }
-
- override fun loadThumbnailContent(view: View, thumbnail: Uri) {
- if (view is SimpleDraweeView) {
- val controller: DraweeController = Fresco.newDraweeControllerBuilder()
- .setOldController(view.controller)
- .setUri(thumbnail)
- .build()
- view.controller = controller
- }
- }
-
- private fun scaleType(value: Int): ScalingUtils.ScaleType {
- return when (value) {
- BigImageView.INIT_SCALE_TYPE_CENTER -> ScalingUtils.ScaleType.CENTER
- BigImageView.INIT_SCALE_TYPE_CENTER_CROP -> ScalingUtils.ScaleType.CENTER_CROP
- BigImageView.INIT_SCALE_TYPE_CENTER_INSIDE -> ScalingUtils.ScaleType.CENTER_INSIDE
- BigImageView.INIT_SCALE_TYPE_FIT_END -> ScalingUtils.ScaleType.FIT_END
- BigImageView.INIT_SCALE_TYPE_FIT_START -> ScalingUtils.ScaleType.FIT_START
- BigImageView.INIT_SCALE_TYPE_FIT_XY -> ScalingUtils.ScaleType.FIT_XY
- BigImageView.INIT_SCALE_TYPE_FIT_CENTER -> ScalingUtils.ScaleType.FIT_CENTER
- else -> ScalingUtils.ScaleType.FIT_CENTER
- }
- }
-
- private fun scaleType(scaleType: ImageView.ScaleType): ScalingUtils.ScaleType {
- return when (scaleType) {
- ImageView.ScaleType.CENTER -> ScalingUtils.ScaleType.CENTER
- ImageView.ScaleType.CENTER_CROP -> ScalingUtils.ScaleType.CENTER_CROP
- ImageView.ScaleType.CENTER_INSIDE -> ScalingUtils.ScaleType.CENTER_INSIDE
- ImageView.ScaleType.FIT_END -> ScalingUtils.ScaleType.FIT_END
- ImageView.ScaleType.FIT_START -> ScalingUtils.ScaleType.FIT_START
- ImageView.ScaleType.FIT_XY -> ScalingUtils.ScaleType.FIT_XY
- ImageView.ScaleType.FIT_CENTER -> ScalingUtils.ScaleType.FIT_CENTER
- else -> ScalingUtils.ScaleType.FIT_CENTER
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailAdapter.kt b/app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailAdapter.kt
deleted file mode 100644
index 50a4e11b..00000000
--- a/app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailAdapter.kt
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Pupil, Hitomi.la viewer for Android
- * Copyright (C) 2019 tom5079
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package xyz.quaver.pupil.adapters
-
-import android.view.ViewGroup
-import androidx.recyclerview.widget.RecyclerView
-import com.facebook.drawee.drawable.ScalingUtils
-import com.facebook.drawee.view.SimpleDraweeView
-import xyz.quaver.pupil.R
-
-class ThumbnailAdapter(var thumbnails: List) : RecyclerView.Adapter() {
-
- class ViewHolder(val view: SimpleDraweeView) : RecyclerView.ViewHolder(view) {
-
- init {
- view.hierarchy.actualImageScaleType = ScalingUtils.ScaleType.FIT_CENTER
- }
-
- fun bind(image: String) {
- view.setImageURI(image)
- }
-
- fun clear() {
- view.controller = null
- }
- }
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
- return ViewHolder(SimpleDraweeView(parent.context).apply {
- layoutParams = ViewGroup.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- resources.getDimensionPixelSize(R.dimen.gallery_dialog_preview_height)
- )
- })
- }
-
- override fun onBindViewHolder(holder: ViewHolder, position: Int) {
- holder.bind(thumbnails[position])
- }
-
- override fun getItemCount() = thumbnails.size
-
- override fun onViewRecycled(holder: ViewHolder) {
- holder.clear()
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailPageAdapter.kt b/app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailPageAdapter.kt
deleted file mode 100644
index 46bb5efe..00000000
--- a/app/src/main/java/xyz/quaver/pupil/adapters/ThumbnailPageAdapter.kt
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Pupil, Hitomi.la viewer for Android
- * Copyright (C) 2020 tom5079
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package xyz.quaver.pupil.adapters
-
-import android.view.ViewGroup
-import androidx.recyclerview.widget.GridLayoutManager
-import androidx.recyclerview.widget.RecyclerView
-import kotlin.math.min
-
-class ThumbnailPageAdapter(private val thumbnails: List) : RecyclerView.Adapter() {
-
- class ViewHolder(val view: RecyclerView) : RecyclerView.ViewHolder(view)
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
- return ViewHolder(RecyclerView(parent.context).apply {
- this.layoutManager = GridLayoutManager(parent.context, 3)
- this.adapter = ThumbnailAdapter(listOf())
- layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
- })
- }
-
- override fun onBindViewHolder(holder: ViewHolder, position: Int) {
- (holder.view.adapter as ThumbnailAdapter).apply {
- thumbnails = this@ThumbnailPageAdapter.thumbnails.slice(9*position until min(9*position+9, this@ThumbnailPageAdapter.thumbnails.size))
- notifyDataSetChanged()
- }
- }
-
- override fun getItemCount() = if (thumbnails.isEmpty()) 0 else thumbnails.size/9 + if (thumbnails.size%9 != 0) 1 else 0
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/xyz/quaver/pupil/db/Database.kt b/app/src/main/java/xyz/quaver/pupil/db/Database.kt
index 6c5fce12..e9a2c8d9 100644
--- a/app/src/main/java/xyz/quaver/pupil/db/Database.kt
+++ b/app/src/main/java/xyz/quaver/pupil/db/Database.kt
@@ -6,7 +6,7 @@ import androidx.room.Room
import androidx.room.RoomDatabase
import org.kodein.di.*
-@Database(entities = [History::class, Bookmark::class], version = 1)
+@Database(entities = [History::class, Bookmark::class], version = 1, exportSchema = false)
abstract class AppDatabase : RoomDatabase() {
abstract fun historyDao(): HistoryDao
abstract fun bookmarkDao(): BookmarkDao
diff --git a/app/src/main/java/xyz/quaver/pupil/sources/Common.kt b/app/src/main/java/xyz/quaver/pupil/sources/Common.kt
index 57eefd11..d04464d2 100644
--- a/app/src/main/java/xyz/quaver/pupil/sources/Common.kt
+++ b/app/src/main/java/xyz/quaver/pupil/sources/Common.kt
@@ -21,9 +21,6 @@ package xyz.quaver.pupil.sources
import android.app.Application
import android.os.Parcelable
import androidx.compose.runtime.Composable
-import androidx.lifecycle.*
-import io.ktor.http.*
-import kotlinx.coroutines.*
import kotlinx.coroutines.channels.Channel
import kotlinx.parcelize.Parcelize
import org.kodein.di.*
diff --git a/app/src/main/java/xyz/quaver/pupil/sources/ImHentai.kt b/app/src/main/java/xyz/quaver/pupil/sources/ImHentai.kt
index 3733e6ef..b32d860c 100644
--- a/app/src/main/java/xyz/quaver/pupil/sources/ImHentai.kt
+++ b/app/src/main/java/xyz/quaver/pupil/sources/ImHentai.kt
@@ -19,11 +19,6 @@
package xyz.quaver.pupil.sources
import android.app.Application
-import io.ktor.client.*
-import io.ktor.client.features.*
-import io.ktor.client.features.get
-import io.ktor.client.request.*
-import io.ktor.client.statement.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.launch
diff --git a/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt b/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt
index 931bfdfc..e489af8e 100644
--- a/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt
+++ b/app/src/main/java/xyz/quaver/pupil/ui/ReaderActivity.kt
@@ -52,6 +52,7 @@ import org.kodein.di.DIAware
import org.kodein.di.android.closestDI
import org.kodein.log.LoggerFactory
import org.kodein.log.newLogger
+import xyz.quaver.graphics.subsampledimage.SubSampledImage
import xyz.quaver.pupil.R
import xyz.quaver.pupil.ui.composable.FloatingActionButtonState
import xyz.quaver.pupil.ui.composable.MultipleFloatingActionButton
@@ -134,29 +135,8 @@ class ReaderActivity : ComponentActivity(), DIAware {
verticalArrangement = Arrangement.spacedBy(32.dp)
) {
items(images) { image ->
- Image(
- modifier = Modifier.fillMaxWidth().heightIn(128.dp, 1000.dp),
- painter = rememberImagePainter(
- ImageRequest.Builder(this@ReaderActivity)
- .data(image)
- .headers(
- Headers.headersOf(
- *(source!!.getHeadersForImage(model.itemID.value!!, image).entries.fold(arrayOf()) { acc, entry ->
- acc + entry.key + entry.value
- })
- ).also {
- logger.debug {
- image
- }
- logger.debug {
- it.toString()
- }
- }
- )
- .transformations(BlurTransformation(this@ReaderActivity, 1f))
- .build()
- ),
- contentDescription = null
+ SubSampledImage(
+ modifier = Modifier.fillMaxWidth().heightIn(128.dp, 1000.dp)
)
}
}
diff --git a/app/src/main/java/xyz/quaver/pupil/ui/viewmodel/ReaderViewModel.kt b/app/src/main/java/xyz/quaver/pupil/ui/viewmodel/ReaderViewModel.kt
index bb1d0e1a..40250d1e 100644
--- a/app/src/main/java/xyz/quaver/pupil/ui/viewmodel/ReaderViewModel.kt
+++ b/app/src/main/java/xyz/quaver/pupil/ui/viewmodel/ReaderViewModel.kt
@@ -21,10 +21,7 @@ package xyz.quaver.pupil.ui.viewmodel
import android.app.Application
import android.content.Intent
-import android.net.Uri
-import androidx.constraintlayout.widget.ConstraintSet
import androidx.lifecycle.*
-import io.ktor.client.request.*
import kotlinx.coroutines.*
import org.kodein.di.DIAware
import org.kodein.di.android.x.closestDI
@@ -32,12 +29,10 @@ import org.kodein.di.direct
import org.kodein.di.instance
import org.kodein.log.LoggerFactory
import org.kodein.log.newLogger
-import xyz.quaver.pupil.adapters.ReaderItem
import xyz.quaver.pupil.db.AppDatabase
import xyz.quaver.pupil.db.Bookmark
import xyz.quaver.pupil.db.History
import xyz.quaver.pupil.sources.Source
-import xyz.quaver.pupil.util.notify
import xyz.quaver.pupil.util.source
@Suppress("UNCHECKED_CAST")
@@ -66,9 +61,6 @@ class ReaderViewModel(app: Application) : AndroidViewModel(app), DIAware {
private val _images = MutableLiveData>()
val images: LiveData> = _images
- private var _readerItems = MutableLiveData>()
- val readerItems = _readerItems as LiveData>
-
val isBookmarked = Transformations.switchMap(MediatorLiveData>().apply {
addSource(source) { source -> itemID.value?.let { itemID -> source to itemID } }
addSource(itemID) { itemID -> source.value?.let { source -> source to itemID } }
@@ -129,7 +121,7 @@ class ReaderViewModel(app: Application) : AndroidViewModel(app), DIAware {
viewModelScope.launch {
_images.postValue(withContext(Dispatchers.IO) {
source.images(itemID)
- }!!)
+ })
}
}
diff --git a/app/src/main/res/layout/gallery_dialog.xml b/app/src/main/res/layout/gallery_dialog.xml
index a48248f2..bdae3e64 100644
--- a/app/src/main/res/layout/gallery_dialog.xml
+++ b/app/src/main/res/layout/gallery_dialog.xml
@@ -39,24 +39,12 @@
android:layout_height="wrap_content"
android:padding="8dp">
-
-
@@ -67,7 +55,6 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/title"
- app:layout_constraintLeft_toRightOf="@id/cover"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"/>
@@ -83,7 +70,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintLeft_toRightOf="@id/cover"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"/>
diff --git a/app/src/main/res/layout/reader_activity.xml b/app/src/main/res/layout/reader_activity.xml
deleted file mode 100644
index ff8db4d1..00000000
--- a/app/src/main/res/layout/reader_activity.xml
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/reader_item.xml b/app/src/main/res/layout/reader_item.xml
deleted file mode 100644
index 885e44ad..00000000
--- a/app/src/main/res/layout/reader_item.xml
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index 0aaa4ad2..83b141a4 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -6,7 +6,7 @@ buildscript {
mavenCentral()
}
dependencies {
- classpath("com.android.tools.build:gradle:7.0.2")
+ classpath("com.android.tools.build:gradle:7.0.3")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.10")
classpath("org.jetbrains.kotlin:kotlin-android-extensions:1.5.21")
classpath("org.jetbrains.kotlin:kotlin-serialization:1.5.21")