diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 22fd8e57174415c03f67a2590d820ed836d7a7a5..24b5dbc94ae6da078da49f7a1dda9ccb941c6597 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -241,13 +241,15 @@ project.afterEvaluate {
sourceDirectories.setFrom(files(listOf(mainSrc)))
classDirectories.setFrom(files(listOf(debugTree)))
- executionData.setFrom(fileTree(project.buildDir) {
- setIncludes(
- listOf(
- "outputs/unit_test_code_coverage/debugUnitTest/*.exec",
- "outputs/code_coverage/debugAndroidTest/connected/**/*.ec"
+ executionData.setFrom(
+ fileTree(project.buildDir) {
+ setIncludes(
+ listOf(
+ "outputs/unit_test_code_coverage/debugUnitTest/*.exec",
+ "outputs/code_coverage/debugAndroidTest/connected/**/*.ec"
+ )
)
- )
- })
+ }
+ )
}
}
diff --git a/app/src/main/java/audio/funkwhale/ffa/FFA.kt b/app/src/main/java/audio/funkwhale/ffa/FFA.kt
index e0002a62cc909adbbfc814c0771e42e6d2a4677b..e5299403ffa597134678fe05bddbe54bb1602a3b 100644
--- a/app/src/main/java/audio/funkwhale/ffa/FFA.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/FFA.kt
@@ -5,13 +5,18 @@ import android.content.Context
import androidx.appcompat.app.AppCompatDelegate
import audio.funkwhale.ffa.koin.authModule
import audio.funkwhale.ffa.koin.exoplayerModule
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.AppContext
+import audio.funkwhale.ffa.utils.Command
+import audio.funkwhale.ffa.utils.Event
+import audio.funkwhale.ffa.utils.FFACache
+import audio.funkwhale.ffa.utils.Request
import com.preference.PowerPreference
import kotlinx.coroutines.channels.BroadcastChannel
import kotlinx.coroutines.channels.ConflatedBroadcastChannel
import org.koin.core.context.startKoin
import java.text.SimpleDateFormat
-import java.util.*
+import java.util.Date
+import java.util.Locale
class FFA : Application() {
diff --git a/app/src/main/java/audio/funkwhale/ffa/activities/DownloadsActivity.kt b/app/src/main/java/audio/funkwhale/ffa/activities/DownloadsActivity.kt
index 31711a35fa3a23936d370e42697210765ad9fbac..c5a34082bb5a712f3baf6f7d1a2d293341048cc7 100644
--- a/app/src/main/java/audio/funkwhale/ffa/activities/DownloadsActivity.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/activities/DownloadsActivity.kt
@@ -73,9 +73,9 @@ class DownloadsActivity : AppCompatActivity() {
val download = cursor.download
download.getMetadata()?.let { info ->
- adapter.downloads.add(info.apply {
- this.download = download
- })
+ adapter.downloads.add(
+ info.apply { this.download = download }
+ )
}
}
diff --git a/app/src/main/java/audio/funkwhale/ffa/activities/LicencesActivity.kt b/app/src/main/java/audio/funkwhale/ffa/activities/LicencesActivity.kt
index 71d088c6fda8b3b964836d73f1b46bd4ece4320b..3de5e50466037ad7d1857016220f7a290eafec15 100644
--- a/app/src/main/java/audio/funkwhale/ffa/activities/LicencesActivity.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/activities/LicencesActivity.kt
@@ -90,7 +90,8 @@ class LicencesActivity : AppCompatActivity() {
holder.licence.text = item.licence
}
- inner class ViewHolder(binding: RowLicenceBinding) : RecyclerView.ViewHolder(binding.root),
+ inner class ViewHolder(binding: RowLicenceBinding) :
+ RecyclerView.ViewHolder(binding.root),
View.OnClickListener {
val name = binding.name
val licence = binding.licence
diff --git a/app/src/main/java/audio/funkwhale/ffa/activities/LoginActivity.kt b/app/src/main/java/audio/funkwhale/ffa/activities/LoginActivity.kt
index 2b78bb9ab18b42923513d7027cb483545b07dc89..862e3cc09325899dd968e977e996dca4ac44de18 100644
--- a/app/src/main/java/audio/funkwhale/ffa/activities/LoginActivity.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/activities/LoginActivity.kt
@@ -11,7 +11,10 @@ import androidx.lifecycle.lifecycleScope
import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.databinding.ActivityLoginBinding
import audio.funkwhale.ffa.fragments.LoginDialog
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.AppContext
+import audio.funkwhale.ffa.utils.FuelResult
+import audio.funkwhale.ffa.utils.OAuth
+import audio.funkwhale.ffa.utils.Userinfo
import com.github.kittinunf.fuel.Fuel
import com.github.kittinunf.fuel.coroutines.awaitObjectResponseResult
import com.github.kittinunf.fuel.gson.gsonDeserializerOf
diff --git a/app/src/main/java/audio/funkwhale/ffa/activities/MainActivity.kt b/app/src/main/java/audio/funkwhale/ffa/activities/MainActivity.kt
index ccddeaed1682350fdba68cfadb1b5384f55e320f..fc01c5bbf1d2822c9da9d2df40be08754d4e17eb 100644
--- a/app/src/main/java/audio/funkwhale/ffa/activities/MainActivity.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/activities/MainActivity.kt
@@ -9,7 +9,11 @@ import android.graphics.Bitmap
import android.os.Build
import android.os.Bundle
import android.util.DisplayMetrics
-import android.view.*
+import android.view.Gravity
+import android.view.Menu
+import android.view.MenuItem
+import android.view.View
+import android.view.ViewGroup
import android.view.animation.AccelerateDecelerateInterpolator
import android.widget.SeekBar
import androidx.appcompat.app.AppCompatActivity
@@ -24,7 +28,13 @@ import androidx.lifecycle.lifecycleScope
import audio.funkwhale.ffa.FFA
import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.databinding.ActivityMainBinding
-import audio.funkwhale.ffa.fragments.*
+import audio.funkwhale.ffa.fragments.AddToPlaylistDialog
+import audio.funkwhale.ffa.fragments.AlbumsFragment
+import audio.funkwhale.ffa.fragments.ArtistsFragment
+import audio.funkwhale.ffa.fragments.BrowseFragment
+import audio.funkwhale.ffa.fragments.LandscapeQueueFragment
+import audio.funkwhale.ffa.fragments.QueueFragment
+import audio.funkwhale.ffa.fragments.TrackInfoDetailsFragment
import audio.funkwhale.ffa.model.Track
import audio.funkwhale.ffa.playback.MediaControlsManager
import audio.funkwhale.ffa.playback.PinService
@@ -32,7 +42,25 @@ import audio.funkwhale.ffa.playback.PlayerService
import audio.funkwhale.ffa.repositories.FavoritedRepository
import audio.funkwhale.ffa.repositories.FavoritesRepository
import audio.funkwhale.ffa.repositories.Repository
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.AppContext
+import audio.funkwhale.ffa.utils.Command
+import audio.funkwhale.ffa.utils.CommandBus
+import audio.funkwhale.ffa.utils.Event
+import audio.funkwhale.ffa.utils.EventBus
+import audio.funkwhale.ffa.utils.FFACache
+import audio.funkwhale.ffa.utils.OAuth
+import audio.funkwhale.ffa.utils.ProgressBus
+import audio.funkwhale.ffa.utils.Settings
+import audio.funkwhale.ffa.utils.Userinfo
+import audio.funkwhale.ffa.utils.authorize
+import audio.funkwhale.ffa.utils.log
+import audio.funkwhale.ffa.utils.logError
+import audio.funkwhale.ffa.utils.maybeLoad
+import audio.funkwhale.ffa.utils.maybeNormalizeUrl
+import audio.funkwhale.ffa.utils.mustNormalizeUrl
+import audio.funkwhale.ffa.utils.onApi
+import audio.funkwhale.ffa.utils.toast
+import audio.funkwhale.ffa.utils.untilNetwork
import audio.funkwhale.ffa.views.DisableableFrameLayout
import com.github.kittinunf.fuel.Fuel
import com.github.kittinunf.fuel.coroutines.awaitStringResponse
@@ -132,17 +160,17 @@ class MainActivity : AppCompatActivity() {
}
binding.nowPlayingContainer?.nowPlayingDetailsProgress?.setOnSeekBarChangeListener(object :
- SeekBar.OnSeekBarChangeListener {
- override fun onStopTrackingTouch(view: SeekBar?) {}
+ SeekBar.OnSeekBarChangeListener {
+ override fun onStopTrackingTouch(view: SeekBar?) {}
- override fun onStartTrackingTouch(view: SeekBar?) {}
+ override fun onStartTrackingTouch(view: SeekBar?) {}
- override fun onProgressChanged(view: SeekBar?, progress: Int, fromUser: Boolean) {
- if (fromUser) {
- CommandBus.send(Command.Seek(progress))
+ override fun onProgressChanged(view: SeekBar?, progress: Int, fromUser: Boolean) {
+ if (fromUser) {
+ CommandBus.send(Command.Seek(progress))
+ }
}
- }
- })
+ })
landscapeQueue?.let {
supportFragmentManager.beginTransaction()
@@ -303,9 +331,11 @@ class MainActivity : AppCompatActivity() {
when (message) {
is Event.LogOut -> {
FFA.get().deleteAllData(this@MainActivity)
- startActivity(Intent(this@MainActivity, LoginActivity::class.java).apply {
- flags = Intent.FLAG_ACTIVITY_NO_HISTORY
- })
+ startActivity(
+ Intent(this@MainActivity, LoginActivity::class.java).apply {
+ flags = Intent.FLAG_ACTIVITY_NO_HISTORY
+ }
+ )
finish()
}
@@ -385,12 +415,15 @@ class MainActivity : AppCompatActivity() {
PlayerService::class.java
).apply {
putExtra(PlayerService.INITIAL_COMMAND_KEY, command.command.toString())
- })
+ }
+ )
},
{
- startService(Intent(this@MainActivity, PlayerService::class.java).apply {
- putExtra(PlayerService.INITIAL_COMMAND_KEY, command.command.toString())
- })
+ startService(
+ Intent(this@MainActivity, PlayerService::class.java).apply {
+ putExtra(PlayerService.INITIAL_COMMAND_KEY, command.command.toString())
+ }
+ )
}
)
}
diff --git a/app/src/main/java/audio/funkwhale/ffa/activities/SearchActivity.kt b/app/src/main/java/audio/funkwhale/ffa/activities/SearchActivity.kt
index 0a530bc7dc271efc821f123e8da012872c84ebcf..b5b574cf69541dd2e7e9682c74951ea17c6e9eb8 100644
--- a/app/src/main/java/audio/funkwhale/ffa/activities/SearchActivity.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/activities/SearchActivity.kt
@@ -13,15 +13,24 @@ import audio.funkwhale.ffa.fragments.AlbumsFragment
import audio.funkwhale.ffa.fragments.ArtistsFragment
import audio.funkwhale.ffa.model.Album
import audio.funkwhale.ffa.model.Artist
-import audio.funkwhale.ffa.repositories.*
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.repositories.AlbumsSearchRepository
+import audio.funkwhale.ffa.repositories.ArtistsSearchRepository
+import audio.funkwhale.ffa.repositories.FavoritesRepository
+import audio.funkwhale.ffa.repositories.Repository
+import audio.funkwhale.ffa.repositories.TracksSearchRepository
+import audio.funkwhale.ffa.utils.Command
+import audio.funkwhale.ffa.utils.CommandBus
+import audio.funkwhale.ffa.utils.Event
+import audio.funkwhale.ffa.utils.EventBus
+import audio.funkwhale.ffa.utils.getMetadata
+import audio.funkwhale.ffa.utils.untilNetwork
import com.google.android.exoplayer2.offline.Download
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.net.URLEncoder
-import java.util.*
+import java.util.Locale
class SearchActivity : AppCompatActivity() {
private lateinit var adapter: SearchAdapter
@@ -82,58 +91,58 @@ class SearchActivity : AppCompatActivity() {
favoritesRepository = FavoritesRepository(this@SearchActivity)
binding.search.setOnQueryTextListener(object :
- androidx.appcompat.widget.SearchView.OnQueryTextListener {
- override fun onQueryTextSubmit(rawQuery: String?): Boolean {
- binding.search.clearFocus()
+ androidx.appcompat.widget.SearchView.OnQueryTextListener {
+ override fun onQueryTextSubmit(rawQuery: String?): Boolean {
+ binding.search.clearFocus()
- rawQuery?.let {
- done = 0
+ rawQuery?.let {
+ done = 0
- val query = URLEncoder.encode(it, "UTF-8")
+ val query = URLEncoder.encode(it, "UTF-8")
- artistsRepository.query = query.lowercase(Locale.ROOT)
- albumsRepository.query = query.lowercase(Locale.ROOT)
- tracksRepository.query = query.lowercase(Locale.ROOT)
+ artistsRepository.query = query.lowercase(Locale.ROOT)
+ albumsRepository.query = query.lowercase(Locale.ROOT)
+ tracksRepository.query = query.lowercase(Locale.ROOT)
- binding.searchSpinner.visibility = View.VISIBLE
- binding.searchEmpty.visibility = View.GONE
- binding.searchNoResults.visibility = View.GONE
+ binding.searchSpinner.visibility = View.VISIBLE
+ binding.searchEmpty.visibility = View.GONE
+ binding.searchNoResults.visibility = View.GONE
- adapter.artists.clear()
- adapter.albums.clear()
- adapter.tracks.clear()
- adapter.notifyDataSetChanged()
+ adapter.artists.clear()
+ adapter.albums.clear()
+ adapter.tracks.clear()
+ adapter.notifyDataSetChanged()
- artistsRepository.fetch(Repository.Origin.Network.origin)
- .untilNetwork(lifecycleScope) { artists, _, _, _ ->
- done++
+ artistsRepository.fetch(Repository.Origin.Network.origin)
+ .untilNetwork(lifecycleScope) { artists, _, _, _ ->
+ done++
- adapter.artists.addAll(artists)
- refresh()
- }
+ adapter.artists.addAll(artists)
+ refresh()
+ }
- albumsRepository.fetch(Repository.Origin.Network.origin)
- .untilNetwork(lifecycleScope) { albums, _, _, _ ->
- done++
+ albumsRepository.fetch(Repository.Origin.Network.origin)
+ .untilNetwork(lifecycleScope) { albums, _, _, _ ->
+ done++
- adapter.albums.addAll(albums)
- refresh()
- }
+ adapter.albums.addAll(albums)
+ refresh()
+ }
- tracksRepository.fetch(Repository.Origin.Network.origin)
- .untilNetwork(lifecycleScope) { tracks, _, _, _ ->
- done++
+ tracksRepository.fetch(Repository.Origin.Network.origin)
+ .untilNetwork(lifecycleScope) { tracks, _, _, _ ->
+ done++
- adapter.tracks.addAll(tracks)
- refresh()
- }
- }
+ adapter.tracks.addAll(tracks)
+ refresh()
+ }
+ }
- return true
- }
+ return true
+ }
- override fun onQueryTextChange(newText: String?) = true
- })
+ override fun onQueryTextChange(newText: String?) = true
+ })
}
private fun refresh() {
diff --git a/app/src/main/java/audio/funkwhale/ffa/activities/SettingsActivity.kt b/app/src/main/java/audio/funkwhale/ffa/activities/SettingsActivity.kt
index caa7a87aa4ee5923d61e7d64bcda7d239729ee40..38886ec7fd348c8216d0e0b16900db7c76160e15 100644
--- a/app/src/main/java/audio/funkwhale/ffa/activities/SettingsActivity.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/activities/SettingsActivity.kt
@@ -1,6 +1,10 @@
package audio.funkwhale.ffa.activities
-import android.content.*
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.content.Context
+import android.content.Intent
+import android.content.SharedPreferences
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
diff --git a/app/src/main/java/audio/funkwhale/ffa/activities/SplashActivity.kt b/app/src/main/java/audio/funkwhale/ffa/activities/SplashActivity.kt
index 865463d7545a3bed11c6a2bdfde5fd002d577bee..bce7f49ee80013c1d7170cf09f36fd2e6a0502c4 100644
--- a/app/src/main/java/audio/funkwhale/ffa/activities/SplashActivity.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/activities/SplashActivity.kt
@@ -6,7 +6,9 @@ import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import audio.funkwhale.ffa.FFA
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.AppContext
+import audio.funkwhale.ffa.utils.OAuth
+import audio.funkwhale.ffa.utils.Settings
import org.koin.java.KoinJavaComponent.inject
class SplashActivity : AppCompatActivity() {
diff --git a/app/src/main/java/audio/funkwhale/ffa/adapters/BrowseTabsAdapter.kt b/app/src/main/java/audio/funkwhale/ffa/adapters/BrowseTabsAdapter.kt
index 359578f9ea545250a0a12b3bc5d731e258798190..272f24fd15395a3278acdc1818eb48d4914731f5 100644
--- a/app/src/main/java/audio/funkwhale/ffa/adapters/BrowseTabsAdapter.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/adapters/BrowseTabsAdapter.kt
@@ -4,9 +4,14 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import audio.funkwhale.ffa.R
-import audio.funkwhale.ffa.fragments.*
-
-class BrowseTabsAdapter(val context: Fragment, manager: FragmentManager) : FragmentPagerAdapter(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
+import audio.funkwhale.ffa.fragments.AlbumsGridFragment
+import audio.funkwhale.ffa.fragments.ArtistsFragment
+import audio.funkwhale.ffa.fragments.FavoritesFragment
+import audio.funkwhale.ffa.fragments.PlaylistsFragment
+import audio.funkwhale.ffa.fragments.RadiosFragment
+
+class BrowseTabsAdapter(val context: Fragment, manager: FragmentManager) :
+ FragmentPagerAdapter(manager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
var tabs = mutableListOf<Fragment>()
override fun getCount() = 5
diff --git a/app/src/main/java/audio/funkwhale/ffa/adapters/DownloadsAdapter.kt b/app/src/main/java/audio/funkwhale/ffa/adapters/DownloadsAdapter.kt
index c70032835297d11f1f46948fac2227e0e2bb1fe4..17631cb5d593511ec9603b69223fe96723ea4d24 100644
--- a/app/src/main/java/audio/funkwhale/ffa/adapters/DownloadsAdapter.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/adapters/DownloadsAdapter.kt
@@ -8,9 +8,9 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.databinding.RowDownloadBinding
-import audio.funkwhale.ffa.playback.PinService
import audio.funkwhale.ffa.model.DownloadInfo
import audio.funkwhale.ffa.model.Track
+import audio.funkwhale.ffa.playback.PinService
import com.google.android.exoplayer2.offline.Download
import com.google.android.exoplayer2.offline.DownloadService
diff --git a/app/src/main/java/audio/funkwhale/ffa/adapters/FavoritesAdapter.kt b/app/src/main/java/audio/funkwhale/ffa/adapters/FavoritesAdapter.kt
index 2a840242ff79cc3ec3d6d60c1887d7575716df7b..66ea97a11736d69bb5eed8b39960c3b51435a05c 100644
--- a/app/src/main/java/audio/funkwhale/ffa/adapters/FavoritesAdapter.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/adapters/FavoritesAdapter.kt
@@ -13,9 +13,9 @@ import androidx.recyclerview.widget.RecyclerView
import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.databinding.RowTrackBinding
import audio.funkwhale.ffa.fragments.FFAAdapter
+import audio.funkwhale.ffa.model.Track
import audio.funkwhale.ffa.utils.Command
import audio.funkwhale.ffa.utils.CommandBus
-import audio.funkwhale.ffa.model.Track
import audio.funkwhale.ffa.utils.maybeLoad
import audio.funkwhale.ffa.utils.maybeNormalizeUrl
import audio.funkwhale.ffa.utils.toast
diff --git a/app/src/main/java/audio/funkwhale/ffa/adapters/PlaylistTracksAdapter.kt b/app/src/main/java/audio/funkwhale/ffa/adapters/PlaylistTracksAdapter.kt
index 734e85056e76b79929af163215f0a90117c47d99..70693df12d32ee40bef5b0246735cbd1ba9c551f 100644
--- a/app/src/main/java/audio/funkwhale/ffa/adapters/PlaylistTracksAdapter.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/adapters/PlaylistTracksAdapter.kt
@@ -16,10 +16,10 @@ import androidx.recyclerview.widget.RecyclerView
import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.databinding.RowTrackBinding
import audio.funkwhale.ffa.fragments.FFAAdapter
-import audio.funkwhale.ffa.utils.Command
-import audio.funkwhale.ffa.utils.CommandBus
import audio.funkwhale.ffa.model.PlaylistTrack
import audio.funkwhale.ffa.model.Track
+import audio.funkwhale.ffa.utils.Command
+import audio.funkwhale.ffa.utils.CommandBus
import audio.funkwhale.ffa.utils.maybeLoad
import audio.funkwhale.ffa.utils.maybeNormalizeUrl
import audio.funkwhale.ffa.utils.toast
diff --git a/app/src/main/java/audio/funkwhale/ffa/adapters/RadiosAdapter.kt b/app/src/main/java/audio/funkwhale/ffa/adapters/RadiosAdapter.kt
index 12b88b1b0f0f6d81cce5bfe3176d0ae11d6fc2b9..8d57fa2ae490a3592e06e850d0ef19f448cdacb7 100644
--- a/app/src/main/java/audio/funkwhale/ffa/adapters/RadiosAdapter.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/adapters/RadiosAdapter.kt
@@ -9,10 +9,10 @@ import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.databinding.RowRadioBinding
import audio.funkwhale.ffa.databinding.RowRadioHeaderBinding
import audio.funkwhale.ffa.fragments.FFAAdapter
+import audio.funkwhale.ffa.model.Radio
import audio.funkwhale.ffa.utils.AppContext
import audio.funkwhale.ffa.utils.Event
import audio.funkwhale.ffa.utils.EventBus
-import audio.funkwhale.ffa.model.Radio
import audio.funkwhale.ffa.views.LoadingImageView
import com.preference.PowerPreference
import kotlinx.coroutines.CoroutineScope
@@ -42,8 +42,10 @@ class RadiosAdapter(
private val instanceRadios: List<Radio> by lazy {
context?.let {
- return@lazy when (val username =
- PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).getString("actor_username")) {
+ return@lazy when (
+ val username =
+ PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).getString("actor_username")
+ ) {
"" -> listOf(
Radio(
0,
@@ -133,8 +135,9 @@ class RadiosAdapter(
context?.let {
when (position) {
0 -> holder.label.text = context.getString(R.string.radio_instance_radios)
- instanceRadios.size + 1 -> holder.label.text =
- context.getString(R.string.radio_user_radios)
+ instanceRadios.size + 1 ->
+ holder.label.text =
+ context.getString(R.string.radio_user_radios)
}
}
}
diff --git a/app/src/main/java/audio/funkwhale/ffa/adapters/SearchAdapter.kt b/app/src/main/java/audio/funkwhale/ffa/adapters/SearchAdapter.kt
index df860b92f524161c2416fa3b53cde8ae6dacbc93..f5b2b97b663656841fdae1ea6ef76598757d7e90 100644
--- a/app/src/main/java/audio/funkwhale/ffa/adapters/SearchAdapter.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/adapters/SearchAdapter.kt
@@ -17,9 +17,9 @@ import audio.funkwhale.ffa.databinding.RowSearchHeaderBinding
import audio.funkwhale.ffa.databinding.RowTrackBinding
import audio.funkwhale.ffa.model.Album
import audio.funkwhale.ffa.model.Artist
+import audio.funkwhale.ffa.model.Track
import audio.funkwhale.ffa.utils.Command
import audio.funkwhale.ffa.utils.CommandBus
-import audio.funkwhale.ffa.model.Track
import audio.funkwhale.ffa.utils.maybeLoad
import audio.funkwhale.ffa.utils.maybeNormalizeUrl
import audio.funkwhale.ffa.utils.onApi
@@ -73,20 +73,19 @@ class SearchAdapter(
ResultType.Artist.ordinal -> artists[position].id.toLong()
ResultType.Artist.ordinal -> albums[position - artists.size - 2].id.toLong()
- ResultType.Track.ordinal -> tracks[position - artists.size - albums.size - sectionCount].id.toLong()
+ ResultType.Track.ordinal ->
+ tracks[position - artists.size - albums.size - sectionCount].id.toLong()
else -> 0
}
}
- override fun getItemViewType(position: Int): Int {
- if (position == 0) return ResultType.Header.ordinal // Artists header
- if (position == (artists.size + 1)) return ResultType.Header.ordinal // Albums header
- if (position == (artists.size + albums.size + 2)) return ResultType.Header.ordinal // Tracks header
-
- if (position <= artists.size) return ResultType.Artist.ordinal
- if (position <= artists.size + albums.size + 2) return ResultType.Album.ordinal
-
- return ResultType.Track.ordinal
+ override fun getItemViewType(position: Int): Int = when {
+ position == 0 ||
+ position == (artists.size + 1) ||
+ position == (artists.size + albums.size + 2) -> ResultType.Header.ordinal
+ position <= artists.size -> ResultType.Artist.ordinal
+ position <= artists.size + albums.size + 2 -> ResultType.Album.ordinal
+ else -> ResultType.Track.ordinal
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
@@ -205,102 +204,112 @@ class SearchAdapter(
Typeface.create(searchHeaderViewHolder?.title?.typeface, Typeface.NORMAL)
rowTrackViewHolder?.artist?.typeface =
Typeface.create(rowTrackViewHolder?.artist?.typeface, Typeface.NORMAL)
- })
+ }
+ )
searchHeaderViewHolder?.title?.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0)
when (resultType) {
- ResultType.Artist.ordinal -> {
- rowTrackViewHolder?.title?.setCompoundDrawablesWithIntrinsicBounds(
- 0, 0, 0, 0
- )
- }
- ResultType.Album.ordinal -> {
- rowTrackViewHolder?.title?.setCompoundDrawablesWithIntrinsicBounds(
- 0, 0, 0, 0
- )
- }
- ResultType.Track.ordinal -> {
- (item as? Track)?.let { track ->
- context?.let { context ->
- if (track == currentTrack || track.current) {
- searchHeaderViewHolder?.title?.setTypeface(
- searchHeaderViewHolder.title.typeface,
- Typeface.BOLD
- )
- rowTrackViewHolder?.artist?.setTypeface(
- rowTrackViewHolder.artist.typeface,
- Typeface.BOLD
- )
- }
+ ResultType.Artist.ordinal -> {
+ rowTrackViewHolder?.title?.setCompoundDrawablesWithIntrinsicBounds(
+ 0, 0, 0, 0
+ )
+ }
+ ResultType.Album.ordinal -> {
+ rowTrackViewHolder?.title?.setCompoundDrawablesWithIntrinsicBounds(
+ 0, 0, 0, 0
+ )
+ }
+ ResultType.Track.ordinal -> {
+ (item as? Track)?.let { track ->
+ context?.let { context ->
+ if (track == currentTrack || track.current) {
+ searchHeaderViewHolder?.title?.setTypeface(
+ searchHeaderViewHolder.title.typeface,
+ Typeface.BOLD
+ )
+ rowTrackViewHolder?.artist?.setTypeface(
+ rowTrackViewHolder.artist.typeface,
+ Typeface.BOLD
+ )
+ }
- when (track.favorite) {
- true -> rowTrackViewHolder?.favorite?.setColorFilter(context.getColor(R.color.colorFavorite))
- false -> rowTrackViewHolder?.favorite?.setColorFilter(context.getColor(R.color.colorSelected))
- }
+ when (track.favorite) {
+ true -> rowTrackViewHolder?.favorite?.setColorFilter(
+ context.getColor(R.color.colorFavorite)
+ )
+ false -> rowTrackViewHolder?.favorite?.setColorFilter(
+ context.getColor(R.color.colorSelected)
+ )
+ }
- rowTrackViewHolder?.favorite?.setOnClickListener {
- favoriteListener?.let {
- favoriteListener.onToggleFavorite(track.id, !track.favorite)
+ rowTrackViewHolder?.favorite?.setOnClickListener {
+ favoriteListener?.let {
+ favoriteListener.onToggleFavorite(track.id, !track.favorite)
- tracks[position - artists.size - albums.size - sectionCount].favorite =
- !track.favorite
+ tracks[position - artists.size - albums.size - sectionCount].favorite =
+ !track.favorite
- notifyItemChanged(position)
- }
+ notifyItemChanged(position)
}
+ }
- when (track.cached || track.downloaded) {
- true -> rowTrackViewHolder?.title?.setCompoundDrawablesWithIntrinsicBounds(
- R.drawable.downloaded, 0, 0, 0
- )
- false -> rowTrackViewHolder?.title?.setCompoundDrawablesWithIntrinsicBounds(
- 0, 0, 0, 0
- )
- }
+ when (track.cached || track.downloaded) {
+ true -> rowTrackViewHolder?.title?.setCompoundDrawablesWithIntrinsicBounds(
+ R.drawable.downloaded, 0, 0, 0
+ )
+ false -> rowTrackViewHolder?.title?.setCompoundDrawablesWithIntrinsicBounds(
+ 0, 0, 0, 0
+ )
+ }
- if (track.cached && !track.downloaded) {
- rowTrackViewHolder?.title?.compoundDrawables?.forEach {
- it?.colorFilter =
- PorterDuffColorFilter(context.getColor(R.color.cached), PorterDuff.Mode.SRC_IN)
- }
+ if (track.cached && !track.downloaded) {
+ rowTrackViewHolder?.title?.compoundDrawables?.forEach {
+ it?.colorFilter =
+ PorterDuffColorFilter(context.getColor(R.color.cached), PorterDuff.Mode.SRC_IN)
}
+ }
- if (track.downloaded) {
- rowTrackViewHolder?.title?.compoundDrawables?.forEach {
- it?.colorFilter =
- PorterDuffColorFilter(context.getColor(R.color.downloaded), PorterDuff.Mode.SRC_IN)
- }
+ if (track.downloaded) {
+ rowTrackViewHolder?.title?.compoundDrawables?.forEach {
+ it?.colorFilter =
+ PorterDuffColorFilter(
+ context.getColor(R.color.downloaded),
+ PorterDuff.Mode.SRC_IN
+ )
}
+ }
- rowTrackViewHolder?.actions?.setOnClickListener {
- PopupMenu(
- context,
- rowTrackViewHolder.actions,
- Gravity.START,
- R.attr.actionOverflowMenuStyle,
- 0
- ).apply {
- inflate(R.menu.row_track)
-
- setOnMenuItemClickListener {
- when (it.itemId) {
- R.id.track_add_to_queue -> CommandBus.send(Command.AddToQueue(listOf(track)))
- R.id.track_play_next -> CommandBus.send(Command.PlayNext(track))
- R.id.track_pin -> CommandBus.send(Command.PinTrack(track))
- R.id.track_add_to_playlist -> CommandBus.send(Command.AddToPlaylist(listOf(track)))
- R.id.queue_remove -> CommandBus.send(Command.RemoveFromQueue(track))
- }
-
- true
+ rowTrackViewHolder?.actions?.setOnClickListener {
+ PopupMenu(
+ context,
+ rowTrackViewHolder.actions,
+ Gravity.START,
+ R.attr.actionOverflowMenuStyle,
+ 0
+ ).apply {
+ inflate(R.menu.row_track)
+
+ setOnMenuItemClickListener {
+ when (it.itemId) {
+ R.id.track_add_to_queue -> CommandBus.send(Command.AddToQueue(listOf(track)))
+ R.id.track_play_next -> CommandBus.send(Command.PlayNext(track))
+ R.id.track_pin -> CommandBus.send(Command.PinTrack(track))
+ R.id.track_add_to_playlist -> CommandBus.send(
+ Command.AddToPlaylist(listOf(track))
+ )
+ R.id.queue_remove -> CommandBus.send(Command.RemoveFromQueue(track))
}
- show()
+ true
}
+
+ show()
}
}
}
}
+ }
}
}
diff --git a/app/src/main/java/audio/funkwhale/ffa/adapters/TracksAdapter.kt b/app/src/main/java/audio/funkwhale/ffa/adapters/TracksAdapter.kt
index c661460a569b591cf01791996c0f3d19137d0d47..049df34d93586ca16ee616e11c0b6bc43e354e7f 100644
--- a/app/src/main/java/audio/funkwhale/ffa/adapters/TracksAdapter.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/adapters/TracksAdapter.kt
@@ -18,9 +18,9 @@ import androidx.recyclerview.widget.RecyclerView
import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.databinding.RowTrackBinding
import audio.funkwhale.ffa.fragments.FFAAdapter
+import audio.funkwhale.ffa.model.Track
import audio.funkwhale.ffa.utils.Command
import audio.funkwhale.ffa.utils.CommandBus
-import audio.funkwhale.ffa.model.Track
import audio.funkwhale.ffa.utils.maybeLoad
import audio.funkwhale.ffa.utils.maybeNormalizeUrl
import audio.funkwhale.ffa.utils.toast
diff --git a/app/src/main/java/audio/funkwhale/ffa/fragments/AddToPlaylistDialog.kt b/app/src/main/java/audio/funkwhale/ffa/fragments/AddToPlaylistDialog.kt
index 4498e5d6898f4ba592648e8cd18d75949c35c31b..2c01cbb867c03004861b803e095185ffc17e9877 100644
--- a/app/src/main/java/audio/funkwhale/ffa/fragments/AddToPlaylistDialog.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/fragments/AddToPlaylistDialog.kt
@@ -14,7 +14,8 @@ import audio.funkwhale.ffa.databinding.DialogAddToPlaylistBinding
import audio.funkwhale.ffa.model.Playlist
import audio.funkwhale.ffa.model.Track
import audio.funkwhale.ffa.repositories.ManagementPlaylistsRepository
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.FFACache
+import audio.funkwhale.ffa.utils.untilNetwork
import com.google.gson.Gson
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers.IO
@@ -80,19 +81,22 @@ object AddToPlaylistDialog {
}
val adapter =
- PlaylistsAdapter(layoutInflater, activity, object : PlaylistsAdapter.OnPlaylistClickListener {
- override fun onClick(holder: View?, playlist: Playlist) {
- repository.add(playlist.id, tracks)
+ PlaylistsAdapter(
+ layoutInflater, activity,
+ object : PlaylistsAdapter.OnPlaylistClickListener {
+ override fun onClick(holder: View?, playlist: Playlist) {
+ repository.add(playlist.id, tracks)
- Toast.makeText(
- activity,
- activity.getString(R.string.playlist_added_to, playlist.name),
- Toast.LENGTH_SHORT
- ).show()
+ Toast.makeText(
+ activity,
+ activity.getString(R.string.playlist_added_to, playlist.name),
+ Toast.LENGTH_SHORT
+ ).show()
- dialog.dismiss()
+ dialog.dismiss()
+ }
}
- })
+ )
binding.playlists.layoutManager = LinearLayoutManager(activity)
binding.playlists.adapter = adapter
diff --git a/app/src/main/java/audio/funkwhale/ffa/fragments/AlbumsFragment.kt b/app/src/main/java/audio/funkwhale/ffa/fragments/AlbumsFragment.kt
index a6a2116f60c6d02cfa3bf507b1eda8663fcbb04d..c671179f2631ec814fd36226ddb9efb9a3645a29 100644
--- a/app/src/main/java/audio/funkwhale/ffa/fragments/AlbumsFragment.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/fragments/AlbumsFragment.kt
@@ -25,7 +25,12 @@ import audio.funkwhale.ffa.model.Artist
import audio.funkwhale.ffa.repositories.AlbumsRepository
import audio.funkwhale.ffa.repositories.ArtistTracksRepository
import audio.funkwhale.ffa.repositories.Repository
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.AppContext
+import audio.funkwhale.ffa.utils.Command
+import audio.funkwhale.ffa.utils.CommandBus
+import audio.funkwhale.ffa.utils.maybeLoad
+import audio.funkwhale.ffa.utils.maybeNormalizeUrl
+import audio.funkwhale.ffa.utils.onViewPager
import com.squareup.picasso.Picasso
import jp.wasabeef.picasso.transformations.RoundedCornersTransformation
import kotlinx.coroutines.Dispatchers.IO
diff --git a/app/src/main/java/audio/funkwhale/ffa/fragments/AlbumsGridFragment.kt b/app/src/main/java/audio/funkwhale/ffa/fragments/AlbumsGridFragment.kt
index 263ad64f22582221b250887b35f09ff04b707d2d..4259e8834a7e34303f0ea17270ac5c08e2883042 100644
--- a/app/src/main/java/audio/funkwhale/ffa/fragments/AlbumsGridFragment.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/fragments/AlbumsGridFragment.kt
@@ -13,8 +13,8 @@ import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.activities.MainActivity
import audio.funkwhale.ffa.adapters.AlbumsGridAdapter
import audio.funkwhale.ffa.databinding.FragmentAlbumsGridBinding
-import audio.funkwhale.ffa.repositories.AlbumsRepository
import audio.funkwhale.ffa.model.Album
+import audio.funkwhale.ffa.repositories.AlbumsRepository
import audio.funkwhale.ffa.utils.AppContext
class AlbumsGridFragment : FFAFragment<Album, AlbumsGridAdapter>() {
diff --git a/app/src/main/java/audio/funkwhale/ffa/fragments/FFAFragment.kt b/app/src/main/java/audio/funkwhale/ffa/fragments/FFAFragment.kt
index e79faaa2bf59a1465b8d9e499c4b31560cb5caee..c2c1840e0707e340149155f4d4c888d94abb7396 100644
--- a/app/src/main/java/audio/funkwhale/ffa/fragments/FFAFragment.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/fragments/FFAFragment.kt
@@ -10,7 +10,10 @@ import androidx.recyclerview.widget.SimpleItemAnimator
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import audio.funkwhale.ffa.repositories.HttpUpstream
import audio.funkwhale.ffa.repositories.Repository
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.Event
+import audio.funkwhale.ffa.utils.EventBus
+import audio.funkwhale.ffa.utils.FFACache
+import audio.funkwhale.ffa.utils.untilNetwork
import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
diff --git a/app/src/main/java/audio/funkwhale/ffa/fragments/FavoritesFragment.kt b/app/src/main/java/audio/funkwhale/ffa/fragments/FavoritesFragment.kt
index 1a4d27fddd339053a0b9b14fd3ca0d4f84edc0f6..38d65fcc446e6b882c34c8540354cbcad8cbdef6 100644
--- a/app/src/main/java/audio/funkwhale/ffa/fragments/FavoritesFragment.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/fragments/FavoritesFragment.kt
@@ -11,7 +11,15 @@ import audio.funkwhale.ffa.databinding.FragmentFavoritesBinding
import audio.funkwhale.ffa.model.Track
import audio.funkwhale.ffa.repositories.FavoritesRepository
import audio.funkwhale.ffa.repositories.TracksRepository
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.Command
+import audio.funkwhale.ffa.utils.CommandBus
+import audio.funkwhale.ffa.utils.Event
+import audio.funkwhale.ffa.utils.EventBus
+import audio.funkwhale.ffa.utils.Request
+import audio.funkwhale.ffa.utils.RequestBus
+import audio.funkwhale.ffa.utils.Response
+import audio.funkwhale.ffa.utils.getMetadata
+import audio.funkwhale.ffa.utils.wait
import com.google.android.exoplayer2.offline.Download
import com.google.android.exoplayer2.offline.DownloadManager
import kotlinx.coroutines.Dispatchers.IO
diff --git a/app/src/main/java/audio/funkwhale/ffa/fragments/PlaylistTracksFragment.kt b/app/src/main/java/audio/funkwhale/ffa/fragments/PlaylistTracksFragment.kt
index 5e26b81c8e7c621d6587ae9cc62ab54839260216..1b3ac646dd309a4bce12feb16b3af47f4f89258c 100644
--- a/app/src/main/java/audio/funkwhale/ffa/fragments/PlaylistTracksFragment.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/fragments/PlaylistTracksFragment.kt
@@ -18,7 +18,15 @@ import audio.funkwhale.ffa.model.Track
import audio.funkwhale.ffa.repositories.FavoritesRepository
import audio.funkwhale.ffa.repositories.ManagementPlaylistsRepository
import audio.funkwhale.ffa.repositories.PlaylistTracksRepository
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.Command
+import audio.funkwhale.ffa.utils.CommandBus
+import audio.funkwhale.ffa.utils.Request
+import audio.funkwhale.ffa.utils.RequestBus
+import audio.funkwhale.ffa.utils.Response
+import audio.funkwhale.ffa.utils.maybeLoad
+import audio.funkwhale.ffa.utils.maybeNormalizeUrl
+import audio.funkwhale.ffa.utils.toast
+import audio.funkwhale.ffa.utils.wait
import com.squareup.picasso.Picasso
import jp.wasabeef.picasso.transformations.RoundedCornersTransformation
import kotlinx.coroutines.Dispatchers.Main
diff --git a/app/src/main/java/audio/funkwhale/ffa/fragments/PlaylistsFragment.kt b/app/src/main/java/audio/funkwhale/ffa/fragments/PlaylistsFragment.kt
index 83875c57e86c416029f460bcc3a061bce5114fd9..25cff0d2291d049978e99127417fe2f3e89aadca 100644
--- a/app/src/main/java/audio/funkwhale/ffa/fragments/PlaylistsFragment.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/fragments/PlaylistsFragment.kt
@@ -12,9 +12,9 @@ import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.activities.MainActivity
import audio.funkwhale.ffa.adapters.PlaylistsAdapter
import audio.funkwhale.ffa.databinding.FragmentPlaylistsBinding
+import audio.funkwhale.ffa.model.Playlist
import audio.funkwhale.ffa.repositories.PlaylistsRepository
import audio.funkwhale.ffa.utils.AppContext
-import audio.funkwhale.ffa.model.Playlist
class PlaylistsFragment : FFAFragment<Playlist, PlaylistsAdapter>() {
diff --git a/app/src/main/java/audio/funkwhale/ffa/fragments/RadiosFragment.kt b/app/src/main/java/audio/funkwhale/ffa/fragments/RadiosFragment.kt
index d57d6258a462185c49084d01219285115626eef3..cf9c7640122401e6d4252386366b4e54970669fb 100644
--- a/app/src/main/java/audio/funkwhale/ffa/fragments/RadiosFragment.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/fragments/RadiosFragment.kt
@@ -9,12 +9,12 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.RecyclerView
import audio.funkwhale.ffa.adapters.RadiosAdapter
import audio.funkwhale.ffa.databinding.FragmentRadiosBinding
+import audio.funkwhale.ffa.model.Radio
import audio.funkwhale.ffa.repositories.RadiosRepository
import audio.funkwhale.ffa.utils.Command
import audio.funkwhale.ffa.utils.CommandBus
import audio.funkwhale.ffa.utils.Event
import audio.funkwhale.ffa.utils.EventBus
-import audio.funkwhale.ffa.model.Radio
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
diff --git a/app/src/main/java/audio/funkwhale/ffa/fragments/TracksFragment.kt b/app/src/main/java/audio/funkwhale/ffa/fragments/TracksFragment.kt
index ce64521d177b83d1d1e4d47b753ddd222d6f4b0b..c8be2af636027d6ad9fecd719ba7e18c11e859ca 100644
--- a/app/src/main/java/audio/funkwhale/ffa/fragments/TracksFragment.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/fragments/TracksFragment.kt
@@ -19,7 +19,18 @@ import audio.funkwhale.ffa.model.Track
import audio.funkwhale.ffa.repositories.FavoritedRepository
import audio.funkwhale.ffa.repositories.FavoritesRepository
import audio.funkwhale.ffa.repositories.TracksRepository
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.Command
+import audio.funkwhale.ffa.utils.CommandBus
+import audio.funkwhale.ffa.utils.Event
+import audio.funkwhale.ffa.utils.EventBus
+import audio.funkwhale.ffa.utils.Request
+import audio.funkwhale.ffa.utils.RequestBus
+import audio.funkwhale.ffa.utils.Response
+import audio.funkwhale.ffa.utils.getMetadata
+import audio.funkwhale.ffa.utils.maybeLoad
+import audio.funkwhale.ffa.utils.maybeNormalizeUrl
+import audio.funkwhale.ffa.utils.toast
+import audio.funkwhale.ffa.utils.wait
import com.google.android.exoplayer2.offline.Download
import com.google.android.exoplayer2.offline.DownloadManager
import com.preference.PowerPreference
@@ -199,8 +210,10 @@ class TracksFragment : FFAFragment<Track, TracksAdapter>() {
setOnMenuItemClickListener {
when (it.itemId) {
- R.id.play_secondary -> when (PowerPreference.getDefaultFile()
- .getString("play_order")) {
+ R.id.play_secondary -> when (
+ PowerPreference.getDefaultFile()
+ .getString("play_order")
+ ) {
"in_order" -> CommandBus.send(Command.ReplaceQueue(adapter.data.shuffled()))
else -> CommandBus.send(Command.ReplaceQueue(adapter.data))
}
diff --git a/app/src/main/java/audio/funkwhale/ffa/koin/Modules.kt b/app/src/main/java/audio/funkwhale/ffa/koin/Modules.kt
index 3f9c3de5e64f8e9f0c9d47bbec794bcdbceefd54..d06ac33e20d427670b8c8e0181ef76deedf62a11 100644
--- a/app/src/main/java/audio/funkwhale/ffa/koin/Modules.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/koin/Modules.kt
@@ -64,4 +64,4 @@ fun exoplayerModule(context: Context) = module {
fun authModule() = module {
single { OAuth(get()) }
single { AuthorizationServiceFactory() }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/AlbumsResponse.kt b/app/src/main/java/audio/funkwhale/ffa/model/AlbumsResponse.kt
index 98aa991bfa81264950d4b7bacb5835fe88f5c34b..8f3203f1df14678d8c68100fdeba66e818877726 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/AlbumsResponse.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/AlbumsResponse.kt
@@ -6,4 +6,4 @@ data class AlbumsResponse(
val results: AlbumList
) : FFAResponse<Album>() {
override fun getData() = results
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/Artist.kt b/app/src/main/java/audio/funkwhale/ffa/model/Artist.kt
index 2a74b6d8ad1605112341b4b97ba0154295f183c0..7e779a7c83ffb769427e9f31790e264228f3f5c5 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/Artist.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/Artist.kt
@@ -13,4 +13,4 @@ data class Artist(
override fun cover(): String? = albums?.getOrNull(0)?.cover?.urls?.original
override fun title() = name
override fun subtitle() = "Artist"
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/ArtistsResponse.kt b/app/src/main/java/audio/funkwhale/ffa/model/ArtistsResponse.kt
index d59b793e7b01ff6d0dbbb9215cdfa1052fe94418..c504700c94117fffb4dddc1ae7e19865584d3315 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/ArtistsResponse.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/ArtistsResponse.kt
@@ -6,4 +6,4 @@ data class ArtistsResponse(
val results: List<Artist>
) : FFAResponse<Artist>() {
override fun getData() = results
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/CacheItem.kt b/app/src/main/java/audio/funkwhale/ffa/model/CacheItem.kt
index 616bb87aef25cd4e7bf0094cb68331117519e2cc..a1296dbdab7cc4449f6e5842310c4211ea6d05f1 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/CacheItem.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/CacheItem.kt
@@ -9,4 +9,4 @@ class PlaylistsCache(data: List<Playlist>) : CacheItem<Playlist>(data)
class PlaylistTracksCache(data: List<PlaylistTrack>) : CacheItem<PlaylistTrack>(data)
class RadiosCache(data: List<Radio>) : CacheItem<Radio>(data)
class FavoritedCache(data: List<Int>) : CacheItem<Int>(data)
-class QueueCache(data: List<Track>) : CacheItem<Track>(data)
\ No newline at end of file
+class QueueCache(data: List<Track>) : CacheItem<Track>(data)
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/CoverUrls.kt b/app/src/main/java/audio/funkwhale/ffa/model/CoverUrls.kt
index 6c935becc5a805f585693f31dea08e65a1210538..8efb18cb8832106108611b7c068744758efbe99f 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/CoverUrls.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/CoverUrls.kt
@@ -1,3 +1,3 @@
package audio.funkwhale.ffa.model
-data class CoverUrls(val original: String)
\ No newline at end of file
+data class CoverUrls(val original: String)
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/Covers.kt b/app/src/main/java/audio/funkwhale/ffa/model/Covers.kt
index 86b98803395ca762627e8ec7d72e871dc525542d..52717788343fd92a917943acacd1ae930924a0b8 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/Covers.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/Covers.kt
@@ -1,3 +1,3 @@
package audio.funkwhale.ffa.model
-data class Covers(val urls: CoverUrls)
\ No newline at end of file
+data class Covers(val urls: CoverUrls)
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/DownloadInfo.kt b/app/src/main/java/audio/funkwhale/ffa/model/DownloadInfo.kt
index 47d5e0a18019780a2441059ee0d21714d8267d32..383f2ea095718b7baa2dae6227865c633b08e5d1 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/DownloadInfo.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/DownloadInfo.kt
@@ -8,4 +8,4 @@ data class DownloadInfo(
val title: String,
val artist: String,
var download: Download?
-)
\ No newline at end of file
+)
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/FFAResponse.kt b/app/src/main/java/audio/funkwhale/ffa/model/FFAResponse.kt
index 289fa29097eff07f330f8d09aafeb34a21758ca8..781e50cf24520db4f3b5860bbec0c04431cdd6bf 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/FFAResponse.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/FFAResponse.kt
@@ -5,4 +5,4 @@ abstract class FFAResponse<D : Any> {
abstract val next: String?
abstract fun getData(): List<D>
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/Favorited.kt b/app/src/main/java/audio/funkwhale/ffa/model/Favorited.kt
index facfd2f1a979107dfd1415883fe40358b7589097..33d02bc96ca7cab0c8b69c5e880673f58e327be8 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/Favorited.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/Favorited.kt
@@ -1,3 +1,3 @@
package audio.funkwhale.ffa.model
-data class Favorited(val track: Int)
\ No newline at end of file
+data class Favorited(val track: Int)
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/FavoritedResponse.kt b/app/src/main/java/audio/funkwhale/ffa/model/FavoritedResponse.kt
index ab8ae623b52d6be31265cb1fc413bfd0b39c5418..75588b5a01e92ee360ee45a7eb4dcd39bde53732 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/FavoritedResponse.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/FavoritedResponse.kt
@@ -6,4 +6,4 @@ data class FavoritedResponse(
val results: List<Favorited>
) : FFAResponse<Int>() {
override fun getData() = results.map { it.track }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/Playlist.kt b/app/src/main/java/audio/funkwhale/ffa/model/Playlist.kt
index 7bf432ad0ecf698b78d9594cfcf9d3366ba7d73a..725a3ba22d88b51f47359f83924e3c0374bf5c2c 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/Playlist.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/Playlist.kt
@@ -6,4 +6,4 @@ data class Playlist(
val album_covers: List<String>,
val tracks_count: Int,
val duration: Int
-)
\ No newline at end of file
+)
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/PlaylistTrack.kt b/app/src/main/java/audio/funkwhale/ffa/model/PlaylistTrack.kt
index 4948f57ba7aa2bd6a23c64efcce46e6dc0ba53c0..f1db14b7078b764d71fcc8e888ad21c81fde1b41 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/PlaylistTrack.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/PlaylistTrack.kt
@@ -1,3 +1,3 @@
package audio.funkwhale.ffa.model
-data class PlaylistTrack(val track: Track)
\ No newline at end of file
+data class PlaylistTrack(val track: Track)
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/PlaylistTracksResponse.kt b/app/src/main/java/audio/funkwhale/ffa/model/PlaylistTracksResponse.kt
index ecfddaeba77b337872858e252bc78171de7ced1f..e3d7e57049d902ace3b4c0ed21c2da8ec13f5c0f 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/PlaylistTracksResponse.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/PlaylistTracksResponse.kt
@@ -6,4 +6,4 @@ data class PlaylistTracksResponse(
val results: List<PlaylistTrack>
) : FFAResponse<PlaylistTrack>() {
override fun getData() = results
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/PlaylistsResponse.kt b/app/src/main/java/audio/funkwhale/ffa/model/PlaylistsResponse.kt
index 623ddb267ef2a1f7c31d8f56c930c026e67458ba..6ccc766fecd4f2ec0f4ee938fe7051107feea7ab 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/PlaylistsResponse.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/PlaylistsResponse.kt
@@ -6,4 +6,4 @@ data class PlaylistsResponse(
val results: List<Playlist>
) : FFAResponse<Playlist>() {
override fun getData() = results
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/Radio.kt b/app/src/main/java/audio/funkwhale/ffa/model/Radio.kt
index b8d71355af546a6035cbabe55bd4e2a2b42d157d..a23230ba19dda166a27217011dfd980ddba9413e 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/Radio.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/Radio.kt
@@ -6,4 +6,4 @@ data class Radio(
val name: String,
val description: String,
var related_object_id: String? = null
-)
\ No newline at end of file
+)
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/RadiosResponse.kt b/app/src/main/java/audio/funkwhale/ffa/model/RadiosResponse.kt
index f2f6d9e989d6333e25f28f73174e959138df8361..b1935b5fb4f96c8abe7293342779ece7db466487 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/RadiosResponse.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/RadiosResponse.kt
@@ -6,4 +6,4 @@ data class RadiosResponse(
val results: List<Radio>
) : FFAResponse<Radio>() {
override fun getData() = results
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/SearchResult.kt b/app/src/main/java/audio/funkwhale/ffa/model/SearchResult.kt
index e5125763b60ede8eb3b804408f82391a72659ecc..16c49513be8da5a5a2480add1e906068013f6bbe 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/SearchResult.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/SearchResult.kt
@@ -4,4 +4,4 @@ interface SearchResult {
fun cover(): String?
fun title(): String
fun subtitle(): String
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/Track.kt b/app/src/main/java/audio/funkwhale/ffa/model/Track.kt
index a7ea22804f2c1a2a2cc2628571fa0dc8d31183df..e29761e1aa45213841df7d44eababc473e7e0167 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/Track.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/Track.kt
@@ -61,4 +61,4 @@ data class Track(
override fun subtitle() = artist.name
val formatted: String get() = "$id $artist ($album): $title"
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/model/TracksResponse.kt b/app/src/main/java/audio/funkwhale/ffa/model/TracksResponse.kt
index 21cc942a579ad7924312430410e99e7afe798142..c13026d1c5bc768fdf818138591927dd3be217ac 100644
--- a/app/src/main/java/audio/funkwhale/ffa/model/TracksResponse.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/model/TracksResponse.kt
@@ -6,4 +6,4 @@ data class TracksResponse(
val results: List<Track>
) : FFAResponse<Track>() {
override fun getData() = results
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/playback/CacheDataSourceFactoryProvider.kt b/app/src/main/java/audio/funkwhale/ffa/playback/CacheDataSourceFactoryProvider.kt
index 8dd33ec15855aa43b31568a25c10957e97e7609d..bc99b0652395e7507e0ba18444a5f50fdf645b65 100644
--- a/app/src/main/java/audio/funkwhale/ffa/playback/CacheDataSourceFactoryProvider.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/playback/CacheDataSourceFactoryProvider.kt
@@ -5,7 +5,7 @@ import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.utils.OAuth
import audio.funkwhale.ffa.utils.Settings
import com.google.android.exoplayer2.upstream.DataSource
-import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory
+import com.google.android.exoplayer2.upstream.DefaultHttpDataSource
import com.google.android.exoplayer2.upstream.FileDataSource
import com.google.android.exoplayer2.upstream.cache.Cache
import com.google.android.exoplayer2.upstream.cache.CacheDataSource
@@ -33,13 +33,13 @@ class CacheDataSourceFactoryProvider(
}
private fun createDatasourceFactory(context: Context, oAuth: OAuth): DataSource.Factory {
- val http = DefaultHttpDataSourceFactory(
- Util.getUserAgent(context, context.getString(R.string.app_name))
- )
+ val http = DefaultHttpDataSource.Factory().apply {
+ setUserAgent(Util.getUserAgent(context, context.getString(R.string.app_name)))
+ }
return if (!Settings.isAnonymous()) {
OAuth2DatasourceFactory(context, http, oAuth)
} else {
http
}
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/playback/MediaControlsManager.kt b/app/src/main/java/audio/funkwhale/ffa/playback/MediaControlsManager.kt
index 7fe2a5b7fd318e4ca8f8585cb48188f83824411e..36b5302f6834fd7c82fd36865fe46ef649b697b0 100644
--- a/app/src/main/java/audio/funkwhale/ffa/playback/MediaControlsManager.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/playback/MediaControlsManager.kt
@@ -12,8 +12,8 @@ import androidx.media.app.NotificationCompat.MediaStyle
import androidx.media.session.MediaButtonReceiver
import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.activities.MainActivity
-import audio.funkwhale.ffa.utils.AppContext
import audio.funkwhale.ffa.model.Track
+import audio.funkwhale.ffa.utils.AppContext
import audio.funkwhale.ffa.utils.maybeNormalizeUrl
import com.squareup.picasso.Picasso
import kotlinx.coroutines.CoroutineScope
diff --git a/app/src/main/java/audio/funkwhale/ffa/playback/MediaSession.kt b/app/src/main/java/audio/funkwhale/ffa/playback/MediaSession.kt
index 34ce450d1419403e26762c4125f0c856a08b6952..9b3a4eba86a3f4e91daadc784240c33f5b174e8c 100644
--- a/app/src/main/java/audio/funkwhale/ffa/playback/MediaSession.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/playback/MediaSession.kt
@@ -44,11 +44,13 @@ class MediaSession(private val context: Context) {
it.setMediaButtonEventHandler { _, _, intent ->
if (!active) {
- context.startService(Intent(context, PlayerService::class.java).apply {
- action = intent.action
+ context.startService(
+ Intent(context, PlayerService::class.java).apply {
+ action = intent.action
- intent.extras?.let { extras -> putExtras(extras) }
- })
+ intent.extras?.let { extras -> putExtras(extras) }
+ }
+ )
return@setMediaButtonEventHandler true
}
diff --git a/app/src/main/java/audio/funkwhale/ffa/playback/OAuth2Datasource.kt b/app/src/main/java/audio/funkwhale/ffa/playback/OAuth2Datasource.kt
index e53f0ddc2b66aa3e83555282edd9e0ff80a0b813..c2aecbc592827bcd56dfa95a7a15bc5f6e54a5cf 100644
--- a/app/src/main/java/audio/funkwhale/ffa/playback/OAuth2Datasource.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/playback/OAuth2Datasource.kt
@@ -3,7 +3,11 @@ package audio.funkwhale.ffa.playback
import android.content.Context
import android.net.Uri
import audio.funkwhale.ffa.utils.OAuth
-import com.google.android.exoplayer2.upstream.*
+import com.google.android.exoplayer2.upstream.DataSource
+import com.google.android.exoplayer2.upstream.DataSpec
+import com.google.android.exoplayer2.upstream.DefaultHttpDataSource
+import com.google.android.exoplayer2.upstream.HttpDataSource
+import com.google.android.exoplayer2.upstream.TransferListener
class OAuthDatasource(
private val context: Context,
@@ -38,7 +42,7 @@ class OAuthDatasource(
class OAuth2DatasourceFactory(
private val context: Context,
- private val http: DefaultHttpDataSourceFactory,
+ private val http: DefaultHttpDataSource.Factory,
private val oauth: OAuth
) : DataSource.Factory {
diff --git a/app/src/main/java/audio/funkwhale/ffa/playback/PinService.kt b/app/src/main/java/audio/funkwhale/ffa/playback/PinService.kt
index 587c7c132bc9bc6a0ec43d078f78ed5ad46bd89e..fd91becfe571bff8f5364aa46e1ff280a7d4370d 100644
--- a/app/src/main/java/audio/funkwhale/ffa/playback/PinService.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/playback/PinService.kt
@@ -7,7 +7,13 @@ import androidx.core.net.toUri
import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.model.DownloadInfo
import audio.funkwhale.ffa.model.Track
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.AppContext
+import audio.funkwhale.ffa.utils.Event
+import audio.funkwhale.ffa.utils.EventBus
+import audio.funkwhale.ffa.utils.Request
+import audio.funkwhale.ffa.utils.RequestBus
+import audio.funkwhale.ffa.utils.Response
+import audio.funkwhale.ffa.utils.mustNormalizeUrl
import com.google.android.exoplayer2.offline.Download
import com.google.android.exoplayer2.offline.DownloadManager
import com.google.android.exoplayer2.offline.DownloadRequest
@@ -21,7 +27,7 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import org.koin.java.KoinJavaComponent
-import java.util.*
+import java.util.Collections
class PinService : DownloadService(AppContext.NOTIFICATION_DOWNLOADS) {
diff --git a/app/src/main/java/audio/funkwhale/ffa/playback/PlayerService.kt b/app/src/main/java/audio/funkwhale/ffa/playback/PlayerService.kt
index 3731c1b45628cde243e495798c296a2fe8e96bea..ab8b55663dc3045a0c0a25fd88c25643bb17daaf 100644
--- a/app/src/main/java/audio/funkwhale/ffa/playback/PlayerService.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/playback/PlayerService.kt
@@ -17,7 +17,19 @@ import androidx.core.app.NotificationManagerCompat
import androidx.media.session.MediaButtonReceiver
import audio.funkwhale.ffa.R
import audio.funkwhale.ffa.model.Track
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.Command
+import audio.funkwhale.ffa.utils.CommandBus
+import audio.funkwhale.ffa.utils.Event
+import audio.funkwhale.ffa.utils.EventBus
+import audio.funkwhale.ffa.utils.FFACache
+import audio.funkwhale.ffa.utils.HeadphonesUnpluggedReceiver
+import audio.funkwhale.ffa.utils.ProgressBus
+import audio.funkwhale.ffa.utils.Request
+import audio.funkwhale.ffa.utils.RequestBus
+import audio.funkwhale.ffa.utils.Response
+import audio.funkwhale.ffa.utils.log
+import audio.funkwhale.ffa.utils.maybeNormalizeUrl
+import audio.funkwhale.ffa.utils.onApi
import com.google.android.exoplayer2.C
import com.google.android.exoplayer2.ExoPlaybackException
import com.google.android.exoplayer2.Player
@@ -25,10 +37,15 @@ import com.google.android.exoplayer2.SimpleExoPlayer
import com.google.android.exoplayer2.source.TrackGroupArray
import com.google.android.exoplayer2.trackselection.TrackSelectionArray
import com.squareup.picasso.Picasso
-import kotlinx.coroutines.*
+import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.cancel
+import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.runBlocking
import org.koin.java.KoinJavaComponent.inject
class PlayerService : Service() {
@@ -97,15 +114,17 @@ class PlayerService : Service() {
Build.VERSION_CODES.O.onApi {
audioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN).run {
- setAudioAttributes(AudioAttributes.Builder().run {
- setUsage(AudioAttributes.USAGE_MEDIA)
- setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
+ setAudioAttributes(
+ AudioAttributes.Builder().run {
+ setUsage(AudioAttributes.USAGE_MEDIA)
+ setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
- setAcceptsDelayedFocusGain(true)
- setOnAudioFocusChangeListener(audioFocusChangeListener)
+ setAcceptsDelayedFocusGain(true)
+ setOnAudioFocusChangeListener(audioFocusChangeListener)
- build()
- })
+ build()
+ }
+ )
build()
}
@@ -268,7 +287,8 @@ class PlayerService : Service() {
{
@Suppress("DEPRECATION")
audioManager.abandonAudioFocus(audioFocusChangeListener)
- })
+ }
+ )
player.removeListener(playerEventListener)
setPlaybackState(false)
@@ -461,7 +481,7 @@ class PlayerService : Service() {
}
if (queue.get().isNotEmpty() && queue.current() == queue.get()
- .last() && radioPlayer.isActive()
+ .last() && radioPlayer.isActive()
) {
scope.launch(IO) {
if (radioPlayer.lock.tryAcquire()) {
diff --git a/app/src/main/java/audio/funkwhale/ffa/playback/QueueManager.kt b/app/src/main/java/audio/funkwhale/ffa/playback/QueueManager.kt
index f7167010389ec54ef8743a47d07f23c9bf2fe75c..211928dbd6773a77c8c73128e1b59efe75ab22ef 100644
--- a/app/src/main/java/audio/funkwhale/ffa/playback/QueueManager.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/playback/QueueManager.kt
@@ -4,7 +4,13 @@ import android.content.Context
import android.net.Uri
import audio.funkwhale.ffa.model.QueueCache
import audio.funkwhale.ffa.model.Track
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.Command
+import audio.funkwhale.ffa.utils.CommandBus
+import audio.funkwhale.ffa.utils.Event
+import audio.funkwhale.ffa.utils.EventBus
+import audio.funkwhale.ffa.utils.FFACache
+import audio.funkwhale.ffa.utils.log
+import audio.funkwhale.ffa.utils.mustNormalizeUrl
import com.github.kittinunf.fuel.gson.gsonDeserializerOf
import com.google.android.exoplayer2.source.ConcatenatingMediaSource
import com.google.android.exoplayer2.source.ProgressiveMediaSource
@@ -28,12 +34,14 @@ class QueueManager(val context: Context) {
val factory = cacheDataSourceFactoryProvider.create(context)
- dataSources.addMediaSources(metadata.map { track ->
- val url = mustNormalizeUrl(track.bestUpload()?.listen_url ?: "")
+ dataSources.addMediaSources(
+ metadata.map { track ->
+ val url = mustNormalizeUrl(track.bestUpload()?.listen_url ?: "")
- ProgressiveMediaSource.Factory(factory).setTag(track.title)
- .createMediaSource(Uri.parse(url))
- })
+ ProgressiveMediaSource.Factory(factory).setTag(track.title)
+ .createMediaSource(Uri.parse(url))
+ }
+ )
}
}
diff --git a/app/src/main/java/audio/funkwhale/ffa/playback/RadioPlayer.kt b/app/src/main/java/audio/funkwhale/ffa/playback/RadioPlayer.kt
index 8f299da634bfba28e2ffbae063f745b3fcccb477..b9f3ce458ccd01e1d82bdf1a27dd079392ee6f81 100644
--- a/app/src/main/java/audio/funkwhale/ffa/playback/RadioPlayer.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/playback/RadioPlayer.kt
@@ -6,7 +6,16 @@ import audio.funkwhale.ffa.model.Radio
import audio.funkwhale.ffa.model.Track
import audio.funkwhale.ffa.repositories.FavoritedRepository
import audio.funkwhale.ffa.repositories.Repository
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.Command
+import audio.funkwhale.ffa.utils.CommandBus
+import audio.funkwhale.ffa.utils.Event
+import audio.funkwhale.ffa.utils.EventBus
+import audio.funkwhale.ffa.utils.FFACache
+import audio.funkwhale.ffa.utils.OAuth
+import audio.funkwhale.ffa.utils.authorize
+import audio.funkwhale.ffa.utils.logError
+import audio.funkwhale.ffa.utils.mustNormalizeUrl
+import audio.funkwhale.ffa.utils.toast
import com.github.kittinunf.fuel.Fuel
import com.github.kittinunf.fuel.coroutines.awaitObjectResponseResult
import com.github.kittinunf.fuel.coroutines.awaitObjectResult
diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/FavoritesRepository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/FavoritesRepository.kt
index ca7a04ddeafc7812124e302cb70859cf7cb555c8..46cc2a23d41ce676696ff23017fd8427d01e2a78 100644
--- a/app/src/main/java/audio/funkwhale/ffa/repositories/FavoritesRepository.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/repositories/FavoritesRepository.kt
@@ -1,8 +1,19 @@
package audio.funkwhale.ffa.repositories
import android.content.Context
-import audio.funkwhale.ffa.model.*
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.model.FFAResponse
+import audio.funkwhale.ffa.model.FavoritedCache
+import audio.funkwhale.ffa.model.FavoritedResponse
+import audio.funkwhale.ffa.model.Track
+import audio.funkwhale.ffa.model.TracksCache
+import audio.funkwhale.ffa.model.TracksResponse
+import audio.funkwhale.ffa.utils.FFACache
+import audio.funkwhale.ffa.utils.OAuth
+import audio.funkwhale.ffa.utils.Settings
+import audio.funkwhale.ffa.utils.authorize
+import audio.funkwhale.ffa.utils.maybeNormalizeUrl
+import audio.funkwhale.ffa.utils.mustNormalizeUrl
+import audio.funkwhale.ffa.utils.untilNetwork
import com.github.kittinunf.fuel.Fuel
import com.github.kittinunf.fuel.coroutines.awaitByteArrayResponseResult
import com.github.kittinunf.fuel.gson.gsonDeserializerOf
diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/HttpUpstream.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/HttpUpstream.kt
index bbf71cb6db7fc744e223fef5d986ec88fb8181de..8f44802f381c13f0aca241e2802503c94b4da392 100644
--- a/app/src/main/java/audio/funkwhale/ffa/repositories/HttpUpstream.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/repositories/HttpUpstream.kt
@@ -4,7 +4,14 @@ import android.content.Context
import android.net.Uri
import android.util.Log
import audio.funkwhale.ffa.model.FFAResponse
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.utils.AppContext
+import audio.funkwhale.ffa.utils.Event
+import audio.funkwhale.ffa.utils.EventBus
+import audio.funkwhale.ffa.utils.OAuth
+import audio.funkwhale.ffa.utils.RefreshError
+import audio.funkwhale.ffa.utils.Settings
+import audio.funkwhale.ffa.utils.authorize
+import audio.funkwhale.ffa.utils.mustNormalizeUrl
import com.github.kittinunf.fuel.Fuel
import com.github.kittinunf.fuel.core.FuelError
import com.github.kittinunf.fuel.core.ResponseDeserializable
diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/PlaylistsRepository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/PlaylistsRepository.kt
index 752d60f97643ba48c414ffb34ef8c1f60144a44c..daf119a6686705441784b8b59dd40c39a9710491 100644
--- a/app/src/main/java/audio/funkwhale/ffa/repositories/PlaylistsRepository.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/repositories/PlaylistsRepository.kt
@@ -1,7 +1,11 @@
package audio.funkwhale.ffa.repositories
import android.content.Context
-import audio.funkwhale.ffa.model.*
+import audio.funkwhale.ffa.model.FFAResponse
+import audio.funkwhale.ffa.model.Playlist
+import audio.funkwhale.ffa.model.PlaylistsCache
+import audio.funkwhale.ffa.model.PlaylistsResponse
+import audio.funkwhale.ffa.model.Track
import audio.funkwhale.ffa.utils.OAuth
import audio.funkwhale.ffa.utils.Settings
import audio.funkwhale.ffa.utils.authorize
diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/Repository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/Repository.kt
index bef2f27d50588fef76b165bc24ece9303fe94140..6ff56dd7d421fff0adf44682a444ab93631da12d 100644
--- a/app/src/main/java/audio/funkwhale/ffa/repositories/Repository.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/repositories/Repository.kt
@@ -1,13 +1,17 @@
package audio.funkwhale.ffa.repositories
import android.content.Context
-import audio.funkwhale.ffa.utils.AppContext
import audio.funkwhale.ffa.model.CacheItem
+import audio.funkwhale.ffa.utils.AppContext
import audio.funkwhale.ffa.utils.FFACache
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Job
-import kotlinx.coroutines.flow.*
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.flow.flowOn
+import kotlinx.coroutines.flow.map
import java.io.BufferedReader
import kotlin.math.ceil
@@ -59,7 +63,7 @@ abstract class Repository<D : Any, C : CacheItem<D>> {
}
}.flowOn(IO)
- private fun fromNetwork(size: Int) = flow {
+ private fun fromNetwork(size: Int): Flow<Response<D>> = flow {
upstream
.fetch(size)
.map { response ->
diff --git a/app/src/main/java/audio/funkwhale/ffa/repositories/SearchRepository.kt b/app/src/main/java/audio/funkwhale/ffa/repositories/SearchRepository.kt
index cd27c73a9c31461ff78cba5581c07b98d7396387..e473c426029eee3fd6f18594144150afdb306561 100644
--- a/app/src/main/java/audio/funkwhale/ffa/repositories/SearchRepository.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/repositories/SearchRepository.kt
@@ -1,8 +1,17 @@
package audio.funkwhale.ffa.repositories
import android.content.Context
-import audio.funkwhale.ffa.model.*
-import audio.funkwhale.ffa.utils.*
+import audio.funkwhale.ffa.model.Album
+import audio.funkwhale.ffa.model.AlbumsCache
+import audio.funkwhale.ffa.model.AlbumsResponse
+import audio.funkwhale.ffa.model.Artist
+import audio.funkwhale.ffa.model.ArtistsCache
+import audio.funkwhale.ffa.model.ArtistsResponse
+import audio.funkwhale.ffa.model.Track
+import audio.funkwhale.ffa.model.TracksCache
+import audio.funkwhale.ffa.model.TracksResponse
+import audio.funkwhale.ffa.utils.OAuth
+import audio.funkwhale.ffa.utils.mustNormalizeUrl
import com.github.kittinunf.fuel.gson.gsonDeserializerOf
import com.google.android.exoplayer2.offline.DownloadManager
import com.google.android.exoplayer2.upstream.cache.Cache
diff --git a/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt b/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt
index 70d5d11c57f2c2c424c31423f9d3eed3f5c90356..0a250a528c2f6b6e6efcd3151cbd7c1d2917a6ad 100644
--- a/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt
@@ -23,7 +23,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import net.openid.appauth.ClientSecretPost
import java.text.SimpleDateFormat
-import java.util.*
+import java.util.Date
import kotlin.coroutines.CoroutineContext
inline fun <D> Flow<Repository.Response<D>>.untilNetwork(
@@ -106,4 +106,4 @@ val ISO_8601_DATE_TIME_FORMAT = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
fun Date.format(): String {
return ISO_8601_DATE_TIME_FORMAT.format(this)
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/utils/FuelResult.kt b/app/src/main/java/audio/funkwhale/ffa/utils/FuelResult.kt
index 3429eb1810eb3fe69b4c014afdca70424ffcd0e2..db74aac85f16b14dd08c172b0de4f09e5e795511 100644
--- a/app/src/main/java/audio/funkwhale/ffa/utils/FuelResult.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/utils/FuelResult.kt
@@ -19,4 +19,4 @@ data class FuelResult(val httpStatus: Int? = null, val message: String? = null)
return FuelResult()
}
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt b/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt
index c0c7c79cc59f5795e93cd8d75d5df63b3100c9c7..5164358ed4cf105b08f8859cb03b055470f025f5 100644
--- a/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt
@@ -13,7 +13,16 @@ import com.github.kittinunf.fuel.gson.jsonBody
import com.github.kittinunf.result.Result
import com.preference.PowerPreference
import kotlinx.coroutines.runBlocking
-import net.openid.appauth.*
+import net.openid.appauth.AuthState
+import net.openid.appauth.AuthorizationException
+import net.openid.appauth.AuthorizationRequest
+import net.openid.appauth.AuthorizationResponse
+import net.openid.appauth.AuthorizationService
+import net.openid.appauth.AuthorizationServiceConfiguration
+import net.openid.appauth.ClientSecretPost
+import net.openid.appauth.RegistrationRequest
+import net.openid.appauth.RegistrationResponse
+import net.openid.appauth.ResponseTypeValues
fun AuthState.save() {
PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).apply {
@@ -56,11 +65,13 @@ class OAuth(private val authorizationServiceFactory: AuthorizationServiceFactory
fun isAuthorized(context: Context): Boolean {
val state = tryState()
- return (if (state != null) {
- state.validAuthorization() || refreshAccessToken(state, context)
- } else {
- false
- }).also {
+ return (
+ if (state != null) {
+ state.validAuthorization() || refreshAccessToken(state, context)
+ } else {
+ false
+ }
+ ).also {
it.logInfo("isAuthorized()")
}
}
diff --git a/app/src/test/java/audio/funkwhale/ffa/FFATest.kt b/app/src/test/java/audio/funkwhale/ffa/FFATest.kt
index f6d87862edf6426377c2f83341afb5c69b47be41..071342ed5c0e3a4c9f5a2179b513ec22dbc3bb6e 100644
--- a/app/src/test/java/audio/funkwhale/ffa/FFATest.kt
+++ b/app/src/test/java/audio/funkwhale/ffa/FFATest.kt
@@ -58,4 +58,4 @@ class FFATest {
expectThat(picassoCache.exists()).isFalse()
}
-}
\ No newline at end of file
+}
diff --git a/app/src/test/java/audio/funkwhale/ffa/KoinTestApp.kt b/app/src/test/java/audio/funkwhale/ffa/KoinTestApp.kt
index 1acf92707c2e2712bed2d980a90b330ca211b6d6..a1dae1006cef4d251c45b9105324bdd05e2308d9 100644
--- a/app/src/test/java/audio/funkwhale/ffa/KoinTestApp.kt
+++ b/app/src/test/java/audio/funkwhale/ffa/KoinTestApp.kt
@@ -24,4 +24,4 @@ class KoinTestApp : Application() {
block()
unloadKoinModules(module)
}
-}
\ No newline at end of file
+}
diff --git a/app/src/test/java/audio/funkwhale/ffa/activities/SplashActivityTest.kt b/app/src/test/java/audio/funkwhale/ffa/activities/SplashActivityTest.kt
index 868a4cde561a181f70ae058a6a39d7024b6c2759..2864d6cef9437884c3cada80be087e8571a6f8cc 100644
--- a/app/src/test/java/audio/funkwhale/ffa/activities/SplashActivityTest.kt
+++ b/app/src/test/java/audio/funkwhale/ffa/activities/SplashActivityTest.kt
@@ -8,7 +8,10 @@ import audio.funkwhale.ffa.KoinTestApp
import audio.funkwhale.ffa.utils.OAuth
import com.preference.PowerPreference
import com.preference.Preference
-import io.mockk.*
+import io.mockk.every
+import io.mockk.mockk
+import io.mockk.mockkStatic
+import io.mockk.verify
import org.junit.After
import org.junit.Test
import org.junit.runner.RunWith