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