diff --git a/app/src/debug/res/drawable-v24/ic_launcher_foreground.xml b/app/src/debug/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 000000000..de78f6455
--- /dev/null
+++ b/app/src/debug/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/debug/res/drawable/ic_launcher_background.xml b/app/src/debug/res/drawable/ic_launcher_background.xml
index c5c410485..8b589ff81 100644
--- a/app/src/debug/res/drawable/ic_launcher_background.xml
+++ b/app/src/debug/res/drawable/ic_launcher_background.xml
@@ -4,72 +4,71 @@
android:width="108dp"
android:viewportHeight="108"
android:viewportWidth="108"
- android:alpha="0.5"
xmlns:android="http://schemas.android.com/apk/res/android">
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
+ android:strokeColor="#15FFFFFF" android:strokeWidth="0.8"/>
diff --git a/app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 000000000..bbd3e0212
--- /dev/null
+++ b/app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/debug/res/mipmap-hdpi/ic_launcher.png b/app/src/debug/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..6ac18a10a
Binary files /dev/null and b/app/src/debug/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/debug/res/mipmap-mdpi/ic_launcher.png b/app/src/debug/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..8ec4d8e26
Binary files /dev/null and b/app/src/debug/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/debug/res/mipmap-xhdpi/ic_launcher.png b/app/src/debug/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..5870e9029
Binary files /dev/null and b/app/src/debug/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png b/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..2f55108b5
Binary files /dev/null and b/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..dee580c7e
Binary files /dev/null and b/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt
index 89209a94f..2448453d0 100644
--- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt
@@ -86,9 +86,7 @@ class AlbumDetailFragment : DetailFragment() {
detailModel.navToParent.observe(viewLifecycleOwner) {
if (it) {
- if (args.fromArtist) {
- findNavController().navigateUp()
- } else {
+ if (!args.fromArtist) {
findNavController().navigate(
AlbumDetailFragmentDirections.actionShowParentArtist(
detailModel.currentAlbum.value!!.artist.id
diff --git a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt
index e2ce1a406..49acac6b4 100644
--- a/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt
+++ b/app/src/main/java/org/oxycblt/auxio/detail/DetailViewModel.kt
@@ -12,6 +12,7 @@ import org.oxycblt.auxio.recycler.SortMode
/**
* ViewModel that stores data for the [DetailFragment]s, such as what they're showing & what
* [SortMode] they are currently on.
+ * TODO: Preserve previous backstack when doing playing item navigation
*/
class DetailViewModel : ViewModel() {
private var mIsNavigating = false
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 1389a0d2c..02ed51e80 100644
--- a/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt
@@ -9,7 +9,7 @@ import android.view.ViewGroup
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
-import androidx.fragment.app.activityViewModels
+import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.FragmentLoadingBinding
@@ -23,7 +23,8 @@ import org.oxycblt.auxio.music.processing.MusicLoader
* @author OxygenCobalt
*/
class LoadingFragment : Fragment(R.layout.fragment_loading) {
- private val loadingModel: LoadingViewModel by activityViewModels {
+ // LoadingViewModel is scoped to this fragment only
+ private val loadingModel: LoadingViewModel by viewModels {
LoadingViewModel.Factory(requireActivity().application)
}
diff --git a/app/src/main/java/org/oxycblt/auxio/loading/LoadingViewModel.kt b/app/src/main/java/org/oxycblt/auxio/loading/LoadingViewModel.kt
index ce7eaff33..62400e9cf 100644
--- a/app/src/main/java/org/oxycblt/auxio/loading/LoadingViewModel.kt
+++ b/app/src/main/java/org/oxycblt/auxio/loading/LoadingViewModel.kt
@@ -86,7 +86,7 @@ class LoadingViewModel(private val app: Application) : ViewModel() {
* Factory for [LoadingViewModel] instances.
*/
class Factory(private val application: Application) : ViewModelProvider.Factory {
- @Suppress("unchecked_cast")
+ @Suppress("UNCHECKED_CAST")
override fun create(modelClass: Class): T {
if (modelClass.isAssignableFrom(LoadingViewModel::class.java)) {
return LoadingViewModel(application) as T
diff --git a/app/src/main/java/org/oxycblt/auxio/ui/ActionMenu.kt b/app/src/main/java/org/oxycblt/auxio/ui/ActionMenu.kt
index b0c955498..1be12518e 100644
--- a/app/src/main/java/org/oxycblt/auxio/ui/ActionMenu.kt
+++ b/app/src/main/java/org/oxycblt/auxio/ui/ActionMenu.kt
@@ -17,12 +17,13 @@ import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.playback.state.PlaybackMode
/**
- * A wrapper around [PopupMenu] that automates a ton of things across all the menus in Auxio
+ * A wrapper around [PopupMenu] that automates the menu creation for nearly every datatype in Auxio.
* @param activity [AppCompatActivity] required as both a context and ViewModelStore owner.
* @param anchor [View] This should be centered around
* @param data [BaseModel] this menu corresponds to
- * @param flag Any extra flags to accompany the data.
+ * @param flag (Optional, defaults to [FLAG_NONE]) Any extra flags to accompany the data.
* See [FLAG_NONE], [FLAG_IN_ALBUM], [FLAG_IN_ARTIST] and [FLAG_IN_GENRE] for more details.
+ * @throws IllegalArgumentException When there is no menu for this specific datatype/flag
*/
class ActionMenu(
activity: AppCompatActivity,
@@ -32,6 +33,7 @@ class ActionMenu(
) : PopupMenu(activity, anchor) {
private val context = activity.applicationContext
+ // Get viewmodels using the activity as the store owner
private val detailModel: DetailViewModel by lazy {
ViewModelProvider(activity).get(DetailViewModel::class.java)
}
@@ -43,7 +45,9 @@ class ActionMenu(
init {
val menuRes = determineMenu()
- check(menuRes != -1) { "There is no menu associated with this configuration." }
+ check(menuRes != -1) {
+ "There is no menu associated with datatype ${data::class.simpleName} and flag $flag"
+ }
inflate(menuRes)
setOnMenuItemClickListener {
@@ -158,11 +162,11 @@ class ActionMenu(
companion object {
/** No Flags **/
const val FLAG_NONE = -1
- /** Flag for when an item is accessed from an artist **/
+ /** Flag for when a menu is opened from an artist (See [org.oxycblt.auxio.detail.ArtistDetailFragment]) **/
const val FLAG_IN_ARTIST = 0
- /** Flag for when an item is accessed from an album **/
+ /** Flag for when a menu is opened from an album (See [org.oxycblt.auxio.detail.AlbumDetailFragment]) **/
const val FLAG_IN_ALBUM = 1
- /** Flag or when an item is accessed from a genre **/
+ /** Flag for when a menu is opened from a genre (See [org.oxycblt.auxio.detail.GenreDetailFragment]) **/
const val FLAG_IN_GENRE = 2
}
}
diff --git a/app/src/main/res/layout/item_album_header.xml b/app/src/main/res/layout/item_album_header.xml
index 1c45430a1..dbc0b1886 100644
--- a/app/src/main/res/layout/item_album_header.xml
+++ b/app/src/main/res/layout/item_album_header.xml
@@ -55,9 +55,6 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/margin_medium"
- android:background="@drawable/ui_ripple"
- android:clickable="true"
- android:focusable="true"
android:onClick="@{() -> detailModel.navToParent()}"
android:text="@{album.artist.name}"
android:textAppearance="?android:attr/textAppearanceListItem"