Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 3026c4d4 authored by Inhishonor's avatar Inhishonor Committed by Sebastiano Barezzi
Browse files

Twelve: Play random songs button

Change-Id: Ic96be3656a230511a22380262cdc097148c5d676
parent 8b559295
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -31,9 +31,11 @@ import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.appbar.MaterialToolbar
import com.google.android.material.button.MaterialButton
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
import com.google.android.material.navigation.NavigationBarView
import com.google.android.material.progressindicator.LinearProgressIndicator
import com.google.android.material.search.SearchView
import com.google.android.material.snackbar.Snackbar
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import org.lineageos.twelve.R
@@ -52,6 +54,7 @@ import org.lineageos.twelve.models.Genre
import org.lineageos.twelve.models.MediaItem
import org.lineageos.twelve.models.Playlist
import org.lineageos.twelve.models.Result
import org.lineageos.twelve.models.Result.Companion.onError
import org.lineageos.twelve.models.areContentsTheSame
import org.lineageos.twelve.models.areItemsTheSame
import org.lineageos.twelve.ui.recyclerview.SimpleListAdapter
@@ -69,6 +72,9 @@ class MainFragment : Fragment(R.layout.fragment_main) {
    // Views
    private val navigationBarView by getViewProperty<NavigationBarView>(R.id.navigationBarView)
    private val nowPlayingBar by getViewProperty<NowPlayingBar>(R.id.nowPlayingBar)
    private val playRandomSongsExtendedFloatingActionButton by getViewProperty<ExtendedFloatingActionButton>(
        R.id.playRandomSongsExtendedFloatingActionButton
    )
    private val providerMaterialButton by getViewProperty<MaterialButton>(R.id.providerMaterialButton)
    private val searchLinearProgressIndicator by getViewProperty<LinearProgressIndicator>(R.id.searchLinearProgressIndicator)
    private val searchNoElementsLinearLayout by getViewProperty<LinearLayout>(R.id.searchNoElementsLinearLayout)
@@ -315,6 +321,18 @@ class MainFragment : Fragment(R.layout.fragment_main) {
            startActivity(intent)
        }

        playRandomSongsExtendedFloatingActionButton.setOnClickListener {
            viewLifecycleOwner.lifecycleScope.launch {
                viewModel.playAllAudios().onError {
                    Snackbar.make(
                        navigationBarView,
                        it.toString(),
                        Snackbar.LENGTH_SHORT,
                    ).show()
                }
            }
        }

        // View pager
        viewPager2.isUserInputEnabled = false
        viewPager2.adapter = object : FragmentStateAdapter(this) {
+7 −0
Original line number Diff line number Diff line
@@ -12,14 +12,17 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.mapLatest
import kotlinx.coroutines.flow.stateIn
import org.lineageos.twelve.models.Error
import org.lineageos.twelve.models.FlowResult
import org.lineageos.twelve.models.FlowResult.Companion.asFlowResult
import org.lineageos.twelve.models.Result
import org.lineageos.twelve.models.Result.Companion.map

/**
 * Home page view model.
@@ -59,4 +62,8 @@ class MainViewModel(application: Application) : NowPlayingViewModel(application)
    fun setSearchQuery(query: String, immediate: Boolean = false) {
        searchQuery.value = query to immediate
    }

    suspend fun playAllAudios() = mediaRepository.audios().firstOrNull()?.map { audios ->
        playAudio(audios.shuffled(), 0)
    } ?: Result.Error(Error.INVALID_RESPONSE)
}
+17 −1
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
     SPDX-FileCopyrightText: 2024 The LineageOS Project
     SPDX-FileCopyrightText: 2024-2025 The LineageOS Project
     SPDX-License-Identifier: Apache-2.0
-->
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
@@ -67,6 +67,22 @@
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
        android:id="@+id/playRandomSongsExtendedFloatingActionButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="24dp"
        android:layout_marginBottom="12dp"
        android:contentDescription="@string/play_random_songs"
        android:text="@string/play_random_songs"
        android:tooltipText="@string/play_random_songs"
        app:backgroundTint="?attr/colorTertiaryContainer"
        app:collapsedSize="46dp"
        app:icon="@drawable/ic_shuffle_play"
        app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
        app:layout_constraintBottom_toTopOf="@+id/nowPlayingBar"
        app:layout_constraintEnd_toEndOf="parent" />

    <com.google.android.material.navigationrail.NavigationRailView
        android:id="@+id/navigationBarView"
        android:layout_width="wrap_content"
+17 −1
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
     SPDX-FileCopyrightText: 2024 The LineageOS Project
     SPDX-FileCopyrightText: 2024-2025 The LineageOS Project
     SPDX-License-Identifier: Apache-2.0
-->
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
@@ -66,6 +66,22 @@
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
        android:id="@+id/playRandomSongsExtendedFloatingActionButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="24dp"
        android:layout_marginBottom="12dp"
        android:contentDescription="@string/play_random_songs"
        android:text="@string/play_random_songs"
        android:tooltipText="@string/play_random_songs"
        app:backgroundTint="?attr/colorTertiaryContainer"
        app:collapsedSize="46dp"
        app:icon="@drawable/ic_shuffle_play"
        app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
        app:layout_constraintBottom_toTopOf="@+id/nowPlayingBar"
        app:layout_constraintEnd_toEndOf="parent" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/navigationBarView"
        android:layout_width="0dp"
+3 −0
Original line number Diff line number Diff line
@@ -15,6 +15,9 @@
    <string name="main_fragment_section_search">Search</string>
    <string name="main_fragment_section_library">Library</string>

    <!-- Main fragment - Play random songs button -->
    <string name="play_random_songs">Play random songs</string>

    <!-- Search fragment -->
    <string name="search_hint">Search…</string>