Avoid unnecessary updates when in background

This commit is contained in:
emanuele-f 2021-03-17 11:38:49 +01:00
parent 6ae6a0f7b8
commit adcc8b6e5a
4 changed files with 68 additions and 53 deletions

View File

@ -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);

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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)) {