Skip to content

Commit 481e8ac

Browse files
committed
Add option to view multireddit of pinned subreddits
1 parent 67864ed commit 481e8ac

File tree

11 files changed

+108
-23
lines changed

11 files changed

+108
-23
lines changed

src/main/java/org/quantumbadger/redreader/activities/MainActivity.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,9 +216,13 @@ && getIntent().getAction().equals(Intent.ACTION_MAIN)) {
216216

217217
doRefresh(RefreshableFragment.MAIN_RELAYOUT, false, null);
218218

219-
if(savedInstanceState == null
220-
&& PrefsUtility.pref_behaviour_skiptofrontpage()) {
221-
onSelected(SubredditPostListURL.getFrontPage());
219+
if(savedInstanceState == null) {
220+
if(PrefsUtility.pref_behaviour_skiptopinned() &&
221+
!PrefsUtility.pref_pinned_subreddits_is_empty()) {
222+
onSelected(SubredditPostListURL.getPinned());
223+
} else if(PrefsUtility.pref_behaviour_skiptofrontpage()) {
224+
onSelected(SubredditPostListURL.getFrontPage());
225+
}
222226
}
223227
}
224228

@@ -467,7 +471,12 @@ public void onNothingSelected(final AdapterView<?> adapterView) {
467471

468472
case MainMenuFragment.MENU_MENU_ACTION_FIND_SUBREDDIT: {
469473
startActivity(new Intent(this, SubredditSearchActivity.class));
474+
break;
470475
}
476+
477+
case MainMenuFragment.MENU_MENU_ACTION_PINNED:
478+
onSelected(SubredditPostListURL.getPinned());
479+
break;
471480
}
472481
}
473482

src/main/java/org/quantumbadger/redreader/adapters/MainMenuListingManager.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,17 @@ public MainMenuListingManager(
218218
false));
219219
}
220220

