diff --git a/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt b/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt index 15a61e2b9..55566655f 100644 --- a/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt @@ -13,6 +13,7 @@ import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentLoadingBinding +import org.oxycblt.auxio.logD import org.oxycblt.auxio.music.MusicStore /** @@ -72,6 +73,8 @@ class LoadingFragment : Fragment() { loadingModel.load(requireContext()) } + logD("Fragment created") + return binding.root } diff --git a/app/src/main/java/org/oxycblt/auxio/settings/blacklist/BlacklistDialog.kt b/app/src/main/java/org/oxycblt/auxio/settings/blacklist/BlacklistDialog.kt index e5dd98585..8831ea0eb 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/blacklist/BlacklistDialog.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/blacklist/BlacklistDialog.kt @@ -5,12 +5,16 @@ import android.os.Environment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.view.children +import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels +import androidx.recyclerview.widget.RecyclerView import com.afollestad.materialdialogs.MaterialDialog -import com.afollestad.materialdialogs.WhichButton -import com.afollestad.materialdialogs.actions.setActionButtonEnabled +import com.afollestad.materialdialogs.customview.getCustomView import com.afollestad.materialdialogs.files.folderChooser import com.afollestad.materialdialogs.files.selectedFolder +import com.afollestad.materialdialogs.internal.list.DialogRecyclerView +import com.afollestad.materialdialogs.utils.invalidateDividers import com.google.android.material.bottomsheet.BottomSheetDialogFragment import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentBlacklistBinding @@ -37,41 +41,59 @@ class BlacklistDialog : BottomSheetDialogFragment() { binding.blacklistRecycler.adapter = adapter binding.blacklistAdd.setOnClickListener { - MaterialDialog(requireActivity()).show { - positiveButton(R.string.label_add) { - onFolderSelected() - } + showFileDialog() + } - negativeButton() - - folderChooser( - requireContext(), - initialDirectory = File(Environment.getExternalStorageDirectory().absolutePath), - waitForPositiveButton = false, - emptyTextRes = R.string.error_no_dirs - ) - - // Still need to force-reenable the positive button even after flagging the - // disabling as false when setting up the file chooser - // Gotta love third-party libraries - setActionButtonEnabled(WhichButton.POSITIVE, true) - } + binding.blacklistCancel.setOnClickListener { + dismiss() } // --- VIEWMODEL SETUP --- blacklistModel.paths.observe(viewLifecycleOwner) { paths -> adapter.submitList(paths) + + binding.blacklistEmptyText.isVisible = paths.isEmpty() } return binding.root } + private fun showFileDialog() { + MaterialDialog(requireActivity()).show { + positiveButton(R.string.label_add) { + onFolderSelected() + } + + negativeButton() + + folderChooser( + requireContext(), + initialDirectory = File(Environment.getExternalStorageDirectory().absolutePath), + waitForPositiveButton = false, + emptyTextRes = R.string.error_no_dirs + ) + + // Once again remove the ugly dividers from the dialog, but now with an even + // worse solution. + invalidateDividers(showTop = false, showBottom = false) + + val recycler = (getCustomView() as ViewGroup) + .children.filterIsInstance().firstOrNull() + + recycler?.addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { + invalidateDividers(showTop = false, showBottom = false) + } + }) + } + } + private fun MaterialDialog.onFolderSelected() { selectedFolder()?.absolutePath?.let { path -> // Due to how Auxio's navigation flow works, dont allow the main root directory // to be excluded, as that would lead to the user being stuck at the "No Music Found" - // error. + // screen. if (path == Environment.getExternalStorageDirectory().absolutePath) { getString(R.string.error_folder_would_brick_app) .createToast(requireContext()) diff --git a/app/src/main/java/org/oxycblt/auxio/settings/blacklist/BlacklistViewModel.kt b/app/src/main/java/org/oxycblt/auxio/settings/blacklist/BlacklistViewModel.kt index ba8ab7878..d756535a7 100644 --- a/app/src/main/java/org/oxycblt/auxio/settings/blacklist/BlacklistViewModel.kt +++ b/app/src/main/java/org/oxycblt/auxio/settings/blacklist/BlacklistViewModel.kt @@ -8,6 +8,9 @@ class BlacklistViewModel : ViewModel() { private val mPaths = MutableLiveData(mutableListOf()) val paths: LiveData> get() = mPaths + var modified = false + private set + fun addPath(path: String) { if (mPaths.value!!.contains(path)) { return diff --git a/app/src/main/res/drawable/ic_add.xml b/app/src/main/res/drawable/ic_add.xml deleted file mode 100644 index 64b5e7b70..000000000 --- a/app/src/main/res/drawable/ic_add.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_blacklist.xml b/app/src/main/res/layout/fragment_blacklist.xml index ec4ec3c1c..613aca3f1 100644 --- a/app/src/main/res/layout/fragment_blacklist.xml +++ b/app/src/main/res/layout/fragment_blacklist.xml @@ -28,33 +28,30 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:overScrollMode="never" - tools:itemCount="2" + tools:itemCount="1" tools:listitem="@layout/item_blacklist_entry" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layout_constraintTop_toBottomOf="@+id/blacklist_header" />