Skip to content

Commit 15863dc

Browse files
committed
Action menu for multireddits
1 parent 422df9a commit 15863dc

3 files changed

Lines changed: 131 additions & 3 deletions

File tree

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.quantumbadger.redreader.fragments.MainMenuFragment;
5252
import org.quantumbadger.redreader.receivers.announcements.Announcement;
5353
import org.quantumbadger.redreader.receivers.announcements.AnnouncementDownloader;
54+
import org.quantumbadger.redreader.reddit.api.RedditAPIMultiredditAction;
5455
import org.quantumbadger.redreader.reddit.api.RedditSubredditSubscriptionManager;
5556
import org.quantumbadger.redreader.reddit.api.SubredditSubscriptionState;
5657
import org.quantumbadger.redreader.reddit.things.SubredditCanonicalId;
@@ -951,13 +952,18 @@ private GroupedRecyclerViewItemListItemView makeMultiredditItem(
951952
final View.OnClickListener clickListener = view -> mListener.onSelected(
952953
(PostListingURL)MultiredditPostListURL.getMultireddit(name));
953954

955+
final View.OnLongClickListener longClickListener = view -> {
956+
RedditAPIMultiredditAction.showActionMenu(mActivity, name);
957+
return true;
958+
};
959+
954960
return new GroupedRecyclerViewItemListItemView(
955961
null,
956962
name,
957963
ScreenreaderPronunciation.getPronunciation(mContext, name),
958964
hideDivider,
959965
clickListener,
960-
null,
966+
longClickListener,
961967
Optional.empty(),
962968
Optional.empty(),
963969
Optional.empty());

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

Lines changed: 32 additions & 2 deletions
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.RedditAPIMultiredditAction;
7778
import org.quantumbadger.redreader.reddit.api.RedditSubredditSubscriptionManager;
7879
import org.quantumbadger.redreader.reddit.kthings.JsonUtils;
7980
import org.quantumbadger.redreader.reddit.kthings.MaybeParseError;
@@ -275,11 +276,18 @@ public void onScrolled(
275276
break;
276277

277278
case RedditURLParser.USER_POST_LISTING_URL:
278-
case RedditURLParser.MULTIREDDIT_POST_LISTING_URL:
279279
setHeader(
280+
mPostListingURL.humanReadableName(getActivity(), true),
281+
mPostListingURL.humanReadableUrl(),
282+
null);
283+
CacheManager.getInstance(context).makeRequest(mRequest);
284+
break;
285+
286+
case RedditURLParser.MULTIREDDIT_POST_LISTING_URL:
287+
setMultiredditHeader(
280288
mPostListingURL.humanReadableName(getActivity(), true),
281289
mPostListingURL.humanReadableUrl(),
282-
null);
290+
mPostListingURL.asMultiredditPostListURL().name);
283291
CacheManager.getInstance(context).makeRequest(mRequest);
284292
break;
285293

@@ -464,6 +472,28 @@ private void onSubredditReceived() {
464472

465473
}
466474

475+
private void setMultiredditHeader(
476+
@NonNull final String title,
477+
@NonNull final String subtitle,
478+
@NonNull final String multiredditName) {
479+
480+
final PostListingHeader postListingHeader = new PostListingHeader(
481+
getActivity(),
482+
title,
483+
subtitle,
484+
mPostListingURL,
485+
null);
486+
487+
setHeader(postListingHeader);
488+
489+
postListingHeader.setOnLongClickListener(view -> {
490+
RedditAPIMultiredditAction.showActionMenu(
491+
getActivity(),
492+
multiredditName);
493+
return true;
494+
});
495+
}
496+
467497
private void setHeader(
468498
@NonNull final String title,
469499
@NonNull final String subtitle,
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
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+
30+
import java.util.ArrayList;
31+
32+
public class RedditAPIMultiredditAction {
33+
34+
public enum MultiredditAction {
35+
}
36+
37+
private static class RCVMenuItem {
38+
public final String title;
39+
public final MultiredditAction action;
40+
41+
private RCVMenuItem(
42+
final Context context,
43+
final int titleRes,
44+
final MultiredditAction 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+
final String multiredditName) {
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+
multiredditName,
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 String subredditNames,
86+
final RedditAccount user,
87+
final MultiredditAction action) {
88+
89+
switch(action) {
90+
}
91+
}
92+
}

0 commit comments

Comments
 (0)