Switch to AppCompatDialogFragment for dialogs that return values due to crashes in...
authorSoren Stoutner <soren@stoutner.com>
Sun, 23 Oct 2016 03:09:18 +0000 (20:09 -0700)
committerSoren Stoutner <soren@stoutner.com>
Sun, 23 Oct 2016 03:09:18 +0000 (20:09 -0700)
app/src/main/java/com/stoutner/privacybrowser/BookmarksActivity.java
app/src/main/java/com/stoutner/privacybrowser/CreateBookmark.java
app/src/main/java/com/stoutner/privacybrowser/CreateBookmarkFolder.java
app/src/main/java/com/stoutner/privacybrowser/CreateHomeScreenShortcut.java
app/src/main/java/com/stoutner/privacybrowser/DownloadFile.java
app/src/main/java/com/stoutner/privacybrowser/EditBookmark.java
app/src/main/java/com/stoutner/privacybrowser/EditBookmarkFolder.java
app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java
app/src/main/java/com/stoutner/privacybrowser/MoveToFolder.java

index 65d1cfddb7e9110b515bc4786fc4e9d7b90c40d7..3941e634acaf030f3999423669c948e251227c20 100644 (file)
@@ -20,7 +20,6 @@
 package com.stoutner.privacybrowser;
 
 import android.app.Activity;
-import android.app.DialogFragment;
 import android.content.Context;
 import android.content.Intent;
 import android.database.Cursor;
@@ -35,6 +34,7 @@ import android.support.design.widget.Snackbar;
 import android.support.v4.app.NavUtils;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.AppCompatActivity;
+import android.support.v7.app.AppCompatDialogFragment;
 import android.support.v7.widget.Toolbar;
 import android.util.SparseBooleanArray;
 import android.view.ActionMode;
@@ -345,8 +345,8 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
                         checkedItemIds = bookmarksListView.getCheckedItemIds();
 
                         // Show the `MoveToFolder` `AlertDialog` and name the instance `@string/move_to_folder
-                        DialogFragment moveToFolderDialog = new MoveToFolder();
-                        moveToFolderDialog.show(getFragmentManager(), getResources().getString(R.string.move_to_folder));
+                        AppCompatDialogFragment moveToFolderDialog = new MoveToFolder();
+                        moveToFolderDialog.show(getSupportFragmentManager(), getResources().getString(R.string.move_to_folder));
                         break;
 
                     case R.id.edit_bookmark:
@@ -370,12 +370,12 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
                             oldFolderNameString = bookmarksCursor.getString(bookmarksCursor.getColumnIndex(BookmarksDatabaseHandler.BOOKMARK_NAME));
 
                             // Show the `EditBookmarkFolder` `AlertDialog` and name the instance `@string/edit_folder`.
-                            DialogFragment editFolderDialog = new EditBookmarkFolder();
-                            editFolderDialog.show(getFragmentManager(), getResources().getString(R.string.edit_folder));
+                            AppCompatDialogFragment editFolderDialog = new EditBookmarkFolder();
+                            editFolderDialog.show(getSupportFragmentManager(), getResources().getString(R.string.edit_folder));
                         } else {
                             // Show the `EditBookmark` `AlertDialog` and name the instance `@string/edit_bookmark`.
-                            DialogFragment editBookmarkDialog = new EditBookmark();
-                            editBookmarkDialog.show(getFragmentManager(), getResources().getString(R.string.edit_bookmark));
+                            AppCompatDialogFragment editBookmarkDialog = new EditBookmark();
+                            editBookmarkDialog.show(getSupportFragmentManager(), getResources().getString(R.string.edit_bookmark));
                         }
                         break;
 
@@ -488,8 +488,8 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
             @Override
             public void onClick(View view) {
                 // Show the `CreateBookmark` `AlertDialog` and name the instance `@string/create_bookmark`.
-                DialogFragment createBookmarkDialog = new CreateBookmark();
-                createBookmarkDialog.show(getFragmentManager(), getResources().getString(R.string.create_bookmark));
+                AppCompatDialogFragment createBookmarkDialog = new CreateBookmark();
+                createBookmarkDialog.show(getSupportFragmentManager(), getResources().getString(R.string.create_bookmark));
             }
         });
     }
@@ -528,8 +528,8 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
 
             case R.id.create_folder:
                 // Show the `CreateBookmarkFolder` `AlertDialog` and name the instance `@string/create_folder`.
