diff --git a/app/src/main/java/org/schabi/newpipe/settings/tabs/ChooseTabsFragment.java b/app/src/main/java/org/schabi/newpipe/settings/tabs/ChooseTabsFragment.java
index 289c824ba..585d00260 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/tabs/ChooseTabsFragment.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/tabs/ChooseTabsFragment.java
@@ -34,6 +34,7 @@ import org.schabi.newpipe.error.UserAction;
import org.schabi.newpipe.settings.SelectChannelFragment;
import org.schabi.newpipe.settings.SelectKioskFragment;
import org.schabi.newpipe.settings.SelectPlaylistFragment;
+import org.schabi.newpipe.settings.SelectFeedGroupFragment;
import org.schabi.newpipe.settings.tabs.AddTabDialog.ChooseTabListItem;
import org.schabi.newpipe.util.ThemeHelper;
@@ -203,6 +204,14 @@ public class ChooseTabsFragment extends Fragment {
});
selectPlaylistFragment.show(getParentFragmentManager(), "select_playlist");
return;
+ case FEEDGROUP:
+ final SelectFeedGroupFragment selectFeedGroupFragment =
+ new SelectFeedGroupFragment();
+ selectFeedGroupFragment.setOnSelectedListener(
+ (groupId, name, iconId) ->
+ addTab(new Tab.FeedGroupTab(groupId, name, iconId)));
+ selectFeedGroupFragment.show(getParentFragmentManager(), "select_feed_group");
+ return;
default:
addTab(type.getTab());
break;
@@ -244,6 +253,11 @@ public class ChooseTabsFragment extends Fragment {
getString(R.string.playlist_page_summary),
tab.getTabIconRes(context)));
break;
+ case FEEDGROUP:
+ returnList.add(new ChooseTabListItem(tab.getTabId(),
+ getString(R.string.feed_group_page_summary),
+ tab.getTabIconRes(context)));
+ break;
default:
if (!tabList.contains(tab)) {
returnList.add(new ChooseTabListItem(context, tab));
@@ -396,6 +410,9 @@ public class ChooseTabsFragment extends Fragment {
? getString(R.string.local)
: getNameOfServiceById(serviceId);
return serviceName + "/" + tab.getTabName(requireContext());
+ case FEEDGROUP:
+ return getString(R.string.feed_groups_header_title)
+ + "/" + tab.getTabName(requireContext());
default:
return tab.getTabName(requireContext());
}
diff --git a/app/src/main/java/org/schabi/newpipe/settings/tabs/Tab.java b/app/src/main/java/org/schabi/newpipe/settings/tabs/Tab.java
index 7e3f5d0c8..d44badd68 100644
--- a/app/src/main/java/org/schabi/newpipe/settings/tabs/Tab.java
+++ b/app/src/main/java/org/schabi/newpipe/settings/tabs/Tab.java
@@ -93,6 +93,8 @@ public abstract class Tab {
return new ChannelTab(jsonObject);
case PLAYLIST:
return new PlaylistTab(jsonObject);
+ case FEEDGROUP:
+ return new FeedGroupTab(jsonObject);
}
}
@@ -162,7 +164,8 @@ public abstract class Tab {
HISTORY(new HistoryTab()),
KIOSK(new KioskTab()),
CHANNEL(new ChannelTab()),
- PLAYLIST(new PlaylistTab());
+ PLAYLIST(new PlaylistTab()),
+ FEEDGROUP(new FeedGroupTab());
private final Tab tab;
@@ -652,4 +655,93 @@ public abstract class Tab {
return playlistType;
}
}
+ public static class FeedGroupTab extends Tab {
+ public static final int ID = 9;
+ private static final String JSON_FEED_GROUP_ID_KEY = "feed_group_id";
+ private static final String JSON_FEED_GROUP_NAME_KEY = "feed_group_name";
+ private static final String JSON_FEED_GROUP_ICON_KEY = "feed_group_icon";
+ private Long feedGroupId;
+ private String feedGroupName;
+ private int iconId;
+
+ private FeedGroupTab() {
+ this((long) -1, NO_NAME, R.drawable.ic_asterisk);
+ }
+
+ public FeedGroupTab(final Long feedGroupId, final String feedGroupName,
+ final int iconId) {
+ this.feedGroupId = feedGroupId;
+ this.feedGroupName = feedGroupName;
+ this.iconId = iconId;
+
+ }
+
+ public FeedGroupTab(final JsonObject jsonObject) {
+ super(jsonObject);
+ }
+
+ @Override
+ public int getTabId() {
+ return ID;
+ }
+
+ @Override
+ public String getTabName(final Context context) {
+ return feedGroupName;
+ }
+
+ @DrawableRes
+ @Override
+ public int getTabIconRes(final Context context) {
+ return this.iconId;
+ }
+
+ @Override
+ public FeedFragment getFragment(final Context context) {
+ return FeedFragment.newInstance(feedGroupId, feedGroupName);
+ }
+
+ @Override
+ protected void writeDataToJson(final JsonStringWriter writerSink) {
+ writerSink.value(JSON_FEED_GROUP_ID_KEY, feedGroupId)
+ .value(JSON_FEED_GROUP_NAME_KEY, feedGroupName)
+ .value(JSON_FEED_GROUP_ICON_KEY, iconId);
+ }
+
+ @Override
+ protected void readDataFromJson(final JsonObject jsonObject) {
+ feedGroupId = jsonObject.getLong(JSON_FEED_GROUP_ID_KEY, -1);
+ feedGroupName = jsonObject.getString(JSON_FEED_GROUP_NAME_KEY, NO_NAME);
+ iconId = jsonObject.getInt(JSON_FEED_GROUP_ICON_KEY, R.drawable.ic_asterisk);
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (!(obj instanceof FeedGroupTab)) {
+ return false;
+ }
+ final FeedGroupTab other = (FeedGroupTab) obj;
+ return super.equals(obj)
+ && feedGroupId.equals(other.feedGroupId)
+ && feedGroupName.equals(other.feedGroupName)
+ && iconId == other.iconId;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(getTabId(), feedGroupId, feedGroupName, iconId);
+ }
+
+ public Long getFeedGroupId() {
+ return feedGroupId;
+ }
+
+ public String getFeedGroupName() {
+ return feedGroupName;
+ }
+
+ public int getIconId() {
+ return iconId;
+ }
+ }
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index b90482812..1015dea08 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -689,6 +689,7 @@
What\'s New
+ Channel group page
Channel groups
Feed last updated: %s
Not loaded: %d