Merge "b/2310373 Show pairing dialogs if the device has been scanning for bt devices recently."

This commit is contained in:
Michael Chan
2010-03-03 21:29:22 -08:00
committed by Android (Google) Code Review
6 changed files with 75 additions and 10 deletions

View File

@@ -16,6 +16,9 @@
package com.android.settings.bluetooth; package com.android.settings.bluetooth;
import com.android.settings.R;
import com.android.settings.bluetooth.LocalBluetoothProfileManager.Profile;
import android.bluetooth.BluetoothA2dp; import android.bluetooth.BluetoothA2dp;
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothClass; import android.bluetooth.BluetoothClass;
@@ -25,11 +28,9 @@ import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.util.Log; import android.util.Log;
import com.android.settings.R;
import com.android.settings.bluetooth.LocalBluetoothProfileManager.Profile;
/** /**
* BluetoothEventRedirector receives broadcasts and callbacks from the Bluetooth * BluetoothEventRedirector receives broadcasts and callbacks from the Bluetooth
* API and dispatches the event on the UI thread to the right class in the * API and dispatches the event on the UI thread to the right class in the
@@ -53,9 +54,11 @@ public class BluetoothEventRedirector {
BluetoothAdapter.ERROR); BluetoothAdapter.ERROR);
mManager.setBluetoothStateInt(state); mManager.setBluetoothStateInt(state);
} else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_STARTED)) { } else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_STARTED)) {
persistDiscoveringTimestamp();
mManager.onScanningStateChanged(true); mManager.onScanningStateChanged(true);
} else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) { } else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {
persistDiscoveringTimestamp();
mManager.onScanningStateChanged(false); mManager.onScanningStateChanged(false);
} else if (action.equals(BluetoothDevice.ACTION_FOUND)) { } else if (action.equals(BluetoothDevice.ACTION_FOUND)) {
@@ -191,4 +194,11 @@ public class BluetoothEventRedirector {
} }
return null; return null;
} }
private void persistDiscoveringTimestamp() {
SharedPreferences.Editor editor = mManager.getSharedPreferences().edit();
editor.putLong(LocalBluetoothManager.SHARED_PREFERENCES_KEY_DISCOVERING_TIMESTAMP,
System.currentTimeMillis());
editor.commit();
}
} }

View File

@@ -72,6 +72,9 @@ public class LocalBluetoothManager {
// of raising notifications // of raising notifications
private static long GRACE_PERIOD_TO_SHOW_DIALOGS_IN_FOREGROUND = 60 * 1000; 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 = private static final String SHARED_PREFERENCES_KEY_LAST_SELECTED_DEVICE =
"last_selected_device"; "last_selected_device";
@@ -314,7 +317,7 @@ public class LocalBluetoothManager {
long currentTimeMillis = System.currentTimeMillis(); long currentTimeMillis = System.currentTimeMillis();
SharedPreferences sharedPreferences = getSharedPreferences(); SharedPreferences sharedPreferences = getSharedPreferences();
// If the device was in discoverable mode recently // If the device was in discoverABLE mode recently
long lastDiscoverableEndTime = sharedPreferences.getLong( long lastDiscoverableEndTime = sharedPreferences.getLong(
BluetoothDiscoverableEnabler.SHARED_PREFERENCES_KEY_DISCOVERABLE_END_TIMESTAMP, 0); BluetoothDiscoverableEnabler.SHARED_PREFERENCES_KEY_DISCOVERABLE_END_TIMESTAMP, 0);
if ((lastDiscoverableEndTime + GRACE_PERIOD_TO_SHOW_DIALOGS_IN_FOREGROUND) if ((lastDiscoverableEndTime + GRACE_PERIOD_TO_SHOW_DIALOGS_IN_FOREGROUND)
@@ -322,6 +325,14 @@ public class LocalBluetoothManager {
return true; 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 the device was picked in the device picker recently
if (deviceAddress != null) { if (deviceAddress != null) {
String lastSelectedDevice = sharedPreferences.getString( String lastSelectedDevice = sharedPreferences.getString(

View File

@@ -18,6 +18,7 @@
package="com.android.settings.tests"> package="com.android.settings.tests">
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<application> <application>
<uses-library android:name="android.test.runner" /> <uses-library android:name="android.test.runner" />

View File

@@ -37,10 +37,16 @@
android:layout_weight="1" android:layout_weight="1"
android:text="@string/enable" /> android:text="@string/enable" />
<Button android:id="@+id/discover" <Button android:id="@+id/discoverable"
android:layout_width="0dip" android:layout_width="0dip"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:text="@string/discoverable" /> android:text="@string/discoverable" />
<Button android:id="@+id/scan"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/start_scan" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@@ -20,4 +20,6 @@
<!-- Test only. Do not translate. --> <!-- Test only. Do not translate. -->
<string name="enable">Enable</string> <string name="enable">Enable</string>
<string name="discoverable">Discoverable</string> <string name="discoverable">Discoverable</string>
<string name="start_scan">Start Scan</string>
<string name="stop_scan">Stop Scan</string>
</resources> </resources>

View File

@@ -33,7 +33,7 @@ import android.widget.ListView;
public class BluetoothRequestPermissionTest extends Activity { public class BluetoothRequestPermissionTest extends Activity {
private static final String TAG = "BluetoothRequestPermissionTest"; private static final String TAG = "BluetoothRequestPermissionTest";
BluetoothAdapter mAdapter;
private ArrayAdapter<String> mMsgAdapter; private ArrayAdapter<String> mMsgAdapter;
private class BtOnClickListener implements OnClickListener { private class BtOnClickListener implements OnClickListener {
@@ -48,23 +48,50 @@ public class BluetoothRequestPermissionTest extends Activity {
} }
} }
private class BtScanOnClickListener implements OnClickListener {
public void onClick(View v) {
Button scanButton = (Button) v;
if (mAdapter.isDiscovering()) {
mAdapter.cancelDiscovery();
scanButton.setText(R.string.start_scan);
} else {
mAdapter.startDiscovery();
scanButton.setText(R.string.stop_scan);
}
}
}
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
setContentView(R.layout.bluetooth_request_permission_test); setContentView(R.layout.bluetooth_request_permission_test);
mAdapter = BluetoothAdapter.getDefaultAdapter();
Button enable = (Button) findViewById(R.id.enable); Button enable = (Button) findViewById(R.id.enable);
enable.setOnClickListener(new BtOnClickListener(true /* enable */)); enable.setOnClickListener(new BtOnClickListener(true /* enable */));
Button discover = (Button) findViewById(R.id.discover); Button discoverable = (Button) findViewById(R.id.discoverable);
discover.setOnClickListener(new BtOnClickListener(false /* enable & discoverable */)); discoverable.setOnClickListener(new BtOnClickListener(false /* enable & discoverable */));
Button scanButton = (Button) findViewById(R.id.scan);
scanButton.setOnClickListener(new BtScanOnClickListener());
if (mAdapter.isDiscovering()) {
scanButton.setText(R.string.stop_scan);
} else {
scanButton.setText(R.string.start_scan);
}
mMsgAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); mMsgAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
ListView listView = (ListView) findViewById(R.id.msg_container); ListView listView = (ListView) findViewById(R.id.msg_container);
listView.setAdapter(mMsgAdapter); listView.setAdapter(mMsgAdapter);
registerReceiver(mReceiver, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)); IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter);
addMsg("Initialized"); addMsg("Initialized");
} }
@@ -113,7 +140,8 @@ public class BluetoothRequestPermissionTest extends Activity {
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (intent == null) if (intent == null)
return; return;
if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(intent.getAction())) { String action = intent.getAction();
if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
String stateStr = "???"; String stateStr = "???";
switch (intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothDevice.ERROR)) { switch (intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothDevice.ERROR)) {
case BluetoothAdapter.STATE_OFF: case BluetoothAdapter.STATE_OFF:
@@ -130,6 +158,13 @@ public class BluetoothRequestPermissionTest extends Activity {
break; break;
} }
addMsg("Bluetooth status = " + stateStr); addMsg("Bluetooth status = " + stateStr);
} else if (action.equals(BluetoothDevice.ACTION_FOUND)) {
String name = intent.getStringExtra(BluetoothDevice.EXTRA_NAME);
addMsg("Found: " + name);
} else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_STARTED)) {
addMsg("Scan started...");
} else if (action.equals(BluetoothAdapter.ACTION_DISCOVERY_FINISHED)) {
addMsg("Scan ended");
} }
} }
}; };