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"