From 351af8ebd13ee9d2a8f1bc659b544957aed5be55 Mon Sep 17 00:00:00 2001 From: David Magno Date: Tue, 8 Mar 2022 14:40:05 +0100 Subject: [PATCH] Crash when scanning WiFi QR code Fix two crashes when scanning a WiFi QR code. The crashes are due to the asynchronous nature of the scan/decode process, where the result is delivered after the activity has been destroyed. Bug: 223640678 Test: manual, Settings -> Network & internet -> Internet Press the 'Scan QR code' icon Start to scan a WiFi QR code Just before then scan/decode completes, press Back Change-Id: Ic19ca08590ed76ca9be46eabe3e0b17419fb0b44 --- .../wifi/dpp/WifiDppQrCodeScannerFragment.java | 10 +++++++++- src/com/android/settings/wifi/qrcode/QrCamera.java | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java index d8bdf32dbf4..528fbc3bac9 100644 --- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java +++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeScannerFragment.java @@ -168,10 +168,18 @@ public class WifiDppQrCodeScannerFragment extends WifiDppQrCodeBaseFragment impl break; case MESSAGE_SCAN_ZXING_WIFI_FORMAT_SUCCESS: + final Context context = getContext(); + if (context == null) { + // Context may be null if the message is received after the Activity has + // been destroyed + Log.d(TAG, "Scan success but context is null"); + return; + } + // We may get 2 WifiConfiguration if the QR code has no password in it, // one for open network and one for enhanced open network. final WifiManager wifiManager = - getContext().getSystemService(WifiManager.class); + context.getSystemService(WifiManager.class); final WifiNetworkConfig qrCodeWifiNetworkConfig = (WifiNetworkConfig)msg.obj; final List qrCodeWifiConfigurations = diff --git a/src/com/android/settings/wifi/qrcode/QrCamera.java b/src/com/android/settings/wifi/qrcode/QrCamera.java index 3865eb1f116..d07c54335ad 100644 --- a/src/com/android/settings/wifi/qrcode/QrCamera.java +++ b/src/com/android/settings/wifi/qrcode/QrCamera.java @@ -124,6 +124,7 @@ public class QrCamera extends Handler { } if (mCamera != null) { mCamera.stopPreview(); + releaseCamera(); } }