Explore subscription groups button

This commit is contained in:
Kelvin 2023-12-20 17:02:40 +01:00
parent 56248bf4b0
commit e722c0ce9a
10 changed files with 152 additions and 4 deletions

View File

@ -17,6 +17,7 @@ import com.futo.platformplayer.api.media.platforms.js.JSClient
import com.futo.platformplayer.api.media.structures.IPager import com.futo.platformplayer.api.media.structures.IPager
import com.futo.platformplayer.constructs.TaskHandler import com.futo.platformplayer.constructs.TaskHandler
import com.futo.platformplayer.engine.exceptions.PluginException import com.futo.platformplayer.engine.exceptions.PluginException
import com.futo.platformplayer.engine.exceptions.ScriptCaptchaRequiredException
import com.futo.platformplayer.exceptions.ChannelException import com.futo.platformplayer.exceptions.ChannelException
import com.futo.platformplayer.exceptions.RateLimitException import com.futo.platformplayer.exceptions.RateLimitException
import com.futo.platformplayer.logging.Logger import com.futo.platformplayer.logging.Logger

View File

@ -2,12 +2,14 @@ package com.futo.platformplayer.views.subscriptions
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import android.view.View
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.lifecycle.findViewTreeLifecycleOwner import androidx.lifecycle.findViewTreeLifecycleOwner
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.futo.platformplayer.R import com.futo.platformplayer.R
import com.futo.platformplayer.Settings import com.futo.platformplayer.Settings
import com.futo.platformplayer.UIDialogs
import com.futo.platformplayer.api.media.models.channels.SerializedChannel import com.futo.platformplayer.api.media.models.channels.SerializedChannel
import com.futo.platformplayer.constructs.Event1 import com.futo.platformplayer.constructs.Event1
import com.futo.platformplayer.models.Subscription import com.futo.platformplayer.models.Subscription
@ -24,7 +26,8 @@ import kotlinx.coroutines.launch
class SubscriptionBar : LinearLayout { class SubscriptionBar : LinearLayout {
private var _adapterView: AnyAdapterView<Subscription, SubscriptionBarViewHolder>? = null; private var _adapterView: AnyAdapterView<Subscription, SubscriptionBarViewHolder>? = null;
private var _subGroups: AnyAdapterView<SubscriptionGroup, SubscriptionGroupBarViewHolder> private var _subGroups: AnyAdapterView<SubscriptionGroup, SubscriptionGroupBarViewHolder>;
private var _subGroupsExplore: SubscriptionExploreButton;
private val _tagsContainer: LinearLayout; private val _tagsContainer: LinearLayout;
private val _groups: ArrayList<SubscriptionGroup>; private val _groups: ArrayList<SubscriptionGroup>;
@ -64,7 +67,25 @@ class SubscriptionBar : LinearLayout {
onHoldGroup.emit(g); onHoldGroup.emit(g);
} }
} }
_subGroupsExplore = findViewById(R.id.subgroup_explore);
_tagsContainer = findViewById(R.id.container_tags); _tagsContainer = findViewById(R.id.container_tags);
_subGroupsExplore.onClick.subscribe {
UIDialogs.showDialog(context, R.drawable.ic_subscriptions, "Subscription Groups",
"Subscription groups are an easy way to navigate your subscriptions.\n\nDefine your own subsets, and in the near future share them with others.", null, 0,
UIDialogs.Action("Hide Bar", {
Settings.instance.subscriptions.showSubscriptionGroups = false;
Settings.instance.save();
reloadGroups();
UIDialogs.showDialogOk(context, R.drawable.ic_quiz, "Subscription groups can be re-enabled in settings")
}),
UIDialogs.Action("Create", {
onToggleGroup.emit(SubscriptionGroup.Add()); //Shortcut..
}, UIDialogs.ActionStyle.PRIMARY))
};
updateExplore();
} }
private fun groupClicked(g: SubscriptionGroup) { private fun groupClicked(g: SubscriptionGroup) {
@ -100,6 +121,8 @@ class SubscriptionBar : LinearLayout {
_groups.clear(); _groups.clear();
_groups.addAll(results); _groups.addAll(results);
_subGroups.notifyContentChanged(); _subGroups.notifyContentChanged();
updateExplore();
} }
private fun getGroups(): List<SubscriptionGroup> { private fun getGroups(): List<SubscriptionGroup> {
return if(Settings.instance.subscriptions.showSubscriptionGroups) return if(Settings.instance.subscriptions.showSubscriptionGroups)
@ -110,6 +133,18 @@ class SubscriptionBar : LinearLayout {
else listOf(); else listOf();
} }
fun updateExplore() {
val show = Settings.instance.subscriptions.showSubscriptionGroups &&
_groups.all { it is SubscriptionGroup.Add };
if(show) {
_subGroupsExplore.visibility = View.VISIBLE;
_subGroups.view.visibility = View.GONE;
}
else {
_subGroupsExplore.visibility = View.GONE;
_subGroups.view.visibility = View.VISIBLE;
}
}
fun setToggles(vararg buttons: Toggle) { fun setToggles(vararg buttons: Toggle) {
_tagsContainer.removeAllViews(); _tagsContainer.removeAllViews();

View File

@ -0,0 +1,45 @@
package com.futo.platformplayer.views.subscriptions
import android.content.Context
import android.graphics.drawable.Animatable
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import com.futo.platformplayer.*
import com.futo.platformplayer.api.media.models.channels.IPlatformChannel
import com.futo.platformplayer.constructs.Event0
import com.futo.platformplayer.constructs.Event1
import com.futo.platformplayer.constructs.TaskHandler
import com.futo.platformplayer.models.Subscription
import com.futo.platformplayer.states.StateApp
import com.futo.platformplayer.states.StatePlatform
import com.futo.platformplayer.states.StateSubscriptions
import com.google.android.material.imageview.ShapeableImageView
import com.google.android.material.shape.CornerFamily
import com.google.android.material.shape.ShapeAppearanceModel
class SubscriptionExploreButton : ConstraintLayout {
val onClick = Event0();
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
inflate(context, R.layout.view_subscription_group_bar_explore, this);
val dp10 = 10.dp(resources);
findViewById<ShapeableImageView>(R.id.image)
.apply {
adjustViewBounds = true
scaleType = ImageView.ScaleType.CENTER_CROP;
shapeAppearanceModel = ShapeAppearanceModel.builder().setAllCorners(CornerFamily.ROUNDED, dp10.toFloat()).build()
}
findViewById<ConstraintLayout>(R.id.root).setOnClickListener {
onClick.emit();
}
}
}

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="10dp"
android:topRightRadius="10dp"
android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp" />
<stroke
android:width="1dp"
android:color="#6F6F6F" />
</shape>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="10dp"
android:topRightRadius="10dp"
android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp" />
<stroke
android:width="1dp"
android:color="#6F6F6F" />
<solid android:color="#99000000" />
</shape>

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -27,7 +27,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/failed_to_retrieve_data_are_you_connected" android:text="@string/failed_to_retrieve_data_are_you_connected"
android:textSize="14dp" android:textSize="15dp"
android:textColor="@color/white" android:textColor="@color/white"
android:fontFamily="@font/inter_regular" android:fontFamily="@font/inter_regular"
android:textAlignment="center" android:textAlignment="center"
@ -43,7 +43,7 @@
android:textAlignment="center" android:textAlignment="center"
android:layout_marginStart="30dp" android:layout_marginStart="30dp"
android:layout_marginEnd="30dp" android:layout_marginEnd="30dp"
android:textSize="9dp" android:textSize="11dp"
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
<TextView <TextView
android:id="@+id/dialog_text_code" android:id="@+id/dialog_text_code"

View File

@ -28,4 +28,10 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" /> android:orientation="horizontal" />
<com.futo.platformplayer.views.subscriptions.SubscriptionExploreButton
android:id="@+id/subgroup_explore"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
</LinearLayout> </LinearLayout>

View File

@ -0,0 +1,36 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="54dp"
android:orientation="vertical"
android:gravity="center_horizontal"
android:padding="1dp"
android:clickable="true"
android:id="@+id/root">
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/sub_group_demo" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_button_explore_inner"
android:gravity="center">
<TextView
android:id="@+id/text_sub_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:maxLines="2"
android:ellipsize="end"
android:fontFamily="@font/inter_medium"
android:textSize="13dp"
android:textAlignment="center"
android:text="Explore Subscription Groups" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -569,7 +569,7 @@
<string name="playlist_copied_as_local_playlist">Playlist copied as local playlist</string> <string name="playlist_copied_as_local_playlist">Playlist copied as local playlist</string>
<string name="are_you_sure_you_want_to_delete_the_downloaded_videos">Are you sure you want to delete the downloaded videos?</string> <string name="are_you_sure_you_want_to_delete_the_downloaded_videos">Are you sure you want to delete the downloaded videos?</string>
<string name="create_new_playlist">Create new playlist</string> <string name="create_new_playlist">Create new playlist</string>
<string name="create_new_subgroup">Create new subscription group</string> <string name="create_new_subgroup">Create new group</string>
<string name="expected_media_content_found">Expected media content, found</string> <string name="expected_media_content_found">Expected media content, found</string>
<string name="failed_to_load_post">Failed to load post.</string> <string name="failed_to_load_post">Failed to load post.</string>
<string name="replies">replies</string> <string name="replies">replies</string>