221+
if(mainMenuShortcutItems.contains(MainMenuFragment.MainMenuShortcutItems.PINNED) &&
222+
!PrefsUtility.pref_pinned_subreddits_is_empty()) {
223+
mAdapter.appendToGroup(
224+
GROUP_MAIN_ITEMS,
225+
makeItem(
226+
R.string.mainmenu_pinned,
227+
MainMenuFragment.MENU_MENU_ACTION_PINNED,
228+
null,
229+
false));
230+
}
231+
221232
if(mainMenuShortcutItems.contains(
222233
MainMenuFragment.MainMenuShortcutItems.SUBREDDIT_SEARCH)) {
223234

@@ -456,25 +467,17 @@ public MainMenuListingManager(
456467
private void setPinnedSubreddits() {
457468

458469
final List<SubredditCanonicalId> pinnedSubreddits
459-
= PrefsUtility.pref_pinned_subreddits();
470+
= PrefsUtility.pref_pinned_subreddits(true);
460471

461472
mAdapter.removeAllFromGroup(GROUP_PINNED_SUBREDDITS_ITEMS);
462473
mAdapter.removeAllFromGroup(GROUP_PINNED_SUBREDDITS_HEADER);
463474

464475
if(!pinnedSubreddits.isEmpty()) {
465-
466-
final PrefsUtility.PinnedSubredditSort pinnedSubredditsSort
467-
= PrefsUtility.pref_behaviour_pinned_subredditsort();
468-
469476
mAdapter.appendToGroup(
470477
GROUP_PINNED_SUBREDDITS_HEADER,
471478
new GroupedRecyclerViewItemListSectionHeaderView(
472479
mActivity.getString(R.string.mainmenu_header_subreddits_pinned)));
473480

474-
if(pinnedSubredditsSort == PrefsUtility.PinnedSubredditSort.NAME) {
475-
Collections.sort(pinnedSubreddits);
476-
}
477-
478481
boolean isFirst = true;
479482

480483
for(final SubredditCanonicalId sr : pinnedSubreddits) {

src/main/java/org/quantumbadger/redreader/common/PrefsUtility.java

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.quantumbadger.redreader.R;
3232
import org.quantumbadger.redreader.activities.OptionsMenuUtility;
3333
import org.quantumbadger.redreader.adapters.MainMenuListingManager;
34+
import org.quantumbadger.redreader.common.collections.CollectionStream;
3435
import org.quantumbadger.redreader.common.time.TimeDuration;
3536
import org.quantumbadger.redreader.fragments.MainMenuFragment;
3637
import org.quantumbadger.redreader.io.WritableHashSet;
@@ -45,6 +46,7 @@
4546

4647
import java.io.File;
4748
import java.util.ArrayList;
49+
import java.util.Collections;
4850
import java.util.EnumMap;
4951
import java.util.EnumSet;
5052
import java.util.HashMap;
@@ -766,6 +768,12 @@ public static boolean pref_behaviour_skiptofrontpage() {
766768
false);
767769
}
768770

771+
public static boolean pref_behaviour_skiptopinned() {
772+
return getBoolean(
773+
R.string.pref_behaviour_skiptopinned_key,
774+
false);
775+
}
776+
769777
public static boolean pref_behaviour_useinternalbrowser() {
770778
return getBoolean(
771779
R.string.pref_behaviour_useinternalbrowser_key,
@@ -1603,8 +1611,27 @@ public static boolean pref_menus_quick_account_switcher() {
16031611
// pref_pinned_subreddits
16041612
///////////////////////////////
16051613

1606-
public static List<SubredditCanonicalId> pref_pinned_subreddits() {
1607-
return pref_subreddits_list(R.string.pref_pinned_subreddits_key);
1614+
public static List<SubredditCanonicalId> pref_pinned_subreddits(final boolean sort) {
1615+
final List<SubredditCanonicalId> list
1616+
= pref_subreddits_list(R.string.pref_pinned_subreddits_key);
1617+
if(sort) {
1618+
final PinnedSubredditSort pinnedSubredditsSort = pref_behaviour_pinned_subredditsort();
1619+
if(pinnedSubredditsSort == PinnedSubredditSort.NAME) {
1620+
Collections.sort(list);
1621+
}
1622+
}
1623+
return list;
1624+
}
1625+
1626+
public static String pref_pinned_subreddits_multireddit() {
1627+
final List<String> pinnedSubreddits = new CollectionStream<>(pref_pinned_subreddits(true))
1628+
.map(SubredditCanonicalId::getDisplayNameLowercase)
1629+
.collect(new ArrayList<>());
1630+
return StringUtils.join(pinnedSubreddits, "+");
1631+
}
1632+
1633+
public static boolean pref_pinned_subreddits_is_empty() {
1634+
return pref_subreddits_is_empty(R.string.pref_pinned_subreddits_key);
16081635
}
16091636

16101637
public static void pref_pinned_subreddits_add(
@@ -1637,7 +1664,7 @@ public static void pref_pinned_subreddits_remove(
16371664

16381665
public static boolean pref_pinned_subreddits_check(final SubredditCanonicalId id) {
16391666

1640-
return pref_pinned_subreddits().contains(id);
1667+
return pref_pinned_subreddits(false).contains(id);
16411668
}
16421669

16431670
///////////////////////////////
@@ -1740,6 +1767,11 @@ public static List<SubredditCanonicalId> pref_subreddits_list(final int prefId)
17401767
return result;
17411768
}
17421769

1770+
public static boolean pref_subreddits_is_empty(final int prefId) {
1771+
final String value = getString(prefId, "");
1772+
return value.isEmpty();
1773+
}
1774+
17431775
public static boolean pref_accessibility_separate_body_text_lines() {
17441776
return getBoolean(
17451777
R.string.pref_accessibility_separate_body_text_lines_key,

src/main/java/org/quantumbadger/redreader/fragments/MainMenuFragment.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ public class MainMenuFragment extends RRFragment implements
7070
public static final int MENU_MENU_ACTION_POPULAR = 12;
7171
public static final int MENU_MENU_ACTION_SENT_MESSAGES = 13;
7272
public static final int MENU_MENU_ACTION_FIND_SUBREDDIT = 14;
73+
public static final int MENU_MENU_ACTION_PINNED = 15;
7374

7475
@IntDef({
7576
MENU_MENU_ACTION_FRONTPAGE,
@@ -86,7 +87,8 @@ public class MainMenuFragment extends RRFragment implements
8687
MENU_MENU_ACTION_ALL,
8788
MENU_MENU_ACTION_POPULAR,
8889
MENU_MENU_ACTION_SENT_MESSAGES,
89-
MENU_MENU_ACTION_FIND_SUBREDDIT})
90+
MENU_MENU_ACTION_FIND_SUBREDDIT,
91+
MENU_MENU_ACTION_PINNED})
9092
@Retention(RetentionPolicy.SOURCE)
9193
public @interface MainMenuAction {
9294
}
@@ -209,7 +211,7 @@ public enum MainMenuUserItems {
209211
}
210212

211213
public enum MainMenuShortcutItems {
212-
FRONTPAGE, POPULAR, ALL, SUBREDDIT_SEARCH, CUSTOM
214+
FRONTPAGE, POPULAR, ALL, SUBREDDIT_SEARCH, CUSTOM, PINNED
213215
}
214216

215217
@Override

src/main/java/org/quantumbadger/redreader/fragments/PostListingFragment.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ public void onScrolled(
295295
case SUBREDDIT_COMBINATION:
296296
case ALL_SUBTRACTION:
297297
case POPULAR:
298+
case PINNED:
298299
setHeader(
299300
mPostListingURL.humanReadableName(getActivity(), true),
300301
mPostListingURL.humanReadableUrl(),

src/main/java/org/quantumbadger/redreader/listingcontrollers/PostListingController.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,10 @@ public final boolean isSubreddit() {
158158

159159
public final boolean isSubredditCombination() {
160160
return url.pathType() == RedditURLParser.SUBREDDIT_POST_LISTING_URL
161-
&& url.asSubredditPostListURL().type
162-
== SubredditPostListURL.Type.SUBREDDIT_COMBINATION;
161+
&& (url.asSubredditPostListURL().type
162+
== SubredditPostListURL.Type.SUBREDDIT_COMBINATION
163+
|| url.asSubredditPostListURL().type
164+
== SubredditPostListURL.Type.PINNED);
163165
}
164166

165167
public final boolean isMultireddit() {
@@ -184,7 +186,9 @@ public final SubredditCanonicalId subredditCanonicalName() {
184186
&& (url.asSubredditPostListURL().type
185187
== SubredditPostListURL.Type.SUBREDDIT
186188
|| url.asSubredditPostListURL().type
187-
== SubredditPostListURL.Type.SUBREDDIT_COMBINATION)) {
189+
== SubredditPostListURL.Type.SUBREDDIT_COMBINATION
190+
|| url.asSubredditPostListURL().type
191+
== SubredditPostListURL.Type.PINNED)) {
188192
try {
189193
return new SubredditCanonicalId(url.asSubredditPostListURL().subreddit);
190194
} catch(final InvalidSubredditNameException e) {

src/main/java/org/quantumbadger/redreader/reddit/RedditSubredditHistory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import org.quantumbadger.redreader.account.RedditAccount;
2121
import org.quantumbadger.redreader.common.Constants;
22+
import org.quantumbadger.redreader.common.PrefsUtility;
2223
import org.quantumbadger.redreader.reddit.things.SubredditCanonicalId;
2324

2425
import java.util.ArrayList;
@@ -40,6 +41,7 @@ private static HashSet<SubredditCanonicalId> getForAccount(final RedditAccount a
4041

4142
if(result == null) {
4243
result = new HashSet<>(Constants.Reddit.DEFAULT_SUBREDDITS);
44+
result.addAll(PrefsUtility.pref_pinned_subreddits(false));
4345
SUBREDDITS.put(account, result);
4446
}
4547

src/main/java/org/quantumbadger/redreader/reddit/url/SubredditPostListURL.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.quantumbadger.redreader.R;
2525
import org.quantumbadger.redreader.common.Constants;
2626
import org.quantumbadger.redreader.common.General;
27+
import org.quantumbadger.redreader.common.PrefsUtility;
2728
import org.quantumbadger.redreader.common.StringUtils;
2829
import org.quantumbadger.redreader.reddit.PostSort;
2930
import org.quantumbadger.redreader.reddit.kthings.RedditIdAndType;
@@ -47,6 +48,17 @@ public static SubredditPostListURL getAll() {
4748
return new SubredditPostListURL(Type.ALL, null, null, null, null, null);
4849
}
4950

51+
public static SubredditPostListURL getPinned() {
52+
final String pinned = PrefsUtility.pref_pinned_subreddits_multireddit();
53+
return new SubredditPostListURL(
54+
Type.PINNED,
55+
pinned,
56+
null,
57+
null,
58+
null,
59+
null);
60+
}
61+
5062
public static RedditURLParser.RedditURL getSubreddit(final String subreddit) throws
5163
InvalidSubredditNameException {
5264
return getSubreddit(new SubredditCanonicalId(subreddit));
@@ -61,7 +73,7 @@ public static RedditURLParser.RedditURL getSubreddit(final SubredditCanonicalId
6173
}
6274

6375
public enum Type {
64-
FRONTPAGE, ALL, SUBREDDIT, SUBREDDIT_COMBINATION, ALL_SUBTRACTION, POPULAR
76+
FRONTPAGE, ALL, SUBREDDIT, SUBREDDIT_COMBINATION, ALL_SUBTRACTION, POPULAR, PINNED
6577
}
6678

6779
@NonNull public final Type type;
@@ -128,6 +140,7 @@ public Uri generateJsonUri() {
128140
case SUBREDDIT:
129141
case SUBREDDIT_COMBINATION:
130142
case ALL_SUBTRACTION:
143+
case PINNED:
131144
builder.encodedPath("/r/");
132145
builder.appendPath(subreddit);
133146
break;
@@ -310,9 +323,14 @@ public static SubredditPostListURL parse(final Uri uri) {
310323

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

326+
final Type type =
327+
subreddit.equals(PrefsUtility.pref_pinned_subreddits_multireddit())
328+
? Type.PINNED
329+
: Type.SUBREDDIT_COMBINATION;
330+
313331
if(pathSegments.length == 2) {
314332
return new SubredditPostListURL(
315-
Type.SUBREDDIT_COMBINATION,
333+
type,
316334
subreddit,
317335
null,
318336
limit,
@@ -321,7 +339,7 @@ public static SubredditPostListURL parse(final Uri uri) {
321339

322340
} else if(order != null) {
323341
return new SubredditPostListURL(
324-
Type.SUBREDDIT_COMBINATION,
342+
type,
325343
subreddit,
326344
order,
327345
limit,
@@ -420,6 +438,9 @@ public String humanReadableName(final Context context, final boolean shorter) {
420438
case ALL_SUBTRACTION:
421439
return subreddit;
422440

441+
case PINNED:
442+
return context.getString(R.string.mainmenu_pinned);
443+
423444
default:
424445
return super.humanReadableName(context, shorter);
425446
}

src/main/res/values/arrays.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -841,6 +841,7 @@
841841
<item>@string/mainmenu_all</item>
842842
<item>@string/find_location</item>
843843
<item>@string/mainmenu_custom_destination</item>
844+
<item>@string/mainmenu_pinned</item>
844845
</string-array>
845846

846847
<!-- Constants. Do not change. -->
@@ -850,6 +851,7 @@
850851
<item>all</item>
851852
<item>subreddit_search</item>
852853
<item>custom</item>
854+
<item>pinned</item>
853855
</string-array>
854856

855857
<!-- Constants. Do not change. -->
@@ -858,6 +860,7 @@
858860
<item>all</item>
859861
<item>subreddit_search</item>
860862
<item>custom</item>
863+
<item>pinned</item>
861864
</string-array>
862865

863866
<!-- 2020-02-04 -->

src/main/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@
150150
<string name="mainmenu_inbox">Inbox</string>
151151
<string name="mainmenu_profile">My Profile</string>
152152
<string name="mainmenu_header_subreddits">Subreddits</string>
153+
<string name="mainmenu_pinned">Pinned Subreddits</string>
153154

154155
<!-- General Listing -->
155156

@@ -1921,4 +1922,7 @@
19211922
<!-- 2025-11-08 -->
19221923
<string name="login_reddit_error_title">Reddit login issue</string>
19231924
<string name="login_reddit_error_message">There was a problem logging into Reddit. Try again in an different browser?</string>
1925+
1926+
<string name="pref_behaviour_skiptopinned_title">Skip to pinned subreddits</string>
1927+
<string name="pref_behaviour_skiptopinned_key" translatable="false">pref_behaviour_skiptopinned</string>
19241928
</resources>

0 commit comments

Comments
 (0)