From adcc8b6e5a73ef5788fac34812c0e9ce92d299ba Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Wed, 17 Mar 2021 11:38:49 +0100 Subject: [PATCH] Avoid unnecessary updates when in background --- .../remote_capture/CaptureService.java | 2 +- .../fragments/AppsFragment.java | 22 ++++--- .../fragments/ConnectionsFragment.java | 36 ++++++----- .../fragments/StatusFragment.java | 61 ++++++++++--------- 4 files changed, 68 insertions(+), 53 deletions(-) diff --git a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java index d7636111..833ff93e 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java +++ b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java @@ -553,7 +553,7 @@ public class CaptureService extends VpnService implements Runnable { } public void sendStatsDump(VPNStats stats) { - Log.d(TAG, "sendStatsDump"); + //Log.d(TAG, "sendStatsDump"); Bundle bundle = new Bundle(); bundle.putSerializable("value", stats); diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/AppsFragment.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/AppsFragment.java index d0c19df6..12fa1632 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/AppsFragment.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/AppsFragment.java @@ -56,12 +56,19 @@ public class AppsFragment extends Fragment implements ConnectionsListener { private BroadcastReceiver mReceiver; @Override - public void onDestroy() { - super.onDestroy(); + public void onPause() { + super.onPause(); unregisterConnsListener(); } + @Override + public void onResume() { + super.onResume(); + + registerConnsListener(); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -95,8 +102,6 @@ public class AppsFragment extends Fragment implements ConnectionsListener { } }); - registerConnsListener(); - /* Register for service status */ mReceiver = new BroadcastReceiver() { @Override @@ -104,9 +109,11 @@ public class AppsFragment extends Fragment implements ConnectionsListener { String status = intent.getStringExtra(CaptureService.SERVICE_STATUS_KEY); if(CaptureService.SERVICE_STATUS_STARTED.equals(status)) { - // register the new connection register - unregisterConnsListener(); - registerConnsListener(); + if(listenerSet) { + // register the new connection register + unregisterConnsListener(); + registerConnsListener(); + } } } }; @@ -122,6 +129,7 @@ public class AppsFragment extends Fragment implements ConnectionsListener { if(mReceiver != null) { LocalBroadcastManager.getInstance(requireContext()) .unregisterReceiver(mReceiver); + mReceiver = null; } } diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java index cf3065a0..8290c833 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java @@ -88,8 +88,15 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener private AppsResolver mApps; @Override - public void onDestroy() { - super.onDestroy(); + public void onResume() { + super.onResume(); + + registerConnsListener(); + } + + @Override + public void onPause() { + super.onPause(); unregisterConnsListener(); } @@ -191,7 +198,6 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener } }); - registerConnsListener(); refreshMenuIcons(); int uidFilter = Utils.UID_NO_FILTER; @@ -221,8 +227,10 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener if(CaptureService.SERVICE_STATUS_STARTED.equals(status)) { // register the new connection register - unregisterConnsListener(); - registerConnsListener(); + if(listenerSet) { + unregisterConnsListener(); + registerConnsListener(); + } autoScroll = true; showFabDown(false); @@ -291,11 +299,6 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener mOldConnectionsText.setVisibility(View.GONE); } - @Override - public void onResume() { - super.onResume(); - } - // This performs an unoptimized adapter refresh private void refreshUidConnections() { ConnectionsRegister reg = CaptureService.getConnsRegister(); @@ -315,7 +318,7 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener } @Override - public void connectionsChanges(int num_connetions) { + public void connectionsChanges(int num_connections) { // Important: must use the provided num_connections rather than accessing the register // in order to avoid desyncs @@ -325,9 +328,9 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener return; } - Log.d(TAG, "New dataset size: " + num_connetions); + Log.d(TAG, "New dataset size: " + num_connections); - mAdapter.setItemCount(num_connetions); + mAdapter.setItemCount(num_connections); mAdapter.notifyDataSetChanged(); recheckScroll(); @@ -452,9 +455,12 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener if(mAdapter.getUidFilter() != uid) { // rather than calling refreshAllTheConnections, its better to let the register to the // job by properly scheduling the ConnectionsListener callbacks + boolean hasListener = listenerSet; unregisterConnsListener(); mAdapter.setUidFilter(uid); - registerConnsListener(); + + if(hasListener) + registerConnsListener(); } refreshFilterIcon(); @@ -465,7 +471,7 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener return; int uid = mAdapter.getUidFilter(); - AppDescriptor app = mApps.get(uid); + AppDescriptor app = (uid != Utils.UID_NO_FILTER) ? mApps.get(uid) : null; if(app == null) app = mNoFilterApp; diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/StatusFragment.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/StatusFragment.java index fc1a1244..d68131c4 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/StatusFragment.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/StatusFragment.java @@ -100,6 +100,36 @@ public class StatusFragment extends Fragment implements AppStateListener, AppsLo super.onDestroy(); } + @Override + public void onResume() { + super.onResume(); + + if((mMenu != null) && (mActivity != null)) + appStateChanged(mActivity.getState()); + + /* Register for stats update */ + mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + processStatsUpdateIntent(intent); + } + }; + + LocalBroadcastManager.getInstance(requireContext()) + .registerReceiver(mReceiver, new IntentFilter(CaptureService.ACTION_STATS_DUMP)); + } + + @Override + public void onPause() { + super.onPause(); + + if(mReceiver != null) { + LocalBroadcastManager.getInstance(requireContext()) + .unregisterReceiver(mReceiver); + mReceiver = null; + } + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -181,17 +211,6 @@ public class StatusFragment extends Fragment implements AppStateListener, AppsLo // Make URLs clickable mCollectorInfo.setMovementMethod(LinkMovementMethod.getInstance()); - /* Register for stats update */ - mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - processStatsUpdateIntent(intent); - } - }; - - LocalBroadcastManager.getInstance(requireContext()) - .registerReceiver(mReceiver, new IntentFilter(CaptureService.ACTION_STATS_DUMP)); - /* Important: call this after all the fields have been initialized */ mActivity.setAppStateListener(this); @@ -199,16 +218,6 @@ public class StatusFragment extends Fragment implements AppStateListener, AppsLo appStateChanged(mActivity.getState()); } - @Override - public void onDestroyView() { - super.onDestroyView(); - - if(mReceiver != null) { - LocalBroadcastManager.getInstance(requireContext()) - .unregisterReceiver(mReceiver); - } - } - @Override public void onCreateOptionsMenu(@NonNull Menu menu, MenuInflater menuInflater) { menuInflater.inflate(R.menu.main_menu, menu); @@ -221,14 +230,6 @@ public class StatusFragment extends Fragment implements AppStateListener, AppsLo appStateChanged(mActivity.getState()); } - @Override - public void onResume() { - super.onResume(); - - if((mMenu != null) && (mActivity != null)) - appStateChanged(mActivity.getState()); - } - private void refreshFilterInfo() { if((mAppFilter == null) || (mAppFilter.isEmpty())) { mFilterDescription.setText(R.string.no_app_filter); @@ -309,7 +310,7 @@ private void refreshPcapDumpInfo() { mCollectorInfo.setText(info); // Check if a filter is set - if(mAppFilter != null) { + if((mAppFilter != null) && (!mAppFilter.isEmpty())) { AppDescriptor app = AppsResolver.resolve(requireContext().getPackageManager(), mAppFilter); if((app != null) && (app.getIcon() != null)) {