Merge "Ensure that the copy notification is always cancelable." into mnc-dev

This commit is contained in:
Ben Kwa
2015-05-27 21:18:23 +00:00
committed by Android (Google) Code Review

View File

@@ -173,8 +173,6 @@ public class CopyService extends IntentService {
.setAutoCancel(true);
mNotificationManager.notify(mJobId, 0, errorBuilder.build());
}
// TODO: Display a toast if the copy was cancelled.
}
}
@@ -306,13 +304,15 @@ public class CopyService extends IntentService {
private void handleCancel(Intent intent) {
final String cancelledId = intent.getStringExtra(EXTRA_CANCEL);
// Do nothing if the cancelled ID doesn't match the current job ID. This prevents racey
// cancellation requests from affecting unrelated copy jobs.
if (Objects.equals(mJobId, cancelledId)) {
// cancellation requests from affecting unrelated copy jobs. However, if the current job ID
// is null, the service most likely crashed and was revived by the incoming cancel intent.
// In that case, always allow the cancellation to proceed.
if (Objects.equals(mJobId, cancelledId) || mJobId == null) {
// Set the cancel flag. This causes the copy loops to exit.
mIsCancelled = true;
// Dismiss the progress notification here rather than in the copy loop. This preserves
// interactivity for the user in case the copy loop is stalled.
mNotificationManager.cancel(mJobId, 0);
mNotificationManager.cancel(cancelledId, 0);
}
}