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