Skip to content

Commit 48f960a

Browse files
committed
Remove Subreddit action for multireddits
1 parent 63ff945 commit 48f960a

File tree

5 files changed

+273
-2
lines changed

5 files changed

+273
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
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.fragments;
19+
20+
import android.util.Log;
21+
import android.view.KeyEvent;
22+
import android.view.View;
23+
import android.view.WindowManager;
24+
import android.view.inputmethod.EditorInfo;
25+
import android.widget.ArrayAdapter;
26+
import android.widget.AutoCompleteTextView;
27+
import android.widget.Toast;
28+
29+
import androidx.annotation.NonNull;
30+
import androidx.appcompat.app.AlertDialog;
31+
import androidx.appcompat.app.AppCompatActivity;
32+
33+
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
34+
35+
import org.quantumbadger.redreader.R;
36+
import org.quantumbadger.redreader.account.RedditAccount;
37+
import org.quantumbadger.redreader.cache.CacheManager;
38+
import org.quantumbadger.redreader.cache.downloadstrategy.DownloadStrategyIfNotCached;
39+
import org.quantumbadger.redreader.common.RRError;
40+
import org.quantumbadger.redreader.reddit.APIResponseHandler;
41+
import org.quantumbadger.redreader.reddit.RedditAPI;
42+
import org.quantumbadger.redreader.views.liststatus.ErrorView;
43+
44+
import java.util.Collections;
45+
import java.util.List;
46+
47+
public class RemoveSubredditFromMultiDialog {
48+
49+
private final static String TAG = "RemoveSubFromMulti";
50+
51+
public static void show(
52+
final AppCompatActivity activity,
53+
final String multiredditName,
54+
final RedditAccount user) {
55+
56+
final MaterialAlertDialogBuilder alertBuilder
57+
= new MaterialAlertDialogBuilder(activity);
58+
59+
final View root = activity.getLayoutInflater().inflate(
60+
R.layout.remove_subreddit_from_multireddit,
61+
null);
62+
63+
RedditAPI.requestMultiredditSubredditList(
64+
CacheManager.getInstance(activity),
65+
multiredditName,
66+
user,
67+
activity,
68+
new APIResponseHandler
69+
.ValueResponseHandler<List<String>>(activity) {
70+
@Override
71+
protected void onSuccess(@NonNull final List<String> subreddits) {
72+
Collections.sort(subreddits);
73+
activity.runOnUiThread(() -> {
74+
showDialog(
75+
activity,
76+
multiredditName,
77+
subreddits,
78+
root,
79+
alertBuilder,
80+
user);
81+
});
82+
}
83+
84+
@Override
85+
protected void onCallbackException(final Throwable t) {
86+
Log.e(
87+
TAG,
88+
"Error while deleting multireddit",
89+
t);
90+
throw new RuntimeException(t);
91+
}
92+
93+
@Override
94+
protected void onFailure(@NonNull final RRError error) {
95+
activity.runOnUiThread(() -> {
96+
final MaterialAlertDialogBuilder builder
97+
= new MaterialAlertDialogBuilder(activity);
98+
builder.setView(new ErrorView(activity, error));
99+
builder.create().show();
100+
});
101+
}
102+
},
103+
DownloadStrategyIfNotCached.INSTANCE
104+
);
105+
}
106+
107+
private static void showDialog(
108+
final AppCompatActivity activity,
109+
final String multiredditName,
110+
final List<String> subreddits,
111+
final View root,
112+
final MaterialAlertDialogBuilder alertBuilder,
113+
final RedditAccount user
114+
) {
115+
final ArrayAdapter<String> autocompleteAdapter = new ArrayAdapter<>(
116+
activity,
117+
android.R.layout.simple_dropdown_item_1line,
118+
subreddits);
119+
120+
final AutoCompleteTextView editText
121+
= root.findViewById(R.id.selected_subreddit);
122+
editText.setAdapter(autocompleteAdapter);
123+
124+
alertBuilder.setView(root);
125+
126+
alertBuilder.setNegativeButton(R.string.dialog_cancel, null);
127+
128+
alertBuilder.setPositiveButton(
129+
R.string.dialog_go,
130+
(dialog, which) -> removeSubredditFromMultireddit(
131+
activity, editText, multiredditName, user));
132+
133+
final AlertDialog alertDialog = alertBuilder.create();
134+
135+
editText.setOnEditorActionListener((v, actionId, event) -> {
136+
if(actionId == EditorInfo.IME_ACTION_GO
137+
|| event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
138+
removeSubredditFromMultireddit(activity, editText, multiredditName, user);
139+
alertDialog.dismiss();
140+
}
141+
return false;
142+
});
143+
144+
alertDialog.getWindow()
145+
.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE
146+
| WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
147+
alertDialog.show();
148+
}
149+
150+
private static void removeSubredditFromMultireddit(
151+
final AppCompatActivity activity,
152+
final AutoCompleteTextView editText,
153+
final String multiredditName,
154+
final RedditAccount user) {
155+
156+
final String subredditName = editText.getText()
157+
.toString()
158+
.trim()
159+
.replace(" ", "");
160+
161+
RedditAPI.removeSubredditFromMultireddit(
162+
CacheManager.getInstance(activity),
163+
new APIResponseHandler.ActionResponseHandler(activity) {
164+
165+
@Override
166+
protected void onCallbackException(final Throwable t) {
167+
Log.e(
168+
TAG, "Error while removing subreddit from multireddit", t);
169+
throw new RuntimeException(t);
170+
}
171+
172+
@Override
173+
protected void onFailure(@NonNull final RRError error) {
174+
activity.runOnUiThread(() -> {
175+
final MaterialAlertDialogBuilder builder
176+
= new MaterialAlertDialogBuilder(activity);
177+
builder.setView(new ErrorView(activity, error));
178+
builder.create().show();
179+
});
180+
}
181+
182+
@Override
183+
protected void onSuccess() {
184+
activity.runOnUiThread(() -> Toast.makeText(
185+
activity,
186+
String.format("Removed %s from %s", subredditName, multiredditName),
187+
Toast.LENGTH_SHORT).show());
188+
}
189+
},
190+
user,
191+
multiredditName,
192+
subredditName,
193+
activity
194+
);
195+
196+
Toast.makeText(
197+
activity,
198+
String.format("Removing %s from %s", subredditName, multiredditName),
199+
Toast.LENGTH_SHORT).show();
200+
}
201+
}

