From 3830f930548774358b5bf27b96c466e4dd0eb4aa Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Wed, 11 Jan 2023 20:08:36 +0100 Subject: [PATCH] Add ability to sort apps Apps can now be sorted by name and total/sent/received bytes. The app sent/received bytes are now shown. Closes #245 --- .../activities/MainActivity.java | 4 +- .../adapters/AppsStatsAdapter.java | 37 ++++++++++++- .../fragments/AppsFragment.java | 53 ++++++++++++++++++- app/src/main/res/drawable/ic_sort.xml | 5 ++ app/src/main/res/layout/app_item.xml | 32 ++++++++--- app/src/main/res/menu/apps_menu.xml | 20 ++++++- app/src/main/res/values/strings.xml | 2 + 7 files changed, 142 insertions(+), 11 deletions(-) create mode 100644 app/src/main/res/drawable/ic_sort.xml diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java index ca986e31..d123620c 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java @@ -702,7 +702,9 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig startExportSslkeylogfile(); }); - builder.create().show(); + AlertDialog dialog = builder.create(); + dialog.setCanceledOnTouchOutside(false); + dialog.show(); } private void deletePcapFile(Uri pcapUri) { diff --git a/app/src/main/java/com/emanuelef/remote_capture/adapters/AppsStatsAdapter.java b/app/src/main/java/com/emanuelef/remote_capture/adapters/AppsStatsAdapter.java index a4349fa3..9f817d96 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/adapters/AppsStatsAdapter.java +++ b/app/src/main/java/com/emanuelef/remote_capture/adapters/AppsStatsAdapter.java @@ -19,6 +19,7 @@ package com.emanuelef.remote_capture.adapters; +import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import android.graphics.drawable.Drawable; @@ -61,6 +62,14 @@ public class AppsStatsAdapter extends RecyclerView.Adapter mStats; private final AppsResolver mApps; private AppStats mSelectedItem; + private SortField mSortField; + + public enum SortField { + NAME, + TOTAL_BYTES, + BYTES_SENT, + BYTES_RCVD + } public class ViewHolder extends RecyclerView.ViewHolder { ImageView icon; @@ -68,6 +77,7 @@ public class AppsStatsAdapter extends RecyclerView.Adapter(); mFirewallAvailable = Billing.newInstance(context).isFirewallVisible(); + mSortField = SortField.NAME; setHasStableIds(true); } @@ -198,6 +211,7 @@ public class AppsStatsAdapter extends RecyclerView.Adapter stats) { Collections.sort(stats, (o1, o2) -> { AppDescriptor a1 = mApps.getAppByUid(o1.getUid(), 0); @@ -212,10 +226,31 @@ public class AppsStatsAdapter extends RecyclerView.Adapter { @@ -143,7 +177,24 @@ public class AppsFragment extends Fragment implements ConnectionsListener, MenuP .show(); return true; + } else if(id == R.id.sort_by_name) { + mAdapter.setSortField(SortField.NAME); + refreshSortField(); + return true; + } else if(id == R.id.sort_by_total_bytes) { + mAdapter.setSortField(SortField.TOTAL_BYTES); + refreshSortField(); + return true; + } else if(id == R.id.sort_by_bytes_sent) { + mAdapter.setSortField(SortField.BYTES_SENT); + refreshSortField(); + return true; + } else if(id == R.id.sort_by_bytes_rcvd) { + mAdapter.setSortField(SortField.BYTES_RCVD); + refreshSortField(); + return true; } + return false; } diff --git a/app/src/main/res/drawable/ic_sort.xml b/app/src/main/res/drawable/ic_sort.xml new file mode 100644 index 00000000..f7e2fb98 --- /dev/null +++ b/app/src/main/res/drawable/ic_sort.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/app_item.xml b/app/src/main/res/layout/app_item.xml index 98e71627..efd2a5e7 100644 --- a/app/src/main/res/layout/app_item.xml +++ b/app/src/main/res/layout/app_item.xml @@ -12,19 +12,37 @@ - + android:layout_height="wrap_content"> + + + + + + + + + + + + + + + + + app:showAsAction="ifRoom"/> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 903eb21b..750aa0da 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -451,4 +451,6 @@ You are trying to import many rules, which could make the app unresponsive during some interactions. Do you really want to continue? PCAPNG format Dump packets in the PCAPNG dump format, which allows embedding TLS decryption secrets + Sort by + Total bytes