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

Commit d595be9b authored by Juffin Alex Varghese's avatar Juffin Alex Varghese Committed by Gerrit - the friendly Code Review server
Browse files

Bluetooth-OPP: Read share count from OPP manager before transfer starts

This change will ensure that all the selected files in the batch will
be transfered properly. Otherwise, if actual file count is not used
before transfer start then client session will be disconnected after
reaching the count value that is send during session start and remaining
files will be ignored.

Also added pending update flags for any contentresolver changes so that
transfer status can be properly updated.

CRs-Fixed: 785276
Change-Id: Ia9f9d8a953614b2e0945ca9cfbd2ce026dd40e26
parent bb5835ad
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -109,7 +109,7 @@ public class BluetoothOppManager {

    public boolean mMultipleFlag;

    private int mfileNumInBatch;
    private int mfileNumInBatch = 1;

    private int mInsertShareThreadNum = 0;

+14 −7
Original line number Diff line number Diff line
@@ -109,10 +109,11 @@ class BluetoothOppNotification {

    private static final int NOTIFICATION_ID_INBOUND = -1000006;

    private boolean mPendingUpdate = true;
    private boolean mOutboundUpdateCompleteNotification = true;
    private boolean mInboundUpdateCompleteNotification = true;

    private int confirmation = 0;
    private int mConfirmation = 0;
    private int mInboundActiveNotificationId = 0;
    private int mOutboundActiveNotificationId = 0;
    private int mRunning = 0;
@@ -158,7 +159,9 @@ class BluetoothOppNotification {
     * Update the notification ui.
     */
    public void updateNotification() {
        if (V) Log.v(TAG, "Updating the notification");
        synchronized (BluetoothOppNotification.this) {
            mPendingUpdate = true;
            if (mUpdateNotificationThread == null) {
                if (V) Log.v(TAG, "new notify thread!!!");
                mUpdateNotificationThread = new NotificationUpdateThread();
@@ -203,6 +206,7 @@ class BluetoothOppNotification {
                        throw new IllegalStateException(
                                "multiple UpdateThreads in BluetoothOppNotification");
                    }
                mPendingUpdate = false;
                }

                updateActiveNotification();
@@ -210,7 +214,7 @@ class BluetoothOppNotification {
                updateIncomingFileConfirmNotification();

                try {
                    if ((confirmation == BluetoothShare.USER_CONFIRMATION_HANDOVER_CONFIRMED)
                    if ((mConfirmation == BluetoothShare.USER_CONFIRMATION_HANDOVER_CONFIRMED)
                            || mPowerManager.isScreenOn()) {
                        Thread.sleep(BluetoothShare.UI_UPDATE_INTERVAL);
                    }
@@ -219,9 +223,12 @@ class BluetoothOppNotification {
                    return;
                }

                if (V) Log.v(TAG, "Running = " + mRunning);
            } while ((mRunning > 0) && (mPowerManager.isScreenOn()
                    || (confirmation == BluetoothShare.USER_CONFIRMATION_HANDOVER_CONFIRMED)));
                if (V) {
                    Log.v(TAG, "Running = " + mRunning + " Pending notification is "
                        + mPendingUpdate);
                }
            } while ((mPendingUpdate || (mRunning > 0)) && (mPowerManager.isScreenOn()
                    || (mConfirmation == BluetoothShare.USER_CONFIRMATION_HANDOVER_CONFIRMED)));

            synchronized (BluetoothOppNotification.this) {
                mUpdateNotificationThread = null;
@@ -314,7 +321,7 @@ class BluetoothOppNotification {
                int id = cursor.getInt(idIndex);
                long total = cursor.getLong(totalBytesIndex);
                long current = cursor.getLong(currentBytesIndex);
                confirmation = cursor.getInt(confirmIndex);
                mConfirmation = cursor.getInt(confirmIndex);

                String destination = cursor.getString(destinationIndex);
                String fileName = cursor.getString(dataIndex);
@@ -347,7 +354,7 @@ class BluetoothOppNotification {
                    item.totalCurrent = current;
                    item.totalTotal = total;
                    item.handoverInitiated =
                        confirmation == BluetoothShare.USER_CONFIRMATION_HANDOVER_CONFIRMED;
                        mConfirmation == BluetoothShare.USER_CONFIRMATION_HANDOVER_CONFIRMED;
                    item.destination = destination;
                    mNotifications.put(batchID, item);

+9 −3
Original line number Diff line number Diff line
@@ -96,6 +96,8 @@ public class BluetoothOppService extends Service {
    /** Class to handle Notification Manager updates */
    private BluetoothOppNotification mNotifier;

    private boolean mPendingUpdate = true;

    private UpdateThread mUpdateThread;

    private ArrayList<BluetoothOppShareInfo> mShares;
@@ -448,7 +450,9 @@ public class BluetoothOppService extends Service {
    };

    private void updateFromProvider() {
        if (V) Log.v(TAG, "Updating the provider");
        synchronized (BluetoothOppService.this) {
            mPendingUpdate = true;
            if ((mUpdateThread == null) && (mAdapter != null)
                && mAdapter.isEnabled()) {
                if (V) Log.v(TAG, "Starting a new thread");
@@ -477,6 +481,7 @@ public class BluetoothOppService extends Service {
                    }
                    if (V) Log.v(TAG, "keepUpdateThread is " + keepService + " sListenStarted is "
                            + mListenStarted);
                    mPendingUpdate = false;
                }
                Cursor cursor;
                try {
@@ -627,15 +632,16 @@ public class BluetoothOppService extends Service {
                }

                try {
                    if (((mServerSession != null) || (mTransfer != null))
                            && mPowerManager.isScreenOn()) {
                    if (mPowerManager.isScreenOn()) {
                        Thread.sleep(BluetoothShare.UI_UPDATE_INTERVAL);
                    }
                } catch (InterruptedException e) {
                    if (V) Log.v(TAG, "OppService Thread sleep is interrupted (1), exiting");
                    return;
                }
            } while (mPowerManager.isScreenOn() && ((mServerSession != null) || (mTransfer != null)));

                if(V) Log.v(TAG, "PendingUpdate is " + mPendingUpdate);
            } while (mPendingUpdate);

            synchronized (BluetoothOppService.this) {
                mUpdateThread = null;
+6 −1
Original line number Diff line number Diff line
@@ -475,6 +475,7 @@ public class BluetoothOppTransfer implements BluetoothOppBatch.BluetoothOppBatch
    private void startObexSession() {

        mBatch.mStatus = Constants.BATCH_STATUS_RUNNING;
        BluetoothOppManager mOppManager = BluetoothOppManager.getInstance(mContext);

        mCurrentShare = mBatch.getPendingShare();
        if (mCurrentShare == null) {
@@ -507,7 +508,11 @@ public class BluetoothOppTransfer implements BluetoothOppBatch.BluetoothOppBatch
        }

        if (mSession != null) {
            mSession.start(mSessionHandler, mBatch.getNumShares());
            /* Read the number of files are sharing from OPP Manager instead of getting
             * the number of files from Batch before OBEX session start.
             */
            if (V) Log.v(TAG, "Sharing files = " + mOppManager.getBatchSize());
            mSession.start(mSessionHandler, mOppManager.getBatchSize());
            processCurrentShare();
        }