Skip to content

Commit 6f222ee

Browse files
authored
Fix: Ensure initial TransferState is reported on setting TransferListener (#2930)
* fix: ensure initial status is reported on setting transfer listener * accidental comment out
1 parent 2c19aa3 commit 6f222ee

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

aws-android-sdk-s3/src/main/java/com/amazonaws/mobileconnectors/s3/transferutility/TransferObserver.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -154,18 +154,22 @@ protected void updateFromDB(Cursor c) {
154154
* @param listener A TransferListener used to receive notification.
155155
*/
156156
public void setTransferListener(TransferListener listener) {
157-
if (listener != null) {
158157
synchronized (this) {
159158
// Remove previous listener.
160159
cleanTransferListener();
161160

162161
// One additional listener is attached so that the basic transfer
163162
// info gets updated along side.
164-
statusListener = new TransferStatusListener();
165-
TransferStatusUpdater.registerListener(id, statusListener);
166-
transferListener = listener;
167-
TransferStatusUpdater.registerListener(id, transferListener);
168-
}
163+
if (statusListener == null) {
164+
statusListener = new TransferStatusListener();
165+
TransferStatusUpdater.registerListener(id, statusListener);
166+
}
167+
168+
if (listener != null) {
169+
transferListener = listener;
170+
transferListener.onStateChanged(id, transferState);
171+
TransferStatusUpdater.registerListener(id, transferListener);
172+
}
169173
}
170174
}
171175

@@ -251,7 +255,7 @@ public void cleanTransferListener() {
251255
/**
252256
* A listener that can update the {@link TransferObserver}.
253257
*/
254-
private class TransferStatusListener implements TransferListener {
258+
protected class TransferStatusListener implements TransferListener {
255259

256260
@Override
257261
@SuppressWarnings("checkstyle:hiddenfield")

aws-android-sdk-s3/src/main/java/com/amazonaws/mobileconnectors/s3/transferutility/TransferStatusUpdater.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -218,12 +218,18 @@ synchronized void updateState(final int id, final TransferState newState) {
218218

219219
// invoke TransferListener callback on main thread
220220
for (final TransferListener l : list) {
221-
mainHandler.post(new Runnable() {
222-
@Override
223-
public void run() {
224-
l.onStateChanged(id, newState);
225-
}
226-
});
221+
// If instance is TransferStatusListener, post immediately.
222+
// Posting to main thread can cause a missed status.
223+
if (l instanceof TransferObserver.TransferStatusListener) {
224+
l.onStateChanged(id, newState);
225+
} else {
226+
mainHandler.post(new Runnable() {
227+
@Override
228+
public void run() {
229+
l.onStateChanged(id, newState);
230+
}
231+
});
232+
}
227233
}
228234

229235
// remove all LISTENERS when the transfer is in a final state so

0 commit comments

Comments
 (0)