From 20862a27c8e956d968c86a5239b5d4940b7801ca Mon Sep 17 00:00:00 2001 From: Kelvin Date: Wed, 20 Dec 2023 18:08:40 +0100 Subject: [PATCH] Search creator overlay, Fix crash Add topbar --- .../mainactivity/main/SourcesFragment.kt | 4 +++- .../main/SubscriptionGroupFragment.kt | 6 +++++ .../main/SubscriptionGroupListFragment.kt | 4 +++- .../views/overlays/CreatorSelectOverlay.kt | 24 +++++++++++++++++-- .../views/overlays/OverlayTopbar.kt | 22 +++++++++++++++++ .../views/subscriptions/SubscriptionBar.kt | 2 +- .../res/layout/overlay_creator_select.xml | 12 ++++++++-- app/src/main/res/layout/overlay_topbar.xml | 4 ++++ 8 files changed, 71 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SourcesFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SourcesFragment.kt index bfe49af6..c3d1230b 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SourcesFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SourcesFragment.kt @@ -39,10 +39,12 @@ class SourcesFragment : MainFragment() { override fun onShownWithView(parameter: Any?, isBack: Boolean) { super.onShownWithView(parameter, isBack) - if(topBar is AddTopBarFragment) + if(topBar is AddTopBarFragment) { + (topBar as AddTopBarFragment).onAdd.clear(); (topBar as AddTopBarFragment).onAdd.subscribe { startActivity(Intent(requireContext(), AddSourceOptionsActivity::class.java)); }; + } _view?.reloadSources(); } diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionGroupFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionGroupFragment.kt index 52dc7e57..ac7613b5 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionGroupFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionGroupFragment.kt @@ -188,6 +188,12 @@ class SubscriptionGroupFragment : MainFragment() { filterCreators(); } + _topbar.setButtons( + Pair(R.drawable.ic_share) { + UIDialogs.toast(context, "Coming soon"); + } + ); + setGroup(null); } diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionGroupListFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionGroupListFragment.kt index 52ed90dd..71402e60 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionGroupListFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/SubscriptionGroupListFragment.kt @@ -107,12 +107,14 @@ class SubscriptionGroupListFragment : MainFragment() { updateGroups(); } - if(topBar is AddTopBarFragment) + if(topBar is AddTopBarFragment) { + (topBar as AddTopBarFragment).onAdd.clear(); (topBar as AddTopBarFragment).onAdd.subscribe { _overlay?.let { UISlideOverlays.showCreateSubscriptionGroup(it) } }; + } } private fun updateGroups() { diff --git a/app/src/main/java/com/futo/platformplayer/views/overlays/CreatorSelectOverlay.kt b/app/src/main/java/com/futo/platformplayer/views/overlays/CreatorSelectOverlay.kt index 1703442f..04142327 100644 --- a/app/src/main/java/com/futo/platformplayer/views/overlays/CreatorSelectOverlay.kt +++ b/app/src/main/java/com/futo/platformplayer/views/overlays/CreatorSelectOverlay.kt @@ -33,6 +33,7 @@ import com.futo.platformplayer.states.StateApp 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.SearchView import com.futo.platformplayer.views.adapters.AnyAdapter import com.futo.platformplayer.views.adapters.viewholders.CreatorBarViewHolder import com.futo.platformplayer.views.adapters.viewholders.SelectableCreatorBarViewHolder @@ -47,9 +48,12 @@ import java.io.File class CreatorSelectOverlay: ConstraintLayout { private val _buttonSelect: Button; private val _topbar: OverlayTopbar; + + private val _searchBar: SearchView; private val _recyclerCreators: AnyAdapterView; private val _creators: ArrayList = arrayListOf(); + private val _creatorsFiltered: ArrayList = arrayListOf(); private var _selected: MutableList = mutableListOf(); @@ -66,7 +70,7 @@ class CreatorSelectOverlay: ConstraintLayout { else _creators.addAll(subs .map { SelectableCreatorBarViewHolder.Selectable(it.channel, false) }); - _recyclerCreators.notifyContentChanged(); + filterCreators(); } constructor(context: Context, attrs: AttributeSet?): super(context, attrs) { } init { @@ -74,7 +78,8 @@ class CreatorSelectOverlay: ConstraintLayout { _topbar = findViewById(R.id.topbar); _buttonSelect = findViewById(R.id.button_select); val dp6 = 6.dp(resources); - _recyclerCreators = findViewById(R.id.recycler_creators).asAny(_creators, RecyclerView.HORIZONTAL) { creatorView -> + _searchBar = findViewById(R.id.search_bar); + _recyclerCreators = findViewById(R.id.recycler_creators).asAny(_creatorsFiltered, RecyclerView.HORIZONTAL) { creatorView -> creatorView.itemView.setPadding(0, dp6, 0, dp6); creatorView.onClick.subscribe { if(it.channel.thumbnail == null) { @@ -99,7 +104,11 @@ class CreatorSelectOverlay: ConstraintLayout { _topbar.onClose.subscribe { onClose.emit(); } + _searchBar.onSearchChanged.subscribe { + filterCreators(); + }; updateSelected(); + filterCreators(); } fun updateSelected() { @@ -113,6 +122,17 @@ class CreatorSelectOverlay: ConstraintLayout { } + private fun filterCreators(withUpdate: Boolean = true) { + val query = _searchBar.textSearch.text.toString().lowercase(); + val filteredEnabled = _creators.filter { query.isNullOrEmpty() || it.channel.name.lowercase().contains(query) }; + + //Optimize + _creatorsFiltered.clear(); + _creatorsFiltered.addAll(filteredEnabled); + if(withUpdate) + _recyclerCreators.notifyContentChanged(); + } + fun select() { if(_creators.isEmpty()) return; diff --git a/app/src/main/java/com/futo/platformplayer/views/overlays/OverlayTopbar.kt b/app/src/main/java/com/futo/platformplayer/views/overlays/OverlayTopbar.kt index 89f91265..d7d6d9fd 100644 --- a/app/src/main/java/com/futo/platformplayer/views/overlays/OverlayTopbar.kt +++ b/app/src/main/java/com/futo/platformplayer/views/overlays/OverlayTopbar.kt @@ -3,10 +3,13 @@ package com.futo.platformplayer.views.overlays import android.content.Context import android.util.AttributeSet import android.widget.ImageView +import android.widget.LinearLayout import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.view.marginRight import com.futo.platformplayer.R import com.futo.platformplayer.constructs.Event0 +import com.futo.platformplayer.dp import com.futo.platformplayer.views.lists.VideoListEditorView class OverlayTopbar : ConstraintLayout { @@ -16,6 +19,8 @@ class OverlayTopbar : ConstraintLayout { private val _button_close: ImageView; + private val _button_list: LinearLayout; + val onClose = Event0(); constructor(context: Context, attrs: AttributeSet? = null) : super(context, attrs) { @@ -24,6 +29,7 @@ class OverlayTopbar : ConstraintLayout { _name = findViewById(R.id.text_name); _meta = findViewById(R.id.text_meta); _button_close = findViewById(R.id.button_close); + _button_list = findViewById(R.id.button_list); val attrArr = context.obtainStyledAttributes(attrs, R.styleable.OverlayTopbar, 0, 0); val attrText = attrArr.getText(R.styleable.OverlayTopbar_title) ?: ""; @@ -42,4 +48,20 @@ class OverlayTopbar : ConstraintLayout { _name.text = name; _meta.text = meta; } + + fun setButtons(vararg buttons: PairUnit>) { + _button_list.removeAllViews(); + val dp40 = 40.dp(resources); + val dp5 = 5.dp(resources); + for(button in buttons) { + _button_list.addView(ImageView(context).apply { + layoutParams = LinearLayout.LayoutParams(dp40, dp40) + setPadding(dp5, dp5, dp5 * 2, dp5); + setImageResource(button.first); + setOnClickListener { + button.second(); + } + }); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/futo/platformplayer/views/subscriptions/SubscriptionBar.kt b/app/src/main/java/com/futo/platformplayer/views/subscriptions/SubscriptionBar.kt index 1fd859b6..15a91f3f 100644 --- a/app/src/main/java/com/futo/platformplayer/views/subscriptions/SubscriptionBar.kt +++ b/app/src/main/java/com/futo/platformplayer/views/subscriptions/SubscriptionBar.kt @@ -77,7 +77,7 @@ class SubscriptionBar : LinearLayout { 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", { diff --git a/app/src/main/res/layout/overlay_creator_select.xml b/app/src/main/res/layout/overlay_creator_select.xml index d6bf6db9..e7007f89 100644 --- a/app/src/main/res/layout/overlay_creator_select.xml +++ b/app/src/main/res/layout/overlay_creator_select.xml @@ -16,11 +16,18 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> + + + @@ -37,7 +44,8 @@ android:id="@+id/button_select" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@color/colorPrimary" + android:layout_margin="10dp" + android:background="@drawable/background_button_primary" android:text="Select" /> diff --git a/app/src/main/res/layout/overlay_topbar.xml b/app/src/main/res/layout/overlay_topbar.xml index 9d7e58b6..35a094a9 100644 --- a/app/src/main/res/layout/overlay_topbar.xml +++ b/app/src/main/res/layout/overlay_topbar.xml @@ -40,6 +40,10 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" android:orientation="horizontal"> +