summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Monk <jmonk@google.com>2015-02-04 10:24:29 -0500
committerJason Monk <jmonk@google.com>2015-02-05 10:43:57 -0500
commitf2982a9ba19340b474bafb6b0bf5832673984e0d (patch)
tree1a6da9cc9f16a169bca2cac402bcfff1b8b15985
parentfc1b00cfe439b0c462b3acbba709c3cbc1132a1f (diff)
downloadpackages_apps_Settings-f2982a9ba19340b474bafb6b0bf5832673984e0d.zip
packages_apps_Settings-f2982a9ba19340b474bafb6b0bf5832673984e0d.tar.gz
packages_apps_Settings-f2982a9ba19340b474bafb6b0bf5832673984e0d.tar.bz2
Move isolatable bluetooth code to SettingsLib
Move the non-ui bluetooth control/tracking code to SettingsLib so that it can be shared with others. Mostly just move classes to frameworks/base/packages/SettingsLib, however a few things had to move around. - Dock handling had to move back to code still in settings - Local preference related code had to be moved back to settings - Added an error flow from SettingsLib to Settings Depends on I69fd888362c6dbb325f6113b32c4b15cc6a23a41 Bug: 19180466 Change-Id: Ie57fe26a27bbb0adc2ef69e042a05c7290c6a52a
-rw-r--r--res/drawable-hdpi/ic_bt_cellphone.pngbin653 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_bt_headphones_a2dp.pngbin631 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_bt_headset_hfp.pngbin649 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_bt_misc_hid.pngbin342 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_bt_network_pan.pngbin528 -> 0 bytes
-rw-r--r--res/drawable-hdpi/ic_bt_pointing_hid.pngbin600 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_bt_cellphone.pngbin4349 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_bt_cellphone.pngbin3872 -> 0 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_bt_cellphone.pngbin4781 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_bt_cellphone.pngbin450 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_bt_headphones_a2dp.pngbin444 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_bt_headset_hfp.pngbin448 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_bt_misc_hid.pngbin246 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_bt_network_pan.pngbin418 -> 0 bytes
-rw-r--r--res/drawable-mdpi/ic_bt_pointing_hid.pngbin370 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_bt_cellphone.pngbin792 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_bt_headphones_a2dp.pngbin764 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_bt_headset_hfp.pngbin771 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_bt_misc_hid.pngbin220 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_bt_network_pan.pngbin717 -> 0 bytes
-rw-r--r--res/drawable-xhdpi/ic_bt_pointing_hid.pngbin713 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_bt_cellphone.pngbin1091 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_bt_headphones_a2dp.pngbin1031 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_bt_headset_hfp.pngbin1045 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_bt_misc_hid.pngbin367 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_bt_network_pan.pngbin993 -> 0 bytes
-rw-r--r--res/drawable-xxhdpi/ic_bt_pointing_hid.pngbin947 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_bt_cellphone.pngbin1337 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_bt_headphones_a2dp.pngbin1353 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_bt_headset_hfp.pngbin1362 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_bt_misc_hid.pngbin305 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_bt_network_pan.pngbin1284 -> 0 bytes
-rw-r--r--res/drawable-xxxhdpi/ic_bt_pointing_hid.pngbin1178 -> 0 bytes
-rw-r--r--res/values/strings.xml72
-rwxr-xr-xsrc/com/android/settings/bluetooth/A2dpProfile.java214
-rw-r--r--src/com/android/settings/bluetooth/BluetoothCallback.java29
-rw-r--r--src/com/android/settings/bluetooth/BluetoothDeviceFilter.java169
-rw-r--r--src/com/android/settings/bluetooth/BluetoothDevicePreference.java5
-rwxr-xr-xsrc/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java7
-rw-r--r--src/com/android/settings/bluetooth/BluetoothDiscoverableTimeoutReceiver.java87
-rw-r--r--src/com/android/settings/bluetooth/BluetoothDiscoveryReceiver.java2
-rw-r--r--src/com/android/settings/bluetooth/BluetoothEnabler.java4
-rwxr-xr-xsrc/com/android/settings/bluetooth/BluetoothEventManager.java390
-rw-r--r--src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java4
-rwxr-xr-xsrc/com/android/settings/bluetooth/BluetoothPairingDialog.java5
-rwxr-xr-xsrc/com/android/settings/bluetooth/BluetoothPermissionActivity.java6
-rw-r--r--src/com/android/settings/bluetooth/BluetoothPermissionRequest.java5
-rwxr-xr-xsrc/com/android/settings/bluetooth/BluetoothSettings.java10
-rw-r--r--src/com/android/settings/bluetooth/BluetoothVisibilityTimeoutFragment.java68
-rwxr-xr-xsrc/com/android/settings/bluetooth/CachedBluetoothDevice.java787
-rwxr-xr-xsrc/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java172
-rw-r--r--src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java13
-rw-r--r--src/com/android/settings/bluetooth/DevicePickerFragment.java2
-rwxr-xr-xsrc/com/android/settings/bluetooth/DeviceProfilesSettings.java9
-rw-r--r--src/com/android/settings/bluetooth/DockService.java68
-rwxr-xr-xsrc/com/android/settings/bluetooth/HeadsetProfile.java227
-rwxr-xr-xsrc/com/android/settings/bluetooth/HidProfile.java201
-rw-r--r--src/com/android/settings/bluetooth/LocalBluetoothAdapter.java216
-rw-r--r--src/com/android/settings/bluetooth/LocalBluetoothManager.java123
-rw-r--r--src/com/android/settings/bluetooth/LocalBluetoothPreferences.java5
-rwxr-xr-xsrc/com/android/settings/bluetooth/LocalBluetoothProfile.java71
-rw-r--r--src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java383
-rw-r--r--src/com/android/settings/bluetooth/MapProfile.java213
-rwxr-xr-xsrc/com/android/settings/bluetooth/OppProfile.java89
-rwxr-xr-xsrc/com/android/settings/bluetooth/PanProfile.java183
-rwxr-xr-xsrc/com/android/settings/bluetooth/PbapServerProfile.java152
-rw-r--r--src/com/android/settings/bluetooth/RequestPermissionActivity.java9
-rw-r--r--src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java4
-rwxr-xr-xsrc/com/android/settings/bluetooth/Utils.java34
-rw-r--r--src/com/android/settings/widget/SettingsAppWidgetProvider.java7
70 files changed, 163 insertions, 3882 deletions
diff --git a/res/drawable-hdpi/ic_bt_cellphone.png b/res/drawable-hdpi/ic_bt_cellphone.png
deleted file mode 100644
index 6e29d23..0000000
--- a/res/drawable-hdpi/ic_bt_cellphone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_bt_headphones_a2dp.png b/res/drawable-hdpi/ic_bt_headphones_a2dp.png
deleted file mode 100644
index 6110e9e..0000000
--- a/res/drawable-hdpi/ic_bt_headphones_a2dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_bt_headset_hfp.png b/res/drawable-hdpi/ic_bt_headset_hfp.png
deleted file mode 100644
index 6cca225..0000000
--- a/res/drawable-hdpi/ic_bt_headset_hfp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_bt_misc_hid.png b/res/drawable-hdpi/ic_bt_misc_hid.png
deleted file mode 100644
index 6445f2a..0000000
--- a/res/drawable-hdpi/ic_bt_misc_hid.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_bt_network_pan.png b/res/drawable-hdpi/ic_bt_network_pan.png
deleted file mode 100644
index 78c0294..0000000
--- a/res/drawable-hdpi/ic_bt_network_pan.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_bt_pointing_hid.png b/res/drawable-hdpi/ic_bt_pointing_hid.png
deleted file mode 100644
index 2fcc3b0..0000000
--- a/res/drawable-hdpi/ic_bt_pointing_hid.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_bt_cellphone.png b/res/drawable-ldrtl-hdpi/ic_bt_cellphone.png
deleted file mode 100644
index 2d9b75e..0000000
--- a/res/drawable-ldrtl-hdpi/ic_bt_cellphone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_bt_cellphone.png b/res/drawable-ldrtl-mdpi/ic_bt_cellphone.png
deleted file mode 100644
index b6ebe34..0000000
--- a/res/drawable-ldrtl-mdpi/ic_bt_cellphone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_bt_cellphone.png b/res/drawable-ldrtl-xhdpi/ic_bt_cellphone.png
deleted file mode 100644
index 8b67b91..0000000
--- a/res/drawable-ldrtl-xhdpi/ic_bt_cellphone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_cellphone.png b/res/drawable-mdpi/ic_bt_cellphone.png
deleted file mode 100644
index 1fa0a3d..0000000
--- a/res/drawable-mdpi/ic_bt_cellphone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_headphones_a2dp.png b/res/drawable-mdpi/ic_bt_headphones_a2dp.png
deleted file mode 100644
index 175bd78..0000000
--- a/res/drawable-mdpi/ic_bt_headphones_a2dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_headset_hfp.png b/res/drawable-mdpi/ic_bt_headset_hfp.png
deleted file mode 100644
index 05b27e8..0000000
--- a/res/drawable-mdpi/ic_bt_headset_hfp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_misc_hid.png b/res/drawable-mdpi/ic_bt_misc_hid.png
deleted file mode 100644
index 6e9f8ae..0000000
--- a/res/drawable-mdpi/ic_bt_misc_hid.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_network_pan.png b/res/drawable-mdpi/ic_bt_network_pan.png
deleted file mode 100644
index 5f3371f..0000000
--- a/res/drawable-mdpi/ic_bt_network_pan.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_bt_pointing_hid.png b/res/drawable-mdpi/ic_bt_pointing_hid.png
deleted file mode 100644
index 539d77f..0000000
--- a/res/drawable-mdpi/ic_bt_pointing_hid.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_cellphone.png b/res/drawable-xhdpi/ic_bt_cellphone.png
deleted file mode 100644
index 4f381ba..0000000
--- a/res/drawable-xhdpi/ic_bt_cellphone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_headphones_a2dp.png b/res/drawable-xhdpi/ic_bt_headphones_a2dp.png
deleted file mode 100644
index c67127d..0000000
--- a/res/drawable-xhdpi/ic_bt_headphones_a2dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_headset_hfp.png b/res/drawable-xhdpi/ic_bt_headset_hfp.png
deleted file mode 100644
index d3b356b..0000000
--- a/res/drawable-xhdpi/ic_bt_headset_hfp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_misc_hid.png b/res/drawable-xhdpi/ic_bt_misc_hid.png
deleted file mode 100644
index 2d38129..0000000
--- a/res/drawable-xhdpi/ic_bt_misc_hid.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_network_pan.png b/res/drawable-xhdpi/ic_bt_network_pan.png
deleted file mode 100644
index fb76575..0000000
--- a/res/drawable-xhdpi/ic_bt_network_pan.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bt_pointing_hid.png b/res/drawable-xhdpi/ic_bt_pointing_hid.png
deleted file mode 100644
index d8b68eb..0000000
--- a/res/drawable-xhdpi/ic_bt_pointing_hid.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_cellphone.png b/res/drawable-xxhdpi/ic_bt_cellphone.png
deleted file mode 100644
index 7805b7a..0000000
--- a/res/drawable-xxhdpi/ic_bt_cellphone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_headphones_a2dp.png b/res/drawable-xxhdpi/ic_bt_headphones_a2dp.png
deleted file mode 100644
index 8127774..0000000
--- a/res/drawable-xxhdpi/ic_bt_headphones_a2dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_headset_hfp.png b/res/drawable-xxhdpi/ic_bt_headset_hfp.png
deleted file mode 100644
index 84b8085..0000000
--- a/res/drawable-xxhdpi/ic_bt_headset_hfp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_misc_hid.png b/res/drawable-xxhdpi/ic_bt_misc_hid.png
deleted file mode 100644
index 289d6ac..0000000
--- a/res/drawable-xxhdpi/ic_bt_misc_hid.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_network_pan.png b/res/drawable-xxhdpi/ic_bt_network_pan.png
deleted file mode 100644
index 72bc804..0000000
--- a/res/drawable-xxhdpi/ic_bt_network_pan.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_bt_pointing_hid.png b/res/drawable-xxhdpi/ic_bt_pointing_hid.png
deleted file mode 100644
index e31ce2b..0000000
--- a/res/drawable-xxhdpi/ic_bt_pointing_hid.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_cellphone.png b/res/drawable-xxxhdpi/ic_bt_cellphone.png
deleted file mode 100644
index 1e12f96..0000000
--- a/res/drawable-xxxhdpi/ic_bt_cellphone.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_headphones_a2dp.png b/res/drawable-xxxhdpi/ic_bt_headphones_a2dp.png
deleted file mode 100644
index 8b547d9..0000000
--- a/res/drawable-xxxhdpi/ic_bt_headphones_a2dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_headset_hfp.png b/res/drawable-xxxhdpi/ic_bt_headset_hfp.png
deleted file mode 100644
index 03c5033..0000000
--- a/res/drawable-xxxhdpi/ic_bt_headset_hfp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_misc_hid.png b/res/drawable-xxxhdpi/ic_bt_misc_hid.png
deleted file mode 100644
index b9a9923..0000000
--- a/res/drawable-xxxhdpi/ic_bt_misc_hid.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_network_pan.png b/res/drawable-xxxhdpi/ic_bt_network_pan.png
deleted file mode 100644
index 989e1ab..0000000
--- a/res/drawable-xxxhdpi/ic_bt_network_pan.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_bt_pointing_hid.png b/res/drawable-xxxhdpi/ic_bt_pointing_hid.png
deleted file mode 100644
index de8c389..0000000
--- a/res/drawable-xxxhdpi/ic_bt_pointing_hid.png
+++ /dev/null
Binary files differ
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 82c9a67..0186db2 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -285,8 +285,6 @@
<!-- Bluetooth settings. Message for disabling a profile of a bluetooth device. [CHAR LIMIT=NONE] -->
<string name="bluetooth_disable_profile_message">This will disable:&lt;br>&lt;b><xliff:g id="profile_name">%1$s</xliff:g>&lt;/b>&lt;br>&lt;br>From:&lt;br>&lt;b><xliff:g id="device_name">%2$s</xliff:g>&lt;/b></string>
- <!-- Bluetooth settings. Message when connected to a device. [CHAR LIMIT=40] -->
- <string name="bluetooth_connected">Connected</string>
<!-- Bluetooth settings. Message when connected to a device, except for phone audio. [CHAR LIMIT=40] -->
<string name="bluetooth_connected_no_headset">Connected (no phone)</string>
<!-- Bluetooth settings. Message when connected to a device, except for media audio. [CHAR LIMIT=40] -->
@@ -295,12 +293,6 @@
<string name="bluetooth_connected_no_map">Connected (no message access)</string>
<!-- Bluetooth settings. Message when connected to a device, except for phone/media audio. [CHAR LIMIT=40] -->
<string name="bluetooth_connected_no_headset_no_a2dp">Connected (no phone or media)</string>
- <!-- Bluetooth settings. Message when a device is disconnected -->
- <string name="bluetooth_disconnected">Disconnected</string>
- <!-- Bluetooth settings. Message when disconnecting from a device -->
- <string name="bluetooth_disconnecting">Disconnecting\u2026</string>
- <!-- Bluetooth settings. Message when connecting to a device -->
- <string name="bluetooth_connecting">Connecting\u2026</string>
<!-- Bluetooth settings. Message when the device state is unknown -->
<string name="bluetooth_unknown" />
<!--Bluetooth settings screen, summary text under individual Bluetooth devices when pairing -->
@@ -1145,27 +1137,11 @@
<!-- Message when bluetooth dialog when passkey or pin needs to be displayed. -->
<string name="bluetooth_display_passkey_pin_msg">To pair with:<xliff:g id="bold1">&lt;br>&lt;b></xliff:g><xliff:g id="device_name">%1$s</xliff:g><xliff:g id="end_bold1">&lt;/b>&lt;br>&lt;br></xliff:g>Type on it:<xliff:g id="bold2">&lt;br>&lt;b></xliff:g><xliff:g id="passkey">%2$s</xliff:g><xliff:g id="end_bold2">&lt;/b></xliff:g>, then press Return or Enter.</string>
- <!-- Button text for accepting an incoming pairing request. [CHAR LIMIT=20] -->
- <string name="bluetooth_pairing_accept">Pair</string>
- <!-- Button text for accepting an incoming pairing request in all caps. [CHAR LIMIT=20] -->
- <string name="bluetooth_pairing_accept_all_caps">PAIR</string>
- <!-- Button text for declining an incoming pairing request. [CHAR LIMIT=20] -->
- <string name="bluetooth_pairing_decline">Cancel</string>
-
<!-- Message in pairing dialogs. [CHAR LIMIT=NONE] -->
<string name="bluetooth_pairing_will_share_phonebook">Pairing grants access to your contacts and call history when connected.</string>
<!-- Title for BT error dialogs. -->
<string name="bluetooth_error_title"></string>
- <!-- Message for the error dialog when BT pairing fails generically. -->
- <string name="bluetooth_pairing_error_message">Couldn\'t pair with <xliff:g id="device_name">%1$s</xliff:g>.</string>
- <!-- Message for the error dialog when BT pairing fails because the PIN /
- Passkey entered is incorrect. -->
- <string name="bluetooth_pairing_pin_error_message">Couldn\'t pair with <xliff:g id="device_name">%1$s</xliff:g> because of an incorrect PIN or passkey.</string>
- <!-- Message for the error dialog when BT pairing fails because the other device is down. -->
- <string name="bluetooth_pairing_device_down_error_message">Can\'t communicate with <xliff:g id="device_name">%1$s</xliff:g>.</string>
- <!-- Message for the error dialog when BT pairing fails because the other device rejected the pairing. -->
- <string name="bluetooth_pairing_rejected_error_message">Pairing rejected by <xliff:g id="device_name">%1$s</xliff:g>.</string>
<!-- Message for the error dialog when BT connecting operation fails generically. -->
<string name="bluetooth_connecting_error_message">Couldn\'t connect to <xliff:g id="device_name">%1$s</xliff:g>.</string>
@@ -1225,25 +1201,6 @@
<!-- Bluetooth settings. The title of the screen to pick which profiles to connect to on the device. For example, headphones may have both A2DP and headset, this allows the user to choose which one he wants to connect to. -->
<string name="bluetooth_connect_specific_profiles_title">Connect to\u2026</string>
- <!-- Bluetooth settings. The user-visible string that is used whenever referring to the A2DP profile. -->
- <string name="bluetooth_profile_a2dp">Media audio</string>
- <!-- Bluetooth settings. The user-visible string that is used whenever referring to the headset or handsfree profile. -->
- <string name="bluetooth_profile_headset">Phone audio</string>
- <!-- Bluetooth settings. The user-visible string that is used whenever referring to the OPP profile. -->
- <string name="bluetooth_profile_opp">File transfer</string>
- <!-- Bluetooth settings. The user-visible string that is used whenever referring to the HID profile. -->
- <string name="bluetooth_profile_hid">Input device</string>
- <!-- Bluetooth settings. The user-visible string that is used whenever referring to the PAN profile (accessing Internet through remote device). [CHAR LIMIT=40] -->
- <string name="bluetooth_profile_pan">Internet access</string>
- <!-- Bluetooth settings. The user-visible string that is used whenever referring to the PBAP profile. [CHAR LIMIT=40] -->
- <string name="bluetooth_profile_pbap">Contact sharing</string>
- <!-- Bluetooth settings. The user-visible summary string that is used whenever referring to the PBAP profile (sharing contacts). [CHAR LIMIT=60] -->
- <string name="bluetooth_profile_pbap_summary">Use for contact sharing</string>
- <!-- Bluetooth settings. The user-visible string that is used whenever referring to the PAN profile (sharing this device's Internet connection). [CHAR LIMIT=40] -->
- <string name="bluetooth_profile_pan_nap">Internet connection sharing</string>
- <!-- Bluetooth settings. The user-visible string that is used whenever referring to the map profile. -->
- <string name="bluetooth_profile_map">Message Access</string>
-
<!-- Bluetooth settings. Message for disconnecting from the A2DP profile. [CHAR LIMIT=80] -->
<string name="bluetooth_disconnect_a2dp_profile"><xliff:g id="device_name">%1$s</xliff:g> will be disconnected from media audio.</string>
<!-- Bluetooth settings. Message for disconnecting from the headset profile. [CHAR LIMIT=80] -->
@@ -1270,40 +1227,11 @@
<string name="bluetooth_device_advanced_rename_device">Rename</string>
<!-- Bluetooth settings. Connection options screen. Title for checkbox to enable incoming file transfers [CHAR LIMIT=30] -->
<string name="bluetooth_device_advanced_enable_opp_title">Allow incoming file transfers</string>
- <!-- Bluetooth settings. Connection options screen. The summary for the A2DP checkbox preference when A2DP is connected. -->
- <string name="bluetooth_a2dp_profile_summary_connected">Connected to media audio</string>
- <!-- Bluetooth settings. Connection options screen. The summary for the headset checkbox preference when headset is connected. -->
- <string name="bluetooth_headset_profile_summary_connected">Connected to phone audio</string>
- <!-- Bluetooth settings. Connection options screen. The summary for the OPP checkbox preference when OPP is connected. -->
- <string name="bluetooth_opp_profile_summary_connected">Connected to file transfer server</string>
- <!-- Bluetooth settings. Connection options screen. The summary for the map checkbox preference when map is connected. -->
- <string name="bluetooth_map_profile_summary_connected">Connected to map</string>
- <!-- Bluetooth settings. Connection options screen. The summary for the OPP checkbox preference when OPP is not connected. -->
- <string name="bluetooth_opp_profile_summary_not_connected">Not connected to file transfer server</string>
- <!-- Bluetooth settings. Connection options screen. The summary for the HID checkbox preference when HID is connected. -->
- <string name="bluetooth_hid_profile_summary_connected">Connected to input device</string>
<!-- Bluetooth settings. Connection options screen. The summary for the checkbox preference when PAN is connected (user role). [CHAR LIMIT=25]-->
<string name="bluetooth_pan_user_profile_summary_connected">Connected to device for Internet access</string>
<!-- Bluetooth settings. Connection options screen. The summary for the checkbox preference when PAN is connected (NAP role). [CHAR LIMIT=25]-->
<string name="bluetooth_pan_nap_profile_summary_connected">Sharing local Internet connection with device</string>
- <!-- Bluetooth settings. Connection options screen. The summary for the A2DP checkbox preference that describes how checking it will set the A2DP profile as preferred. -->
- <string name="bluetooth_a2dp_profile_summary_use_for">Use for media audio</string>
- <!-- Bluetooth settings. Connection options screen. The summary for the headset checkbox preference that describes how checking it will set the headset profile as preferred. -->
- <string name="bluetooth_headset_profile_summary_use_for">Use for phone audio</string>
- <!-- Bluetooth settings. Connection options screen. The summary for the OPP checkbox preference that describes how checking it will set the OPP profile as preferred. -->
- <string name="bluetooth_opp_profile_summary_use_for">Use for file transfer</string>
- <!-- Bluetooth settings. Connection options screen. The summary
- for the HID checkbox preference that describes how checking it
- will set the HID profile as preferred. -->
- <string name="bluetooth_hid_profile_summary_use_for">Use for input</string>
- <!-- Bluetooth settings. Connection options screen. The summary
- for the PAN checkbox preference that describes how checking it
- will set the PAN profile as preferred. -->
- <string name="bluetooth_pan_profile_summary_use_for">Use for Internet access</string>
- <!-- Bluetooth settings. Connection options screen. The summary for the map checkbox preference that describes how checking it will set the map profile as preferred. -->
- <string name="bluetooth_map_profile_summary_use_for">Use for map</string>
-
<!-- Bluetooth settings. Dock Setting Title -->
<string name="bluetooth_dock_settings">Dock Settings</string>
<!-- Bluetooth settings. Dock Setting Dialog Title -->
diff --git a/src/com/android/settings/bluetooth/A2dpProfile.java b/src/com/android/settings/bluetooth/A2dpProfile.java
deleted file mode 100755
index 435a659..0000000
--- a/src/com/android/settings/bluetooth/A2dpProfile.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.bluetooth.BluetoothA2dp;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothClass;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothProfile;
-import android.bluetooth.BluetoothUuid;
-import android.content.Context;
-import android.os.ParcelUuid;
-import android.util.Log;
-
-import com.android.settings.R;
-
-import java.util.ArrayList;
-import java.util.List;
-
-final class A2dpProfile implements LocalBluetoothProfile {
- private static final String TAG = "A2dpProfile";
- private static boolean V = true;
-
- private BluetoothA2dp mService;
- private boolean mIsProfileReady;
-
- private final LocalBluetoothAdapter mLocalAdapter;
- private final CachedBluetoothDeviceManager mDeviceManager;
-
- static final ParcelUuid[] SINK_UUIDS = {
- BluetoothUuid.AudioSink,
- BluetoothUuid.AdvAudioDist,
- };
-
- static final String NAME = "A2DP";
- private final LocalBluetoothProfileManager mProfileManager;
-
- // Order of this profile in device profiles list
- private static final int ORDINAL = 1;
-
- // These callbacks run on the main thread.
- private final class A2dpServiceListener
- implements BluetoothProfile.ServiceListener {
-
- public void onServiceConnected(int profile, BluetoothProfile proxy) {
- if (V) Log.d(TAG,"Bluetooth service connected");
- mService = (BluetoothA2dp) proxy;
- // We just bound to the service, so refresh the UI for any connected A2DP devices.
- List<BluetoothDevice> deviceList = mService.getConnectedDevices();
- while (!deviceList.isEmpty()) {
- BluetoothDevice nextDevice = deviceList.remove(0);
- CachedBluetoothDevice device = mDeviceManager.findDevice(nextDevice);
- // we may add a new device here, but generally this should not happen
- if (device == null) {
- Log.w(TAG, "A2dpProfile found new device: " + nextDevice);
- device = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, nextDevice);
- }
- device.onProfileStateChanged(A2dpProfile.this, BluetoothProfile.STATE_CONNECTED);
- device.refresh();
- }
- mIsProfileReady=true;
- }
-
- public void onServiceDisconnected(int profile) {
- if (V) Log.d(TAG,"Bluetooth service disconnected");
- mIsProfileReady=false;
- }
- }
-
- public boolean isProfileReady() {
- return mIsProfileReady;
- }
-
- A2dpProfile(Context context, LocalBluetoothAdapter adapter,
- CachedBluetoothDeviceManager deviceManager,
- LocalBluetoothProfileManager profileManager) {
- mLocalAdapter = adapter;
- mDeviceManager = deviceManager;
- mProfileManager = profileManager;
- mLocalAdapter.getProfileProxy(context, new A2dpServiceListener(),
- BluetoothProfile.A2DP);
- }
-
- public boolean isConnectable() {
- return true;
- }
-
- public boolean isAutoConnectable() {
- return true;
- }
-
- public List<BluetoothDevice> getConnectedDevices() {
- if (mService == null) return new ArrayList<BluetoothDevice>(0);
- return mService.getDevicesMatchingConnectionStates(
- new int[] {BluetoothProfile.STATE_CONNECTED,
- BluetoothProfile.STATE_CONNECTING,
- BluetoothProfile.STATE_DISCONNECTING});
- }
-
- public boolean connect(BluetoothDevice device) {
- if (mService == null) return false;
- List<BluetoothDevice> sinks = getConnectedDevices();
- if (sinks != null) {
- for (BluetoothDevice sink : sinks) {
- mService.disconnect(sink);
- }
- }
- return mService.connect(device);
- }
-
- public boolean disconnect(BluetoothDevice device) {
- if (mService == null) return false;
- // Downgrade priority as user is disconnecting the headset.
- if (mService.getPriority(device) > BluetoothProfile.PRIORITY_ON){
- mService.setPriority(device, BluetoothProfile.PRIORITY_ON);
- }
- return mService.disconnect(device);
- }
-
- public int getConnectionStatus(BluetoothDevice device) {
- if (mService == null) {
- return BluetoothProfile.STATE_DISCONNECTED;
- }
- return mService.getConnectionState(device);
- }
-
- public boolean isPreferred(BluetoothDevice device) {
- if (mService == null) return false;
- return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF;
- }
-
- public int getPreferred(BluetoothDevice device) {
- if (mService == null) return BluetoothProfile.PRIORITY_OFF;
- return mService.getPriority(device);
- }
-
- public void setPreferred(BluetoothDevice device, boolean preferred) {
- if (mService == null) return;
- if (preferred) {
- if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) {
- mService.setPriority(device, BluetoothProfile.PRIORITY_ON);
- }
- } else {
- mService.setPriority(device, BluetoothProfile.PRIORITY_OFF);
- }
- }
- boolean isA2dpPlaying() {
- if (mService == null) return false;
- List<BluetoothDevice> sinks = mService.getConnectedDevices();
- if (!sinks.isEmpty()) {
- if (mService.isA2dpPlaying(sinks.get(0))) {
- return true;
- }
- }
- return false;
- }
-
- public String toString() {
- return NAME;
- }
-
- public int getOrdinal() {
- return ORDINAL;
- }
-
- public int getNameResource(BluetoothDevice device) {
- return R.string.bluetooth_profile_a2dp;
- }
-
- public int getSummaryResourceForDevice(BluetoothDevice device) {
- int state = getConnectionStatus(device);
- switch (state) {
- case BluetoothProfile.STATE_DISCONNECTED:
- return R.string.bluetooth_a2dp_profile_summary_use_for;
-
- case BluetoothProfile.STATE_CONNECTED:
- return R.string.bluetooth_a2dp_profile_summary_connected;
-
- default:
- return Utils.getConnectionStateSummary(state);
- }
- }
-
- public int getDrawableResource(BluetoothClass btClass) {
- return R.drawable.ic_bt_headphones_a2dp;
- }
-
- protected void finalize() {
- if (V) Log.d(TAG, "finalize()");
- if (mService != null) {
- try {
- BluetoothAdapter.getDefaultAdapter().closeProfileProxy(BluetoothProfile.A2DP,
- mService);
- mService = null;
- }catch (Throwable t) {
- Log.w(TAG, "Error cleaning up A2DP proxy", t);
- }
- }
- }
-}
diff --git a/src/com/android/settings/bluetooth/BluetoothCallback.java b/src/com/android/settings/bluetooth/BluetoothCallback.java
deleted file mode 100644
index 3ce9adf..0000000
--- a/src/com/android/settings/bluetooth/BluetoothCallback.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-/**
- * BluetoothCallback provides a callback interface for the settings
- * UI to receive events from {@link BluetoothEventManager}.
- */
-interface BluetoothCallback {
- void onBluetoothStateChanged(int bluetoothState);
- void onScanningStateChanged(boolean started);
- void onDeviceAdded(CachedBluetoothDevice cachedDevice);
- void onDeviceDeleted(CachedBluetoothDevice cachedDevice);
- void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState);
-}
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceFilter.java b/src/com/android/settings/bluetooth/BluetoothDeviceFilter.java
deleted file mode 100644
index e4f11a2..0000000
--- a/src/com/android/settings/bluetooth/BluetoothDeviceFilter.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.bluetooth.BluetoothClass;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothUuid;
-import android.os.ParcelUuid;
-import android.util.Log;
-
-/**
- * BluetoothDeviceFilter contains a static method that returns a
- * Filter object that returns whether or not the BluetoothDevice
- * passed to it matches the specified filter type constant from
- * {@link android.bluetooth.BluetoothDevicePicker}.
- */
-final class BluetoothDeviceFilter {
- private static final String TAG = "BluetoothDeviceFilter";
-
- /** The filter interface to external classes. */
- interface Filter {
- boolean matches(BluetoothDevice device);
- }
-
- /** All filter singleton (referenced directly). */
- static final Filter ALL_FILTER = new AllFilter();
-
- /** Bonded devices only filter (referenced directly). */
- static final Filter BONDED_DEVICE_FILTER = new BondedDeviceFilter();
-
- /** Unbonded devices only filter (referenced directly). */
- static final Filter UNBONDED_DEVICE_FILTER = new UnbondedDeviceFilter();
-
- /** Table of singleton filter objects. */
- private static final Filter[] FILTERS = {
- ALL_FILTER, // FILTER_TYPE_ALL
- new AudioFilter(), // FILTER_TYPE_AUDIO
- new TransferFilter(), // FILTER_TYPE_TRANSFER
- new PanuFilter(), // FILTER_TYPE_PANU
- new NapFilter() // FILTER_TYPE_NAP
- };
-
- /** Private constructor. */
- private BluetoothDeviceFilter() {
- }
-
- /**
- * Returns the singleton {@link Filter} object for the specified type,
- * or {@link #ALL_FILTER} if the type value is out of range.
- *
- * @param filterType a constant from BluetoothDevicePicker
- * @return a singleton object implementing the {@link Filter} interface.
- */
- static Filter getFilter(int filterType) {
- if (filterType >= 0 && filterType < FILTERS.length) {
- return FILTERS[filterType];
- } else {
- Log.w(TAG, "Invalid filter type " + filterType + " for device picker");
- return ALL_FILTER;
- }
- }
-
- /** Filter that matches all devices. */
- private static final class AllFilter implements Filter {
- public boolean matches(BluetoothDevice device) {
- return true;
- }
- }
-
- /** Filter that matches only bonded devices. */
- private static final class BondedDeviceFilter implements Filter {
- public boolean matches(BluetoothDevice device) {
- return device.getBondState() == BluetoothDevice.BOND_BONDED;
- }
- }
-
- /** Filter that matches only unbonded devices. */
- private static final class UnbondedDeviceFilter implements Filter {
- public boolean matches(BluetoothDevice device) {
- return device.getBondState() != BluetoothDevice.BOND_BONDED;
- }
- }
-
- /** Parent class of filters based on UUID and/or Bluetooth class. */
- private abstract static class ClassUuidFilter implements Filter {
- abstract boolean matches(ParcelUuid[] uuids, BluetoothClass btClass);
-
- public boolean matches(BluetoothDevice device) {
- return matches(device.getUuids(), device.getBluetoothClass());
- }
- }
-
- /** Filter that matches devices that support AUDIO profiles. */
- private static final class AudioFilter extends ClassUuidFilter {
- @Override
- boolean matches(ParcelUuid[] uuids, BluetoothClass btClass) {
- if (uuids != null) {
- if (BluetoothUuid.containsAnyUuid(uuids, A2dpProfile.SINK_UUIDS)) {
- return true;
- }
- if (BluetoothUuid.containsAnyUuid(uuids, HeadsetProfile.UUIDS)) {
- return true;
- }
- } else if (btClass != null) {
- if (btClass.doesClassMatch(BluetoothClass.PROFILE_A2DP) ||
- btClass.doesClassMatch(BluetoothClass.PROFILE_HEADSET)) {
- return true;
- }
- }
- return false;
- }
- }
-
- /** Filter that matches devices that support Object Transfer. */
- private static final class TransferFilter extends ClassUuidFilter {
- @Override
- boolean matches(ParcelUuid[] uuids, BluetoothClass btClass) {
- if (uuids != null) {
- if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.ObexObjectPush)) {
- return true;
- }
- }
- return btClass != null
- && btClass.doesClassMatch(BluetoothClass.PROFILE_OPP);
- }
- }
-
- /** Filter that matches devices that support PAN User (PANU) profile. */
- private static final class PanuFilter extends ClassUuidFilter {
- @Override
- boolean matches(ParcelUuid[] uuids, BluetoothClass btClass) {
- if (uuids != null) {
- if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.PANU)) {
- return true;
- }
- }
- return btClass != null
- && btClass.doesClassMatch(BluetoothClass.PROFILE_PANU);
- }
- }
-
- /** Filter that matches devices that support NAP profile. */
- private static final class NapFilter extends ClassUuidFilter {
- @Override
- boolean matches(ParcelUuid[] uuids, BluetoothClass btClass) {
- if (uuids != null) {
- if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.NAP)) {
- return true;
- }
- }
- return btClass != null
- && btClass.doesClassMatch(BluetoothClass.PROFILE_NAP);
- }
- }
-}
diff --git a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
index 5d6b17c..67c026b 100644
--- a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
+++ b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
@@ -37,6 +37,11 @@ import android.widget.ImageView;
import com.android.settings.R;
import com.android.settings.search.Index;
import com.android.settings.search.SearchIndexableRaw;
+import com.android.settingslib.bluetooth.A2dpProfile;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.HeadsetProfile;
+import com.android.settingslib.bluetooth.HidProfile;
+import com.android.settingslib.bluetooth.LocalBluetoothProfile;
import java.util.List;
diff --git a/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java b/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java
index 17da0a7..6841b54 100755
--- a/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothDiscoverableEnabler.java
@@ -25,12 +25,11 @@ import android.content.SharedPreferences;
import android.os.Handler;
import android.os.SystemProperties;
import android.preference.Preference;
-import android.text.format.DateUtils;
+import android.util.Log;
import com.android.settings.R;
-
-import android.text.format.Time;
-import android.util.Log;
+import com.android.settingslib.bluetooth.BluetoothDiscoverableTimeoutReceiver;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
/**
* BluetoothDiscoverableEnabler is a helper to manage the "Discoverable"
diff --git a/src/com/android/settings/bluetooth/BluetoothDiscoverableTimeoutReceiver.java b/src/com/android/settings/bluetooth/BluetoothDiscoverableTimeoutReceiver.java
deleted file mode 100644
index 14f7b22..0000000
--- a/src/com/android/settings/bluetooth/BluetoothDiscoverableTimeoutReceiver.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-/* Required to handle timeout notification when phone is suspended */
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-
-import android.bluetooth.BluetoothAdapter;
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.util.Log;
-
-
-public class BluetoothDiscoverableTimeoutReceiver extends BroadcastReceiver {
- private static final String TAG = "BluetoothDiscoverableTimeoutReceiver";
-
- private static final String INTENT_DISCOVERABLE_TIMEOUT =
- "android.bluetooth.intent.DISCOVERABLE_TIMEOUT";
-
- static void setDiscoverableAlarm(Context context, long alarmTime) {
- Log.d(TAG, "setDiscoverableAlarm(): alarmTime = " + alarmTime);
-
- Intent intent = new Intent(INTENT_DISCOVERABLE_TIMEOUT);
- intent.setClass(context, BluetoothDiscoverableTimeoutReceiver.class);
- PendingIntent pending = PendingIntent.getBroadcast(
- context, 0, intent, 0);
- AlarmManager alarmManager =
- (AlarmManager) context.getSystemService (Context.ALARM_SERVICE);
-
- if (pending != null) {
- // Cancel any previous alarms that do the same thing.
- alarmManager.cancel(pending);
- Log.d(TAG, "setDiscoverableAlarm(): cancel prev alarm");
- }
- pending = PendingIntent.getBroadcast(
- context, 0, intent, 0);
-
- alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime, pending);
- }
-
- static void cancelDiscoverableAlarm(Context context) {
- Log.d(TAG, "cancelDiscoverableAlarm(): Enter");
-
- Intent intent = new Intent(INTENT_DISCOVERABLE_TIMEOUT);
- intent.setClass(context, BluetoothDiscoverableTimeoutReceiver.class);
- PendingIntent pending = PendingIntent.getBroadcast(
- context, 0, intent, PendingIntent.FLAG_NO_CREATE);
- if (pending != null) {
- // Cancel any previous alarms that do the same thing.
- AlarmManager alarmManager =
- (AlarmManager) context.getSystemService (Context.ALARM_SERVICE);
-
- alarmManager.cancel(pending);
- }
- }
-
- @Override
- public void onReceive(Context context, Intent intent) {
- LocalBluetoothAdapter localBluetoothAdapter = LocalBluetoothAdapter.getInstance();
-
- if(localBluetoothAdapter != null &&
- localBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON) {
- Log.d(TAG, "Disable discoverable...");
-
- localBluetoothAdapter.setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE);
- } else {
- Log.e(TAG, "localBluetoothAdapter is NULL!!");
- }
- }
-};
diff --git a/src/com/android/settings/bluetooth/BluetoothDiscoveryReceiver.java b/src/com/android/settings/bluetooth/BluetoothDiscoveryReceiver.java
index fbb6827..1ba9f85 100644
--- a/src/com/android/settings/bluetooth/BluetoothDiscoveryReceiver.java
+++ b/src/com/android/settings/bluetooth/BluetoothDiscoveryReceiver.java
@@ -22,6 +22,8 @@ import android.content.Context;
import android.content.Intent;
import android.util.Log;
+import com.android.settingslib.bluetooth.BluetoothEventManager;
+
/**
* BluetoothDiscoveryReceiver updates a timestamp when the
* Bluetooth adapter starts or finishes discovery mode. This
diff --git a/src/com/android/settings/bluetooth/BluetoothEnabler.java b/src/com/android/settings/bluetooth/BluetoothEnabler.java
index 188a37a..1c9eeb6 100644
--- a/src/com/android/settings/bluetooth/BluetoothEnabler.java
+++ b/src/com/android/settings/bluetooth/BluetoothEnabler.java
@@ -31,6 +31,8 @@ import com.android.settings.R;
import com.android.settings.search.Index;
import com.android.settings.widget.SwitchBar;
import com.android.settingslib.WirelessUtils;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
/**
* BluetoothEnabler is a helper to manage the Bluetooth on/off checkbox
@@ -77,7 +79,7 @@ public final class BluetoothEnabler implements SwitchBar.OnSwitchChangeListener
mSwitch = switchBar.getSwitch();
mValidListener = false;
- LocalBluetoothManager manager = LocalBluetoothManager.getInstance(context);
+ LocalBluetoothManager manager = Utils.getLocalBtManager(context);
if (manager == null) {
// Bluetooth is not supported
mLocalAdapter = null;
diff --git a/src/com/android/settings/bluetooth/BluetoothEventManager.java b/src/com/android/settings/bluetooth/BluetoothEventManager.java
deleted file mode 100755
index bf7606e..0000000
--- a/src/com/android/settings/bluetooth/BluetoothEventManager.java
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import com.android.settings.R;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothClass;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothProfile;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * BluetoothEventManager receives broadcasts and callbacks from the Bluetooth
- * API and dispatches the event on the UI thread to the right class in the
- * Settings.
- */
-final class BluetoothEventManager {
- private static final String TAG = "BluetoothEventManager";
-
- private final LocalBluetoothAdapter mLocalAdapter;
- private final CachedBluetoothDeviceManager mDeviceManager;
- private LocalBluetoothProfileManager mProfileManager;
- private final IntentFilter mAdapterIntentFilter, mProfileIntentFilter;
- private final Map<String, Handler> mHandlerMap;
- private Context mContext;
-
- private final Collection<BluetoothCallback> mCallbacks =
- new ArrayList<BluetoothCallback>();
-
- interface Handler {
- void onReceive(Context context, Intent intent, BluetoothDevice device);
- }
-
- void addHandler(String action, Handler handler) {
- mHandlerMap.put(action, handler);
- mAdapterIntentFilter.addAction(action);
- }
-
- void addProfileHandler(String action, Handler handler) {
- mHandlerMap.put(action, handler);
- mProfileIntentFilter.addAction(action);
- }
-
- // Set profile manager after construction due to circular dependency
- void setProfileManager(LocalBluetoothProfileManager manager) {
- mProfileManager = manager;
- }
-
- BluetoothEventManager(LocalBluetoothAdapter adapter,
- CachedBluetoothDeviceManager deviceManager, Context context) {
- mLocalAdapter = adapter;
- mDeviceManager = deviceManager;
- mAdapterIntentFilter = new IntentFilter();
- mProfileIntentFilter = new IntentFilter();
- mHandlerMap = new HashMap<String, Handler>();
- mContext = context;
-
- // Bluetooth on/off broadcasts
- addHandler(BluetoothAdapter.ACTION_STATE_CHANGED, new AdapterStateChangedHandler());
-
- // Discovery broadcasts
- addHandler(BluetoothAdapter.ACTION_DISCOVERY_STARTED, new ScanningStateChangedHandler(true));
- addHandler(BluetoothAdapter.ACTION_DISCOVERY_FINISHED, new ScanningStateChangedHandler(false));
- addHandler(BluetoothDevice.ACTION_FOUND, new DeviceFoundHandler());
- addHandler(BluetoothDevice.ACTION_DISAPPEARED, new DeviceDisappearedHandler());
- addHandler(BluetoothDevice.ACTION_NAME_CHANGED, new NameChangedHandler());
-
- // Pairing broadcasts
- addHandler(BluetoothDevice.ACTION_BOND_STATE_CHANGED, new BondStateChangedHandler());
- addHandler(BluetoothDevice.ACTION_PAIRING_CANCEL, new PairingCancelHandler());
-
- // Fine-grained state broadcasts
- addHandler(BluetoothDevice.ACTION_CLASS_CHANGED, new ClassChangedHandler());
- addHandler(BluetoothDevice.ACTION_UUID, new UuidChangedHandler());
-
- // Dock event broadcasts
- addHandler(Intent.ACTION_DOCK_EVENT, new DockEventHandler());
-
- mContext.registerReceiver(mBroadcastReceiver, mAdapterIntentFilter);
- }
-
- void registerProfileIntentReceiver() {
- mContext.registerReceiver(mBroadcastReceiver, mProfileIntentFilter);
- }
-
- /** Register to start receiving callbacks for Bluetooth events. */
- void registerCallback(BluetoothCallback callback) {
- synchronized (mCallbacks) {
- mCallbacks.add(callback);
- }
- }
-
- /** Unregister to stop receiving callbacks for Bluetooth events. */
- void unregisterCallback(BluetoothCallback callback) {
- synchronized (mCallbacks) {
- mCallbacks.remove(callback);
- }
- }
-
- // This can't be called from a broadcast receiver where the filter is set in the Manifest.
- private static String getDockedDeviceAddress(Context context) {
- // This works only because these broadcast intents are "sticky"
- Intent i = context.registerReceiver(null, new IntentFilter(Intent.ACTION_DOCK_EVENT));
- if (i != null) {
- int state = i.getIntExtra(Intent.EXTRA_DOCK_STATE, Intent.EXTRA_DOCK_STATE_UNDOCKED);
- if (state != Intent.EXTRA_DOCK_STATE_UNDOCKED) {
- BluetoothDevice device = i.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
- if (device != null) {
- return device.getAddress();
- }
- }
- }
- return null;
- }
-
- private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- BluetoothDevice device = intent
- .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
-
- Handler handler = mHandlerMap.get(action);
- if (handler != null) {
- handler.onReceive(context, intent, device);
- }
- }
- };
-
- private class AdapterStateChangedHandler implements Handler {
- public void onReceive(Context context, Intent intent,
- BluetoothDevice device) {
- int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
- BluetoothAdapter.ERROR);
- // update local profiles and get paired devices
- mLocalAdapter.setBluetoothStateInt(state);
- // send callback to update UI and possibly start scanning
- synchronized (mCallbacks) {
- for (BluetoothCallback callback : mCallbacks) {
- callback.onBluetoothStateChanged(state);
- }
- }
- // Inform CachedDeviceManager that the adapter state has changed
- mDeviceManager.onBluetoothStateChanged(state);
- }
- }
-
- private class ScanningStateChangedHandler implements Handler {
- private final boolean mStarted;
-
- ScanningStateChangedHandler(boolean started) {
- mStarted = started;
- }
- public void onReceive(Context context, Intent intent,
- BluetoothDevice device) {
- synchronized (mCallbacks) {
- for (BluetoothCallback callback : mCallbacks) {
- callback.onScanningStateChanged(mStarted);
- }
- }
- mDeviceManager.onScanningStateChanged(mStarted);
- LocalBluetoothPreferences.persistDiscoveringTimestamp(context);
- }
- }
-
- private class DeviceFoundHandler implements Handler {
- public void onReceive(Context context, Intent intent,
- BluetoothDevice device) {
- short rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI, Short.MIN_VALUE);
- BluetoothClass btClass = intent.getParcelableExtra(BluetoothDevice.EXTRA_CLASS);
- String name = intent.getStringExtra(BluetoothDevice.EXTRA_NAME);
- // TODO Pick up UUID. They should be available for 2.1 devices.
- // Skip for now, there's a bluez problem and we are not getting uuids even for 2.1.
- CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device);
- if (cachedDevice == null) {
- cachedDevice = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, device);
- Log.d(TAG, "DeviceFoundHandler created new CachedBluetoothDevice: "
- + cachedDevice);
- // callback to UI to create Preference for new device
- dispatchDeviceAdded(cachedDevice);
- }
- cachedDevice.setRssi(rssi);
- cachedDevice.setBtClass(btClass);
- cachedDevice.setNewName(name);
- cachedDevice.setVisible(true);
- }
- }
-
- private void dispatchDeviceAdded(CachedBluetoothDevice cachedDevice) {
- synchronized (mCallbacks) {
- for (BluetoothCallback callback : mCallbacks) {
- callback.onDeviceAdded(cachedDevice);
- }
- }
- }
-
- private class DeviceDisappearedHandler implements Handler {
- public void onReceive(Context context, Intent intent,
- BluetoothDevice device) {
- CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device);
- if (cachedDevice == null) {
- Log.w(TAG, "received ACTION_DISAPPEARED for an unknown device: " + device);
- return;
- }
- if (CachedBluetoothDeviceManager.onDeviceDisappeared(cachedDevice)) {
- synchronized (mCallbacks) {
- for (BluetoothCallback callback : mCallbacks) {
- callback.onDeviceDeleted(cachedDevice);
- }
- }
- }
- }
- }
-
- private class NameChangedHandler implements Handler {
- public void onReceive(Context context, Intent intent,
- BluetoothDevice device) {
- mDeviceManager.onDeviceNameUpdated(device);
- }
- }
-
- private class BondStateChangedHandler implements Handler {
- public void onReceive(Context context, Intent intent,
- BluetoothDevice device) {
- if (device == null) {
- Log.e(TAG, "ACTION_BOND_STATE_CHANGED with no EXTRA_DEVICE");
- return;
- }
- int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE,
- BluetoothDevice.ERROR);
- CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device);
- if (cachedDevice == null) {
- Log.w(TAG, "CachedBluetoothDevice for device " + device +
- " not found, calling readPairedDevices().");
- if (!readPairedDevices()) {
- Log.e(TAG, "Got bonding state changed for " + device +
- ", but we have no record of that device.");
- return;
- }
- cachedDevice = mDeviceManager.findDevice(device);
- if (cachedDevice == null) {
- Log.e(TAG, "Got bonding state changed for " + device +
- ", but device not added in cache.");
- return;
- }
- }
-
- synchronized (mCallbacks) {
- for (BluetoothCallback callback : mCallbacks) {
- callback.onDeviceBondStateChanged(cachedDevice, bondState);
- }
- }
- cachedDevice.onBondingStateChanged(bondState);
-
- if (bondState == BluetoothDevice.BOND_NONE) {
- if (device.isBluetoothDock()) {
- // After a dock is unpaired, we will forget the settings
- LocalBluetoothPreferences
- .removeDockAutoConnectSetting(context, device.getAddress());
-
- // if the device is undocked, remove it from the list as well
- if (!device.getAddress().equals(getDockedDeviceAddress(context))) {
- cachedDevice.setVisible(false);
- }
- }
- int reason = intent.getIntExtra(BluetoothDevice.EXTRA_REASON,
- BluetoothDevice.ERROR);
-
- showUnbondMessage(context, cachedDevice.getName(), reason);
- }
- }
-
- /**
- * Called when we have reached the unbonded state.
- *
- * @param reason one of the error reasons from
- * BluetoothDevice.UNBOND_REASON_*
- */
- private void showUnbondMessage(Context context, String name, int reason) {
- int errorMsg;
-
- switch(reason) {
- case BluetoothDevice.UNBOND_REASON_AUTH_FAILED:
- errorMsg = R.string.bluetooth_pairing_pin_error_message;
- break;
- case BluetoothDevice.UNBOND_REASON_AUTH_REJECTED:
- errorMsg = R.string.bluetooth_pairing_rejected_error_message;
- break;
- case BluetoothDevice.UNBOND_REASON_REMOTE_DEVICE_DOWN:
- errorMsg = R.string.bluetooth_pairing_device_down_error_message;
- break;
- case BluetoothDevice.UNBOND_REASON_DISCOVERY_IN_PROGRESS:
- case BluetoothDevice.UNBOND_REASON_AUTH_TIMEOUT:
- case BluetoothDevice.UNBOND_REASON_REPEATED_ATTEMPTS:
- case BluetoothDevice.UNBOND_REASON_REMOTE_AUTH_CANCELED:
- errorMsg = R.string.bluetooth_pairing_error_message;
- break;
- default:
- Log.w(TAG, "showUnbondMessage: Not displaying any message for reason: " + reason);
- return;
- }
- Utils.showError(context, name, errorMsg);
- }
- }
-
- private class ClassChangedHandler implements Handler {
- public void onReceive(Context context, Intent intent,
- BluetoothDevice device) {
- mDeviceManager.onBtClassChanged(device);
- }
- }
-
- private class UuidChangedHandler implements Handler {
- public void onReceive(Context context, Intent intent,
- BluetoothDevice device) {
- mDeviceManager.onUuidChanged(device);
- }
- }
-
- private class PairingCancelHandler implements Handler {
- public void onReceive(Context context, Intent intent, BluetoothDevice device) {
- if (device == null) {
- Log.e(TAG, "ACTION_PAIRING_CANCEL with no EXTRA_DEVICE");
- return;
- }
- int errorMsg = R.string.bluetooth_pairing_error_message;
- CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device);
- Utils.showError(context, cachedDevice.getName(), errorMsg);
- }
- }
-
- private class DockEventHandler implements Handler {
- public void onReceive(Context context, Intent intent, BluetoothDevice device) {
- // Remove if unpair device upon undocking
- int anythingButUnDocked = Intent.EXTRA_DOCK_STATE_UNDOCKED + 1;
- int state = intent.getIntExtra(Intent.EXTRA_DOCK_STATE, anythingButUnDocked);
- if (state == Intent.EXTRA_DOCK_STATE_UNDOCKED) {
- if (device != null && device.getBondState() == BluetoothDevice.BOND_NONE) {
- CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device);
- if (cachedDevice != null) {
- cachedDevice.setVisible(false);
- }
- }
- }
- }
- }
- boolean readPairedDevices() {
- Set<BluetoothDevice> bondedDevices = mLocalAdapter.getBondedDevices();
- if (bondedDevices == null) {
- return false;
- }
-
- boolean deviceAdded = false;
- for (BluetoothDevice device : bondedDevices) {
- CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device);
- if (cachedDevice == null) {
- cachedDevice = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, device);
- dispatchDeviceAdded(cachedDevice);
- deviceAdded = true;
- }
- }
-
- return deviceAdded;
- }
-}
diff --git a/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java b/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
index 4466aea..879cd9d 100644
--- a/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothNameDialogFragment.java
@@ -40,6 +40,8 @@ import android.widget.EditText;
import android.widget.TextView;
import com.android.settings.R;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
/**
* Dialog fragment for renaming the local Bluetooth device.
@@ -80,7 +82,7 @@ public final class BluetoothNameDialogFragment extends DialogFragment implements
};
public BluetoothNameDialogFragment() {
- LocalBluetoothManager localManager = LocalBluetoothManager.getInstance(getActivity());
+ LocalBluetoothManager localManager = Utils.getLocalBtManager(getActivity());
mLocalAdapter = localManager.getBluetoothAdapter();
}
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingDialog.java b/src/com/android/settings/bluetooth/BluetoothPairingDialog.java
index 6f5c136..5b54c32 100755
--- a/src/com/android/settings/bluetooth/BluetoothPairingDialog.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingDialog.java
@@ -43,6 +43,9 @@ import android.widget.TextView;
import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
import com.android.settings.R;
+import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+
import android.view.KeyEvent;
import java.util.Locale;
@@ -103,7 +106,7 @@ public final class BluetoothPairingDialog extends AlertActivity implements
return;
}
- mBluetoothManager = LocalBluetoothManager.getInstance(this);
+ mBluetoothManager = Utils.getLocalBtManager(this);
if (mBluetoothManager == null) {
Log.e(TAG, "Error: BluetoothAdapter not supported by system");
finish();
diff --git a/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java b/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java
index f43d176..7a1e69d 100755
--- a/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java
+++ b/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java
@@ -31,8 +31,10 @@ import android.widget.Button;
import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
-
import com.android.settings.R;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
/**
* BluetoothPermissionActivity shows a dialog for accepting incoming
@@ -192,7 +194,7 @@ public class BluetoothPermissionActivity extends AlertActivity implements
boolean always = true;
if (mRequestType == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS) {
- LocalBluetoothManager bluetoothManager = LocalBluetoothManager.getInstance(this);
+ LocalBluetoothManager bluetoothManager = Utils.getLocalBtManager(this);
CachedBluetoothDeviceManager cachedDeviceManager =
bluetoothManager.getCachedDeviceManager();
CachedBluetoothDevice cachedDevice = cachedDeviceManager.findDevice(mDevice);
diff --git a/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java b/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
index 12c1d77..e436b79 100644
--- a/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
+++ b/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
@@ -28,6 +28,9 @@ import android.os.UserManager;
import android.util.Log;
import com.android.settings.R;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
/**
* BluetoothPermissionRequest is a receiver to receive Bluetooth connection
@@ -200,7 +203,7 @@ public final class BluetoothPermissionRequest extends BroadcastReceiver {
return processed;
}
- LocalBluetoothManager bluetoothManager = LocalBluetoothManager.getInstance(mContext);
+ LocalBluetoothManager bluetoothManager = Utils.getLocalBtManager(mContext);
CachedBluetoothDeviceManager cachedDeviceManager =
bluetoothManager.getCachedDeviceManager();
CachedBluetoothDevice cachedDevice = cachedDeviceManager.findDevice(mDevice);
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index dd2c9df..c85e515 100755
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -28,12 +28,9 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceCategory;
-import android.preference.PreferenceFragment;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.util.Log;
@@ -44,17 +41,18 @@ import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
-import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Index;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
import com.android.settings.widget.SwitchBar;
+import com.android.settingslib.bluetooth.BluetoothDeviceFilter;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
import java.util.ArrayList;
import java.util.List;
@@ -506,7 +504,7 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem
result.add(data);
// Add cached paired BT devices
- LocalBluetoothManager lbtm = LocalBluetoothManager.getInstance(context);
+ LocalBluetoothManager lbtm = Utils.getLocalBtManager(context);
// LocalBluetoothManager.getInstance can return null if the device does not
// support bluetooth (e.g. the emulator).
if (lbtm != null) {
diff --git a/src/com/android/settings/bluetooth/BluetoothVisibilityTimeoutFragment.java b/src/com/android/settings/bluetooth/BluetoothVisibilityTimeoutFragment.java
deleted file mode 100644
index a65c6c1..0000000
--- a/src/com/android/settings/bluetooth/BluetoothVisibilityTimeoutFragment.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.bluetooth.BluetoothAdapter;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.os.Bundle;
-import android.text.Editable;
-import android.text.InputFilter;
-import android.text.TextWatcher;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.widget.Button;
-import android.widget.EditText;
-
-import com.android.internal.app.AlertController;
-import com.android.settings.R;
-
-/**
- * Dialog fragment for setting the discoverability timeout.
- */
-public final class BluetoothVisibilityTimeoutFragment extends DialogFragment
- implements DialogInterface.OnClickListener {
-
- private final BluetoothDiscoverableEnabler mDiscoverableEnabler;
-
- public BluetoothVisibilityTimeoutFragment() {
- mDiscoverableEnabler = LocalBluetoothManager.getInstance(getActivity())
- .getDiscoverableEnabler();
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- return new AlertDialog.Builder(getActivity())
- .setTitle(R.string.bluetooth_visibility_timeout)
- .setSingleChoiceItems(R.array.bluetooth_visibility_timeout_entries,
- mDiscoverableEnabler.getDiscoverableTimeoutIndex(), this)
- .setNegativeButton(android.R.string.cancel, null)
- .create();
- }
-
- public void onClick(DialogInterface dialog, int which) {
- mDiscoverableEnabler.setDiscoverableTimeout(which);
- dismiss();
- }
-}
diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
deleted file mode 100755
index f33f4db..0000000
--- a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
+++ /dev/null
@@ -1,787 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.bluetooth.BluetoothClass;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothProfile;
-import android.bluetooth.BluetoothUuid;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.os.ParcelUuid;
-import android.os.SystemClock;
-import android.text.TextUtils;
-import android.util.Log;
-import android.bluetooth.BluetoothAdapter;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * CachedBluetoothDevice represents a remote Bluetooth device. It contains
- * attributes of the device (such as the address, name, RSSI, etc.) and
- * functionality that can be performed on the device (connect, pair, disconnect,
- * etc.).
- */
-final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> {
- private static final String TAG = "CachedBluetoothDevice";
- private static final boolean DEBUG = Utils.V;
-
- private final Context mContext;
- private final LocalBluetoothAdapter mLocalAdapter;
- private final LocalBluetoothProfileManager mProfileManager;
- private final BluetoothDevice mDevice;
- private String mName;
- private short mRssi;
- private BluetoothClass mBtClass;
- private HashMap<LocalBluetoothProfile, Integer> mProfileConnectionState;
-
- private final List<LocalBluetoothProfile> mProfiles =
- new ArrayList<LocalBluetoothProfile>();
-
- // List of profiles that were previously in mProfiles, but have been removed
- private final List<LocalBluetoothProfile> mRemovedProfiles =
- new ArrayList<LocalBluetoothProfile>();
-
- // Device supports PANU but not NAP: remove PanProfile after device disconnects from NAP
- private boolean mLocalNapRoleConnected;
-
- private boolean mVisible;
-
- private int mPhonebookPermissionChoice;
-
- private int mMessagePermissionChoice;
-
- private int mMessageRejectionCount;
-
- private final Collection<Callback> mCallbacks = new ArrayList<Callback>();
-
- // Following constants indicate the user's choices of Phone book/message access settings
- // User hasn't made any choice or settings app has wiped out the memory
- public final static int ACCESS_UNKNOWN = 0;
- // User has accepted the connection and let Settings app remember the decision
- public final static int ACCESS_ALLOWED = 1;
- // User has rejected the connection and let Settings app remember the decision
- public final static int ACCESS_REJECTED = 2;
-
- // How many times user should reject the connection to make the choice persist.
- private final static int MESSAGE_REJECTION_COUNT_LIMIT_TO_PERSIST = 2;
-
- private final static String MESSAGE_REJECTION_COUNT_PREFS_NAME = "bluetooth_message_reject";
-
- /**
- * When we connect to multiple profiles, we only want to display a single
- * error even if they all fail. This tracks that state.
- */
- private boolean mIsConnectingErrorPossible;
-
- /**
- * Last time a bt profile auto-connect was attempted.
- * If an ACTION_UUID intent comes in within
- * MAX_UUID_DELAY_FOR_AUTO_CONNECT milliseconds, we will try auto-connect
- * again with the new UUIDs
- */
- private long mConnectAttempted;
-
- // See mConnectAttempted
- private static final long MAX_UUID_DELAY_FOR_AUTO_CONNECT = 5000;
-
- /** Auto-connect after pairing only if locally initiated. */
- private boolean mConnectAfterPairing;
-
- /**
- * Describes the current device and profile for logging.
- *
- * @param profile Profile to describe
- * @return Description of the device and profile
- */
- private String describe(LocalBluetoothProfile profile) {
- StringBuilder sb = new StringBuilder();
- sb.append("Address:").append(mDevice);
- if (profile != null) {
- sb.append(" Profile:").append(profile);
- }
-
- return sb.toString();
- }
-
- void onProfileStateChanged(LocalBluetoothProfile profile, int newProfileState) {
- if (Utils.D) {
- Log.d(TAG, "onProfileStateChanged: profile " + profile +
- " newProfileState " + newProfileState);
- }
- if (mLocalAdapter.getBluetoothState() == BluetoothAdapter.STATE_TURNING_OFF)
- {
- if (Utils.D) Log.d(TAG, " BT Turninig Off...Profile conn state change ignored...");
- return;
- }
- mProfileConnectionState.put(profile, newProfileState);
- if (newProfileState == BluetoothProfile.STATE_CONNECTED) {
- if (profile instanceof MapProfile) {
- profile.setPreferred(mDevice, true);
- } else if (!mProfiles.contains(profile)) {
- mRemovedProfiles.remove(profile);
- mProfiles.add(profile);
- if (profile instanceof PanProfile &&
- ((PanProfile) profile).isLocalRoleNap(mDevice)) {
- // Device doesn't support NAP, so remove PanProfile on disconnect
- mLocalNapRoleConnected = true;
- }
- }
- } else if (profile instanceof MapProfile &&
- newProfileState == BluetoothProfile.STATE_DISCONNECTED) {
- profile.setPreferred(mDevice, false);
- } else if (mLocalNapRoleConnected && profile instanceof PanProfile &&
- ((PanProfile) profile).isLocalRoleNap(mDevice) &&
- newProfileState == BluetoothProfile.STATE_DISCONNECTED) {
- Log.d(TAG, "Removing PanProfile from device after NAP disconnect");
- mProfiles.remove(profile);
- mRemovedProfiles.add(profile);
- mLocalNapRoleConnected = false;
- }
- }
-
- CachedBluetoothDevice(Context context,
- LocalBluetoothAdapter adapter,
- LocalBluetoothProfileManager profileManager,
- BluetoothDevice device) {
- mContext = context;
- mLocalAdapter = adapter;
- mProfileManager = profileManager;
- mDevice = device;
- mProfileConnectionState = new HashMap<LocalBluetoothProfile, Integer>();
- fillData();
- }
-
- void disconnect() {
- for (LocalBluetoothProfile profile : mProfiles) {
- disconnect(profile);
- }
- // Disconnect PBAP server in case its connected
- // This is to ensure all the profiles are disconnected as some CK/Hs do not
- // disconnect PBAP connection when HF connection is brought down
- PbapServerProfile PbapProfile = mProfileManager.getPbapProfile();
- if (PbapProfile.getConnectionStatus(mDevice) == BluetoothProfile.STATE_CONNECTED)
- {
- PbapProfile.disconnect(mDevice);
- }
- }
-
- void disconnect(LocalBluetoothProfile profile) {
- if (profile.disconnect(mDevice)) {
- if (Utils.D) {
- Log.d(TAG, "Command sent successfully:DISCONNECT " + describe(profile));
- }
- }
- }
-
- void connect(boolean connectAllProfiles) {
- if (!ensurePaired()) {
- return;
- }
-
- mConnectAttempted = SystemClock.elapsedRealtime();
- connectWithoutResettingTimer(connectAllProfiles);
- }
-
- void onBondingDockConnect() {
- // Attempt to connect if UUIDs are available. Otherwise,
- // we will connect when the ACTION_UUID intent arrives.
- connect(false);
- }
-
- private void connectWithoutResettingTimer(boolean connectAllProfiles) {
- // Try to initialize the profiles if they were not.
- if (mProfiles.isEmpty()) {
- // if mProfiles is empty, then do not invoke updateProfiles. This causes a race
- // condition with carkits during pairing, wherein RemoteDevice.UUIDs have been updated
- // from bluetooth stack but ACTION.uuid is not sent yet.
- // Eventually ACTION.uuid will be received which shall trigger the connection of the
- // various profiles
- // If UUIDs are not available yet, connect will be happen
- // upon arrival of the ACTION_UUID intent.
- Log.d(TAG, "No profiles. Maybe we will connect later");
- return;
- }
-
- // Reset the only-show-one-error-dialog tracking variable
- mIsConnectingErrorPossible = true;
-
- int preferredProfiles = 0;
- for (LocalBluetoothProfile profile : mProfiles) {
- if (connectAllProfiles ? profile.isConnectable() : profile.isAutoConnectable()) {
- if (profile.isPreferred(mDevice)) {
- ++preferredProfiles;
- connectInt(profile);
- }
- }
- }
- if (DEBUG) Log.d(TAG, "Preferred profiles = " + preferredProfiles);
-
- if (preferredProfiles == 0) {
- connectAutoConnectableProfiles();
- }
- }
-
- private void connectAutoConnectableProfiles() {
- if (!ensurePaired()) {
- return;
- }
- // Reset the only-show-one-error-dialog tracking variable
- mIsConnectingErrorPossible = true;
-
- for (LocalBluetoothProfile profile : mProfiles) {
- if (profile.isAutoConnectable()) {
- profile.setPreferred(mDevice, true);
- connectInt(profile);
- }
- }
- }
-
- /**
- * Connect this device to the specified profile.
- *
- * @param profile the profile to use with the remote device
- */
- void connectProfile(LocalBluetoothProfile profile) {
- mConnectAttempted = SystemClock.elapsedRealtime();
- // Reset the only-show-one-error-dialog tracking variable
- mIsConnectingErrorPossible = true;
- connectInt(profile);
- // Refresh the UI based on profile.connect() call
- refresh();
- }
-
- synchronized void connectInt(LocalBluetoothProfile profile) {
- if (!ensurePaired()) {
- return;
- }
- if (profile.connect(mDevice)) {
- if (Utils.D) {
- Log.d(TAG, "Command sent successfully:CONNECT " + describe(profile));
- }
- return;
- }
- Log.i(TAG, "Failed to connect " + profile.toString() + " to " + mName);
- }
-
- private boolean ensurePaired() {
- if (getBondState() == BluetoothDevice.BOND_NONE) {
- startPairing();
- return false;
- } else {
- return true;
- }
- }
-
- boolean startPairing() {
- // Pairing is unreliable while scanning, so cancel discovery
- if (mLocalAdapter.isDiscovering()) {
- mLocalAdapter.cancelDiscovery();
- }
-
- if (!mDevice.createBond()) {
- return false;
- }
-
- mConnectAfterPairing = true; // auto-connect after pairing
- return true;
- }
-
- /**
- * Return true if user initiated pairing on this device. The message text is
- * slightly different for local vs. remote initiated pairing dialogs.
- */
- boolean isUserInitiatedPairing() {
- return mConnectAfterPairing;
- }
-
- void unpair() {
- int state = getBondState();
-
- if (state == BluetoothDevice.BOND_BONDING) {
- mDevice.cancelBondProcess();
- }
-
- if (state != BluetoothDevice.BOND_NONE) {
- final BluetoothDevice dev = mDevice;
- if (dev != null) {
- final boolean successful = dev.removeBond();
- if (successful) {
- if (Utils.D) {
- Log.d(TAG, "Command sent successfully:REMOVE_BOND " + describe(null));
- }
- } else if (Utils.V) {
- Log.v(TAG, "Framework rejected command immediately:REMOVE_BOND " +
- describe(null));
- }
- }
- }
- }
-
- int getProfileConnectionState(LocalBluetoothProfile profile) {
- if (mProfileConnectionState == null ||
- mProfileConnectionState.get(profile) == null) {
- // If cache is empty make the binder call to get the state
- int state = profile.getConnectionStatus(mDevice);
- mProfileConnectionState.put(profile, state);
- }
- return mProfileConnectionState.get(profile);
- }
-
- public void clearProfileConnectionState ()
- {
- if (Utils.D) {
- Log.d(TAG," Clearing all connection state for dev:" + mDevice.getName());
- }
- for (LocalBluetoothProfile profile :getProfiles()) {
- mProfileConnectionState.put(profile, BluetoothProfile.STATE_DISCONNECTED);
- }
- }
-
- // TODO: do any of these need to run async on a background thread?
- private void fillData() {
- fetchName();
- fetchBtClass();
- updateProfiles();
- migratePhonebookPermissionChoice();
- migrateMessagePermissionChoice();
- fetchMessageRejectionCount();
-
- mVisible = false;
- dispatchAttributesChanged();
- }
-
- BluetoothDevice getDevice() {
- return mDevice;
- }
-
- String getName() {
- return mName;
- }
-
- /**
- * Populate name from BluetoothDevice.ACTION_FOUND intent
- */
- void setNewName(String name) {
- if (mName == null) {
- mName = name;
- if (mName == null || TextUtils.isEmpty(mName)) {
- mName = mDevice.getAddress();
- }
- dispatchAttributesChanged();
- }
- }
-
- /**
- * user changes the device name
- */
- void setName(String name) {
- if (!mName.equals(name)) {
- mName = name;
- mDevice.setAlias(name);
- dispatchAttributesChanged();
- }
- }
-
- void refreshName() {
- fetchName();
- dispatchAttributesChanged();
- }
-
- private void fetchName() {
- mName = mDevice.getAliasName();
-
- if (TextUtils.isEmpty(mName)) {
- mName = mDevice.getAddress();
- if (DEBUG) Log.d(TAG, "Device has no name (yet), use address: " + mName);
- }
- }
-
- void refresh() {
- dispatchAttributesChanged();
- }
-
- boolean isVisible() {
- return mVisible;
- }
-
- void setVisible(boolean visible) {
- if (mVisible != visible) {
- mVisible = visible;
- dispatchAttributesChanged();
- }
- }
-
- int getBondState() {
- return mDevice.getBondState();
- }
-
- void setRssi(short rssi) {
- if (mRssi != rssi) {
- mRssi = rssi;
- dispatchAttributesChanged();
- }
- }
-
- /**
- * Checks whether we are connected to this device (any profile counts).
- *
- * @return Whether it is connected.
- */
- boolean isConnected() {
- for (LocalBluetoothProfile profile : mProfiles) {
- int status = getProfileConnectionState(profile);
- if (status == BluetoothProfile.STATE_CONNECTED) {
- return true;
- }
- }
-
- return false;
- }
-
- boolean isConnectedProfile(LocalBluetoothProfile profile) {
- int status = getProfileConnectionState(profile);
- return status == BluetoothProfile.STATE_CONNECTED;
-
- }
-
- boolean isBusy() {
- for (LocalBluetoothProfile profile : mProfiles) {
- int status = getProfileConnectionState(profile);
- if (status == BluetoothProfile.STATE_CONNECTING
- || status == BluetoothProfile.STATE_DISCONNECTING) {
- return true;
- }
- }
- return getBondState() == BluetoothDevice.BOND_BONDING;
- }
-
- /**
- * Fetches a new value for the cached BT class.
- */
- private void fetchBtClass() {
- mBtClass = mDevice.getBluetoothClass();
- }
-
- private boolean updateProfiles() {
- ParcelUuid[] uuids = mDevice.getUuids();
- if (uuids == null) return false;
-
- ParcelUuid[] localUuids = mLocalAdapter.getUuids();
- if (localUuids == null) return false;
-
- /**
- * Now we know if the device supports PBAP, update permissions...
- */
- processPhonebookAccess();
-
- mProfileManager.updateProfiles(uuids, localUuids, mProfiles, mRemovedProfiles,
- mLocalNapRoleConnected, mDevice);
-
- if (DEBUG) {
- Log.e(TAG, "updating profiles for " + mDevice.getAliasName());
- BluetoothClass bluetoothClass = mDevice.getBluetoothClass();
-
- if (bluetoothClass != null) Log.v(TAG, "Class: " + bluetoothClass.toString());
- Log.v(TAG, "UUID:");
- for (ParcelUuid uuid : uuids) {
- Log.v(TAG, " " + uuid);
- }
- }
- return true;
- }
-
- /**
- * Refreshes the UI for the BT class, including fetching the latest value
- * for the class.
- */
- void refreshBtClass() {
- fetchBtClass();
- dispatchAttributesChanged();
- }
-
- /**
- * Refreshes the UI when framework alerts us of a UUID change.
- */
- void onUuidChanged() {
- updateProfiles();
-
- if (DEBUG) {
- Log.e(TAG, "onUuidChanged: Time since last connect"
- + (SystemClock.elapsedRealtime() - mConnectAttempted));
- }
-
- /*
- * If a connect was attempted earlier without any UUID, we will do the
- * connect now.
- */
- if (!mProfiles.isEmpty()
- && (mConnectAttempted + MAX_UUID_DELAY_FOR_AUTO_CONNECT) > SystemClock
- .elapsedRealtime()) {
- connectWithoutResettingTimer(false);
- }
- dispatchAttributesChanged();
- }
-
- void onBondingStateChanged(int bondState) {
- if (bondState == BluetoothDevice.BOND_NONE) {
- mProfiles.clear();
- mConnectAfterPairing = false; // cancel auto-connect
- setPhonebookPermissionChoice(ACCESS_UNKNOWN);
- setMessagePermissionChoice(ACCESS_UNKNOWN);
- mMessageRejectionCount = 0;
- saveMessageRejectionCount();
- }
-
- refresh();
-
- if (bondState == BluetoothDevice.BOND_BONDED) {
- if (mDevice.isBluetoothDock()) {
- onBondingDockConnect();
- } else if (mConnectAfterPairing) {
- connect(false);
- }
- mConnectAfterPairing = false;
- }
- }
-
- void setBtClass(BluetoothClass btClass) {
- if (btClass != null && mBtClass != btClass) {
- mBtClass = btClass;
- dispatchAttributesChanged();
- }
- }
-
- BluetoothClass getBtClass() {
- return mBtClass;
- }
-
- List<LocalBluetoothProfile> getProfiles() {
- return Collections.unmodifiableList(mProfiles);
- }
-
- List<LocalBluetoothProfile> getConnectableProfiles() {
- List<LocalBluetoothProfile> connectableProfiles =
- new ArrayList<LocalBluetoothProfile>();
- for (LocalBluetoothProfile profile : mProfiles) {
- if (profile.isConnectable()) {
- connectableProfiles.add(profile);
- }
- }
- return connectableProfiles;
- }
-
- List<LocalBluetoothProfile> getRemovedProfiles() {
- return mRemovedProfiles;
- }
-
- void registerCallback(Callback callback) {
- synchronized (mCallbacks) {
- mCallbacks.add(callback);
- }
- }
-
- void unregisterCallback(Callback callback) {
- synchronized (mCallbacks) {
- mCallbacks.remove(callback);
- }
- }
-
- private void dispatchAttributesChanged() {
- synchronized (mCallbacks) {
- for (Callback callback : mCallbacks) {
- callback.onDeviceAttributesChanged();
- }
- }
- }
-
- @Override
- public String toString() {
- return mDevice.toString();
- }
-
- @Override
- public boolean equals(Object o) {
- if ((o == null) || !(o instanceof CachedBluetoothDevice)) {
- return false;
- }
- return mDevice.equals(((CachedBluetoothDevice) o).mDevice);
- }
-
- @Override
- public int hashCode() {
- return mDevice.getAddress().hashCode();
- }
-
- // This comparison uses non-final fields so the sort order may change
- // when device attributes change (such as bonding state). Settings
- // will completely refresh the device list when this happens.
- public int compareTo(CachedBluetoothDevice another) {
- // Connected above not connected
- int comparison = (another.isConnected() ? 1 : 0) - (isConnected() ? 1 : 0);
- if (comparison != 0) return comparison;
-
- // Paired above not paired
- comparison = (another.getBondState() == BluetoothDevice.BOND_BONDED ? 1 : 0) -
- (getBondState() == BluetoothDevice.BOND_BONDED ? 1 : 0);
- if (comparison != 0) return comparison;
-
- // Visible above not visible
- comparison = (another.mVisible ? 1 : 0) - (mVisible ? 1 : 0);
- if (comparison != 0) return comparison;
-
- // Stronger signal above weaker signal
- comparison = another.mRssi - mRssi;
- if (comparison != 0) return comparison;
-
- // Fallback on name
- return mName.compareTo(another.mName);
- }
-
- public interface Callback {
- void onDeviceAttributesChanged();
- }
-
- int getPhonebookPermissionChoice() {
- int permission = mDevice.getPhonebookAccessPermission();
- if (permission == BluetoothDevice.ACCESS_ALLOWED) {
- return ACCESS_ALLOWED;
- } else if (permission == BluetoothDevice.ACCESS_REJECTED) {
- return ACCESS_REJECTED;
- }
- return ACCESS_UNKNOWN;
- }
-
- void setPhonebookPermissionChoice(int permissionChoice) {
- int permission = BluetoothDevice.ACCESS_UNKNOWN;
- if (permissionChoice == ACCESS_ALLOWED) {
- permission = BluetoothDevice.ACCESS_ALLOWED;
- } else if (permissionChoice == ACCESS_REJECTED) {
- permission = BluetoothDevice.ACCESS_REJECTED;
- }
- mDevice.setPhonebookAccessPermission(permission);
- }
-
- // Migrates data from old data store (in Settings app's shared preferences) to new (in Bluetooth
- // app's shared preferences).
- private void migratePhonebookPermissionChoice() {
- SharedPreferences preferences = mContext.getSharedPreferences(
- "bluetooth_phonebook_permission", Context.MODE_PRIVATE);
- if (!preferences.contains(mDevice.getAddress())) {
- return;
- }
-
- if (mDevice.getPhonebookAccessPermission() == BluetoothDevice.ACCESS_UNKNOWN) {
- int oldPermission = preferences.getInt(mDevice.getAddress(), ACCESS_UNKNOWN);
- if (oldPermission == ACCESS_ALLOWED) {
- mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
- } else if (oldPermission == ACCESS_REJECTED) {
- mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_REJECTED);
- }
- }
-
- SharedPreferences.Editor editor = preferences.edit();
- editor.remove(mDevice.getAddress());
- editor.commit();
- }
-
- int getMessagePermissionChoice() {
- int permission = mDevice.getMessageAccessPermission();
- if (permission == BluetoothDevice.ACCESS_ALLOWED) {
- return ACCESS_ALLOWED;
- } else if (permission == BluetoothDevice.ACCESS_REJECTED) {
- return ACCESS_REJECTED;
- }
- return ACCESS_UNKNOWN;
- }
-
- void setMessagePermissionChoice(int permissionChoice) {
- int permission = BluetoothDevice.ACCESS_UNKNOWN;
- if (permissionChoice == ACCESS_ALLOWED) {
- permission = BluetoothDevice.ACCESS_ALLOWED;
- } else if (permissionChoice == ACCESS_REJECTED) {
- permission = BluetoothDevice.ACCESS_REJECTED;
- }
- mDevice.setMessageAccessPermission(permission);
- }
-
- // Migrates data from old data store (in Settings app's shared preferences) to new (in Bluetooth
- // app's shared preferences).
- private void migrateMessagePermissionChoice() {
- SharedPreferences preferences = mContext.getSharedPreferences(
- "bluetooth_message_permission", Context.MODE_PRIVATE);
- if (!preferences.contains(mDevice.getAddress())) {
- return;
- }
-
- if (mDevice.getMessageAccessPermission() == BluetoothDevice.ACCESS_UNKNOWN) {
- int oldPermission = preferences.getInt(mDevice.getAddress(), ACCESS_UNKNOWN);
- if (oldPermission == ACCESS_ALLOWED) {
- mDevice.setMessageAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
- } else if (oldPermission == ACCESS_REJECTED) {
- mDevice.setMessageAccessPermission(BluetoothDevice.ACCESS_REJECTED);
- }
- }
-
- SharedPreferences.Editor editor = preferences.edit();
- editor.remove(mDevice.getAddress());
- editor.commit();
- }
-
- /**
- * @return Whether this rejection should persist.
- */
- boolean checkAndIncreaseMessageRejectionCount() {
- if (mMessageRejectionCount < MESSAGE_REJECTION_COUNT_LIMIT_TO_PERSIST) {
- mMessageRejectionCount++;
- saveMessageRejectionCount();
- }
- return mMessageRejectionCount >= MESSAGE_REJECTION_COUNT_LIMIT_TO_PERSIST;
- }
-
- private void fetchMessageRejectionCount() {
- SharedPreferences preference = mContext.getSharedPreferences(
- MESSAGE_REJECTION_COUNT_PREFS_NAME, Context.MODE_PRIVATE);
- mMessageRejectionCount = preference.getInt(mDevice.getAddress(), 0);
- }
-
- private void saveMessageRejectionCount() {
- SharedPreferences.Editor editor = mContext.getSharedPreferences(
- MESSAGE_REJECTION_COUNT_PREFS_NAME, Context.MODE_PRIVATE).edit();
- if (mMessageRejectionCount == 0) {
- editor.remove(mDevice.getAddress());
- } else {
- editor.putInt(mDevice.getAddress(), mMessageRejectionCount);
- }
- editor.commit();
- }
-
- private void processPhonebookAccess() {
- if (mDevice.getBondState() != BluetoothDevice.BOND_BONDED) return;
-
- ParcelUuid[] uuids = mDevice.getUuids();
- if (BluetoothUuid.containsAnyUuid(uuids, PbapServerProfile.PBAB_CLIENT_UUIDS)) {
- // The pairing dialog now warns of phone-book access for paired devices.
- // No separate prompt is displayed after pairing.
- setPhonebookPermissionChoice(CachedBluetoothDevice.ACCESS_ALLOWED);
- }
- }
-}
diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java b/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java
deleted file mode 100755
index 2b0e7f1..0000000
--- a/src/com/android/settings/bluetooth/CachedBluetoothDeviceManager.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.content.Context;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * CachedBluetoothDeviceManager manages the set of remote Bluetooth devices.
- */
-final class CachedBluetoothDeviceManager {
- private static final String TAG = "CachedBluetoothDeviceManager";
- private static final boolean DEBUG = Utils.D;
-
- private Context mContext;
- private final List<CachedBluetoothDevice> mCachedDevices =
- new ArrayList<CachedBluetoothDevice>();
-
- CachedBluetoothDeviceManager(Context context) {
- mContext = context;
- }
-
- public synchronized Collection<CachedBluetoothDevice> getCachedDevicesCopy() {
- return new ArrayList<CachedBluetoothDevice>(mCachedDevices);
- }
-
- public static boolean onDeviceDisappeared(CachedBluetoothDevice cachedDevice) {
- cachedDevice.setVisible(false);
- return cachedDevice.getBondState() == BluetoothDevice.BOND_NONE;
- }
-
- public void onDeviceNameUpdated(BluetoothDevice device) {
- CachedBluetoothDevice cachedDevice = findDevice(device);
- if (cachedDevice != null) {
- cachedDevice.refreshName();
- }
- }
-
- /**
- * Search for existing {@link CachedBluetoothDevice} or return null
- * if this device isn't in the cache. Use {@link #addDevice}
- * to create and return a new {@link CachedBluetoothDevice} for
- * a newly discovered {@link BluetoothDevice}.
- *
- * @param device the address of the Bluetooth device
- * @return the cached device object for this device, or null if it has
- * not been previously seen
- */
- CachedBluetoothDevice findDevice(BluetoothDevice device) {
- for (CachedBluetoothDevice cachedDevice : mCachedDevices) {
- if (cachedDevice.getDevice().equals(device)) {
- return cachedDevice;
- }
- }
- return null;
- }
-
- /**
- * Create and return a new {@link CachedBluetoothDevice}. This assumes
- * that {@link #findDevice} has already been called and returned null.
- * @param device the address of the new Bluetooth device
- * @return the newly created CachedBluetoothDevice object
- */
- CachedBluetoothDevice addDevice(LocalBluetoothAdapter adapter,
- LocalBluetoothProfileManager profileManager,
- BluetoothDevice device) {
- CachedBluetoothDevice newDevice = new CachedBluetoothDevice(mContext, adapter,
- profileManager, device);
- synchronized (mCachedDevices) {
- mCachedDevices.add(newDevice);
- }
- return newDevice;
- }
-
- /**
- * Attempts to get the name of a remote device, otherwise returns the address.
- *
- * @param device The remote device.
- * @return The name, or if unavailable, the address.
- */
- public String getName(BluetoothDevice device) {
- CachedBluetoothDevice cachedDevice = findDevice(device);
- if (cachedDevice != null) {
- return cachedDevice.getName();
- }
-
- String name = device.getAliasName();
- if (name != null) {
- return name;
- }
-
- return device.getAddress();
- }
-
- public synchronized void clearNonBondedDevices() {
- for (int i = mCachedDevices.size() - 1; i >= 0; i--) {
- CachedBluetoothDevice cachedDevice = mCachedDevices.get(i);
- if (cachedDevice.getBondState() != BluetoothDevice.BOND_BONDED) {
- mCachedDevices.remove(i);
- }
- }
- }
-
- public synchronized void onScanningStateChanged(boolean started) {
- if (!started) return;
-
- // If starting a new scan, clear old visibility
- // Iterate in reverse order since devices may be removed.
- for (int i = mCachedDevices.size() - 1; i >= 0; i--) {
- CachedBluetoothDevice cachedDevice = mCachedDevices.get(i);
- cachedDevice.setVisible(false);
- }
- }
-
- public synchronized void onBtClassChanged(BluetoothDevice device) {
- CachedBluetoothDevice cachedDevice = findDevice(device);
- if (cachedDevice != null) {
- cachedDevice.refreshBtClass();
- }
- }
-
- public synchronized void onUuidChanged(BluetoothDevice device) {
- CachedBluetoothDevice cachedDevice = findDevice(device);
- if (cachedDevice != null) {
- cachedDevice.onUuidChanged();
- }
- }
-
- public synchronized void onBluetoothStateChanged(int bluetoothState) {
- // When Bluetooth is turning off, we need to clear the non-bonded devices
- // Otherwise, they end up showing up on the next BT enable
- if (bluetoothState == BluetoothAdapter.STATE_TURNING_OFF) {
- for (int i = mCachedDevices.size() - 1; i >= 0; i--) {
- CachedBluetoothDevice cachedDevice = mCachedDevices.get(i);
- if (cachedDevice.getBondState() != BluetoothDevice.BOND_BONDED) {
- cachedDevice.setVisible(false);
- mCachedDevices.remove(i);
- } else {
- // For bonded devices, we need to clear the connection status so that
- // when BT is enabled next time, device connection status shall be retrieved
- // by making a binder call.
- cachedDevice.clearProfileConnectionState();
- }
- }
- }
- }
- private void log(String msg) {
- if (DEBUG) {
- Log.d(TAG, msg);
- }
- }
-}
diff --git a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
index e7208b5..b2a703d 100644
--- a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
+++ b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
@@ -16,8 +16,12 @@
package com.android.settings.bluetooth;
+import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceCategory;
@@ -26,6 +30,11 @@ import android.preference.PreferenceScreen;
import android.util.Log;
import com.android.settings.RestrictedSettingsFragment;
+import com.android.settingslib.bluetooth.BluetoothCallback;
+import com.android.settingslib.bluetooth.BluetoothDeviceFilter;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
import java.util.Collection;
import java.util.WeakHashMap;
@@ -74,7 +83,7 @@ public abstract class DeviceListPreferenceFragment extends
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mLocalManager = LocalBluetoothManager.getInstance(getActivity());
+ mLocalManager = Utils.getLocalBtManager(getActivity());
if (mLocalManager == null) {
Log.e(TAG, "Bluetooth is not supported on this device");
return;
@@ -164,7 +173,7 @@ public abstract class DeviceListPreferenceFragment extends
if (mFilter.matches(cachedDevice.getDevice())) {
createDevicePreference(cachedDevice);
}
- }
+ }
void createDevicePreference(CachedBluetoothDevice cachedDevice) {
if (mDeviceListGroup == null) {
diff --git a/src/com/android/settings/bluetooth/DevicePickerFragment.java b/src/com/android/settings/bluetooth/DevicePickerFragment.java
index 354d03c..809ca96 100644
--- a/src/com/android/settings/bluetooth/DevicePickerFragment.java
+++ b/src/com/android/settings/bluetooth/DevicePickerFragment.java
@@ -17,6 +17,7 @@
package com.android.settings.bluetooth;
import static android.os.UserManager.DISALLOW_CONFIG_BLUETOOTH;
+
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothDevicePicker;
@@ -29,6 +30,7 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import com.android.settings.R;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
/**
* BluetoothSettings is the Settings screen for Bluetooth configuration and
diff --git a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java b/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
index 0109e35..89287ab 100755
--- a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
+++ b/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
@@ -42,6 +42,13 @@ import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.search.Index;
import com.android.settings.search.SearchIndexableRaw;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.settingslib.bluetooth.LocalBluetoothProfile;
+import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
+import com.android.settingslib.bluetooth.MapProfile;
+import com.android.settingslib.bluetooth.PbapServerProfile;
import java.util.HashMap;
@@ -80,7 +87,7 @@ public final class DeviceProfilesSettings extends SettingsPreferenceFragment
mProfileContainer = (PreferenceGroup) findPreference(KEY_PROFILE_CONTAINER);
mProfileContainer.setLayoutResource(R.layout.bluetooth_preference_category);
- mManager = LocalBluetoothManager.getInstance(getActivity());
+ mManager = Utils.getLocalBtManager(getActivity());
CachedBluetoothDeviceManager deviceManager =
mManager.getCachedDeviceManager();
mProfileManager = mManager.getProfileManager();
diff --git a/src/com/android/settings/bluetooth/DockService.java b/src/com/android/settings/bluetooth/DockService.java
index c9a18a3..c4f6485 100644
--- a/src/com/android/settings/bluetooth/DockService.java
+++ b/src/com/android/settings/bluetooth/DockService.java
@@ -16,9 +16,6 @@
package com.android.settings.bluetooth;
-import com.android.settings.R;
-import com.android.settings.bluetooth.LocalBluetoothProfileManager.ServiceListener;
-
import android.app.AlertDialog;
import android.app.Notification;
import android.app.Service;
@@ -27,6 +24,7 @@ import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothHeadset;
import android.bluetooth.BluetoothProfile;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
@@ -44,6 +42,16 @@ import android.view.WindowManager;
import android.widget.CheckBox;
import android.widget.CompoundButton;
+import com.android.settings.R;
+import com.android.settingslib.bluetooth.BluetoothCallback;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.settingslib.bluetooth.LocalBluetoothProfile;
+import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
+import com.android.settingslib.bluetooth.LocalBluetoothProfileManager.ServiceListener;
+
import java.util.Collection;
import java.util.List;
import java.util.Set;
@@ -126,7 +134,7 @@ public final class DockService extends Service implements ServiceListener {
public void onCreate() {
if (DEBUG) Log.d(TAG, "onCreate");
- LocalBluetoothManager manager = LocalBluetoothManager.getInstance(this);
+ LocalBluetoothManager manager = Utils.getLocalBtManager(this);
if (manager == null) {
Log.e(TAG, "Can't get LocalBluetoothManager: exiting");
return;
@@ -918,4 +926,56 @@ public final class DockService extends Service implements ServiceListener {
public void onServiceDisconnected() {
// FIXME: shouldn't I do something on service disconnected too?
}
+
+ public static class DockBluetoothCallback implements BluetoothCallback {
+ private final Context mContext;
+
+ public DockBluetoothCallback(Context context) {
+ mContext = context;
+ }
+
+ public void onBluetoothStateChanged(int bluetoothState) { }
+ public void onDeviceAdded(CachedBluetoothDevice cachedDevice) { }
+ public void onDeviceDeleted(CachedBluetoothDevice cachedDevice) { }
+
+ @Override
+ public void onScanningStateChanged(boolean started) {
+ // TODO: Find a more unified place for a persistent BluetoothCallback to live
+ // as this is not exactly dock related.
+ LocalBluetoothPreferences.persistDiscoveringTimestamp(mContext);
+ }
+
+ @Override
+ public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) {
+ BluetoothDevice device = cachedDevice.getDevice();
+ if (bondState == BluetoothDevice.BOND_NONE) {
+ if (device.isBluetoothDock()) {
+ // After a dock is unpaired, we will forget the settings
+ LocalBluetoothPreferences
+ .removeDockAutoConnectSetting(mContext, device.getAddress());
+
+ // if the device is undocked, remove it from the list as well
+ if (!device.getAddress().equals(getDockedDeviceAddress(mContext))) {
+ cachedDevice.setVisible(false);
+ }
+ }
+ }
+ }
+
+ // This can't be called from a broadcast receiver where the filter is set in the Manifest.
+ private static String getDockedDeviceAddress(Context context) {
+ // This works only because these broadcast intents are "sticky"
+ Intent i = context.registerReceiver(null, new IntentFilter(Intent.ACTION_DOCK_EVENT));
+ if (i != null) {
+ int state = i.getIntExtra(Intent.EXTRA_DOCK_STATE, Intent.EXTRA_DOCK_STATE_UNDOCKED);
+ if (state != Intent.EXTRA_DOCK_STATE_UNDOCKED) {
+ BluetoothDevice device = i.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+ if (device != null) {
+ return device.getAddress();
+ }
+ }
+ }
+ return null;
+ }
+ }
}
diff --git a/src/com/android/settings/bluetooth/HeadsetProfile.java b/src/com/android/settings/bluetooth/HeadsetProfile.java
deleted file mode 100755
index 45b81ab..0000000
--- a/src/com/android/settings/bluetooth/HeadsetProfile.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothClass;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothHeadset;
-import android.bluetooth.BluetoothProfile;
-import android.bluetooth.BluetoothUuid;
-import android.content.Context;
-import android.os.ParcelUuid;
-import android.util.Log;
-
-import com.android.settings.R;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * HeadsetProfile handles Bluetooth HFP and Headset profiles.
- */
-final class HeadsetProfile implements LocalBluetoothProfile {
- private static final String TAG = "HeadsetProfile";
- private static boolean V = true;
-
- private BluetoothHeadset mService;
- private boolean mIsProfileReady;
-
- private final LocalBluetoothAdapter mLocalAdapter;
- private final CachedBluetoothDeviceManager mDeviceManager;
- private final LocalBluetoothProfileManager mProfileManager;
-
- static final ParcelUuid[] UUIDS = {
- BluetoothUuid.HSP,
- BluetoothUuid.Handsfree,
- };
-
- static final String NAME = "HEADSET";
-
- // Order of this profile in device profiles list
- private static final int ORDINAL = 0;
-
- // These callbacks run on the main thread.
- private final class HeadsetServiceListener
- implements BluetoothProfile.ServiceListener {
-
- public void onServiceConnected(int profile, BluetoothProfile proxy) {
- if (V) Log.d(TAG,"Bluetooth service connected");
- mService = (BluetoothHeadset) proxy;
- // We just bound to the service, so refresh the UI for any connected HFP devices.
- List<BluetoothDevice> deviceList = mService.getConnectedDevices();
- while (!deviceList.isEmpty()) {
- BluetoothDevice nextDevice = deviceList.remove(0);
- CachedBluetoothDevice device = mDeviceManager.findDevice(nextDevice);
- // we may add a new device here, but generally this should not happen
- if (device == null) {
- Log.w(TAG, "HeadsetProfile found new device: " + nextDevice);
- device = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, nextDevice);
- }
- device.onProfileStateChanged(HeadsetProfile.this,
- BluetoothProfile.STATE_CONNECTED);
- device.refresh();
- }
-
- mProfileManager.callServiceConnectedListeners();
- mIsProfileReady=true;
- }
-
- public void onServiceDisconnected(int profile) {
- if (V) Log.d(TAG,"Bluetooth service disconnected");
- mProfileManager.callServiceDisconnectedListeners();
- mIsProfileReady=false;
- }
- }
-
- public boolean isProfileReady() {
- return mIsProfileReady;
- }
-
- HeadsetProfile(Context context, LocalBluetoothAdapter adapter,
- CachedBluetoothDeviceManager deviceManager,
- LocalBluetoothProfileManager profileManager) {
- mLocalAdapter = adapter;
- mDeviceManager = deviceManager;
- mProfileManager = profileManager;
- mLocalAdapter.getProfileProxy(context, new HeadsetServiceListener(),
- BluetoothProfile.HEADSET);
- }
-
- public boolean isConnectable() {
- return true;
- }
-
- public boolean isAutoConnectable() {
- return true;
- }
-
- public boolean connect(BluetoothDevice device) {
- if (mService == null) return false;
- List<BluetoothDevice> sinks = mService.getConnectedDevices();
- if (sinks != null) {
- for (BluetoothDevice sink : sinks) {
- Log.d(TAG,"Not disconnecting device = " + sink);
- }
- }
- return mService.connect(device);
- }
-
- public boolean disconnect(BluetoothDevice device) {
- if (mService == null) return false;
- List<BluetoothDevice> deviceList = mService.getConnectedDevices();
- if (!deviceList.isEmpty()) {
- for (BluetoothDevice dev : deviceList) {
- if (dev.equals(device)) {
- if (V) Log.d(TAG,"Downgrade priority as user" +
- "is disconnecting the headset");
- // Downgrade priority as user is disconnecting the headset.
- if (mService.getPriority(device) > BluetoothProfile.PRIORITY_ON) {
- mService.setPriority(device, BluetoothProfile.PRIORITY_ON);
- }
- return mService.disconnect(device);
- }
- }
- }
- return false;
- }
-
- public int getConnectionStatus(BluetoothDevice device) {
- if (mService == null) return BluetoothProfile.STATE_DISCONNECTED;
- List<BluetoothDevice> deviceList = mService.getConnectedDevices();
- if (!deviceList.isEmpty()){
- for (BluetoothDevice dev : deviceList) {
- if (dev.equals(device)) {
- return mService.getConnectionState(device);
- }
- }
- }
- return BluetoothProfile.STATE_DISCONNECTED;
- }
-
- public boolean isPreferred(BluetoothDevice device) {
- if (mService == null) return false;
- return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF;
- }
-
- public int getPreferred(BluetoothDevice device) {
- if (mService == null) return BluetoothProfile.PRIORITY_OFF;
- return mService.getPriority(device);
- }
-
- public void setPreferred(BluetoothDevice device, boolean preferred) {
- if (mService == null) return;
- if (preferred) {
- if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) {
- mService.setPriority(device, BluetoothProfile.PRIORITY_ON);
- }
- } else {
- mService.setPriority(device, BluetoothProfile.PRIORITY_OFF);
- }
- }
-
- public List<BluetoothDevice> getConnectedDevices() {
- if (mService == null) return new ArrayList<BluetoothDevice>(0);
- return mService.getDevicesMatchingConnectionStates(
- new int[] {BluetoothProfile.STATE_CONNECTED,
- BluetoothProfile.STATE_CONNECTING,
- BluetoothProfile.STATE_DISCONNECTING});
- }
-
- public String toString() {
- return NAME;
- }
-
- public int getOrdinal() {
- return ORDINAL;
- }
-
- public int getNameResource(BluetoothDevice device) {
- return R.string.bluetooth_profile_headset;
- }
-
- public int getSummaryResourceForDevice(BluetoothDevice device) {
- int state = getConnectionStatus(device);
- switch (state) {
- case BluetoothProfile.STATE_DISCONNECTED:
- return R.string.bluetooth_headset_profile_summary_use_for;
-
- case BluetoothProfile.STATE_CONNECTED:
- return R.string.bluetooth_headset_profile_summary_connected;
-
- default:
- return Utils.getConnectionStateSummary(state);
- }
- }
-
- public int getDrawableResource(BluetoothClass btClass) {
- return R.drawable.ic_bt_headset_hfp;
- }
-
- protected void finalize() {
- if (V) Log.d(TAG, "finalize()");
- if (mService != null) {
- try {
- BluetoothAdapter.getDefaultAdapter().closeProfileProxy(BluetoothProfile.HEADSET,
- mService);
- mService = null;
- }catch (Throwable t) {
- Log.w(TAG, "Error cleaning up HID proxy", t);
- }
- }
- }
-}
diff --git a/src/com/android/settings/bluetooth/HidProfile.java b/src/com/android/settings/bluetooth/HidProfile.java
deleted file mode 100755
index 91e715d..0000000
--- a/src/com/android/settings/bluetooth/HidProfile.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothClass;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothInputDevice;
-import android.bluetooth.BluetoothProfile;
-import android.content.Context;
-import android.util.Log;
-
-import com.android.settings.R;
-
-import java.util.List;
-
-/**
- * HidProfile handles Bluetooth HID profile.
- */
-final class HidProfile implements LocalBluetoothProfile {
- private static final String TAG = "HidProfile";
- private static boolean V = true;
-
- private BluetoothInputDevice mService;
- private boolean mIsProfileReady;
-
- private final LocalBluetoothAdapter mLocalAdapter;
- private final CachedBluetoothDeviceManager mDeviceManager;
- private final LocalBluetoothProfileManager mProfileManager;
-
- static final String NAME = "HID";
-
- // Order of this profile in device profiles list
- private static final int ORDINAL = 3;
-
- // These callbacks run on the main thread.
- private final class InputDeviceServiceListener
- implements BluetoothProfile.ServiceListener {
-
- public void onServiceConnected(int profile, BluetoothProfile proxy) {
- if (V) Log.d(TAG,"Bluetooth service connected");
- mService = (BluetoothInputDevice) proxy;
- // We just bound to the service, so refresh the UI for any connected HID devices.
- List<BluetoothDevice> deviceList = mService.getConnectedDevices();
- while (!deviceList.isEmpty()) {
- BluetoothDevice nextDevice = deviceList.remove(0);
- CachedBluetoothDevice device = mDeviceManager.findDevice(nextDevice);
- // we may add a new device here, but generally this should not happen
- if (device == null) {
- Log.w(TAG, "HidProfile found new device: " + nextDevice);
- device = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, nextDevice);
- }
- device.onProfileStateChanged(HidProfile.this, BluetoothProfile.STATE_CONNECTED);
- device.refresh();
- }
- mIsProfileReady=true;
- }
-
- public void onServiceDisconnected(int profile) {
- if (V) Log.d(TAG,"Bluetooth service disconnected");
- mIsProfileReady=false;
- }
- }
-
- public boolean isProfileReady() {
- return mIsProfileReady;
- }
-
- HidProfile(Context context, LocalBluetoothAdapter adapter,
- CachedBluetoothDeviceManager deviceManager,
- LocalBluetoothProfileManager profileManager) {
- mLocalAdapter = adapter;
- mDeviceManager = deviceManager;
- mProfileManager = profileManager;
- adapter.getProfileProxy(context, new InputDeviceServiceListener(),
- BluetoothProfile.INPUT_DEVICE);
- }
-
- public boolean isConnectable() {
- return true;
- }
-
- public boolean isAutoConnectable() {
- return true;
- }
-
- public boolean connect(BluetoothDevice device) {
- if (mService == null) return false;
- return mService.connect(device);
- }
-
- public boolean disconnect(BluetoothDevice device) {
- if (mService == null) return false;
- return mService.disconnect(device);
- }
-
- public int getConnectionStatus(BluetoothDevice device) {
- if (mService == null) {
- return BluetoothProfile.STATE_DISCONNECTED;
- }
- List<BluetoothDevice> deviceList = mService.getConnectedDevices();
-
- return !deviceList.isEmpty() && deviceList.get(0).equals(device)
- ? mService.getConnectionState(device)
- : BluetoothProfile.STATE_DISCONNECTED;
- }
-
- public boolean isPreferred(BluetoothDevice device) {
- if (mService == null) return false;
- return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF;
- }
-
- public int getPreferred(BluetoothDevice device) {
- if (mService == null) return BluetoothProfile.PRIORITY_OFF;
- return mService.getPriority(device);
- }
-
- public void setPreferred(BluetoothDevice device, boolean preferred) {
- if (mService == null) return;
- if (preferred) {
- if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) {
- mService.setPriority(device, BluetoothProfile.PRIORITY_ON);
- }
- } else {
- mService.setPriority(device, BluetoothProfile.PRIORITY_OFF);
- }
- }
-
- public String toString() {
- return NAME;
- }
-
- public int getOrdinal() {
- return ORDINAL;
- }
-
- public int getNameResource(BluetoothDevice device) {
- // TODO: distinguish between keyboard and mouse?
- return R.string.bluetooth_profile_hid;
- }
-
- public int getSummaryResourceForDevice(BluetoothDevice device) {
- int state = getConnectionStatus(device);
- switch (state) {
- case BluetoothProfile.STATE_DISCONNECTED:
- return R.string.bluetooth_hid_profile_summary_use_for;
-
- case BluetoothProfile.STATE_CONNECTED:
- return R.string.bluetooth_hid_profile_summary_connected;
-
- default:
- return Utils.getConnectionStateSummary(state);
- }
- }
-
- public int getDrawableResource(BluetoothClass btClass) {
- if (btClass == null) {
- return R.drawable.ic_lockscreen_ime;
- }
- return getHidClassDrawable(btClass);
- }
-
- static int getHidClassDrawable(BluetoothClass btClass) {
- switch (btClass.getDeviceClass()) {
- case BluetoothClass.Device.PERIPHERAL_KEYBOARD:
- case BluetoothClass.Device.PERIPHERAL_KEYBOARD_POINTING:
- return R.drawable.ic_lockscreen_ime;
- case BluetoothClass.Device.PERIPHERAL_POINTING:
- return R.drawable.ic_bt_pointing_hid;
- default:
- return R.drawable.ic_bt_misc_hid;
- }
- }
-
- protected void finalize() {
- if (V) Log.d(TAG, "finalize()");
- if (mService != null) {
- try {
- BluetoothAdapter.getDefaultAdapter().closeProfileProxy(BluetoothProfile.INPUT_DEVICE,
- mService);
- mService = null;
- }catch (Throwable t) {
- Log.w(TAG, "Error cleaning up HID proxy", t);
- }
- }
- }
-}
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothAdapter.java b/src/com/android/settings/bluetooth/LocalBluetoothAdapter.java
deleted file mode 100644
index 013171c..0000000
--- a/src/com/android/settings/bluetooth/LocalBluetoothAdapter.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothProfile;
-import android.content.Context;
-import android.os.ParcelUuid;
-import android.util.Log;
-
-import java.util.Set;
-
-/**
- * LocalBluetoothAdapter provides an interface between the Settings app
- * and the functionality of the local {@link BluetoothAdapter}, specifically
- * those related to state transitions of the adapter itself.
- *
- * <p>Connection and bonding state changes affecting specific devices
- * are handled by {@link CachedBluetoothDeviceManager},
- * {@link BluetoothEventManager}, and {@link LocalBluetoothProfileManager}.
- */
-public final class LocalBluetoothAdapter {
- private static final String TAG = "LocalBluetoothAdapter";
-
- /** This class does not allow direct access to the BluetoothAdapter. */
- private final BluetoothAdapter mAdapter;
-
- private LocalBluetoothProfileManager mProfileManager;
-
- private static LocalBluetoothAdapter sInstance;
-
- private int mState = BluetoothAdapter.ERROR;
-
- private static final int SCAN_EXPIRATION_MS = 5 * 60 * 1000; // 5 mins
-
- private long mLastScan;
-
- private LocalBluetoothAdapter(BluetoothAdapter adapter) {
- mAdapter = adapter;
- }
-
- void setProfileManager(LocalBluetoothProfileManager manager) {
- mProfileManager = manager;
- }
-
- /**
- * Get the singleton instance of the LocalBluetoothAdapter. If this device
- * doesn't support Bluetooth, then null will be returned. Callers must be
- * prepared to handle a null return value.
- * @return the LocalBluetoothAdapter object, or null if not supported
- */
- static synchronized LocalBluetoothAdapter getInstance() {
- if (sInstance == null) {
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- if (adapter != null) {
- sInstance = new LocalBluetoothAdapter(adapter);
- }
- }
-
- return sInstance;
- }
-
- // Pass-through BluetoothAdapter methods that we can intercept if necessary
-
- void cancelDiscovery() {
- mAdapter.cancelDiscovery();
- }
-
- boolean enable() {
- return mAdapter.enable();
- }
-
- boolean disable() {
- return mAdapter.disable();
- }
-
- void getProfileProxy(Context context,
- BluetoothProfile.ServiceListener listener, int profile) {
- mAdapter.getProfileProxy(context, listener, profile);
- }
-
- Set<BluetoothDevice> getBondedDevices() {
- return mAdapter.getBondedDevices();
- }
-
- String getName() {
- return mAdapter.getName();
- }
-
- int getScanMode() {
- return mAdapter.getScanMode();
- }
-
- int getState() {
- return mAdapter.getState();
- }
-
- ParcelUuid[] getUuids() {
- return mAdapter.getUuids();
- }
-
- boolean isDiscovering() {
- return mAdapter.isDiscovering();
- }
-
- boolean isEnabled() {
- return mAdapter.isEnabled();
- }
-
- void setDiscoverableTimeout(int timeout) {
- mAdapter.setDiscoverableTimeout(timeout);
- }
-
- void setName(String name) {
- mAdapter.setName(name);
- }
-
- void setScanMode(int mode) {
- mAdapter.setScanMode(mode);
- }
-
- boolean setScanMode(int mode, int duration) {
- return mAdapter.setScanMode(mode, duration);
- }
-
- void startScanning(boolean force) {
- // Only start if we're not already scanning
- if (!mAdapter.isDiscovering()) {
- if (!force) {
- // Don't scan more than frequently than SCAN_EXPIRATION_MS,
- // unless forced
- if (mLastScan + SCAN_EXPIRATION_MS > System.currentTimeMillis()) {
- return;
- }
-
- // If we are playing music, don't scan unless forced.
- A2dpProfile a2dp = mProfileManager.getA2dpProfile();
- if (a2dp != null && a2dp.isA2dpPlaying()) {
- return;
- }
- }
-
- if (mAdapter.startDiscovery()) {
- mLastScan = System.currentTimeMillis();
- }
- }
- }
-
- void stopScanning() {
- if (mAdapter.isDiscovering()) {
- mAdapter.cancelDiscovery();
- }
- }
-
- public synchronized int getBluetoothState() {
- // Always sync state, in case it changed while paused
- syncBluetoothState();
- return mState;
- }
-
- synchronized void setBluetoothStateInt(int state) {
- mState = state;
-
- if (state == BluetoothAdapter.STATE_ON) {
- // if mProfileManager hasn't been constructed yet, it will
- // get the adapter UUIDs in its constructor when it is.
- if (mProfileManager != null) {
- mProfileManager.setBluetoothStateOn();
- }
- }
- }
-
- // Returns true if the state changed; false otherwise.
- boolean syncBluetoothState() {
- int currentState = mAdapter.getState();
- if (currentState != mState) {
- setBluetoothStateInt(mAdapter.getState());
- return true;
- }
- return false;
- }
-
- public void setBluetoothEnabled(boolean enabled) {
- boolean success = enabled
- ? mAdapter.enable()
- : mAdapter.disable();
-
- if (success) {
- setBluetoothStateInt(enabled
- ? BluetoothAdapter.STATE_TURNING_ON
- : BluetoothAdapter.STATE_TURNING_OFF);
- } else {
- if (Utils.V) {
- Log.v(TAG, "setBluetoothEnabled call, manager didn't return " +
- "success for enabled: " + enabled);
- }
-
- syncBluetoothState();
- }
- }
-}
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothManager.java b/src/com/android/settings/bluetooth/LocalBluetoothManager.java
deleted file mode 100644
index ae8dec2..0000000
--- a/src/com/android/settings/bluetooth/LocalBluetoothManager.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.content.Context;
-import android.util.Log;
-
-/**
- * LocalBluetoothManager provides a simplified interface on top of a subset of
- * the Bluetooth API. Note that {@link #getInstance} will return null
- * if there is no Bluetooth adapter on this device, and callers must be
- * prepared to handle this case.
- */
-public final class LocalBluetoothManager {
- private static final String TAG = "LocalBluetoothManager";
-
- /** Singleton instance. */
- private static LocalBluetoothManager sInstance;
-
- private final Context mContext;
-
- /** If a BT-related activity is in the foreground, this will be it. */
- private Context mForegroundActivity;
-
- private BluetoothDiscoverableEnabler mDiscoverableEnabler;
-
- private final LocalBluetoothAdapter mLocalAdapter;
-
- private final CachedBluetoothDeviceManager mCachedDeviceManager;
-
- /** The Bluetooth profile manager. */
- private final LocalBluetoothProfileManager mProfileManager;
-
- /** The broadcast receiver event manager. */
- private final BluetoothEventManager mEventManager;
-
- public static synchronized LocalBluetoothManager getInstance(Context context) {
- if (sInstance == null) {
- LocalBluetoothAdapter adapter = LocalBluetoothAdapter.getInstance();
- if (adapter == null) {
- return null;
- }
- // This will be around as long as this process is
- Context appContext = context.getApplicationContext();
- sInstance = new LocalBluetoothManager(adapter, appContext);
- }
-
- return sInstance;
- }
-
- public void setDiscoverableEnabler(BluetoothDiscoverableEnabler discoverableEnabler) {
- mDiscoverableEnabler = discoverableEnabler;
- }
-
- public BluetoothDiscoverableEnabler getDiscoverableEnabler() {
- return mDiscoverableEnabler;
- }
-
- private LocalBluetoothManager(LocalBluetoothAdapter adapter, Context context) {
- mContext = context;
- mLocalAdapter = adapter;
-
- mCachedDeviceManager = new CachedBluetoothDeviceManager(context);
- mEventManager = new BluetoothEventManager(mLocalAdapter,
- mCachedDeviceManager, context);
- mProfileManager = new LocalBluetoothProfileManager(context,
- mLocalAdapter, mCachedDeviceManager, mEventManager);
- }
-
- public LocalBluetoothAdapter getBluetoothAdapter() {
- return mLocalAdapter;
- }
-
- public Context getContext() {
- return mContext;
- }
-
- public Context getForegroundActivity() {
- return mForegroundActivity;
- }
-
- boolean isForegroundActivity() {
- return mForegroundActivity != null;
- }
-
- synchronized void setForegroundActivity(Context context) {
- if (context != null) {
- Log.d(TAG, "setting foreground activity to non-null context");
- mForegroundActivity = context;
- } else {
- if (mForegroundActivity != null) {
- Log.d(TAG, "setting foreground activity to null");
- mForegroundActivity = null;
- }
- }
- }
-
- CachedBluetoothDeviceManager getCachedDeviceManager() {
- return mCachedDeviceManager;
- }
-
- BluetoothEventManager getEventManager() {
- return mEventManager;
- }
-
- LocalBluetoothProfileManager getProfileManager() {
- return mProfileManager;
- }
-}
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothPreferences.java b/src/com/android/settings/bluetooth/LocalBluetoothPreferences.java
index f00b801..9f2553f 100644
--- a/src/com/android/settings/bluetooth/LocalBluetoothPreferences.java
+++ b/src/com/android/settings/bluetooth/LocalBluetoothPreferences.java
@@ -22,6 +22,9 @@ import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.util.Log;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+
/**
* LocalBluetoothPreferences provides an interface to the preferences
* related to Bluetooth.
@@ -60,7 +63,7 @@ final class LocalBluetoothPreferences {
static boolean shouldShowDialogInForeground(Context context,
String deviceAddress) {
- LocalBluetoothManager manager = LocalBluetoothManager.getInstance(context);
+ LocalBluetoothManager manager = Utils.getLocalBtManager(context);
if (manager == null) {
if(DEBUG) Log.v(TAG, "manager == null - do not show dialog.");
return false;
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothProfile.java b/src/com/android/settings/bluetooth/LocalBluetoothProfile.java
deleted file mode 100755
index 8c0de95..0000000
--- a/src/com/android/settings/bluetooth/LocalBluetoothProfile.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.bluetooth.BluetoothClass;
-import android.bluetooth.BluetoothDevice;
-
-/**
- * LocalBluetoothProfile is an interface defining the basic
- * functionality related to a Bluetooth profile.
- */
-interface LocalBluetoothProfile {
-
- /**
- * Returns true if the user can initiate a connection, false otherwise.
- */
- boolean isConnectable();
-
- /**
- * Returns true if the user can enable auto connection for this profile.
- */
- boolean isAutoConnectable();
-
- boolean connect(BluetoothDevice device);
-
- boolean disconnect(BluetoothDevice device);
-
- int getConnectionStatus(BluetoothDevice device);
-
- boolean isPreferred(BluetoothDevice device);
-
- int getPreferred(BluetoothDevice device);
-
- void setPreferred(BluetoothDevice device, boolean preferred);
-
- boolean isProfileReady();
-
- /** Display order for device profile settings. */
- int getOrdinal();
-
- /**
- * Returns the string resource ID for the localized name for this profile.
- * @param device the Bluetooth device (to distinguish between PAN roles)
- */
- int getNameResource(BluetoothDevice device);
-
- /**
- * Returns the string resource ID for the summary text for this profile
- * for the specified device, e.g. "Use for media audio" or
- * "Connected to media audio".
- * @param device the device to query for profile connection status
- * @return a string resource ID for the profile summary text
- */
- int getSummaryResourceForDevice(BluetoothDevice device);
-
- int getDrawableResource(BluetoothClass btClass);
-}
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
deleted file mode 100644
index 2a6a759..0000000
--- a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.bluetooth.BluetoothA2dp;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothHeadset;
-import android.bluetooth.BluetoothMap;
-import android.bluetooth.BluetoothInputDevice;
-import android.bluetooth.BluetoothPan;
-import android.bluetooth.BluetoothPbap;
-import android.bluetooth.BluetoothProfile;
-import android.bluetooth.BluetoothUuid;
-import android.content.Context;
-import android.content.Intent;
-import android.os.ParcelUuid;
-import android.util.Log;
-import android.os.Handler;
-import android.os.Message;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.List;
-
-/**
- * LocalBluetoothProfileManager provides access to the LocalBluetoothProfile
- * objects for the available Bluetooth profiles.
- */
-final class LocalBluetoothProfileManager {
- private static final String TAG = "LocalBluetoothProfileManager";
- private static final boolean DEBUG = Utils.D;
- /** Singleton instance. */
- private static LocalBluetoothProfileManager sInstance;
-
- /**
- * An interface for notifying BluetoothHeadset IPC clients when they have
- * been connected to the BluetoothHeadset service.
- * Only used by {@link DockService}.
- */
- public interface ServiceListener {
- /**
- * Called to notify the client when this proxy object has been
- * connected to the BluetoothHeadset service. Clients must wait for
- * this callback before making IPC calls on the BluetoothHeadset
- * service.
- */
- void onServiceConnected();
-
- /**
- * Called to notify the client that this proxy object has been
- * disconnected from the BluetoothHeadset service. Clients must not
- * make IPC calls on the BluetoothHeadset service after this callback.
- * This callback will currently only occur if the application hosting
- * the BluetoothHeadset service, but may be called more often in future.
- */
- void onServiceDisconnected();
- }
-
- private final Context mContext;
- private final LocalBluetoothAdapter mLocalAdapter;
- private final CachedBluetoothDeviceManager mDeviceManager;
- private final BluetoothEventManager mEventManager;
-
- private A2dpProfile mA2dpProfile;
- private HeadsetProfile mHeadsetProfile;
- private MapProfile mMapProfile;
- private final HidProfile mHidProfile;
- private OppProfile mOppProfile;
- private final PanProfile mPanProfile;
- private final PbapServerProfile mPbapProfile;
-
- /**
- * Mapping from profile name, e.g. "HEADSET" to profile object.
- */
- private final Map<String, LocalBluetoothProfile>
- mProfileNameMap = new HashMap<String, LocalBluetoothProfile>();
-
- LocalBluetoothProfileManager(Context context,
- LocalBluetoothAdapter adapter,
- CachedBluetoothDeviceManager deviceManager,
- BluetoothEventManager eventManager) {
- mContext = context;
-
- mLocalAdapter = adapter;
- mDeviceManager = deviceManager;
- mEventManager = eventManager;
- // pass this reference to adapter and event manager (circular dependency)
- mLocalAdapter.setProfileManager(this);
- mEventManager.setProfileManager(this);
-
- ParcelUuid[] uuids = adapter.getUuids();
-
- // uuids may be null if Bluetooth is turned off
- if (uuids != null) {
- updateLocalProfiles(uuids);
- }
-
- // Always add HID and PAN profiles
- mHidProfile = new HidProfile(context, mLocalAdapter, mDeviceManager, this);
- addProfile(mHidProfile, HidProfile.NAME,
- BluetoothInputDevice.ACTION_CONNECTION_STATE_CHANGED);
-
- mPanProfile = new PanProfile(context);
- addPanProfile(mPanProfile, PanProfile.NAME,
- BluetoothPan.ACTION_CONNECTION_STATE_CHANGED);
-
- if(DEBUG) Log.d(TAG, "Adding local MAP profile");
- mMapProfile = new MapProfile(mContext, mLocalAdapter,
- mDeviceManager, this);
- addProfile(mMapProfile, MapProfile.NAME,
- BluetoothMap.ACTION_CONNECTION_STATE_CHANGED);
-
- //Create PBAP server profile, but do not add it to list of profiles
- // as we do not need to monitor the profile as part of profile list
- mPbapProfile = new PbapServerProfile(context);
-
- if (DEBUG) Log.d(TAG, "LocalBluetoothProfileManager construction complete");
- }
-
- /**
- * Initialize or update the local profile objects. If a UUID was previously
- * present but has been removed, we print a warning but don't remove the
- * profile object as it might be referenced elsewhere, or the UUID might
- * come back and we don't want multiple copies of the profile objects.
- * @param uuids
- */
- void updateLocalProfiles(ParcelUuid[] uuids) {
- // A2DP
- if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.AudioSource)) {
- if (mA2dpProfile == null) {
- if(DEBUG) Log.d(TAG, "Adding local A2DP profile");
- mA2dpProfile = new A2dpProfile(mContext, mLocalAdapter, mDeviceManager, this);
- addProfile(mA2dpProfile, A2dpProfile.NAME,
- BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED);
- }
- } else if (mA2dpProfile != null) {
- Log.w(TAG, "Warning: A2DP profile was previously added but the UUID is now missing.");
- }
-
- // Headset / Handsfree
- if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.Handsfree_AG) ||
- BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.HSP_AG)) {
- if (mHeadsetProfile == null) {
- if (DEBUG) Log.d(TAG, "Adding local HEADSET profile");
- mHeadsetProfile = new HeadsetProfile(mContext, mLocalAdapter,
- mDeviceManager, this);
- addProfile(mHeadsetProfile, HeadsetProfile.NAME,
- BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
- }
- } else if (mHeadsetProfile != null) {
- Log.w(TAG, "Warning: HEADSET profile was previously added but the UUID is now missing.");
- }
-
- // OPP
- if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.ObexObjectPush)) {
- if (mOppProfile == null) {
- if(DEBUG) Log.d(TAG, "Adding local OPP profile");
- mOppProfile = new OppProfile();
- // Note: no event handler for OPP, only name map.
- mProfileNameMap.put(OppProfile.NAME, mOppProfile);
- }
- } else if (mOppProfile != null) {
- Log.w(TAG, "Warning: OPP profile was previously added but the UUID is now missing.");
- }
- mEventManager.registerProfileIntentReceiver();
-
- // There is no local SDP record for HID and Settings app doesn't control PBAP
- }
-
- private final Collection<ServiceListener> mServiceListeners =
- new ArrayList<ServiceListener>();
-
- private void addProfile(LocalBluetoothProfile profile,
- String profileName, String stateChangedAction) {
- mEventManager.addProfileHandler(stateChangedAction, new StateChangedHandler(profile));
- mProfileNameMap.put(profileName, profile);
- }
-
- private void addPanProfile(LocalBluetoothProfile profile,
- String profileName, String stateChangedAction) {
- mEventManager.addProfileHandler(stateChangedAction,
- new PanStateChangedHandler(profile));
- mProfileNameMap.put(profileName, profile);
- }
-
- LocalBluetoothProfile getProfileByName(String name) {
- return mProfileNameMap.get(name);
- }
-
- // Called from LocalBluetoothAdapter when state changes to ON
- void setBluetoothStateOn() {
- ParcelUuid[] uuids = mLocalAdapter.getUuids();
- if (uuids != null) {
- updateLocalProfiles(uuids);
- }
- mEventManager.readPairedDevices();
- }
-
- /**
- * Generic handler for connection state change events for the specified profile.
- */
- private class StateChangedHandler implements BluetoothEventManager.Handler {
- final LocalBluetoothProfile mProfile;
-
- StateChangedHandler(LocalBluetoothProfile profile) {
- mProfile = profile;
- }
-
- public void onReceive(Context context, Intent intent, BluetoothDevice device) {
- CachedBluetoothDevice cachedDevice = mDeviceManager.findDevice(device);
- if (cachedDevice == null) {
- Log.w(TAG, "StateChangedHandler found new device: " + device);
- cachedDevice = mDeviceManager.addDevice(mLocalAdapter,
- LocalBluetoothProfileManager.this, device);
- }
- int newState = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, 0);
- int oldState = intent.getIntExtra(BluetoothProfile.EXTRA_PREVIOUS_STATE, 0);
- if (newState == BluetoothProfile.STATE_DISCONNECTED &&
- oldState == BluetoothProfile.STATE_CONNECTING) {
- Log.i(TAG, "Failed to connect " + mProfile + " device");
- }
-
- cachedDevice.onProfileStateChanged(mProfile, newState);
- cachedDevice.refresh();
- }
- }
-
- /** State change handler for NAP and PANU profiles. */
- private class PanStateChangedHandler extends StateChangedHandler {
-
- PanStateChangedHandler(LocalBluetoothProfile profile) {
- super(profile);
- }
-
- @Override
- public void onReceive(Context context, Intent intent, BluetoothDevice device) {
- PanProfile panProfile = (PanProfile) mProfile;
- int role = intent.getIntExtra(BluetoothPan.EXTRA_LOCAL_ROLE, 0);
- panProfile.setLocalRole(device, role);
- super.onReceive(context, intent, device);
- }
- }
-
- // called from DockService
- void addServiceListener(ServiceListener l) {
- mServiceListeners.add(l);
- }
-
- // called from DockService
- void removeServiceListener(ServiceListener l) {
- mServiceListeners.remove(l);
- }
-
- // not synchronized: use only from UI thread! (TODO: verify)
- void callServiceConnectedListeners() {
- for (ServiceListener l : mServiceListeners) {
- l.onServiceConnected();
- }
- }
-
- // not synchronized: use only from UI thread! (TODO: verify)
- void callServiceDisconnectedListeners() {
- for (ServiceListener listener : mServiceListeners) {
- listener.onServiceDisconnected();
- }
- }
-
- // This is called by DockService, so check Headset and A2DP.
- public synchronized boolean isManagerReady() {
- // Getting just the headset profile is fine for now. Will need to deal with A2DP
- // and others if they aren't always in a ready state.
- LocalBluetoothProfile profile = mHeadsetProfile;
- if (profile != null) {
- return profile.isProfileReady();
- }
- profile = mA2dpProfile;
- if (profile != null) {
- return profile.isProfileReady();
- }
- return false;
- }
-
- A2dpProfile getA2dpProfile() {
- return mA2dpProfile;
- }
-
- HeadsetProfile getHeadsetProfile() {
- return mHeadsetProfile;
- }
-
- PbapServerProfile getPbapProfile(){
- return mPbapProfile;
- }
-
- MapProfile getMapProfile(){
- return mMapProfile;
- }
-
- /**
- * Fill in a list of LocalBluetoothProfile objects that are supported by
- * the local device and the remote device.
- *
- * @param uuids of the remote device
- * @param localUuids UUIDs of the local device
- * @param profiles The list of profiles to fill
- * @param removedProfiles list of profiles that were removed
- */
- synchronized void updateProfiles(ParcelUuid[] uuids, ParcelUuid[] localUuids,
- Collection<LocalBluetoothProfile> profiles,
- Collection<LocalBluetoothProfile> removedProfiles,
- boolean isPanNapConnected, BluetoothDevice device) {
- // Copy previous profile list into removedProfiles
- removedProfiles.clear();
- removedProfiles.addAll(profiles);
- profiles.clear();
-
- if (uuids == null) {
- return;
- }
-
- if (mHeadsetProfile != null) {
- if ((BluetoothUuid.isUuidPresent(localUuids, BluetoothUuid.HSP_AG) &&
- BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.HSP)) ||
- (BluetoothUuid.isUuidPresent(localUuids, BluetoothUuid.Handsfree_AG) &&
- BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.Handsfree))) {
- profiles.add(mHeadsetProfile);
- removedProfiles.remove(mHeadsetProfile);
- }
- }
-
- if (BluetoothUuid.containsAnyUuid(uuids, A2dpProfile.SINK_UUIDS) &&
- mA2dpProfile != null) {
- profiles.add(mA2dpProfile);
- removedProfiles.remove(mA2dpProfile);
- }
-
- if (BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.ObexObjectPush) &&
- mOppProfile != null) {
- profiles.add(mOppProfile);
- removedProfiles.remove(mOppProfile);
- }
-
- if ((BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.Hid) ||
- BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.Hogp)) &&
- mHidProfile != null) {
- profiles.add(mHidProfile);
- removedProfiles.remove(mHidProfile);
- }
-
- if(isPanNapConnected)
- if(DEBUG) Log.d(TAG, "Valid PAN-NAP connection exists.");
- if ((BluetoothUuid.isUuidPresent(uuids, BluetoothUuid.NAP) &&
- mPanProfile != null) || isPanNapConnected) {
- profiles.add(mPanProfile);
- removedProfiles.remove(mPanProfile);
- }
-
- if ((mMapProfile != null) &&
- (mMapProfile.getConnectionStatus(device) == BluetoothProfile.STATE_CONNECTED)) {
- profiles.add(mMapProfile);
- removedProfiles.remove(mMapProfile);
- mMapProfile.setPreferred(device, true);
- }
- }
-
-}
diff --git a/src/com/android/settings/bluetooth/MapProfile.java b/src/com/android/settings/bluetooth/MapProfile.java
deleted file mode 100644
index f47e24f..0000000
--- a/src/com/android/settings/bluetooth/MapProfile.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothClass;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothMap;
-import android.bluetooth.BluetoothProfile;
-import android.bluetooth.BluetoothUuid;
-import android.content.Context;
-import android.os.ParcelUuid;
-import android.util.Log;
-
-import com.android.settings.R;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * MapProfile handles Bluetooth MAP profile.
- */
-final class MapProfile implements LocalBluetoothProfile {
- private static final String TAG = "MapProfile";
- private static boolean V = true;
-
- private BluetoothMap mService;
- private boolean mIsProfileReady;
-
- private final LocalBluetoothAdapter mLocalAdapter;
- private final CachedBluetoothDeviceManager mDeviceManager;
- private final LocalBluetoothProfileManager mProfileManager;
-
- static final ParcelUuid[] UUIDS = {
- BluetoothUuid.MAP,
- BluetoothUuid.MNS,
- BluetoothUuid.MAS,
- };
-
- static final String NAME = "MAP";
-
- // Order of this profile in device profiles list
-
- // These callbacks run on the main thread.
- private final class MapServiceListener
- implements BluetoothProfile.ServiceListener {
-
- public void onServiceConnected(int profile, BluetoothProfile proxy) {
- if (V) Log.d(TAG,"Bluetooth service connected");
- mService = (BluetoothMap) proxy;
- // We just bound to the service, so refresh the UI for any connected MAP devices.
- List<BluetoothDevice> deviceList = mService.getConnectedDevices();
- while (!deviceList.isEmpty()) {
- BluetoothDevice nextDevice = deviceList.remove(0);
- CachedBluetoothDevice device = mDeviceManager.findDevice(nextDevice);
- // we may add a new device here, but generally this should not happen
- if (device == null) {
- Log.w(TAG, "MapProfile found new device: " + nextDevice);
- device = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, nextDevice);
- }
- device.onProfileStateChanged(MapProfile.this,
- BluetoothProfile.STATE_CONNECTED);
- device.refresh();
- }
-
- mProfileManager.callServiceConnectedListeners();
- mIsProfileReady=true;
- }
-
- public void onServiceDisconnected(int profile) {
- if (V) Log.d(TAG,"Bluetooth service disconnected");
- mProfileManager.callServiceDisconnectedListeners();
- mIsProfileReady=false;
- }
- }
-
- public boolean isProfileReady() {
- if(V) Log.d(TAG,"isProfileReady(): "+ mIsProfileReady);
- return mIsProfileReady;
- }
-
- MapProfile(Context context, LocalBluetoothAdapter adapter,
- CachedBluetoothDeviceManager deviceManager,
- LocalBluetoothProfileManager profileManager) {
- mLocalAdapter = adapter;
- mDeviceManager = deviceManager;
- mProfileManager = profileManager;
- mLocalAdapter.getProfileProxy(context, new MapServiceListener(),
- BluetoothProfile.MAP);
- }
-
- public boolean isConnectable() {
- return true;
- }
-
- public boolean isAutoConnectable() {
- return true;
- }
-
- public boolean connect(BluetoothDevice device) {
- if(V)Log.d(TAG,"connect() - should not get called");
- return false; // MAP never connects out
- }
-
- public boolean disconnect(BluetoothDevice device) {
- if (mService == null) return false;
- List<BluetoothDevice> deviceList = mService.getConnectedDevices();
- if (!deviceList.isEmpty() && deviceList.get(0).equals(device)) {
- if (mService.getPriority(device) > BluetoothProfile.PRIORITY_ON) {
- mService.setPriority(device, BluetoothProfile.PRIORITY_ON);
- }
- return mService.disconnect(device);
- } else {
- return false;
- }
- }
-
- public int getConnectionStatus(BluetoothDevice device) {
- if (mService == null) return BluetoothProfile.STATE_DISCONNECTED;
- List<BluetoothDevice> deviceList = mService.getConnectedDevices();
- if(V) Log.d(TAG,"getConnectionStatus: status is: "+ mService.getConnectionState(device));
-
- return !deviceList.isEmpty() && deviceList.get(0).equals(device)
- ? mService.getConnectionState(device)
- : BluetoothProfile.STATE_DISCONNECTED;
- }
-
- public boolean isPreferred(BluetoothDevice device) {
- if (mService == null) return false;
- return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF;
- }
-
- public int getPreferred(BluetoothDevice device) {
- if (mService == null) return BluetoothProfile.PRIORITY_OFF;
- return mService.getPriority(device);
- }
-
- public void setPreferred(BluetoothDevice device, boolean preferred) {
- if (mService == null) return;
- if (preferred) {
- if (mService.getPriority(device) < BluetoothProfile.PRIORITY_ON) {
- mService.setPriority(device, BluetoothProfile.PRIORITY_ON);
- }
- } else {
- mService.setPriority(device, BluetoothProfile.PRIORITY_OFF);
- }
- }
-
- public List<BluetoothDevice> getConnectedDevices() {
- if (mService == null) return new ArrayList<BluetoothDevice>(0);
- return mService.getDevicesMatchingConnectionStates(
- new int[] {BluetoothProfile.STATE_CONNECTED,
- BluetoothProfile.STATE_CONNECTING,
- BluetoothProfile.STATE_DISCONNECTING});
- }
-
- public String toString() {
- return NAME;
- }
-
- public int getOrdinal() {
- return BluetoothProfile.MAP;
- }
-
- public int getNameResource(BluetoothDevice device) {
- return R.string.bluetooth_profile_map;
- }
-
- public int getSummaryResourceForDevice(BluetoothDevice device) {
- int state = getConnectionStatus(device);
- switch (state) {
- case BluetoothProfile.STATE_DISCONNECTED:
- return R.string.bluetooth_map_profile_summary_use_for;
-
- case BluetoothProfile.STATE_CONNECTED:
- return R.string.bluetooth_map_profile_summary_connected;
-
- default:
- return Utils.getConnectionStateSummary(state);
- }
- }
-
- public int getDrawableResource(BluetoothClass btClass) {
- return R.drawable.ic_bt_cellphone;
- }
-
- protected void finalize() {
- if (V) Log.d(TAG, "finalize()");
- if (mService != null) {
- try {
- BluetoothAdapter.getDefaultAdapter().closeProfileProxy(BluetoothProfile.MAP,
- mService);
- mService = null;
- }catch (Throwable t) {
- Log.w(TAG, "Error cleaning up MAP proxy", t);
- }
- }
- }
-}
diff --git a/src/com/android/settings/bluetooth/OppProfile.java b/src/com/android/settings/bluetooth/OppProfile.java
deleted file mode 100755
index 7ee2ad1..0000000
--- a/src/com/android/settings/bluetooth/OppProfile.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import com.android.settings.R;
-
-import android.bluetooth.BluetoothClass;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothProfile;
-
-/**
- * OppProfile handles Bluetooth OPP.
- */
-final class OppProfile implements LocalBluetoothProfile {
-
- static final String NAME = "OPP";
-
- // Order of this profile in device profiles list
- private static final int ORDINAL = 2;
-
- public boolean isConnectable() {
- return false;
- }
-
- public boolean isAutoConnectable() {
- return false;
- }
-
- public boolean connect(BluetoothDevice device) {
- return false;
- }
-
- public boolean disconnect(BluetoothDevice device) {
- return false;
- }
-
- public int getConnectionStatus(BluetoothDevice device) {
- return BluetoothProfile.STATE_DISCONNECTED; // Settings app doesn't handle OPP
- }
-
- public boolean isPreferred(BluetoothDevice device) {
- return false;
- }
-
- public int getPreferred(BluetoothDevice device) {
- return BluetoothProfile.PRIORITY_OFF; // Settings app doesn't handle OPP
- }
-
- public void setPreferred(BluetoothDevice device, boolean preferred) {
- }
-
- public boolean isProfileReady() {
- return true;
- }
-
- public String toString() {
- return NAME;
- }
-
- public int getOrdinal() {
- return ORDINAL;
- }
-
- public int getNameResource(BluetoothDevice device) {
- return R.string.bluetooth_profile_opp;
- }
-
- public int getSummaryResourceForDevice(BluetoothDevice device) {
- return 0; // OPP profile not displayed in UI
- }
-
- public int getDrawableResource(BluetoothClass btClass) {
- return 0; // no icon for OPP
- }
-}
diff --git a/src/com/android/settings/bluetooth/PanProfile.java b/src/com/android/settings/bluetooth/PanProfile.java
deleted file mode 100755
index f6e0691..0000000
--- a/src/com/android/settings/bluetooth/PanProfile.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothClass;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothPan;
-import android.bluetooth.BluetoothProfile;
-import android.content.Context;
-import android.util.Log;
-
-import com.android.settings.R;
-
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * PanProfile handles Bluetooth PAN profile (NAP and PANU).
- */
-final class PanProfile implements LocalBluetoothProfile {
- private static final String TAG = "PanProfile";
- private static boolean V = true;
-
- private BluetoothPan mService;
- private boolean mIsProfileReady;
-
- // Tethering direction for each device
- private final HashMap<BluetoothDevice, Integer> mDeviceRoleMap =
- new HashMap<BluetoothDevice, Integer>();
-
- static final String NAME = "PAN";
-
- // Order of this profile in device profiles list
- private static final int ORDINAL = 4;
-
- // These callbacks run on the main thread.
- private final class PanServiceListener
- implements BluetoothProfile.ServiceListener {
-
- public void onServiceConnected(int profile, BluetoothProfile proxy) {
- if (V) Log.d(TAG,"Bluetooth service connected");
- mService = (BluetoothPan) proxy;
- mIsProfileReady=true;
- }
-
- public void onServiceDisconnected(int profile) {
- if (V) Log.d(TAG,"Bluetooth service disconnected");
- mIsProfileReady=false;
- }
- }
-
- public boolean isProfileReady() {
- return mIsProfileReady;
- }
-
- PanProfile(Context context) {
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- adapter.getProfileProxy(context, new PanServiceListener(),
- BluetoothProfile.PAN);
- }
-
- public boolean isConnectable() {
- return true;
- }
-
- public boolean isAutoConnectable() {
- return false;
- }
-
- public boolean connect(BluetoothDevice device) {
- if (mService == null) return false;
- List<BluetoothDevice> sinks = mService.getConnectedDevices();
- if (sinks != null) {
- for (BluetoothDevice sink : sinks) {
- mService.disconnect(sink);
- }
- }
- return mService.connect(device);
- }
-
- public boolean disconnect(BluetoothDevice device) {
- if (mService == null) return false;
- return mService.disconnect(device);
- }
-
- public int getConnectionStatus(BluetoothDevice device) {
- if (mService == null) {
- return BluetoothProfile.STATE_DISCONNECTED;
- }
- return mService.getConnectionState(device);
- }
-
- public boolean isPreferred(BluetoothDevice device) {
- // return current connection status so profile checkbox is set correctly
- return getConnectionStatus(device) == BluetoothProfile.STATE_CONNECTED;
- }
-
- public int getPreferred(BluetoothDevice device) {
- return -1;
- }
-
- public void setPreferred(BluetoothDevice device, boolean preferred) {
- // ignore: isPreferred is always true for PAN
- }
-
- public String toString() {
- return NAME;
- }
-
- public int getOrdinal() {
- return ORDINAL;
- }
-
- public int getNameResource(BluetoothDevice device) {
- if (isLocalRoleNap(device)) {
- return R.string.bluetooth_profile_pan_nap;
- } else {
- return R.string.bluetooth_profile_pan;
- }
- }
-
- public int getSummaryResourceForDevice(BluetoothDevice device) {
- int state = getConnectionStatus(device);
- switch (state) {
- case BluetoothProfile.STATE_DISCONNECTED:
- return R.string.bluetooth_pan_profile_summary_use_for;
-
- case BluetoothProfile.STATE_CONNECTED:
- if (isLocalRoleNap(device)) {
- return R.string.bluetooth_pan_nap_profile_summary_connected;
- } else {
- return R.string.bluetooth_pan_user_profile_summary_connected;
- }
-
- default:
- return Utils.getConnectionStateSummary(state);
- }
- }
-
- public int getDrawableResource(BluetoothClass btClass) {
- return R.drawable.ic_bt_network_pan;
- }
-
- // Tethering direction determines UI strings.
- void setLocalRole(BluetoothDevice device, int role) {
- mDeviceRoleMap.put(device, role);
- }
-
- boolean isLocalRoleNap(BluetoothDevice device) {
- if (mDeviceRoleMap.containsKey(device)) {
- return mDeviceRoleMap.get(device) == BluetoothPan.LOCAL_NAP_ROLE;
- } else {
- return false;
- }
- }
-
- protected void finalize() {
- if (V) Log.d(TAG, "finalize()");
- if (mService != null) {
- try {
- BluetoothAdapter.getDefaultAdapter().closeProfileProxy(BluetoothProfile.PAN, mService);
- mService = null;
- }catch (Throwable t) {
- Log.w(TAG, "Error cleaning up PAN proxy", t);
- }
- }
- }
-}
diff --git a/src/com/android/settings/bluetooth/PbapServerProfile.java b/src/com/android/settings/bluetooth/PbapServerProfile.java
deleted file mode 100755
index 6e48b12..0000000
--- a/src/com/android/settings/bluetooth/PbapServerProfile.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothClass;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothPbap;
-import android.bluetooth.BluetoothProfile;
-import android.bluetooth.BluetoothUuid;
-import android.content.Context;
-import android.os.ParcelUuid;
-import android.util.Log;
-
-import com.android.settings.R;
-
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * PBAPServer Profile
- */
-final class PbapServerProfile implements LocalBluetoothProfile {
- private static final String TAG = "PbapServerProfile";
- private static boolean V = true;
-
- private BluetoothPbap mService;
- private boolean mIsProfileReady;
-
- static final String NAME = "PBAP Server";
-
- // Order of this profile in device profiles list
- private static final int ORDINAL = 6;
-
- // The UUIDs indicate that remote device might access pbap server
- static final ParcelUuid[] PBAB_CLIENT_UUIDS = {
- BluetoothUuid.HSP,
- BluetoothUuid.Handsfree,
- BluetoothUuid.PBAP_PCE
- };
-
- // These callbacks run on the main thread.
- private final class PbapServiceListener
- implements BluetoothPbap.ServiceListener {
-
- public void onServiceConnected(BluetoothPbap proxy) {
- if (V) Log.d(TAG,"Bluetooth service connected");
- mService = (BluetoothPbap) proxy;
- mIsProfileReady=true;
- }
-
- public void onServiceDisconnected() {
- if (V) Log.d(TAG,"Bluetooth service disconnected");
- mIsProfileReady=false;
- }
- }
-
- public boolean isProfileReady() {
- return mIsProfileReady;
- }
-
- PbapServerProfile(Context context) {
- BluetoothPbap pbap = new BluetoothPbap(context, new PbapServiceListener());
- }
-
- public boolean isConnectable() {
- return true;
- }
-
- public boolean isAutoConnectable() {
- return false;
- }
-
- public boolean connect(BluetoothDevice device) {
- /*Can't connect from server */
- return false;
-
- }
-
- public boolean disconnect(BluetoothDevice device) {
- if (mService == null) return false;
- return mService.disconnect();
- }
-
- public int getConnectionStatus(BluetoothDevice device) {
- if (mService == null) {
- return BluetoothProfile.STATE_DISCONNECTED;
- }
- if (mService.isConnected(device))
- return BluetoothProfile.STATE_CONNECTED;
- else
- return BluetoothProfile.STATE_DISCONNECTED;
- }
-
- public boolean isPreferred(BluetoothDevice device) {
- return false;
- }
-
- public int getPreferred(BluetoothDevice device) {
- return -1;
- }
-
- public void setPreferred(BluetoothDevice device, boolean preferred) {
- // ignore: isPreferred is always true for PBAP
- }
-
- public String toString() {
- return NAME;
- }
-
- public int getOrdinal() {
- return ORDINAL;
- }
-
- public int getNameResource(BluetoothDevice device) {
- return R.string.bluetooth_profile_pbap;
- }
-
- public int getSummaryResourceForDevice(BluetoothDevice device) {
- return R.string.bluetooth_profile_pbap_summary;
- }
-
- public int getDrawableResource(BluetoothClass btClass) {
- return R.drawable.ic_bt_cellphone;
- }
-
- protected void finalize() {
- if (V) Log.d(TAG, "finalize()");
- if (mService != null) {
- try {
- mService.close();
- mService = null;
- }catch (Throwable t) {
- Log.w(TAG, "Error cleaning up PBAP proxy", t);
- }
- }
- }
-}
diff --git a/src/com/android/settings/bluetooth/RequestPermissionActivity.java b/src/com/android/settings/bluetooth/RequestPermissionActivity.java
index 9f266a5..9ce332d 100644
--- a/src/com/android/settings/bluetooth/RequestPermissionActivity.java
+++ b/src/com/android/settings/bluetooth/RequestPermissionActivity.java
@@ -16,8 +16,6 @@
package com.android.settings.bluetooth;
-import com.android.settings.R;
-
import android.app.Activity;
import android.app.AlertDialog;
import android.bluetooth.BluetoothAdapter;
@@ -30,6 +28,11 @@ import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
+import com.android.settings.R;
+import com.android.settingslib.bluetooth.BluetoothDiscoverableTimeoutReceiver;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+
/**
* RequestPermissionActivity asks the user whether to enable discovery. This is
* usually started by an application wanted to start bluetooth and or discovery
@@ -275,7 +278,7 @@ public class RequestPermissionActivity extends Activity implements
return true;
}
- LocalBluetoothManager manager = LocalBluetoothManager.getInstance(this);
+ LocalBluetoothManager manager = Utils.getLocalBtManager(this);
if (manager == null) {
Log.e(TAG, "Error: there's a problem starting Bluetooth");
setResult(RESULT_CANCELED);
diff --git a/src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java b/src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java
index f108513..87a73a7 100644
--- a/src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java
+++ b/src/com/android/settings/bluetooth/RequestPermissionHelperActivity.java
@@ -19,6 +19,8 @@ package com.android.settings.bluetooth;
import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
import com.android.settings.R;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
@@ -146,7 +148,7 @@ public class RequestPermissionHelperActivity extends AlertActivity implements
return true;
}
- LocalBluetoothManager manager = LocalBluetoothManager.getInstance(this);
+ LocalBluetoothManager manager = Utils.getLocalBtManager(this);
if (manager == null) {
Log.e(TAG, "Error: there's a problem starting Bluetooth");
setResult(RESULT_CANCELED);
diff --git a/src/com/android/settings/bluetooth/Utils.java b/src/com/android/settings/bluetooth/Utils.java
index e9230de..2cbe473 100755
--- a/src/com/android/settings/bluetooth/Utils.java
+++ b/src/com/android/settings/bluetooth/Utils.java
@@ -17,24 +17,27 @@
package com.android.settings.bluetooth;
import android.app.AlertDialog;
-import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.content.DialogInterface;
import android.widget.Toast;
import com.android.settings.R;
+import com.android.settings.bluetooth.DockService.DockBluetoothCallback;
import com.android.settings.search.Index;
import com.android.settings.search.SearchIndexableRaw;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.settingslib.bluetooth.LocalBluetoothManager.BluetoothManagerCallback;
+import com.android.settingslib.bluetooth.Utils.ErrorListener;
/**
* Utils is a helper class that contains constants for various
* Android resource IDs, debug logging flags, and static methods
* for creating dialogs.
*/
-final class Utils {
- static final boolean V = false; // verbose logging
- static final boolean D = true; // regular logging
+public final class Utils {
+ static final boolean V = com.android.settingslib.bluetooth.Utils.V; // verbose logging
+ static final boolean D = com.android.settingslib.bluetooth.Utils.D; // regular logging
private Utils() {
}
@@ -91,7 +94,7 @@ final class Utils {
static void showError(Context context, String name, int messageResId) {
String message = context.getString(messageResId, name);
- LocalBluetoothManager manager = LocalBluetoothManager.getInstance(context);
+ LocalBluetoothManager manager = getLocalBtManager(context);
Context activity = manager.getForegroundActivity();
if(manager.isForegroundActivity()) {
new AlertDialog.Builder(activity)
@@ -118,4 +121,25 @@ final class Utils {
Index.getInstance(context).updateFromSearchIndexableData(data);
}
+
+ public static LocalBluetoothManager getLocalBtManager(Context context) {
+ return LocalBluetoothManager.getInstance(context, mOnInitCallback);
+ }
+
+ private static final ErrorListener mErrorListener = new ErrorListener() {
+ @Override
+ public void onShowError(Context context, String name, int messageResId) {
+ showError(context, name, messageResId);
+ }
+ };
+
+ private static final BluetoothManagerCallback mOnInitCallback = new BluetoothManagerCallback() {
+ @Override
+ public void onBluetoothManagerInitialized(Context appContext,
+ LocalBluetoothManager bluetoothManager) {
+ bluetoothManager.getEventManager().registerCallback(
+ new DockBluetoothCallback(appContext));
+ com.android.settingslib.bluetooth.Utils.setErrorListener(mErrorListener);
+ }
+ };
}
diff --git a/src/com/android/settings/widget/SettingsAppWidgetProvider.java b/src/com/android/settings/widget/SettingsAppWidgetProvider.java
index a5d3658..1f5aaf4 100644
--- a/src/com/android/settings/widget/SettingsAppWidgetProvider.java
+++ b/src/com/android/settings/widget/SettingsAppWidgetProvider.java
@@ -41,8 +41,9 @@ import android.util.Log;
import android.widget.RemoteViews;
import com.android.settings.R;
-import com.android.settings.bluetooth.LocalBluetoothAdapter;
-import com.android.settings.bluetooth.LocalBluetoothManager;
+import com.android.settings.bluetooth.Utils;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
/**
* Provides control of power-related settings from a widget.
@@ -448,7 +449,7 @@ public class SettingsAppWidgetProvider extends AppWidgetProvider {
@Override
public int getActualState(Context context) {
if (sLocalBluetoothAdapter == null) {
- LocalBluetoothManager manager = LocalBluetoothManager.getInstance(context);
+ LocalBluetoothManager manager = Utils.getLocalBtManager(context);
if (manager == null) {
return STATE_UNKNOWN; // On emulator?
}