Merge "Show the default wallpaper if downloading video fails."
diff --git a/src/com/android/retaildemo/DownloadVideoTask.java b/src/com/android/retaildemo/DownloadVideoTask.java
index d7133a6..9170b1e 100644
--- a/src/com/android/retaildemo/DownloadVideoTask.java
+++ b/src/com/android/retaildemo/DownloadVideoTask.java
@@ -138,8 +138,19 @@
final long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
if (id == mVideoDownloadId) {
- if (checkDownloadsAndSetVideo(id) && mProgressDialog != null) {
- mProgressDialog.dismiss();
+ final int status = checkDownloadsAndSetVideo(id);
+ if (status == DownloadManager.STATUS_SUCCESSFUL ||
+ status == DownloadManager.STATUS_FAILED) {
+ if (mProgressDialog != null) {
+ mProgressDialog.dismiss();
+ }
+ if (mDownloadReceiver != null) {
+ mContext.unregisterReceiver(mDownloadReceiver);
+ mDownloadReceiver = null;
+ }
+ if (status == DownloadManager.STATUS_FAILED) {
+ mListener.onError();
+ }
}
} else if (id == mVideoUpdateDownloadId) {
mHandler.sendMessage(mHandler.obtainMessage(MSG_DOWNLOAD_COMPLETE));
@@ -211,18 +222,15 @@
}
}
- private boolean checkDownloadsAndSetVideo(long downloadId) {
+ private int checkDownloadsAndSetVideo(long downloadId) {
final DownloadManager.Query query =
new DownloadManager.Query().setFilterById(downloadId);
Cursor cursor = mDlm.query(query);
try {
if (cursor != null & cursor.moveToFirst()) {
final int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
- if (cursor.getInt(columnIndex) == DownloadManager.STATUS_SUCCESSFUL) {
- if (mDownloadReceiver != null) {
- mContext.unregisterReceiver(mDownloadReceiver);
- mDownloadReceiver = null;
- }
+ final int status = cursor.getInt(columnIndex);
+ if (status == DownloadManager.STATUS_SUCCESSFUL) {
final String fileUri = cursor.getString(
cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));
mDownloadedPath = Uri.parse(fileUri).getPath();
@@ -230,8 +238,8 @@
mListener.onFileDownloaded(mDownloadedPath);
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_CLEANUP_DOWNLOAD_DIR),
CLEANUP_DELAY_MILLIS);
- return true;
}
+ return status;
}
} finally {
if (cursor != null) {
@@ -242,7 +250,7 @@
mNetworkChangeReceiver = null;
}
}
- return false;
+ return -1;
}
private class NetworkChangeReceiver extends BroadcastReceiver {
diff --git a/tests/src/com/android/retaildemo/DownloadVideoTaskTest.java b/tests/src/com/android/retaildemo/DownloadVideoTaskTest.java
index 67c5244..6684173 100644
--- a/tests/src/com/android/retaildemo/DownloadVideoTaskTest.java
+++ b/tests/src/com/android/retaildemo/DownloadVideoTaskTest.java
@@ -181,6 +181,35 @@
}
@Test
+ public void testDownloadVideo_downloadFailed() throws Exception {
+ final DownloadVideoTask task = new DownloadVideoTask(mContext,
+ mDownloadPath, mPreloadedVideo, mResultListener, new TestInjector(mContext));
+ when(mDownloadManager.enqueue(any(DownloadManager.Request.class)))
+ .thenReturn(TEST_DOWNLOAD_ID);
+
+ task.run();
+
+ final ArgumentCaptor<BroadcastReceiver> downloadReceiver =
+ verifyIfDownloadCompleteReceiverRegistered();
+
+ verify(mProgressDialog, times(1)).show();
+
+ final Cursor cursor = createCursor(DownloadManager.STATUS_FAILED, mDownloadPath);
+ when(mDownloadManager.query(any(DownloadManager.Query.class))).thenReturn(cursor);
+
+ final Intent downloadCompleteIntent = new Intent(DownloadManager.ACTION_DOWNLOAD_COMPLETE)
+ .putExtra(DownloadManager.EXTRA_DOWNLOAD_ID, TEST_DOWNLOAD_ID);
+ downloadReceiver.getValue().onReceive(mContext, downloadCompleteIntent);
+
+ verify(mContext).unregisterReceiver(downloadReceiver.getValue());
+
+ verify(mResultListener, times(1)).onError();
+ verifyNoMoreInteractions(mResultListener);
+
+ verify(mProgressDialog, times(1)).dismiss();
+ }
+
+ @Test
public void testDownloadUpdatedVideo() throws Exception {
new File(mDownloadPath).createNewFile();