make onContextItemSelected() being called

This commit is contained in:
B. Petersen
2024-08-01 18:04:02 +02:00
parent 60830d389e
commit 4a18c0150b
3 changed files with 25 additions and 9 deletions
@@ -1,5 +1,6 @@
package org.thoughtcrime.securesms.accounts;
import android.app.Activity;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
@@ -20,6 +21,7 @@ import org.thoughtcrime.securesms.mms.GlideRequests;
public class AccountSelectionListAdapter extends RecyclerView.Adapter
{
private final @NonNull AccountSelectionListFragment fragment;
private final @NonNull Context context;
private final @NonNull DcAccounts accounts;
private @NonNull int[] accountList = new int[0];
@@ -39,7 +41,7 @@ public class AccountSelectionListAdapter extends RecyclerView.Adapter
super(itemView);
}
public abstract void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected, boolean isMuted);
public abstract void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected, boolean isMuted, AccountSelectionListFragment fragment);
public abstract void unbind(@NonNull GlideRequests glideRequests);
}
@@ -59,8 +61,8 @@ public class AccountSelectionListAdapter extends RecyclerView.Adapter
return (AccountSelectionListItem) itemView;
}
public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected, boolean isMuted) {
getView().bind(glideRequests, accountId, self, name, addr, unreadCount, selected, isMuted);
public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected, boolean isMuted, AccountSelectionListFragment fragment) {
getView().bind(glideRequests, accountId, self, name, addr, unreadCount, selected, isMuted, fragment);
}
@Override
@@ -69,12 +71,13 @@ public class AccountSelectionListAdapter extends RecyclerView.Adapter
}
}
public AccountSelectionListAdapter(@NonNull Context context,
public AccountSelectionListAdapter(@NonNull AccountSelectionListFragment fragment,
@NonNull GlideRequests glideRequests,
@Nullable ItemClickListener clickListener)
{
super();
this.context = context;
this.fragment = fragment;
this.context = fragment.getActivity();
this.accounts = DcHelper.getAccounts(context);
this.li = LayoutInflater.from(context);
this.glideRequests = glideRequests;
@@ -111,7 +114,7 @@ public class AccountSelectionListAdapter extends RecyclerView.Adapter
ViewHolder holder = (ViewHolder) viewHolder;
holder.unbind(glideRequests);
holder.bind(glideRequests, id, dcContact, name, addr, unreadCount, id == selectedAccountId, dcContext.isMuted());
holder.bind(glideRequests, id, dcContact, name, addr, unreadCount, id == selectedAccountId, dcContext.isMuted(), fragment);
}
public interface ItemClickListener {
@@ -34,11 +34,10 @@ public class AccountSelectionListFragment extends DialogFragment
@Override
public void onActivityCreated(Bundle icicle) {
super.onActivityCreated(icicle);
AccountSelectionListAdapter adapter = new AccountSelectionListAdapter(getActivity(),
AccountSelectionListAdapter adapter = new AccountSelectionListAdapter(this,
GlideApp.with(getActivity()),
new ListClickListener());
recyclerView.setAdapter(adapter);
registerForContextMenu(recyclerView);
DcAccounts accounts = DcHelper.getAccounts(getActivity());
int[] accountIds = accounts.getAll();
@@ -74,6 +73,17 @@ public class AccountSelectionListFragment extends DialogFragment
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
requireActivity().getMenuInflater().inflate(R.menu.account_item_context, menu);
// hack to make onContextItemSelected() work with DialogFragment,
// see https://stackoverflow.com/questions/15929026/oncontextitemselected-does-not-get-called-in-a-dialogfragment
MenuItem.OnMenuItemClickListener listener = item -> {
onContextItemSelected(item);
return true;
};
for (int i = 0, n = menu.size(); i < n; i++) {
menu.getItem(i).setOnMenuItemClickListener(listener);
}
// /hack
}
@Override
@@ -1,5 +1,6 @@
package org.thoughtcrime.securesms.accounts;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
@@ -55,7 +56,7 @@ public class AccountSelectionListItem extends LinearLayout {
ViewUtil.setTextViewGravityStart(this.nameView, getContext());
}
public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected, boolean isMuted) {
public void bind(@NonNull GlideRequests glideRequests, int accountId, DcContact self, String name, String addr, int unreadCount, boolean selected, boolean isMuted, AccountSelectionListFragment fragment) {
this.accountId = accountId;
Recipient recipient;
@@ -80,6 +81,8 @@ public class AccountSelectionListItem extends LinearLayout {
updateUnreadIndicator(unreadCount, isMuted);
setText(name, addr);
fragment.registerForContextMenu(this);
}
public void unbind(GlideRequests glideRequests) {