From d233b03029cd8364e20ace761ef872052df6a061 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Fri, 26 Jul 2019 18:15:34 +0200 Subject: [PATCH 1/5] WifiStateChangeService: handle BSSID when WifiConfiguration is null fixes: java.lang.NullPointerException: Attempt to read from field 'java.lang.String android.net.wifi.WifiConfiguration.BSSID' on a null object reference at org.fdroid.fdroid.nearby.WifiStateChangeService.setSsid(WifiStateChangeService.java:265) at org.fdroid.fdroid.nearby.WifiStateChangeService.access$100(WifiStateChangeService.java:59) at org.fdroid.fdroid.nearby.WifiStateChangeService$WifiInfoThread.run(WifiStateChangeService.java:174) --- .../org/fdroid/fdroid/nearby/WifiStateChangeService.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java b/app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java index cf255d93a..e1f185d61 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java @@ -257,7 +257,11 @@ public class WifiStateChangeService extends IntentService { Utils.debugLog(TAG, "WifiConfiguration: " + wifiConfiguration); if (wifiConfiguration == null) { FDroidApp.ssid = getString(R.string.swap_active_hotspot, ""); - } else if (wifiConfiguration.hiddenSSID) { + FDroidApp.bssid = ""; + return; + } + + if (wifiConfiguration.hiddenSSID) { FDroidApp.ssid = getString(R.string.swap_hidden_wifi_ssid); } else { FDroidApp.ssid = wifiConfiguration.SSID; From f5a58056106f75a378df8d4ac2c39cda30096dd0 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Mon, 29 Jul 2019 12:35:28 +0200 Subject: [PATCH 2/5] stop crash if hotspot returns null WifiConfiguration java.lang.NullPointerException: Attempt to read from field 'java.lang.String android.net.wifi.WifiConfiguration.SSID' on a null object reference at org.fdroid.fdroid.nearby.StartSwapView.uiUpdateWifiNetwork(StartSwapView.java:226) at org.fdroid.fdroid.nearby.StartSwapView.uiInitWifi(StartSwapView.java:211) at org.fdroid.fdroid.nearby.StartSwapView.onFinishInflate(StartSwapView.java:111) at android.view.LayoutInflater.rInflate(LayoutInflater.java:876) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) at android.view.LayoutInflater.inflate(LayoutInflater.java:515) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at org.fdroid.fdroid.nearby.SwapWorkflowActivity.inflateSwapView(SwapWorkflowActivity.java:488) at org.fdroid.fdroid.nearby.SwapWorkflowActivity.showIntro(SwapWorkflowActivity.java:541) at org.fdroid.fdroid.nearby.SwapWorkflowActivity.showRelevantView(SwapWorkflowActivity.java:468) at org.fdroid.fdroid.nearby.SwapWorkflowActivity.access$100(SwapWorkflowActivity.java:86) at org.fdroid.fdroid.nearby.SwapWorkflowActivity$1.onServiceConnected(SwapWorkflowActivity.java:135) at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1652) at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1681) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:440) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) --- .../full/java/org/fdroid/fdroid/nearby/StartSwapView.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/StartSwapView.java b/app/src/full/java/org/fdroid/fdroid/nearby/StartSwapView.java index 177da7ee9..fe04772da 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/StartSwapView.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/StartSwapView.java @@ -223,7 +223,13 @@ public class StartSwapView extends SwapView { if (textWifiVisible != null) { textWifiVisible.setText(R.string.swap_visible_hotspot); } - viewWifiNetwork.setText(getContext().getString(R.string.swap_active_hotspot, config.SSID)); + Context context = getContext(); + if (config == null) { + viewWifiNetwork.setText(context.getString(R.string.swap_active_hotspot, + context.getString(R.string.swap_blank_wifi_ssid))); + } else { + viewWifiNetwork.setText(context.getString(R.string.swap_active_hotspot, config.SSID)); + } } else if (TextUtils.isEmpty(FDroidApp.ssid)) { // not connected to or setup with any wifi network viewWifiNetwork.setText(R.string.swap_no_wifi_network); From df818b0aed705778ce3a7d6c2a1667bfe81b128e Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 30 Jul 2019 22:27:36 +0200 Subject: [PATCH 3/5] fix crash in SwapView on android < 21 In order to support Android < 21, this calls `super` rather than `this`. RelativeLayout}'s methods just use a 0 for the fourth argument, just like this used to. --- .../java/org/fdroid/fdroid/nearby/SwapView.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/SwapView.java b/app/src/full/java/org/fdroid/fdroid/nearby/SwapView.java index 864bc980c..f400d1ef6 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/SwapView.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/SwapView.java @@ -32,8 +32,19 @@ public class SwapView extends RelativeLayout { this(context, attrs, 0); } + /** + * In order to support Android < 21, this calls {@code super} rather than + * {@code this}. {@link RelativeLayout}'s methods just use a 0 for the + * fourth argument, just like this used to. + */ public SwapView(Context context, AttributeSet attrs, int defStyleAttr) { - this(context, attrs, defStyleAttr, 0); + super(context, attrs, defStyleAttr); + final TypedArray a = context.obtainStyledAttributes( + attrs, R.styleable.SwapView, 0, 0); + toolbarColor = a.getColor(R.styleable.SwapView_toolbarColor, + getResources().getColor(R.color.swap_blue)); + toolbarTitle = a.getString(R.styleable.SwapView_toolbarTitle); + a.recycle(); } @TargetApi(21) From 887f53cf9553d11a195dd719b04e22f040100883 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 31 Jul 2019 00:14:04 +0200 Subject: [PATCH 4/5] stop crash in TreeUriScannerIntentService.onActivityResult() This might happen if the user denies storage permission. java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=16613, result=0, data=null} to activity {org.fdroid.fdroid/org.fdroid.fdroid.views.main.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference at android.app.ActivityThread.deliverResults(ActivityThread.java:4612) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4654) at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7073) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference at org.fdroid.fdroid.nearby.TreeUriScannerIntentService.onActivityResult(TreeUriScannerIntentService.java:99) at org.fdroid.fdroid.views.main.MainActivity.onActivityResult(MainActivity.java:270) at android.app.Activity.dispatchActivityResult(Activity.java:7759) at android.app.ActivityThread.deliverResults(ActivityThread.java:4605) ... 11 more java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference at org.fdroid.fdroid.nearby.TreeUriScannerIntentService.onActivityResult(TreeUriScannerIntentService.java:99) at org.fdroid.fdroid.views.main.MainActivity.onActivityResult(MainActivity.java:270) at android.app.Activity.dispatchActivityResult(Activity.java:7759) at android.app.ActivityThread.deliverResults(ActivityThread.java:4605) at android.app.ActivityThread.handleSendResult(ActivityThread.java:4654) at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1955) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7073) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964) --- .../org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java b/app/src/full/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java index 11b18a468..3f4023c7b 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java @@ -96,6 +96,9 @@ public class TreeUriScannerIntentService extends IntentService { * like an SD Card that can be directly accessed via the file system. */ public static void onActivityResult(Activity activity, Intent intent) { + if (intent == null) { + return; + } Uri uri = intent.getData(); if (uri != null) { if (Build.VERSION.SDK_INT >= 19) { From 36961c21397c28f94359e0d400cea1fcf3a7ba7f Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 31 Jul 2019 00:48:58 +0200 Subject: [PATCH 5/5] update CHANGELOG --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4954125e..b169869c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +### 1.7.1 (2019-07-31) + +* fix crashes from ACRA report emails + ### 1.7 (2019-07-06) * fix crash in Panic Settings