diff options
author | Miao Chou <mcchou@google.com> | 2015-06-26 17:14:35 -0700 |
---|---|---|
committer | Andre Eisenbach <eisenbach@google.com> | 2015-07-01 19:09:44 +0000 |
commit | 1e7ac062da74127adf1a5e7a1f5fb74bb493fdeb (patch) | |
tree | c6990c5cd78c613a13afceb0fbd2d91ec02535ae /service/java/com/android/server/bluetooth/BluetoothManagerService.java | |
parent | e65babd4df9b3f9a0ade1f375e143f17191c928b (diff) |
Add BluetoothService to reduce resuming time after reboot
As a subclass of SystemService, BluetoothService wraps around
BluetoothManagerService to unlock Auto-enabling Bluetooth earlier by overriding
onBootPhase() and removes the need to wait for BOOT_COMPLETED message.
Bug:21705209
Change-Id: I2acc41370a750d8416e11e662e06392326741d2c
Diffstat (limited to 'service/java/com/android/server/bluetooth/BluetoothManagerService.java')
-rw-r--r-- | service/java/com/android/server/bluetooth/BluetoothManagerService.java | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/service/java/com/android/server/bluetooth/BluetoothManagerService.java b/service/java/com/android/server/bluetooth/BluetoothManagerService.java index 25f8872fa5..b9f62e6785 100644 --- a/service/java/com/android/server/bluetooth/BluetoothManagerService.java +++ b/service/java/com/android/server/bluetooth/BluetoothManagerService.java @@ -60,6 +60,7 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; + class BluetoothManagerService extends IBluetoothManager.Stub { private static final String TAG = "BluetoothManagerService"; private static final boolean DBG = false; @@ -234,25 +235,6 @@ class BluetoothManagerService extends IBluetoothManager.Stub { sendEnableMsg(mQuietEnableExternal); } } - } else if (Intent.ACTION_USER_SWITCHED.equals(action)) { - if (DBG) Log.d(TAG, "Bluetooth user switched"); - mHandler.sendMessage(mHandler.obtainMessage(MESSAGE_USER_SWITCHED, - intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0), 0)); - } else if (Intent.ACTION_BOOT_COMPLETED.equals(action)) { - if (DBG) Log.d(TAG, "Bluetooth boot completed"); - synchronized(mReceiver) { - if (mEnableExternal && isBluetoothPersistedStateOnBluetooth()) { - //Enable - if (DBG) Log.d(TAG, "Auto-enabling Bluetooth."); - sendEnableMsg(mQuietEnableExternal); - } - if (!isNameAndAddressSet()) { - // Sync the Bluetooth name and address from the - // Bluetooth Adapter - if (DBG) Log.d(TAG, "Retrieving Bluetooth Adapter name and address..."); - getNameAndAddress(); - } - } } } }; @@ -277,9 +259,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { registerForBleScanModeChange(); mCallbacks = new RemoteCallbackList<IBluetoothManagerCallback>(); mStateChangeCallbacks = new RemoteCallbackList<IBluetoothStateChangeCallback>(); - IntentFilter filter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED); - filter.addAction(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED); - filter.addAction(Intent.ACTION_USER_SWITCHED); + IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_LOCAL_NAME_CHANGED); registerForAirplaneMode(filter); filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY); mContext.registerReceiver(mReceiver, filter); @@ -790,6 +770,31 @@ class BluetoothManagerService extends IBluetoothManager.Stub { } /** + * Send enable message and set adapter name and address. Called when the boot phase becomes + * PHASE_SYSTEM_SERVICES_READY. + */ + public void handleOnBootPhase() { + if (DBG) Log.d(TAG, "Bluetooth boot completed"); + if (mEnableExternal && isBluetoothPersistedStateOnBluetooth()) { + if (DBG) Log.d(TAG, "Auto-enabling Bluetooth."); + sendEnableMsg(mQuietEnableExternal); + } + if (!isNameAndAddressSet()) { + // Sync the Bluetooth name and address from the Bluetooth Adapter + if (DBG) Log.d(TAG, "Retrieving Bluetooth Adapter name and address..."); + getNameAndAddress(); + } + } + + /** + * Called when switching to a different foreground user. + */ + public void handleOnSwitchUser(int userHandle) { + if (DBG) Log.d(TAG, "Bluetooth user switched"); + mHandler.sendMessage(mHandler.obtainMessage(MESSAGE_USER_SWITCHED, userHandle, 0)); + } + + /** * This class manages the clients connected to a given ProfileService * and maintains the connection with that service. */ |