summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhihai Xu <zhihaixu@google.com>2013-11-26 23:09:54 -0800
committerZhihai Xu <zhihaixu@google.com>2014-03-08 00:30:10 -0800
commit98dde68aa7cf3b63683fa5cbd70b11623a29a90f (patch)
treeeffb4f855781959cbd67271f83c1b1ace672441e
parent6d4c5c8befa3e585271ed4db770dd6990827d1f0 (diff)
downloadandroid_packages_apps_Bluetooth-98dde68aa7cf3b63683fa5cbd70b11623a29a90f.tar.gz
android_packages_apps_Bluetooth-98dde68aa7cf3b63683fa5cbd70b11623a29a90f.tar.bz2
android_packages_apps_Bluetooth-98dde68aa7cf3b63683fa5cbd70b11623a29a90f.zip
DO NOT MERGE release wakelock if no activity in Bluetooth MAP profile to avoid waste power.
bug:11138488 Change-Id: Ie7d8903cc917aee51711fa47f275863e4046f3d8
-rw-r--r--src/com/android/bluetooth/map/BluetoothMapObexServer.java12
-rw-r--r--src/com/android/bluetooth/map/BluetoothMapService.java38
-rw-r--r--src/com/android/bluetooth/map/BluetoothMnsObexClient.java13
3 files changed, 60 insertions, 3 deletions
diff --git a/src/com/android/bluetooth/map/BluetoothMapObexServer.java b/src/com/android/bluetooth/map/BluetoothMapObexServer.java
index a87674029..b49708220 100644
--- a/src/com/android/bluetooth/map/BluetoothMapObexServer.java
+++ b/src/com/android/bluetooth/map/BluetoothMapObexServer.java
@@ -100,6 +100,7 @@ public class BluetoothMapObexServer extends ServerRequestHandler {
public int onConnect(final HeaderSet request, HeaderSet reply) {
if (D) Log.d(TAG, "onConnect():");
if (V) logHeader(request);
+ notifyUpdateWakeLock();
try {
byte[] uuid = (byte[])request.getHeader(HeaderSet.TARGET);
if (uuid == null) {
@@ -149,7 +150,7 @@ public class BluetoothMapObexServer extends ServerRequestHandler {
public void onDisconnect(final HeaderSet req, final HeaderSet resp) {
if (D) Log.d(TAG, "onDisconnect(): enter");
if (V) logHeader(req);
-
+ notifyUpdateWakeLock();
resp.responseCode = ResponseCodes.OBEX_HTTP_OK;
if (mCallback != null) {
Message msg = Message.obtain(mCallback);
@@ -162,6 +163,7 @@ public class BluetoothMapObexServer extends ServerRequestHandler {
@Override
public int onAbort(HeaderSet request, HeaderSet reply) {
if (D) Log.d(TAG, "onAbort(): enter.");
+ notifyUpdateWakeLock();
sIsAborted = true;
return ResponseCodes.OBEX_HTTP_OK;
}
@@ -169,6 +171,7 @@ public class BluetoothMapObexServer extends ServerRequestHandler {
@Override
public int onPut(final Operation op) {
if (D) Log.d(TAG, "onPut(): enter");
+ notifyUpdateWakeLock();
HeaderSet request = null;
String type, name;
byte[] appParamRaw;
@@ -321,6 +324,7 @@ public class BluetoothMapObexServer extends ServerRequestHandler {
final boolean create) {
String folderName;
BluetoothMapFolderElement folder;
+ notifyUpdateWakeLock();
try {
folderName = (String)request.getHeader(HeaderSet.NAME);
} catch (Exception e) {
@@ -366,6 +370,7 @@ public class BluetoothMapObexServer extends ServerRequestHandler {
@Override
public int onGet(Operation op) {
+ notifyUpdateWakeLock();
sIsAborted = false;
HeaderSet request;
String type;
@@ -686,6 +691,11 @@ public class BluetoothMapObexServer extends ServerRequestHandler {
return ResponseCodes.OBEX_HTTP_OK;
}
+ private void notifyUpdateWakeLock() {
+ Message msg = Message.obtain(mCallback);
+ msg.what = BluetoothMapService.MSG_ACQUIRE_WAKE_LOCK;
+ msg.sendToTarget();
+ }
private static final void logHeader(HeaderSet hs) {
Log.v(TAG, "Dumping HeaderSet " + hs.toString());
diff --git a/src/com/android/bluetooth/map/BluetoothMapService.java b/src/com/android/bluetooth/map/BluetoothMapService.java
index c5c03ef06..3497cf84d 100644
--- a/src/com/android/bluetooth/map/BluetoothMapService.java
+++ b/src/com/android/bluetooth/map/BluetoothMapService.java
@@ -97,6 +97,10 @@ public class BluetoothMapService extends ProfileService {
public static final int MSG_OBEX_AUTH_CHALL = 5003;
+ public static final int MSG_ACQUIRE_WAKE_LOCK = 5004;
+
+ public static final int MSG_RELEASE_WAKE_LOCK = 5005;
+
private static final String BLUETOOTH_PERM = android.Manifest.permission.BLUETOOTH;
private static final String BLUETOOTH_ADMIN_PERM = android.Manifest.permission.BLUETOOTH_ADMIN;
@@ -107,6 +111,8 @@ public class BluetoothMapService extends ProfileService {
private static final int DISCONNECT_MAP = 3;
+ private static final int RELEASE_WAKE_LOCK_DELAY = 10000;
+
private PowerManager.WakeLock mWakeLock = null;
private BluetoothAdapter mAdapter;
@@ -289,7 +295,8 @@ public class BluetoothMapService extends ProfileService {
mWakeLock.acquire();
}
- mBluetoothMnsObexClient = new BluetoothMnsObexClient(this, mRemoteDevice);
+ mBluetoothMnsObexClient = new BluetoothMnsObexClient(this, mRemoteDevice,
+ mSessionStatusHandler);
mMapServer = new BluetoothMapObexServer(mSessionStatusHandler, this,
mBluetoothMnsObexClient);
synchronized (this) {
@@ -302,6 +309,11 @@ public class BluetoothMapService extends ProfileService {
BluetoothMapRfcommTransport transport = new BluetoothMapRfcommTransport(mConnSocket);
mServerSession = new ServerSession(transport, mMapServer, mAuth);
setState(BluetoothMap.STATE_CONNECTED);
+
+ mSessionStatusHandler.removeMessages(MSG_RELEASE_WAKE_LOCK);
+ mSessionStatusHandler.sendMessageDelayed(mSessionStatusHandler
+ .obtainMessage(MSG_RELEASE_WAKE_LOCK), RELEASE_WAKE_LOCK_DELAY);
+
if (VERBOSE) {
Log.v(TAG, "startObexServerSession() success!");
}
@@ -310,6 +322,9 @@ public class BluetoothMapService extends ProfileService {
private void stopObexServerSession() {
if (DEBUG) Log.d(TAG, "MAP Service stopObexServerSession");
+ mSessionStatusHandler.removeMessages(MSG_ACQUIRE_WAKE_LOCK);
+ mSessionStatusHandler.removeMessages(MSG_RELEASE_WAKE_LOCK);
+
// Release the wake lock if obex transaction is over
if (mWakeLock != null) {
mWakeLock.release();
@@ -458,6 +473,27 @@ public class BluetoothMapService extends ProfileService {
case DISCONNECT_MAP:
disconnectMap((BluetoothDevice)msg.obj);
break;
+ case MSG_ACQUIRE_WAKE_LOCK:
+ if (mWakeLock == null) {
+ PowerManager pm = (PowerManager)getSystemService(
+ Context.POWER_SERVICE);
+ mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
+ "StartingObexMapTransaction");
+ mWakeLock.setReferenceCounted(false);
+ mWakeLock.acquire();
+ Log.w(TAG, "Acquire Wake Lock");
+ }
+ mSessionStatusHandler.removeMessages(MSG_RELEASE_WAKE_LOCK);
+ mSessionStatusHandler.sendMessageDelayed(mSessionStatusHandler
+ .obtainMessage(MSG_RELEASE_WAKE_LOCK), RELEASE_WAKE_LOCK_DELAY);
+ break;
+ case MSG_RELEASE_WAKE_LOCK:
+ if (mWakeLock != null) {
+ mWakeLock.release();
+ mWakeLock = null;
+ Log.w(TAG, "Release Wake Lock");
+ }
+ break;
default:
break;
}
diff --git a/src/com/android/bluetooth/map/BluetoothMnsObexClient.java b/src/com/android/bluetooth/map/BluetoothMnsObexClient.java
index 544c62191..adee46002 100644
--- a/src/com/android/bluetooth/map/BluetoothMnsObexClient.java
+++ b/src/com/android/bluetooth/map/BluetoothMnsObexClient.java
@@ -58,6 +58,7 @@ public class BluetoothMnsObexClient {
private ClientSession mClientSession;
private boolean mConnected = false;
BluetoothDevice mRemoteDevice;
+ private Handler mCallback = null;
private BluetoothMapContentObserver mObserver;
private boolean mObserverRegistered = false;
@@ -69,7 +70,8 @@ public class BluetoothMnsObexClient {
ParcelUuid.fromString("00001133-0000-1000-8000-00805F9B34FB");
- public BluetoothMnsObexClient(Context context, BluetoothDevice remoteDevice) {
+ public BluetoothMnsObexClient(Context context, BluetoothDevice remoteDevice,
+ Handler callback) {
if (remoteDevice == null) {
throw new NullPointerException("Obex transport is null");
}
@@ -79,6 +81,7 @@ public class BluetoothMnsObexClient {
mHandler = new MnsObexClientHandler(looper);
mContext = context;
mRemoteDevice = remoteDevice;
+ mCallback = callback;
mObserver = new BluetoothMapContentObserver(mContext);
mObserver.init();
}
@@ -268,6 +271,8 @@ public class BluetoothMnsObexClient {
return responseCode;
}
+ notifyUpdateWakeLock();
+
request = new HeaderSet();
BluetoothMapAppParams appParams = new BluetoothMapAppParams();
appParams.setMasInstanceId(masInstanceId);
@@ -368,4 +373,10 @@ public class BluetoothMnsObexClient {
private void handleSendException(String exception) {
Log.e(TAG, "Error when sending event: " + exception);
}
+
+ private void notifyUpdateWakeLock() {
+ Message msg = Message.obtain(mCallback);
+ msg.what = BluetoothMapService.MSG_ACQUIRE_WAKE_LOCK;
+ msg.sendToTarget();
+ }
}