Skip to content

Commit

Permalink
[Modularization] Remove InfoBar dependency on SnackbarManager
Browse files Browse the repository at this point in the history
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/+/2095708
Reviewed-by: Matthew Jones <mdjones@chromium.org>
Commit-Queue: Pavel Yatsuk <pavely@chromium.org>
Cr-Commit-Position: refs/heads/master@{#748557}
  • Loading branch information
Pavel Yatsuk authored and Commit Bot committed Mar 10, 2020
1 parent 9ff17d4 commit 828e15e
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
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;

/**
Expand Down Expand Up @@ -73,10 +72,6 @@ protected void onNativeDestroyed() {
mNativeInfoBarPtr = 0;
}

public SnackbarManager getSnackbarManager() {
return mContainer != null ? mContainer.getSnackbarManager() : null;
}

/**
* Sets the Context used when creating the InfoBar.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
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;
Expand Down Expand Up @@ -241,14 +240,6 @@ private InfoBarContainer(Tab tab) {
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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@
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;

/**
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -161,20 +166,24 @@ public void onAction(Object actionData) {
};

@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,
Expand Down Expand Up @@ -564,6 +573,10 @@ private void createAndShowSnackbar(String title, int umaType, int actionId) {
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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,6 @@ public void testInfoBarForPopUp() throws TimeoutException {
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));
Expand Down
15 changes: 11 additions & 4 deletions chrome/browser/ui/android/infobars/translate_compact_infobar.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit 828e15e

Please sign in to comment.