Commit a4331b54 authored by Pavel Yatsuk's avatar Pavel Yatsuk Committed by Commit Bot

[Modularization] Remove Tab reference from SimpleConfirmInfoBarBuilder

This CL enables moving SimpleConfirmInfoBarBuilder to
chrome/browser/ui/messages/android/

BUG=1056346
R=mdjones@chromium.org

Change-Id: I8b37f019d5e0bdeb6fb33614e76e263e4bad8808
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2113439
Commit-Queue: Pavel Yatsuk <pavely@chromium.org>
Reviewed-by: default avatarJoshua Pawlicki <waffles@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#761183}
parent 37080222
......@@ -327,7 +327,8 @@ public class ManualFillingIntegrationTest {
mActivityTestRule.getInfoBarContainer().addAnimationListener(listener);
final String kInfoBarText = "SomeInfoBar";
PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
SimpleConfirmInfoBarBuilder.create(mActivityTestRule.getActivity().getActivityTab(),
SimpleConfirmInfoBarBuilder.create(
mActivityTestRule.getActivity().getActivityTab().getWebContents(),
InfoBarIdentifier.DUPLICATE_DOWNLOAD_INFOBAR_DELEGATE_ANDROID, kInfoBarText,
false);
});
......@@ -366,7 +367,8 @@ public class ManualFillingIntegrationTest {
mActivityTestRule.getInfoBarContainer().addAnimationListener(listener);
final String kInfoBarText = "SomeInfoBar";
PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
SimpleConfirmInfoBarBuilder.create(mActivityTestRule.getActivity().getActivityTab(),
SimpleConfirmInfoBarBuilder.create(
mActivityTestRule.getActivity().getActivityTab().getWebContents(),
InfoBarIdentifier.DUPLICATE_DOWNLOAD_INFOBAR_DELEGATE_ANDROID, kInfoBarText,
false);
});
......@@ -446,7 +448,8 @@ public class ManualFillingIntegrationTest {
mActivityTestRule.getInfoBarContainer().addAnimationListener(listener);
final String kInfoBarText = "SomeInfoBar";
PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
SimpleConfirmInfoBarBuilder.create(mActivityTestRule.getActivity().getActivityTab(),
SimpleConfirmInfoBarBuilder.create(
mActivityTestRule.getActivity().getActivityTab().getWebContents(),
InfoBarIdentifier.DUPLICATE_DOWNLOAD_INFOBAR_DELEGATE_ANDROID, kInfoBarText,
false);
});
......
......@@ -815,8 +815,8 @@ public class VrShellDelegate
}
};
SimpleConfirmInfoBarBuilder.create(tab, listener,
InfoBarIdentifier.VR_FEEDBACK_INFOBAR_ANDROID,
SimpleConfirmInfoBarBuilder.create(tab.getWebContents(), listener,
InfoBarIdentifier.VR_FEEDBACK_INFOBAR_ANDROID, tab.getContext(),
org.chromium.chrome.vr.R.drawable.vr_services,
ContextUtils.getApplicationContext().getString(
org.chromium.chrome.vr.R.string.vr_shell_feedback_infobar_description),
......@@ -1009,8 +1009,8 @@ public class VrShellDelegate
return false;
}
};
SimpleConfirmInfoBarBuilder.create(tab, listener,
InfoBarIdentifier.VR_SERVICES_UPGRADE_ANDROID,
SimpleConfirmInfoBarBuilder.create(tab.getWebContents(), listener,
InfoBarIdentifier.VR_SERVICES_UPGRADE_ANDROID, mActivity,
org.chromium.chrome.vr.R.drawable.vr_services, infobarText, buttonText, null, null,
true);
}
......
......@@ -74,8 +74,8 @@ public class ChromeWindow extends ActivityWindowAndroid {
Tab tab = activity != null ? ((ChromeActivity) activity).getActivityTab() : null;
if (tab != null) {
SimpleConfirmInfoBarBuilder.create(
tab, InfoBarIdentifier.WINDOW_ERROR_INFOBAR_DELEGATE_ANDROID, error, false);
SimpleConfirmInfoBarBuilder.create(tab.getWebContents(),
InfoBarIdentifier.WINDOW_ERROR_INFOBAR_DELEGATE_ANDROID, error, false);
} else {
super.showCallbackNonExistentError(error);
}
......
......@@ -4,13 +4,13 @@
package org.chromium.chrome.browser.infobar;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.content_public.browser.WebContents;
/**
* Builds and shows a basic ConfirmInfoBar for code that works almost entirely in Java.
......@@ -53,22 +53,24 @@ public class SimpleConfirmInfoBarBuilder {
*
* Consider using snackbars instead of this function for ephemeral messages.
*
* @param tab Tab to attach the infobar to.
* @param webContents WebContents for a 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, null, autoExpire);
public static void create(WebContents webContents, int infobarTypeIdentifier, String message,
boolean autoExpire) {
create(webContents, null, infobarTypeIdentifier, null, 0, message, null, null, null,
autoExpire);
}
/**
* Creates a simple infobar to prompt the user.
*
* @param tab Tab to attach the infobar to.
* @param webContents WebContents for a 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 context Context for loading bitmap referred by drawableId.
* @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.
......@@ -76,14 +78,14 @@ public class SimpleConfirmInfoBarBuilder {
* @param linkText String shown as the link text on the ConfirmInfoBar.
* @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, String linkText,
boolean autoExpire) {
Activity activity = tab.getWindowAndroid().getActivity().get();
Bitmap drawable = activity == null || drawableId == 0 ? null
: BitmapFactory.decodeResource(activity.getResources(), drawableId);
SimpleConfirmInfoBarBuilderJni.get().create(tab, infobarTypeIdentifier, drawable, message,
primaryText, secondaryText, linkText, autoExpire, listener);
public static void create(WebContents webContents, Listener listener, int infobarTypeIdentifier,
Context context, int drawableId, String message, String primaryText,
String secondaryText, String linkText, boolean autoExpire) {
Bitmap drawable = context == null || drawableId == 0
? null
: BitmapFactory.decodeResource(context.getResources(), drawableId);
SimpleConfirmInfoBarBuilderJni.get().create(webContents, infobarTypeIdentifier, drawable,
message, primaryText, secondaryText, linkText, autoExpire, listener);
}
@CalledByNative
......@@ -103,9 +105,9 @@ public class SimpleConfirmInfoBarBuilder {
@NativeMethods
interface Natives {
void create(Tab tab, int infobarTypeIdentifier, Bitmap drawable, String message,
String primaryText, String secondaryText, String linkText, boolean autoExpire,
Object listener);
void create(WebContents webContents, int infobarTypeIdentifier, Bitmap drawable,
String message, String primaryText, String secondaryText, String linkText,
boolean autoExpire, Object listener);
}
}
......@@ -114,8 +114,8 @@ public class ModuleInstallUi {
String text = String.format(context.getString(R.string.module_install_failure_text),
context.getResources().getString(mModuleTitleStringId));
SimpleConfirmInfoBarBuilder.create(mTab, listener,
InfoBarIdentifier.MODULE_INSTALL_FAILURE_INFOBAR_ANDROID,
SimpleConfirmInfoBarBuilder.create(mTab.getWebContents(), listener,
InfoBarIdentifier.MODULE_INSTALL_FAILURE_INFOBAR_ANDROID, context,
R.drawable.ic_error_outline_googblue_24dp, text,
context.getString(R.string.try_again), context.getString(R.string.cancel),
/* linkText = */ null, /* autoExpire = */ true);
......
......@@ -76,7 +76,7 @@ public class UpdateInfoBarController implements Destroyable {
Tab tab = mActivity.getActivityTabProvider().get();
if (tab == null) return;
SimpleConfirmInfoBarBuilder.create(tab,
SimpleConfirmInfoBarBuilder.create(tab.getWebContents(),
new SimpleConfirmInfoBarBuilder.Listener() {
@Override
public void onInfoBarDismissed() {}
......@@ -92,7 +92,7 @@ public class UpdateInfoBarController implements Destroyable {
return false;
}
},
InfoBarIdentifier.INLINE_UPDATE_READY_INFOBAR_ANDROID,
InfoBarIdentifier.INLINE_UPDATE_READY_INFOBAR_ANDROID, mActivity,
R.drawable.infobar_chrome /* drawableId */,
mActivity.getString(R.string.inline_update_infobar_ready_message) /* message */,
null /* primaryText */, null /* secondaryText */,
......@@ -106,7 +106,7 @@ public class UpdateInfoBarController implements Destroyable {
Tab tab = mActivity.getActivityTabProvider().get();
if (tab == null) return;
SimpleConfirmInfoBarBuilder.create(tab,
SimpleConfirmInfoBarBuilder.create(tab.getWebContents(),
new SimpleConfirmInfoBarBuilder.Listener() {
@Override
public void onInfoBarDismissed() {}
......@@ -122,7 +122,7 @@ public class UpdateInfoBarController implements Destroyable {
return false;
}
},
InfoBarIdentifier.INLINE_UPDATE_FAILED_INFOBAR_ANDROID,
InfoBarIdentifier.INLINE_UPDATE_FAILED_INFOBAR_ANDROID, mActivity,
R.drawable.infobar_chrome /* drawableId */,
mActivity.getString(R.string.inline_update_infobar_failed_message) /* message */,
mActivity.getString(R.string.try_again) /* primaryText */,
......
......@@ -155,7 +155,8 @@ public class ArCoreInstallUtils {
}
};
// TODO(ijamardo, https://crbug.com/838833): Add icon for AR info bar.
SimpleConfirmInfoBarBuilder.create(tab, listener, InfoBarIdentifier.AR_CORE_UPGRADE_ANDROID,
SimpleConfirmInfoBarBuilder.create(tab.getWebContents(), listener,
InfoBarIdentifier.AR_CORE_UPGRADE_ANDROID, tab.getContext(),
R.drawable.ic_error_outline_googblue_24dp, infobarText, buttonText, null, null,
true);
}
......
......@@ -109,8 +109,9 @@ public class InfoBarContainerTest {
final TestListener testListener = new TestListener();
PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
SimpleConfirmInfoBarBuilder.create(mActivityTestRule.getActivity().getActivityTab(),
testListener, InfoBarIdentifier.TEST_INFOBAR, 0, MESSAGE_TEXT, null, null, null,
SimpleConfirmInfoBarBuilder.create(
mActivityTestRule.getActivity().getActivityTab().getWebContents(), testListener,
InfoBarIdentifier.TEST_INFOBAR, null, 0, MESSAGE_TEXT, null, null, null,
expires);
});
mListener.addInfoBarAnimationFinished("InfoBar not added.");
......
......@@ -9,10 +9,10 @@
#include "base/android/scoped_java_ref.h"
#include "base/macros.h"
#include "chrome/android/chrome_jni_headers/SimpleConfirmInfoBarBuilder_jni.h"
#include "chrome/browser/android/tab_android.h"
#include "chrome/browser/infobars/infobar_service.h"
#include "components/infobars/core/confirm_infobar_delegate.h"
#include "components/infobars/core/infobar.h"
#include "content/public/browser/web_contents.h"
#include "ui/gfx/android/java_bitmap.h"
#include "ui/gfx/image/image.h"
......@@ -143,7 +143,7 @@ bool SimpleConfirmInfoBarDelegate::Cancel() {
void JNI_SimpleConfirmInfoBarBuilder_Create(
JNIEnv* env,
const JavaParamRef<jobject>& j_tab,
const JavaParamRef<jobject>& j_web_contents,
jint j_identifier,
const JavaParamRef<jobject>& j_icon,
const JavaParamRef<jstring>& j_message,
......@@ -176,7 +176,7 @@ void JNI_SimpleConfirmInfoBarBuilder_Create(
: base::android::ConvertJavaStringToUTF16(env, j_link_text);
InfoBarService* service = InfoBarService::FromWebContents(
TabAndroid::GetNativeTab(env, j_tab)->web_contents());
content::WebContents::FromJavaWebContents(j_web_contents));
service->AddInfoBar(service->CreateConfirmInfoBar(
std::make_unique<SimpleConfirmInfoBarDelegate>(
j_listener, infobar_identifier, icon_bitmap, message_str, primary_str,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment