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 1f9143cb..f2032e85 100644
--- a/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt
+++ b/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt
@@ -23,7 +23,6 @@ import android.app.Activity
import android.content.Intent
import android.graphics.drawable.Animatable
import android.net.Uri
-import android.os.Build
import android.os.Bundle
import android.text.*
import android.text.style.AlignmentSpan
@@ -51,16 +50,13 @@ import com.google.android.material.snackbar.Snackbar
import com.google.firebase.crashlytics.FirebaseCrashlytics
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_main_content.*
-import kotlinx.android.synthetic.main.settings_activity.*
import kotlinx.coroutines.*
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
-import net.rdrei.android.dirchooser.DirectoryChooserActivity
import xyz.quaver.hitomi.doSearch
import xyz.quaver.hitomi.getGalleryIDsFromNozomi
import xyz.quaver.hitomi.getSuggestionsForQuery
-import xyz.quaver.io.FileX
import xyz.quaver.pupil.R
import xyz.quaver.pupil.adapters.GalleryBlockAdapter
import xyz.quaver.pupil.favorites
@@ -68,7 +64,7 @@ import xyz.quaver.pupil.histories
import xyz.quaver.pupil.services.DownloadService
import xyz.quaver.pupil.types.TagSuggestion
import xyz.quaver.pupil.types.Tags
-import xyz.quaver.pupil.ui.dialog.DownloadLocationDialog
+import xyz.quaver.pupil.ui.dialog.DownloadLocationDialogFragment
import xyz.quaver.pupil.ui.dialog.GalleryDialog
import xyz.quaver.pupil.util.*
import xyz.quaver.pupil.util.downloader.Cache
@@ -151,7 +147,7 @@ class MainActivity : AppCompatActivity() {
setContentView(R.layout.activity_main)
if (Preferences["download_folder", ""].isEmpty())
- DownloadLocationDialog(this).show()
+ DownloadLocationDialogFragment().show(supportFragmentManager, "Download Location Dialog")
checkUpdate(this)
@@ -229,7 +225,6 @@ class MainActivity : AppCompatActivity() {
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- super.onActivityResult(requestCode, resultCode, data)
when(requestCode) {
R.id.request_settings.normalizeID() -> {
runOnUiThread {
@@ -243,40 +238,7 @@ class MainActivity : AppCompatActivity() {
if (resultCode != Activity.RESULT_OK)
finish()
}
- R.id.request_download_folder.normalizeID() -> {
- 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)
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
- contentResolver.takePersistableUriPermission(uri, takeFlags)
-
- if (FileX(this, uri).canWrite())
- Preferences["download_folder"] = uri.toString()
- else
- Snackbar.make(
- settings,
- R.string.settings_download_folder_not_writable,
- Snackbar.LENGTH_LONG
- ).show()
- }
- }
- }
- R.id.request_download_folder_old.normalizeID() -> {
- if (resultCode == DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED) {
- val directory = data?.getStringExtra(DirectoryChooserActivity.RESULT_SELECTED_DIR)!!
-
- if (!File(directory).canWrite())
- Snackbar.make(
- settings,
- R.string.settings_download_folder_not_writable,
- Snackbar.LENGTH_LONG
- ).show()
- else
- Preferences["download_folder"] = File(directory).canonicalPath
- }
- }
+ else -> super.onActivityResult(requestCode, resultCode, data)
}
}
diff --git a/app/src/main/java/xyz/quaver/pupil/ui/SettingsActivity.kt b/app/src/main/java/xyz/quaver/pupil/ui/SettingsActivity.kt
index cca9192d..131e4db9 100644
--- a/app/src/main/java/xyz/quaver/pupil/ui/SettingsActivity.kt
+++ b/app/src/main/java/xyz/quaver/pupil/ui/SettingsActivity.kt
@@ -114,40 +114,6 @@ class SettingsActivity : AppCompatActivity() {
}
}
}
- R.id.request_download_folder.normalizeID() -> {
- 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)
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
- contentResolver.takePersistableUriPermission(uri, takeFlags)
-
- if (FileX(this, uri).canWrite())
- Preferences["download_folder"] = uri.toString()
- else
- Snackbar.make(
- settings,
- R.string.settings_download_folder_not_writable,
- Snackbar.LENGTH_LONG
- ).show()
- }
- }
- }
- R.id.request_download_folder_old.normalizeID() -> {
- if (resultCode == DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED) {
- val directory = data?.getStringExtra(DirectoryChooserActivity.RESULT_SELECTED_DIR)!!
-
- if (!File(directory).canWrite())
- Snackbar.make(
- settings,
- R.string.settings_download_folder_not_writable,
- Snackbar.LENGTH_LONG
- ).show()
- else
- Preferences["download_folder"] = File(directory).canonicalPath
- }
- }
else -> super.onActivityResult(requestCode, resultCode, data)
}
}
diff --git a/app/src/main/java/xyz/quaver/pupil/ui/dialog/DownloadFolderNameDialogFragment.kt b/app/src/main/java/xyz/quaver/pupil/ui/dialog/DownloadFolderNameDialogFragment.kt
new file mode 100644
index 00000000..fd00ab12
--- /dev/null
+++ b/app/src/main/java/xyz/quaver/pupil/ui/dialog/DownloadFolderNameDialogFragment.kt
@@ -0,0 +1,74 @@
+/*
+ * 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.ui.dialog
+
+import android.annotation.SuppressLint
+import android.app.Dialog
+import android.os.Bundle
+import android.view.View
+import android.view.ViewGroup
+import androidx.core.widget.addTextChangedListener
+import androidx.fragment.app.DialogFragment
+import com.google.android.material.snackbar.Snackbar
+import kotlinx.android.synthetic.main.dialog_download_folder_name.view.*
+import kotlinx.coroutines.runBlocking
+import xyz.quaver.pupil.R
+import xyz.quaver.pupil.util.Preferences
+import xyz.quaver.pupil.util.downloader.Cache
+import xyz.quaver.pupil.util.formatDownloadFolder
+import xyz.quaver.pupil.util.formatDownloadFolderTest
+import xyz.quaver.pupil.util.formatMap
+
+class DownloadFolderNameDialogFragment : DialogFragment() {
+
+ @SuppressLint("InflateParams")
+ private fun build(): View {
+ val galleryID = Cache.instances.let { if (it.size() == 0) 1199708 else it.keyAt((0 until it.size()).random()) }
+ val galleryBlock = runBlocking {
+ Cache.getInstance(requireContext(), galleryID).getGalleryBlock()
+ }
+
+ return layoutInflater.inflate(R.layout.dialog_download_folder_name, null).apply {
+ message.text = getString(R.string.settings_download_folder_name_message, formatMap.keys.toString(), galleryBlock?.formatDownloadFolder() ?: "")
+ edittext.setText(Preferences.get("download_folder_name"))
+ edittext.addTextChangedListener {
+ message.text = getString(R.string.settings_download_folder_name_message, formatMap.keys.toString(), galleryBlock?.formatDownloadFolderTest(it.toString()) ?: "")
+ }
+ ok_button.setOnClickListener {
+ val newValue = edittext.text.toString()
+
+ if ((newValue as? String)?.contains("/") != false) {
+ Snackbar.make(this, R.string.settings_invalid_download_folder_name, Snackbar.LENGTH_SHORT).show()
+ return@setOnClickListener
+ }
+
+ Preferences["download_folder_name"] = edittext.text.toString()
+
+ dismiss()
+ }
+ }
+ }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog =
+ Dialog(requireContext()).apply {
+ setContentView(build())
+ window?.attributes?.width = ViewGroup.LayoutParams.MATCH_PARENT
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/xyz/quaver/pupil/ui/dialog/DownloadLocationDialog.kt b/app/src/main/java/xyz/quaver/pupil/ui/dialog/DownloadLocationDialog.kt
deleted file mode 100644
index e9569a0f..00000000
--- a/app/src/main/java/xyz/quaver/pupil/ui/dialog/DownloadLocationDialog.kt
+++ /dev/null
@@ -1,129 +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.ui.dialog
-
-import android.annotation.SuppressLint
-import android.app.Activity
-import android.app.Dialog
-import android.content.Intent
-import android.os.Build
-import android.os.Bundle
-import android.view.View
-import android.widget.LinearLayout
-import android.widget.RadioButton
-import androidx.appcompat.app.AlertDialog
-import androidx.core.content.ContextCompat
-import androidx.core.net.toUri
-import kotlinx.android.synthetic.main.item_download_folder.view.*
-import net.rdrei.android.dirchooser.DirectoryChooserActivity
-import net.rdrei.android.dirchooser.DirectoryChooserConfig
-import xyz.quaver.pupil.R
-import xyz.quaver.pupil.util.*
-import xyz.quaver.pupil.util.downloader.DownloadManager
-import java.io.File
-
-@SuppressLint("InflateParams")
-class DownloadLocationDialog(val activity: Activity) : AlertDialog(activity) {
- private val buttons = mutableListOf>()
-
- override fun onCreate(savedInstanceState: Bundle?) {
- setTitle(R.string.settings_download_folder)
-
- setView(build())
-
- setButton(Dialog.BUTTON_POSITIVE, context.getText(android.R.string.ok)) { _, _ -> }
-
- super.onCreate(savedInstanceState)
- }
-
- private fun build() : View {
- val view = layoutInflater.inflate(R.layout.dialog_download_folder, null) as LinearLayout
-
- val externalFilesDirs = ContextCompat.getExternalFilesDirs(context, null)
-
- externalFilesDirs.forEachIndexed { index, dir ->
-
- dir ?: return@forEachIndexed
-
- view.addView(layoutInflater.inflate(R.layout.item_download_folder, view, false).apply {
- location_type.text = context.getString(when (index) {
- 0 -> R.string.settings_download_folder_internal
- else -> R.string.settings_download_folder_removable
- })
- location_available.text = context.getString(
- R.string.settings_download_folder_available,
- byteToString(dir.freeSpace)
- )
- setOnClickListener {
- buttons.forEach { pair ->
- pair.first.isChecked = false
- }
- button.performClick()
- Preferences["download_folder"] = dir.toUri().toString()
- }
- buttons.add(button to dir)
- })
- }
-
- view.addView(layoutInflater.inflate(R.layout.item_download_folder, view, false).apply {
- location_type.text = context.getString(R.string.settings_download_folder_custom)
- setOnClickListener {
- buttons.forEach { pair ->
- pair.first.isChecked = false
- }
- 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, R.id.request_download_folder.normalizeID())
-
- dismiss()
- } else { // Can't use SAF on old Androids!
- val config = DirectoryChooserConfig.builder()
- .newDirectoryName("Pupil")
- .allowNewDirectoryNameModification(true)
- .build()
-
- val intent = Intent(context, DirectoryChooserActivity::class.java).apply {
- putExtra(DirectoryChooserActivity.EXTRA_CONFIG, config)
- }
-
- activity.startActivityForResult(intent, R.id.request_download_folder_old.normalizeID())
- dismiss()
- }
- }
- buttons.add(button to null)
- })
-
- externalFilesDirs.indexOfFirst {
- it.canonicalPath == DownloadManager.getInstance(context).downloadFolder.canonicalPath
- }.let { index ->
- if (index < 0)
- buttons.last().first.isChecked = true
- else
- buttons[index].first.isChecked = true
- }
-
- return view
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/xyz/quaver/pupil/ui/dialog/DownloadLocationDialogFragment.kt b/app/src/main/java/xyz/quaver/pupil/ui/dialog/DownloadLocationDialogFragment.kt
new file mode 100644
index 00000000..1aeabffb
--- /dev/null
+++ b/app/src/main/java/xyz/quaver/pupil/ui/dialog/DownloadLocationDialogFragment.kt
@@ -0,0 +1,180 @@
+/*
+ * 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.ui.dialog
+
+import android.annotation.SuppressLint
+import android.app.Activity
+import android.app.Dialog
+import android.content.Intent
+import android.os.Build
+import android.os.Bundle
+import android.view.View
+import android.widget.LinearLayout
+import androidx.appcompat.app.AlertDialog
+import androidx.core.content.ContextCompat
+import androidx.core.net.toUri
+import androidx.fragment.app.DialogFragment
+import com.google.android.material.snackbar.Snackbar
+import kotlinx.android.synthetic.main.item_download_folder.view.*
+import net.rdrei.android.dirchooser.DirectoryChooserActivity
+import net.rdrei.android.dirchooser.DirectoryChooserConfig
+import xyz.quaver.io.FileX
+import xyz.quaver.pupil.R
+import xyz.quaver.pupil.util.Preferences
+import xyz.quaver.pupil.util.byteToString
+import xyz.quaver.pupil.util.downloader.DownloadManager
+import xyz.quaver.pupil.util.normalizeID
+import java.io.File
+
+class DownloadLocationDialogFragment : DialogFragment() {
+ private val entries = mutableMapOf()
+
+ @SuppressLint("InflateParams")
+ private fun build() : View {
+ val view = layoutInflater.inflate(R.layout.dialog_download_folder, null) as LinearLayout
+
+ val externalFilesDirs = ContextCompat.getExternalFilesDirs(requireContext(), null)
+
+ externalFilesDirs.forEachIndexed { index, dir ->
+
+ dir ?: return@forEachIndexed
+
+ view.addView(layoutInflater.inflate(R.layout.item_download_folder, view, false).apply {
+ location_type.text = context.getString(when (index) {
+ 0 -> R.string.settings_download_folder_internal
+ else -> R.string.settings_download_folder_removable
+ })
+ location_available.text = context.getString(
+ R.string.settings_download_folder_available,
+ byteToString(dir.freeSpace)
+ )
+ setOnClickListener {
+ entries.values.forEach {
+ it.button.isChecked = false
+ }
+ button.performClick()
+ Preferences["download_folder"] = dir.toUri().toString()
+ }
+ entries[dir] = this
+ })
+ }
+
+ view.addView(layoutInflater.inflate(R.layout.item_download_folder, view, false).apply {
+ location_type.text = context.getString(R.string.settings_download_folder_custom)
+ setOnClickListener {
+ entries.values.forEach {
+ it.button.isChecked = false
+ }
+ 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)
+ }
+
+ startActivityForResult(intent, R.id.request_download_folder.normalizeID())
+ } else { // Can't use SAF on old Androids!
+ val config = DirectoryChooserConfig.builder()
+ .newDirectoryName("Pupil")
+ .allowNewDirectoryNameModification(true)
+ .build()
+
+ val intent = Intent(context, DirectoryChooserActivity::class.java).apply {
+ putExtra(DirectoryChooserActivity.EXTRA_CONFIG, config)
+ }
+
+ startActivityForResult(intent, R.id.request_download_folder_old.normalizeID())
+ }
+ }
+ entries[null] = this
+ })
+
+ val downloadFolder = DownloadManager.getInstance(requireContext()).downloadFolder.canonicalPath
+ val key = entries.keys.firstOrNull { it?.canonicalPath == downloadFolder }
+ entries[key]!!.button.isChecked = true
+ if (key == null) entries[key]!!.location_available.text = downloadFolder
+
+ return view
+ }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ val builder = AlertDialog.Builder(requireContext())
+
+ builder
+ .setTitle(R.string.settings_download_folder)
+ .setView(build())
+ .setPositiveButton(requireContext().getText(android.R.string.ok)) { _, _ -> }
+
+ return builder.create()
+ }
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ when (requestCode) {
+ R.id.request_download_folder.normalizeID() -> {
+ if (resultCode == Activity.RESULT_OK) {
+ data?.data?.also { uri ->
+ val takeFlags: Int =
+ requireActivity().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)
+ requireContext().contentResolver.takePersistableUriPermission(uri, takeFlags)
+
+ if (FileX(requireContext(), uri).canWrite())
+ Preferences["download_folder"] = uri.toString()
+ else {
+ Snackbar.make(
+ requireDialog().window!!.decorView.rootView,
+ R.string.settings_download_folder_not_writable,
+ Snackbar.LENGTH_LONG
+ ).show()
+
+ val downloadFolder = DownloadManager.getInstance(requireContext()).downloadFolder.canonicalPath
+ val key = entries.keys.firstOrNull { it?.canonicalPath == downloadFolder }
+ entries[key]!!.button.isChecked = true
+ if (key == null) entries[key]!!.location_available.text = downloadFolder
+ }
+ }
+ }
+ }
+ R.id.request_download_folder_old.normalizeID() -> {
+ if (resultCode == DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED) {
+ val directory = data?.getStringExtra(DirectoryChooserActivity.RESULT_SELECTED_DIR)!!
+
+ if (!File(directory).canWrite()) {
+ Snackbar.make(
+ requireDialog().window!!.decorView.rootView,
+ R.string.settings_download_folder_not_writable,
+ Snackbar.LENGTH_LONG
+ ).show()
+
+ val downloadFolder = DownloadManager.getInstance(requireContext()).downloadFolder.canonicalPath
+ val key = entries.keys.firstOrNull { it?.canonicalPath == downloadFolder }
+ entries[key]!!.button.isChecked = true
+ if (key == null) entries[key]!!.location_available.text = downloadFolder
+ }
+ else
+ Preferences["download_folder"] = File(directory).canonicalPath
+ }
+ }
+ else -> super.onActivityResult(requestCode, resultCode, data)
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/xyz/quaver/pupil/ui/dialog/ProxyDialog.kt b/app/src/main/java/xyz/quaver/pupil/ui/dialog/ProxyDialog.kt
index dd26b4a2..cd79be1d 100644
--- a/app/src/main/java/xyz/quaver/pupil/ui/dialog/ProxyDialog.kt
+++ b/app/src/main/java/xyz/quaver/pupil/ui/dialog/ProxyDialog.kt
@@ -43,11 +43,7 @@ import java.net.Proxy
class ProxyDialog(context: Context) : Dialog(context) {
override fun onCreate(savedInstanceState: Bundle?) {
- val view = build()
-
- setTitle(R.string.settings_proxy_title)
- setContentView(view)
-
+ setContentView(build())
window?.attributes?.width = ViewGroup.LayoutParams.MATCH_PARENT
super.onCreate(savedInstanceState)
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 a801ebce..eaa670c6 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
@@ -21,28 +21,19 @@ package xyz.quaver.pupil.ui.fragment
import android.content.*
import android.os.Bundle
import android.widget.Toast
-import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatDelegate
-import androidx.preference.*
-import com.google.android.material.snackbar.Snackbar
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
+import androidx.preference.Preference
+import androidx.preference.PreferenceCategory
+import androidx.preference.PreferenceFragmentCompat
+import androidx.preference.SwitchPreferenceCompat
import xyz.quaver.io.FileX
import xyz.quaver.io.util.getChild
import xyz.quaver.pupil.R
-import xyz.quaver.pupil.histories
import xyz.quaver.pupil.ui.LockActivity
import xyz.quaver.pupil.ui.SettingsActivity
-import xyz.quaver.pupil.ui.dialog.DefaultQueryDialog
-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.ui.dialog.*
import xyz.quaver.pupil.util.*
import xyz.quaver.pupil.util.downloader.DownloadManager
-import java.io.BufferedReader
-import java.io.File
-import java.io.InputStreamReader
class SettingsFragment :
PreferenceFragmentCompat(),
@@ -77,7 +68,7 @@ class SettingsFragment :
checkUpdate(activity as SettingsActivity, true)
}
"download_folder" -> {
- DownloadLocationDialog(requireActivity()).show()
+ DownloadLocationDialogFragment().show(requireActivity().supportFragmentManager, "Download Location Dialog")
}
"default_query" -> {
DefaultQueryDialog(requireContext()).apply {
@@ -117,14 +108,6 @@ class SettingsFragment :
this ?: return false
when (key) {
- "download_folder_name" -> {
-
- if ((newValue as? String)?.contains("/") != false) {
- val view = view ?: return false
- Snackbar.make(view, R.string.settings_invalid_download_folder_name, Snackbar.LENGTH_SHORT).show()
- return false
- }
- }
"nomedia" -> {
val create = (newValue as? Boolean) ?: return false
@@ -163,6 +146,9 @@ class SettingsFragment :
"download_folder" -> {
summary = FileX(context, Preferences.get("download_folder")).canonicalPath
}
+ "download_folder_name" -> {
+ summary = Preferences.get("download_folder_name")
+ }
}
}
}
@@ -189,7 +175,7 @@ class SettingsFragment :
else
listOf(this)
}.forEach { preference ->
- with (preference) {
+ with (preference) with@{
when (key) {
"app_version" -> {
@@ -200,8 +186,13 @@ class SettingsFragment :
onPreferenceClickListener = this@SettingsFragment
}
"download_folder_name" -> {
- (this as EditTextPreference).dialogMessage = getString(R.string.settings_download_folder_name_message, formatMap.keys.toString())
- onPreferenceChangeListener = this@SettingsFragment
+ summary = Preferences.get("download_folder_name")
+
+ setOnPreferenceClickListener {
+ DownloadFolderNameDialogFragment().show(requireActivity().supportFragmentManager, "Download Location Dialog")
+
+ true
+ }
}
"download_folder" -> {
summary = FileX(context, Preferences.get("download_folder")).canonicalPath
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 c94859d7..91244422 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
@@ -53,7 +53,7 @@ data class Metadata(
class Cache private constructor(context: Context, val galleryID: Int) : ContextWrapper(context) {
companion object {
- private val instances = SparseArray()
+ val instances = SparseArray()
fun getInstance(context: Context, galleryID: Int) =
instances[galleryID] ?: synchronized(this) {
diff --git a/app/src/main/java/xyz/quaver/pupil/util/misc.kt b/app/src/main/java/xyz/quaver/pupil/util/misc.kt
index c67a51bf..c964a900 100644
--- a/app/src/main/java/xyz/quaver/pupil/util/misc.kt
+++ b/app/src/main/java/xyz/quaver/pupil/util/misc.kt
@@ -97,7 +97,14 @@ val formatMap = mapOf (String)>(
* Formats download folder name with given Metadata
*/
fun GalleryBlock.formatDownloadFolder(): String =
- Preferences["download_folder_name", "-id-"].let {
+ Preferences["download_folder_name", "[-id-] -title-"].let {
+ formatMap.entries.fold(it) { str, (k, v) ->
+ str.replace(k, v.invoke(this), true)
+ }
+ }
+
+fun GalleryBlock.formatDownloadFolderTest(format: String): String =
+ format.let {
formatMap.entries.fold(it) { str, (k, v) ->
str.replace(k, v.invoke(this), true)
}
diff --git a/app/src/main/res/layout/dialog_download_folder_name.xml b/app/src/main/res/layout/dialog_download_folder_name.xml
new file mode 100644
index 00000000..4104aace
--- /dev/null
+++ b/app/src/main/res/layout/dialog_download_folder_name.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index c545a42f..e4bd33cf 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -143,6 +143,6 @@
ダウンローダー起動中
フォルダ名パターン
フォルダ名に使用できない文字が含まれています
- %sに含まれている文字列を対応する変数に置換します
+ %sに含まれている文字列を対応する変数に置換します\n\n%s
ストレージ管理
\ No newline at end of file
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index b0fb5fd0..f062d54a 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -143,6 +143,6 @@
다운로더 작동중…
폴더명 패턴
폴더 패턴에 사용할 수 없는 문자가 포함되어 있습니다
- 지원되는 변수는 %s 입니다
+ 지원되는 변수는 %s 입니다\n\n%s
저장소 관리
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 22749684..6a7dfc12 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -136,9 +136,12 @@
Clear history
Do you want to clear histories?
%1$d histories saved
+
+
+
Folder naming pattern
Folder naming pattern is containing invalid characters
- Text %s will be replaced to its corresponding value
+ %s will be replaced to its corresponding value\n\n%s
Download folder
Removable Storage
Internal Storage
diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml
index 5c3c629e..eadde87e 100644
--- a/app/src/main/res/xml/root_preferences.xml
+++ b/app/src/main/res/xml/root_preferences.xml
@@ -35,11 +35,10 @@
app:fragment="xyz.quaver.pupil.ui.fragment.ManageStorageFragment"
app:title="@string/settings_manage_storage" />
-
+ app:defaultValue="[-id-] -title-"/>