From aeaaace3a499631f4edaa14e86c12410392c424c Mon Sep 17 00:00:00 2001 From: Kelvin <kelvin@futo.org> Date: Thu, 2 Nov 2023 23:42:51 +0100 Subject: [PATCH] Subscription settings from creators tab --- .../mainactivity/main/CreatorsFragment.kt | 6 +++++ .../views/adapters/SubscriptionAdapter.kt | 5 ++++ .../views/adapters/SubscriptionViewHolder.kt | 10 ++++++++ app/src/main/res/layout/fragment_creators.xml | 7 ++++++ app/src/main/res/layout/list_subscription.xml | 25 +++++++++++++------ 5 files changed, 46 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/CreatorsFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/CreatorsFragment.kt index 421ae22a..88844108 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/CreatorsFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/CreatorsFragment.kt @@ -6,10 +6,12 @@ import android.view.View import android.view.ViewGroup import android.widget.AdapterView import android.widget.ArrayAdapter +import android.widget.FrameLayout import android.widget.Spinner import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.futo.platformplayer.R +import com.futo.platformplayer.UISlideOverlays import com.futo.platformplayer.views.adapters.SubscriptionAdapter class CreatorsFragment : MainFragment() { @@ -18,13 +20,16 @@ class CreatorsFragment : MainFragment() { override val hasBottomBar: Boolean get() = true; private var _spinnerSortBy: Spinner? = null; + private var _overlayContainer: FrameLayout? = null; override fun onCreateMainView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { val view = inflater.inflate(R.layout.fragment_creators, container, false); val adapter = SubscriptionAdapter(inflater, getString(R.string.confirm_delete_subscription)); adapter.onClick.subscribe { platformUser -> navigate<ChannelFragment>(platformUser) }; + adapter.onSettings.subscribe { sub -> _overlayContainer?.let { UISlideOverlays.showSubscriptionOptionsOverlay(sub, it) } } + _overlayContainer = view.findViewById(R.id.overlay_container); val spinnerSortBy: Spinner = view.findViewById(R.id.spinner_sortby); spinnerSortBy.adapter = ArrayAdapter(view.context, R.layout.spinner_item_simple, resources.getStringArray(R.array.subscriptions_sortby_array)).also { it.setDropDownViewResource(R.layout.spinner_dropdownitem_simple); @@ -48,6 +53,7 @@ class CreatorsFragment : MainFragment() { override fun onDestroyMainView() { super.onDestroyMainView(); _spinnerSortBy = null; + _overlayContainer = null; } companion object { diff --git a/app/src/main/java/com/futo/platformplayer/views/adapters/SubscriptionAdapter.kt b/app/src/main/java/com/futo/platformplayer/views/adapters/SubscriptionAdapter.kt index 8b3c0491..11a4b01d 100644 --- a/app/src/main/java/com/futo/platformplayer/views/adapters/SubscriptionAdapter.kt +++ b/app/src/main/java/com/futo/platformplayer/views/adapters/SubscriptionAdapter.kt @@ -14,6 +14,7 @@ class SubscriptionAdapter : RecyclerView.Adapter<SubscriptionViewHolder> { private val _confirmationMessage: String; var onClick = Event1<Subscription>(); + var onSettings = Event1<Subscription>(); var sortBy: Int = 3 set(value) { field = value; @@ -33,12 +34,16 @@ class SubscriptionAdapter : RecyclerView.Adapter<SubscriptionViewHolder> { override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): SubscriptionViewHolder { val holder = SubscriptionViewHolder(viewGroup); holder.onClick.subscribe(onClick::emit); + holder.onSettings.subscribe(onSettings::emit); holder.onTrash.subscribe { val sub = holder.subscription ?: return@subscribe; UIDialogs.showConfirmationDialog(_inflater.context, _confirmationMessage, { StateSubscriptions.instance.removeSubscription(sub.channel.url); }); }; + holder.onSettings.subscribe { + onSettings.emit(it); + }; return holder; } diff --git a/app/src/main/java/com/futo/platformplayer/views/adapters/SubscriptionViewHolder.kt b/app/src/main/java/com/futo/platformplayer/views/adapters/SubscriptionViewHolder.kt index bda9301b..80f10782 100644 --- a/app/src/main/java/com/futo/platformplayer/views/adapters/SubscriptionViewHolder.kt +++ b/app/src/main/java/com/futo/platformplayer/views/adapters/SubscriptionViewHolder.kt @@ -10,6 +10,7 @@ import com.futo.platformplayer.logging.Logger import com.futo.platformplayer.polycentric.PolycentricCache import com.futo.platformplayer.R import com.futo.platformplayer.Settings +import com.futo.platformplayer.UIDialogs import com.futo.platformplayer.states.StateApp import com.futo.platformplayer.api.media.PlatformID import com.futo.platformplayer.models.Subscription @@ -18,6 +19,7 @@ import com.futo.platformplayer.constructs.Event1 import com.futo.platformplayer.constructs.TaskHandler import com.futo.platformplayer.dp import com.futo.platformplayer.selectBestImage +import com.futo.platformplayer.states.StateSubscriptions import com.futo.platformplayer.toHumanBytesSpeed import com.futo.platformplayer.toHumanTimeIndicator import com.futo.platformplayer.views.others.CreatorThumbnail @@ -29,6 +31,7 @@ class SubscriptionViewHolder : ViewHolder { private val _textName: TextView; private val _creatorThumbnail: CreatorThumbnail; private val _buttonTrash: ImageButton; + private val _buttonSettings: ImageButton; private val _platformIndicator : PlatformIndicator; private val _textMeta: TextView; @@ -45,6 +48,7 @@ class SubscriptionViewHolder : ViewHolder { var onClick = Event1<Subscription>(); var onTrash = Event0(); + var onSettings = Event1<Subscription>(); constructor(viewGroup: ViewGroup) : super(LayoutInflater.from(viewGroup.context).inflate(R.layout.list_subscription, viewGroup, false)) { _layoutSubscription = itemView.findViewById(R.id.layout_subscription); @@ -52,6 +56,7 @@ class SubscriptionViewHolder : ViewHolder { _textMeta = itemView.findViewById(R.id.text_meta); _creatorThumbnail = itemView.findViewById(R.id.creator_thumbnail); _buttonTrash = itemView.findViewById(R.id.button_trash); + _buttonSettings = itemView.findViewById(R.id.button_settings); _platformIndicator = itemView.findViewById(R.id.platform); _layoutSubscription.setOnClickListener { @@ -64,6 +69,11 @@ class SubscriptionViewHolder : ViewHolder { _buttonTrash.setOnClickListener { onTrash.emit(); }; + _buttonSettings.setOnClickListener { + subscription?.let { + onSettings.emit(it); + }; + } } fun bind(sub: Subscription) { diff --git a/app/src/main/res/layout/fragment_creators.xml b/app/src/main/res/layout/fragment_creators.xml index 83110987..f8bc6aa0 100644 --- a/app/src/main/res/layout/fragment_creators.xml +++ b/app/src/main/res/layout/fragment_creators.xml @@ -55,4 +55,11 @@ android:clipToPadding="false" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> + + <FrameLayout + android:id="@+id/overlay_container" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:elevation="100dp" + android:visibility="gone" /> </androidx.coordinatorlayout.widget.CoordinatorLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/list_subscription.xml b/app/src/main/res/layout/list_subscription.xml index cb373135..6abd51c7 100644 --- a/app/src/main/res/layout/list_subscription.xml +++ b/app/src/main/res/layout/list_subscription.xml @@ -56,13 +56,24 @@ </LinearLayout> </LinearLayout> + <ImageButton + android:id="@+id/button_settings" + android:layout_width="50dp" + android:layout_height="40dp" + app:srcCompat="@drawable/ic_settings" + android:scaleType="fitCenter" + android:paddingStart="5dp" + android:paddingTop="5dp" + android:paddingBottom="5dp" + android:paddingEnd="0dp" /> <ImageButton android:id="@+id/button_trash" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - app:srcCompat="@drawable/ic_trash_18dp" - android:paddingStart="20dp" - android:paddingTop="10dp" - android:paddingBottom="10dp" - android:paddingEnd="20dp" /> + android:layout_width="60dp" + android:layout_height="40dp" + app:srcCompat="@drawable/ic_trash" + android:scaleType="fitCenter" + android:paddingStart="5dp" + android:paddingTop="5dp" + android:paddingBottom="5dp" + android:paddingEnd="5dp" /> </LinearLayout> \ No newline at end of file -- GitLab