mirror of
https://github.com/apognu/otter
synced 2025-02-20 04:20:35 +01:00
#52: implemented UI and functionnal filtering for all, me and subscribed. Funkwhale still does not seem to respect that.
This commit is contained in:
parent
1e73ef6ee4
commit
ce8d956cee
@ -55,6 +55,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
private val favoriteRepository = FavoritesRepository(this)
|
private val favoriteRepository = FavoritesRepository(this)
|
||||||
private val favoritedRepository = FavoritedRepository(this)
|
private val favoritedRepository = FavoritedRepository(this)
|
||||||
|
private var menu: Menu? = null
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
@ -146,10 +147,18 @@ class MainActivity : AppCompatActivity() {
|
|||||||
super.onBackPressed()
|
super.onBackPressed()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
|
||||||
|
this.menu = menu
|
||||||
|
|
||||||
|
return super.onPrepareOptionsMenu(menu)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
|
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
|
||||||
menuInflater.inflate(R.menu.toolbar, menu)
|
menuInflater.inflate(R.menu.toolbar, menu)
|
||||||
|
|
||||||
menu?.findItem(R.id.nav_only_my_music)?.isChecked = Settings.getScope() == "me"
|
menu?.findItem(R.id.nav_all_music)?.isChecked = Settings.getScopes().contains("all")
|
||||||
|
menu?.findItem(R.id.nav_my_music)?.isChecked = Settings.getScopes().contains("me")
|
||||||
|
menu?.findItem(R.id.nav_followed)?.isChecked = Settings.getScopes().contains("subscribed")
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@ -170,15 +179,48 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
R.id.nav_queue -> launchDialog(QueueFragment())
|
R.id.nav_queue -> launchDialog(QueueFragment())
|
||||||
R.id.nav_search -> startActivity(Intent(this, SearchActivity::class.java))
|
R.id.nav_search -> startActivity(Intent(this, SearchActivity::class.java))
|
||||||
R.id.nav_only_my_music -> {
|
R.id.nav_all_music, R.id.nav_my_music, R.id.nav_followed -> {
|
||||||
item.isChecked = !item.isChecked
|
menu?.let { menu ->
|
||||||
|
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW)
|
||||||
|
item.actionView = View(this)
|
||||||
|
item.setOnActionExpandListener(object : MenuItem.OnActionExpandListener {
|
||||||
|
override fun onMenuItemActionExpand(item: MenuItem?) = false
|
||||||
|
override fun onMenuItemActionCollapse(item: MenuItem?) = false
|
||||||
|
})
|
||||||
|
|
||||||
when (item.isChecked) {
|
item.isChecked = !item.isChecked
|
||||||
true -> PowerPreference.getDefaultFile().set("scope", "me")
|
|
||||||
false -> PowerPreference.getDefaultFile().set("scope", "all")
|
val scopes = Settings.getScopes().toMutableSet()
|
||||||
|
|
||||||
|
val new = when (item.itemId) {
|
||||||
|
R.id.nav_my_music -> "me"
|
||||||
|
R.id.nav_followed -> "subscribed"
|
||||||
|
|
||||||
|
else -> {
|
||||||
|
menu.findItem(R.id.nav_my_music).isChecked = false
|
||||||
|
menu.findItem(R.id.nav_followed).isChecked = false
|
||||||
|
|
||||||
|
PowerPreference.getDefaultFile().set("scope", "all")
|
||||||
|
EventBus.send(Event.ListingsChanged)
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
menu.findItem(R.id.nav_all_music).isChecked = false
|
||||||
|
|
||||||
|
scopes.remove("all")
|
||||||
|
|
||||||
|
when (item.isChecked) {
|
||||||
|
true -> scopes.add(new)
|
||||||
|
false -> scopes.remove(new)
|
||||||
|
}
|
||||||
|
|
||||||
|
PowerPreference.getDefaultFile().set("scope", scopes.joinToString(","))
|
||||||
|
EventBus.send(Event.ListingsChanged)
|
||||||
|
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
EventBus.send(Event.ListingsChanged)
|
|
||||||
}
|
}
|
||||||
R.id.nav_downloads -> startActivity(Intent(this, DownloadsActivity::class.java))
|
R.id.nav_downloads -> startActivity(Intent(this, DownloadsActivity::class.java))
|
||||||
R.id.settings -> startActivityForResult(Intent(this, SettingsActivity::class.java), 0)
|
R.id.settings -> startActivityForResult(Intent(this, SettingsActivity::class.java), 0)
|
||||||
|
@ -33,7 +33,7 @@ class HttpUpstream<D : Any, R : OtterResponse<D>>(val behavior: Behavior, privat
|
|||||||
.buildUpon()
|
.buildUpon()
|
||||||
.appendQueryParameter("page_size", AppContext.PAGE_SIZE.toString())
|
.appendQueryParameter("page_size", AppContext.PAGE_SIZE.toString())
|
||||||
.appendQueryParameter("page", page.toString())
|
.appendQueryParameter("page", page.toString())
|
||||||
.appendQueryParameter("scope", Settings.getScope())
|
.appendQueryParameter("scope", Settings.getScopes().joinToString(","))
|
||||||
.build()
|
.build()
|
||||||
.toString()
|
.toString()
|
||||||
|
|
||||||
|
@ -75,5 +75,6 @@ object Settings {
|
|||||||
fun getAccessToken(): String = PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).getString("access_token", "")
|
fun getAccessToken(): String = PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).getString("access_token", "")
|
||||||
fun isAnonymous() = PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).getBoolean("anonymous", false)
|
fun isAnonymous() = PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).getBoolean("anonymous", false)
|
||||||
fun areExperimentsEnabled() = PowerPreference.getDefaultFile().getBoolean("experiments", false)
|
fun areExperimentsEnabled() = PowerPreference.getDefaultFile().getBoolean("experiments", false)
|
||||||
fun getScope() = PowerPreference.getDefaultFile().getString("scope", "all")
|
|
||||||
|
fun getScopes() = PowerPreference.getDefaultFile().getString("scope", "all").split(",")
|
||||||
}
|
}
|
||||||
|
@ -8,11 +8,29 @@
|
|||||||
android:title="@string/toolbar_search"
|
android:title="@string/toolbar_search"
|
||||||
app:showAsAction="ifRoom" />
|
app:showAsAction="ifRoom" />
|
||||||
|
|
||||||
<item
|
<item android:title="@string/filters">
|
||||||
android:id="@+id/nav_only_my_music"
|
<menu>
|
||||||
android:checkable="true"
|
<group android:checkableBehavior="all">
|
||||||
android:title="@string/only_my_music"
|
<item
|
||||||
app:showAsAction="never" />
|
android:id="@+id/nav_all_music"
|
||||||
|
android:checkable="true"
|
||||||
|
android:title="@string/fiters_all"
|
||||||
|
app:showAsAction="never" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/nav_my_music"
|
||||||
|
android:checkable="true"
|
||||||
|
android:title="@string/filters_my_music"
|
||||||
|
app:showAsAction="never" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/nav_followed"
|
||||||
|
android:checkable="true"
|
||||||
|
android:title="@string/filters_followed"
|
||||||
|
app:showAsAction="never" />
|
||||||
|
</group>
|
||||||
|
</menu>
|
||||||
|
</item>
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/nav_downloads"
|
android:id="@+id/nav_downloads"
|
||||||
|
@ -14,11 +14,29 @@
|
|||||||
android:title="@string/toolbar_search"
|
android:title="@string/toolbar_search"
|
||||||
app:showAsAction="ifRoom" />
|
app:showAsAction="ifRoom" />
|
||||||
|
|
||||||
<item
|
<item android:title="@string/filters">
|
||||||
android:id="@+id/nav_only_my_music"
|
<menu>
|
||||||
android:checkable="true"
|
<group android:checkableBehavior="all">
|
||||||
android:title="@string/only_my_music"
|
<item
|
||||||
app:showAsAction="never" />
|
android:id="@+id/nav_all_music"
|
||||||
|
android:checkable="true"
|
||||||
|
android:title="@string/fiters_all"
|
||||||
|
app:showAsAction="never" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/nav_my_music"
|
||||||
|
android:checkable="true"
|
||||||
|
android:title="@string/filters_my_music"
|
||||||
|
app:showAsAction="never" />
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/nav_followed"
|
||||||
|
android:checkable="true"
|
||||||
|
android:title="@string/filters_followed"
|
||||||
|
app:showAsAction="never" />
|
||||||
|
</group>
|
||||||
|
</menu>
|
||||||
|
</item>
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/nav_downloads"
|
android:id="@+id/nav_downloads"
|
||||||
|
@ -113,7 +113,10 @@
|
|||||||
<item quantity="one">%1$d piste • %2$s</item>
|
<item quantity="one">%1$d piste • %2$s</item>
|
||||||
<item quantity="other">%1$d pistes • %2$s</item>
|
<item quantity="other">%1$d pistes • %2$s</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="only_my_music">Ma musique seulement</string>
|
<string name="filters">Filtres</string>
|
||||||
|
<string name="fiters_all">Toute la musique</string>
|
||||||
|
<string name="filters_my_music">Ma musique</string>
|
||||||
|
<string name="filters_followed">Contenu suivi</string>
|
||||||
<plurals name="downloads_description">
|
<plurals name="downloads_description">
|
||||||
<item quantity="one">Téléchargement de %1$d piste</item>
|
<item quantity="one">Téléchargement de %1$d piste</item>
|
||||||
<item quantity="other">Téléchargement de %1$d pistes</item>
|
<item quantity="other">Téléchargement de %1$d pistes</item>
|
||||||
|
@ -114,7 +114,10 @@
|
|||||||
<item quantity="one">%1$d track • %2$s"</item>
|
<item quantity="one">%1$d track • %2$s"</item>
|
||||||
<item quantity="other">%1$d tracks • %2$s"</item>
|
<item quantity="other">%1$d tracks • %2$s"</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
<string name="only_my_music">Only my music</string>
|
<string name="filters">Filters</string>
|
||||||
|
<string name="fiters_all">All music</string>
|
||||||
|
<string name="filters_my_music">My music</string>
|
||||||
|
<string name="filters_followed">Followed content</string>
|
||||||
<plurals name="downloads_description">
|
<plurals name="downloads_description">
|
||||||
<item quantity="one">Downloading %1$d track</item>
|
<item quantity="one">Downloading %1$d track</item>
|
||||||
<item quantity="other">Downloading %1$d tracks</item>
|
<item quantity="other">Downloading %1$d tracks</item>
|
||||||
|
@ -69,7 +69,13 @@
|
|||||||
<item name="android:drawableTint" tools:targetApi="m">@android:color/white</item>
|
<item name="android:drawableTint" tools:targetApi="m">@android:color/white</item>
|
||||||
<item name="android:tint">@android:color/white</item>
|
<item name="android:tint">@android:color/white</item>
|
||||||
|
|
||||||
<item name="android:popupTheme">@style/ThemeOverlay.AppCompat.DayNight</item>
|
<item name="actionBarPopupTheme">@style/AppTheme.PopupMenu</item>
|
||||||
|
<item name="popupTheme">@style/AppTheme.PopupMenu</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="AppTheme.PopupMenu" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
|
||||||
|
<item name="android:drawableTint" tools:targetApi="m">@color/blackWhileLight</item>
|
||||||
|
<item name="android:tint">@color/blackWhileLight</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="AppTheme.FloatingBottomSheet" parent="Theme.MaterialComponents.DayNight.BottomSheetDialog">
|
<style name="AppTheme.FloatingBottomSheet" parent="Theme.MaterialComponents.DayNight.BottomSheetDialog">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user