Minor fixes
Do some more landscape layout fixes and remove some redundant database code.
This commit is contained in:
parent
07e7e1ae5b
commit
8085c25103
20 changed files with 76 additions and 81 deletions
|
@ -12,9 +12,9 @@ import androidx.databinding.DataBindingUtil
|
||||||
import org.oxycblt.auxio.databinding.ActivityMainBinding
|
import org.oxycblt.auxio.databinding.ActivityMainBinding
|
||||||
import org.oxycblt.auxio.playback.PlaybackService
|
import org.oxycblt.auxio.playback.PlaybackService
|
||||||
import org.oxycblt.auxio.settings.SettingsManager
|
import org.oxycblt.auxio.settings.SettingsManager
|
||||||
import org.oxycblt.auxio.utils.accent
|
import org.oxycblt.auxio.ui.accent
|
||||||
import org.oxycblt.auxio.utils.handleTransparentSystemBars
|
import org.oxycblt.auxio.ui.handleTransparentSystemBars
|
||||||
import org.oxycblt.auxio.utils.toColor
|
import org.oxycblt.auxio.ui.toColor
|
||||||
|
|
||||||
// FIXME: Fix bug where fast navigation will break the animations and
|
// FIXME: Fix bug where fast navigation will break the animations and
|
||||||
// lead to nothing being displayed [Possibly Un-fixable]
|
// lead to nothing being displayed [Possibly Un-fixable]
|
||||||
|
|
|
@ -19,10 +19,10 @@ import org.oxycblt.auxio.music.Artist
|
||||||
import org.oxycblt.auxio.music.MusicStore
|
import org.oxycblt.auxio.music.MusicStore
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.playback.PlaybackViewModel
|
import org.oxycblt.auxio.playback.PlaybackViewModel
|
||||||
import org.oxycblt.auxio.utils.accent
|
import org.oxycblt.auxio.ui.accent
|
||||||
import org.oxycblt.auxio.utils.getTransparentAccent
|
import org.oxycblt.auxio.ui.getTransparentAccent
|
||||||
import org.oxycblt.auxio.utils.isLandscape
|
import org.oxycblt.auxio.ui.isLandscape
|
||||||
import org.oxycblt.auxio.utils.toColor
|
import org.oxycblt.auxio.ui.toColor
|
||||||
import kotlin.IllegalArgumentException
|
import kotlin.IllegalArgumentException
|
||||||
|
|
||||||
class MainFragment : Fragment() {
|
class MainFragment : Fragment() {
|
||||||
|
|
|
@ -8,7 +8,6 @@ package org.oxycblt.auxio.database
|
||||||
* @property index - The current index in the queue.
|
* @property index - The current index in the queue.
|
||||||
* @property mode - The integer form of the current [org.oxycblt.auxio.playback.state.PlaybackMode]
|
* @property mode - The integer form of the current [org.oxycblt.auxio.playback.state.PlaybackMode]
|
||||||
* @property isShuffling - A bool for if the queue was shuffled
|
* @property isShuffling - A bool for if the queue was shuffled
|
||||||
* @property shuffleSeed - A long for the seed used to shuffle the queue [Used for quick-restore]
|
|
||||||
* @property loopMode - The integer form of the current [org.oxycblt.auxio.playback.state.LoopMode]
|
* @property loopMode - The integer form of the current [org.oxycblt.auxio.playback.state.LoopMode]
|
||||||
* @property inUserQueue - A bool for if the state was currently playing from the user queue.
|
* @property inUserQueue - A bool for if the state was currently playing from the user queue.
|
||||||
* @author OxygenCobalt
|
* @author OxygenCobalt
|
||||||
|
@ -21,7 +20,6 @@ data class PlaybackState(
|
||||||
val index: Int,
|
val index: Int,
|
||||||
val mode: Int,
|
val mode: Int,
|
||||||
val isShuffling: Boolean,
|
val isShuffling: Boolean,
|
||||||
val shuffleSeed: Long,
|
|
||||||
val loopMode: Int,
|
val loopMode: Int,
|
||||||
val inUserQueue: Boolean
|
val inUserQueue: Boolean
|
||||||
) {
|
) {
|
||||||
|
@ -33,7 +31,6 @@ data class PlaybackState(
|
||||||
const val COLUMN_INDEX = "state_index"
|
const val COLUMN_INDEX = "state_index"
|
||||||
const val COLUMN_MODE = "mode"
|
const val COLUMN_MODE = "mode"
|
||||||
const val COLUMN_IS_SHUFFLING = "is_shuffling"
|
const val COLUMN_IS_SHUFFLING = "is_shuffling"
|
||||||
const val COLUMN_SHUFFLE_SEED = "shuffle_seed"
|
|
||||||
const val COLUMN_LOOP_MODE = "loop_mode"
|
const val COLUMN_LOOP_MODE = "loop_mode"
|
||||||
const val COLUMN_IN_USER_QUEUE = "is_user_queue"
|
const val COLUMN_IN_USER_QUEUE = "is_user_queue"
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,6 @@ class PlaybackStateDatabase(context: Context) :
|
||||||
command.append("${PlaybackState.COLUMN_INDEX} INTEGER NOT NULL,")
|
command.append("${PlaybackState.COLUMN_INDEX} INTEGER NOT NULL,")
|
||||||
command.append("${PlaybackState.COLUMN_MODE} INTEGER NOT NULL,")
|
command.append("${PlaybackState.COLUMN_MODE} INTEGER NOT NULL,")
|
||||||
command.append("${PlaybackState.COLUMN_IS_SHUFFLING} BOOLEAN NOT NULL,")
|
command.append("${PlaybackState.COLUMN_IS_SHUFFLING} BOOLEAN NOT NULL,")
|
||||||
command.append("${PlaybackState.COLUMN_SHUFFLE_SEED} LONG NOT NULL,")
|
|
||||||
command.append("${PlaybackState.COLUMN_LOOP_MODE} INTEGER NOT NULL,")
|
command.append("${PlaybackState.COLUMN_LOOP_MODE} INTEGER NOT NULL,")
|
||||||
command.append("${PlaybackState.COLUMN_IN_USER_QUEUE} BOOLEAN NOT NULL)")
|
command.append("${PlaybackState.COLUMN_IN_USER_QUEUE} BOOLEAN NOT NULL)")
|
||||||
|
|
||||||
|
@ -88,7 +87,7 @@ class PlaybackStateDatabase(context: Context) :
|
||||||
try {
|
try {
|
||||||
database.beginTransaction()
|
database.beginTransaction()
|
||||||
|
|
||||||
val stateData = ContentValues(10)
|
val stateData = ContentValues(9)
|
||||||
|
|
||||||
stateData.put(PlaybackState.COLUMN_ID, state.id)
|
stateData.put(PlaybackState.COLUMN_ID, state.id)
|
||||||
stateData.put(PlaybackState.COLUMN_SONG_ID, state.songId)
|
stateData.put(PlaybackState.COLUMN_SONG_ID, state.songId)
|
||||||
|
@ -97,7 +96,6 @@ class PlaybackStateDatabase(context: Context) :
|
||||||
stateData.put(PlaybackState.COLUMN_INDEX, state.index)
|
stateData.put(PlaybackState.COLUMN_INDEX, state.index)
|
||||||
stateData.put(PlaybackState.COLUMN_MODE, state.mode)
|
stateData.put(PlaybackState.COLUMN_MODE, state.mode)
|
||||||
stateData.put(PlaybackState.COLUMN_IS_SHUFFLING, state.isShuffling)
|
stateData.put(PlaybackState.COLUMN_IS_SHUFFLING, state.isShuffling)
|
||||||
stateData.put(PlaybackState.COLUMN_SHUFFLE_SEED, state.shuffleSeed)
|
|
||||||
stateData.put(PlaybackState.COLUMN_LOOP_MODE, state.loopMode)
|
stateData.put(PlaybackState.COLUMN_LOOP_MODE, state.loopMode)
|
||||||
stateData.put(PlaybackState.COLUMN_IN_USER_QUEUE, state.inUserQueue)
|
stateData.put(PlaybackState.COLUMN_IN_USER_QUEUE, state.inUserQueue)
|
||||||
|
|
||||||
|
@ -139,8 +137,6 @@ class PlaybackStateDatabase(context: Context) :
|
||||||
val modeIndex = cursor.getColumnIndexOrThrow(PlaybackState.COLUMN_MODE)
|
val modeIndex = cursor.getColumnIndexOrThrow(PlaybackState.COLUMN_MODE)
|
||||||
val isShufflingIndex =
|
val isShufflingIndex =
|
||||||
cursor.getColumnIndexOrThrow(PlaybackState.COLUMN_IS_SHUFFLING)
|
cursor.getColumnIndexOrThrow(PlaybackState.COLUMN_IS_SHUFFLING)
|
||||||
val shuffleSeedIndex =
|
|
||||||
cursor.getColumnIndexOrThrow(PlaybackState.COLUMN_SHUFFLE_SEED)
|
|
||||||
val loopModeIndex = cursor.getColumnIndexOrThrow(PlaybackState.COLUMN_LOOP_MODE)
|
val loopModeIndex = cursor.getColumnIndexOrThrow(PlaybackState.COLUMN_LOOP_MODE)
|
||||||
val inUserQueueIndex =
|
val inUserQueueIndex =
|
||||||
cursor.getColumnIndexOrThrow(PlaybackState.COLUMN_IN_USER_QUEUE)
|
cursor.getColumnIndexOrThrow(PlaybackState.COLUMN_IN_USER_QUEUE)
|
||||||
|
@ -155,7 +151,6 @@ class PlaybackStateDatabase(context: Context) :
|
||||||
index = cursor.getInt(indexIndex),
|
index = cursor.getInt(indexIndex),
|
||||||
mode = cursor.getInt(modeIndex),
|
mode = cursor.getInt(modeIndex),
|
||||||
isShuffling = cursor.getInt(isShufflingIndex) == 1,
|
isShuffling = cursor.getInt(isShufflingIndex) == 1,
|
||||||
shuffleSeed = cursor.getLong(shuffleSeedIndex),
|
|
||||||
loopMode = cursor.getInt(loopModeIndex),
|
loopMode = cursor.getInt(loopModeIndex),
|
||||||
inUserQueue = cursor.getInt(inUserQueueIndex) == 1
|
inUserQueue = cursor.getInt(inUserQueueIndex) == 1
|
||||||
)
|
)
|
||||||
|
|
|
@ -17,9 +17,9 @@ import org.oxycblt.auxio.music.MusicStore
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.playback.PlaybackViewModel
|
import org.oxycblt.auxio.playback.PlaybackViewModel
|
||||||
import org.oxycblt.auxio.playback.state.PlaybackMode
|
import org.oxycblt.auxio.playback.state.PlaybackMode
|
||||||
import org.oxycblt.auxio.utils.createToast
|
import org.oxycblt.auxio.ui.createToast
|
||||||
import org.oxycblt.auxio.utils.disable
|
import org.oxycblt.auxio.ui.disable
|
||||||
import org.oxycblt.auxio.utils.setupAlbumSongActions
|
import org.oxycblt.auxio.ui.setupAlbumSongActions
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The [DetailFragment] for an album.
|
* The [DetailFragment] for an album.
|
||||||
|
|
|
@ -15,8 +15,8 @@ import org.oxycblt.auxio.logD
|
||||||
import org.oxycblt.auxio.music.Artist
|
import org.oxycblt.auxio.music.Artist
|
||||||
import org.oxycblt.auxio.music.MusicStore
|
import org.oxycblt.auxio.music.MusicStore
|
||||||
import org.oxycblt.auxio.playback.PlaybackViewModel
|
import org.oxycblt.auxio.playback.PlaybackViewModel
|
||||||
import org.oxycblt.auxio.utils.disable
|
import org.oxycblt.auxio.ui.disable
|
||||||
import org.oxycblt.auxio.utils.setupAlbumActions
|
import org.oxycblt.auxio.ui.setupAlbumActions
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The [DetailFragment] for an artist.
|
* The [DetailFragment] for an artist.
|
||||||
|
|
|
@ -14,8 +14,8 @@ import org.oxycblt.auxio.detail.adapters.GenreArtistAdapter
|
||||||
import org.oxycblt.auxio.logD
|
import org.oxycblt.auxio.logD
|
||||||
import org.oxycblt.auxio.music.MusicStore
|
import org.oxycblt.auxio.music.MusicStore
|
||||||
import org.oxycblt.auxio.playback.PlaybackViewModel
|
import org.oxycblt.auxio.playback.PlaybackViewModel
|
||||||
import org.oxycblt.auxio.utils.disable
|
import org.oxycblt.auxio.ui.disable
|
||||||
import org.oxycblt.auxio.utils.setupArtistActions
|
import org.oxycblt.auxio.ui.setupArtistActions
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The [DetailFragment] for a genre.
|
* The [DetailFragment] for a genre.
|
||||||
|
|
|
@ -9,8 +9,8 @@ import org.oxycblt.auxio.databinding.ItemAlbumSongBinding
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.recycler.DiffCallback
|
import org.oxycblt.auxio.recycler.DiffCallback
|
||||||
import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder
|
import org.oxycblt.auxio.recycler.viewholders.BaseViewHolder
|
||||||
import org.oxycblt.auxio.utils.accent
|
import org.oxycblt.auxio.ui.accent
|
||||||
import org.oxycblt.auxio.utils.toColor
|
import org.oxycblt.auxio.ui.toColor
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An adapter for displaying the [Song]s of an album.
|
* An adapter for displaying the [Song]s of an album.
|
||||||
|
|
|
@ -28,13 +28,13 @@ import org.oxycblt.auxio.music.Header
|
||||||
import org.oxycblt.auxio.music.Song
|
import org.oxycblt.auxio.music.Song
|
||||||
import org.oxycblt.auxio.playback.PlaybackViewModel
|
import org.oxycblt.auxio.playback.PlaybackViewModel
|
||||||
import org.oxycblt.auxio.settings.SettingsManager
|
import org.oxycblt.auxio.settings.SettingsManager
|
||||||
import org.oxycblt.auxio.utils.applyColor
|
import org.oxycblt.auxio.ui.applyColor
|
||||||
import org.oxycblt.auxio.utils.isLandscape
|
import org.oxycblt.auxio.ui.isLandscape
|
||||||
import org.oxycblt.auxio.utils.resolveAttr
|
import org.oxycblt.auxio.ui.resolveAttr
|
||||||
import org.oxycblt.auxio.utils.setupAlbumActions
|
import org.oxycblt.auxio.ui.setupAlbumActions
|
||||||
import org.oxycblt.auxio.utils.setupArtistActions
|
import org.oxycblt.auxio.ui.setupArtistActions
|
||||||
import org.oxycblt.auxio.utils.setupGenreActions
|
import org.oxycblt.auxio.ui.setupGenreActions
|
||||||
import org.oxycblt.auxio.utils.setupSongActions
|
import org.oxycblt.auxio.ui.setupSongActions
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A [Fragment] that shows a custom list of [Genre], [Artist], or [Album] data. Also allows for
|
* A [Fragment] that shows a custom list of [Genre], [Artist], or [Album] data. Also allows for
|
||||||
|
|
|
@ -16,8 +16,8 @@ import org.oxycblt.auxio.R
|
||||||
import org.oxycblt.auxio.databinding.FragmentPlaybackBinding
|
import org.oxycblt.auxio.databinding.FragmentPlaybackBinding
|
||||||
import org.oxycblt.auxio.logD
|
import org.oxycblt.auxio.logD
|
||||||
import org.oxycblt.auxio.playback.state.LoopMode
|
import org.oxycblt.auxio.playback.state.LoopMode
|
||||||
import org.oxycblt.auxio.utils.accent
|
import org.oxycblt.auxio.ui.accent
|
||||||
import org.oxycblt.auxio.utils.toColor
|
import org.oxycblt.auxio.ui.toColor
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A [Fragment] that displays more information about the song, along with more media controls.
|
* A [Fragment] that displays more information about the song, along with more media controls.
|
||||||
|
|
|
@ -564,7 +564,6 @@ class PlaybackStateManager private constructor() {
|
||||||
index = mIndex,
|
index = mIndex,
|
||||||
mode = intMode,
|
mode = intMode,
|
||||||
isShuffling = mIsShuffling,
|
isShuffling = mIsShuffling,
|
||||||
shuffleSeed = mShuffleSeed,
|
|
||||||
loopMode = intLoopMode,
|
loopMode = intLoopMode,
|
||||||
inUserQueue = mIsInUserQueue
|
inUserQueue = mIsInUserQueue
|
||||||
)
|
)
|
||||||
|
@ -598,7 +597,6 @@ class PlaybackStateManager private constructor() {
|
||||||
mMode = PlaybackMode.fromInt(playbackState.mode) ?: PlaybackMode.ALL_SONGS
|
mMode = PlaybackMode.fromInt(playbackState.mode) ?: PlaybackMode.ALL_SONGS
|
||||||
mLoopMode = LoopMode.fromInt(playbackState.loopMode) ?: LoopMode.NONE
|
mLoopMode = LoopMode.fromInt(playbackState.loopMode) ?: LoopMode.NONE
|
||||||
mIsShuffling = playbackState.isShuffling
|
mIsShuffling = playbackState.isShuffling
|
||||||
mShuffleSeed = playbackState.shuffleSeed
|
|
||||||
mIsInUserQueue = playbackState.inUserQueue
|
mIsInUserQueue = playbackState.inUserQueue
|
||||||
mIndex = playbackState.index
|
mIndex = playbackState.index
|
||||||
|
|
||||||
|
|
|
@ -22,8 +22,8 @@ import androidx.dynamicanimation.animation.SpringForce
|
||||||
import com.reddit.indicatorfastscroll.FastScrollItemIndicator
|
import com.reddit.indicatorfastscroll.FastScrollItemIndicator
|
||||||
import com.reddit.indicatorfastscroll.FastScrollerView
|
import com.reddit.indicatorfastscroll.FastScrollerView
|
||||||
import org.oxycblt.auxio.R
|
import org.oxycblt.auxio.R
|
||||||
import org.oxycblt.auxio.utils.accent
|
import org.oxycblt.auxio.ui.accent
|
||||||
import org.oxycblt.auxio.utils.toColor
|
import org.oxycblt.auxio.ui.toColor
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A semi-copy, semi-custom implementation of [com.reddit.indicatorfastscroll.FastScrollerThumbView]
|
* A semi-copy, semi-custom implementation of [com.reddit.indicatorfastscroll.FastScrollerThumbView]
|
||||||
|
|
|
@ -18,10 +18,10 @@ import org.oxycblt.auxio.logD
|
||||||
import org.oxycblt.auxio.playback.PlaybackViewModel
|
import org.oxycblt.auxio.playback.PlaybackViewModel
|
||||||
import org.oxycblt.auxio.recycler.DisplayMode
|
import org.oxycblt.auxio.recycler.DisplayMode
|
||||||
import org.oxycblt.auxio.settings.adapters.AccentAdapter
|
import org.oxycblt.auxio.settings.adapters.AccentAdapter
|
||||||
import org.oxycblt.auxio.utils.ACCENTS
|
import org.oxycblt.auxio.ui.ACCENTS
|
||||||
import org.oxycblt.auxio.utils.accent
|
import org.oxycblt.auxio.ui.accent
|
||||||
import org.oxycblt.auxio.utils.createToast
|
import org.oxycblt.auxio.ui.createToast
|
||||||
import org.oxycblt.auxio.utils.getDetailedAccentSummary
|
import org.oxycblt.auxio.ui.getDetailedAccentSummary
|
||||||
|
|
||||||
@Suppress("UNUSED")
|
@Suppress("UNUSED")
|
||||||
class SettingsListFragment : PreferenceFragmentCompat() {
|
class SettingsListFragment : PreferenceFragmentCompat() {
|
||||||
|
|
|
@ -6,7 +6,7 @@ import androidx.preference.PreferenceManager
|
||||||
import org.oxycblt.auxio.playback.state.PlaybackMode
|
import org.oxycblt.auxio.playback.state.PlaybackMode
|
||||||
import org.oxycblt.auxio.recycler.DisplayMode
|
import org.oxycblt.auxio.recycler.DisplayMode
|
||||||
import org.oxycblt.auxio.recycler.SortMode
|
import org.oxycblt.auxio.recycler.SortMode
|
||||||
import org.oxycblt.auxio.utils.ACCENTS
|
import org.oxycblt.auxio.ui.ACCENTS
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper around the [SharedPreferences] class that writes & reads values without a context.
|
* Wrapper around the [SharedPreferences] class that writes & reads values without a context.
|
||||||
|
|
|
@ -6,10 +6,10 @@ import android.view.ViewGroup
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import org.oxycblt.auxio.R
|
import org.oxycblt.auxio.R
|
||||||
import org.oxycblt.auxio.databinding.ItemAccentBinding
|
import org.oxycblt.auxio.databinding.ItemAccentBinding
|
||||||
import org.oxycblt.auxio.utils.ACCENTS
|
import org.oxycblt.auxio.ui.ACCENTS
|
||||||
import org.oxycblt.auxio.utils.accent
|
import org.oxycblt.auxio.ui.accent
|
||||||
import org.oxycblt.auxio.utils.getAccentItemSummary
|
import org.oxycblt.auxio.ui.getAccentItemSummary
|
||||||
import org.oxycblt.auxio.utils.toColor
|
import org.oxycblt.auxio.ui.toColor
|
||||||
|
|
||||||
class AccentAdapter(
|
class AccentAdapter(
|
||||||
private val doOnAccentConfirm: (accent: Pair<Int, Int>) -> Unit
|
private val doOnAccentConfirm: (accent: Pair<Int, Int>) -> Unit
|
||||||
|
|
|
@ -18,8 +18,8 @@ import org.oxycblt.auxio.logD
|
||||||
import org.oxycblt.auxio.music.MusicStore
|
import org.oxycblt.auxio.music.MusicStore
|
||||||
import org.oxycblt.auxio.playback.PlaybackViewModel
|
import org.oxycblt.auxio.playback.PlaybackViewModel
|
||||||
import org.oxycblt.auxio.settings.SettingsManager
|
import org.oxycblt.auxio.settings.SettingsManager
|
||||||
import org.oxycblt.auxio.utils.isLandscape
|
import org.oxycblt.auxio.ui.isLandscape
|
||||||
import org.oxycblt.auxio.utils.setupSongActions
|
import org.oxycblt.auxio.ui.setupSongActions
|
||||||
import kotlin.math.ceil
|
import kotlin.math.ceil
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.oxycblt.auxio.utils
|
package org.oxycblt.auxio.ui
|
||||||
|
|
||||||
import android.annotation.TargetApi
|
import android.annotation.TargetApi
|
||||||
import android.content.Context
|
import android.content.Context
|
|
@ -1,4 +1,4 @@
|
||||||
package org.oxycblt.auxio.utils
|
package org.oxycblt.auxio.ui
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
|
@ -63,7 +63,7 @@
|
||||||
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6"
|
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/playback_artist"
|
app:layout_constraintBottom_toTopOf="@+id/playback_artist"
|
||||||
app:layout_constraintStart_toEndOf="@+id/playback_cover"
|
app:layout_constraintStart_toEndOf="@+id/playback_cover"
|
||||||
app:layout_constraintTop_toTopOf="@+id/playback_cover"
|
app:layout_constraintTop_toBottomOf="@+id/playback_toolbar"
|
||||||
app:layout_constraintVertical_chainStyle="packed"
|
app:layout_constraintVertical_chainStyle="packed"
|
||||||
tools:text="Song Name" />
|
tools:text="Song Name" />
|
||||||
|
|
||||||
|
@ -81,7 +81,6 @@
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/playback_album"
|
app:layout_constraintBottom_toTopOf="@+id/playback_album"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
|
||||||
app:layout_constraintStart_toEndOf="@+id/playback_cover"
|
app:layout_constraintStart_toEndOf="@+id/playback_cover"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/playback_song"
|
app:layout_constraintTop_toBottomOf="@+id/playback_song"
|
||||||
tools:text="Artist Name" />
|
tools:text="Artist Name" />
|
||||||
|
@ -92,7 +91,6 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="@dimen/margin_mid_large"
|
android:layout_marginStart="@dimen/margin_mid_large"
|
||||||
android:layout_marginEnd="@dimen/margin_mid_large"
|
android:layout_marginEnd="@dimen/margin_mid_large"
|
||||||
android:layout_marginBottom="16dp"
|
|
||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:onClick="@{() -> playbackModel.navToItem(playbackModel.song.album)}"
|
android:onClick="@{() -> playbackModel.navToItem(playbackModel.song.album)}"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
|
@ -101,7 +99,6 @@
|
||||||
android:textColor="?android:attr/textColorSecondary"
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/playback_seek_bar"
|
app:layout_constraintBottom_toTopOf="@+id/playback_seek_bar"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
|
||||||
app:layout_constraintStart_toEndOf="@+id/playback_cover"
|
app:layout_constraintStart_toEndOf="@+id/playback_cover"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/playback_artist"
|
app:layout_constraintTop_toBottomOf="@+id/playback_artist"
|
||||||
tools:text="Album Name" />
|
tools:text="Album Name" />
|
||||||
|
@ -110,6 +107,7 @@
|
||||||
android:id="@+id/playback_seek_bar"
|
android:id="@+id/playback_seek_bar"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/margin_medium"
|
||||||
android:clickable="true"
|
android:clickable="true"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:paddingStart="@dimen/margin_mid_large"
|
android:paddingStart="@dimen/margin_mid_large"
|
||||||
|
@ -121,7 +119,6 @@
|
||||||
android:thumbTint="?attr/colorPrimary"
|
android:thumbTint="?attr/colorPrimary"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/playback_duration_current"
|
app:layout_constraintBottom_toTopOf="@+id/playback_duration_current"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
|
||||||
app:layout_constraintStart_toEndOf="@+id/playback_cover"
|
app:layout_constraintStart_toEndOf="@+id/playback_cover"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/playback_album"
|
app:layout_constraintTop_toBottomOf="@+id/playback_album"
|
||||||
tools:progress="70" />
|
tools:progress="70" />
|
||||||
|
@ -131,7 +128,6 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="@dimen/margin_mid_large"
|
android:layout_marginStart="@dimen/margin_mid_large"
|
||||||
android:layout_marginBottom="@dimen/margin_medium"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/playback_play_pause"
|
app:layout_constraintBottom_toTopOf="@+id/playback_play_pause"
|
||||||
app:layout_constraintStart_toEndOf="@+id/playback_cover"
|
app:layout_constraintStart_toEndOf="@+id/playback_cover"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/playback_seek_bar"
|
app:layout_constraintTop_toBottomOf="@+id/playback_seek_bar"
|
||||||
|
@ -142,26 +138,27 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginEnd="@dimen/margin_mid_large"
|
android:layout_marginEnd="@dimen/margin_mid_large"
|
||||||
android:layout_marginBottom="@dimen/margin_medium"
|
|
||||||
android:text="@{song.formattedDuration}"
|
android:text="@{song.formattedDuration}"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/playback_play_pause"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/playback_seek_bar"
|
||||||
tools:text="16:16" />
|
tools:text="16:16" />
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/playback_play_pause"
|
android:id="@+id/playback_play_pause"
|
||||||
android:layout_width="@dimen/size_play_pause"
|
android:layout_width="@dimen/size_play_pause"
|
||||||
android:layout_height="@dimen/size_play_pause"
|
android:layout_height="@dimen/size_play_pause"
|
||||||
|
android:layout_marginStart="@dimen/margin_large"
|
||||||
|
android:layout_marginTop="@dimen/margin_medium"
|
||||||
|
android:layout_marginEnd="@dimen/margin_large"
|
||||||
android:background="@drawable/ui_circular_button"
|
android:background="@drawable/ui_circular_button"
|
||||||
android:backgroundTint="?attr/colorPrimary"
|
android:backgroundTint="?attr/colorPrimary"
|
||||||
android:contentDescription="@{playbackModel.isPlaying ? @string/description_pause : @string/description_play}"
|
android:contentDescription="@{playbackModel.isPlaying ? @string/description_pause : @string/description_play}"
|
||||||
android:foregroundTint="@color/background"
|
android:foregroundTint="@color/background"
|
||||||
android:onClick="@{() -> playbackModel.invertPlayingStatus()}"
|
android:onClick="@{() -> playbackModel.invertPlayingStatus()}"
|
||||||
android:tint="@color/background"
|
android:tint="@color/background"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/playback_cover"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toStartOf="@+id/playback_skip_next"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintStart_toEndOf="@+id/playback_skip_prev"
|
||||||
app:layout_constraintStart_toEndOf="@+id/playback_cover"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/playback_duration_current"
|
app:layout_constraintTop_toBottomOf="@+id/playback_duration_current"
|
||||||
tools:src="@drawable/ic_play_to_pause" />
|
tools:src="@drawable/ic_play_to_pause" />
|
||||||
|
|
||||||
|
@ -170,12 +167,13 @@
|
||||||
style="@style/Widget.AppCompat.Button.Borderless"
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
android:layout_width="@dimen/size_play_pause_compact"
|
android:layout_width="@dimen/size_play_pause_compact"
|
||||||
android:layout_height="@dimen/size_play_pause_compact"
|
android:layout_height="@dimen/size_play_pause_compact"
|
||||||
android:layout_marginStart="@dimen/margin_mid_large"
|
android:layout_marginEnd="@dimen/margin_large"
|
||||||
android:background="@drawable/ui_unbounded_ripple"
|
android:background="@drawable/ui_unbounded_ripple"
|
||||||
android:contentDescription="@string/description_skip_next"
|
android:contentDescription="@string/description_skip_next"
|
||||||
android:onClick="@{() -> playbackModel.skipNext()}"
|
android:onClick="@{() -> playbackModel.skipNext()}"
|
||||||
android:src="@drawable/ic_skip_next_large"
|
android:src="@drawable/ic_skip_next_large"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
|
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/playback_shuffle"
|
||||||
app:layout_constraintStart_toEndOf="@+id/playback_play_pause"
|
app:layout_constraintStart_toEndOf="@+id/playback_play_pause"
|
||||||
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
|
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
|
||||||
|
|
||||||
|
@ -184,13 +182,14 @@
|
||||||
style="@style/Widget.AppCompat.Button.Borderless"
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
android:layout_width="@dimen/size_play_pause_compact"
|
android:layout_width="@dimen/size_play_pause_compact"
|
||||||
android:layout_height="@dimen/size_play_pause_compact"
|
android:layout_height="@dimen/size_play_pause_compact"
|
||||||
android:layout_marginEnd="@dimen/margin_mid_large"
|
android:layout_marginStart="@dimen/margin_large"
|
||||||
android:background="@drawable/ui_unbounded_ripple"
|
android:background="@drawable/ui_unbounded_ripple"
|
||||||
android:contentDescription="@string/description_skip_prev"
|
android:contentDescription="@string/description_skip_prev"
|
||||||
android:onClick="@{() -> playbackModel.skipPrev()}"
|
android:onClick="@{() -> playbackModel.skipPrev()}"
|
||||||
android:src="@drawable/ic_skip_prev_large"
|
android:src="@drawable/ic_skip_prev_large"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
|
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/playback_play_pause"
|
app:layout_constraintEnd_toStartOf="@+id/playback_play_pause"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/playback_loop"
|
||||||
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
|
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
|
@ -198,28 +197,29 @@
|
||||||
style="@style/Widget.AppCompat.Button.Borderless"
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
android:layout_width="@dimen/size_play_pause_compact"
|
android:layout_width="@dimen/size_play_pause_compact"
|
||||||
android:layout_height="@dimen/size_play_pause_compact"
|
android:layout_height="@dimen/size_play_pause_compact"
|
||||||
android:layout_marginStart="@dimen/margin_mid_large"
|
|
||||||
android:background="@drawable/ui_unbounded_ripple"
|
android:background="@drawable/ui_unbounded_ripple"
|
||||||
android:contentDescription="@{playbackModel.isShuffling() ? @string/description_shuffle_off : @string/description_shuffle_on"
|
android:contentDescription="@{playbackModel.isShuffling() ? @string/description_shuffle_off : @string/description_shuffle_on"
|
||||||
android:onClick="@{() -> playbackModel.invertShuffleStatus()}"
|
android:onClick="@{() -> playbackModel.invertShuffleStatus()}"
|
||||||
android:src="@drawable/ic_shuffle_large"
|
android:src="@drawable/ic_shuffle_large"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
|
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next"
|
||||||
|
app:layout_constraintEnd_toEndOf="@+id/playback_song_duration"
|
||||||
app:layout_constraintStart_toEndOf="@+id/playback_skip_next"
|
app:layout_constraintStart_toEndOf="@+id/playback_skip_next"
|
||||||
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
|
app:layout_constraintTop_toTopOf="@+id/playback_skip_next" />
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/playback_loop"
|
android:id="@+id/playback_loop"
|
||||||
style="@style/Widget.AppCompat.Button.Borderless"
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
android:layout_width="@dimen/size_play_pause_compact"
|
android:layout_width="@dimen/size_play_pause_compact"
|
||||||
android:layout_height="@dimen/size_play_pause_compact"
|
android:layout_height="@dimen/size_play_pause_compact"
|
||||||
android:layout_marginEnd="@dimen/margin_mid_large"
|
|
||||||
android:background="@drawable/ui_unbounded_ripple"
|
android:background="@drawable/ui_unbounded_ripple"
|
||||||
android:contentDescription="@string/description_change_loop"
|
android:contentDescription="@string/description_change_loop"
|
||||||
android:onClick="@{() -> playbackModel.incrementLoopStatus()}"
|
android:onClick="@{() -> playbackModel.incrementLoopStatus()}"
|
||||||
android:src="@drawable/ic_loop_large"
|
android:src="@drawable/ic_loop_large"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
|
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_prev"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/playback_skip_prev"
|
app:layout_constraintEnd_toStartOf="@+id/playback_skip_prev"
|
||||||
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/playback_duration_current"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/playback_skip_prev" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
</layout>
|
</layout>
|
|
@ -148,6 +148,8 @@
|
||||||
android:id="@+id/playback_play_pause"
|
android:id="@+id/playback_play_pause"
|
||||||
android:layout_width="@dimen/size_play_pause"
|
android:layout_width="@dimen/size_play_pause"
|
||||||
android:layout_height="@dimen/size_play_pause"
|
android:layout_height="@dimen/size_play_pause"
|
||||||
|
android:layout_marginStart="@dimen/margin_large"
|
||||||
|
android:layout_marginEnd="@dimen/margin_large"
|
||||||
android:layout_marginBottom="@dimen/margin_medium"
|
android:layout_marginBottom="@dimen/margin_medium"
|
||||||
android:background="@drawable/ui_circular_button"
|
android:background="@drawable/ui_circular_button"
|
||||||
android:backgroundTint="?attr/colorPrimary"
|
android:backgroundTint="?attr/colorPrimary"
|
||||||
|
@ -156,8 +158,8 @@
|
||||||
android:onClick="@{() -> playbackModel.invertPlayingStatus()}"
|
android:onClick="@{() -> playbackModel.invertPlayingStatus()}"
|
||||||
android:tint="@color/background"
|
android:tint="@color/background"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toStartOf="@+id/playback_skip_next"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toEndOf="@+id/playback_skip_prev"
|
||||||
tools:src="@drawable/ic_play_to_pause" />
|
tools:src="@drawable/ic_play_to_pause" />
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
|
@ -165,12 +167,13 @@
|
||||||
style="@style/Widget.AppCompat.Button.Borderless"
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
android:layout_width="@dimen/size_play_pause_compact"
|
android:layout_width="@dimen/size_play_pause_compact"
|
||||||
android:layout_height="@dimen/size_play_pause_compact"
|
android:layout_height="@dimen/size_play_pause_compact"
|
||||||
android:layout_marginStart="@dimen/margin_mid_large"
|
android:layout_marginEnd="@dimen/margin_large"
|
||||||
android:background="@drawable/ui_unbounded_ripple"
|
android:background="@drawable/ui_unbounded_ripple"
|
||||||
android:contentDescription="@string/description_skip_next"
|
android:contentDescription="@string/description_skip_next"
|
||||||
android:onClick="@{() -> playbackModel.skipNext()}"
|
android:onClick="@{() -> playbackModel.skipNext()}"
|
||||||
android:src="@drawable/ic_skip_next_large"
|
android:src="@drawable/ic_skip_next_large"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
|
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/playback_shuffle"
|
||||||
app:layout_constraintStart_toEndOf="@+id/playback_play_pause"
|
app:layout_constraintStart_toEndOf="@+id/playback_play_pause"
|
||||||
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
|
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
|
||||||
|
|
||||||
|
@ -179,13 +182,14 @@
|
||||||
style="@style/Widget.AppCompat.Button.Borderless"
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
android:layout_width="@dimen/size_play_pause_compact"
|
android:layout_width="@dimen/size_play_pause_compact"
|
||||||
android:layout_height="@dimen/size_play_pause_compact"
|
android:layout_height="@dimen/size_play_pause_compact"
|
||||||
android:layout_marginEnd="@dimen/margin_mid_large"
|
android:layout_marginStart="@dimen/margin_large"
|
||||||
android:background="@drawable/ui_unbounded_ripple"
|
android:background="@drawable/ui_unbounded_ripple"
|
||||||
android:contentDescription="@string/description_skip_prev"
|
android:contentDescription="@string/description_skip_prev"
|
||||||
android:onClick="@{() -> playbackModel.skipPrev()}"
|
android:onClick="@{() -> playbackModel.skipPrev()}"
|
||||||
android:src="@drawable/ic_skip_prev_large"
|
android:src="@drawable/ic_skip_prev_large"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
|
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/playback_play_pause"
|
app:layout_constraintEnd_toStartOf="@+id/playback_play_pause"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/playback_loop"
|
||||||
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
|
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
|
@ -193,28 +197,29 @@
|
||||||
style="@style/Widget.AppCompat.Button.Borderless"
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
android:layout_width="@dimen/size_play_pause_compact"
|
android:layout_width="@dimen/size_play_pause_compact"
|
||||||
android:layout_height="@dimen/size_play_pause_compact"
|
android:layout_height="@dimen/size_play_pause_compact"
|
||||||
android:layout_marginStart="@dimen/margin_mid_large"
|
|
||||||
android:background="@drawable/ui_unbounded_ripple"
|
android:background="@drawable/ui_unbounded_ripple"
|
||||||
android:contentDescription="@{playbackModel.isShuffling() ? @string/description_shuffle_off : @string/description_shuffle_on"
|
android:contentDescription="@{playbackModel.isShuffling() ? @string/description_shuffle_off : @string/description_shuffle_on"
|
||||||
android:onClick="@{() -> playbackModel.invertShuffleStatus()}"
|
android:onClick="@{() -> playbackModel.invertShuffleStatus()}"
|
||||||
android:src="@drawable/ic_shuffle_large"
|
android:src="@drawable/ic_shuffle_large"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
|
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_next"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toEndOf="@+id/playback_skip_next"
|
app:layout_constraintStart_toEndOf="@+id/playback_skip_next"
|
||||||
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
|
app:layout_constraintTop_toTopOf="@+id/playback_skip_next" />
|
||||||
|
|
||||||
<ImageButton
|
<ImageButton
|
||||||
android:id="@+id/playback_loop"
|
android:id="@+id/playback_loop"
|
||||||
style="@style/Widget.AppCompat.Button.Borderless"
|
style="@style/Widget.AppCompat.Button.Borderless"
|
||||||
android:layout_width="@dimen/size_play_pause_compact"
|
android:layout_width="@dimen/size_play_pause_compact"
|
||||||
android:layout_height="@dimen/size_play_pause_compact"
|
android:layout_height="@dimen/size_play_pause_compact"
|
||||||
android:layout_marginEnd="@dimen/margin_mid_large"
|
|
||||||
android:background="@drawable/ui_unbounded_ripple"
|
android:background="@drawable/ui_unbounded_ripple"
|
||||||
android:contentDescription="@string/description_change_loop"
|
android:contentDescription="@string/description_change_loop"
|
||||||
android:onClick="@{() -> playbackModel.incrementLoopStatus()}"
|
android:onClick="@{() -> playbackModel.incrementLoopStatus()}"
|
||||||
android:src="@drawable/ic_loop_large"
|
android:src="@drawable/ic_loop_large"
|
||||||
app:layout_constraintBottom_toBottomOf="@+id/playback_play_pause"
|
app:layout_constraintBottom_toBottomOf="@+id/playback_skip_prev"
|
||||||
app:layout_constraintEnd_toStartOf="@+id/playback_skip_prev"
|
app:layout_constraintEnd_toStartOf="@+id/playback_skip_prev"
|
||||||
app:layout_constraintTop_toTopOf="@+id/playback_play_pause" />
|
app:layout_constraintHorizontal_chainStyle="packed"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/playback_skip_prev" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
</layout>
|
</layout>
|
Loading…
Reference in a new issue