summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJuffin Alex Varghese <jalex@codeaurora.org>2015-01-13 15:39:02 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2015-02-19 21:39:02 -0800
commitd595be9b728f2f9157619cffd7aa3a2ab7a1ab1b (patch)
tree67c6334c408c8088297d0489686bac16de170e12 /src
parentbb5835ad23b6357bb98848a481c971cc169739a9 (diff)
downloadandroid_packages_apps_Bluetooth-d595be9b728f2f9157619cffd7aa3a2ab7a1ab1b.tar.gz
android_packages_apps_Bluetooth-d595be9b728f2f9157619cffd7aa3a2ab7a1ab1b.tar.bz2
android_packages_apps_Bluetooth-d595be9b728f2f9157619cffd7aa3a2ab7a1ab1b.zip
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
Diffstat (limited to 'src')
-rw-r--r--src/com/android/bluetooth/opp/BluetoothOppManager.java2
-rw-r--r--src/com/android/bluetooth/opp/BluetoothOppNotification.java21
-rw-r--r--src/com/android/bluetooth/opp/BluetoothOppService.java12
-rw-r--r--src/com/android/bluetooth/opp/BluetoothOppTransfer.java7
4 files changed, 30 insertions, 12 deletions
diff --git a/src/com/android/bluetooth/opp/BluetoothOppManager.java b/src/com/android/bluetooth/opp/BluetoothOppManager.java
index 44ea6a93f..29c4500f9 100644
--- a/src/com/android/bluetooth/opp/BluetoothOppManager.java
+++ b/src/com/android/bluetooth/opp/BluetoothOppManager.java
@@ -109,7 +109,7 @@ public class BluetoothOppManager {
public boolean mMultipleFlag;
- private int mfileNumInBatch;
+ private int mfileNumInBatch = 1;
private int mInsertShareThreadNum = 0;
diff --git a/src/com/android/bluetooth/opp/BluetoothOppNotification.java b/src/com/android/bluetooth/opp/BluetoothOppNotification.java
index 161cd576f..adfeeb68a 100644
--- a/src/com/android/bluetooth/opp/BluetoothOppNotification.java
+++ b/src/com/android/bluetooth/opp/BluetoothOppNotification.java
@@ -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);
diff --git a/src/com/android/bluetooth/opp/BluetoothOppService.java b/src/com/android/bluetooth/opp/BluetoothOppService.java
index c6fb79ad2..7306f9ca0 100644
--- a/src/com/android/bluetooth/opp/BluetoothOppService.java
+++ b/src/com/android/bluetooth/opp/BluetoothOppService.java
@@ -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;
diff --git a/src/com/android/bluetooth/opp/BluetoothOppTransfer.java b/src/com/android/bluetooth/opp/BluetoothOppTransfer.java
index acdd188de..9f8a71d86 100644
--- a/src/com/android/bluetooth/opp/BluetoothOppTransfer.java
+++ b/src/com/android/bluetooth/opp/BluetoothOppTransfer.java
@@ -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();
}