Merge "Increase character limit for FRP segment."
diff --git a/src/com/android/managedprovisioning/DeviceOwnerProvisioningService.java b/src/com/android/managedprovisioning/DeviceOwnerProvisioningService.java
index df547a5..d9ff8ee 100644
--- a/src/com/android/managedprovisioning/DeviceOwnerProvisioningService.java
+++ b/src/com/android/managedprovisioning/DeviceOwnerProvisioningService.java
@@ -438,6 +438,9 @@
if (mDownloadPackageTask != null) {
mDownloadPackageTask.cleanUp();
}
+ if (mBluetoothConnectTask != null) {
+ mBluetoothConnectTask.cleanUp();
+ }
}
@Override
diff --git a/src/com/android/managedprovisioning/proxy/BluetoothConnectionService.java b/src/com/android/managedprovisioning/proxy/BluetoothConnectionService.java
index ce7433b..2a3da54 100644
--- a/src/com/android/managedprovisioning/proxy/BluetoothConnectionService.java
+++ b/src/com/android/managedprovisioning/proxy/BluetoothConnectionService.java
@@ -24,10 +24,10 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
-import android.net.wifi.WifiManager;
import android.os.IBinder;
import android.support.v4.content.LocalBroadcastManager;
+import com.android.managedprovisioning.NetworkMonitor;
import com.android.managedprovisioning.ProvisionLogger;
@@ -37,7 +37,7 @@
/**
* Service that establishes and manages a Bluetooth connection during device setup.
*/
-public class BluetoothConnectionService extends Service {
+public class BluetoothConnectionService extends Service implements NetworkMonitor.Callback {
/**
* Local broadcast sent when a status update should be sent. Broadcasts with this action will
@@ -78,7 +78,7 @@
/**
* Listen for changes in the Wi-Fi state.
*/
- private BroadcastReceiver mWifiStateReceiver;
+ private NetworkMonitor mNetworkMonitor;
private ClientTetherConnection mBluetoothClient;
/**
@@ -117,8 +117,9 @@
mBluetoothDeviceId, mBluetoothMac, mBluetoothUuid);
// Receives local broadcasts
mLocalStatusReceiver = createLocalStatusReceiver();
- LocalBroadcastManager.getInstance(this).registerReceiver(mLocalStatusReceiver,
- new IntentFilter(ACTION_LOCAL_PROVISIONING_STATUS));
+ IntentFilter filter = new IntentFilter(ACTION_LOCAL_PROVISIONING_STATUS);
+ filter.addAction(ACTION_LOCAL_SHUTDOWN_BLUETOOTH);
+ LocalBroadcastManager.getInstance(this).registerReceiver(mLocalStatusReceiver, filter);
// Receives status updates from the device initializer
mStatusReceiver = createStatusReceiver();
registerReceiver(mStatusReceiver, new IntentFilter(
@@ -169,23 +170,6 @@
}
/**
- * Create a receiver which shuts down the Bluetooth Proxy when a Wi-Fi network is connected.
- * @return a Broadcast receiver that listens for Wi-Fi state changes
- */
- private BroadcastReceiver createWifiStateChangeReceiver() {
- return new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (intent.getAction().equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
- if (intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, false)) {
- clearProxy();
- }
- }
- }
- };
- }
-
- /**
* Create a {@code BroadcastReceiver} that handles local broadcasts that affect the Bluetooth
* connection. Accepted broadcasts by action:
* <ul>
@@ -201,6 +185,7 @@
return new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
+ ProvisionLogger.logd("Got local Bluetooth action: " + intent.getAction());
switch (intent.getAction()) {
case ACTION_LOCAL_PROVISIONING_STATUS:
// Get a status update from managedprovisioning
@@ -230,20 +215,33 @@
}
mBluetoothClient.sendStatusUpdate(
DeviceInitializerStatus.STATUS_STATE_CONNECT_BLUETOOTH_PROXY, "Started proxy.");
- mWifiStateReceiver = createWifiStateChangeReceiver();
- registerReceiver(mWifiStateReceiver, new IntentFilter(
- WifiManager.SUPPLICANT_STATE_CHANGED_ACTION));
+ mNetworkMonitor = new NetworkMonitor(this, this);
}
+ @Override
+ public void onNetworkConnected() {
+ ProvisionLogger.logw("Received Wi-Fi broadcast. Connected: " + NetworkMonitor.isConnectedToWifi(this));
+ if (NetworkMonitor.isConnectedToWifi(this)) {
+ ProvisionLogger.logd("Connected to a Wi-Fi network");
+ clearProxy();
+ }
+ }
+
+ @Override
+ public void onNetworkDisconnected() {
+ // Do nothing. Only care about network connect.
+ }
+
+
/**
* Stop Bluetooth network proxy. The network proxy should be removed once a Wi-Fi connection
* is available.
*/
private void clearProxy() {
ProvisionLogger.logd("Clear proxy.");
- if (mWifiStateReceiver != null) {
- unregisterReceiver(mWifiStateReceiver);
- mWifiStateReceiver = null;
+ if (mNetworkMonitor != null) {
+ mNetworkMonitor.close();
+ mNetworkMonitor = null;
}
mBluetoothClient.sendStatusUpdate(
DeviceInitializerStatus.STATUS_STATE_DISCONNECT_BLUETOOTH_PROXY, "Removing proxy.");
@@ -254,7 +252,7 @@
public void onDestroy() {
clearProxy();
if (mLocalStatusReceiver != null) {
- unregisterReceiver(mLocalStatusReceiver);
+ LocalBroadcastManager.getInstance(this).unregisterReceiver(mLocalStatusReceiver);
mLocalStatusReceiver = null;
}
if (mStatusReceiver != null) {
diff --git a/src/com/android/managedprovisioning/task/BluetoothConnectTask.java b/src/com/android/managedprovisioning/task/BluetoothConnectTask.java
index af597ed..44144b1 100644
--- a/src/com/android/managedprovisioning/task/BluetoothConnectTask.java
+++ b/src/com/android/managedprovisioning/task/BluetoothConnectTask.java
@@ -105,6 +105,7 @@
return;
}
ProvisionLogger.loge("Timed out waiting for Bluetooth.");
+ cleanUp();
mCallback.onError();
}
},
@@ -171,6 +172,7 @@
intent.putExtra(BluetoothConnectionService.EXTRA_BLUETOOTH_DEVICE_ID, mBluetoothDeviceId);
intent.putExtra(BluetoothConnectionService.EXTRA_BLUETOOTH_USE_PROXY, useProxy);
mContext.startService(intent);
+ cleanUp();
mCallback.onSuccess();
}