diff --git a/F-Droid/src/org/fdroid/fdroid/views/swap/JoinWifiView.java b/F-Droid/src/org/fdroid/fdroid/views/swap/JoinWifiView.java index 425488795..29d27aa69 100644 --- a/F-Droid/src/org/fdroid/fdroid/views/swap/JoinWifiView.java +++ b/F-Droid/src/org/fdroid/fdroid/views/swap/JoinWifiView.java @@ -60,19 +60,23 @@ public class JoinWifiView extends RelativeLayout implements SwapWorkflowActivity }); refreshWifiState(); - // TODO: This is effectively swap state management code, shouldn't be isolated to the - // WifiStateChangeService, but should be bundled with the main swap state handling code. LocalBroadcastManager.getInstance(getActivity()).registerReceiver( - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - refreshWifiState(); - } - }, + onWifiStateChange, new IntentFilter(WifiStateChangeService.BROADCAST) ); } + /** + * Remove relevant listeners/receivers/etc so that they do not receive and process events + * when this view is not in use. + */ + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + + LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(onWifiStateChange); + } + // TODO: Listen for "Connecting..." state and reflect that in the view too. private void refreshWifiState() { TextView descriptionView = (TextView) findViewById(R.id.text_description); @@ -138,4 +142,11 @@ public class JoinWifiView extends RelativeLayout implements SwapWorkflowActivity public String getToolbarTitle() { return getResources().getString(R.string.swap_join_same_wifi); } + + private final BroadcastReceiver onWifiStateChange = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + refreshWifiState(); + } + }; }