diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 56883e31..35eb1ddf 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -2,6 +2,5 @@
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a880fd7e..16bf58e5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -21,7 +21,7 @@ android {
minSdkVersion 16
targetSdkVersion 30
versionCode 59
- versionName "5.0.1-hotfix2"
+ versionName "5.0.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
diff --git a/app/libs/recyclerviewfastscroller-release.aar b/app/libs/recyclerviewfastscroller-release.aar
index be33fec7..9b121127 100644
Binary files a/app/libs/recyclerviewfastscroller-release.aar and b/app/libs/recyclerviewfastscroller-release.aar differ
diff --git a/app/src/main/java/xyz/quaver/pupil/Pupil.kt b/app/src/main/java/xyz/quaver/pupil/Pupil.kt
index 32517aa6..ec25efa8 100644
--- a/app/src/main/java/xyz/quaver/pupil/Pupil.kt
+++ b/app/src/main/java/xyz/quaver/pupil/Pupil.kt
@@ -71,11 +71,9 @@ val client: OkHttpClient
class Pupil : Application() {
- init {
- AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
- }
-
override fun onCreate() {
+ AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
+
preferences = PreferenceManager.getDefaultSharedPreferences(this)
val userID = Preferences["user_id", ""].let { userID ->
diff --git a/app/src/main/java/xyz/quaver/pupil/adapters/GalleryBlockAdapter.kt b/app/src/main/java/xyz/quaver/pupil/adapters/GalleryBlockAdapter.kt
index 441cdcdc..c37d0003 100644
--- a/app/src/main/java/xyz/quaver/pupil/adapters/GalleryBlockAdapter.kt
+++ b/app/src/main/java/xyz/quaver/pupil/adapters/GalleryBlockAdapter.kt
@@ -20,6 +20,7 @@ package xyz.quaver.pupil.adapters
import android.content.Context
import android.graphics.drawable.Drawable
+import android.util.Log
import android.util.SparseBooleanArray
import android.view.LayoutInflater
import android.view.View
@@ -125,6 +126,8 @@ class GalleryBlockAdapter(private val glide: RequestManager, private val galleri
}
fun bind(galleryID: Int) {
+ val time = System.currentTimeMillis()
+
val cache = Cache.getInstance(view.context, galleryID)
val galleryBlock = cache.metadata.galleryBlock ?: return
@@ -219,13 +222,15 @@ class GalleryBlockAdapter(private val glide: RequestManager, private val galleri
}
galleryblock_tag_group.removeAllViews()
- galleryBlock.relatedTags.forEach {
- galleryblock_tag_group.addView(TagChip(context, Tag.parse(it)).apply {
- setOnClickListener { view ->
- for (callback in onChipClickedHandler)
- callback.invoke((view as TagChip).tag)
- }
- })
+ CoroutineScope(Dispatchers.Default).launch {
+ galleryBlock.relatedTags.forEach {
+ TagChip(context, Tag.parse(it)).apply {
+ setOnClickListener { view ->
+ for (callback in onChipClickedHandler)
+ callback.invoke((view as TagChip).tag)
+ }
+ }.let { launch(Dispatchers.Main) { galleryblock_tag_group.addView(it) } }
+ }
}
galleryblock_id.text = galleryBlock.id.toString()
@@ -274,6 +279,7 @@ class GalleryBlockAdapter(private val glide: RequestManager, private val galleri
galleryblock_tag_group.visibility = View.GONE
}
}
+ Log.i("PUPILD", "${System.currentTimeMillis() - time}")
}
}
class NextViewHolder(view: LinearLayout) : RecyclerView.ViewHolder(view)
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 d810642b..23dee9fe 100644
--- a/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt
+++ b/app/src/main/java/xyz/quaver/pupil/adapters/ReaderAdapter.kt
@@ -41,7 +41,6 @@ import xyz.quaver.hitomi.Reader
import xyz.quaver.hitomi.getReferer
import xyz.quaver.hitomi.imageUrlFromImage
import xyz.quaver.hiyobi.createImgList
-import xyz.quaver.io.util.readBytes
import xyz.quaver.pupil.BuildConfig
import xyz.quaver.pupil.R
import xyz.quaver.pupil.services.DownloadService
@@ -143,7 +142,7 @@ class ReaderAdapter(private val activity: ReaderActivity,
CoroutineScope(Dispatchers.IO).launch {
glide
- .load(image.readBytes())
+ .load(image.uri)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.apply {
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 6348dbb4..92d6a2ad 100644
--- a/app/src/main/java/xyz/quaver/pupil/services/DownloadService.kt
+++ b/app/src/main/java/xyz/quaver/pupil/services/DownloadService.kt
@@ -309,11 +309,25 @@ class DownloadService : Service() {
progress.put(galleryID, MutableList(reader.galleryInfo.files.size) { 0F })
- cache.metadata.imageList?.forEachIndexed { index, image ->
- progress[galleryID]?.set(index, if (image != null) Float.POSITIVE_INFINITY else 0F)
+ cache.metadata.imageList?.let {
+ if (progress[galleryID]?.size != it.size) {
+ cache.metadata.imageList?.filterNotNull()?.forEach { file ->
+ cache.findFile(file)?.delete()
+ }
+ cache.metadata.imageList = MutableList(reader.galleryInfo.files.size) { null }
+ return@let
+ }
+
+ it.forEachIndexed { index, image ->
+ progress[galleryID]?.set(index, if (image != null) Float.POSITIVE_INFINITY else 0F)
+ }
}
if (isCompleted(galleryID)) {
+ if (DownloadManager.getInstance(this@DownloadService)
+ .getDownloadFolder(galleryID) != null)
+ Cache.getInstance(this@DownloadService, galleryID).moveToDownload()
+
notificationManager.cancel(galleryID)
startId?.let { stopSelf(it) }
return@launch
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 3faf5282..8913ca8f 100644
--- a/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt
+++ b/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt
@@ -26,6 +26,7 @@ import android.text.InputType
import android.view.*
import android.widget.*
import androidx.appcompat.app.AlertDialog
+import androidx.appcompat.app.AppCompatDelegate
import androidx.cardview.widget.CardView
import androidx.core.view.GravityCompat
import com.arlib.floatingsearchview.FloatingSearchView
@@ -97,7 +98,9 @@ class MainActivity :
override fun onCreate(savedInstanceState: Bundle?) {
+ AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_main)
if (intent.action == Intent.ACTION_VIEW) {
intent.dataString?.let { url ->
@@ -111,8 +114,6 @@ class MainActivity :
}
}
- setContentView(R.layout.activity_main)
-
if (Preferences["download_folder", ""].isEmpty())
DownloadLocationDialogFragment().show(supportFragmentManager, "Download Location Dialog")
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 94f15db4..ada9f18c 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
@@ -200,24 +200,42 @@ class Cache private constructor(context: Context, val galleryID: Int) : ContextW
fun moveToDownload() = CoroutineScope(Dispatchers.IO).launch {
val downloadFolder = downloadFolder ?: return@launch
+ if (downloadFolder.getChild(".metadata").exists())
+ return@launch
+
metadata.imageList?.forEach { imageName ->
imageName ?: return@forEach
val target = downloadFolder.getChild(imageName)
val source = cacheFolder.getChild(imageName)
- if (!source.exists())
+ if (!source.exists() || target.exists())
return@forEach
kotlin.runCatching {
target.createNewFile()
- source.readBytes()?.let { target.writeBytes(it) }
+ target.outputStream()?.use { target -> source.inputStream()?.use { source ->
+ source.copyTo(target)
+ } }
+ }
+ }
+
+ val cacheThumbnail = cacheFolder.getChild(".thumbnail")
+ val downloadThumbnail = downloadFolder.getChild(".thumbnail")
+
+ if (cacheThumbnail.exists() && !downloadThumbnail.exists()) {
+ kotlin.runCatching {
+ downloadThumbnail.createNewFile()
+ downloadThumbnail.outputStream()?.use { target -> cacheThumbnail.inputStream()?.use { source ->
+ source.copyTo(target)
+ } }
+ cacheThumbnail.delete()
}
}
val cacheMetadata = cacheFolder.getChild(".metadata")
val downloadMetadata = downloadFolder.getChild(".metadata")
- if (cacheMetadata.exists()) {
+ if (cacheMetadata.exists() && !downloadMetadata.exists()) {
kotlin.runCatching {
downloadMetadata.createNewFile()
downloadMetadata.writeText(Json.encodeToString(metadata))
diff --git a/app/src/main/res/layout-v23/activity_main_content.xml b/app/src/main/res/layout-v23/activity_main_content.xml
index 35157a5a..78db4973 100644
--- a/app/src/main/res/layout-v23/activity_main_content.xml
+++ b/app/src/main/res/layout-v23/activity_main_content.xml
@@ -70,6 +70,8 @@
app:handleHasFixedSize="true"
app:handleHeight="72dp"
app:handleWidth="24dp"
+ app:disableTrack="true"
+ app:hideHandleAfter="1000"
app:trackMarginStart="64dp"
app:addLastItemPadding="true"
app:popupDrawable="@color/transparent">
diff --git a/app/src/main/res/layout/activity_main_content.xml b/app/src/main/res/layout/activity_main_content.xml
index f9487f70..210d502b 100644
--- a/app/src/main/res/layout/activity_main_content.xml
+++ b/app/src/main/res/layout/activity_main_content.xml
@@ -70,6 +70,8 @@
app:handleHasFixedSize="true"
app:handleHeight="72dp"
app:handleWidth="24dp"
+ app:disableTrack="true"
+ app:hideHandleAfter="1000"
app:trackMarginStart="64dp"
app:addLastItemPadding="true"
app:popupDrawable="@color/transparent">
diff --git a/app/src/main/res/layout/activity_reader.xml b/app/src/main/res/layout/activity_reader.xml
index 2b9de763..2e53a643 100644
--- a/app/src/main/res/layout/activity_reader.xml
+++ b/app/src/main/res/layout/activity_reader.xml
@@ -33,6 +33,8 @@
app:handleDrawable="@drawable/thumb"
app:handleHeight="72dp"
app:handleWidth="24dp"
+ app:disableTrack="true"
+ app:hideHandleAfter="1000"
app:handleHasFixedSize="true"
app:addLastItemPadding="true"
app:popupDrawable="@color/transparent">
diff --git a/app/src/main/res/layout/item_galleryblock.xml b/app/src/main/res/layout/item_galleryblock.xml
index 97548ccb..7d6a9f4f 100644
--- a/app/src/main/res/layout/item_galleryblock.xml
+++ b/app/src/main/res/layout/item_galleryblock.xml
@@ -25,7 +25,8 @@
android:layout_height="wrap_content"
android:layout_margin="8dp"
app:cardCornerRadius="8dp"
- android:clipChildren="true">
+ android:clipChildren="true"
+ tools:ignore="RtlHardcoded">
-
+ android:layout_height="wrap_content">
-
+ android:layout_height="4dp"
+ android:visibility="gone"
+ app:layout_constraintTop_toTopOf="parent"/>
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ android:background="@color/light_gray"
+ app:layout_constraintTop_toBottomOf="@id/barrier"
+ android:layout_margin="8dp"/>
-
+ android:layout_marginLeft="8dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginBottom="8dp"
+ app:layout_constraintTop_toBottomOf="@id/divider"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintLeft_toLeftOf="parent"/>
-
+
-
+
-
-
-
-
-
-
-
-
-
+