channel rows order fix + upd channel sorting

This commit is contained in:
Yuriy Liskov 2023-12-10 08:23:15 +02:00
parent 25d5eaa33a
commit 6c537cbacf
4 changed files with 40 additions and 18 deletions

View File

@ -216,6 +216,10 @@ public class VideoGroup {
return mPosition;
}
public void setPosition(int position) {
mPosition = position;
}
public int getAction() {
return mAction;
}

View File

@ -7,7 +7,6 @@ import com.liskovsoft.mediaserviceinterfaces.HubService;
import com.liskovsoft.mediaserviceinterfaces.data.MediaGroup;
import com.liskovsoft.mediaserviceinterfaces.data.MediaItem;
import com.liskovsoft.sharedutils.helpers.Helpers;
import com.liskovsoft.sharedutils.helpers.MessageHelpers;
import com.liskovsoft.sharedutils.mylogger.Log;
import com.liskovsoft.smartyoutubetv2.common.R;
import com.liskovsoft.smartyoutubetv2.common.app.models.data.Video;
@ -41,6 +40,7 @@ public class ChannelPresenter extends BasePresenter<ChannelView> implements Vide
private Disposable mUpdateAction;
private Disposable mScrollAction;
private MediaGroup mLastScrollGroup;
private int mSortIdx;
private interface OnChannelId {
void onChannelId(String channelId);
@ -175,6 +175,7 @@ public class ChannelPresenter extends BasePresenter<ChannelView> implements Vide
private void disposeActions() {
RxHelper.disposeActions(mUpdateAction, mScrollAction);
mServiceManager.disposeActions();
mSortIdx = 0;
}
private void updateRows(String channelId) {
@ -211,8 +212,6 @@ public class ChannelPresenter extends BasePresenter<ChannelView> implements Vide
ViewManager.instance(getContext()).startView(ChannelView.class);
}
moveToTopIfNeeded(mediaGroups);
for (MediaGroup mediaGroup : mediaGroups) {
if (mediaGroup.getMediaItems() == null) {
Log.e(TAG, "updateRowsHeader: MediaGroup is empty. Group Name: " + mediaGroup.getTitle());
@ -266,16 +265,6 @@ public class ChannelPresenter extends BasePresenter<ChannelView> implements Vide
);
}
/**
* Sort channel content: move Uploads on top.
*/
private void moveToTopIfNeeded(List<MediaGroup> mediaGroups) {
moveToTop(mediaGroups, R.string.playlists_row_name);
moveToTop(mediaGroups, R.string.popular_uploads_row_name);
moveToTop(mediaGroups, R.string.uploads_row_name);
moveToTop(mediaGroups, R.string.live_now_row_name);
}
private void moveToTop(List<MediaGroup> mediaGroups, int rowNameResId) {
if (rowNameResId <= 0) {
return;
@ -351,15 +340,25 @@ public class ChannelPresenter extends BasePresenter<ChannelView> implements Vide
return;
}
Observable<List<MediaGroup>> channelObserve = mHubService.getContentService().getChannelSortingObserve(mChannelId);
Disposable result = channelObserve.subscribe(
Observable<List<MediaGroup>> sorting = mHubService.getContentService().getChannelSortingObserve(mChannelId);
Disposable result = sorting.subscribe(
items -> {
AppDialogPresenter dialogPresenter = AppDialogPresenter.instance(getContext());
List<OptionItem> options = new ArrayList<>();
int idx = 0;
for (MediaGroup group : items) {
final int tempIdx = idx;
options.add(UiOptionItem.from(group.getTitle(), item -> {
Observable<MediaGroup> continuation = mHubService.getContentService().continueGroupObserve(group);
Disposable result2 = continuation.subscribe(mediaGroup -> {
VideoGroup replace = VideoGroup.from(mediaGroup);
replace.setPosition(0);
replace.setAction(VideoGroup.ACTION_REPLACE);
getView().update(replace);
mSortIdx = tempIdx;
});
}, mSortIdx == idx));
idx++;
options.add(UiOptionItem.from(group.getTitle(), item -> MessageHelpers.showMessage(getContext(), group.toString()), idx == 1));
}
dialogPresenter.appendRadioCategory(getContext().getString(R.string.channels_section_sorting), options);
dialogPresenter.showDialog();

View File

@ -7,4 +7,4 @@ android.jetifier.blacklist=bcprov
android.enableR8.fullMode=true
# Minification ram usage fix
#org.gradle.jvmargs=-Xmx1024m
org.gradle.jvmargs=-Xmx1500m
org.gradle.jvmargs=-Xmx2000m

View File

@ -9,6 +9,7 @@ import androidx.leanback.widget.ClassPresenterSelector;
import androidx.leanback.widget.HeaderItem;
import androidx.leanback.widget.ListRow;
import androidx.leanback.widget.ListRowPresenter;
import androidx.leanback.widget.ObjectAdapter;
import androidx.leanback.widget.OnItemViewSelectedListener;
import androidx.leanback.widget.Presenter;
import androidx.leanback.widget.Row;
@ -121,6 +122,15 @@ public abstract class MultipleRowsFragment extends RowsSupportFragment implement
setPosition(0);
}
private void remove(int idx) {
if (mRowsAdapter != null && mRowsAdapter.size() > idx) {
ListRow row = (ListRow) mRowsAdapter.get(idx);
mRowsAdapter.remove(row);
VideoGroupObjectAdapter group = (VideoGroupObjectAdapter) row.getAdapter();
mVideoGroupAdapters.values().remove(group);
}
}
@Override
public boolean isEmpty() {
if (mRowsAdapter == null) {
@ -137,10 +147,19 @@ public abstract class MultipleRowsFragment extends RowsSupportFragment implement
return;
}
// Correct position depending on the search bar presence
if (group.getPosition() != -1 && mSearchBarCallback != null) {
group.setPosition(group.getPosition() + 1);
}
int action = group.getAction();
if (action == VideoGroup.ACTION_REPLACE) {
clear();
if (group.getPosition() == -1) {
clear();
} else {
remove(group.getPosition());
}
} else if (action == VideoGroup.ACTION_REMOVE) {
VideoGroupObjectAdapter adapter = mVideoGroupAdapters.get(group.getId());
if (adapter != null) {