From f2c285e0fa1e8e07aa2bd787982e0edd0269e99d Mon Sep 17 00:00:00 2001
From: Peter Serwylo <peter@serwylo.com>
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();
+        }
+    };
+
 }