Kitchen Sink Bluetooth Messaging
Enable the bluetooth messaging test facade to enable easy testing of
Bluetooth MAP client features. This reenables the broadcast receiver
and adds a connect/disconnect button directly from this page.
Bug: 35168856
Test: This is the testing facade for Bluetooth MAP Client
Change-Id: I540ddf699e1aa7619881f185f41770ac907e3ad6
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/bluetooth/MapMceTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/bluetooth/MapMceTestFragment.java
index 6c5fc4f..c531e82 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/bluetooth/MapMceTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/bluetooth/MapMceTestFragment.java
@@ -19,6 +19,7 @@
import android.app.PendingIntent;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothDevicePicker;
import android.bluetooth.BluetoothMapClient;
import android.bluetooth.BluetoothProfile;
import android.content.BroadcastReceiver;
@@ -35,6 +36,7 @@
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
+import android.widget.EditText;
import android.widget.TextView;
import com.google.android.car.kitchensink.R;
@@ -46,8 +48,10 @@
private static final String TAG = "CAR.BLUETOOTH.KS";
BluetoothMapClient mMapProfile;
BluetoothAdapter mBluetoothAdapter;
+ Button mDevicePicker;
+ Button mDeviceDisconnect;
TextView mMessage;
- TextView mOriginator;
+ EditText mOriginator;
TextView mOriginatorDisplayName;
CheckBox mSent;
CheckBox mDelivered;
@@ -67,14 +71,15 @@
Button reply = (Button) v.findViewById(R.id.reply);
Button checkMessages = (Button) v.findViewById(R.id.check_messages);
mBluetoothDevice = (TextView) v.findViewById(R.id.bluetoothDevice);
- mOriginator = (TextView) v.findViewById(R.id.messageOriginator);
+ mOriginator = (EditText) v.findViewById(R.id.messageOriginator);
mOriginatorDisplayName = (TextView) v.findViewById(R.id.messageOriginatorDisplayName);
mSent = (CheckBox) v.findViewById(R.id.sent_checkbox);
mDelivered = (CheckBox) v.findViewById(R.id.delivered_checkbox);
mSendIntent = new Intent(BluetoothMapClient.ACTION_MESSAGE_SENT_SUCCESSFULLY);
mDeliveryIntent = new Intent(BluetoothMapClient.ACTION_MESSAGE_DELIVERED_SUCCESSFULLY);
mMessage = (TextView) v.findViewById(R.id.messageContent);
-
+ mDevicePicker = (Button) v.findViewById(R.id.bluetooth_pick_device);
+ mDeviceDisconnect = (Button) v.findViewById(R.id.bluetooth_disconnect_device);
//TODO add manual entry option for phone number
reply.setOnClickListener(new View.OnClickListener() {
@Override
@@ -91,10 +96,38 @@
}
});
+ // Pick a bluetooth device
+ mDevicePicker.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ launchDevicePicker();
+ }
+ });
+ mDeviceDisconnect.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ disconnectDevice(mBluetoothDevice.getText().toString());
+ }
+ });
+
mTransmissionStatusReceiver = new NotificationReceiver();
return v;
}
+ void launchDevicePicker() {
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(BluetoothDevicePicker.ACTION_DEVICE_SELECTED);
+ getContext().registerReceiver(mPickerReceiver, filter);
+
+ Intent intent = new Intent(BluetoothDevicePicker.ACTION_LAUNCH);
+ intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+ getContext().startActivity(intent);
+ }
+
+ void disconnectDevice(String device) {
+ mMapProfile.disconnect(mBluetoothAdapter.getRemoteDevice((device)));
+ }
+
@Override
public void onResume() {
super.onResume();
@@ -107,6 +140,7 @@
intentFilter.addAction(BluetoothMapClient.ACTION_MESSAGE_SENT_SUCCESSFULLY);
intentFilter.addAction(BluetoothMapClient.ACTION_MESSAGE_DELIVERED_SUCCESSFULLY);
intentFilter.addAction(BluetoothMapClient.ACTION_MESSAGE_RECEIVED);
+ intentFilter.addAction(BluetoothMapClient.ACTION_CONNECTION_STATE_CHANGED);
getContext().registerReceiver(mTransmissionStatusReceiver, intentFilter);
}
@@ -118,16 +152,32 @@
private void getMessages() {
synchronized (mLock) {
+ BluetoothDevice remoteDevice;
+ try {
+ remoteDevice = mBluetoothAdapter.getRemoteDevice(
+ mBluetoothDevice.getText().toString());
+ } catch (java.lang.IllegalArgumentException e) {
+ Log.e(TAG, e.toString());
+ return;
+ }
+
if (mMapProfile != null) {
Log.d(TAG, "Getting Messages");
- mMapProfile.getUnreadMessages(mBluetoothAdapter.getRemoteDevice(
- mBluetoothDevice.getText().toString()));
+ mMapProfile.getUnreadMessages(remoteDevice);
}
}
}
private void sendMessage(Uri[] recipients, String message) {
synchronized (mLock) {
+ BluetoothDevice remoteDevice;
+ try {
+ remoteDevice = mBluetoothAdapter.getRemoteDevice(
+ mBluetoothDevice.getText().toString());
+ } catch (java.lang.IllegalArgumentException e) {
+ Log.e(TAG, e.toString());
+ return;
+ }
mSent.setChecked(false);
mDelivered.setChecked(false);
if (mMapProfile != null) {
@@ -146,7 +196,7 @@
mDeliveredIntent = PendingIntent.getBroadcast(getContext(), 0, mDeliveryIntent,
PendingIntent.FLAG_ONE_SHOT);
mMapProfile.sendMessage(
- mBluetoothAdapter.getRemoteDevice(mBluetoothDevice.getText().toString()),
+ remoteDevice,
recipients, message, mSentIntent, mDeliveredIntent);
}
}
@@ -177,7 +227,16 @@
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
synchronized (mLock) {
- if (action.equals(BluetoothMapClient.ACTION_MESSAGE_SENT_SUCCESSFULLY)) {
+ if (action.equals(BluetoothMapClient.ACTION_CONNECTION_STATE_CHANGED)) {
+ if (intent.getIntExtra(BluetoothProfile.EXTRA_STATE, 0)
+ == BluetoothProfile.STATE_CONNECTED) {
+ mBluetoothDevice.setText(((BluetoothDevice) intent.getParcelableExtra(
+ BluetoothDevice.EXTRA_DEVICE)).getAddress());
+ } else if (intent.getIntExtra(BluetoothProfile.EXTRA_STATE, 0)
+ == BluetoothProfile.STATE_DISCONNECTED) {
+ mBluetoothDevice.setText("Disconnected");
+ }
+ } else if (action.equals(BluetoothMapClient.ACTION_MESSAGE_SENT_SUCCESSFULLY)) {
mSent.setChecked(true);
} else if (action.equals(
BluetoothMapClient.ACTION_MESSAGE_DELIVERED_SUCCESSFULLY)) {
@@ -209,4 +268,22 @@
}
}
}
+
+ private final BroadcastReceiver mPickerReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+
+ Log.v(TAG, "mPickerReceiver got " + action);
+
+ if (BluetoothDevicePicker.ACTION_DEVICE_SELECTED.equals(action)) {
+ BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+ Log.v(TAG, "mPickerReceiver got " + device);
+ mMapProfile.connect(device);
+
+ // The receiver can now be disabled.
+ getContext().unregisterReceiver(mPickerReceiver);
+ }
+ }
+ };
}
\ No newline at end of file