]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/dialogs/UrlHistoryDialog.java
Add a context menu entry to Open in New Tab.
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / dialogs / UrlHistoryDialog.java
index 0093810222990dbde1bd479f2bdd53874f1d8dc8..87902b973a0b7d0aa13b0ccfb05b44e77ee88cf8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2016-2018 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
  *
@@ -29,10 +29,6 @@ import android.graphics.BitmapFactory;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.v4.content.ContextCompat;
-// We have to use `AppCompatDialogFragment` instead of `DialogFragment` or an error is produced on API <= 22.  `android.support.v7.app.AlertDialog` also uses more of the horizontal screen real estate versus `android.app.AlertDialog's` smaller width.
-import android.support.v7.app.AppCompatDialogFragment;
 import android.util.Base64;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -41,6 +37,10 @@ import android.webkit.WebBackForwardList;
 import android.widget.AdapterView;
 import android.widget.ListView;
 
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
+import androidx.fragment.app.DialogFragment;  // The AndroidX dialog fragment must be used or an error is produced on API <=22.
+
 import com.stoutner.privacybrowser.R;
 import com.stoutner.privacybrowser.activities.MainWebViewActivity;
 import com.stoutner.privacybrowser.adapters.HistoryArrayAdapter;
@@ -49,44 +49,69 @@ import com.stoutner.privacybrowser.definitions.History;
 import java.io.ByteArrayOutputStream;
 import java.util.ArrayList;
 
