This commit is contained in:
tom5079
2020-09-04 07:51:55 +09:00
parent be64703d3c
commit 5ec67488eb
8 changed files with 44 additions and 34 deletions

View File

@@ -20,7 +20,7 @@ android {
minSdkVersion 16 minSdkVersion 16
targetSdkVersion 29 targetSdkVersion 29
versionCode 57 versionCode 57
versionName "5.0-alpha2" versionName "5.0-alpha3"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
} }

View File

@@ -12,7 +12,7 @@
"filters": [], "filters": [],
"properties": [], "properties": [],
"versionCode": 57, "versionCode": 57,
"versionName": "5.0-alpha2", "versionName": "5.0-alpha3",
"enabled": true, "enabled": true,
"outputFile": "app-release.apk" "outputFile": "app-release.apk"
} }

View File

@@ -53,19 +53,21 @@ class UpdateBroadcastReceiver : BroadcastReceiver() {
.setFilterById(downloadID) .setFilterById(downloadID)
val uri = downloadManager.query(query).use { cursor -> val uri = downloadManager.query(query).use { cursor ->
cursor.moveToFirst() if (cursor.moveToFirst()) {
cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)).let { cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)).let {
val uri = Uri.parse(it) val uri = Uri.parse(it)
when (uri.scheme) { when (uri.scheme) {
"file" -> "file" ->
FileProvider.getUriForFile(context, context.applicationContext.packageName + ".provider", File(uri.path!!)) FileProvider.getUriForFile(context, context.applicationContext.packageName + ".provider", File(uri.path!!)
)
"content" -> uri "content" -> uri
else -> return else -> null
}
} }
} }
} else
null
} ?: return
// Build Notification // Build Notification

View File

@@ -240,21 +240,25 @@ class DownloadService : Service() {
} }
} }
fun cancel() { fun cancel(startId: Int? = null) {
client.dispatcher().queuedCalls().filter { client.dispatcher().queuedCalls().filter {
it.request().tag() is Tag it.request().tag() is Tag
}.forEach { }.forEach {
(it.request().tag() as? Tag)?.startId?.let { stopSelf(it) }
it.cancel() it.cancel()
} }
client.dispatcher().runningCalls().filter { client.dispatcher().runningCalls().filter {
it.request().tag() is Tag it.request().tag() is Tag
}.forEach { }.forEach {
(it.request().tag() as? Tag)?.startId?.let { stopSelf(it) }
it.cancel() it.cancel()
} }
progress.clear() progress.clear()
notification.clear() notification.clear()
notificationManager.cancelAll() notificationManager.cancelAll()
startId?.let { stopSelf(it) }
} }
fun cancel(galleryID: Int, startId: Int? = null) { fun cancel(galleryID: Int, startId: Int? = null) {
@@ -324,7 +328,7 @@ class DownloadService : Service() {
} }
} }
reader.requestBuilders.filterIndexed { index, _ -> !progress[galleryID]!![index].isInfinite() }.forEachIndexed { index, it -> reader.requestBuilders.filterIndexed { index, _ -> progress[galleryID]?.get(index)?.isInfinite() != true }.forEachIndexed { index, it ->
val request = it.tag(Tag(galleryID, index, startId)).build() val request = it.tag(Tag(galleryID, index, startId)).build()
client.newCall(request).enqueue(callback) client.newCall(request).enqueue(callback)
} }
@@ -374,7 +378,7 @@ class DownloadService : Service() {
COMMAND_DOWNLOAD -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0) COMMAND_DOWNLOAD -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0)
download(it, intent.getBooleanExtra(KEY_PRIORITY, false), startId) download(it, intent.getBooleanExtra(KEY_PRIORITY, false), startId)
} }
COMMAND_CANCEL -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0) cancel(it, startId) else cancel() } COMMAND_CANCEL -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0) cancel(it, startId) else cancel(startId = startId) }
COMMAND_DELETE -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0) delete(it, startId) } COMMAND_DELETE -> intent.getIntExtra(KEY_ID, -1).let { if (it > 0) delete(it, startId) }
} }

View File

