Skip to content

Add option to view multireddit of pinned subreddits #1217

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -216,9 +216,13 @@ && getIntent().getAction().equals(Intent.ACTION_MAIN)) {

doRefresh(RefreshableFragment.MAIN_RELAYOUT, false, null);

if(savedInstanceState == null
&& PrefsUtility.pref_behaviour_skiptofrontpage()) {
onSelected(SubredditPostListURL.getFrontPage());
if(savedInstanceState == null) {
if(PrefsUtility.pref_behaviour_skiptopinned() &&
!PrefsUtility.pref_pinned_subreddits_is_empty()) {
onSelected(SubredditPostListURL.getPinned());
} else if(PrefsUtility.pref_behaviour_skiptofrontpage()) {
onSelected(SubredditPostListURL.getFrontPage());
}
}
}

Expand Down Expand Up @@ -475,7 +479,12 @@ public void onNothingSelected(final AdapterView<?> adapterView) {

case MainMenuFragment.MENU_MENU_ACTION_FIND_SUBREDDIT: {
startActivity(new Intent(this, SubredditSearchActivity.class));
break;
}

case MainMenuFragment.MENU_MENU_ACTION_PINNED:
onSelected(SubredditPostListURL.getPinned());
break;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,17 @@ public MainMenuListingManager(
false));
}

if(mainMenuShortcutItems.contains(MainMenuFragment.MainMenuShortcutItems.PINNED) &&
!PrefsUtility.pref_pinned_subreddits_is_empty()) {
mAdapter.appendToGroup(
GROUP_MAIN_ITEMS,
makeItem(
R.string.mainmenu_pinned,
MainMenuFragment.MENU_MENU_ACTION_PINNED,
null,
false));
}