-public class UrlHistoryDialog extends AppCompatDialogFragment{
-
-    // `historyArrayList`  and `currentPageId` pass information from `onCreate()` to `onCreateDialog()`.
+public class UrlHistoryDialog extends DialogFragment{
+    // Declare the class variables.
     private final ArrayList<History> historyArrayList = new ArrayList<>();
     private int currentPageId;
 
+    // Create a URL history listener.
+    private UrlHistoryListener urlHistoryListener;
+
+
+    // The public interface is used to send information back to the parent activity.
+    public interface UrlHistoryListener {
+        // Send back the number of steps to move forward or back.
+        void onUrlHistoryEntrySelected(int moveBackOrForwardSteps);
+
+        // Clear the history.
+        void onClearHistory();
+    }
+
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+
+        // Check to make sure tha the parent activity implements the listener.
+        try {
+            urlHistoryListener = (UrlHistoryListener) context;
+        } catch (ClassCastException exception) {
+            throw new ClassCastException(context.toString() + " must implement UrlHistoryListener.");
+        }
+    }
+
+
     public static UrlHistoryDialog loadBackForwardList(Context context, WebBackForwardList webBackForwardList) {
-        // Create `argumentsBundle`.
+        // Create an arguments bundle.
         Bundle argumentsBundle = new Bundle();
 
-        // Store `currentPageIndex`.
+        // Store the current page index.
         int currentPageIndex = webBackForwardList.getCurrentIndex();
 
-        // Setup `urlArrayList` and `iconArrayList`.
+        // Setup the URL array list and the icon array list.
         ArrayList<String> urlArrayList = new ArrayList<>();
         ArrayList<String> iconBase64StringArrayList = new ArrayList<>();
 
-        // Get the default favorite icon `Drawable`.
+        // Get the default favorite icon drawable.  `ContextCompat` must be used until the minimum API >= 21.
         Drawable defaultFavoriteIconDrawable = ContextCompat.getDrawable(context, R.drawable.world);
 
-        // Convert `defaultFavoriteIconDrawable` to a `BitmapDrawable`.
+        // Convert the default favorite icon drawable to a `BitmapDrawable`.
         BitmapDrawable defaultFavoriteIconBitmapDrawable = (BitmapDrawable) defaultFavoriteIconDrawable;
 
         // Remove the incorrect lint error that `getBitmap()` might be null.
         assert defaultFavoriteIconBitmapDrawable != null;
 
-        // Extract a `Bitmap` from `defaultFavoriteIconBitmapDrawable`.
+        // Extract a `Bitmap` from the default favorite icon `BitmapDrawable`.
         Bitmap defaultFavoriteIcon = defaultFavoriteIconBitmapDrawable.getBitmap();
 
-        // Populate `urlArrayList` and `iconArrayList` from `webBackForwardList`.
+        // Populate the URL array list and the icon array list from `webBackForwardList`.
         for (int i=0; i < webBackForwardList.getSize(); i++) {
             // Store the URL.
             urlArrayList.add(webBackForwardList.getItemAtIndex(i).getUrl());
 
-            // Create a variable to store the icon `Bitmap`.
+            // Create a variable to store the icon bitmap.
             Bitmap iconBitmap;
 
-            // Store the icon `Bitmap`.
+            // Store the icon bitmap.
             if (webBackForwardList.getItemAtIndex(i).getFavicon() == null) {
                 // If `webBackForwardList` does not have a favorite icon, use Privacy Browser's default world icon.
                 iconBitmap = defaultFavoriteIcon;
@@ -118,7 +143,7 @@ public class UrlHistoryDialog extends AppCompatDialogFragment{
         argumentsBundle.putStringArrayList("URL_History", urlArrayList);
         argumentsBundle.putStringArrayList("Favorite_Icons", iconBase64StringArrayList);
 
-        // Add `argumentsBundle` to this instance of `UrlHistoryDialog`.
+        // Add the arguments bundle to this instance of `UrlHistoryDialog`.
         UrlHistoryDialog thisUrlHistoryDialog = new UrlHistoryDialog();
         thisUrlHistoryDialog.setArguments(argumentsBundle);
         return thisUrlHistoryDialog;
@@ -161,30 +186,6 @@ public class UrlHistoryDialog extends AppCompatDialogFragment{
         currentPageId = urlStringArrayList.size() - 1 - originalCurrentPageId;
     }
 
-    // The public interface is used to send information back to the parent activity.
-    public interface UrlHistoryListener {
-        // Send back the number of steps to move forward or back.
-        void onUrlHistoryEntrySelected(int moveBackOrForwardSteps);
-
-        // Clear the history.
-        void onClearHistory();
-    }
-
-    // `urlHistoryListener` is used in `onAttach()` and `onCreateDialog()`.
-    private UrlHistoryListener urlHistoryListener;
-
-    @Override
-    public void onAttach(Context context) {
-        super.onAttach(context);
-
-        // Check to make sure tha the parent activity implements the listener.
-        try {
-            urlHistoryListener = (UrlHistoryListener) context;
-        } catch (ClassCastException exception) {
-            throw new ClassCastException(context.toString() + " must implement UrlHistoryListener.");
-        }
-    }
-
     @Override
     @NonNull
     // `@SuppressLing("InflateParams")` removes the warning about using `null` as the parent view group when inflating the `AlertDialog`.
@@ -239,7 +240,7 @@ public class UrlHistoryDialog extends AppCompatDialogFragment{
         alertDialog.show();
 
         // Instantiate a `HistoryArrayAdapter`.
-        final HistoryArrayAdapter historyArrayAdapter = new HistoryArrayAdapter(getContext(), historyArrayList, currentPageId);
+        HistoryArrayAdapter historyArrayAdapter = new HistoryArrayAdapter(getContext(), historyArrayList, currentPageId);
 
         // Get a handle for the list view.
         ListView listView = alertDialog.findViewById(R.id.history_listview);
@@ -249,7 +250,7 @@ public class UrlHistoryDialog extends AppCompatDialogFragment{
 
         // Listen for clicks on entries in the list view.
         listView.setOnItemClickListener((AdapterView<?> parent, View view, int position, long id) -> {
-            // Convert the `long` `id` to an `int`.
+            // Convert the long ID to an int.
             int itemId = (int) id;
 
             // Only consume the click if it is not on the `currentPageId`.