diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f9f65929..92db5e42 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -193,6 +193,9 @@ dependencies { //Baseline Profile baselineProfile(project(":app:benchmark")) + + //FilePickerSphere + implementation("com.github.Ruan625Br:FilePickerSphere:1.0.0") } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b209527a..c9546b62 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,6 +26,7 @@ android:requestRawExternalStorageAccess="true" android:supportsRtl="true" android:theme="@style/Theme.FileManager" + tools:replace="android:theme" tools:targetApi="31"> <activity android:name=".activity.SettingsActivity" diff --git a/app/src/main/java/com/etb/filemanager/manager/adapter/FileModelAdapter.kt b/app/src/main/java/com/etb/filemanager/manager/adapter/FileModelAdapter.kt index 987b148f..732f11fe 100644 --- a/app/src/main/java/com/etb/filemanager/manager/adapter/FileModelAdapter.kt +++ b/app/src/main/java/com/etb/filemanager/manager/adapter/FileModelAdapter.kt @@ -22,7 +22,7 @@ import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.request.RequestOptions import com.etb.filemanager.R -import com.etb.filemanager.databinding.FileItemBinding +import com.etb.filemanager.databinding.FileItemViewBinding import com.etb.filemanager.files.extensions.createShapeModelBasedOnCornerFamilyPreference import com.etb.filemanager.files.provider.archive.common.mime.MimeTypeUtil import com.etb.filemanager.files.util.FileUtil @@ -161,7 +161,7 @@ class FileModelAdapter( } } - private fun applyStyle(binding: FileItemBinding) { + private fun applyStyle(binding: FileItemViewBinding) { if (Preferences.Interface.isEnabledRoundedCorners) { mContext.let { ctx -> binding.itemFile.radius = ctx.getDimension(R.dimen.corner_radius_base) @@ -177,7 +177,7 @@ class FileModelAdapter( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder = ViewHolder( - FileItemBinding.inflate(parent.context.layoutInflater, parent, false) + FileItemViewBinding.inflate(parent.context.layoutInflater, parent, false) ).apply { applyStyle(binding) binding.itemFile.background = CheckableItemBackground.create(binding.itemFile.context) @@ -246,7 +246,7 @@ class FileModelAdapter( } - private fun setVisibility(isDir: Boolean, mimeType: String?, binding: FileItemBinding) { + private fun setVisibility(isDir: Boolean, mimeType: String?, binding: FileItemViewBinding) { val isMedia = mimeType?.isMimeTypeMedia() ?: false val viewFileInformationOption = Preferences.Interface.viewFileInformationOption val colorPrimary = mContext.getColorByAttr(com.google.android.material.R.attr.colorPrimary) @@ -289,7 +289,7 @@ class FileModelAdapter( private fun getIconByMimeType( - mimeType: String?, binding: FileItemBinding + mimeType: String?, binding: FileItemViewBinding ) { val icFile = AppCompatResources.getDrawable(mContext, R.drawable.file_generic_icon) val tint = getTintForIcons() @@ -302,7 +302,7 @@ class FileModelAdapter( } - private fun loadImage(path: String, binding: FileItemBinding) { + private fun loadImage(path: String, binding: FileItemViewBinding) { val imageView = binding.iconFile binding.iconFile.clearColorFilter() @@ -310,7 +310,7 @@ class FileModelAdapter( .override(50, 50).placeholder(R.drawable.ic_image).into(imageView) } - private fun loadImageFromDirectory(binding: FileItemBinding) { + private fun loadImageFromDirectory(binding: FileItemViewBinding) { val icFolder = AppCompatResources.getDrawable(mContext, R.drawable.ic_folder)!! icFolder.setTint(getTintForIcons()) binding.iconFile.setColorFilter(getTintForIcons(), PorterDuff.Mode.SRC_IN) @@ -335,7 +335,7 @@ class FileModelAdapter( } - class ViewHolder(val binding: FileItemBinding) : RecyclerView.ViewHolder(binding.root) + class ViewHolder(val binding: FileItemViewBinding) : RecyclerView.ViewHolder(binding.root) override fun clear() { super.clear() diff --git a/app/src/main/java/com/etb/filemanager/settings/preference/BehaviorPreferences.kt b/app/src/main/java/com/etb/filemanager/settings/preference/BehaviorPreferences.kt index 20ecc1b8..bf282c97 100644 --- a/app/src/main/java/com/etb/filemanager/settings/preference/BehaviorPreferences.kt +++ b/app/src/main/java/com/etb/filemanager/settings/preference/BehaviorPreferences.kt @@ -8,16 +8,18 @@ package com.etb.filemanager.settings.preference import android.os.Bundle -import android.view.LayoutInflater -import android.view.ViewGroup import androidx.preference.Preference import androidx.preference.SwitchPreferenceCompat import com.etb.filemanager.R -import com.google.android.material.dialog.MaterialAlertDialogBuilder -import com.google.android.material.textfield.TextInputEditText -import java.io.File - -class BehaviorPreferences : PreferenceFragment(){ +import com.jn.filepickersphere.filelist.common.mime.MimeType +import com.jn.filepickersphere.filepicker.FilePickerCallbacks +import com.jn.filepickersphere.filepicker.FilePickerSphereManager +import com.jn.filepickersphere.filepicker.style.FilePickerStyle +import com.jn.filepickersphere.models.FileModel +import com.jn.filepickersphere.models.FilePickerModel +import com.jn.filepickersphere.models.PickOptions + +class BehaviorPreferences : PreferenceFragment() { override fun getTitle(): Int { return R.string.pref_behavior_title } @@ -27,53 +29,73 @@ class BehaviorPreferences : PreferenceFragment(){ preferenceManager.preferenceDataStore = SettingsDataStore() - val prefDefaultFolder = findPreference<Preference>("default_folder") + //Default folder + val prefDefaultFolder = findPreference<Preference>("default_folder")!! val currentDefaultFolder = Preferences.Behavior.defaultFolder + prefDefaultFolder.summary = currentDefaultFolder + prefDefaultFolder.setOnPreferenceClickListener { _ -> - //Default folder - prefDefaultFolder!!.summary = currentDefaultFolder - val inflater = LayoutInflater.from(requireContext()) - val dialogView = inflater.inflate(R.layout.layout_basic_dialog, null) - val eInputEditText = dialogView.findViewById<TextInputEditText>(R.id.eInputEditText) - - val title = requireContext().getString(R.string.pref_behavior_set_default_folder_title) - prefDefaultFolder.setOnPreferenceClickListener { preference -> - val parent = dialogView.parent as? ViewGroup - parent?.removeView(dialogView) - eInputEditText.setText(currentDefaultFolder) - - MaterialAlertDialogBuilder(requireContext()) - .setTitle(title) - .setView(dialogView) - .setCancelable(false) - .setPositiveButton(getString(R.string.set)) { _, _ -> - val enteredText = eInputEditText.text.toString() - val path = File(enteredText) - if (enteredText != currentDefaultFolder && path.exists()){ - preference.summary = enteredText - Preferences.Behavior.defaultFolder = enteredText - } - - }.setNegativeButton(R.string.dialog_cancel) { _, _ -> - }.show() + selectFolder { + Preferences.Behavior.defaultFolder = it + prefDefaultFolder.summary = it + } true } //Select file long click - - val switchSelectFileLongClick = findPreference<SwitchPreferenceCompat>("select_file_long_click") + val switchSelectFileLongClick = + findPreference<SwitchPreferenceCompat>("select_file_long_click") val selectFileLongClick = Preferences.Behavior.selectFileLongClick switchSelectFileLongClick?.isChecked = selectFileLongClick //Show fast scroll - val swShowFastScroll = findPreference<SwitchPreferenceCompat>(getString(R.string.pref_key_show_fast_scroll)) + val swShowFastScroll = + findPreference<SwitchPreferenceCompat>(getString(R.string.pref_key_show_fast_scroll)) val isFastScrollEnabled = Preferences.Behavior.isFastScrollEnabled swShowFastScroll?.isChecked = isFastScrollEnabled } + + private fun selectFolder(onSelectedFolder: (String) -> Unit) { + + val defaultPath = requireContext().getString(R.string.default_pref_default_folder) + val model = FilePickerModel( + PickOptions( + mimeType = listOf(MimeType.DIRECTORY), + localOnly = false, + maxSelection = null + ) + ) + FilePickerSphereManager( + context = requireContext(), filePickerCallbacks = object : FilePickerCallbacks { + override fun onAllFilesSelected(files: List<FileModel>) { + val path = if (files.isEmpty()) defaultPath else files.first().path + onSelectedFolder(path) + } + + override fun onFileSelectionChanged(file: FileModel, selected: Boolean) { + + } + + override fun onOpenFile(file: FileModel) { + + } + + override fun onSelectedFilesChanged(files: List<FileModel>) { + + } + + }, filePickerModel = model + ).style( + FilePickerStyle( + appTheme = Preferences.Appearance.getAppTheme() + ) + ).picker() + } + } diff --git a/app/src/main/res/layout/file_item.xml b/app/src/main/res/layout/file_item_view.xml similarity index 100% rename from app/src/main/res/layout/file_item.xml rename to app/src/main/res/layout/file_item_view.xml diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 33844b1b..45823f37 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -36,7 +36,7 @@ <androidx.recyclerview.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" - tools:listitem="@layout/file_item" + tools:listitem="@layout/file_item_view" app:layout_behavior="@string/appbar_scrolling_view_behavior" android:id="@+id/recyclerView" /> diff --git a/settings.gradle.kts b/settings.gradle.kts index 8baeca4f..7e9a1361 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -10,6 +10,7 @@ dependencyResolutionManagement { repositories { google() mavenCentral() + maven("https://jitpack.io") } } rootProject.name = "File Manager Sphere"