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")