@@ -819,7 +819,9 @@ class MainActivity : AppCompatActivity() {
val currentQuery = query.split(" ").last().replace('_', ' ') val currentQuery = query.split(" ").last().replace('_', ' ')
suggestionJob = CoroutineScope(Dispatchers.IO).launch { suggestionJob = CoroutineScope(Dispatchers.IO).launch {
val suggestions = ArrayList(getSuggestionsForQuery(currentQuery).map { TagSuggestion(it) }) val suggestions = kotlin.runCatching {
getSuggestionsForQuery(currentQuery).map { TagSuggestion(it) }.toMutableList()
}.getOrElse { mutableListOf() }
suggestions.filter { suggestions.filter {
val tag = "${it.n}:${it.s.replace(Regex("\\s"), "_")}" val tag = "${it.n}:${it.s.replace(Regex("\\s"), "_")}"

View File

@@ -28,7 +28,6 @@ import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import okhttp3.* import okhttp3.*
import xyz.quaver.pupil.Pupil
import xyz.quaver.pupil.R import xyz.quaver.pupil.R
import xyz.quaver.pupil.client import xyz.quaver.pupil.client
import xyz.quaver.pupil.favorites import xyz.quaver.pupil.favorites
@@ -45,12 +44,14 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() {
} }
private fun initPreferences() { private fun initPreferences() {
val context = context ?: return
findPreference<Preference>("backup")?.setOnPreferenceClickListener { findPreference<Preference>("backup")?.setOnPreferenceClickListener {
val request = Request.Builder() val request = Request.Builder()
.url(getString(R.string.backup_url)) .url(getString(R.string.backup_url))
.post( .post(
FormBody.Builder() FormBody.Builder()
.add("f:1", File(ContextCompat.getDataDir(requireContext()), "favorites.json").readText()) .add("f:1", File(ContextCompat.getDataDir(context), "favorites.json").readText())
.build() .build()
).build() ).build()
@@ -65,7 +66,7 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() {
type = "text/plain" type = "text/plain"
putExtra(Intent.EXTRA_TEXT, response.body()?.use { it.string() }?.replace("\n", "")) putExtra(Intent.EXTRA_TEXT, response.body()?.use { it.string() }?.replace("\n", ""))
}.let { }.let {
context?.startActivity(Intent.createChooser(it, getString(R.string.settings_backup_share))) context.startActivity(Intent.createChooser(it, getString(R.string.settings_backup_share)))
} }
} }
}) })
@@ -73,11 +74,11 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() {
true true
} }
findPreference<Preference>("restore")?.setOnPreferenceClickListener { findPreference<Preference>("restore")?.setOnPreferenceClickListener {
val editText = EditText(requireContext()).apply { val editText = EditText(context).apply {
setText(getString(R.string.backup_url), TextView.BufferType.EDITABLE) setText(getString(R.string.backup_url), TextView.BufferType.EDITABLE)
} }
AlertDialog.Builder(requireContext()) AlertDialog.Builder(context)
.setTitle(R.string.settings_restore_title) .setTitle(R.string.settings_restore_title)
.setView(editText) .setView(editText)
.setPositiveButton(android.R.string.ok) { _, _ -> .setPositiveButton(android.R.string.ok) { _, _ ->

View File

@@ -32,10 +32,7 @@ import xyz.quaver.pupil.R
import xyz.quaver.pupil.histories import xyz.quaver.pupil.histories
import xyz.quaver.pupil.util.byteToString import xyz.quaver.pupil.util.byteToString
import xyz.quaver.pupil.util.downloader.DownloadManager import xyz.quaver.pupil.util.downloader.DownloadManager
import xyz.quaver.pupil.util.getDownloadDirectory
import java.io.BufferedReader
import java.io.File import java.io.File
import java.io.InputStreamReader
class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenceClickListener { class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenceClickListener {
@@ -48,14 +45,16 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
} }
override fun onPreferenceClick(preference: Preference?): Boolean { override fun onPreferenceClick(preference: Preference?): Boolean {
val context = context ?: return false
with(preference) { with(preference) {
this ?: return false this ?: return false
when (key) { when (key) {
"delete_cache" -> { "delete_cache" -> {
val dir = File(requireContext().cacheDir, "imageCache") val dir = File(context.cacheDir, "imageCache")
AlertDialog.Builder(requireContext()).apply { AlertDialog.Builder(context).apply {
setTitle(R.string.warning) setTitle(R.string.warning)
setMessage(R.string.settings_clear_cache_alert_message) setMessage(R.string.settings_clear_cache_alert_message)
setPositiveButton(android.R.string.yes) { _, _ -> setPositiveButton(android.R.string.yes) { _, _ ->
@@ -81,7 +80,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
"delete_downloads" -> { "delete_downloads" -> {
val dir = DownloadManager.getInstance(context).downloadFolder val dir = DownloadManager.getInstance(context).downloadFolder
AlertDialog.Builder(requireContext()).apply { AlertDialog.Builder(context).apply {
setTitle(R.string.warning) setTitle(R.string.warning)
setMessage(R.string.settings_clear_downloads_alert_message) setMessage(R.string.settings_clear_downloads_alert_message)
setPositiveButton(android.R.string.yes) { _, _ -> setPositiveButton(android.R.string.yes) { _, _ ->
@@ -114,7 +113,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
}.show() }.show()
} }
"clear_history" -> { "clear_history" -> {
AlertDialog.Builder(requireContext()).apply { AlertDialog.Builder(context).apply {
setTitle(R.string.warning) setTitle(R.string.warning)
setMessage(R.string.settings_clear_history_alert_message) setMessage(R.string.settings_clear_history_alert_message)
setPositiveButton(android.R.string.yes) { _, _ -> setPositiveButton(android.R.string.yes) { _, _ ->
@@ -132,10 +131,12 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
} }
private fun initPreferences() { private fun initPreferences() {
val context = context ?: return
with(findPreference<Preference>("delete_cache")) { with(findPreference<Preference>("delete_cache")) {
this ?: return@with this ?: return@with
val dir = File(requireContext().cacheDir, "imageCache") val dir = File(context.cacheDir, "imageCache")
summary = getString(R.string.settings_storage_usage, byteToString(0)) summary = getString(R.string.settings_storage_usage, byteToString(0))
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {

View File

@@ -135,11 +135,11 @@ class Cache private constructor(context: Context, val galleryID: Int) : ContextW
suspend fun getThumbnail(): ByteArray? = suspend fun getThumbnail(): ByteArray? =
findFile(".thumbnail")?.readBytes() findFile(".thumbnail")?.readBytes()
?: getGalleryBlock()?.thumbnails?.firstOrNull()?.let { withContext(Dispatchers.IO) { ?: getGalleryBlock()?.thumbnails?.firstOrNull()?.let { withContext(Dispatchers.IO) {
kotlin.runCatching {
val request = Request.Builder() val request = Request.Builder()
.url(it) .url(it)
.build() .build()
kotlin.runCatching {
client.newCall(request).execute().body()?.use { it.bytes() } client.newCall(request).execute().body()?.use { it.bytes() }
}.getOrNull()?.also { kotlin.run { }.getOrNull()?.also { kotlin.run {
cacheFolder.getChild(".thumbnail").writeBytes(it) cacheFolder.getChild(".thumbnail").writeBytes(it)