From 16d56535caa4e0058a09da019048a75c925357c3 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Thu, 2 Aug 2018 12:00:38 +0100
Subject: [PATCH] Check connectivity after all AP state changes.

---
 .../bramble/network/AndroidNetworkManager.java | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/bramble-android/src/main/java/org/briarproject/bramble/network/AndroidNetworkManager.java b/bramble-android/src/main/java/org/briarproject/bramble/network/AndroidNetworkManager.java
index 2001b559cb..f8e52e965a 100644
--- a/bramble-android/src/main/java/org/briarproject/bramble/network/AndroidNetworkManager.java
+++ b/bramble-android/src/main/java/org/briarproject/bramble/network/AndroidNetworkManager.java
@@ -29,7 +29,6 @@ import static android.content.Intent.ACTION_SCREEN_OFF;
 import static android.content.Intent.ACTION_SCREEN_ON;
 import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
 import static android.net.ConnectivityManager.TYPE_WIFI;
-import static android.net.wifi.WifiManager.EXTRA_WIFI_STATE;
 import static android.os.Build.VERSION.SDK_INT;
 import static android.os.PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED;
 import static java.util.concurrent.TimeUnit.MINUTES;
@@ -44,7 +43,6 @@ class AndroidNetworkManager implements NetworkManager, Service {
 	// See android.net.wifi.WifiManager
 	private static final String WIFI_AP_STATE_CHANGED_ACTION =
 			"android.net.wifi.WIFI_AP_STATE_CHANGED";
-	private static final int WIFI_AP_STATE_ENABLED = 13;
 
 	private final ScheduledExecutorService scheduler;
 	private final EventBus eventBus;
@@ -114,18 +112,17 @@ class AndroidNetworkManager implements NetworkManager, Service {
 			String action = i.getAction();
 			if (LOG.isLoggable(INFO)) LOG.info("Received broadcast " + action);
 			updateConnectionStatus();
-			if (isSleepOrDozeEvent(i)) {
+			if (isSleepOrDozeEvent(action)) {
+				// Allow time for the network to be enabled or disabled
 				scheduleConnectionStatusUpdate(1, MINUTES);
-			} else if (isApEnabledEvent(i)) {
+			} else if (isApEvent(action)) {
 				// The state change may be broadcast before the AP address is
 				// visible, so delay handling the event
-				// TODO: Wait longer, and also wait after stopping - see #1301
-				scheduleConnectionStatusUpdate(1, SECONDS);
+				scheduleConnectionStatusUpdate(5, SECONDS);
 			}
 		}
 
-		private boolean isSleepOrDozeEvent(Intent i) {
-			String action = i.getAction();
+		private boolean isSleepOrDozeEvent(String action) {
 			boolean isSleep = ACTION_SCREEN_ON.equals(action) ||
 					ACTION_SCREEN_OFF.equals(action);
 			boolean isDoze = SDK_INT >= 23 &&
@@ -133,9 +130,8 @@ class AndroidNetworkManager implements NetworkManager, Service {
 			return isSleep || isDoze;
 		}
 
-		private boolean isApEnabledEvent(Intent i) {
-			return WIFI_AP_STATE_CHANGED_ACTION.equals(i.getAction()) &&
-					i.getIntExtra(EXTRA_WIFI_STATE, 0) == WIFI_AP_STATE_ENABLED;
+		private boolean isApEvent(String action) {
+			return WIFI_AP_STATE_CHANGED_ACTION.equals(action);
 		}
 	}
 }
-- 
GitLab