Skip to content

Commit dc699a8

Browse files
committed
Add option to view multireddit of pinned subreddits
1 parent f7c9b90 commit dc699a8

File tree

10 files changed

+106
-23
lines changed

10 files changed

+106
-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

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

476480
case MainMenuFragment.MENU_MENU_ACTION_FIND_SUBREDDIT: {
477481
startActivity(new Intent(this, SubredditSearchActivity.class));
482+
break;
478483
}
484+
485+
case MainMenuFragment.MENU_MENU_ACTION_PINNED:
486+
onSelected(SubredditPostListURL.getPinned());
487+
break;
479488
}
480489
}
481490

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

@@ -476,25 +487,17 @@ public MainMenuListingManager(
476487
private void setPinnedSubreddits() {
477488

478489
final List<SubredditCanonicalId> pinnedSubreddits
479-
= PrefsUtility.pref_pinned_subreddits();
490+
= PrefsUtility.pref_pinned_subreddits(true);
480491

481492
mAdapter.removeAllFromGroup(GROUP_PINNED_SUBREDDITS_ITEMS);
482493
mAdapter.removeAllFromGroup(GROUP_PINNED_SUBREDDITS_HEADER);
483494

484495
if(!pinnedSubreddits.isEmpty()) {
485-
486-
final PrefsUtility.PinnedSubredditSort pinnedSubredditsSort
487-
= PrefsUtility.pref_behaviour_pinned_subredditsort();
488-
489496
mAdapter.appendToGroup(
490497
GROUP_PINNED_SUBREDDITS_HEADER,
491498
new GroupedRecyclerViewItemListSectionHeaderView(
492499
mActivity.getString(R.string.mainmenu_header_subreddits_pinned)));
493500

494-
if(pinnedSubredditsSort == PrefsUtility.PinnedSubredditSort.NAME) {
495-
Collections.sort(pinnedSubreddits);
496-
}
497-
498501
boolean isFirst = true;
499502

500503
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
@@ -30,6 +30,7 @@
3030
import org.quantumbadger.redreader.R;
3131
import org.quantumbadger.redreader.activities.OptionsMenuUtility;
3232
import org.quantumbadger.redreader.adapters.MainMenuListingManager;
33+
import org.quantumbadger.redreader.common.collections.CollectionStream;
3334
import org.quantumbadger.redreader.common.time.TimeDuration;
3435
import org.quantumbadger.redreader.fragments.MainMenuFragment;
3536
import org.quantumbadger.redreader.io.WritableHashSet;
@@ -44,6 +45,7 @@
4445

4546
import java.io.File;
4647
import java.util.ArrayList;
48+
import java.util.Collections;
4749
import java.util.EnumMap;
4850
import java.util.EnumSet;
4951
import java.util.HashMap;
@@ -770,6 +772,12 @@ public static boolean pref_behaviour_skiptofrontpage() {
770772
false);
771773
}
772774

775+
public static boolean pref_behaviour_skiptopinned() {
776+
return getBoolean(
777+
R.string.pref_behaviour_skiptopinned_key,
778+
false);
779+
}
780+
773781
public static boolean pref_behaviour_useinternalbrowser() {
774782
return getBoolean(
775783
R.string.pref_behaviour_useinternalbrowser_key,
@@ -1591,8 +1599,27 @@ public static boolean pref_menus_quick_account_switcher() {
15911599
// pref_pinned_subreddits
15921600
///////////////////////////////
15931601

1594-
public static List<SubredditCanonicalId> pref_pinned_subreddits() {
1595-
return pref_subreddits_list(R.string.pref_pinned_subreddits_key);
1602+
public static List<SubredditCanonicalId> pref_pinned_subreddits(final boolean sort) {
1603+
final List<SubredditCanonicalId> list
1604+
= pref_subreddits_list(R.string.pref_pinned_subreddits_key);
1605+
if(sort) {
1606+
final PinnedSubredditSort pinnedSubredditsSort = pref_behaviour_pinned_subredditsort();
1607+
if(pinnedSubredditsSort == PinnedSubredditSort.NAME) {
1608+
Collections.sort(list);
1609+
}
1610+
}
1611+
return list;
1612+
}
1613+
1614+
public static String pref_pinned_subreddits_multireddit() {
1615+
final List<String> pinnedSubreddits = new CollectionStream<>(pref_pinned_subreddits(true))
1616+
.map(SubredditCanonicalId::getDisplayNameLowercase)
1617+
.collect(new ArrayList<>());
1618+
return StringUtils.join(pinnedSubreddits, "+");
1619+
}
1620+
1621+
public static boolean pref_pinned_subreddits_is_empty() {
1622+
return pref_subreddits_is_empty(R.string.pref_pinned_subreddits_key);
15961623
}
15971624

15981625
public static void pref_pinned_subreddits_add(
@@ -1625,7 +1652,7 @@ public static void pref_pinned_subreddits_remove(
16251652

16261653
public static boolean pref_pinned_subreddits_check(final SubredditCanonicalId id) {
16271654

1628-
return pref_pinned_subreddits().contains(id);
1655+
return pref_pinned_subreddits(false).contains(id);
16291656
}
16301657

16311658
///////////////////////////////
@@ -1728,6 +1755,11 @@ public static List<SubredditCanonicalId> pref_subreddits_list(final int prefId)
17281755
return result;
17291756
}
17301757

1758+
public static boolean pref_subreddits_is_empty(final int prefId) {
1759+
final String value = getString(prefId, "");
1760+
return value.isEmpty();
1761+
}
1762+
17311763
public static boolean pref_accessibility_separate_body_text_lines() {
17321764
return getBoolean(
17331765
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
@@ -72,6 +72,7 @@ public class MainMenuFragment extends RRFragment implements
7272
public static final int MENU_MENU_ACTION_RANDOM_NSFW = 14;
7373
public static final int MENU_MENU_ACTION_SENT_MESSAGES = 15;
7474
public static final int MENU_MENU_ACTION_FIND_SUBREDDIT = 16;
75+
public static final int MENU_MENU_ACTION_PINNED = 17;
7576

7677
@IntDef({
7778
MENU_MENU_ACTION_FRONTPAGE,
@@ -90,7 +91,8 @@ public class MainMenuFragment extends RRFragment implements
9091
MENU_MENU_ACTION_RANDOM,
9192
MENU_MENU_ACTION_RANDOM_NSFW,
9293
MENU_MENU_ACTION_SENT_MESSAGES,
93-
MENU_MENU_ACTION_FIND_SUBREDDIT})
94+
MENU_MENU_ACTION_FIND_SUBREDDIT,
95+
MENU_MENU_ACTION_PINNED})
9496
@Retention(RetentionPolicy.SOURCE)
9597
public @interface MainMenuAction {
9698
}
@@ -213,7 +215,7 @@ public enum MainMenuUserItems {
213215
}
214216

215217
public enum MainMenuShortcutItems {
216-
FRONTPAGE, POPULAR, ALL, SUBREDDIT_SEARCH, CUSTOM, RANDOM, RANDOM_NSFW
218+
FRONTPAGE, POPULAR, ALL, SUBREDDIT_SEARCH, CUSTOM, RANDOM, RANDOM_NSFW, PINNED
217219
}
218220

219221
@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 isRandomSubreddit() {
@@ -191,7 +193,9 @@ public final SubredditCanonicalId subredditCanonicalName() {
191193
|| url.asSubredditPostListURL().type
192194
== SubredditPostListURL.Type.RANDOM
193195
|| url.asSubredditPostListURL().type
194-
== SubredditPostListURL.Type.SUBREDDIT_COMBINATION)) {
196+
== SubredditPostListURL.Type.SUBREDDIT_COMBINATION
197+
|| url.asSubredditPostListURL().type
198+
== SubredditPostListURL.Type.PINNED)) {
195199
try {
196200
return new SubredditCanonicalId(url.asSubredditPostListURL().subreddit);
197201
} catch(final InvalidSubredditNameException e) {

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;
@@ -55,6 +56,17 @@ public static SubredditPostListURL getAll() {
5556
return new SubredditPostListURL(Type.ALL, null, null, null, null, null);
5657
}
5758

59+
public static SubredditPostListURL getPinned() {
60+
final String pinned = PrefsUtility.pref_pinned_subreddits_multireddit();
61+
return new SubredditPostListURL(
62+
Type.PINNED,
63+
pinned,
64+
null,
65+
null,
66+
null,
67+
null);
68+
}
69+
5870
public static RedditURLParser.RedditURL getSubreddit(final String subreddit) throws
5971
InvalidSubredditNameException {
6072
return getSubreddit(new SubredditCanonicalId(subreddit));
@@ -69,7 +81,7 @@ public static RedditURLParser.RedditURL getSubreddit(final SubredditCanonicalId
6981
}
7082

7183
public enum Type {
72-
FRONTPAGE, ALL, SUBREDDIT, SUBREDDIT_COMBINATION, ALL_SUBTRACTION, POPULAR, RANDOM
84+
FRONTPAGE, ALL, SUBREDDIT, SUBREDDIT_COMBINATION, ALL_SUBTRACTION, POPULAR, RANDOM, PINNED
7385
}
7486

7587
@NonNull public final Type type;
@@ -137,6 +149,7 @@ public Uri generateJsonUri() {
137149
case SUBREDDIT_COMBINATION:
138150
case ALL_SUBTRACTION:
139151
case RANDOM:
152+
case PINNED:
140153
builder.encodedPath("/r/");
141154
builder.appendPath(subreddit);
142155
break;
@@ -329,9 +342,14 @@ public static SubredditPostListURL parse(final Uri uri) {
329342

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

345+
final Type type =
346+
subreddit.equals(PrefsUtility.pref_pinned_subreddits_multireddit())
347+
? Type.PINNED
348+
: Type.SUBREDDIT_COMBINATION;
349+
332350
if(pathSegments.length == 2) {
333351
return new SubredditPostListURL(
334-
Type.SUBREDDIT_COMBINATION,
352+
type,
335353
subreddit,
336354
null,
337355
limit,
@@ -340,7 +358,7 @@ public static SubredditPostListURL parse(final Uri uri) {
340358

341359
} else if(order != null) {
342360
return new SubredditPostListURL(
343-
Type.SUBREDDIT_COMBINATION,
361+
type,
344362
subreddit,
345363
order,
346364
limit,
@@ -444,6 +462,9 @@ public String humanReadableName(final Context context, final boolean shorter) {
444462
case ALL_SUBTRACTION:
445463
return subreddit;
446464

465+
case PINNED:
466+
return context.getString(R.string.mainmenu_pinned);
467+
447468
default:
448469
return super.humanReadableName(context, shorter);
449470
}

src/main/res/values/arrays.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -837,6 +837,7 @@
837837
<item>@string/mainmenu_custom_destination</item>
838838
<item>@string/mainmenu_random</item>
839839
<item>@string/mainmenu_random_nsfw</item>
840+
<item>@string/mainmenu_pinned</item>
840841
</string-array>
841842

842843
<!-- Constants. Do not change. -->
@@ -848,6 +849,7 @@
848849
<item>custom</item>
849850
<item>random</item>
850851
<item>random_nsfw</item>
852+
<item>pinned</item>
851853
</string-array>
852854

853855
<!-- Constants. Do not change. -->
@@ -856,6 +858,7 @@
856858
<item>all</item>
857859
<item>subreddit_search</item>
858860
<item>custom</item>
861+
<item>pinned</item>
859862
</string-array>
860863

861864
<!-- 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

@@ -1902,4 +1903,7 @@
19021903
<string name="album_grid_pref_horizontal_padding">Horizontal padding</string>
19031904

19041905
<string name="album_pref_compact_title">Compact title</string>
1906+
1907+
<string name="pref_behaviour_skiptopinned_title">Skip to pinned subreddits</string>
1908+
<string name="pref_behaviour_skiptopinned_key" translatable="false">pref_behaviour_skiptopinned</string>
19051909
</resources>

src/main/res/xml/prefs_behaviour.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
android:key="@string/pref_behaviour_skiptofrontpage_key"
2424
android:defaultValue="false"/>
2525

26+
<CheckBoxPreference android:title="@string/pref_behaviour_skiptopinned_title"
27+
android:key="@string/pref_behaviour_skiptopinned_key"
28+
android:defaultValue="false"/>
29+
2630
<CheckBoxPreference android:title="@string/pref_behaviour_useinternalbrowser_title"
2731
android:key="@string/pref_behaviour_useinternalbrowser_key"
2832
android:defaultValue="true"/>

0 commit comments

Comments
 (0)