Commit 828e15e2 authored by Pavel Yatsuk's avatar Pavel Yatsuk Committed by Commit Bot

[Modularization] Remove InfoBar dependency on SnackbarManager

InfoBar provides an accessor method to get to SnackbarManager.
TranslateCompactInfoBar is the only infobar that uses this method. Having this
method means that InfoBar needs to know how to get to SnackbarManager instance.
Modularized InfoBar shouldn't have access to ChromeActivity.

This CL removes InfoBar dependency on SnackbarManager and makes obtaining
reference to SnackbarManager a responsibility of the calling component (in this
case TranslateCompactInfoBar).

BUG=1056346
R=mdjones@chromium.org

Change-Id: I33f366ed49dfd6ad51c406a7a6d0e8ffea056d03
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2095708Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Commit-Queue: Pavel Yatsuk <pavely@chromium.org>
Cr-Commit-Position: refs/heads/master@{#748557}
parent 9ff17d49
......@@ -16,7 +16,6 @@ import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.NativeMethods;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ui.messages.infobar.InfoBarUiItem;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
import org.chromium.ui.modelutil.PropertyModel;
/**
......@@ -73,10 +72,6 @@ public abstract class InfoBar implements InfoBarInteractionHandler, InfoBarUiIte
mNativeInfoBarPtr = 0;
}
public SnackbarManager getSnackbarManager() {
return mContainer != null ? mContainer.getSnackbarManager() : null;
}
/**
* Sets the Context used when creating the InfoBar.
*/
......
......@@ -21,7 +21,6 @@ import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.chrome.browser.ui.messages.infobar.InfoBarUiItem;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
import org.chromium.chrome.browser.util.AccessibilityUtil;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetObserver;
......@@ -241,14 +240,6 @@ public class InfoBarContainer implements UserData, KeyboardVisibilityListener {
mNativeInfoBarContainer = InfoBarContainerJni.get().init(InfoBarContainer.this);
}
public SnackbarManager getSnackbarManager() {
if (mTab != null && ((TabImpl) mTab).getActivity() != null) {
return ((TabImpl) mTab).getActivity().getSnackbarManager();
}
return null;
}
/**
* Adds an {@link InfoBarContainerObserver}.
* @param observer The {@link InfoBarContainerObserver} to add.
......
......@@ -22,8 +22,12 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.infobar.translate.TranslateMenu;
import org.chromium.chrome.browser.infobar.translate.TranslateMenuHelper;
import org.chromium.chrome.browser.infobar.translate.TranslateTabLayout;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.ui.messages.snackbar.Snackbar;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarController;
import org.chromium.chrome.browser.ui.messages.snackbar.SnackbarManager.SnackbarManageable;
import org.chromium.ui.widget.Toast;
/**
......@@ -111,6 +115,7 @@ public class TranslateCompactInfoBar extends InfoBar
private ImageButton mMenuButton;
private InfoBarCompactLayout mParent;
private final SnackbarManageable mSnackbarManageable;
private TranslateSnackbarController mSnackbarController;
private boolean mMenuExpanded;
......@@ -161,20 +166,24 @@ public class TranslateCompactInfoBar extends InfoBar
};
@CalledByNative
private static InfoBar create(int initialStep, String sourceLanguageCode,
private static InfoBar create(Tab tab, int initialStep, String sourceLanguageCode,
String targetLanguageCode, boolean alwaysTranslate, boolean triggeredFromMenu,
String[] languages, String[] languageCodes, int[] hashCodes, int tabTextColor) {
recordInfobarAction(INFOBAR_IMPRESSION);
return new TranslateCompactInfoBar(initialStep, sourceLanguageCode, targetLanguageCode,
alwaysTranslate, triggeredFromMenu, languages, languageCodes, hashCodes,
tabTextColor);
SnackbarManageable snackbarManageable = tab != null ? ((TabImpl) tab).getActivity() : null;
return new TranslateCompactInfoBar(snackbarManageable, initialStep, sourceLanguageCode,
targetLanguageCode, alwaysTranslate, triggeredFromMenu, languages, languageCodes,
hashCodes, tabTextColor);
}
TranslateCompactInfoBar(int initialStep, String sourceLanguageCode, String targetLanguageCode,
boolean alwaysTranslate, boolean triggeredFromMenu, String[] languages,
String[] languageCodes, int[] hashCodes, int tabTextColor) {
TranslateCompactInfoBar(SnackbarManageable snackbarManageable, int initialStep,
String sourceLanguageCode, String targetLanguageCode, boolean alwaysTranslate,
boolean triggeredFromMenu, String[] languages, String[] languageCodes, int[] hashCodes,
int tabTextColor) {
super(R.drawable.infobar_translate_compact, 0, null, null);
mSnackbarManageable = snackbarManageable;
mInitialStep = initialStep;
mDefaultTextColor = tabTextColor;
mOptions = TranslateOptions.create(sourceLanguageCode, targetLanguageCode, languages,
......@@ -564,6 +573,10 @@ public class TranslateCompactInfoBar extends InfoBar
getContext().getString(R.string.translate_snackbar_cancel), null));
}
private SnackbarManager getSnackbarManager() {
return mSnackbarManageable != null ? mSnackbarManageable.getSnackbarManager() : null;
}
private void handleTranslateOptionPostSnackbar(int actionId) {
// Quit if native is destroyed.
if (mNativeTranslateInfoBarPtr == 0) return;
......
......@@ -246,7 +246,6 @@ public class InfoBarTest {
InfoBarUtil.clickPrimaryButton(infoBars.get(0));
mListener.removeInfoBarAnimationFinished("InfoBar not removed.");
Assert.assertEquals("Wrong infobar count", 0, infoBars.size());
Assert.assertNotNull(infoBars.get(0).getSnackbarManager());
// A second load should not show the infobar.
mActivityTestRule.loadUrl(mTestServer.getURL(POPUP_PAGE));
......
......@@ -13,6 +13,7 @@
#include "base/android/jni_string.h"
#include "base/android/jni_weak_ref.h"
#include "chrome/android/chrome_jni_headers/TranslateCompactInfoBar_jni.h"
#include "chrome/browser/android/tab_android.h"
#include "chrome/browser/infobars/infobar_service.h"
#include "chrome/browser/translate/android/translate_utils.h"
#include "components/translate/core/browser/translate_infobar_delegate.h"
......@@ -67,11 +68,17 @@ ScopedJavaLocalRef<jobject> TranslateCompactInfoBar::CreateRenderInfoBar(
ScopedJavaLocalRef<jstring> target_language_code =
base::android::ConvertUTF8ToJavaString(env,
delegate->target_language_code());
content::WebContents* web_contents =
InfoBarService::WebContentsFromInfoBar(this);
TabAndroid* tab =
web_contents ? TabAndroid::FromWebContents(web_contents) : nullptr;
return Java_TranslateCompactInfoBar_create(
env, delegate->translate_step(), source_language_code,
target_language_code, delegate->ShouldAlwaysTranslate(),
delegate->triggered_from_menu(), java_languages, java_codes,
java_hash_codes, TabDefaultTextColor());
env, tab ? tab->GetJavaObject() : nullptr, delegate->translate_step(),
source_language_code, target_language_code,
delegate->ShouldAlwaysTranslate(), delegate->triggered_from_menu(),
java_languages, java_codes, java_hash_codes, TabDefaultTextColor());
}
void TranslateCompactInfoBar::ProcessButton(int action) {
......
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