Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 969f4932 authored by Zhihai Xu's avatar Zhihai Xu Committed by Android (Google) Code Review
Browse files

Merge "DO NOT MERGE release wakelock if no activity in Bluetooth MAP profile...

Merge "DO NOT MERGE release wakelock if no activity in Bluetooth MAP profile to avoid waste power." into klp-dev
parents b15c6797 98dde68a
Loading
Loading
Loading
Loading
+11 −1
Original line number Original line Diff line number Diff line
@@ -100,6 +100,7 @@ public class BluetoothMapObexServer extends ServerRequestHandler {
    public int onConnect(final HeaderSet request, HeaderSet reply) {
    public int onConnect(final HeaderSet request, HeaderSet reply) {
        if (D) Log.d(TAG, "onConnect():");
        if (D) Log.d(TAG, "onConnect():");
        if (V) logHeader(request);
        if (V) logHeader(request);
        notifyUpdateWakeLock();
        try {
        try {
            byte[] uuid = (byte[])request.getHeader(HeaderSet.TARGET);
            byte[] uuid = (byte[])request.getHeader(HeaderSet.TARGET);
            if (uuid == null) {
            if (uuid == null) {
@@ -149,7 +150,7 @@ public class BluetoothMapObexServer extends ServerRequestHandler {
    public void onDisconnect(final HeaderSet req, final HeaderSet resp) {
    public void onDisconnect(final HeaderSet req, final HeaderSet resp) {
        if (D) Log.d(TAG, "onDisconnect(): enter");
        if (D) Log.d(TAG, "onDisconnect(): enter");
        if (V) logHeader(req);
        if (V) logHeader(req);

        notifyUpdateWakeLock();
        resp.responseCode = ResponseCodes.OBEX_HTTP_OK;
        resp.responseCode = ResponseCodes.OBEX_HTTP_OK;
        if (mCallback != null) {
        if (mCallback != null) {
            Message msg = Message.obtain(mCallback);
            Message msg = Message.obtain(mCallback);
@@ -162,6 +163,7 @@ public class BluetoothMapObexServer extends ServerRequestHandler {
    @Override
    @Override
    public int onAbort(HeaderSet request, HeaderSet reply) {
    public int onAbort(HeaderSet request, HeaderSet reply) {
        if (D) Log.d(TAG, "onAbort(): enter.");
        if (D) Log.d(TAG, "onAbort(): enter.");
        notifyUpdateWakeLock();
        sIsAborted = true;
        sIsAborted = true;
        return ResponseCodes.OBEX_HTTP_OK;
        return ResponseCodes.OBEX_HTTP_OK;
    }
    }
@@ -169,6 +171,7 @@ public class BluetoothMapObexServer extends ServerRequestHandler {
    @Override
    @Override
    public int onPut(final Operation op) {
    public int onPut(final Operation op) {
        if (D) Log.d(TAG, "onPut(): enter");
        if (D) Log.d(TAG, "onPut(): enter");
        notifyUpdateWakeLock();
        HeaderSet request = null;
        HeaderSet request = null;
        String type, name;
        String type, name;
        byte[] appParamRaw;
        byte[] appParamRaw;
@@ -321,6 +324,7 @@ public class BluetoothMapObexServer extends ServerRequestHandler {
            final boolean create) {
            final boolean create) {
        String folderName;
        String folderName;
        BluetoothMapFolderElement folder;
        BluetoothMapFolderElement folder;
        notifyUpdateWakeLock();
        try {
        try {
            folderName = (String)request.getHeader(HeaderSet.NAME);
            folderName = (String)request.getHeader(HeaderSet.NAME);
        } catch (Exception e) {
        } catch (Exception e) {
@@ -366,6 +370,7 @@ public class BluetoothMapObexServer extends ServerRequestHandler {


    @Override
    @Override
    public int onGet(Operation op) {
    public int onGet(Operation op) {
        notifyUpdateWakeLock();
        sIsAborted = false;
        sIsAborted = false;
        HeaderSet request;
        HeaderSet request;
        String type;
        String type;
@@ -686,6 +691,11 @@ public class BluetoothMapObexServer extends ServerRequestHandler {
        return ResponseCodes.OBEX_HTTP_OK;
        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) {
    private static final void logHeader(HeaderSet hs) {
        Log.v(TAG, "Dumping HeaderSet " + hs.toString());
        Log.v(TAG, "Dumping HeaderSet " + hs.toString());
+37 −1
Original line number Original line Diff line number Diff line
@@ -97,6 +97,10 @@ public class BluetoothMapService extends ProfileService {


    public static final int MSG_OBEX_AUTH_CHALL = 5003;
    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_PERM = android.Manifest.permission.BLUETOOTH;


    private static final String BLUETOOTH_ADMIN_PERM = android.Manifest.permission.BLUETOOTH_ADMIN;
    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 DISCONNECT_MAP = 3;


    private static final int RELEASE_WAKE_LOCK_DELAY = 10000;

    private PowerManager.WakeLock mWakeLock = null;
    private PowerManager.WakeLock mWakeLock = null;


    private BluetoothAdapter mAdapter;
    private BluetoothAdapter mAdapter;
@@ -289,7 +295,8 @@ public class BluetoothMapService extends ProfileService {
            mWakeLock.acquire();
            mWakeLock.acquire();
        }
        }


        mBluetoothMnsObexClient = new BluetoothMnsObexClient(this, mRemoteDevice);
        mBluetoothMnsObexClient = new BluetoothMnsObexClient(this, mRemoteDevice,
                                                             mSessionStatusHandler);
        mMapServer = new BluetoothMapObexServer(mSessionStatusHandler, this,
        mMapServer = new BluetoothMapObexServer(mSessionStatusHandler, this,
                                                mBluetoothMnsObexClient);
                                                mBluetoothMnsObexClient);
        synchronized (this) {
        synchronized (this) {
@@ -302,6 +309,11 @@ public class BluetoothMapService extends ProfileService {
        BluetoothMapRfcommTransport transport = new BluetoothMapRfcommTransport(mConnSocket);
        BluetoothMapRfcommTransport transport = new BluetoothMapRfcommTransport(mConnSocket);
        mServerSession = new ServerSession(transport, mMapServer, mAuth);
        mServerSession = new ServerSession(transport, mMapServer, mAuth);
        setState(BluetoothMap.STATE_CONNECTED);
        setState(BluetoothMap.STATE_CONNECTED);

        mSessionStatusHandler.removeMessages(MSG_RELEASE_WAKE_LOCK);
        mSessionStatusHandler.sendMessageDelayed(mSessionStatusHandler
            .obtainMessage(MSG_RELEASE_WAKE_LOCK), RELEASE_WAKE_LOCK_DELAY);

        if (VERBOSE) {
        if (VERBOSE) {
            Log.v(TAG, "startObexServerSession() success!");
            Log.v(TAG, "startObexServerSession() success!");
        }
        }
@@ -310,6 +322,9 @@ public class BluetoothMapService extends ProfileService {
    private void stopObexServerSession() {
    private void stopObexServerSession() {
        if (DEBUG) Log.d(TAG, "MAP Service 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
        // Release the wake lock if obex transaction is over
        if (mWakeLock != null) {
        if (mWakeLock != null) {
            mWakeLock.release();
            mWakeLock.release();
@@ -458,6 +473,27 @@ public class BluetoothMapService extends ProfileService {
                case DISCONNECT_MAP:
                case DISCONNECT_MAP:
                    disconnectMap((BluetoothDevice)msg.obj);
                    disconnectMap((BluetoothDevice)msg.obj);
                    break;
                    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:
                default:
                    break;
                    break;
            }
            }
+12 −1
Original line number Original line Diff line number Diff line
@@ -58,6 +58,7 @@ public class BluetoothMnsObexClient {
    private ClientSession mClientSession;
    private ClientSession mClientSession;
    private boolean mConnected = false;
    private boolean mConnected = false;
    BluetoothDevice mRemoteDevice;
    BluetoothDevice mRemoteDevice;
    private Handler mCallback = null;
    private BluetoothMapContentObserver mObserver;
    private BluetoothMapContentObserver mObserver;
    private boolean mObserverRegistered = false;
    private boolean mObserverRegistered = false;


@@ -69,7 +70,8 @@ public class BluetoothMnsObexClient {
            ParcelUuid.fromString("00001133-0000-1000-8000-00805F9B34FB");
            ParcelUuid.fromString("00001133-0000-1000-8000-00805F9B34FB");




    public BluetoothMnsObexClient(Context context, BluetoothDevice remoteDevice) {
    public BluetoothMnsObexClient(Context context, BluetoothDevice remoteDevice,
                                  Handler callback) {
        if (remoteDevice == null) {
        if (remoteDevice == null) {
            throw new NullPointerException("Obex transport is null");
            throw new NullPointerException("Obex transport is null");
        }
        }
@@ -79,6 +81,7 @@ public class BluetoothMnsObexClient {
        mHandler = new MnsObexClientHandler(looper);
        mHandler = new MnsObexClientHandler(looper);
        mContext = context;
        mContext = context;
        mRemoteDevice = remoteDevice;
        mRemoteDevice = remoteDevice;
        mCallback = callback;
        mObserver = new BluetoothMapContentObserver(mContext);
        mObserver = new BluetoothMapContentObserver(mContext);
        mObserver.init();
        mObserver.init();
    }
    }
@@ -268,6 +271,8 @@ public class BluetoothMnsObexClient {
            return responseCode;
            return responseCode;
        }
        }


        notifyUpdateWakeLock();

        request = new HeaderSet();
        request = new HeaderSet();
        BluetoothMapAppParams appParams = new BluetoothMapAppParams();
        BluetoothMapAppParams appParams = new BluetoothMapAppParams();
        appParams.setMasInstanceId(masInstanceId);
        appParams.setMasInstanceId(masInstanceId);
@@ -368,4 +373,10 @@ public class BluetoothMnsObexClient {
    private void handleSendException(String exception) {
    private void handleSendException(String exception) {
        Log.e(TAG, "Error when sending event: " + 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();
    }
}
}