]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - src/com/hughes/android/dictionary/DictionaryManagerActivity.java
Refine check for failed download manager query.
[Dictionary.git] / src / com / hughes / android / dictionary / DictionaryManagerActivity.java
index 6c701cea0ddd4babbb7d9ad5717b1e20eef80bd8..dacc6d75cd2c806fc72317d2c96b78cec0a9731c 100644 (file)
@@ -131,7 +131,7 @@ public class DictionaryManagerActivity extends ActionBarActivity {
                 final DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                 final Cursor cursor = downloadManager.query(query);
 
-                if (!cursor.moveToFirst()) {
+                if (cursor == null || !cursor.moveToFirst()) {
                     Log.e(LOG, "Couldn't find download.");
                     return;
                 }
@@ -616,6 +616,16 @@ public class DictionaryManagerActivity extends ActionBarActivity {
         final DownloadManager.Query query = new DownloadManager.Query();
         query.setFilterByStatus(DownloadManager.STATUS_PAUSED | DownloadManager.STATUS_PENDING | DownloadManager.STATUS_RUNNING);
         final Cursor cursor = downloadManager.query(query);
+
+        // Due to a bug, cursor is null instead of empty when
+        // the download manager is disabled.
+        if (cursor == null) {
+            new AlertDialog.Builder(DictionaryManagerActivity.this).setTitle(getString(R.string.error))
+                    .setMessage(getString(R.string.downloadFailed, R.string.downloadManagerQueryFailed))
+                    .setNeutralButton("Close", null).show();
+            return;
+        }
+
         while (cursor.moveToNext()) {
             if (downloadUrl.equals(cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_URI))))
                 break;
@@ -637,7 +647,12 @@ public class DictionaryManagerActivity extends ActionBarActivity {
                     .getName();
             Log.d(LOG, "Downloading to: " + destFile);
 
-            request.setDestinationInExternalFilesDir(getApplicationContext(), null, destFile);
+            try {
+                request.setDestinationInExternalFilesDir(getApplicationContext(), null, destFile);
+            } catch (IllegalStateException e) {
+                request.setDestinationUri(Uri.fromFile(new File(Environment
+                        .getExternalStorageDirectory(), destFile)));
+            }
         } catch (MalformedURLException e) {
             throw new RuntimeException(e);
         }