From 2d754311263d3708dc56e241fb1536ae0b0044a0 Mon Sep 17 00:00:00 2001 From: ali hrhera Date: Fri, 24 Jul 2026 23:48:03 +0300 Subject: [PATCH 1/2] Refactor bookmark preference management and improve input validation - Introduce `BookmarkPrefsViewModel` to manage bookmark data and validation logic separately from the UI. - Implement `WarnableTextInputValidator` in the bookmark creation and edit dialogs for real-time input feedback. - Consolidate bookmark creation and editing UI logic into a single `showBookmarkDialog` method. - Add `BookmarkData` data class and `BookmarkField` enum for cleaner data handling. - Move business rules for bookmark validity (name presence, path accessibility, and uniqueness) into the ViewModel. --- .../ui/fragments/data/BookmarkData.kt | 6 + .../BookmarkPrefsViewModel.kt | 113 +++++++ .../BookmarksPrefsFragment.kt | 291 +++++++++--------- 3 files changed, 272 insertions(+), 138 deletions(-) create mode 100644 app/src/main/java/com/amaze/filemanager/ui/fragments/data/BookmarkData.kt create mode 100644 app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarkPrefsViewModel.kt diff --git a/app/src/main/java/com/amaze/filemanager/ui/fragments/data/BookmarkData.kt b/app/src/main/java/com/amaze/filemanager/ui/fragments/data/BookmarkData.kt new file mode 100644 index 0000000000..4551e94174 --- /dev/null +++ b/app/src/main/java/com/amaze/filemanager/ui/fragments/data/BookmarkData.kt @@ -0,0 +1,6 @@ +package com.amaze.filemanager.ui.fragments.data + +data class BookmarkData( + val name: String, + val path: String +) \ No newline at end of file diff --git a/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarkPrefsViewModel.kt b/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarkPrefsViewModel.kt new file mode 100644 index 0000000000..8f7c24d8a3 --- /dev/null +++ b/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarkPrefsViewModel.kt @@ -0,0 +1,113 @@ +package com.amaze.filemanager.ui.fragments.preferencefragments + +import android.content.SharedPreferences +import androidx.lifecycle.ViewModel +import androidx.preference.Preference +import androidx.preference.PreferenceCategory +import com.amaze.filemanager.R +import com.amaze.filemanager.filesystem.files.FileUtils +import com.amaze.filemanager.ui.fragments.data.BookmarkData +import com.amaze.filemanager.ui.views.WarnableTextInputValidator +import com.amaze.filemanager.utils.DataUtils + +class BookmarkPrefsViewModel : ViewModel() { + val position: MutableMap = HashMap() + var bookmarksList: PreferenceCategory? = null + + + fun isValidBookmarkPath( + name: String, + path: String, + dataUtils: DataUtils, + prefs: SharedPreferences + ): WarnableTextInputValidator.ReturnState { + return when { + path.isBlank() -> WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.ftp_path_change_error_invalid + ) + + dataUtils.containsBooks( + arrayOf( + name, + path + ) + ) != -1 -> WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.bookmark_exists + ) + + !FileUtils.isPathAccessible( + path, + prefs + ) -> WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.ftp_path_change_error_invalid + ) + + else -> WarnableTextInputValidator.ReturnState() + } + } + + fun isValidBookmarkName( + name: String, + ): WarnableTextInputValidator.ReturnState { + return when { + name.isBlank() -> WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.invalid_name + ) + + else -> WarnableTextInputValidator.ReturnState() + } + } + + fun isValidBookmark( + bookmark: BookmarkData, + dataUtils: DataUtils, + prefs: SharedPreferences + ): Pair { + return when { + bookmark.name.isBlank() -> Pair( + BookmarkField.NAME, WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.invalid_name + ) + ) + bookmark.path.isBlank() -> Pair( + BookmarkField.PATH, WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.ftp_path_change_error_invalid + ) + ) + dataUtils.containsBooks( + arrayOf( + bookmark.name, + bookmark.path + ) + ) != -1 -> Pair( + BookmarkField.PATH, WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.bookmark_exists + ) + ) + !FileUtils.isPathAccessible( + bookmark.path, + prefs + ) -> Pair( + BookmarkField.PATH, WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.ftp_path_change_error_invalid + ) + ) + + else -> Pair(null, WarnableTextInputValidator.ReturnState()) + } + } + + +} +enum class BookmarkField{ + NAME, + PATH +} \ No newline at end of file diff --git a/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarksPrefsFragment.kt b/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarksPrefsFragment.kt index 195460ef49..2ef4daea31 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarksPrefsFragment.kt +++ b/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarksPrefsFragment.kt @@ -24,9 +24,10 @@ import android.os.Bundle import android.text.Editable import android.view.LayoutInflater import android.widget.Toast +import androidx.annotation.StringRes import androidx.appcompat.widget.AppCompatEditText +import androidx.fragment.app.viewModels import androidx.preference.Preference -import androidx.preference.PreferenceCategory import com.afollestad.materialdialogs.DialogAction import com.afollestad.materialdialogs.MaterialDialog import com.amaze.filemanager.R @@ -35,22 +36,28 @@ import com.amaze.filemanager.database.UtilsHandler import com.amaze.filemanager.database.models.OperationData import com.amaze.filemanager.databinding.DialogTwoedittextsBinding import com.amaze.filemanager.filesystem.files.FileUtils +import com.amaze.filemanager.ui.fragments.data.BookmarkData +import com.amaze.filemanager.ui.views.WarnableTextInputValidator import com.amaze.filemanager.ui.views.preference.PathSwitchPreference import com.amaze.filemanager.utils.DataUtils import com.amaze.filemanager.utils.SimpleTextWatcher class BookmarksPrefsFragment : BasePrefsFragment() { override val title = R.string.show_bookmarks_pref + private val bookmarksViewModel by viewModels() companion object { private val dataUtils = DataUtils.getInstance()!! } - - private val position: MutableMap = HashMap() - private var bookmarksList: PreferenceCategory? = null - private val itemOnEditListener = { it: PathSwitchPreference -> - showEditDialog(it) + showBookmarkDialog(it, R.string.edit_bookmark, R.string.edit) { bookmarkData -> + updateBookmark( + it, + bookmarkData.name, + bookmarkData.path, + AppConfig.getInstance().utilsHandler + ) + } } private val itemOnDeleteListener = { it: PathSwitchPreference -> @@ -65,165 +72,173 @@ class BookmarksPrefsFragment : BasePrefsFragment() { findPreference("add_bookmarks")?.onPreferenceClickListener = Preference.OnPreferenceClickListener { - showCreateDialog() - + showBookmarkDialog( + title = R.string.create_bookmark, + positiveTxt = R.string.create + ) { bookmarkData -> + createBookmark( + bookmarkData.name, + bookmarkData.path, + AppConfig.getInstance().utilsHandler + ) + } true } - - bookmarksList = findPreference("bookmarks_list") + bookmarksViewModel.bookmarksList = findPreference("bookmarks_list") reload() } private fun reload() { - for (p in position) { - bookmarksList?.removePreference(p.key) + for (p in bookmarksViewModel.position) { + bookmarksViewModel.bookmarksList?.removePreference(p.key) } - position.clear() + bookmarksViewModel.position.clear() for (i in dataUtils.books.indices) { val p = PathSwitchPreference(activity, itemOnEditListener, itemOnDeleteListener) p.title = dataUtils.books[i][0] p.summary = dataUtils.books[i][1] - position[p] = i - bookmarksList?.addPreference(p) + bookmarksViewModel.position[p] = i + bookmarksViewModel.bookmarksList?.addPreference(p) } } - private fun showCreateDialog() { + private fun DialogTwoedittextsBinding.bookmarkData(): BookmarkData { + return BookmarkData( + text1.text.toString().trim(), + text2.text.toString().trim() + ) + } + + private fun showBookmarkDialog( + bookmark: PathSwitchPreference? = null, + @StringRes title: Int, + @StringRes positiveTxt: Int, + action: (BookmarkData) -> Unit + ) { + val isEdit = bookmark != null val fabSkin = activity.accent - val utilsHandler = AppConfig.getInstance().utilsHandler - val dialogBinding = DialogTwoedittextsBinding.inflate(LayoutInflater.from(requireContext())) + val binding = + DialogTwoedittextsBinding.inflate(LayoutInflater.from(requireContext())) + binding.textInput1.hint = getString(R.string.name) + binding.textInput2.hint = getString(R.string.directory) + val nameEt = binding.text1 + val pathEt = binding.text2 + bookmark?.let { + nameEt.setText(it.title) + pathEt.setText(it.summary) + } + val dialog = MaterialDialog.Builder(requireActivity()) + .title(title) + .theme(activity.appTheme.getMaterialDialogTheme()) + .positiveColor(fabSkin) + .positiveText(positiveTxt) + .negativeColor(fabSkin) + .negativeText(android.R.string.cancel) + .customView(binding.root, false) + .build() + + dialog.getActionButton(DialogAction.POSITIVE).isEnabled = + if (isEdit) + FileUtils.isPathAccessible(pathEt.text.toString(), activity.prefs) + else + false - val v = dialogBinding.root - dialogBinding.textInput1.hint = getString(R.string.name) - dialogBinding.textInput2.hint = getString(R.string.directory) - val txtShortcutName = dialogBinding.text1 - val txtShortcutPath = dialogBinding.text2 + disableButtonIfTitleEmpty(nameEt, dialog) + disableButtonIfNotPath(pathEt, dialog) - val dialog = - MaterialDialog.Builder(requireActivity()) - .title(R.string.create_bookmark) - .theme(activity.appTheme.getMaterialDialogTheme()) - .positiveColor(fabSkin) - .positiveText(R.string.create) - .negativeColor(fabSkin) - .negativeText(android.R.string.cancel) - .customView(v, false) - .build() - dialog.getActionButton(DialogAction.POSITIVE).isEnabled = false - disableButtonIfTitleEmpty(txtShortcutName, dialog) - disableButtonIfNotPath(txtShortcutPath, dialog) - dialog.getActionButton(DialogAction.POSITIVE) - .setOnClickListener { - val result = isValidBookmark(txtShortcutName.text.toString(), txtShortcutPath.text.toString()) - if (!result.first) { - Toast.makeText( - requireContext(), - requireContext().getString(result.second), - Toast.LENGTH_SHORT, - ).show() - } else { - val p = PathSwitchPreference(activity, itemOnEditListener, itemOnDeleteListener) - p.title = txtShortcutName.text - p.summary = txtShortcutPath.text - position[p] = dataUtils.books.size - bookmarksList?.addPreference(p) - val values = - arrayOf( - txtShortcutName.text.toString(), - txtShortcutPath.text.toString(), - ) - dataUtils.addBook(values) - utilsHandler.saveToDatabase( - OperationData( - UtilsHandler.Operation.BOOKMARKS, - txtShortcutName.text.toString(), - txtShortcutPath.text.toString(), - ), - ).subscribe() - dialog.dismiss() - } + WarnableTextInputValidator( + requireContext(), + nameEt, + binding.textInput1, + dialog.getActionButton(DialogAction.POSITIVE) + ) { + bookmarksViewModel.isValidBookmarkName(nameEt.text.toString()) + } + WarnableTextInputValidator( + requireContext(), + pathEt, + binding.textInput2, + dialog.getActionButton(DialogAction.POSITIVE) + ) { + bookmarksViewModel.isValidBookmarkPath( + nameEt.text.toString(), + pathEt.text.toString(), + dataUtils, + activity.prefs + ) + } + dialog.getActionButton(DialogAction.POSITIVE).setOnClickListener { + val bookmarkData = binding.bookmarkData() + val result = bookmarksViewModel.isValidBookmark(bookmarkData, dataUtils, activity.prefs) + if (result.first!=null) { + Toast.makeText( + requireContext(), + getString(result.second.text), + Toast.LENGTH_SHORT + ).show() + return@setOnClickListener } + action(bookmarkData) + dialog.dismiss() + } dialog.show() } - private fun isValidBookmark( + + private fun createBookmark( name: String, path: String, - ): Pair { - return when { - name.isEmpty() || path.isEmpty() -> Pair(false, R.string.invalid_name) - dataUtils.containsBooks(arrayOf(name, path)) != -1 -> Pair(false, R.string.bookmark_exists) - !FileUtils.isPathAccessible(path, activity.prefs) -> Pair(false, R.string.ftp_path_change_error_invalid) - else -> Pair(true, 0) - } - } + utilsHandler: UtilsHandler + ) { + val preference = + PathSwitchPreference(activity, itemOnEditListener, itemOnDeleteListener) - private fun showEditDialog(p: PathSwitchPreference) { - val fabSkin = activity.accent - val utilsHandler = AppConfig.getInstance().utilsHandler - val dialogBinding = DialogTwoedittextsBinding.inflate(LayoutInflater.from(requireContext())) + preference.title = name + preference.summary = path - val v = dialogBinding.root - dialogBinding.textInput1.hint = getString(R.string.name) - dialogBinding.textInput2.hint = getString(R.string.directory) - val editText1 = dialogBinding.text1 - val editText2 = dialogBinding.text2 - editText1.setText(p.title) - editText2.setText(p.summary) + bookmarksViewModel.position[preference] = dataUtils.books.size + bookmarksViewModel.bookmarksList?.addPreference(preference) - val dialog = - MaterialDialog.Builder(activity) - .title(R.string.edit_bookmark) - .theme(activity.appTheme.getMaterialDialogTheme()) - .positiveColor(fabSkin) - .positiveText(getString(R.string.edit).uppercase()) // TODO: 29/4/2017 don't use toUpperCase() - .negativeColor(fabSkin) - .negativeText(android.R.string.cancel) - .customView(v, false) - .build() - dialog.getActionButton(DialogAction.POSITIVE).isEnabled = - FileUtils.isPathAccessible(editText2.text.toString(), activity.prefs) - disableButtonIfTitleEmpty(editText1, dialog) - disableButtonIfNotPath(editText2, dialog) - dialog.getActionButton(DialogAction.POSITIVE) - .setOnClickListener { - val oldName = p.title.toString() - val oldPath = p.summary.toString() + dataUtils.addBook(arrayOf(name, path)) - val result = isValidBookmark(editText1.text.toString(), editText2.text.toString()) - if (!result.first) { - Toast.makeText( - requireContext(), - requireContext().getString(result.second), - Toast.LENGTH_SHORT, - ).show() + utilsHandler.saveToDatabase( + OperationData( + UtilsHandler.Operation.BOOKMARKS, + name, + path + ) + ).subscribe() + } - @Suppress("LabeledExpression") - return@setOnClickListener - } + private fun updateBookmark( + preference: PathSwitchPreference, + newName: String, + newPath: String, + utilsHandler: UtilsHandler + ) { + val oldName = preference.title.toString() + val oldPath = preference.summary.toString() + dataUtils.removeBook(bookmarksViewModel.position[preference]!!) + bookmarksViewModel.position.remove(preference) + bookmarksViewModel.bookmarksList?.removePreference(preference) - dataUtils.removeBook(position[p]!!) - position.remove(p) - bookmarksList?.removePreference(p) - p.title = editText1.text - p.summary = editText2.text - position[p] = position.size - bookmarksList?.addPreference(p) - val values = arrayOf(editText1.text.toString(), editText2.text.toString()) - dataUtils.addBook(values) - AppConfig.getInstance() - .runInBackground { - utilsHandler.renameBookmark( - oldName, - oldPath, - editText1.text.toString(), - editText2.text.toString(), - ) - } - dialog.dismiss() - } - dialog.show() + preference.title = newName + preference.summary = newPath + + bookmarksViewModel.position[preference] =bookmarksViewModel. position.size + bookmarksViewModel.bookmarksList?.addPreference(preference) + + dataUtils.addBook(arrayOf(newName, newPath)) + + AppConfig.getInstance().runInBackground { + utilsHandler.renameBookmark( + oldName, + oldPath, + newName, + newPath + ) + } } private fun showDeleteDialog(p: PathSwitchPreference) { @@ -241,7 +256,7 @@ class BookmarksPrefsFragment : BasePrefsFragment() { .build() dialog.getActionButton(DialogAction.POSITIVE) .setOnClickListener { - dataUtils.removeBook(position[p]!!) + dataUtils.removeBook(bookmarksViewModel.position[p]!!) utilsHandler.removeFromDatabase( OperationData( UtilsHandler.Operation.BOOKMARKS, @@ -249,8 +264,8 @@ class BookmarksPrefsFragment : BasePrefsFragment() { p.summary.toString(), ), ) - bookmarksList?.removePreference(p) - position.remove(p) + bookmarksViewModel.bookmarksList?.removePreference(p) + bookmarksViewModel.position.remove(p) dialog.dismiss() } dialog.show() From 4d85d0486805a3d439d1e11556cce8d1eb1a353a Mon Sep 17 00:00:00 2001 From: ali hrhera Date: Sat, 25 Jul 2026 00:12:19 +0300 Subject: [PATCH 2/2] Refactor bookmark preference fragments for improved code style and formatting - Apply consistent Kotlin formatting and trailing commas across `BookmarksPrefsFragment`, `BookmarkPrefsViewModel`, and `BookmarkData`. - Improve code readability by cleaning up indentation and line breaks in `MaterialDialog` builders and validation logic. - Standardize spacing and bracing in conditional expressions and property declarations. --- .../ui/fragments/data/BookmarkData.kt | 4 +- .../BookmarkPrefsViewModel.kt | 116 ++++++++++-------- .../BookmarksPrefsFragment.kt | 58 ++++----- 3 files changed, 94 insertions(+), 84 deletions(-) diff --git a/app/src/main/java/com/amaze/filemanager/ui/fragments/data/BookmarkData.kt b/app/src/main/java/com/amaze/filemanager/ui/fragments/data/BookmarkData.kt index 4551e94174..7298204aa4 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/fragments/data/BookmarkData.kt +++ b/app/src/main/java/com/amaze/filemanager/ui/fragments/data/BookmarkData.kt @@ -2,5 +2,5 @@ package com.amaze.filemanager.ui.fragments.data data class BookmarkData( val name: String, - val path: String -) \ No newline at end of file + val path: String, +) diff --git a/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarkPrefsViewModel.kt b/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarkPrefsViewModel.kt index 8f7c24d8a3..12aff84552 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarkPrefsViewModel.kt +++ b/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarkPrefsViewModel.kt @@ -11,52 +11,53 @@ import com.amaze.filemanager.ui.views.WarnableTextInputValidator import com.amaze.filemanager.utils.DataUtils class BookmarkPrefsViewModel : ViewModel() { - val position: MutableMap = HashMap() - var bookmarksList: PreferenceCategory? = null - + val position: MutableMap = HashMap() + var bookmarksList: PreferenceCategory? = null fun isValidBookmarkPath( name: String, path: String, dataUtils: DataUtils, - prefs: SharedPreferences + prefs: SharedPreferences, ): WarnableTextInputValidator.ReturnState { return when { - path.isBlank() -> WarnableTextInputValidator.ReturnState( - WarnableTextInputValidator.ReturnState.STATE_ERROR, - R.string.ftp_path_change_error_invalid - ) + path.isBlank() -> + WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.ftp_path_change_error_invalid, + ) dataUtils.containsBooks( arrayOf( name, - path + path, + ), + ) != -1 -> + WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.bookmark_exists, ) - ) != -1 -> WarnableTextInputValidator.ReturnState( - WarnableTextInputValidator.ReturnState.STATE_ERROR, - R.string.bookmark_exists - ) !FileUtils.isPathAccessible( path, - prefs - ) -> WarnableTextInputValidator.ReturnState( - WarnableTextInputValidator.ReturnState.STATE_ERROR, - R.string.ftp_path_change_error_invalid - ) + prefs, + ) -> + WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.ftp_path_change_error_invalid, + ) else -> WarnableTextInputValidator.ReturnState() } } - fun isValidBookmarkName( - name: String, - ): WarnableTextInputValidator.ReturnState { + fun isValidBookmarkName(name: String): WarnableTextInputValidator.ReturnState { return when { - name.isBlank() -> WarnableTextInputValidator.ReturnState( - WarnableTextInputValidator.ReturnState.STATE_ERROR, - R.string.invalid_name - ) + name.isBlank() -> + WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.invalid_name, + ) else -> WarnableTextInputValidator.ReturnState() } @@ -65,49 +66,56 @@ class BookmarkPrefsViewModel : ViewModel() { fun isValidBookmark( bookmark: BookmarkData, dataUtils: DataUtils, - prefs: SharedPreferences + prefs: SharedPreferences, ): Pair { return when { - bookmark.name.isBlank() -> Pair( - BookmarkField.NAME, WarnableTextInputValidator.ReturnState( - WarnableTextInputValidator.ReturnState.STATE_ERROR, - R.string.invalid_name + bookmark.name.isBlank() -> + Pair( + BookmarkField.NAME, + WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.invalid_name, + ), ) - ) - bookmark.path.isBlank() -> Pair( - BookmarkField.PATH, WarnableTextInputValidator.ReturnState( - WarnableTextInputValidator.ReturnState.STATE_ERROR, - R.string.ftp_path_change_error_invalid + bookmark.path.isBlank() -> + Pair( + BookmarkField.PATH, + WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.ftp_path_change_error_invalid, + ), ) - ) dataUtils.containsBooks( arrayOf( bookmark.name, - bookmark.path + bookmark.path, + ), + ) != -1 -> + Pair( + BookmarkField.PATH, + WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.bookmark_exists, + ), ) - ) != -1 -> Pair( - BookmarkField.PATH, WarnableTextInputValidator.ReturnState( - WarnableTextInputValidator.ReturnState.STATE_ERROR, - R.string.bookmark_exists - ) - ) !FileUtils.isPathAccessible( bookmark.path, - prefs - ) -> Pair( - BookmarkField.PATH, WarnableTextInputValidator.ReturnState( - WarnableTextInputValidator.ReturnState.STATE_ERROR, - R.string.ftp_path_change_error_invalid + prefs, + ) -> + Pair( + BookmarkField.PATH, + WarnableTextInputValidator.ReturnState( + WarnableTextInputValidator.ReturnState.STATE_ERROR, + R.string.ftp_path_change_error_invalid, + ), ) - ) else -> Pair(null, WarnableTextInputValidator.ReturnState()) } } - - } -enum class BookmarkField{ + +enum class BookmarkField { NAME, - PATH -} \ No newline at end of file + PATH, +} diff --git a/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarksPrefsFragment.kt b/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarksPrefsFragment.kt index 2ef4daea31..92044b7692 100644 --- a/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarksPrefsFragment.kt +++ b/app/src/main/java/com/amaze/filemanager/ui/fragments/preferencefragments/BookmarksPrefsFragment.kt @@ -49,13 +49,14 @@ class BookmarksPrefsFragment : BasePrefsFragment() { companion object { private val dataUtils = DataUtils.getInstance()!! } + private val itemOnEditListener = { it: PathSwitchPreference -> showBookmarkDialog(it, R.string.edit_bookmark, R.string.edit) { bookmarkData -> updateBookmark( it, bookmarkData.name, bookmarkData.path, - AppConfig.getInstance().utilsHandler + AppConfig.getInstance().utilsHandler, ) } } @@ -74,12 +75,12 @@ class BookmarksPrefsFragment : BasePrefsFragment() { Preference.OnPreferenceClickListener { showBookmarkDialog( title = R.string.create_bookmark, - positiveTxt = R.string.create + positiveTxt = R.string.create, ) { bookmarkData -> createBookmark( bookmarkData.name, bookmarkData.path, - AppConfig.getInstance().utilsHandler + AppConfig.getInstance().utilsHandler, ) } true @@ -106,7 +107,7 @@ class BookmarksPrefsFragment : BasePrefsFragment() { private fun DialogTwoedittextsBinding.bookmarkData(): BookmarkData { return BookmarkData( text1.text.toString().trim(), - text2.text.toString().trim() + text2.text.toString().trim(), ) } @@ -114,7 +115,7 @@ class BookmarksPrefsFragment : BasePrefsFragment() { bookmark: PathSwitchPreference? = null, @StringRes title: Int, @StringRes positiveTxt: Int, - action: (BookmarkData) -> Unit + action: (BookmarkData) -> Unit, ) { val isEdit = bookmark != null val fabSkin = activity.accent @@ -128,21 +129,23 @@ class BookmarksPrefsFragment : BasePrefsFragment() { nameEt.setText(it.title) pathEt.setText(it.summary) } - val dialog = MaterialDialog.Builder(requireActivity()) - .title(title) - .theme(activity.appTheme.getMaterialDialogTheme()) - .positiveColor(fabSkin) - .positiveText(positiveTxt) - .negativeColor(fabSkin) - .negativeText(android.R.string.cancel) - .customView(binding.root, false) - .build() + val dialog = + MaterialDialog.Builder(requireActivity()) + .title(title) + .theme(activity.appTheme.getMaterialDialogTheme()) + .positiveColor(fabSkin) + .positiveText(positiveTxt) + .negativeColor(fabSkin) + .negativeText(android.R.string.cancel) + .customView(binding.root, false) + .build() dialog.getActionButton(DialogAction.POSITIVE).isEnabled = - if (isEdit) + if (isEdit) { FileUtils.isPathAccessible(pathEt.text.toString(), activity.prefs) - else + } else { false + } disableButtonIfTitleEmpty(nameEt, dialog) disableButtonIfNotPath(pathEt, dialog) @@ -151,7 +154,7 @@ class BookmarksPrefsFragment : BasePrefsFragment() { requireContext(), nameEt, binding.textInput1, - dialog.getActionButton(DialogAction.POSITIVE) + dialog.getActionButton(DialogAction.POSITIVE), ) { bookmarksViewModel.isValidBookmarkName(nameEt.text.toString()) } @@ -159,23 +162,23 @@ class BookmarksPrefsFragment : BasePrefsFragment() { requireContext(), pathEt, binding.textInput2, - dialog.getActionButton(DialogAction.POSITIVE) + dialog.getActionButton(DialogAction.POSITIVE), ) { bookmarksViewModel.isValidBookmarkPath( nameEt.text.toString(), pathEt.text.toString(), dataUtils, - activity.prefs + activity.prefs, ) } dialog.getActionButton(DialogAction.POSITIVE).setOnClickListener { val bookmarkData = binding.bookmarkData() val result = bookmarksViewModel.isValidBookmark(bookmarkData, dataUtils, activity.prefs) - if (result.first!=null) { + if (result.first != null) { Toast.makeText( requireContext(), getString(result.second.text), - Toast.LENGTH_SHORT + Toast.LENGTH_SHORT, ).show() return@setOnClickListener } @@ -185,11 +188,10 @@ class BookmarksPrefsFragment : BasePrefsFragment() { dialog.show() } - private fun createBookmark( name: String, path: String, - utilsHandler: UtilsHandler + utilsHandler: UtilsHandler, ) { val preference = PathSwitchPreference(activity, itemOnEditListener, itemOnDeleteListener) @@ -206,8 +208,8 @@ class BookmarksPrefsFragment : BasePrefsFragment() { OperationData( UtilsHandler.Operation.BOOKMARKS, name, - path - ) + path, + ), ).subscribe() } @@ -215,7 +217,7 @@ class BookmarksPrefsFragment : BasePrefsFragment() { preference: PathSwitchPreference, newName: String, newPath: String, - utilsHandler: UtilsHandler + utilsHandler: UtilsHandler, ) { val oldName = preference.title.toString() val oldPath = preference.summary.toString() @@ -226,7 +228,7 @@ class BookmarksPrefsFragment : BasePrefsFragment() { preference.title = newName preference.summary = newPath - bookmarksViewModel.position[preference] =bookmarksViewModel. position.size + bookmarksViewModel.position[preference] = bookmarksViewModel.position.size bookmarksViewModel.bookmarksList?.addPreference(preference) dataUtils.addBook(arrayOf(newName, newPath)) @@ -236,7 +238,7 @@ class BookmarksPrefsFragment : BasePrefsFragment() { oldName, oldPath, newName, - newPath + newPath, ) } }