Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4157)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/infobar/SimpleConfirmInfoBarBuilder.java

Issue 1596713003: Discourage creation of Java infobars without InfoBarDelegates (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebasing Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/infobar/SimpleConfirmInfoBarBuilder.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/infobar/SimpleConfirmInfoBarBuilder.java b/chrome/android/java/src/org/chromium/chrome/browser/infobar/SimpleConfirmInfoBarBuilder.java
new file mode 100644
index 0000000000000000000000000000000000000000..25884033d8750384d3f17e7e351081b65eaba62b
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/infobar/SimpleConfirmInfoBarBuilder.java
@@ -0,0 +1,92 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.infobar;
+
+import android.app.Activity;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.chrome.browser.tab.Tab;
+
+/**
+ * Builds and shows a basic ConfirmInfoBar for code that works almost entirely in Java.
+ *
+ * Rather than use this class, it is highly recommended that developers create and customize their
+ * own customized native InfoBarDelegate to avoid unnecessary JNI hops.
+ */
+public class SimpleConfirmInfoBarBuilder {
+
+ /**
+ * Listens for when users interact with an infobar.
+ */
+ public static interface Listener {
+
+ /**
+ * Called when the infobar was dismissed.
+ */
+ void onInfoBarDismissed();
+
+ /**
+ * Called when either the primary or secondary button of a ConfirmInfoBar is clicked.
+ *
+ * @param isPrimary True if the primary button was clicked, false if the secondary button
+ * was clicked.
+ */
+ void onInfoBarButtonClicked(boolean isPrimary);
+ }
+
+ /**
+ * Creates a simple infobar to display a message to the user.
+ *
+ * Consider using snackbars instead of this function for ephemeral messages.
+ *
+ * @param tab Tab to attach the infobar to.
+ * @param infobarTypeIdentifier Unique ID defined in the C++ InfoBarDelegate::InfoBarIdentifier.
+ * @param message Message displayed to the user.
+ * @param autoExpire Whether the infobar disappears on navigation.
+ */
+ public static void create(
+ Tab tab, int infobarTypeIdentifier, String message, boolean autoExpire) {
+ create(tab, null, infobarTypeIdentifier, 0, message, null, null, autoExpire);
+ }
+
+ /**
+ * Creates a simple infobar to prompt the user.
+ *
+ * @param tab Tab to attach the infobar to.
+ * @param listener Alerted when the user interacts with the infobar.
+ * @param infobarTypeIdentifier Unique ID defined in the C++ InfoBarDelegate::InfoBarIdentifier.
+ * @param drawableId Resource ID of the icon representing the infobar.
+ * @param message Message displayed to the user.
+ * @param primaryText String shown on the primary ConfirmInfoBar button.
+ * @param secondaryText String shown on the secondary ConfirmInfoBar button.
+ * @param autoExpire Whether the infobar disappears on navigation.
+ */
+ public static void create(Tab tab, Listener listener, int infobarTypeIdentifier,
+ int drawableId, String message, String primaryText, String secondaryText,
+ boolean autoExpire) {
+ Activity activity = tab.getWindowAndroid().getActivity().get();
+ Bitmap drawable = activity == null || drawableId == 0 ? null
+ : BitmapFactory.decodeResource(activity.getResources(), drawableId);
+ nativeCreate(tab, infobarTypeIdentifier, drawable, message, primaryText, secondaryText,
+ autoExpire, listener);
+ }
+
+ @CalledByNative
+ private static void onInfoBarDismissed(Listener listener) {
+ if (listener != null) listener.onInfoBarDismissed();
+ }
+
+ @CalledByNative
+ private static void onInfoBarButtonClicked(Listener listener, boolean isPrimary) {
+ if (listener != null) listener.onInfoBarButtonClicked(isPrimary);
+ }
+
+ private static native void nativeCreate(
+ Tab tab, int infobarTypeIdentifier, Bitmap drawable, String message, String primaryText,
+ String secondaryText, boolean autoExpire, Object listener);
+}
+

Powered by Google App Engine
This is Rietveld 408576698