From 123c38596a1ec595cf54fffff198623acfef67b0 Mon Sep 17 00:00:00 2001 From: Yuriy Liskov Date: Tue, 5 Dec 2023 13:23:22 +0200 Subject: [PATCH] Channels: search field first step --- .../leanback/widget/ObjectAdapter.java | 8 ++- .../HeaderVideoGroupObjectAdapter.java | 59 +++++++++++++++++++ .../tv/adapter/VideoGroupObjectAdapter.java | 52 ++++++++++------ .../tv/presenter/SearchBarPresenter.java | 30 ++++++++++ .../browse/video/MultiVideoGridFragment.java | 28 ++++++--- 5 files changed, 147 insertions(+), 30 deletions(-) create mode 100644 smarttubetv/src/main/java/com/liskovsoft/smartyoutubetv2/tv/adapter/HeaderVideoGroupObjectAdapter.java create mode 100644 smarttubetv/src/main/java/com/liskovsoft/smartyoutubetv2/tv/presenter/SearchBarPresenter.java diff --git a/leanback-1.0.0/src/main/java/androidx/leanback/widget/ObjectAdapter.java b/leanback-1.0.0/src/main/java/androidx/leanback/widget/ObjectAdapter.java index 988b5fb04..fcb02e476 100644 --- a/leanback-1.0.0/src/main/java/androidx/leanback/widget/ObjectAdapter.java +++ b/leanback-1.0.0/src/main/java/androidx/leanback/widget/ObjectAdapter.java @@ -229,13 +229,15 @@ public abstract class ObjectAdapter { mObservable.unregisterAll(); } + // MOD: remove final from some notify* methods + /** * Notifies UI that some items has changed. * * @param positionStart Starting position of the changed items. * @param itemCount Total number of items that changed. */ - public final void notifyItemRangeChanged(int positionStart, int itemCount) { + public void notifyItemRangeChanged(int positionStart, int itemCount) { mObservable.notifyItemRangeChanged(positionStart, itemCount); } @@ -256,7 +258,7 @@ public abstract class ObjectAdapter { * @param positionStart Position where new items has been inserted. * @param itemCount Count of the new items has been inserted. */ - final protected void notifyItemRangeInserted(int positionStart, int itemCount) { + protected void notifyItemRangeInserted(int positionStart, int itemCount) { mObservable.notifyItemRangeInserted(positionStart, itemCount); } @@ -266,7 +268,7 @@ public abstract class ObjectAdapter { * @param positionStart Starting position of the removed items. * @param itemCount Total number of items that has been removed. */ - final protected void notifyItemRangeRemoved(int positionStart, int itemCount) { + protected void notifyItemRangeRemoved(int positionStart, int itemCount) { mObservable.notifyItemRangeRemoved(positionStart, itemCount); } diff --git a/smarttubetv/src/main/java/com/liskovsoft/smartyoutubetv2/tv/adapter/HeaderVideoGroupObjectAdapter.java b/smarttubetv/src/main/java/com/liskovsoft/smartyoutubetv2/tv/adapter/HeaderVideoGroupObjectAdapter.java new file mode 100644 index 000000000..e1ed4ff69 --- /dev/null +++ b/smarttubetv/src/main/java/com/liskovsoft/smartyoutubetv2/tv/adapter/HeaderVideoGroupObjectAdapter.java @@ -0,0 +1,59 @@ +package com.liskovsoft.smartyoutubetv2.tv.adapter; + +import androidx.leanback.widget.Presenter; +import androidx.leanback.widget.PresenterSelector; + +import com.liskovsoft.smartyoutubetv2.common.app.models.data.VideoGroup; + +public class HeaderVideoGroupObjectAdapter extends VideoGroupObjectAdapter { + private Object mHeader; + + public HeaderVideoGroupObjectAdapter(VideoGroup videoGroup, Presenter presenter) { + super(videoGroup, presenter); + } + + public HeaderVideoGroupObjectAdapter(VideoGroup videoGroup, PresenterSelector presenter) { + super(videoGroup, presenter); + } + + public HeaderVideoGroupObjectAdapter(Presenter presenter) { + super(presenter); + } + + public HeaderVideoGroupObjectAdapter(PresenterSelector presenter) { + super(presenter); + } + + @Override + public int size() { + return super.size() + (mHeader != null ? 1 : 0); + } + + @Override + public Object get(int index) { + if (index == 0 && mHeader != null) { + return mHeader; + } + + return super.get(mHeader != null ? index - 1 : index); + } + + public void setHeader(Object header) { + mHeader = header; + } + + @Override + public void notifyItemRangeChanged(int positionStart, int itemCount) { + super.notifyItemRangeChanged(mHeader != null ? positionStart + 1 : positionStart, itemCount); + } + + @Override + protected void notifyItemRangeInserted(int positionStart, int itemCount) { + super.notifyItemRangeInserted(mHeader != null ? positionStart + 1 : positionStart, itemCount); + } + + @Override + protected void notifyItemRangeRemoved(int positionStart, int itemCount) { + super.notifyItemRangeRemoved(mHeader != null ? positionStart + 1 : positionStart, itemCount); + } +} diff --git a/smarttubetv/src/main/java/com/liskovsoft/smartyoutubetv2/tv/adapter/VideoGroupObjectAdapter.java b/smarttubetv/src/main/java/com/liskovsoft/smartyoutubetv2/tv/adapter/VideoGroupObjectAdapter.java index 7313525ce..c39106c5b 100644 --- a/smarttubetv/src/main/java/com/liskovsoft/smartyoutubetv2/tv/adapter/VideoGroupObjectAdapter.java +++ b/smarttubetv/src/main/java/com/liskovsoft/smartyoutubetv2/tv/adapter/VideoGroupObjectAdapter.java @@ -3,6 +3,8 @@ package com.liskovsoft.smartyoutubetv2.tv.adapter; import androidx.annotation.NonNull; import androidx.leanback.widget.ObjectAdapter; import androidx.leanback.widget.Presenter; +import androidx.leanback.widget.PresenterSelector; + import com.liskovsoft.sharedutils.helpers.Helpers; import com.liskovsoft.smartyoutubetv2.common.app.models.data.Video; import com.liskovsoft.smartyoutubetv2.common.app.models.data.VideoGroup; @@ -13,38 +15,50 @@ import java.util.List; public class VideoGroupObjectAdapter extends ObjectAdapter { private static final String TAG = VideoGroupObjectAdapter.class.getSimpleName(); - private final List