hotfix
This commit is contained in:
@@ -429,12 +429,7 @@ class MainActivity : AppCompatActivity() {
|
||||
CoroutineScope(Dispatchers.Default).launch {
|
||||
DownloadWorker.getInstance(context).cancel(galleryID)
|
||||
|
||||
var cache = Cache(context).getCachedGallery(galleryID)
|
||||
|
||||
while (cache != null) {
|
||||
cache.deleteRecursively()
|
||||
cache = Cache(context).getCachedGallery(galleryID)
|
||||
}
|
||||
Cache(context).getCachedGallery(galleryID).deleteRecursively()
|
||||
|
||||
histories.remove(galleryID)
|
||||
|
||||
@@ -969,11 +964,11 @@ class MainActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
Mode.DOWNLOAD -> {
|
||||
val downloads = getDownloadDirectory(this@MainActivity).listFiles().filter { file ->
|
||||
file.isDirectory && (file.name!!.toIntOrNull() != null) && file.findFile(".metadata") != null
|
||||
}.map {
|
||||
it.name!!.toInt()
|
||||
}
|
||||
val downloads = getDownloadDirectory(this@MainActivity).listFiles()?.filter { file ->
|
||||
file.isDirectory && (file.name.toIntOrNull() != null) && File(file, ".metadata").exists()
|
||||
}?.map {
|
||||
it.name.toInt()
|
||||
} ?: emptyList()
|
||||
|
||||
when {
|
||||
query.isEmpty() -> downloads.apply {
|
||||
|
||||
@@ -239,7 +239,7 @@ class ReaderActivity : AppCompatActivity() {
|
||||
queue.add(galleryID)
|
||||
}
|
||||
|
||||
timer.schedule(0, 1000) {
|
||||
timer.schedule(1000, 1000) {
|
||||
if (worker.progress.indexOfKey(galleryID) < 0) //loading
|
||||
return@schedule
|
||||
|
||||
@@ -296,6 +296,7 @@ class ReaderActivity : AppCompatActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
//addOnScrollListener((adapter as ReaderAdapter).preloader)
|
||||
addOnScrollListener(object: RecyclerView.OnScrollListener() {
|
||||
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
|
||||
super.onScrolled(recyclerView, dx, dy)
|
||||
|
||||
@@ -18,15 +18,15 @@
|
||||
|
||||
package xyz.quaver.pupil.ui
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.MenuItem
|
||||
import android.view.WindowManager
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.documentfile.provider.DocumentFile
|
||||
import androidx.preference.PreferenceManager
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import kotlinx.android.synthetic.main.settings_activity.*
|
||||
@@ -38,10 +38,7 @@ import xyz.quaver.pupil.Pupil
|
||||
import xyz.quaver.pupil.R
|
||||
import xyz.quaver.pupil.ui.fragment.LockFragment
|
||||
import xyz.quaver.pupil.ui.fragment.SettingsFragment
|
||||
import xyz.quaver.pupil.util.REQUEST_DOWNLOAD_FOLDER
|
||||
import xyz.quaver.pupil.util.REQUEST_DOWNLOAD_FOLDER_OLD
|
||||
import xyz.quaver.pupil.util.REQUEST_LOCK
|
||||
import xyz.quaver.pupil.util.REQUEST_RESTORE
|
||||
import xyz.quaver.pupil.util.*
|
||||
import java.io.File
|
||||
import java.nio.charset.Charset
|
||||
|
||||
@@ -124,16 +121,23 @@ class SettingsActivity : AppCompatActivity() {
|
||||
REQUEST_DOWNLOAD_FOLDER -> {
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
data?.data?.also { uri ->
|
||||
val takeFlags: Int = intent.flags and (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
|
||||
val takeFlags: Int =
|
||||
intent.flags and (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
|
||||
contentResolver.takePersistableUriPermission(uri, takeFlags)
|
||||
|
||||
if (DocumentFile.fromTreeUri(this, uri)?.canWrite() == false)
|
||||
Snackbar.make(settings, R.string.settings_dl_location_not_writable, Snackbar.LENGTH_LONG).show()
|
||||
val file = uri.toFile(this)
|
||||
|
||||
if (file?.canWrite() != true)
|
||||
Snackbar.make(
|
||||
settings,
|
||||
R.string.settings_dl_location_not_writable,
|
||||
Snackbar.LENGTH_LONG
|
||||
).show()
|
||||
else
|
||||
PreferenceManager.getDefaultSharedPreferences(this).edit()
|
||||
.putString("dl_location", uri.toString())
|
||||
.putString("dl_location", file.canonicalPath)
|
||||
.apply()
|
||||
}
|
||||
}
|
||||
@@ -143,14 +147,33 @@ class SettingsActivity : AppCompatActivity() {
|
||||
val directory = data?.getStringExtra(DirectoryChooserActivity.RESULT_SELECTED_DIR)!!
|
||||
|
||||
if (!File(directory).canWrite())
|
||||
Snackbar.make(settings, R.string.settings_dl_location_not_writable, Snackbar.LENGTH_LONG).show()
|
||||
Snackbar.make(
|
||||
settings,
|
||||
R.string.settings_dl_location_not_writable,
|
||||
Snackbar.LENGTH_LONG
|
||||
).show()
|
||||
else
|
||||
PreferenceManager.getDefaultSharedPreferences(this).edit()
|
||||
.putString("dl_location", Uri.fromFile(File(directory)).toString())
|
||||
.putString("dl_location", File(directory).canonicalPath)
|
||||
.apply()
|
||||
}
|
||||
}
|
||||
else -> super.onActivityResult(requestCode, resultCode, data)
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("InlinedApi")
|
||||
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
|
||||
when (requestCode) {
|
||||
REQUEST_WRITE_PERMISSION_AND_SAF -> {
|
||||
if (grantResults.firstOrNull() == PackageManager.PERMISSION_GRANTED) {
|
||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply {
|
||||
putExtra("android.content.extra.SHOW_ADVANCED", true)
|
||||
}
|
||||
|
||||
startActivityForResult(intent, REQUEST_DOWNLOAD_FOLDER)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,16 +18,18 @@
|
||||
|
||||
package xyz.quaver.pupil.ui.dialog
|
||||
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.app.Dialog
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.RadioButton
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.preference.PreferenceManager
|
||||
import kotlinx.android.synthetic.main.item_dl_location.view.*
|
||||
@@ -36,13 +38,15 @@ import net.rdrei.android.dirchooser.DirectoryChooserConfig
|
||||
import xyz.quaver.pupil.R
|
||||
import xyz.quaver.pupil.util.REQUEST_DOWNLOAD_FOLDER
|
||||
import xyz.quaver.pupil.util.REQUEST_DOWNLOAD_FOLDER_OLD
|
||||
import xyz.quaver.pupil.util.REQUEST_WRITE_PERMISSION_AND_SAF
|
||||
import xyz.quaver.pupil.util.byteToString
|
||||
import java.io.File
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
class DownloadLocationDialog(val activity: Activity) : AlertDialog(activity) {
|
||||
|
||||
private val preference = PreferenceManager.getDefaultSharedPreferences(context)
|
||||
private val buttons = mutableListOf<Pair<RadioButton, Uri?>>()
|
||||
private val buttons = mutableListOf<Pair<RadioButton, File?>>()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
val view = layoutInflater.inflate(R.layout.dialog_dl_location, null) as LinearLayout
|
||||
@@ -67,9 +71,9 @@ class DownloadLocationDialog(val activity: Activity) : AlertDialog(activity) {
|
||||
pair.first.isChecked = false
|
||||
}
|
||||
button.performClick()
|
||||
preference.edit().putString("dl_location", Uri.fromFile(dir).toString()).apply()
|
||||
preference.edit().putString("dl_location", dir.canonicalPath).apply()
|
||||
}
|
||||
buttons.add(button to Uri.fromFile(dir))
|
||||
buttons.add(button to dir)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -82,11 +86,16 @@ class DownloadLocationDialog(val activity: Activity) : AlertDialog(activity) {
|
||||
button.performClick()
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply {
|
||||
putExtra("android.content.extra.SHOW_ADVANCED", true)
|
||||
}
|
||||
|
||||
activity.startActivityForResult(intent, REQUEST_DOWNLOAD_FOLDER)
|
||||
if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
|
||||
ActivityCompat.requestPermissions(activity, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), REQUEST_WRITE_PERMISSION_AND_SAF)
|
||||
else {
|
||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply {
|
||||
putExtra("android.content.extra.SHOW_ADVANCED", true)
|
||||
}
|
||||
|
||||
activity.startActivityForResult(intent, REQUEST_DOWNLOAD_FOLDER)
|
||||
}
|
||||
|
||||
dismiss()
|
||||
} else { // Can't use SAF on old Androids!
|
||||
@@ -106,9 +115,9 @@ class DownloadLocationDialog(val activity: Activity) : AlertDialog(activity) {
|
||||
buttons.add(button to null)
|
||||
})
|
||||
|
||||
val pref = Uri.parse(preference.getString("dl_location", null))
|
||||
val pref = preference.getString("dl_location", null)
|
||||
val index = externalFilesDirs.indexOfFirst {
|
||||
Uri.fromFile(it).toString() == pref.toString()
|
||||
it.canonicalPath == pref
|
||||
}
|
||||
|
||||
if (index < 0)
|
||||
|
||||
@@ -24,7 +24,6 @@ import android.os.Bundle
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.documentfile.provider.DocumentFile
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceCategory
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
@@ -71,7 +70,7 @@ class SettingsFragment :
|
||||
}
|
||||
}
|
||||
|
||||
private fun getDirSize(dir: DocumentFile) : String {
|
||||
private fun getDirSize(dir: File) : String {
|
||||
val size = dir.walk().map { it.length() }.sum()
|
||||
|
||||
return getString(R.string.settings_clear_summary, byteToString(size))
|
||||
@@ -86,7 +85,7 @@ class SettingsFragment :
|
||||
checkUpdate(activity as SettingsActivity, true)
|
||||
}
|
||||
"delete_cache" -> {
|
||||
val dir = DocumentFile.fromFile(File(context.cacheDir, "imageCache"))
|
||||
val dir = File(context.cacheDir, "imageCache")
|
||||
|
||||
AlertDialog.Builder(context).apply {
|
||||
setTitle(R.string.warning)
|
||||
@@ -149,13 +148,8 @@ class SettingsFragment :
|
||||
}
|
||||
"backup" -> {
|
||||
File(ContextCompat.getDataDir(context), "favorites.json").copyTo(
|
||||
context,
|
||||
getDownloadDirectory(context).let {
|
||||
if (it.findFile("favorites.json") != null)
|
||||
it
|
||||
else
|
||||
it.createFile("null", "favorites.json")!!
|
||||
}
|
||||
File(getDownloadDirectory(context), "favorites.json"),
|
||||
true
|
||||
)
|
||||
|
||||
Snackbar.make(this@SettingsFragment.listView, R.string.settings_backup_snackbar, Snackbar.LENGTH_LONG)
|
||||
@@ -197,7 +191,7 @@ class SettingsFragment :
|
||||
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
|
||||
when (key) {
|
||||
"dl_location" -> {
|
||||
findPreference<Preference>(key)?.summary = getDownloadDirectory(context!!).uri.path
|
||||
findPreference<Preference>(key)?.summary = getDownloadDirectory(context!!).canonicalPath
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -228,7 +222,7 @@ class SettingsFragment :
|
||||
onPreferenceClickListener = this@SettingsFragment
|
||||
}
|
||||
"delete_cache" -> {
|
||||
val dir = DocumentFile.fromFile(File(context.cacheDir, "imageCache"))
|
||||
val dir = File(context.cacheDir, "imageCache")
|
||||
summary = getDirSize(dir)
|
||||
|
||||
onPreferenceClickListener = this@SettingsFragment
|
||||
@@ -246,7 +240,7 @@ class SettingsFragment :
|
||||
onPreferenceClickListener = this@SettingsFragment
|
||||
}
|
||||
"dl_location" -> {
|
||||
summary = getDownloadDirectory(context).uri.path
|
||||
summary = getDownloadDirectory(context).canonicalPath
|
||||
|
||||
onPreferenceClickListener = this@SettingsFragment
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user