if(mainMenuShortcutItems.contains(
MainMenuFragment.MainMenuShortcutItems.SUBREDDIT_SEARCH)) {

Expand Down Expand Up @@ -476,25 +487,17 @@ public MainMenuListingManager(
private void setPinnedSubreddits() {

final List<SubredditCanonicalId> pinnedSubreddits
= PrefsUtility.pref_pinned_subreddits();
= PrefsUtility.pref_pinned_subreddits(true);

mAdapter.removeAllFromGroup(GROUP_PINNED_SUBREDDITS_ITEMS);
mAdapter.removeAllFromGroup(GROUP_PINNED_SUBREDDITS_HEADER);

if(!pinnedSubreddits.isEmpty()) {

final PrefsUtility.PinnedSubredditSort pinnedSubredditsSort
= PrefsUtility.pref_behaviour_pinned_subredditsort();

mAdapter.appendToGroup(
GROUP_PINNED_SUBREDDITS_HEADER,
new GroupedRecyclerViewItemListSectionHeaderView(
mActivity.getString(R.string.mainmenu_header_subreddits_pinned)));

if(pinnedSubredditsSort == PrefsUtility.PinnedSubredditSort.NAME) {
Collections.sort(pinnedSubreddits);
}

boolean isFirst = true;

for(final SubredditCanonicalId sr : pinnedSubreddits) {
Expand Down
38 changes: 35 additions & 3 deletions src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.quantumbadger.redreader.R;
import org.quantumbadger.redreader.activities.OptionsMenuUtility;
import org.quantumbadger.redreader.adapters.MainMenuListingManager;
import org.quantumbadger.redreader.common.collections.CollectionStream;
import org.quantumbadger.redreader.common.time.TimeDuration;
import org.quantumbadger.redreader.fragments.MainMenuFragment;
import org.quantumbadger.redreader.io.WritableHashSet;
Expand All @@ -44,6 +45,7 @@

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.HashMap;
Expand Down Expand Up @@ -770,6 +772,12 @@ public static boolean pref_behaviour_skiptofrontpage() {
false);
}

public static boolean pref_behaviour_skiptopinned() {
return getBoolean(
R.string.pref_behaviour_skiptopinned_key,
false);
}

public static boolean pref_behaviour_useinternalbrowser() {
return getBoolean(
R.string.pref_behaviour_useinternalbrowser_key,
Expand Down Expand Up @@ -1591,8 +1599,27 @@ public static boolean pref_menus_quick_account_switcher() {
// pref_pinned_subreddits
///////////////////////////////

public static List<SubredditCanonicalId> pref_pinned_subreddits() {
return pref_subreddits_list(R.string.pref_pinned_subreddits_key);
public static List<SubredditCanonicalId> pref_pinned_subreddits(final boolean sort) {
final List<SubredditCanonicalId> list
= pref_subreddits_list(R.string.pref_pinned_subreddits_key);
if(sort) {
final PinnedSubredditSort pinnedSubredditsSort = pref_behaviour_pinned_subredditsort();
if(pinnedSubredditsSort == PinnedSubredditSort.NAME) {
Collections.sort(list);
}
}
return list;
}

public static String pref_pinned_subreddits_multireddit() {
final List<String> pinnedSubreddits = new CollectionStream<>(pref_pinned_subreddits(true))
.map(SubredditCanonicalId::getDisplayNameLowercase)
.collect(new ArrayList<>());
return StringUtils.join(pinnedSubreddits, "+");
}

public static boolean pref_pinned_subreddits_is_empty() {
return pref_subreddits_is_empty(R.string.pref_pinned_subreddits_key);
}

public static void pref_pinned_subreddits_add(
Expand Down Expand Up @@ -1625,7 +1652,7 @@ public static void pref_pinned_subreddits_remove(

public static boolean pref_pinned_subreddits_check(final SubredditCanonicalId id) {

return pref_pinned_subreddits().contains(id);
return pref_pinned_subreddits(false).contains(id);
}

///////////////////////////////
Expand Down Expand Up @@ -1728,6 +1755,11 @@ public static List<SubredditCanonicalId> pref_subreddits_list(final int prefId)
return result;
}

public static boolean pref_subreddits_is_empty(final int prefId) {
final String value = getString(prefId, "");
return value.isEmpty();
}

public static boolean pref_accessibility_separate_body_text_lines() {
return getBoolean(
R.string.pref_accessibility_separate_body_text_lines_key,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ public class MainMenuFragment extends RRFragment implements
public static final int MENU_MENU_ACTION_RANDOM_NSFW = 14;
public static final int MENU_MENU_ACTION_SENT_MESSAGES = 15;
public static final int MENU_MENU_ACTION_FIND_SUBREDDIT = 16;
public static final int MENU_MENU_ACTION_PINNED = 17;

@IntDef({
MENU_MENU_ACTION_FRONTPAGE,
Expand All @@ -90,7 +91,8 @@ public class MainMenuFragment extends RRFragment implements
MENU_MENU_ACTION_RANDOM,
MENU_MENU_ACTION_RANDOM_NSFW,
MENU_MENU_ACTION_SENT_MESSAGES,
MENU_MENU_ACTION_FIND_SUBREDDIT})
MENU_MENU_ACTION_FIND_SUBREDDIT,
MENU_MENU_ACTION_PINNED})
@Retention(RetentionPolicy.SOURCE)
public @interface MainMenuAction {
}
Expand Down Expand Up @@ -213,7 +215,7 @@ public enum MainMenuUserItems {
}

public enum MainMenuShortcutItems {
FRONTPAGE, POPULAR, ALL, SUBREDDIT_SEARCH, CUSTOM, RANDOM, RANDOM_NSFW
FRONTPAGE, POPULAR, ALL, SUBREDDIT_SEARCH, CUSTOM, RANDOM, RANDOM_NSFW, PINNED
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,7 @@ public void onScrolled(
case SUBREDDIT_COMBINATION:
case ALL_SUBTRACTION:
case POPULAR:
case PINNED:
setHeader(
mPostListingURL.humanReadableName(getActivity(), true),
mPostListingURL.humanReadableUrl(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,8 +158,10 @@ public final boolean isSubreddit() {

public final boolean isSubredditCombination() {
return url.pathType() == RedditURLParser.SUBREDDIT_POST_LISTING_URL
&& url.asSubredditPostListURL().type
== SubredditPostListURL.Type.SUBREDDIT_COMBINATION;
&& (url.asSubredditPostListURL().type
== SubredditPostListURL.Type.SUBREDDIT_COMBINATION
|| url.asSubredditPostListURL().type
== SubredditPostListURL.Type.PINNED);
}

public final boolean isRandomSubreddit() {
Expand Down Expand Up @@ -191,7 +193,9 @@ public final SubredditCanonicalId subredditCanonicalName() {
|| url.asSubredditPostListURL().type
== SubredditPostListURL.Type.RANDOM
|| url.asSubredditPostListURL().type
== SubredditPostListURL.Type.SUBREDDIT_COMBINATION)) {
== SubredditPostListURL.Type.SUBREDDIT_COMBINATION
|| url.asSubredditPostListURL().type
== SubredditPostListURL.Type.PINNED)) {
try {
return new SubredditCanonicalId(url.asSubredditPostListURL().subreddit);
} catch(final InvalidSubredditNameException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.quantumbadger.redreader.R;
import org.quantumbadger.redreader.common.Constants;
import org.quantumbadger.redreader.common.General;
import org.quantumbadger.redreader.common.PrefsUtility;
import org.quantumbadger.redreader.common.StringUtils;
import org.quantumbadger.redreader.reddit.PostSort;
import org.quantumbadger.redreader.reddit.kthings.RedditIdAndType;
Expand Down Expand Up @@ -55,6 +56,17 @@ public static SubredditPostListURL getAll() {
return new SubredditPostListURL(Type.ALL, null, null, null, null, null);
}

public static SubredditPostListURL getPinned() {
final String pinned = PrefsUtility.pref_pinned_subreddits_multireddit();
return new SubredditPostListURL(
Type.PINNED,
pinned,
null,
null,
null,
null);
}

public static RedditURLParser.RedditURL getSubreddit(final String subreddit) throws
InvalidSubredditNameException {
return getSubreddit(new SubredditCanonicalId(subreddit));
Expand All @@ -69,7 +81,7 @@ public static RedditURLParser.RedditURL getSubreddit(final SubredditCanonicalId
}

public enum Type {
FRONTPAGE, ALL, SUBREDDIT, SUBREDDIT_COMBINATION, ALL_SUBTRACTION, POPULAR, RANDOM
FRONTPAGE, ALL, SUBREDDIT, SUBREDDIT_COMBINATION, ALL_SUBTRACTION, POPULAR, RANDOM, PINNED
}

@NonNull public final Type type;
Expand Down Expand Up @@ -137,6 +149,7 @@ public Uri generateJsonUri() {
case SUBREDDIT_COMBINATION:
case ALL_SUBTRACTION:
case RANDOM:
case PINNED:
builder.encodedPath("/r/");
builder.appendPath(subreddit);
break;
Expand Down Expand Up @@ -329,9 +342,14 @@ public static SubredditPostListURL parse(final Uri uri) {

} else if(subreddit.matches("\\w+(\\+[\\w\\.]+)+")) {

final Type type =
subreddit.equals(PrefsUtility.pref_pinned_subreddits_multireddit())
? Type.PINNED
: Type.SUBREDDIT_COMBINATION;

if(pathSegments.length == 2) {
return new SubredditPostListURL(
Type.SUBREDDIT_COMBINATION,
type,
subreddit,
null,
limit,
Expand All @@ -340,7 +358,7 @@ public static SubredditPostListURL parse(final Uri uri) {

} else if(order != null) {
return new SubredditPostListURL(
Type.SUBREDDIT_COMBINATION,
type,
subreddit,
order,
limit,
Expand Down Expand Up @@ -444,6 +462,9 @@ public String humanReadableName(final Context context, final boolean shorter) {
case ALL_SUBTRACTION:
return subreddit;

case PINNED:
return context.getString(R.string.mainmenu_pinned);

default:
return super.humanReadableName(context, shorter);
}
Expand Down
3 changes: 3 additions & 0 deletions src/main/res/values/arrays.xml
Original file line number Diff line number Diff line change
Expand Up @@ -837,6 +837,7 @@
<item>@string/mainmenu_custom_destination</item>
<item>@string/mainmenu_random</item>
<item>@string/mainmenu_random_nsfw</item>
<item>@string/mainmenu_pinned</item>
</string-array>

<!-- Constants. Do not change. -->
Expand All @@ -848,6 +849,7 @@
<item>custom</item>
<item>random</item>
<item>random_nsfw</item>
<item>pinned</item>
</string-array>

<!-- Constants. Do not change. -->
Expand All @@ -856,6 +858,7 @@
<item>all</item>
<item>subreddit_search</item>
<item>custom</item>
<item>pinned</item>
</string-array>

<!-- 2020-02-04 -->
Expand Down
4 changes: 4 additions & 0 deletions src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@
<string name="mainmenu_inbox">Inbox</string>
<string name="mainmenu_profile">My Profile</string>
<string name="mainmenu_header_subreddits">Subreddits</string>
<string name="mainmenu_pinned">Pinned Subreddits</string>

<!-- General Listing -->

Expand Down Expand Up @@ -1902,4 +1903,7 @@
<string name="album_grid_pref_horizontal_padding">Horizontal padding</string>

<string name="album_pref_compact_title">Compact title</string>

<string name="pref_behaviour_skiptopinned_title">Skip to pinned subreddits</string>
<string name="pref_behaviour_skiptopinned_key" translatable="false">pref_behaviour_skiptopinned</string>
</resources>
4 changes: 4 additions & 0 deletions src/main/res/xml/prefs_behaviour.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@
android:key="@string/pref_behaviour_skiptofrontpage_key"
android:defaultValue="false"/>

<CheckBoxPreference android:title="@string/pref_behaviour_skiptopinned_title"
android:key="@string/pref_behaviour_skiptopinned_key"
android:defaultValue="false"/>

<CheckBoxPreference android:title="@string/pref_behaviour_useinternalbrowser_title"
android:key="@string/pref_behaviour_useinternalbrowser_key"
android:defaultValue="true"/>
Expand Down