summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVenkata Jagadeesh <vjagad@codeaurora.org>2014-12-04 11:40:38 +0530
committerArne Coucheron <arco68@gmail.com>2015-01-22 00:51:03 +0100
commitf2ac617a88464a40d5a986e6eb04f4efe494f39d (patch)
tree6bcbbb09a4d022db0a83bf5e4ca966d13077efb1
parent02bf7ae9826a355db8614d1aad4f04bb5d6509ab (diff)
downloadandroid_packages_apps_Bluetooth-f2ac617a88464a40d5a986e6eb04f4efe494f39d.tar.gz
android_packages_apps_Bluetooth-f2ac617a88464a40d5a986e6eb04f4efe494f39d.tar.bz2
android_packages_apps_Bluetooth-f2ac617a88464a40d5a986e6eb04f4efe494f39d.zip
Bluetooth: GAP: Acquire a wakelock to bring the display up.
Acquire a wakelock during PIN code request to bring up the LCD display when the remote device requests for pairing. Change-Id: I91ddde204c2dbe44c177b49632478c68357e4852 CRs-fixed: 769499
-rwxr-xr-xsrc/com/android/bluetooth/btservice/AdapterService.java2
-rw-r--r--src/com/android/bluetooth/btservice/BondStateMachine.java22
2 files changed, 20 insertions, 4 deletions
diff --git a/src/com/android/bluetooth/btservice/AdapterService.java b/src/com/android/bluetooth/btservice/AdapterService.java
index 44f2cf844..1af9deca3 100755
--- a/src/com/android/bluetooth/btservice/AdapterService.java
+++ b/src/com/android/bluetooth/btservice/AdapterService.java
@@ -400,7 +400,7 @@ public class AdapterService extends Service {
mAdapterProperties.init(mRemoteDevices);
debugLog("processStart() - Make Bond State Machine");
- mBondStateMachine = BondStateMachine.make(this, mAdapterProperties, mRemoteDevices);
+ mBondStateMachine = BondStateMachine.make(mPowerManager, this, mAdapterProperties, mRemoteDevices);
mJniCallbacks.init(mBondStateMachine,mRemoteDevices);
diff --git a/src/com/android/bluetooth/btservice/BondStateMachine.java b/src/com/android/bluetooth/btservice/BondStateMachine.java
index 68590e7b6..41a3dbc03 100644
--- a/src/com/android/bluetooth/btservice/BondStateMachine.java
+++ b/src/com/android/bluetooth/btservice/BondStateMachine.java
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2012 The Android Open Source Project
+ * Copyright (C) 2014 The Linux Foundation. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -28,6 +29,7 @@ import android.content.Intent;
import android.os.Message;
import android.os.UserHandle;
import android.util.Log;
+import android.os.PowerManager;
import com.android.bluetooth.Utils;
import com.android.bluetooth.btservice.RemoteDevices.DeviceProperties;
@@ -63,13 +65,17 @@ final class BondStateMachine extends StateMachine {
private RemoteDevices mRemoteDevices;
private BluetoothAdapter mAdapter;
+ /* The WakeLock is used for bringing up the LCD during a pairing request
+ * from remote device when Android is in Suspend state.*/
+ private PowerManager.WakeLock mWakeLock;
+
private PendingCommandState mPendingCommandState = new PendingCommandState();
private StableState mStableState = new StableState();
private final ArrayList<BluetoothDevice> mDevices =
new ArrayList<BluetoothDevice>();
- private BondStateMachine(AdapterService service,
+ private BondStateMachine(PowerManager pm, AdapterService service,
AdapterProperties prop, RemoteDevices remoteDevices) {
super("BondStateMachine:");
addState(mStableState);
@@ -79,12 +85,17 @@ final class BondStateMachine extends StateMachine {
mAdapterProperties = prop;
mAdapter = BluetoothAdapter.getDefaultAdapter();
setInitialState(mStableState);
+
+ //WakeLock instantiation in RemoteDevices class
+ mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP
+ | PowerManager.ON_AFTER_RELEASE, TAG);
+ mWakeLock.setReferenceCounted(false);
}
- public static BondStateMachine make(AdapterService service,
+ public static BondStateMachine make(PowerManager pm, AdapterService service,
AdapterProperties prop, RemoteDevices remoteDevices) {
Log.d(TAG, "make");
- BondStateMachine bsm = new BondStateMachine(service, prop, remoteDevices);
+ BondStateMachine bsm = new BondStateMachine(pm, service, prop, remoteDevices);
bsm.start();
return bsm;
}
@@ -320,6 +331,9 @@ final class BondStateMachine extends StateMachine {
}
private void sendDisplayPinIntent(byte[] address, int pin, int variant) {
+
+ // Acquire wakelock during PIN code request to bring up LCD display
+ mWakeLock.acquire();
Intent intent = new Intent(BluetoothDevice.ACTION_PAIRING_REQUEST);
intent.putExtra(BluetoothDevice.EXTRA_DEVICE, mRemoteDevices.getDevice(address));
if (pin != 0) {
@@ -328,6 +342,8 @@ final class BondStateMachine extends StateMachine {
intent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, variant);
intent.setFlags(Intent.FLAG_RECEIVER_FOREGROUND);
mAdapterService.sendOrderedBroadcast(intent, mAdapterService.BLUETOOTH_ADMIN_PERM);
+ // Release wakelock to allow the LCD to go off after the PIN popup notification.
+ mWakeLock.release();
}
private void sendIntent(BluetoothDevice device, int newState, int reason) {