am 6c97742
: Always add the bt profile to profile list on the arrive of a
Merge commit '6c97742c88303c65e68fe08257a7ccf841f03866' * commit '6c97742c88303c65e68fe08257a7ccf841f03866': Always add the bt profile to profile list on the arrive of a connect event
This commit is contained in:
committed by
The Android Open Source Project
commit
f341e5ee35
@@ -18,8 +18,8 @@ package com.android.settings.bluetooth;
|
|||||||
|
|
||||||
import android.bluetooth.BluetoothA2dp;
|
import android.bluetooth.BluetoothA2dp;
|
||||||
import android.bluetooth.BluetoothDevice;
|
import android.bluetooth.BluetoothDevice;
|
||||||
import android.bluetooth.BluetoothHeadset;
|
|
||||||
import android.bluetooth.BluetoothError;
|
import android.bluetooth.BluetoothError;
|
||||||
|
import android.bluetooth.BluetoothHeadset;
|
||||||
import android.bluetooth.BluetoothIntent;
|
import android.bluetooth.BluetoothIntent;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -27,6 +27,8 @@ import android.content.Intent;
|
|||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
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
|
||||||
@@ -89,9 +91,8 @@ public class BluetoothEventRedirector {
|
|||||||
Log.i(TAG, "Failed to connect BT headset");
|
Log.i(TAG, "Failed to connect BT headset");
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean transientState = !(newState == BluetoothHeadset.STATE_CONNECTED
|
mManager.getLocalDeviceManager().onProfileStateChanged(address,
|
||||||
|| newState == BluetoothHeadset.STATE_DISCONNECTED);
|
Profile.HEADSET, newState);
|
||||||
mManager.getLocalDeviceManager().onProfileStateChanged(address,transientState);
|
|
||||||
|
|
||||||
} else if (action.equals(BluetoothA2dp.SINK_STATE_CHANGED_ACTION)) {
|
} else if (action.equals(BluetoothA2dp.SINK_STATE_CHANGED_ACTION)) {
|
||||||
int newState = intent.getIntExtra(BluetoothA2dp.SINK_STATE, 0);
|
int newState = intent.getIntExtra(BluetoothA2dp.SINK_STATE, 0);
|
||||||
@@ -101,9 +102,8 @@ public class BluetoothEventRedirector {
|
|||||||
Log.i(TAG, "Failed to connect BT A2DP");
|
Log.i(TAG, "Failed to connect BT A2DP");
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean transientState = !(newState == BluetoothA2dp.STATE_CONNECTED
|
mManager.getLocalDeviceManager().onProfileStateChanged(address,
|
||||||
|| newState == BluetoothA2dp.STATE_DISCONNECTED);
|
Profile.A2DP, newState);
|
||||||
mManager.getLocalDeviceManager().onProfileStateChanged(address, transientState);
|
|
||||||
|
|
||||||
} else if (action.equals(BluetoothIntent.REMOTE_DEVICE_CLASS_UPDATED_ACTION)) {
|
} else if (action.equals(BluetoothIntent.REMOTE_DEVICE_CLASS_UPDATED_ACTION)) {
|
||||||
mManager.getLocalDeviceManager().onBtClassChanged(address);
|
mManager.getLocalDeviceManager().onBtClassChanged(address);
|
||||||
|
@@ -16,9 +16,6 @@
|
|||||||
|
|
||||||
package com.android.settings.bluetooth;
|
package com.android.settings.bluetooth;
|
||||||
|
|
||||||
import com.android.settings.R;
|
|
||||||
import com.android.settings.bluetooth.LocalBluetoothProfileManager.Profile;
|
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.bluetooth.BluetoothClass;
|
import android.bluetooth.BluetoothClass;
|
||||||
import android.bluetooth.BluetoothDevice;
|
import android.bluetooth.BluetoothDevice;
|
||||||
@@ -32,6 +29,9 @@ import android.view.ContextMenu;
|
|||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.bluetooth.LocalBluetoothProfileManager.Profile;
|
||||||
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@@ -210,32 +210,46 @@ public class LocalBluetoothDevice implements Comparable<LocalBluetoothDevice> {
|
|||||||
return successful;
|
return successful;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onProfileStateChanged() {
|
public void onProfileStateChanged(Profile profile, int newProfileState) {
|
||||||
if (D) {
|
if (D) {
|
||||||
Log.d(TAG, "onProfileStateChanged:" + workQueue.toString());
|
Log.d(TAG, "onProfileStateChanged:" + workQueue.toString());
|
||||||
}
|
}
|
||||||
BluetoothJob job = workQueue.peek();
|
|
||||||
if (job == null) {
|
|
||||||
return;
|
|
||||||
} else if (job.device.mAddress != mAddress) {
|
|
||||||
// This can happen in 2 cases: 1) BT device initiated pairing and
|
|
||||||
// 2) disconnects of one headset that's triggered by connects of
|
|
||||||
// another.
|
|
||||||
if (D) {
|
|
||||||
Log.d(TAG, "mAddresses:" + mAddress + " != head:" + job.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check to see if we need to remove the stale items from the queue
|
int newState = LocalBluetoothProfileManager.getProfileManager(mLocalManager,
|
||||||
if (!pruneQueue(null)) {
|
profile).convertState(newProfileState);
|
||||||
// nothing in the queue was modify. Just ignore the notification and return.
|
|
||||||
return;
|
if (newState == SettingsBtStatus.CONNECTION_STATUS_CONNECTED) {
|
||||||
|
if (!mProfiles.contains(profile)) {
|
||||||
|
mProfiles.add(profile);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// Remove the first item and process the next one
|
|
||||||
workQueue.poll();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
processCommands();
|
/* Ignore the transient states e.g. connecting, disconnecting */
|
||||||
|
if (newState == SettingsBtStatus.CONNECTION_STATUS_CONNECTED ||
|
||||||
|
newState == SettingsBtStatus.CONNECTION_STATUS_DISCONNECTED) {
|
||||||
|
BluetoothJob job = workQueue.peek();
|
||||||
|
if (job == null) {
|
||||||
|
return;
|
||||||
|
} else if (job.device.mAddress != mAddress) {
|
||||||
|
// This can happen in 2 cases: 1) BT device initiated pairing and
|
||||||
|
// 2) disconnects of one headset that's triggered by connects of
|
||||||
|
// another.
|
||||||
|
if (D) {
|
||||||
|
Log.d(TAG, "mAddresses:" + mAddress + " != head:" + job.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check to see if we need to remove the stale items from the queue
|
||||||
|
if (!pruneQueue(null)) {
|
||||||
|
// nothing in the queue was modify. Just ignore the notification and return.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Remove the first item and process the next one
|
||||||
|
workQueue.poll();
|
||||||
|
}
|
||||||
|
|
||||||
|
processCommands();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -21,6 +21,7 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.bluetooth.LocalBluetoothManager.Callback;
|
import com.android.settings.bluetooth.LocalBluetoothManager.Callback;
|
||||||
|
import com.android.settings.bluetooth.LocalBluetoothProfileManager.Profile;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -199,13 +200,12 @@ public class LocalBluetoothDeviceManager {
|
|||||||
mLocalManager.showError(address, R.string.bluetooth_error_title, errorMsg);
|
mLocalManager.showError(address, R.string.bluetooth_error_title, errorMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void onProfileStateChanged(String address, boolean transientState) {
|
public synchronized void onProfileStateChanged(String address, Profile profile,
|
||||||
|
int newProfileState) {
|
||||||
LocalBluetoothDevice device = findDevice(address);
|
LocalBluetoothDevice device = findDevice(address);
|
||||||
if (device == null) return;
|
if (device == null) return;
|
||||||
|
|
||||||
if (!transientState) {
|
device.onProfileStateChanged(profile, newProfileState);
|
||||||
device.onProfileStateChanged();
|
|
||||||
}
|
|
||||||
device.refresh();
|
device.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -16,17 +16,14 @@
|
|||||||
|
|
||||||
package com.android.settings.bluetooth;
|
package com.android.settings.bluetooth;
|
||||||
|
|
||||||
import com.android.settings.R;
|
|
||||||
|
|
||||||
import android.bluetooth.BluetoothA2dp;
|
import android.bluetooth.BluetoothA2dp;
|
||||||
import android.bluetooth.BluetoothError;
|
import android.bluetooth.BluetoothError;
|
||||||
import android.bluetooth.BluetoothHeadset;
|
import android.bluetooth.BluetoothHeadset;
|
||||||
import android.bluetooth.BluetoothClass;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
|
import com.android.settings.R;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -102,6 +99,8 @@ public abstract class LocalBluetoothProfileManager {
|
|||||||
|
|
||||||
public abstract int getSummary(String address);
|
public abstract int getSummary(String address);
|
||||||
|
|
||||||
|
public abstract int convertState(int a2dpState);
|
||||||
|
|
||||||
public abstract boolean isPreferred(String address);
|
public abstract boolean isPreferred(String address);
|
||||||
|
|
||||||
public abstract void setPreferred(String address, boolean preferred);
|
public abstract void setPreferred(String address, boolean preferred);
|
||||||
@@ -176,7 +175,8 @@ public abstract class LocalBluetoothProfileManager {
|
|||||||
preferred ? BluetoothA2dp.PRIORITY_AUTO : BluetoothA2dp.PRIORITY_OFF);
|
preferred ? BluetoothA2dp.PRIORITY_AUTO : BluetoothA2dp.PRIORITY_OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int convertState(int a2dpState) {
|
@Override
|
||||||
|
public int convertState(int a2dpState) {
|
||||||
switch (a2dpState) {
|
switch (a2dpState) {
|
||||||
case BluetoothA2dp.STATE_CONNECTED:
|
case BluetoothA2dp.STATE_CONNECTED:
|
||||||
return SettingsBtStatus.CONNECTION_STATUS_CONNECTED;
|
return SettingsBtStatus.CONNECTION_STATUS_CONNECTED;
|
||||||
@@ -217,7 +217,9 @@ public abstract class LocalBluetoothProfileManager {
|
|||||||
*/
|
*/
|
||||||
String address = mService.getHeadsetAddress();
|
String address = mService.getHeadsetAddress();
|
||||||
if (TextUtils.isEmpty(address)) return;
|
if (TextUtils.isEmpty(address)) return;
|
||||||
mLocalManager.getLocalDeviceManager().onProfileStateChanged(address, true);
|
mLocalManager.getLocalDeviceManager()
|
||||||
|
.onProfileStateChanged(address, Profile.HEADSET,
|
||||||
|
BluetoothHeadset.STATE_CONNECTED);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -273,7 +275,8 @@ public abstract class LocalBluetoothProfileManager {
|
|||||||
preferred ? BluetoothHeadset.PRIORITY_AUTO : BluetoothHeadset.PRIORITY_OFF);
|
preferred ? BluetoothHeadset.PRIORITY_AUTO : BluetoothHeadset.PRIORITY_OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int convertState(int headsetState) {
|
@Override
|
||||||
|
public int convertState(int headsetState) {
|
||||||
switch (headsetState) {
|
switch (headsetState) {
|
||||||
case BluetoothHeadset.STATE_CONNECTED:
|
case BluetoothHeadset.STATE_CONNECTED:
|
||||||
return SettingsBtStatus.CONNECTION_STATUS_CONNECTED;
|
return SettingsBtStatus.CONNECTION_STATUS_CONNECTED;
|
||||||
|
Reference in New Issue
Block a user