mirror of
https://github.com/emanuele-f/PCAPdroid.git
synced 2026-07-03 21:21:12 +08:00
Fix context menu action applied to wrong item
When connections rollover occurred (after 8192 connections seen), a context menu action could be applied to a wrong item if a new connection appeared before the user selected an action from the context menu Fixes #237
This commit is contained in:
parent
11e860a988
commit
965077218c
@ -54,7 +54,7 @@ public class AppsStatsAdapter extends RecyclerView.Adapter<AppsStatsAdapter.View
|
||||
private View.OnClickListener mListener;
|
||||
private List<AppStats> mStats;
|
||||
private final AppsResolver mApps;
|
||||
private int mClickedPosition;
|
||||
private AppStats mSelectedItem;
|
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder {
|
||||
ImageView icon;
|
||||
@ -131,7 +131,7 @@ public class AppsStatsAdapter extends RecyclerView.Adapter<AppsStatsAdapter.View
|
||||
|
||||
view.setOnLongClickListener(v -> {
|
||||
// see registerForContextMenu
|
||||
mClickedPosition = holder.getAbsoluteAdapterPosition();
|
||||
mSelectedItem = getItem(holder.getAbsoluteAdapterPosition());
|
||||
return false;
|
||||
});
|
||||
}
|
||||
@ -160,8 +160,14 @@ public class AppsStatsAdapter extends RecyclerView.Adapter<AppsStatsAdapter.View
|
||||
return mStats.get(pos);
|
||||
}
|
||||
|
||||
public int getClickedItemPos() {
|
||||
return mClickedPosition;
|
||||
public AppStats getSelectedItem() {
|
||||
return mSelectedItem;
|
||||
}
|
||||
|
||||
public void notifyItemChanged(AppStats app) {
|
||||
int pos = mStats.indexOf(app);
|
||||
if(pos >= 0)
|
||||
notifyItemChanged(pos);
|
||||
}
|
||||
|
||||
public String getItemPackage(int pos) {
|
||||
|
||||
@ -60,7 +60,7 @@ public class ConnectionsAdapter extends RecyclerView.Adapter<ConnectionsAdapter.
|
||||
private View.OnClickListener mListener;
|
||||
private final AppsResolver mApps;
|
||||
private final Context mContext;
|
||||
private int mClickedPosition;
|
||||
private ConnectionDescriptor mSelectedItem;
|
||||
private int mNumRemovedItems;
|
||||
|
||||
// maps a connection ID to a position in mFilteredConn. Positions are shifted by mNumRemovedItems
|
||||
@ -201,7 +201,7 @@ public class ConnectionsAdapter extends RecyclerView.Adapter<ConnectionsAdapter.
|
||||
|
||||
view.setOnLongClickListener(v -> {
|
||||
// see registerForContextMenu
|
||||
mClickedPosition = holder.getAbsoluteAdapterPosition();
|
||||
mSelectedItem = getItem(holder.getAbsoluteAdapterPosition());
|
||||
return false;
|
||||
});
|
||||
|
||||
@ -431,8 +431,8 @@ public class ConnectionsAdapter extends RecyclerView.Adapter<ConnectionsAdapter.
|
||||
mListener = listener;
|
||||
}
|
||||
|
||||
public ConnectionDescriptor getClickedItem() {
|
||||
return getItem(mClickedPosition);
|
||||
public ConnectionDescriptor getSelectedItem() {
|
||||
return mSelectedItem;
|
||||
}
|
||||
|
||||
public boolean hasFilter() {
|
||||
|
||||
@ -146,7 +146,7 @@ public class AppsFragment extends Fragment implements ConnectionsListener {
|
||||
MenuInflater inflater = requireActivity().getMenuInflater();
|
||||
inflater.inflate(R.menu.app_context_menu, menu);
|
||||
|
||||
AppStats stats = mAdapter.getItem(mAdapter.getClickedItemPos());
|
||||
AppStats stats = mAdapter.getSelectedItem();
|
||||
if(stats == null)
|
||||
return;
|
||||
|
||||
@ -166,8 +166,7 @@ public class AppsFragment extends Fragment implements ConnectionsListener {
|
||||
public boolean onContextItemSelected(@NonNull MenuItem item) {
|
||||
int id = item.getItemId();
|
||||
Blocklist blocklist = PCAPdroid.getInstance().getBlocklist();
|
||||
int itemPos = mAdapter.getClickedItemPos();
|
||||
AppStats app = mAdapter.getItem(itemPos);
|
||||
AppStats app = mAdapter.getSelectedItem();
|
||||
|
||||
if(id == R.id.block_app)
|
||||
blocklist.addApp(app.getUid());
|
||||
@ -187,7 +186,7 @@ public class AppsFragment extends Fragment implements ConnectionsListener {
|
||||
CaptureService.requireInstance().reloadBlocklist();
|
||||
|
||||
// refresh the item
|
||||
mAdapter.notifyItemChanged(itemPos);
|
||||
mAdapter.notifyItemChanged(app);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -304,7 +304,7 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener
|
||||
inflater.inflate(R.menu.connection_context_menu, menu);
|
||||
int max_length = 32;
|
||||
|
||||
ConnectionDescriptor conn = mAdapter.getClickedItem();
|
||||
ConnectionDescriptor conn = mAdapter.getSelectedItem();
|
||||
if(conn == null)
|
||||
return;
|
||||
|
||||
@ -455,7 +455,7 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener
|
||||
@Override
|
||||
public boolean onContextItemSelected(@NonNull MenuItem item) {
|
||||
Context ctx = requireContext();
|
||||
ConnectionDescriptor conn = mAdapter.getClickedItem();
|
||||
ConnectionDescriptor conn = mAdapter.getSelectedItem();
|
||||
MatchList whitelist = PCAPdroid.getInstance().getMalwareWhitelist();
|
||||
Blocklist blocklist = PCAPdroid.getInstance().getBlocklist();
|
||||
boolean mask_changed = false;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user