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-"/>