Dialog content has changed follow font
|
@ -109,17 +109,17 @@ dependencies {
|
||||||
implementation "androidx.gridlayout:gridlayout:1.0.0"
|
implementation "androidx.gridlayout:gridlayout:1.0.0"
|
||||||
implementation "androidx.cardview:cardview:1.0.0"
|
implementation "androidx.cardview:cardview:1.0.0"
|
||||||
implementation "androidx.viewpager2:viewpager2:1.1.0-alpha01"
|
implementation "androidx.viewpager2:viewpager2:1.1.0-alpha01"
|
||||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
implementation 'androidx.appcompat:appcompat:1.2.0'
|
||||||
implementation 'androidx.annotation:annotation:1.1.0'
|
implementation 'androidx.annotation:annotation:1.1.0'
|
||||||
implementation 'androidx.preference:preference-ktx:1.1.1'
|
implementation 'androidx.preference:preference-ktx:1.1.1'
|
||||||
implementation 'androidx.core:core-ktx:1.3.1'
|
implementation 'androidx.core:core-ktx:1.3.1'
|
||||||
implementation 'androidx.fragment:fragment-ktx:1.2.5'
|
implementation 'androidx.fragment:fragment-ktx:1.2.5'
|
||||||
implementation 'androidx.palette:palette-ktx:1.0.0'
|
implementation 'androidx.palette:palette-ktx:1.0.0'
|
||||||
|
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta8'
|
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-rc1'
|
||||||
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
||||||
|
|
||||||
implementation 'com.google.android.material:material:1.3.0-alpha01'
|
implementation 'com.google.android.material:material:1.3.0-alpha02'
|
||||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||||
|
|
||||||
def retrofit_version = '2.9.0'
|
def retrofit_version = '2.9.0'
|
||||||
|
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 43 KiB |
|
@ -43,19 +43,19 @@ class AppShortcutLauncherActivity : Activity() {
|
||||||
when (shortcutType) {
|
when (shortcutType) {
|
||||||
SHORTCUT_TYPE_SHUFFLE_ALL -> {
|
SHORTCUT_TYPE_SHUFFLE_ALL -> {
|
||||||
startServiceWithPlaylist(
|
startServiceWithPlaylist(
|
||||||
SHUFFLE_MODE_SHUFFLE, ShuffleAllPlaylist(applicationContext)
|
SHUFFLE_MODE_SHUFFLE, ShuffleAllPlaylist()
|
||||||
)
|
)
|
||||||
DynamicShortcutManager.reportShortcutUsed(this, ShuffleAllShortcutType.id)
|
DynamicShortcutManager.reportShortcutUsed(this, ShuffleAllShortcutType.id)
|
||||||
}
|
}
|
||||||
SHORTCUT_TYPE_TOP_TRACKS -> {
|
SHORTCUT_TYPE_TOP_TRACKS -> {
|
||||||
startServiceWithPlaylist(
|
startServiceWithPlaylist(
|
||||||
SHUFFLE_MODE_NONE, TopTracksPlaylist(applicationContext)
|
SHUFFLE_MODE_NONE, TopTracksPlaylist()
|
||||||
)
|
)
|
||||||
DynamicShortcutManager.reportShortcutUsed(this, TopTracksShortcutType.id)
|
DynamicShortcutManager.reportShortcutUsed(this, TopTracksShortcutType.id)
|
||||||
}
|
}
|
||||||
SHORTCUT_TYPE_LAST_ADDED -> {
|
SHORTCUT_TYPE_LAST_ADDED -> {
|
||||||
startServiceWithPlaylist(
|
startServiceWithPlaylist(
|
||||||
SHUFFLE_MODE_NONE, LastAddedPlaylist(applicationContext)
|
SHUFFLE_MODE_NONE, LastAddedPlaylist()
|
||||||
)
|
)
|
||||||
DynamicShortcutManager.reportShortcutUsed(this, LastAddedShortcutType.id)
|
DynamicShortcutManager.reportShortcutUsed(this, LastAddedShortcutType.id)
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,6 @@ package code.name.monkey.retromusic.dialogs
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.lifecycle.lifecycleScope
|
|
||||||
import code.name.monkey.retromusic.EXTRA_SONG
|
import code.name.monkey.retromusic.EXTRA_SONG
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.extensions.colorButtons
|
import code.name.monkey.retromusic.extensions.colorButtons
|
||||||
|
@ -26,9 +25,6 @@ import code.name.monkey.retromusic.extensions.materialDialog
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
import code.name.monkey.retromusic.repository.PlaylistRepository
|
import code.name.monkey.retromusic.repository.PlaylistRepository
|
||||||
import code.name.monkey.retromusic.util.PlaylistsUtil
|
import code.name.monkey.retromusic.util.PlaylistsUtil
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import kotlinx.coroutines.withContext
|
|
||||||
import org.koin.android.ext.android.inject
|
import org.koin.android.ext.android.inject
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,35 +33,28 @@ class AddToPlaylistDialog : DialogFragment() {
|
||||||
override fun onCreateDialog(
|
override fun onCreateDialog(
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): Dialog {
|
): Dialog {
|
||||||
val materialDialog = materialDialog(R.string.add_playlist_title)
|
val playlists = playlistRepository.playlists()
|
||||||
lifecycleScope.launch {
|
val playlistNames = mutableListOf<String>()
|
||||||
val playlists = playlistRepository.playlists()
|
playlistNames.add(requireContext().resources.getString(R.string.action_new_playlist))
|
||||||
val playlistNames = mutableListOf<String>()
|
for (p in playlists) {
|
||||||
playlistNames.add(requireContext().resources.getString(R.string.action_new_playlist))
|
playlistNames.add(p.name)
|
||||||
for (p in playlists) {
|
|
||||||
playlistNames.add(p.name)
|
|
||||||
}
|
|
||||||
|
|
||||||
withContext(Dispatchers.Main) {
|
|
||||||
materialDialog.setItems(playlistNames.toTypedArray()) { _, which ->
|
|
||||||
val songs = extraNotNull<ArrayList<Song>>(EXTRA_SONG).value
|
|
||||||
if (which == 0) {
|
|
||||||
CreatePlaylistDialog.create(songs)
|
|
||||||
.show(requireActivity().supportFragmentManager, "ADD_TO_PLAYLIST")
|
|
||||||
} else {
|
|
||||||
PlaylistsUtil.addToPlaylist(
|
|
||||||
requireContext(),
|
|
||||||
songs,
|
|
||||||
playlists[which - 1].id,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
}
|
|
||||||
dismiss()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return materialDialog(R.string.add_playlist_title)
|
return materialDialog(R.string.add_playlist_title)
|
||||||
|
.setItems(playlistNames.toTypedArray()) { _, which ->
|
||||||
|
val songs = extraNotNull<ArrayList<Song>>(EXTRA_SONG).value
|
||||||
|
if (which == 0) {
|
||||||
|
CreatePlaylistDialog.create(songs)
|
||||||
|
.show(requireActivity().supportFragmentManager, "ADD_TO_PLAYLIST")
|
||||||
|
} else {
|
||||||
|
PlaylistsUtil.addToPlaylist(
|
||||||
|
requireContext(),
|
||||||
|
songs,
|
||||||
|
playlists[which - 1].id,
|
||||||
|
true
|
||||||
|
)
|
||||||
|
}
|
||||||
|
dismiss()
|
||||||
|
}
|
||||||
.create().colorButtons()
|
.create().colorButtons()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -127,6 +127,7 @@ fun TextInputLayout.accentColor() {
|
||||||
defaultHintTextColor = colorState
|
defaultHintTextColor = colorState
|
||||||
isHintAnimationEnabled = true
|
isHintAnimationEnabled = true
|
||||||
}
|
}
|
||||||
fun TextInputEditText.accentColor(){
|
|
||||||
|
fun TextInputEditText.accentColor() {
|
||||||
|
|
||||||
}
|
}
|
|
@ -61,7 +61,7 @@ class LibraryViewModel(
|
||||||
|
|
||||||
private val loadArtists: Deferred<List<Artist>>
|
private val loadArtists: Deferred<List<Artist>>
|
||||||
get() = viewModelScope.async(IO) {
|
get() = viewModelScope.async(IO) {
|
||||||
realRepository.allArtists()
|
realRepository.albumArtists()
|
||||||
}
|
}
|
||||||
|
|
||||||
private val loadPlaylists: Deferred<List<Playlist>>
|
private val loadPlaylists: Deferred<List<Playlist>>
|
||||||
|
|
|
@ -75,14 +75,14 @@ class HomeFragment :
|
||||||
lastAdded.setOnClickListener {
|
lastAdded.setOnClickListener {
|
||||||
findActivityNavController(R.id.fragment_container).navigate(
|
findActivityNavController(R.id.fragment_container).navigate(
|
||||||
R.id.playlistDetailsFragment,
|
R.id.playlistDetailsFragment,
|
||||||
bundleOf(EXTRA_PLAYLIST to LastAddedPlaylist(requireActivity()))
|
bundleOf(EXTRA_PLAYLIST to LastAddedPlaylist())
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
topPlayed.setOnClickListener {
|
topPlayed.setOnClickListener {
|
||||||
findActivityNavController(R.id.fragment_container).navigate(
|
findActivityNavController(R.id.fragment_container).navigate(
|
||||||
R.id.playlistDetailsFragment,
|
R.id.playlistDetailsFragment,
|
||||||
bundleOf(EXTRA_PLAYLIST to TopTracksPlaylist(requireActivity()))
|
bundleOf(EXTRA_PLAYLIST to TopTracksPlaylist())
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ class HomeFragment :
|
||||||
history.setOnClickListener {
|
history.setOnClickListener {
|
||||||
requireActivity().findNavController(R.id.fragment_container).navigate(
|
requireActivity().findNavController(R.id.fragment_container).navigate(
|
||||||
R.id.playlistDetailsFragment,
|
R.id.playlistDetailsFragment,
|
||||||
bundleOf(EXTRA_PLAYLIST to HistoryPlaylist(requireActivity()))
|
bundleOf(EXTRA_PLAYLIST to HistoryPlaylist())
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,9 @@ class Album {
|
||||||
val songCount: Int
|
val songCount: Int
|
||||||
get() = songs!!.size
|
get() = songs!!.size
|
||||||
|
|
||||||
|
val albumArtist: String?
|
||||||
|
get() = safeGetFirstSong().albumArtist
|
||||||
|
|
||||||
constructor(songs: ArrayList<Song>) {
|
constructor(songs: ArrayList<Song>) {
|
||||||
this.songs = songs
|
this.songs = songs
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,10 +25,10 @@ class Artist {
|
||||||
|
|
||||||
val name: String
|
val name: String
|
||||||
get() {
|
get() {
|
||||||
val name = safeGetFirstAlbum().artistName
|
val name = safeGetFirstAlbum().safeGetFirstSong().albumArtist
|
||||||
return if (MusicUtil.isArtistNameUnknown(name)) {
|
return if (MusicUtil.isArtistNameUnknown(name)) {
|
||||||
UNKNOWN_ARTIST_DISPLAY_NAME
|
UNKNOWN_ARTIST_DISPLAY_NAME
|
||||||
} else name!!
|
} else safeGetFirstAlbum().safeGetFirstSong().artistName
|
||||||
}
|
}
|
||||||
|
|
||||||
val songCount: Int
|
val songCount: Int
|
||||||
|
|
|
@ -1,14 +1,18 @@
|
||||||
package code.name.monkey.retromusic.model.smartplaylist
|
package code.name.monkey.retromusic.model.smartplaylist
|
||||||
|
|
||||||
import android.content.Context
|
import code.name.monkey.retromusic.App
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
|
import kotlinx.android.parcel.Parcelize
|
||||||
import org.koin.core.KoinComponent
|
import org.koin.core.KoinComponent
|
||||||
|
|
||||||
class HistoryPlaylist(
|
@Parcelize
|
||||||
context: Context
|
class HistoryPlaylist :
|
||||||
) : AbsSmartPlaylist(context.getString(R.string.history), R.drawable.ic_history), KoinComponent {
|
AbsSmartPlaylist(
|
||||||
|
App.getContext().getString(R.string.history),
|
||||||
|
R.drawable.ic_history
|
||||||
|
),
|
||||||
|
KoinComponent {
|
||||||
override fun songs(): List<Song> {
|
override fun songs(): List<Song> {
|
||||||
return topPlayedRepository.recentlyPlayedTracks()
|
return topPlayedRepository.recentlyPlayedTracks()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
package code.name.monkey.retromusic.model.smartplaylist
|
package code.name.monkey.retromusic.model.smartplaylist
|
||||||
|
|
||||||
import android.content.Context
|
import code.name.monkey.retromusic.App
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
|
import kotlinx.android.parcel.Parcelize
|
||||||
|
|
||||||
class LastAddedPlaylist(context: Context) :
|
@Parcelize
|
||||||
AbsSmartPlaylist(context.getString(R.string.last_added), R.drawable.ic_library_add) {
|
class LastAddedPlaylist :
|
||||||
|
AbsSmartPlaylist(App.getContext().getString(R.string.last_added), R.drawable.ic_library_add) {
|
||||||
override fun songs(): List<Song> {
|
override fun songs(): List<Song> {
|
||||||
return lastAddedRepository.recentSongs()
|
return lastAddedRepository.recentSongs()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
package code.name.monkey.retromusic.model.smartplaylist
|
package code.name.monkey.retromusic.model.smartplaylist
|
||||||
|
|
||||||
import android.content.Context
|
import code.name.monkey.retromusic.App
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
|
import kotlinx.android.parcel.Parcelize
|
||||||
|
|
||||||
class NotPlayedPlaylist(
|
@Parcelize
|
||||||
context: Context
|
class NotPlayedPlaylist : AbsSmartPlaylist(
|
||||||
) : AbsSmartPlaylist(context.getString(R.string.not_recently_played), R.drawable.ic_watch_later) {
|
App.getContext().getString(R.string.not_recently_played),
|
||||||
|
R.drawable.ic_watch_later
|
||||||
|
) {
|
||||||
override fun songs(): List<Song> {
|
override fun songs(): List<Song> {
|
||||||
return topPlayedRepository.notRecentlyPlayedTracks()
|
return topPlayedRepository.notRecentlyPlayedTracks()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
package code.name.monkey.retromusic.model.smartplaylist
|
package code.name.monkey.retromusic.model.smartplaylist
|
||||||
|
|
||||||
import android.content.Context
|
import code.name.monkey.retromusic.App
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
|
import kotlinx.android.parcel.Parcelize
|
||||||
|
|
||||||
class ShuffleAllPlaylist(
|
@Parcelize
|
||||||
context: Context
|
class ShuffleAllPlaylist : AbsSmartPlaylist(
|
||||||
) : AbsSmartPlaylist(context.getString(R.string.action_shuffle_all), R.drawable.ic_shuffle) {
|
App.getContext().getString(R.string.action_shuffle_all),
|
||||||
|
R.drawable.ic_shuffle
|
||||||
|
) {
|
||||||
override fun songs(): List<Song> {
|
override fun songs(): List<Song> {
|
||||||
return songRepository.songs()
|
return songRepository.songs()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
package code.name.monkey.retromusic.model.smartplaylist
|
package code.name.monkey.retromusic.model.smartplaylist
|
||||||
|
|
||||||
import android.content.Context
|
import code.name.monkey.retromusic.App
|
||||||
import code.name.monkey.retromusic.R
|
import code.name.monkey.retromusic.R
|
||||||
import code.name.monkey.retromusic.model.Song
|
import code.name.monkey.retromusic.model.Song
|
||||||
|
import kotlinx.android.parcel.Parcelize
|
||||||
|
|
||||||
class TopTracksPlaylist(
|
@Parcelize
|
||||||
context: Context
|
class TopTracksPlaylist : AbsSmartPlaylist(
|
||||||
) : AbsSmartPlaylist(
|
App.getContext().getString(R.string.my_top_tracks),
|
||||||
context.getString(R.string.my_top_tracks),
|
|
||||||
R.drawable.ic_trending_up
|
R.drawable.ic_trending_up
|
||||||
) {
|
) {
|
||||||
override fun songs(): List<Song> {
|
override fun songs(): List<Song> {
|
||||||
|
|
|
@ -63,7 +63,7 @@ class BlacklistPreferenceDialog : DialogFragment(), BlacklistFolderChooserDialog
|
||||||
chooserDialog?.setCallback(this)
|
chooserDialog?.setCallback(this)
|
||||||
refreshBlacklistData()
|
refreshBlacklistData()
|
||||||
return materialDialog(R.string.blacklist)
|
return materialDialog(R.string.blacklist)
|
||||||
.setPositiveButton(android.R.string.ok) { _, _ ->
|
.setPositiveButton(R.string.done) { _, _ ->
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
.setNeutralButton(R.string.clear_action) { _, _ ->
|
.setNeutralButton(R.string.clear_action) { _, _ ->
|
||||||
|
|
|
@ -22,6 +22,8 @@ import code.name.monkey.retromusic.util.PreferenceUtil
|
||||||
interface ArtistRepository {
|
interface ArtistRepository {
|
||||||
fun artists(): List<Artist>
|
fun artists(): List<Artist>
|
||||||
|
|
||||||
|
fun albumArtists(): List<Artist>
|
||||||
|
|
||||||
fun artists(query: String): List<Artist>
|
fun artists(query: String): List<Artist>
|
||||||
|
|
||||||
fun artist(artistId: Int): Artist
|
fun artist(artistId: Int): Artist
|
||||||
|
@ -59,6 +61,31 @@ class RealArtistRepository(
|
||||||
return splitIntoArtists(albumRepository.splitIntoAlbums(songs))
|
return splitIntoArtists(albumRepository.splitIntoAlbums(songs))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun albumArtists(): List<Artist> {
|
||||||
|
val songs = songRepository.songs(
|
||||||
|
songRepository.makeSongCursor(
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
getSongLoaderSortOrder()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return splitIntoAlbumArtists(albumRepository.splitIntoAlbums(songs))
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun splitIntoAlbumArtists(albums: List<Album>): List<Artist> {
|
||||||
|
// First group the songs in albums by filtering each artist name
|
||||||
|
val amap = hashMapOf<String, Artist>()
|
||||||
|
albums.forEach {
|
||||||
|
val key = it.albumArtist
|
||||||
|
if (key != null) {
|
||||||
|
val artist: Artist = if (amap[key] != null) amap[key]!! else Artist()
|
||||||
|
artist.albums?.add(it)
|
||||||
|
amap[key] = artist
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ArrayList(amap.values)
|
||||||
|
}
|
||||||
|
|
||||||
override fun artist(artistId: Int): Artist {
|
override fun artist(artistId: Int): Artist {
|
||||||
val songs = songRepository.songs(
|
val songs = songRepository.songs(
|
||||||
songRepository.makeSongCursor(
|
songRepository.makeSongCursor(
|
||||||
|
|
|
@ -36,6 +36,8 @@ interface Repository {
|
||||||
|
|
||||||
suspend fun allArtists(): List<Artist>
|
suspend fun allArtists(): List<Artist>
|
||||||
|
|
||||||
|
suspend fun albumArtists(): List<Artist>
|
||||||
|
|
||||||
suspend fun allPlaylists(): List<Playlist>
|
suspend fun allPlaylists(): List<Playlist>
|
||||||
|
|
||||||
suspend fun allGenres(): List<Genre>
|
suspend fun allGenres(): List<Genre>
|
||||||
|
@ -112,6 +114,8 @@ class RealRepository(
|
||||||
|
|
||||||
override suspend fun allArtists(): List<Artist> = artistRepository.artists()
|
override suspend fun allArtists(): List<Artist> = artistRepository.artists()
|
||||||
|
|
||||||
|
override suspend fun albumArtists(): List<Artist> = artistRepository.albumArtists()
|
||||||
|
|
||||||
override suspend fun artistById(artistId: Int): Artist = artistRepository.artist(artistId)
|
override suspend fun artistById(artistId: Int): Artist = artistRepository.artist(artistId)
|
||||||
|
|
||||||
override suspend fun recentArtists(): List<Artist> = lastAddedRepository.recentArtists()
|
override suspend fun recentArtists(): List<Artist> = lastAddedRepository.recentArtists()
|
||||||
|
@ -212,7 +216,7 @@ class RealRepository(
|
||||||
|
|
||||||
override suspend fun suggestionsHome(): Home {
|
override suspend fun suggestionsHome(): Home {
|
||||||
val songs =
|
val songs =
|
||||||
NotPlayedPlaylist(context).songs().shuffled().takeIf {
|
NotPlayedPlaylist().songs().shuffled().takeIf {
|
||||||
it.size > 9
|
it.size > 9
|
||||||
} ?: emptyList()
|
} ?: emptyList()
|
||||||
println(songs.size)
|
println(songs.size)
|
5
app/src/main/res/drawable/popup_background.xml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<solid android:color="?attr/colorSurface" />
|
||||||
|
<corners android:radius="12dp" />
|
||||||
|
</shape>
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 7.3 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 9.3 KiB |
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 17 KiB |
|
@ -882,4 +882,5 @@
|
||||||
</plurals>
|
</plurals>
|
||||||
<!-- TODO: Remove or change this placeholder text -->
|
<!-- TODO: Remove or change this placeholder text -->
|
||||||
<string name="hello_blank_fragment">Hello blank fragment</string>
|
<string name="hello_blank_fragment">Hello blank fragment</string>
|
||||||
|
<string name="done">Done</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -191,4 +191,50 @@
|
||||||
<item name="android:textColor">@color/md_red_400</item>
|
<item name="android:textColor">@color/md_red_400</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
<style name="MaterialPopupMenuStyle" parent="Widget.MaterialComponents.PopupMenu">
|
||||||
|
<item name="android:popupBackground">@drawable/popup_background</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="MaterialAlertDialogTheme" parent="ThemeOverlay.MaterialComponents.MaterialAlertDialog">
|
||||||
|
<item name="android:dialogCornerRadius" tools:targetApi="p">12dp</item>
|
||||||
|
<item name="materialAlertDialogBodyTextStyle">
|
||||||
|
@style/AppTextAppearance.MaterialAlertDialog.Body
|
||||||
|
</item>
|
||||||
|
<item name="materialAlertDialogTitleTextStyle">
|
||||||
|
@style/AppTextAppearance.MaterialAlertDialog.Title
|
||||||
|
</item>
|
||||||
|
<item name="buttonBarPositiveButtonStyle">
|
||||||
|
@style/AppTextAppearance.MaterialAlertDialog.Button
|
||||||
|
</item>
|
||||||
|
<item name="buttonBarNegativeButtonStyle">
|
||||||
|
@style/AppTextAppearance.MaterialAlertDialog.Button
|
||||||
|
</item>
|
||||||
|
<item name="buttonBarNeutralButtonStyle">
|
||||||
|
@style/AppTextAppearance.MaterialAlertDialog.Button
|
||||||
|
</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTextAppearance.MaterialAlertDialog.Button" parent="Widget.MaterialComponents.Button.TextButton">
|
||||||
|
<item name="android:textSize">16sp</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTextAppearance.MaterialAlertDialog.Body" parent="MaterialAlertDialog.MaterialComponents.Body.Text">
|
||||||
|
<item name="android:textSize">14sp</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTextAppearance.MaterialAlertDialog.Title" parent="MaterialAlertDialog.MaterialComponents.Title.Text">
|
||||||
|
<item name="android:textSize">20sp</item>
|
||||||
|
<item name="android:textStyle">bold</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="MaterialButtonTheme" parent="Widget.MaterialComponents.Button">
|
||||||
|
<item name="cornerRadius">6dp</item>
|
||||||
|
<item name="iconGravity">textStart</item>
|
||||||
|
<item name="iconTint">?attr/colorControlNormal</item>
|
||||||
|
<item name="android:textColor">?android:attr/textColorPrimary</item>
|
||||||
|
<item name="android:textAppearance">@style/TextViewNormal</item>
|
||||||
|
<item name="android:textAllCaps">false</item>
|
||||||
|
<item name="android:paddingTop">@dimen/button_padding_vertical</item>
|
||||||
|
<item name="android:paddingBottom">@dimen/button_padding_vertical</item>
|
||||||
|
</style>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
<resources>
|
||||||
|
|
||||||
<style name="Theme.RetroMusic.Base.Adaptive" parent="Theme.MaterialComponents.DayNight.NoActionBar">
|
<style name="Theme.RetroMusic.Base.Adaptive" parent="Theme.MaterialComponents.DayNight.NoActionBar">
|
||||||
<item name="android:windowActionBarOverlay">true</item>
|
<item name="android:windowActionBarOverlay">true</item>
|
||||||
|
@ -13,6 +13,8 @@
|
||||||
<item name="android:actionOverflowButtonStyle">@style/Widget.ActionButton.Overflow</item>
|
<item name="android:actionOverflowButtonStyle">@style/Widget.ActionButton.Overflow</item>
|
||||||
<item name="materialAlertDialogTheme">@style/MaterialAlertDialogTheme</item>
|
<item name="materialAlertDialogTheme">@style/MaterialAlertDialogTheme</item>
|
||||||
<item name="materialButtonStyle">@style/MaterialButtonTheme</item>
|
<item name="materialButtonStyle">@style/MaterialButtonTheme</item>
|
||||||
|
<item name="popupMenuStyle">@style/MaterialPopupMenuStyle</item>
|
||||||
|
<item name="popupWindowStyle">@style/MaterialPopupMenuStyle</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Theme.RetroMusic.Base" parent="Theme.MaterialComponents.NoActionBar">
|
<style name="Theme.RetroMusic.Base" parent="Theme.MaterialComponents.NoActionBar">
|
||||||
|
@ -29,11 +31,9 @@
|
||||||
<item name="windowActionBar">false</item>
|
<item name="windowActionBar">false</item>
|
||||||
<item name="materialAlertDialogTheme">@style/MaterialAlertDialogTheme</item>
|
<item name="materialAlertDialogTheme">@style/MaterialAlertDialogTheme</item>
|
||||||
<item name="materialButtonStyle">@style/MaterialButtonTheme</item>
|
<item name="materialButtonStyle">@style/MaterialButtonTheme</item>
|
||||||
|
|
||||||
<!--Manual setting colors-->
|
|
||||||
<item name="colorSurface">@color/darkColorSurface</item>
|
<item name="colorSurface">@color/darkColorSurface</item>
|
||||||
<item name="android:windowBackground">@color/window_color_dark</item>
|
<item name="android:windowBackground">@color/window_color_dark</item>
|
||||||
|
<item name="popupMenuStyle">@style/MaterialPopupMenuStyle</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Theme.RetroMusic.Base.Black" parent="Theme.MaterialComponents.NoActionBar">
|
<style name="Theme.RetroMusic.Base.Black" parent="Theme.MaterialComponents.NoActionBar">
|
||||||
|
@ -50,6 +50,7 @@
|
||||||
<item name="colorOnBackground">@color/blackColorSurface</item>
|
<item name="colorOnBackground">@color/blackColorSurface</item>
|
||||||
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
|
||||||
<item name="mcab_popup_theme">@style/ThemeOverlay.AppCompat.Dark</item>
|
<item name="mcab_popup_theme">@style/ThemeOverlay.AppCompat.Dark</item>
|
||||||
|
<item name="popupMenuStyle">@style/MaterialPopupMenuStyle</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Theme.RetroMusic.Base.Light" parent="Theme.MaterialComponents.Light.NoActionBar">
|
<style name="Theme.RetroMusic.Base.Light" parent="Theme.MaterialComponents.Light.NoActionBar">
|
||||||
|
@ -65,7 +66,7 @@
|
||||||
<item name="windowActionBar">false</item>
|
<item name="windowActionBar">false</item>
|
||||||
<item name="materialAlertDialogTheme">@style/MaterialAlertDialogTheme</item>
|
<item name="materialAlertDialogTheme">@style/MaterialAlertDialogTheme</item>
|
||||||
<item name="materialButtonStyle">@style/MaterialButtonTheme</item>
|
<item name="materialButtonStyle">@style/MaterialButtonTheme</item>
|
||||||
|
<item name="popupMenuStyle">@style/MaterialPopupMenuStyle</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
@ -87,19 +88,4 @@
|
||||||
<item name="android:layout_height">wrap_content</item>
|
<item name="android:layout_height">wrap_content</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
<style name="MaterialAlertDialogTheme" parent="@style/ThemeOverlay.MaterialComponents.Dialog">
|
|
||||||
<item name="android:dialogCornerRadius" tools:targetApi="p">12dp</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<style name="MaterialButtonTheme" parent="Widget.MaterialComponents.Button">
|
|
||||||
<item name="cornerRadius">6dp</item>
|
|
||||||
<item name="iconGravity">textStart</item>
|
|
||||||
<item name="iconTint">?attr/colorControlNormal</item>
|
|
||||||
<item name="android:textColor">?android:attr/textColorPrimary</item>
|
|
||||||
<item name="android:textAppearance">@style/TextViewNormal</item>
|
|
||||||
<item name="android:textAllCaps">false</item>
|
|
||||||
<item name="android:paddingTop">@dimen/button_padding_vertical</item>
|
|
||||||
<item name="android:paddingBottom">@dimen/button_padding_vertical</item>
|
|
||||||
</style>
|
|
||||||
</resources>
|
</resources>
|