From 5c593a102514b82a3a3c72fe20d53bcb549d9860 Mon Sep 17 00:00:00 2001 From: sk Date: Sat, 12 Nov 2022 20:20:45 +0100 Subject: [PATCH] improve adding/removing users from lists --- .../fragments/ListTimelineFragment.java | 9 +++ .../fragments/ListTimelinesFragment.java | 75 ++++++------------- .../android/fragments/ProfileFragment.java | 6 +- .../drawable/ic_fluent_delete_24_regular.xml | 3 + .../main/res/layout/item_list_timeline.xml | 17 ++--- mastodon/src/main/res/menu/list.xml | 13 ++++ mastodon/src/main/res/menu/profile.xml | 2 +- 7 files changed, 61 insertions(+), 64 deletions(-) create mode 100644 mastodon/src/main/res/drawable/ic_fluent_delete_24_regular.xml create mode 100644 mastodon/src/main/res/menu/list.xml diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelineFragment.java index 465170bb9..275a74f5a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelineFragment.java @@ -3,6 +3,8 @@ package org.joinmastodon.android.fragments; import android.app.Activity; import android.media.MediaRouter; import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageButton; @@ -33,6 +35,13 @@ public class ListTimelineFragment extends StatusListFragment { listID=getArguments().getString("listID"); listTitle=getArguments().getString("listTitle"); setTitle(listTitle); + setHasOptionsMenu(true); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + super.onCreateOptionsMenu(menu, inflater); + // inflater.inflate(R.menu.list, menu); } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelinesFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelinesFragment.java index d3cc19d4f..a78f256c5 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelinesFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ListTimelinesFragment.java @@ -58,7 +58,7 @@ public class ListTimelinesFragment extends BaseRecyclerFragment im profileAccountId=args.getString("profileAccount"); profileDisplayUsername=args.getString("profileDisplayUsername"); setTitle(getString(R.string.lists_with_user, profileDisplayUsername)); - setHasOptionsMenu(true); +// setHasOptionsMenu(true); } } @@ -69,54 +69,29 @@ public class ListTimelinesFragment extends BaseRecyclerFragment im loadData(); } - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - Button saveButton=new Button(getActivity()); - saveButton.setText(R.string.save); - saveButton.setOnClickListener(this::onSaveClick); - LinearLayout wrap=new LinearLayout(getActivity()); - wrap.setOrientation(LinearLayout.HORIZONTAL); - wrap.addView(saveButton, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); - wrap.setPadding(V.dp(16), V.dp(4), V.dp(16), V.dp(8)); - wrap.setClipToPadding(false); - MenuItem item=menu.add(R.string.save); - item.setActionView(wrap); - item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); - } +// @Override +// public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { +// Button saveButton=new Button(getActivity()); +// saveButton.setText(R.string.save); +// saveButton.setOnClickListener(this::onSaveClick); +// LinearLayout wrap=new LinearLayout(getActivity()); +// wrap.setOrientation(LinearLayout.HORIZONTAL); +// wrap.addView(saveButton, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); +// wrap.setPadding(V.dp(16), V.dp(4), V.dp(16), V.dp(8)); +// wrap.setClipToPadding(false); +// MenuItem item=menu.add(R.string.save); +// item.setActionView(wrap); +// item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); +// } - private void onSaveClick(View view) { - List addUserToLists = new ArrayList<>(); - List removeUserFromLists = new ArrayList<>(); - for (Map.Entry entry : userInList.entrySet()) { - Boolean changedValue = entry.getValue(); - String id = entry.getKey(); - if (changedValue != null && !changedValue.equals(userInListBefore.get(id))) { - (changedValue ? addUserToLists : removeUserFromLists).add(id); - } - } + private void saveListMembership(String listId, boolean isMember) { + userInList.put(listId, isMember); List accountIdList = Collections.singletonList(profileAccountId); - for (String listId : addUserToLists) { - inProgress++; - new AddAccountsToList(listId, accountIdList).setCallback(new SimpleCallback<>(this) { - @Override - public void onSuccess(Object o) { onRequestComplete(); } - @Override - public void onError(ErrorResponse error) { super.onError(error); onSuccess(null); } - }).exec(accountId); - } - for (String listId : removeUserFromLists) { - inProgress++; - new RemoveAccountsFromList(listId, accountIdList).setCallback(new SimpleCallback<>(this) { - @Override - public void onSuccess(Object o) { onRequestComplete(); } - @Override - public void onError(ErrorResponse error) { super.onError(error); onSuccess(null); } - }).exec(accountId); - } - } - - private void onRequestComplete() { - if (--inProgress == 0) reload(); + MastodonAPIRequest req = isMember ? new AddAccountsToList(listId, accountIdList) : new RemoveAccountsFromList(listId, accountIdList); + req.setCallback(new SimpleCallback<>(this) { + @Override + public void onSuccess(Object o) {} + }).exec(accountId); } @Override @@ -129,7 +104,7 @@ public class ListTimelinesFragment extends BaseRecyclerFragment im public void onSuccess(List lists) { for (ListTimeline l : lists) userInListBefore.put(l.id, true); userInList.putAll(userInListBefore); - onDataLoaded(lists, false); + if (profileAccountId == null || !lists.isEmpty()) onDataLoaded(lists, false); if (profileAccountId == null) return; currentRequest=new GetLists().setCallback(new SimpleCallback<>(ListTimelinesFragment.this) { @@ -202,9 +177,7 @@ public class ListTimelinesFragment extends BaseRecyclerFragment im } private void onClickToggle(View view) { - if (view instanceof CheckBox cb) { - userInList.put(item.id, cb.isChecked()); - } + saveListMembership(item.id, listToggle.isChecked()); } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java index 9318d8b5a..0bc906e4a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ProfileFragment.java @@ -532,10 +532,12 @@ public class ProfileFragment extends LoaderFragment implements OnBackPressedList menu.findItem(R.id.mute).setTitle(getString(relationship.muting ? R.string.unmute_user : R.string.mute_user, account.getDisplayUsername())); menu.findItem(R.id.block).setTitle(getString(relationship.blocking ? R.string.unblock_user : R.string.block_user, account.getDisplayUsername())); menu.findItem(R.id.report).setTitle(getString(R.string.report_user, account.getDisplayUsername())); - if(relationship.following) + if(relationship.following) { menu.findItem(R.id.hide_boosts).setTitle(getString(relationship.showingReblogs ? R.string.hide_boosts_from_user : R.string.show_boosts_from_user, account.getDisplayUsername())); - else + }else { menu.findItem(R.id.hide_boosts).setVisible(false); + menu.findItem(R.id.manage_user_lists).setVisible(false); + } if(!account.isLocal()) menu.findItem(R.id.block_domain).setTitle(getString(relationship.domainBlocking ? R.string.unblock_domain : R.string.block_domain, account.getDomain())); else diff --git a/mastodon/src/main/res/drawable/ic_fluent_delete_24_regular.xml b/mastodon/src/main/res/drawable/ic_fluent_delete_24_regular.xml new file mode 100644 index 000000000..774c339a2 --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_fluent_delete_24_regular.xml @@ -0,0 +1,3 @@ + + + diff --git a/mastodon/src/main/res/layout/item_list_timeline.xml b/mastodon/src/main/res/layout/item_list_timeline.xml index f3d3513ce..fa0e399f9 100644 --- a/mastodon/src/main/res/layout/item_list_timeline.xml +++ b/mastodon/src/main/res/layout/item_list_timeline.xml @@ -3,23 +3,18 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="56dp" - android:paddingHorizontal="16dp" android:orientation="horizontal" android:gravity="center"> - - + android:layout_height="match_parent" + android:paddingRight="16dp"/> diff --git a/mastodon/src/main/res/menu/list.xml b/mastodon/src/main/res/menu/list.xml new file mode 100644 index 000000000..7693ee429 --- /dev/null +++ b/mastodon/src/main/res/menu/list.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file diff --git a/mastodon/src/main/res/menu/profile.xml b/mastodon/src/main/res/menu/profile.xml index ef0356fdf..e1bf98e13 100644 --- a/mastodon/src/main/res/menu/profile.xml +++ b/mastodon/src/main/res/menu/profile.xml @@ -6,6 +6,6 @@ - + \ No newline at end of file