improve adding/removing users from lists

This commit is contained in:
sk 2022-11-12 20:20:45 +01:00
parent 625134605b
commit 5c593a1025
7 changed files with 61 additions and 64 deletions

View File

@ -3,6 +3,8 @@ package org.joinmastodon.android.fragments;
import android.app.Activity; import android.app.Activity;
import android.media.MediaRouter; import android.media.MediaRouter;
import android.os.Bundle; import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageButton; import android.widget.ImageButton;
@ -33,6 +35,13 @@ public class ListTimelineFragment extends StatusListFragment {
listID=getArguments().getString("listID"); listID=getArguments().getString("listID");
listTitle=getArguments().getString("listTitle"); listTitle=getArguments().getString("listTitle");
setTitle(listTitle); setTitle(listTitle);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
// inflater.inflate(R.menu.list, menu);
} }
@Override @Override

View File

@ -58,7 +58,7 @@ public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> im
profileAccountId=args.getString("profileAccount"); profileAccountId=args.getString("profileAccount");
profileDisplayUsername=args.getString("profileDisplayUsername"); profileDisplayUsername=args.getString("profileDisplayUsername");
setTitle(getString(R.string.lists_with_user, profileDisplayUsername)); setTitle(getString(R.string.lists_with_user, profileDisplayUsername));
setHasOptionsMenu(true); // setHasOptionsMenu(true);
} }
} }
@ -69,54 +69,29 @@ public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> im
loadData(); loadData();
} }
@Override // @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
Button saveButton=new Button(getActivity()); // Button saveButton=new Button(getActivity());
saveButton.setText(R.string.save); // saveButton.setText(R.string.save);
saveButton.setOnClickListener(this::onSaveClick); // saveButton.setOnClickListener(this::onSaveClick);
LinearLayout wrap=new LinearLayout(getActivity()); // LinearLayout wrap=new LinearLayout(getActivity());
wrap.setOrientation(LinearLayout.HORIZONTAL); // wrap.setOrientation(LinearLayout.HORIZONTAL);
wrap.addView(saveButton, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); // 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.setPadding(V.dp(16), V.dp(4), V.dp(16), V.dp(8));
wrap.setClipToPadding(false); // wrap.setClipToPadding(false);
MenuItem item=menu.add(R.string.save); // MenuItem item=menu.add(R.string.save);
item.setActionView(wrap); // item.setActionView(wrap);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); // item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
} // }
private void onSaveClick(View view) { private void saveListMembership(String listId, boolean isMember) {
List<String> addUserToLists = new ArrayList<>(); userInList.put(listId, isMember);
List<String> removeUserFromLists = new ArrayList<>();
for (Map.Entry<String, Boolean> entry : userInList.entrySet()) {
Boolean changedValue = entry.getValue();
String id = entry.getKey();
if (changedValue != null && !changedValue.equals(userInListBefore.get(id))) {
(changedValue ? addUserToLists : removeUserFromLists).add(id);
}
}
List<String> accountIdList = Collections.singletonList(profileAccountId); List<String> accountIdList = Collections.singletonList(profileAccountId);
for (String listId : addUserToLists) { MastodonAPIRequest<Object> req = isMember ? new AddAccountsToList(listId, accountIdList) : new RemoveAccountsFromList(listId, accountIdList);
inProgress++; req.setCallback(new SimpleCallback<>(this) {
new AddAccountsToList(listId, accountIdList).setCallback(new SimpleCallback<>(this) { @Override
@Override public void onSuccess(Object o) {}
public void onSuccess(Object o) { onRequestComplete(); } }).exec(accountId);
@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();
} }
@Override @Override
@ -129,7 +104,7 @@ public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> im
public void onSuccess(List<ListTimeline> lists) { public void onSuccess(List<ListTimeline> lists) {
for (ListTimeline l : lists) userInListBefore.put(l.id, true); for (ListTimeline l : lists) userInListBefore.put(l.id, true);
userInList.putAll(userInListBefore); userInList.putAll(userInListBefore);
onDataLoaded(lists, false); if (profileAccountId == null || !lists.isEmpty()) onDataLoaded(lists, false);
if (profileAccountId == null) return; if (profileAccountId == null) return;
currentRequest=new GetLists().setCallback(new SimpleCallback<>(ListTimelinesFragment.this) { currentRequest=new GetLists().setCallback(new SimpleCallback<>(ListTimelinesFragment.this) {
@ -202,9 +177,7 @@ public class ListTimelinesFragment extends BaseRecyclerFragment<ListTimeline> im
} }
private void onClickToggle(View view) { private void onClickToggle(View view) {
if (view instanceof CheckBox cb) { saveListMembership(item.id, listToggle.isChecked());
userInList.put(item.id, cb.isChecked());
}
} }
@Override @Override

View File

@ -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.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.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())); 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())); 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.hide_boosts).setVisible(false);
menu.findItem(R.id.manage_user_lists).setVisible(false);
}
if(!account.isLocal()) if(!account.isLocal())
menu.findItem(R.id.block_domain).setTitle(getString(relationship.domainBlocking ? R.string.unblock_domain : R.string.block_domain, account.getDomain())); menu.findItem(R.id.block_domain).setTitle(getString(relationship.domainBlocking ? R.string.unblock_domain : R.string.block_domain, account.getDomain()));
else else

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M10 5h4c0-1.105-0.895-2-2-2s-2 0.895-2 2zM8.5 5c0-1.933 1.567-3.5 3.5-3.5s3.5 1.567 3.5 3.5h5.75C21.664 5 22 5.336 22 5.75S21.664 6.5 21.25 6.5h-1.32l-1.17 12.111C18.573 20.533 16.957 22 15.026 22H8.974c-1.931 0-3.547-1.467-3.733-3.389L4.07 6.5H2.75C2.336 6.5 2 6.164 2 5.75S2.336 5 2.75 5H8.5zm2 4.75C10.5 9.336 10.164 9 9.75 9S9 9.336 9 9.75v7.5C9 17.664 9.336 18 9.75 18s0.75-0.336 0.75-0.75v-7.5zM14.25 9C14.664 9 15 9.336 15 9.75v7.5c0 0.414-0.336 0.75-0.75 0.75s-0.75-0.336-0.75-0.75v-7.5C13.5 9.336 13.836 9 14.25 9zm-7.516 9.467C6.846 19.62 7.815 20.5 8.974 20.5h6.052c1.159 0 2.128-0.88 2.24-2.033L18.424 6.5H5.576l1.158 11.967z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -3,23 +3,18 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="56dp" android:layout_height="56dp"
android:paddingHorizontal="16dp"
android:orientation="horizontal" android:orientation="horizontal"
android:gravity="center"> android:gravity="center">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="16dp"
android:tint="?android:textColorSecondary"
android:src="@drawable/ic_fluent_people_community_24_regular"
android:importantForAccessibility="no"/>
<TextView <TextView
android:id="@+id/title" android:id="@+id/title"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:paddingHorizontal="16dp"
android:drawableLeft="@drawable/ic_fluent_people_community_24_regular"
android:drawableTint="?android:textColorSecondary"
android:drawablePadding="16dp"
android:textAppearance="@style/m3_title_medium" android:textAppearance="@style/m3_title_medium"
android:fontFamily="sans-serif" android:fontFamily="sans-serif"
android:singleLine="true" android:singleLine="true"
@ -28,7 +23,9 @@
<CheckBox <CheckBox
android:id="@+id/list_toggle" android:id="@+id/list_toggle"
android:clickable="false"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="match_parent"
android:paddingRight="16dp"/>
</LinearLayout> </LinearLayout>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/edit"
android:title="@string/edit"
android:icon="@drawable/ic_fluent_edit_24_regular"
android:showAsAction="always"/>
<item
android:id="@+id/delete"
android:title="@string/delete"
android:icon="@drawable/ic_fluent_delete_24_regular"
android:showAsAction="always"/>
</menu>

View File

@ -6,6 +6,6 @@
<item android:id="@+id/report" android:title="@string/report_user"/> <item android:id="@+id/report" android:title="@string/report_user"/>
<item android:id="@+id/block_domain" android:title="@string/block_domain"/> <item android:id="@+id/block_domain" android:title="@string/block_domain"/>
<item android:id="@+id/hide_boosts" android:title="@string/hide_boosts_from_user"/> <item android:id="@+id/hide_boosts" android:title="@string/hide_boosts_from_user"/>
<item android:id="@+id/open_in_browser" android:title="@string/open_in_browser"/>
<item android:id="@+id/manage_user_lists" android:title="@string/lists_with_user"/> <item android:id="@+id/manage_user_lists" android:title="@string/lists_with_user"/>
<item android:id="@+id/open_in_browser" android:title="@string/open_in_browser"/>
</menu> </menu>