From 76098b7f7ac4f19af776fcad8413b582904bfdc2 Mon Sep 17 00:00:00 2001 From: Michael Chan Date: Tue, 2 Mar 2010 15:04:27 -0800 Subject: [PATCH] b/2310373 Show pairing dialogs if the device has been scanning for bt devices recently. Change-Id: Iec9eb37a5e79b63cc3cf226e2ead6d9ed06d56a6 --- .../bluetooth/BluetoothEventRedirector.java | 16 +++++-- .../bluetooth/LocalBluetoothManager.java | 13 +++++- tests/AndroidManifest.xml | 1 + .../bluetooth_request_permission_test.xml | 8 +++- tests/res/values/strings.xml | 2 + .../tests/BluetoothRequestPermissionTest.java | 45 ++++++++++++++++--- 6 files changed, 75 insertions(+), 10 deletions(-) diff --git a/src/com/android/settings/bluetooth/BluetoothEventRedirector.java b/src/com/android/settings/bluetooth/BluetoothEventRedirector.java index c1a2116023a..dbdf6c156e8 100644 --- a/src/com/android/settings/bluetooth/BluetoothEventRedirector.java +++ b/src/com/android/settings/bluetooth/BluetoothEventRedirector.java @@ -16,6 +16,9 @@ package com.android.settings.bluetooth; +import com.android.settings.R; +import com.android.settings.bluetooth.LocalBluetoothProfileManager.Profile; + import android.bluetooth.BluetoothA2dp; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothClass; @@ -25,11 +28,9 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.SharedPreferences; import android.util.Log; -import com.android.settings.R; -import com.android.settings.bluetooth.LocalBluetoothProfileManager.Profile; - /** * BluetoothEventRedirector receives broadcasts and callbacks from the Bluetooth * API and dispatches the event on the UI thread to the right class in the @@ -53,9 +54,11 @@ public class BluetoothEventRedirector { BluetoothAdapter.ERROR); mManager.setBluetoothStateInt(state); } else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_STARTED)) { + persistDiscoveringTimestamp(); mManager.onScanningStateChanged(true); } else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) { + persistDiscoveringTimestamp(); mManager.onScanningStateChanged(false); } else if (action.equals(BluetoothDevice.ACTION_FOUND)) { @@ -191,4 +194,11 @@ public class BluetoothEventRedirector { } return null; } + + private void persistDiscoveringTimestamp() { + SharedPreferences.Editor editor = mManager.getSharedPreferences().edit(); + editor.putLong(LocalBluetoothManager.SHARED_PREFERENCES_KEY_DISCOVERING_TIMESTAMP, + System.currentTimeMillis()); + editor.commit(); + } } diff --git a/src/com/android/settings/bluetooth/LocalBluetoothManager.java b/src/com/android/settings/bluetooth/LocalBluetoothManager.java index 43d4343dd3c..2ffb1393d5e 100644 --- a/src/com/android/settings/bluetooth/LocalBluetoothManager.java +++ b/src/com/android/settings/bluetooth/LocalBluetoothManager.java @@ -72,6 +72,9 @@ public class LocalBluetoothManager { // of raising notifications private static long GRACE_PERIOD_TO_SHOW_DIALOGS_IN_FOREGROUND = 60 * 1000; + public static final String SHARED_PREFERENCES_KEY_DISCOVERING_TIMESTAMP = + "last_discovering_time"; + private static final String SHARED_PREFERENCES_KEY_LAST_SELECTED_DEVICE = "last_selected_device"; @@ -314,7 +317,7 @@ public class LocalBluetoothManager { long currentTimeMillis = System.currentTimeMillis(); SharedPreferences sharedPreferences = getSharedPreferences(); - // If the device was in discoverable mode recently + // If the device was in discoverABLE mode recently long lastDiscoverableEndTime = sharedPreferences.getLong( BluetoothDiscoverableEnabler.SHARED_PREFERENCES_KEY_DISCOVERABLE_END_TIMESTAMP, 0); if ((lastDiscoverableEndTime + GRACE_PERIOD_TO_SHOW_DIALOGS_IN_FOREGROUND) @@ -322,6 +325,14 @@ public class LocalBluetoothManager { return true; } + // If the device was discoverING recently + if (mAdapter != null && mAdapter.isDiscovering()) { + return true; + } else if ((sharedPreferences.getLong(SHARED_PREFERENCES_KEY_DISCOVERING_TIMESTAMP, 0) + + GRACE_PERIOD_TO_SHOW_DIALOGS_IN_FOREGROUND) > currentTimeMillis) { + return true; + } + // If the device was picked in the device picker recently if (deviceAddress != null) { String lastSelectedDevice = sharedPreferences.getString( diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml index 8a0ce218230..6b9e0501d1d 100644 --- a/tests/AndroidManifest.xml +++ b/tests/AndroidManifest.xml @@ -18,6 +18,7 @@ package="com.android.settings.tests"> + diff --git a/tests/res/layout/bluetooth_request_permission_test.xml b/tests/res/layout/bluetooth_request_permission_test.xml index 4d54544a644..0a5aec0dc7f 100644 --- a/tests/res/layout/bluetooth_request_permission_test.xml +++ b/tests/res/layout/bluetooth_request_permission_test.xml @@ -37,10 +37,16 @@ android:layout_weight="1" android:text="@string/enable" /> -