diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 00000000..3825b2b3
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index b0632847..3b427b6b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -20,7 +20,7 @@ android {
minSdkVersion 16
targetSdkVersion 29
versionCode 57
- versionName "4.19-hotfix2"
+ versionName "4.20"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
vectorDrawables.useSupportLibrary = true
diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json
index ed7fe73e..4abe6098 100644
--- a/app/release/output-metadata.json
+++ b/app/release/output-metadata.json
@@ -12,7 +12,7 @@
"filters": [],
"properties": [],
"versionCode": 57,
- "versionName": "4.19-hotfix2",
+ "versionName": "4.20",
"enabled": true,
"outputFile": "app-release.apk"
}
diff --git a/app/src/androidTest/java/xyz/quaver/pupil/ExampleInstrumentedTest.kt b/app/src/androidTest/java/xyz/quaver/pupil/ExampleInstrumentedTest.kt
index b3661f2f..b3609476 100644
--- a/app/src/androidTest/java/xyz/quaver/pupil/ExampleInstrumentedTest.kt
+++ b/app/src/androidTest/java/xyz/quaver/pupil/ExampleInstrumentedTest.kt
@@ -21,7 +21,6 @@
package xyz.quaver.pupil
import android.util.Log
-import androidx.core.content.ContextCompat
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.rule.ActivityTestRule
@@ -36,6 +35,8 @@ import xyz.quaver.hiyobi.user_agent
import xyz.quaver.pupil.ui.LockActivity
import xyz.quaver.pupil.util.download.Cache
import xyz.quaver.pupil.util.download.DownloadWorker
+import xyz.quaver.pupil.util.getDownloadDirectory
+import java.io.InputStreamReader
import java.net.URL
import javax.net.ssl.HttpsURLConnection
@@ -58,8 +59,10 @@ class ExampleInstrumentedTest {
val activityTestRule = ActivityTestRule(LockActivity::class.java)
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
- ContextCompat.getExternalFilesDirs(appContext, null).forEachIndexed { index, file ->
- Log.i("PUPILD", "$index: ${file?.absolutePath}")
+ Runtime.getRuntime().exec("du -hs " + getDownloadDirectory(appContext)).let {
+ InputStreamReader(it.inputStream).readLines().forEach { res ->
+ Log.i("PUPILD", res)
+ }
}
}
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 12b46b9b..992037a4 100644
--- a/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt
+++ b/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt
@@ -98,6 +98,7 @@ class MainActivity : AppCompatActivity() {
setText(query, TextView.BufferType.EDITABLE)
}
}
+ private var queryStack = mutableListOf()
private var mode = Mode.SEARCH
private var sortMode = SortMode.NEWEST
@@ -159,11 +160,12 @@ class MainActivity : AppCompatActivity() {
initView()
}
+ @OptIn(ExperimentalStdlibApi::class)
override fun onBackPressed() {
when {
main_drawer_layout.isDrawerOpen(GravityCompat.START) -> main_drawer_layout.closeDrawer(GravityCompat.START)
- query.isNotEmpty() -> runOnUiThread {
- query = ""
+ queryStack.removeLastOrNull() != null && queryStack.isNotEmpty() -> runOnUiThread {
+ query = queryStack.last()
cancelFetch()
clearGalleries()
@@ -278,6 +280,7 @@ class MainActivity : AppCompatActivity() {
clearGalleries()
currentPage = 0
query = ""
+ queryStack.clear()
mode = Mode.SEARCH
fetchGalleries(query, sortMode)
loadBlocks()
@@ -287,6 +290,7 @@ class MainActivity : AppCompatActivity() {
clearGalleries()
currentPage = 0
query = ""
+ queryStack.clear()
mode = Mode.HISTORY
fetchGalleries(query, sortMode)
loadBlocks()
@@ -296,6 +300,7 @@ class MainActivity : AppCompatActivity() {
clearGalleries()
currentPage = 0
query = ""
+ queryStack.clear()
mode = Mode.DOWNLOAD
fetchGalleries(query, sortMode)
loadBlocks()
@@ -305,6 +310,7 @@ class MainActivity : AppCompatActivity() {
clearGalleries()
currentPage = 0
query = ""
+ queryStack.clear()
mode = Mode.FAVORITE
fetchGalleries(query, sortMode)
loadBlocks()
@@ -377,13 +383,24 @@ class MainActivity : AppCompatActivity() {
if (it?.isEmpty() == false) {
val galleryID = it.random()
- val intent = Intent(this@MainActivity, ReaderActivity::class.java).apply {
- putExtra("galleryID", galleryID)
- }
+ GalleryDialog(
+ this@MainActivity,
+ Glide.with(this@MainActivity),
+ galleryID
+ ).apply {
+ onChipClickedHandler.add {
+ runOnUiThread {
+ query = it.toQuery()
+ currentPage = 0
- startActivity(intent)
-
- histories.add(galleryID)
+ cancelFetch()
+ clearGalleries()
+ fetchGalleries(query, sortMode)
+ loadBlocks()
+ }
+ dismiss()
+ }
+ }.show()
}
}
}
@@ -979,6 +996,11 @@ class MainActivity : AppCompatActivity() {
val preference = PreferenceManager.getDefaultSharedPreferences(this)
val defaultQuery = preference.getString("default_query", "")!!
+ if (query != queryStack.lastOrNull()) {
+ queryStack.remove(query)
+ queryStack.add(query)
+ }
+
galleryIDs = null
if (galleryIDs?.isActive == true)
diff --git a/app/src/main/java/xyz/quaver/pupil/ui/fragment/SettingsFragment.kt b/app/src/main/java/xyz/quaver/pupil/ui/fragment/SettingsFragment.kt
index d975355d..0fa2e68b 100644
--- a/app/src/main/java/xyz/quaver/pupil/ui/fragment/SettingsFragment.kt
+++ b/app/src/main/java/xyz/quaver/pupil/ui/fragment/SettingsFragment.kt
@@ -33,6 +33,9 @@ import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager
import com.google.android.material.snackbar.Snackbar
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
import net.rdrei.android.dirchooser.DirectoryChooserActivity
import net.rdrei.android.dirchooser.DirectoryChooserConfig
import xyz.quaver.pupil.Pupil
@@ -44,7 +47,9 @@ import xyz.quaver.pupil.ui.dialog.DownloadLocationDialog
import xyz.quaver.pupil.ui.dialog.MirrorDialog
import xyz.quaver.pupil.ui.dialog.ProxyDialog
import xyz.quaver.pupil.util.*
+import java.io.BufferedReader
import java.io.File
+import java.io.InputStreamReader
class SettingsFragment :
@@ -74,9 +79,13 @@ class SettingsFragment :
}
private fun getDirSize(dir: File) : String {
- val size = dir.walk().map { it.length() }.sum()
-
- return getString(R.string.settings_clear_summary, byteToString(size))
+ return getString(R.string.settings_storage_usage,
+ Runtime.getRuntime().exec("du -hs " + dir.absolutePath).let {
+ BufferedReader(InputStreamReader(it.inputStream)).use { reader ->
+ reader.readLine().split('\t').firstOrNull() ?: "0"
+ }
+ }
+ )
}
override fun onPreferenceClick(preference: Preference?): Boolean {
@@ -97,7 +106,13 @@ class SettingsFragment :
if (dir.exists())
dir.deleteRecursively()
- summary = getDirSize(dir)
+ CoroutineScope(Dispatchers.IO).launch {
+ summary = getString(R.string.settings_storage_usage_loading)
+
+ launch(Dispatchers.Main) {
+ this@with.summary = getDirSize(dir)
+ }
+ }
}
setNegativeButton(android.R.string.no) { _, _ -> }
}.show()
@@ -112,7 +127,13 @@ class SettingsFragment :
if (dir.exists())
dir.deleteRecursively()
- summary = getDirSize(dir)
+ CoroutineScope(Dispatchers.IO).launch {
+ summary = getString(R.string.settings_storage_usage_loading)
+
+ launch(Dispatchers.Main) {
+ this@with.summary = getDirSize(dir)
+ }
+ }
}
setNegativeButton(android.R.string.no) { _, _ -> }
}.show()
@@ -276,13 +297,27 @@ class SettingsFragment :
}
"delete_cache" -> {
val dir = File(requireContext().cacheDir, "imageCache")
- summary = getDirSize(dir)
+
+ CoroutineScope(Dispatchers.IO).launch {
+ summary = getString(R.string.settings_storage_usage_loading)
+
+ launch(Dispatchers.Main) {
+ this@with.summary = getDirSize(dir)
+ }
+ }
onPreferenceClickListener = this@SettingsFragment
}
"delete_downloads" -> {
val dir = getDownloadDirectory(requireContext())
- summary = getDirSize(dir)
+
+ CoroutineScope(Dispatchers.IO).launch {
+ summary = getString(R.string.settings_storage_usage_loading)
+
+ launch(Dispatchers.Main) {
+ this@with.summary = getDirSize(dir)
+ }
+ }
onPreferenceClickListener = this@SettingsFragment
}
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 9a0f825e..a05a6391 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -9,7 +9,8 @@
ギャラリー検索
キャッシュクリア
キャッシュをクリアするとイメージのロード速度に影響を与えます。実行しますか?
- サイズ: %s
+ %s使用中
+ ストレージ使用量読み込み中…
デフォルトキーワード
一回にロードするギャラリー数
検索設定
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 4c065d0b..6b8ec322 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -8,7 +8,8 @@
기본 검색어
캐시 정리하기
캐시를 정리하면 이미지 로딩속도가 느려질 수 있습니다. 계속하시겠습니까?
- 사용량: %s
+ %s 사용중
+ 저장공간 사용량 계산 중…
한 번에 로드할 갤러리 수
검색 설정
설정
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f1765704..f23b1e29 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -142,9 +142,10 @@
Storage
+ Currently using %s
+ Calculating storage usage…
Clear cache
Deleting cache can affect image loading speed. Do you want to continue?
- Currently using %s
Clear downloads
Delete all downloaded galleries.\nDo you want to continue?
Clear history