-                DialogFragment createBookmarkFolderDialog = new CreateBookmarkFolder();
-                createBookmarkFolderDialog.show(getFragmentManager(), getResources().getString(R.string.create_folder));
+                AppCompatDialogFragment createBookmarkFolderDialog = new CreateBookmarkFolder();
+                createBookmarkFolderDialog.show(getSupportFragmentManager(), getResources().getString(R.string.create_folder));
                 break;
 
             case R.id.options_menu_select_all_bookmarks:
@@ -550,7 +550,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
     }
 
     @Override
-    public void onCreateBookmark(DialogFragment dialogFragment) {
+    public void onCreateBookmark(AppCompatDialogFragment dialogFragment) {
         // Get the `EditText`s from the `createBookmarkDialogFragment` and extract the strings.
         EditText createBookmarkNameEditText = (EditText) dialogFragment.getDialog().findViewById(R.id.create_bookmark_name_edittext);
         String bookmarkNameString = createBookmarkNameEditText.getText().toString();
@@ -575,7 +575,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
     }
 
     @Override
-    public void onCreateBookmarkFolder(DialogFragment dialogFragment) {
+    public void onCreateBookmarkFolder(AppCompatDialogFragment dialogFragment) {
         // Get `create_folder_name_edit_text` and extract the string.
         EditText createFolderNameEditText = (EditText) dialogFragment.getDialog().findViewById(R.id.create_folder_name_edittext);
         String folderNameString = createFolderNameEditText.getText().toString();
@@ -621,7 +621,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
     }
 
     @Override
-    public void onSaveEditBookmark(DialogFragment dialogFragment) {
+    public void onSaveEditBookmark(AppCompatDialogFragment dialogFragment) {
         // Get a long array with the the databaseId of the selected bookmark and convert it to an `int`.
         long[] selectedBookmarksLongArray = bookmarksListView.getCheckedItemIds();
         int selectedBookmarkDatabaseId = (int) selectedBookmarksLongArray[0];
@@ -655,7 +655,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
     }
 
     @Override
-    public void onSaveEditBookmarkFolder(DialogFragment dialogFragment) {
+    public void onSaveEditBookmarkFolder(AppCompatDialogFragment dialogFragment) {
         // Get the new folder name.
         EditText editFolderNameEditText = (EditText) dialogFragment.getDialog().findViewById(R.id.edit_folder_name_edittext);
         String newFolderNameString = editFolderNameEditText.getText().toString();
@@ -717,7 +717,7 @@ public class BookmarksActivity extends AppCompatActivity implements CreateBookma
     }
 
     @Override
-    public void onMoveToFolder(DialogFragment dialogFragment) {
+    public void onMoveToFolder(AppCompatDialogFragment dialogFragment) {
         // Get the new folder database id.
         ListView folderListView = (ListView) dialogFragment.getDialog().findViewById(R.id.move_to_folder_listview);
         long[] newFolderLongArray = folderListView.getCheckedItemIds();
index 8aa5dbcef912a6d45557376f7d15c5a521e59221..8bd0930aea50131bd6b37e71074bcf8bc308ef4f 100644 (file)
@@ -21,23 +21,25 @@ package com.stoutner.privacybrowser;
 
 import android.annotation.SuppressLint;
 import android.app.Dialog;
-import android.app.DialogFragment;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 // If we don't use `android.support.v7.app.AlertDialog` instead of `android.app.AlertDialog` then the dialog will be covered by the keyboard.
 import android.support.v7.app.AlertDialog;
+// We have to use `AppCompatDialogFragment` instead of `DialogFragment` or an error is produced on API <=22.
+import android.support.v7.app.AppCompatDialogFragment;
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.WindowManager;
 import android.widget.EditText;
 
-public class CreateBookmark extends DialogFragment {
+public class CreateBookmark extends AppCompatDialogFragment {
     // The public interface is used to send information back to the parent activity.
     public interface CreateBookmarkListener {
-        void onCreateBookmark(DialogFragment dialogFragment);
+        void onCreateBookmark(AppCompatDialogFragment dialogFragment);
     }
 
     // `createBookmarkListener` is used in `onAttach()` and `onCreateDialog()`
@@ -58,6 +60,7 @@ public class CreateBookmark extends DialogFragment {
     // `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`.
     @SuppressLint("InflateParams")
     @Override
+    @NonNull
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         // Create a drawable version of the favorite icon.
         Drawable favoriteIconDrawable = new BitmapDrawable(getResources(), MainWebViewActivity.favoriteIcon);
index 7374104756f2f09dbf935be9c070278acea6f6d0..46d2ed96cbb4c2fe8257f6bde0cd997b5cc33611 100644 (file)
@@ -21,22 +21,24 @@ package com.stoutner.privacybrowser;
 
 import android.annotation.SuppressLint;
 import android.app.Dialog;
-import android.app.DialogFragment;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 // If we don't use `android.support.v7.app.AlertDialog` instead of `android.app.AlertDialog` then the dialog will be covered by the keyboard.
 import android.support.v7.app.AlertDialog;
+// We have to use `AppCompatDialogFragment` instead of `DialogFragment` or an error is produced on API <=22.
+import android.support.v7.app.AppCompatDialogFragment;
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.WindowManager;
 import android.widget.EditText;
 import android.widget.ImageView;
 
-public class CreateBookmarkFolder extends DialogFragment {
+public class CreateBookmarkFolder extends AppCompatDialogFragment {
     // The public interface is used to send information back to the parent activity.
     public interface CreateBookmarkFolderListener {
-        void onCreateBookmarkFolder(DialogFragment dialogFragment);
+        void onCreateBookmarkFolder(AppCompatDialogFragment dialogFragment);
     }
 
     // `createBookmarkFolderListener` is used in `onAttach()` and `onCreateDialog`.
@@ -56,6 +58,7 @@ public class CreateBookmarkFolder extends DialogFragment {
     // `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`.
     @SuppressLint("InflateParams")
     @Override
+    @NonNull
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         // Use `AlertDialog.Builder` to create the `AlertDialog`.  The style formats the color of the button text.
         final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity(), R.style.LightAlertDialog);
index 9f47d4654ec90a56109bcdcc6b3a9a52b56ca312..6159f8da141f8cc5a3257e52a3c4c2ba6e82ac55 100644 (file)
@@ -21,24 +21,26 @@ package com.stoutner.privacybrowser;
 
 import android.annotation.SuppressLint;
 import android.app.Dialog;
-import android.app.DialogFragment;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 // If we don't use android.support.v7.app.AlertDialog instead of android.app.AlertDialog then the dialog will be covered by the keyboard.
 import android.support.v7.app.AlertDialog;
+// We have to use `AppCompatDialogFragment` instead of `DialogFragment` or an error is produced on API <=22.
+import android.support.v7.app.AppCompatDialogFragment;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.WindowManager;
 import android.widget.EditText;
 
-public class CreateHomeScreenShortcut extends DialogFragment {
+public class CreateHomeScreenShortcut extends AppCompatDialogFragment {
     // The public interface is used to send information back to the parent activity.
     public interface CreateHomeScreenSchortcutListener {
-        void onCreateHomeScreenShortcut(DialogFragment dialogFragment);
+        void onCreateHomeScreenShortcut(AppCompatDialogFragment dialogFragment);
     }
 
     //`createHomeScreenShortcutListener` is used in `onAttach()` and `onCreateDialog()`.
@@ -57,6 +59,7 @@ public class CreateHomeScreenShortcut extends DialogFragment {
     // `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`.
     @SuppressLint("InflateParams")
     @Override
+    @NonNull
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         // Get the activity's layout inflater.
         LayoutInflater layoutInflater = getActivity().getLayoutInflater();
index 0a1d1dcab81a713c2a0b7f090f85f109453867e6..1a3b76dae267abaaf7b1deb034e18c4c19aeca66 100644 (file)
@@ -21,13 +21,15 @@ package com.stoutner.privacybrowser;
 
 import android.annotation.SuppressLint;
 import android.app.Dialog;
-import android.app.DialogFragment;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.net.Uri;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 // `android.support.v7.app.AlertDialog` uses more of the horizontal screen real estate versus `android.app.AlertDialog's` smaller width.
 import android.support.v7.app.AlertDialog;
+// We have to use `AppCompatDialogFragment` instead of `DialogFragment` or an error is produced on API <=22.
+import android.support.v7.app.AppCompatDialogFragment;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -37,7 +39,7 @@ import android.widget.TextView;
 
 import java.util.Locale;
 
-public class DownloadFile extends DialogFragment {
+public class DownloadFile extends AppCompatDialogFragment {
 
     private String downloadUrl;
     private String downloadFileName;
@@ -87,7 +89,7 @@ public class DownloadFile extends DialogFragment {
 
     // The public interface is used to send information back to the parent activity.
     public interface DownloadFileListener {
-        void onDownloadFile(DialogFragment dialogFragment, String downloadUrl);
+        void onDownloadFile(AppCompatDialogFragment dialogFragment, String downloadUrl);
     }
 
     // `downloadFileListener` is used in `onAttach()` and `onCreateDialog()`.
@@ -107,6 +109,7 @@ public class DownloadFile extends DialogFragment {
     // `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`.
     @SuppressLint("InflateParams")
     @Override
+    @NonNull
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         // Get the activity's layout inflater.
         LayoutInflater layoutInflater = getActivity().getLayoutInflater();
index e42fc0e38ec88986f26a6b7cd03833a9546a853b..3ce8204dbf5d53118c0c3795cb1165d9ae493b38 100644 (file)
@@ -21,7 +21,6 @@ package com.stoutner.privacybrowser;
 
 import android.annotation.SuppressLint;
 import android.app.Dialog;
-import android.app.DialogFragment;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.database.Cursor;
@@ -29,17 +28,20 @@ import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.os.Bundle;
 // If we don't use `android.support.v7.app.AlertDialog` instead of `android.app.AlertDialog` then the dialog will be covered by the keyboard.
+import android.support.annotation.NonNull;
 import android.support.v7.app.AlertDialog;
+// We have to use `AppCompatDialogFragment` instead of `DialogFragment` or an error is produced on API <=22.
+import android.support.v7.app.AppCompatDialogFragment;
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.WindowManager;
 import android.widget.EditText;
 import android.widget.ImageView;
 
-public class EditBookmark extends DialogFragment {
+public class EditBookmark extends AppCompatDialogFragment {
     // The public interface is used to send information back to the parent activity.
     public interface EditBookmarkListener {
-        void onSaveEditBookmark(DialogFragment dialogFragment);
+        void onSaveEditBookmark(AppCompatDialogFragment dialogFragment);
     }
 
     // `editBookmarkListener` is used in `onAttach()` and `onCreateDialog()`
@@ -59,6 +61,7 @@ public class EditBookmark extends DialogFragment {
     // `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`.
     @SuppressLint("InflateParams")
     @Override
+    @NonNull
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         // Get a long array with the the databaseId of the selected bookmark and convert it to an `int`.
         long[] selectedBookmarkLongArray = BookmarksActivity.checkedItemIds;
index 218023fd9dff1a15d7f8122f3fb136eab3af7afa..c04012b9c960504a556c68d9f5bae027ee45df64 100644 (file)
@@ -21,25 +21,27 @@ package com.stoutner.privacybrowser;
 
 import android.annotation.SuppressLint;
 import android.app.Dialog;
-import android.app.DialogFragment;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 // If we don't use `android.support.v7.app.AlertDialog` instead of `android.app.AlertDialog` then the dialog will be covered by the keyboard.
 import android.support.v7.app.AlertDialog;
+// We have to use `AppCompatDialogFragment` instead of `DialogFragment` or an error is produced on API <=22.
+import android.support.v7.app.AppCompatDialogFragment;
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.WindowManager;
 import android.widget.EditText;
 import android.widget.ImageView;
 
-public class EditBookmarkFolder extends DialogFragment {
+public class EditBookmarkFolder extends AppCompatDialogFragment {
     // The public interface is used to send information back to the parent activity.
     public interface EditBookmarkFolderListener {
-        void onSaveEditBookmarkFolder(DialogFragment dialogFragment);
+        void onSaveEditBookmarkFolder(AppCompatDialogFragment dialogFragment);
     }
 
     // `editFolderListener` is used in `onAttach()` and `onCreateDialog`.
@@ -59,6 +61,7 @@ public class EditBookmarkFolder extends DialogFragment {
     // `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`.
     @SuppressLint("InflateParams")
     @Override
+    @NonNull
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         // Get a long array with the the databaseId of the selected bookmark and convert it to an `int`.
         long[] selectedBookmarkLongArray = BookmarksActivity.checkedItemIds;
index 7872677dcceaa4f9c83eb532584bd4dd0b63a191..2a2e14f0cbe684707adef078ee8b6731197ae0fd 100644 (file)
@@ -49,6 +49,7 @@ import android.support.v4.widget.SwipeRefreshLayout;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.ActionBarDrawerToggle;
 import android.support.v7.app.AppCompatActivity;
+import android.support.v7.app.AppCompatDialogFragment;
 import android.support.v7.widget.Toolbar;
 import android.util.Patterns;
 import android.view.KeyEvent;
@@ -354,8 +355,8 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
             @Override
             public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
                 // Show the `DownloadFile` `AlertDialog` and name this instance `@string/download`.
-                DialogFragment downloadFileDialogFragment = DownloadFile.fromUrl(url, contentDisposition, contentLength);
-                downloadFileDialogFragment.show(getFragmentManager(), getResources().getString(R.string.download));
+                AppCompatDialogFragment downloadFileDialogFragment = DownloadFile.fromUrl(url, contentDisposition, contentLength);
+                downloadFileDialogFragment.show(getSupportFragmentManager(), getResources().getString(R.string.download));
             }
         });
 
@@ -751,8 +752,8 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
 
             case R.id.addToHomescreen:
                 // Show the `CreateHomeScreenShortcut` `AlertDialog` and name this instance `@string/create_shortcut`.
-                DialogFragment createHomeScreenShortcutDialogFragment = new CreateHomeScreenShortcut();
-                createHomeScreenShortcutDialogFragment.show(getFragmentManager(), getResources().getString(R.string.create_shortcut));
+                AppCompatDialogFragment createHomeScreenShortcutDialogFragment = new CreateHomeScreenShortcut();
+                createHomeScreenShortcutDialogFragment.show(getSupportFragmentManager(), getResources().getString(R.string.create_shortcut));
 
                 //Everything else will be handled by `CreateHomeScreenShortcut` and the associated listener below.
                 return true;
@@ -909,7 +910,7 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
     }
 
     @Override
-    public void onCreateHomeScreenShortcut(DialogFragment dialogFragment) {
+    public void onCreateHomeScreenShortcut(AppCompatDialogFragment dialogFragment) {
         // Get shortcutNameEditText from the alert dialog.
         EditText shortcutNameEditText = (EditText) dialogFragment.getDialog().findViewById(R.id.shortcut_name_edittext);
 
@@ -928,7 +929,7 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
     }
 
     @Override
-    public void onDownloadFile(DialogFragment dialogFragment, String downloadUrl) {
+    public void onDownloadFile(AppCompatDialogFragment dialogFragment, String downloadUrl) {
         DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
         DownloadManager.Request downloadRequest = new DownloadManager.Request(Uri.parse(downloadUrl));
 
@@ -936,9 +937,12 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
         EditText downloadFileNameEditText = (EditText) dialogFragment.getDialog().findViewById(R.id.download_file_name);
         String fileName = downloadFileNameEditText.getText().toString();
 
-        // Set the download save in the the `DIRECTORY_DOWNLOADS`using `fileName`.
         // Once we have `WRITE_EXTERNAL_STORAGE` permissions we can use `setDestinationInExternalPublicDir`.
-        downloadRequest.setDestinationInExternalFilesDir(this, "/", fileName);
+        if (Build.VERSION.SDK_INT >= 23) { // If API >= 23, set the download save in the the `DIRECTORY_DOWNLOADS` using `fileName`.
+            downloadRequest.setDestinationInExternalFilesDir(this, "/", fileName);
+        } else { // Only set the title using `fileName`.
+            downloadRequest.setTitle(fileName);
+        }
 
         // Allow `MediaScanner` to index the download if it is a media file.
         downloadRequest.allowScanningByMediaScanner();
index 66e81253b20ce99682e64c0fe8689add64ad94f7..60f7707f81d4b9b47c49abfbfcf517af60b778dc 100644 (file)
@@ -21,7 +21,6 @@ package com.stoutner.privacybrowser;
 
 import android.annotation.SuppressLint;
 import android.app.Dialog;
-import android.app.DialogFragment;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.database.Cursor;
@@ -33,9 +32,12 @@ import android.graphics.BitmapFactory;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 // If we don't use `android.support.v7.app.AlertDialog` instead of `android.app.AlertDialog` then the dialog will be covered by the keyboard.
 import android.support.v4.content.ContextCompat;
+// We have to use `AppCompatDialogFragment` instead of `DialogFragment` or an error is produced on API <=22.
 import android.support.v7.app.AlertDialog;
+import android.support.v7.app.AppCompatDialogFragment;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.CursorAdapter;
@@ -45,10 +47,10 @@ import android.widget.TextView;
 
 import java.io.ByteArrayOutputStream;
 
-public class MoveToFolder extends DialogFragment {
+public class MoveToFolder extends AppCompatDialogFragment {
     // The public interface is used to send information back to the parent activity.
     public interface MoveToFolderListener {
-        void onMoveToFolder(DialogFragment dialogFragment);
+        void onMoveToFolder(AppCompatDialogFragment dialogFragment);
     }
 
     // `moveToFolderListener` is used in `onAttach()` and `onCreateDialog`.
@@ -71,6 +73,7 @@ public class MoveToFolder extends DialogFragment {
     // `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`.
     @SuppressLint("InflateParams")
     @Override
+    @NonNull
     public Dialog onCreateDialog(Bundle savedInstanceState) {
         // Use `AlertDialog.Builder` to create the `AlertDialog`.  The style formats the color of the button text.
         AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity(), R.style.LightAlertDialog);