diff --git a/app/src/main/java/com/futo/platformplayer/UISlideOverlays.kt b/app/src/main/java/com/futo/platformplayer/UISlideOverlays.kt index 30ae14d7..11d28b37 100644 --- a/app/src/main/java/com/futo/platformplayer/UISlideOverlays.kt +++ b/app/src/main/java/com/futo/platformplayer/UISlideOverlays.kt @@ -6,6 +6,7 @@ import android.content.Context import android.content.Intent import android.view.View import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView import com.futo.platformplayer.activities.MainActivity import com.futo.platformplayer.activities.SettingsActivity import com.futo.platformplayer.api.http.ManagedHttpClient @@ -37,11 +38,17 @@ import com.futo.platformplayer.states.StateMeta import com.futo.platformplayer.states.StatePlatform import com.futo.platformplayer.states.StatePlayer import com.futo.platformplayer.states.StatePlaylists +import com.futo.platformplayer.states.StateSubscriptionGroups +import com.futo.platformplayer.states.StateSubscriptions +import com.futo.platformplayer.views.AnyAdapterView +import com.futo.platformplayer.views.AnyAdapterView.Companion.asAny import com.futo.platformplayer.views.LoaderView +import com.futo.platformplayer.views.adapters.viewholders.SubscriptionGroupBarViewHolder import com.futo.platformplayer.views.overlays.slideup.SlideUpMenuFilters import com.futo.platformplayer.views.overlays.slideup.SlideUpMenuGroup import com.futo.platformplayer.views.overlays.slideup.SlideUpMenuItem import com.futo.platformplayer.views.overlays.slideup.SlideUpMenuOverlay +import com.futo.platformplayer.views.overlays.slideup.SlideUpMenuRecycler import com.futo.platformplayer.views.overlays.slideup.SlideUpMenuTextInput import com.futo.platformplayer.views.pills.RoundButton import com.futo.platformplayer.views.pills.RoundButtonGroup @@ -87,7 +94,37 @@ class UISlideOverlays { SlideUpMenuItem(container.context, R.drawable.ic_notifications, "Notifications", "", "notifications", { subscription.doNotifications = menu?.selectOption(null, "notifications", true, true) ?: subscription.doNotifications; }, false), + if(StateSubscriptionGroups.instance.getSubscriptionGroups().isNotEmpty()) + SlideUpMenuGroup(container.context, "Subscription Groups", + "You can select which groups this subscription is part of.", + -1, listOf()) else null, + if(StateSubscriptionGroups.instance.getSubscriptionGroups().isNotEmpty()) + SlideUpMenuRecycler(container.context, "as") { + val groups = ArrayList(StateSubscriptionGroups.instance.getSubscriptionGroups() + .map { SubscriptionGroup.Selectable(it, it.urls.contains(subscription.channel.url)) } + .sortedBy { !it.selected }); + var adapter: AnyAdapterView? = null; + adapter = it.asAny(groups, RecyclerView.HORIZONTAL) { + it.onClick.subscribe { + if(it is SubscriptionGroup.Selectable) { + val actualGroup = StateSubscriptionGroups.instance.getSubscriptionGroup(it.id) + ?: return@subscribe; + groups.clear(); + if(it.selected) + actualGroup.urls.remove(subscription.channel.url); + else + actualGroup.urls.add(subscription.channel.url); + StateSubscriptionGroups.instance.updateSubscriptionGroup(actualGroup); + groups.addAll(StateSubscriptionGroups.instance.getSubscriptionGroups() + .map { SubscriptionGroup.Selectable(it, it.urls.contains(subscription.channel.url)) } + .sortedBy { !it.selected }); + adapter?.notifyContentChanged(); + } + } + }; + return@SlideUpMenuRecycler adapter; + } else null, SlideUpMenuGroup(container.context, "Fetch Settings", "Depending on the platform you might not need to enable a type for it to be available.", -1, listOf()), diff --git a/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuRecycler.kt b/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuRecycler.kt new file mode 100644 index 00000000..ba63d314 --- /dev/null +++ b/app/src/main/java/com/futo/platformplayer/views/overlays/slideup/SlideUpMenuRecycler.kt @@ -0,0 +1,38 @@ +package com.futo.platformplayer.views.overlays.slideup + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.widget.LinearLayout +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.futo.platformplayer.R +import com.futo.platformplayer.views.AnyAdapterView +import com.futo.platformplayer.views.AnyAdapterView.Companion.asAny +import com.futo.platformplayer.views.adapters.AnyAdapter + +class SlideUpMenuRecycler> : LinearLayout { + + private lateinit var recyclerView: RecyclerView; + private val adapter: AnyAdapterView?; + + var groupTag: Any? = null; + + constructor(context: Context, attrs: AttributeSet? = null) : super(context, attrs) { + init(); + adapter = null; + } + + constructor(context: Context, tag: Any, creation: (RecyclerView)->AnyAdapterView) : super(context){ + init(); + groupTag = tag; + adapter = creation(recyclerView); + } + + private fun init(){ + LayoutInflater.from(context).inflate(R.layout.overlay_slide_up_menu_recycler, this, true); + + recyclerView = findViewById(R.id.slide_up_menu_recycler); + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/overlay_slide_up_menu_recycler.xml b/app/src/main/res/layout/overlay_slide_up_menu_recycler.xml new file mode 100644 index 00000000..ef420655 --- /dev/null +++ b/app/src/main/res/layout/overlay_slide_up_menu_recycler.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file