From cfe2f71e4d73b87b8398a9e4fc7399c3697a7445 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Mon, 21 Mar 2016 22:23:54 +1100 Subject: [PATCH] Correctly unregister receiver in "qr code" swap view. Previously the receiver was added but never removed. The result is that once a swap session is cancelled, the receiver still gets broadcasts. --- .../fdroid/fdroid/views/swap/WifiQrView.java | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/F-Droid/src/org/fdroid/fdroid/views/swap/WifiQrView.java b/F-Droid/src/org/fdroid/fdroid/views/swap/WifiQrView.java index bb4447348..34fe99e8c 100644 --- a/F-Droid/src/org/fdroid/fdroid/views/swap/WifiQrView.java +++ b/F-Droid/src/org/fdroid/fdroid/views/swap/WifiQrView.java @@ -78,16 +78,19 @@ public class WifiQrView extends ScrollView implements SwapWorkflowActivity.Inner } }); - // TODO: Unregister this receiver properly. LocalBroadcastManager.getInstance(getActivity()).registerReceiver( - new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - setUIFromWifi(); - } - }, - new IntentFilter(WifiStateChangeService.BROADCAST) - ); + onWifiStateChanged, 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(onWifiStateChanged); } @Override @@ -167,4 +170,11 @@ public class WifiQrView extends ScrollView implements SwapWorkflowActivity.Inner } + private BroadcastReceiver onWifiStateChanged = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + setUIFromWifi(); + } + }; + }