src/main/java/org/quantumbadger/redreader/reddit/api/RedditAPIMultiredditAction.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,19 @@
2424

2525
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
2626

27+
import org.quantumbadger.redreader.R;
2728
import org.quantumbadger.redreader.account.RedditAccount;
2829
import org.quantumbadger.redreader.account.RedditAccountManager;
2930
import org.quantumbadger.redreader.common.PrefsUtility;
31+
import org.quantumbadger.redreader.fragments.RemoveSubredditFromMultiDialog;
3032

3133
import java.util.ArrayList;
3234
import java.util.EnumSet;
3335

3436
public class RedditAPIMultiredditAction {
3537

3638
public enum MultiredditAction {
39+
REMOVE_SUBREDDIT
3740
}
3841

3942
private static class RCVMenuItem {
@@ -70,6 +73,13 @@ public static void showActionMenu(
7073

7174
final ArrayList<RCVMenuItem> menu = new ArrayList<>();
7275

76+
if(itemPref.contains(MultiredditAction.REMOVE_SUBREDDIT)) {
77+
menu.add(new RCVMenuItem(
78+
activity,
79+
R.string.remove_from_multireddit,
80+
MultiredditAction.REMOVE_SUBREDDIT));
81+
}
82+
7383
final String[] menuText = new String[menu.size()];
7484

7585
for(int i = 0; i < menuText.length; i++) {
@@ -91,11 +101,13 @@ public static void showActionMenu(
91101

92102
private static void onActionMenuItemSelected(
93103
final AppCompatActivity activity,
94-
final String subredditNames,
104+
final String multiredditName,
95105
final RedditAccount user,
96106
final MultiredditAction action) {
97107

98108
switch(action) {
109+
case REMOVE_SUBREDDIT:
110+
RemoveSubredditFromMultiDialog.show(activity, multiredditName, user);
99111
}
100112
}
101113
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
3+
<!--
4+
~ This file is part of RedReader.
5+
~
6+
~ RedReader is free software: you can redistribute it and/or modify
7+
~ it under the terms of the GNU General Public License as published by
8+
~ the Free Software Foundation, either version 3 of the License, or
9+
~ (at your option) any later version.
10+
~
11+
~ RedReader is distributed in the hope that it will be useful,
12+
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
~ GNU General Public License for more details.
15+
~
16+
~ You should have received a copy of the GNU General Public License
17+
~ along with RedReader. If not, see <http://www.gnu.org/licenses/>.
18+
-->
19+
20+
<LinearLayout
21+
xmlns:android="http://schemas.android.com/apk/res/android"
22+
xmlns:tools="http://schemas.android.com/tools"
23+
android:id="@+id/add_to_multireddit_root"
24+
android:layout_width="match_parent"
25+
android:layout_height="wrap_content"
26+
android:orientation="vertical">
27+
28+
<TextView
29+
android:id="@+id/remove_from_multireddit_header"
30+
android:layout_width="match_parent"
31+
android:layout_height="wrap_content"
32+
android:layout_marginLeft="8dp"
33+
android:layout_marginRight="8dp"
34+
android:layout_marginTop="16dp"
35+
android:text="@string/remove_from_multireddit" />
36+
37+
<AutoCompleteTextView
38+
android:id="@+id/selected_subreddit"
39+
android:layout_width="match_parent"
40+
android:layout_height="wrap_content"
41+
android:layout_marginBottom="16dp"
42+
android:layout_marginLeft="16dp"
43+
android:layout_marginRight="16dp"
44+
android:layout_marginTop="16dp"
45+
android:inputType="textNoSuggestions"
46+
android:imeOptions="actionGo"
47+
android:completionThreshold="1"
48+
tools:ignore="LabelFor">
49+
50+
<requestFocus/>
51+
</AutoCompleteTextView>
52+
53+
</LinearLayout>

src/main/res/values/arrays.xml

+4-1
Original file line numberDiff line numberDiff line change
@@ -1330,7 +1330,10 @@
13301330

13311331
<!-- 2024-11-28 -->
13321332
<string-array name="pref_menus_multireddits_context_items">
1333+
<item>@string/remove_from_multireddit</item>
13331334
</string-array>
13341335

1335-
<string-array name="pref_menus_multireddits_context_items_return" />
1336+
<string-array name="pref_menus_multireddits_context_items_return">
1337+
<item>remove_subreddit</item>
1338+
</string-array>
13361339
</resources>

src/main/res/values/strings.xml

+2
Original file line numberDiff line numberDiff line change
@@ -1912,4 +1912,6 @@
19121912
<string name="pref_menus_multireddits_header">Multireddits</string>
19131913
<string name="pref_menus_multireddits_context_items_key">pref_menus_multireddit_context_items</string>
19141914
<string name="pref_menus_multireddits_context_items_title">Action menu items</string>
1915+
1916+
<string name="remove_from_multireddit">Remove Subreddit from Multireddit</string>>
19151917
</resources>

0 commit comments

Comments
 (0)