Skip to content

Commit 34f412a

Browse files
committed
Action menu for subreddit combinations
1 parent 22058ed commit 34f412a

File tree

3 files changed

+136
-1
lines changed

3 files changed

+136
-1
lines changed

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

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
import org.quantumbadger.redreader.reddit.PostSort;
7575
import org.quantumbadger.redreader.reddit.RedditPostListItem;
7676
import org.quantumbadger.redreader.reddit.RedditSubredditManager;
77+
import org.quantumbadger.redreader.reddit.api.RedditAPISubredditCombinationAction;
7778
import org.quantumbadger.redreader.reddit.api.RedditSubredditSubscriptionManager;
7879
import org.quantumbadger.redreader.reddit.kthings.JsonUtils;
7980
import org.quantumbadger.redreader.reddit.kthings.MaybeParseError;
@@ -101,6 +102,7 @@
101102
import java.text.NumberFormat;
102103
import java.util.ArrayList;
103104
import java.util.HashSet;
105+
import java.util.List;
104106
import java.util.Locale;
105107
import java.util.UUID;
106108
import java.util.concurrent.atomic.AtomicInteger;
@@ -292,7 +294,6 @@ public void onScrolled(
292294

293295
case FRONTPAGE:
294296
case ALL:
295-
case SUBREDDIT_COMBINATION:
296297
case ALL_SUBTRACTION:
297298
case POPULAR:
298299
setHeader(
@@ -302,6 +303,12 @@ public void onScrolled(
302303
CacheManager.getInstance(context).makeRequest(mRequest);
303304
break;
304305

306+
case SUBREDDIT_COMBINATION:
307+
setSubredditCombinationHeader(
308+
mPostListingURL.humanReadableName(getActivity(), true),
309+
mPostListingURL.humanReadableUrl(),
310+
subredditPostListURL.subredditNames());
311+
305312
case RANDOM:
306313
case SUBREDDIT: {
307314

@@ -492,6 +499,28 @@ private void setHeader(
492499
}
493500
}
494501

502+
private void setSubredditCombinationHeader(
503+
@NonNull final String title,
504+
@NonNull final String subtitle,
505+
@NonNull final List<String> subredditNames) {
506+
507+
final PostListingHeader postListingHeader = new PostListingHeader(
508+
getActivity(),
509+
title,
510+
subtitle,
511+
mPostListingURL,
512+
null);
513+
514+
setHeader(postListingHeader);
515+
516+
postListingHeader.setOnLongClickListener(view -> {
517+
RedditAPISubredditCombinationAction.showActionMenu(
518+
getActivity(),
519+
subredditNames);
520+
return true;
521+
});
522+
}
523+
495524
private void setHeader(final View view) {
496525
getActivity().runOnUiThread(() -> mPostListingManager.addPostListingHeader(view));
497526
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/*******************************************************************************
2+
* This file is part of RedReader.
3+
*
4+
* RedReader is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
*
9+
* RedReader is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU General Public License
15+
* along with RedReader. If not, see <http://www.gnu.org/licenses/>.
16+
******************************************************************************/
17+
18+
package org.quantumbadger.redreader.reddit.api;
19+
20+
import android.content.Context;
21+
22+
import androidx.appcompat.app.AlertDialog;
23+
import androidx.appcompat.app.AppCompatActivity;
24+
25+
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
26+
27+
import org.quantumbadger.redreader.account.RedditAccount;
28+
import org.quantumbadger.redreader.account.RedditAccountManager;
29+
import java.util.ArrayList;
30+
import java.util.List;
31+
32+
public class RedditAPISubredditCombinationAction {
33+
34+
public enum SubredditCombinationAction {
35+
}
36+
37+
private static class RCVMenuItem {
38+
public final String title;
39+
public final SubredditCombinationAction action;
40+
41+
private RCVMenuItem(
42+
final Context context,
43+
final int titleRes,
44+
final SubredditCombinationAction action) {
45+
46+
this.title = context.getString(titleRes);
47+
this.action = action;
48+
}
49+
}
50+
51+
public static void showActionMenu(
52+
final AppCompatActivity activity,
53+
List<String> subredditNames) {
54+
55+
final RedditAccount user =
56+
RedditAccountManager.getInstance(activity).getDefaultAccount();
57+
58+
if (user.isAnonymous()) {
59+
return;
60+
}
61+
62+
final ArrayList<RCVMenuItem> menu = new ArrayList<>();
63+
64+
final String[] menuText = new String[menu.size()];
65+
66+
for(int i = 0; i < menuText.length; i++) {
67+
menuText[i] = menu.get(i).title;
68+
}
69+
70+
final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(activity);
71+
72+
builder.setItems(menuText, (dialog, which) -> onActionMenuItemSelected(
73+
activity,
74+
subredditNames,
75+
user,
76+
menu.get(which).action));
77+
78+
final AlertDialog alert = builder.create();
79+
alert.setCanceledOnTouchOutside(true);
80+
alert.show();
81+
}
82+
83+
private static void onActionMenuItemSelected(
84+
final AppCompatActivity activity,
85+
final List<String> subredditNames,
86+
final RedditAccount user,
87+
final SubredditCombinationAction action) {
88+
}
89+
}

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
import org.quantumbadger.redreader.reddit.things.SubredditCanonicalId;
3232

3333
import java.util.ArrayList;
34+
import java.util.Arrays;
35+
import java.util.Collections;
3436
import java.util.List;
3537

3638
public class SubredditPostListURL extends PostListingURL {
@@ -452,4 +454,19 @@ public String humanReadableName(final Context context, final boolean shorter) {
452454
public SubredditPostListURL changeSubreddit(final String newSubreddit) {
453455
return new SubredditPostListURL(type, newSubreddit, order, limit, before, after);
454456
}
457+
458+
public List<String> subredditNames() {
459+
if (subreddit == null) {
460+
return new ArrayList<>();
461+
}
462+
463+
switch (type) {
464+
case SUBREDDIT:
465+
return Collections.singletonList(subreddit);
466+
case SUBREDDIT_COMBINATION:
467+
return Arrays.asList(subreddit.split("\\+"));
468+
default:
469+
return Collections.emptyList();
470+
}
471+
}
455472
}

0 commit comments

Comments
 (0)