Skip to content
This repository was archived by the owner on Oct 28, 2024. It is now read-only.

Commit 54c29fd

Browse files
committed
implement deleting lists
re: #30
1 parent 2945955 commit 54c29fd

File tree

5 files changed

+69
-13
lines changed

5 files changed

+69
-13
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.joinmastodon.android.api.requests.lists;
2+
3+
import org.joinmastodon.android.api.MastodonAPIRequest;
4+
import org.joinmastodon.android.model.ListTimeline;
5+
6+
public class DeleteList extends MastodonAPIRequest<Object> {
7+
public DeleteList(String id) {
8+
super(HttpMethod.DELETE, "/lists/" + id, Object.class);
9+
}
10+
}

mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelineFragment.java

+17-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.os.Bundle;
55
import android.view.Menu;
66
import android.view.MenuInflater;
7+
import android.view.MenuItem;
78
import android.view.View;
89
import android.view.ViewGroup;
910
import android.widget.ImageButton;
@@ -41,8 +42,22 @@ public void onAttach(Activity activity){
4142
@Override
4243
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
4344
super.onCreateOptionsMenu(menu, inflater);
44-
// TODO: implement edit, delete
45-
// inflater.inflate(R.menu.list, menu);
45+
inflater.inflate(R.menu.list, menu);
46+
}
47+
48+
@Override
49+
public boolean onOptionsItemSelected(MenuItem item) {
50+
if (item.getItemId() == R.id.edit) {
51+
52+
} else if (item.getItemId() == R.id.delete) {
53+
UiUtils.confirmDeleteList(getActivity(), accountID, listID, () -> {
54+
Bundle args = new Bundle();
55+
args.putString("listID", listID);
56+
setResult(true, args);
57+
Nav.finish(this);
58+
});
59+
}
60+
return true;
4661
}
4762

4863
@Override

mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelinesFragment.java

+24-3
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,14 @@
2020
import org.joinmastodon.android.api.requests.lists.RemoveAccountsFromList;
2121
import org.joinmastodon.android.model.ListTimeline;
2222
import org.joinmastodon.android.ui.M3AlertDialogBuilder;
23-
import org.joinmastodon.android.ui.utils.UiUtils;
2423
import org.joinmastodon.android.ui.views.ListTimelineEditor;
2524

2625
import java.util.ArrayList;
2726
import java.util.Collections;
2827
import java.util.HashMap;
2928
import java.util.List;
3029

30+
import me.grishka.appkit.Nav;
3131
import me.grishka.appkit.api.Callback;
3232
import me.grishka.appkit.api.ErrorResponse;
3333
import me.grishka.appkit.api.SimpleCallback;
@@ -36,6 +36,8 @@
3636
import me.grishka.appkit.views.UsableRecyclerView;
3737

3838
public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> implements ScrollableToTop {
39+
private static final int LIST_DELETED_RESULT = 987;
40+
3941
private String accountId;
4042
private String profileAccountId;
4143
private String profileDisplayUsername;
@@ -145,7 +147,22 @@ public void onSuccess(List<ListTimeline> allLists) {
145147
}
146148

147149
@Override
148-
protected RecyclerView.Adapter getAdapter() {
150+
public void onFragmentResult(int reqCode, boolean listDeleted, Bundle result){
151+
if (reqCode == LIST_DELETED_RESULT && listDeleted) {
152+
String listID = result.getString("listID");
153+
154+
for (int i = 0; i < data.size(); i++) {
155+
if (data.get(i).id.equals(listID)) {
156+
data.remove(i);
157+
adapter.notifyItemRemoved(i);
158+
break;
159+
}
160+
}
161+
}
162+
}
163+
164+
@Override
165+
protected RecyclerView.Adapter<ListViewHolder> getAdapter() {
149166
return adapter = new ListsAdapter();
150167
}
151168

@@ -202,7 +219,11 @@ private void onClickToggle(View view) {
202219

203220
@Override
204221
public void onClick() {
205-
UiUtils.openListTimeline(getActivity(), accountId, item);
222+
Bundle args=new Bundle();
223+
args.putString("account", accountId);
224+
args.putString("listID", item.id);
225+
args.putString("listTitle", item.title);
226+
Nav.goForResult(getActivity(), ListTimelineFragment.class, args, LIST_DELETED_RESULT, ListTimelinesFragment.this);
206227
}
207228
}
208229
}

mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java

+16-8
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import org.joinmastodon.android.api.requests.accounts.SetDomainBlocked;
5353
import org.joinmastodon.android.api.requests.accounts.AuthorizeFollowRequest;
5454
import org.joinmastodon.android.api.requests.accounts.RejectFollowRequest;
55+
import org.joinmastodon.android.api.requests.lists.DeleteList;
5556
import org.joinmastodon.android.api.requests.notifications.DismissNotification;
5657
import org.joinmastodon.android.api.requests.search.GetSearchResults;
5758
import org.joinmastodon.android.api.requests.statuses.CreateStatus;
@@ -339,14 +340,6 @@ public static void openHashtagTimeline(Context context, String accountID, String
339340
Nav.go((Activity)context, HashtagTimelineFragment.class, args);
340341
}
341342

342-
public static void openListTimeline(Context context, String accountID, ListTimeline list){
343-
Bundle args=new Bundle();
344-
args.putString("account", accountID);
345-
args.putString("listID", list.id);
346-
args.putString("listTitle", list.title);
347-
Nav.go((Activity)context, ListTimelineFragment.class, args);
348-
}
349-
350343
public static void showConfirmationAlert(Context context, @StringRes int title, @StringRes int message, @StringRes int confirmButton, Runnable onConfirmed){
351344
showConfirmationAlert(context, title, message, confirmButton, 0, onConfirmed);
352345
}
@@ -541,6 +534,21 @@ public void onError(ErrorResponse error) {
541534
);
542535
}
543536

537+
public static void confirmDeleteList(Activity activity, String accountID, String listID, Runnable callback) {
538+
showConfirmationAlert(activity, R.string.sk_delete_list, R.string.sk_delete_list_confirm, R.string.delete, R.drawable.ic_fluent_delete_28_regular,
539+
() -> new DeleteList(listID).setCallback(new Callback<>() {
540+
@Override
541+
public void onSuccess(Object o) {
542+
callback.run();
543+
}
544+
545+
@Override
546+
public void onError(ErrorResponse error) {
547+
error.showToast(activity);
548+
}
549+
}).exec(accountID));
550+
}
551+
544552
public static void setRelationshipToActionButton(Relationship relationship, Button button){
545553
setRelationshipToActionButton(relationship, button, false);
546554
}

mastodon/src/main/res/values/strings_sk.xml

+2
Original file line numberDiff line numberDiff line change
@@ -136,4 +136,6 @@
136136
<string name="sk_list_replies_policy_list">List members</string>
137137
<string name="sk_list_replies_policy_followed">Any followed user</string>
138138
<string name="sk_list_replies_policy_none">No one</string>
139+
<string name="sk_delete_list">Delete list</string>
140+
<string name="sk_delete_list_confirm">Are you sure you want to delete this list?</string>
139141
</resources>

0 commit comments

Comments
 (0)