Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.infobar; | 5 package org.chromium.chrome.browser.infobar; |
| 6 | 6 |
| 7 import android.support.design.widget.TabLayout; | 7 import android.support.design.widget.TabLayout; |
| 8 import android.view.LayoutInflater; | 8 import android.view.LayoutInflater; |
| 9 import android.view.View; | 9 import android.view.View; |
| 10 import android.view.View.OnClickListener; | 10 import android.view.View.OnClickListener; |
| 11 import android.widget.LinearLayout; | 11 import android.widget.LinearLayout; |
| 12 | 12 |
| 13 import org.chromium.base.annotations.CalledByNative; | 13 import org.chromium.base.annotations.CalledByNative; |
| 14 import org.chromium.chrome.R; | 14 import org.chromium.chrome.R; |
| 15 import org.chromium.chrome.browser.infobar.translate.TranslateMenu; | 15 import org.chromium.chrome.browser.infobar.translate.TranslateMenu; |
| 16 import org.chromium.chrome.browser.infobar.translate.TranslateMenuHelper; | 16 import org.chromium.chrome.browser.infobar.translate.TranslateMenuHelper; |
| 17 import org.chromium.chrome.browser.infobar.translate.TranslateTabLayout; | 17 import org.chromium.chrome.browser.infobar.translate.TranslateTabLayout; |
| 18 import org.chromium.chrome.browser.snackbar.Snackbar; | 18 import org.chromium.chrome.browser.snackbar.Snackbar; |
| 19 import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController; | |
| 19 import org.chromium.chrome.browser.widget.TintedImageButton; | 20 import org.chromium.chrome.browser.widget.TintedImageButton; |
| 20 import org.chromium.ui.widget.Toast; | 21 import org.chromium.ui.widget.Toast; |
| 21 | 22 |
| 22 /** | 23 /** |
| 23 * Java version of the compcat translate infobar | 24 * Java version of the compcat translate infobar |
| 24 */ | 25 */ |
| 25 class TranslateCompactInfoBar extends InfoBar | 26 class TranslateCompactInfoBar extends InfoBar |
| 26 implements TabLayout.OnTabSelectedListener, TranslateMenuHelper.Translat eMenuListener { | 27 implements TabLayout.OnTabSelectedListener, TranslateMenuHelper.Translat eMenuListener { |
| 27 public static final int TRANSLATING_INFOBAR = 1; | 28 public static final int TRANSLATING_INFOBAR = 1; |
| 28 | 29 |
| 29 private static final int SOURCE_TAB_INDEX = 0; | 30 private static final int SOURCE_TAB_INDEX = 0; |
| 30 private static final int TARGET_TAB_INDEX = 1; | 31 private static final int TARGET_TAB_INDEX = 1; |
| 31 | 32 |
| 32 private final int mInitialStep; | 33 private final int mInitialStep; |
| 33 private final TranslateOptions mOptions; | 34 private final TranslateOptions mOptions; |
| 34 | 35 |
| 35 private long mNativeTranslateInfoBarPtr; | 36 private long mNativeTranslateInfoBarPtr; |
| 36 private TranslateTabLayout mTabLayout; | 37 private TranslateTabLayout mTabLayout; |
| 37 | 38 |
| 38 // Need 2 instances of TranslateMenuHelper to prevent a race condition bug w hich happens when | 39 // Need 2 instances of TranslateMenuHelper to prevent a race condition bug w hich happens when |
| 39 // showing language menu after dismissing overflow menu. | 40 // showing language menu after dismissing overflow menu. |
| 40 private TranslateMenuHelper mOverflowMenuHelper; | 41 private TranslateMenuHelper mOverflowMenuHelper; |
| 41 private TranslateMenuHelper mLanguageMenuHelper; | 42 private TranslateMenuHelper mLanguageMenuHelper; |
| 42 | 43 |
| 43 private TintedImageButton mMenuButton; | 44 private TintedImageButton mMenuButton; |
| 44 | 45 |
| 46 enum TranslateSnackbarType { NONE, ALWAYS_TRANSLATE, NEVER_TRANSLATE, NEVER_ TRANSLATE_SITE } | |
| 47 ; | |
|
gone
2017/05/04 17:20:52
1) git cl format? This ; on its own line is weird
ramyasharma
2017/05/05 02:55:13
Yes, git cl format put that ";" on the next line :
| |
| 48 | |
| 49 class TranslateSnackbarController implements SnackbarController { | |
|
gone
2017/05/04 17:20:52
javadoc
ramyasharma
2017/05/05 02:55:13
done.
| |
| 50 private TranslateSnackbarType mSnackbarType; | |
|
gone
2017/05/04 17:20:52
final
ramyasharma
2017/05/05 02:55:13
Done.
| |
| 51 | |
| 52 public TranslateSnackbarController(TranslateSnackbarType snackbarType) { | |
| 53 this.snackbarType = snackbarType; | |
|
gone
2017/05/04 17:20:52
Does this compile?
ramyasharma
2017/05/05 02:55:13
argh.. sorry. No it doesn't. I missed updating oth
| |
| 54 } | |
| 55 | |
| 56 @Override | |
| 57 public void onDismissNoAction(Object actionData) { | |
| 58 switch (snackbarType) { | |
| 59 case ALWAYS_TRANSLATE: | |
| 60 nativeApplyBoolTranslateOption( | |
| 61 mNativeTranslateInfoBarPtr, TranslateOption.ALWAYS_T RANSLATE, true); | |
| 62 return; | |
| 63 case NEVER_TRANSLATE: | |
| 64 nativeApplyBoolTranslateOption( | |
| 65 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TR ANSLATE, true); | |
| 66 return; | |
| 67 case NEVER_TRANSLATE_SITE: | |
| 68 nativeApplyBoolTranslateOption( | |
| 69 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TR ANSLATE_SITE, true); | |
| 70 return; | |
| 71 } | |
| 72 } | |
| 73 | |
| 74 @Override | |
| 75 public void onAction(Object actionData) { | |
| 76 // do nothing. | |
| 77 } | |
| 78 }; | |
| 79 | |
| 45 @CalledByNative | 80 @CalledByNative |
| 46 private static InfoBar create(int initialStep, String sourceLanguageCode, | 81 private static InfoBar create(int initialStep, String sourceLanguageCode, |
| 47 String targetLanguageCode, boolean alwaysTranslate, boolean triggere dFromMenu, | 82 String targetLanguageCode, boolean alwaysTranslate, boolean triggere dFromMenu, |
| 48 String[] languages, String[] codes) { | 83 String[] languages, String[] codes) { |
| 49 return new TranslateCompactInfoBar(initialStep, sourceLanguageCode, targ etLanguageCode, | 84 return new TranslateCompactInfoBar(initialStep, sourceLanguageCode, targ etLanguageCode, |
| 50 alwaysTranslate, triggeredFromMenu, languages, codes); | 85 alwaysTranslate, triggeredFromMenu, languages, codes); |
| 51 } | 86 } |
| 52 | 87 |
| 53 TranslateCompactInfoBar(int initialStep, String sourceLanguageCode, String t argetLanguageCode, | 88 TranslateCompactInfoBar(int initialStep, String sourceLanguageCode, String t argetLanguageCode, |
| 54 boolean alwaysTranslate, boolean triggeredFromMenu, String[] languag es, | 89 boolean alwaysTranslate, boolean triggeredFromMenu, String[] languag es, |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 171 public void onTabReselected(TabLayout.Tab tab) {} | 206 public void onTabReselected(TabLayout.Tab tab) {} |
| 172 | 207 |
| 173 @Override | 208 @Override |
| 174 public void onOverflowMenuItemClicked(int itemId) { | 209 public void onOverflowMenuItemClicked(int itemId) { |
| 175 switch (itemId) { | 210 switch (itemId) { |
| 176 case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE: | 211 case TranslateMenu.ID_OVERFLOW_MORE_LANGUAGE: |
| 177 initMenuHelper(TranslateMenu.MENU_TARGET_LANGUAGE); | 212 initMenuHelper(TranslateMenu.MENU_TARGET_LANGUAGE); |
| 178 mLanguageMenuHelper.show(TranslateMenu.MENU_TARGET_LANGUAGE); | 213 mLanguageMenuHelper.show(TranslateMenu.MENU_TARGET_LANGUAGE); |
| 179 return; | 214 return; |
| 180 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: | 215 case TranslateMenu.ID_OVERFLOW_ALWAYS_TRANSLATE: |
| 181 nativeApplyBoolTranslateOption( | |
| 182 mNativeTranslateInfoBarPtr, TranslateOption.ALWAYS_TRANS LATE, true); | |
| 183 showSnackbar(TranslateSnackbarType.ALWAYS_TRANSLATE); | 216 showSnackbar(TranslateSnackbarType.ALWAYS_TRANSLATE); |
| 184 return; | 217 return; |
| 185 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: | 218 case TranslateMenu.ID_OVERFLOW_NEVER_LANGUAGE: |
| 186 nativeApplyBoolTranslateOption( | |
| 187 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSL ATE, true); | |
| 188 showSnackbar(TranslateSnackbarType.NEVER_TRANSLATE); | 219 showSnackbar(TranslateSnackbarType.NEVER_TRANSLATE); |
| 189 return; | 220 return; |
| 190 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: | 221 case TranslateMenu.ID_OVERFLOW_NEVER_SITE: |
| 191 nativeApplyBoolTranslateOption( | |
| 192 mNativeTranslateInfoBarPtr, TranslateOption.NEVER_TRANSL ATE_SITE, true); | |
| 193 showSnackbar(TranslateSnackbarType.NEVER_TRANSLATE_SITE); | 222 showSnackbar(TranslateSnackbarType.NEVER_TRANSLATE_SITE); |
| 194 return; | 223 return; |
| 195 case TranslateMenu.ID_OVERFLOW_NOT_THIS_LANGUAGE: | 224 case TranslateMenu.ID_OVERFLOW_NOT_THIS_LANGUAGE: |
| 196 initMenuHelper(TranslateMenu.MENU_SOURCE_LANGUAGE); | 225 initMenuHelper(TranslateMenu.MENU_SOURCE_LANGUAGE); |
| 197 mLanguageMenuHelper.show(TranslateMenu.MENU_SOURCE_LANGUAGE); | 226 mLanguageMenuHelper.show(TranslateMenu.MENU_SOURCE_LANGUAGE); |
| 198 return; | 227 return; |
| 199 default: | 228 default: |
| 200 assert false : "Unexpected overflow menu code"; | 229 assert false : "Unexpected overflow menu code"; |
| 201 } | 230 } |
| 202 } | 231 } |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 218 // Reset source code in both UI and native. | 247 // Reset source code in both UI and native. |
| 219 if (mOptions.setSourceLanguage(code)) { | 248 if (mOptions.setSourceLanguage(code)) { |
| 220 nativeApplyStringTranslateOption( | 249 nativeApplyStringTranslateOption( |
| 221 mNativeTranslateInfoBarPtr, TranslateOption.SOURCE_CODE, cod e); | 250 mNativeTranslateInfoBarPtr, TranslateOption.SOURCE_CODE, cod e); |
| 222 // Adjust UI. | 251 // Adjust UI. |
| 223 mTabLayout.replaceTabTitle(SOURCE_TAB_INDEX, mOptions.getRepresentat ionFromCode(code)); | 252 mTabLayout.replaceTabTitle(SOURCE_TAB_INDEX, mOptions.getRepresentat ionFromCode(code)); |
| 224 startTranslating(mTabLayout.getSelectedTabPosition()); | 253 startTranslating(mTabLayout.getSelectedTabPosition()); |
| 225 } | 254 } |
| 226 } | 255 } |
| 227 | 256 |
| 228 private void showSnackbar(int snackbarType) { | 257 private void showSnackbar(TranslateSnackbarType snackbarType) { |
| 229 if (snackbarType == TranslateSnackbarType.NEVER_TRANSLATE) { | 258 if (snackbarType == TranslateSnackbarType.NEVER_TRANSLATE) { |
| 230 createAndShowSnackbar(getContext().getString(R.string.translate_snac kbar_language_never, | 259 createAndShowSnackbar(getContext().getString(R.string.translate_snac kbar_language_never, |
| 231 mOptions.sourceLanguageName()), | 260 mOptions.sourceLanguageName()), |
| 232 Snackbar.UMA_TRANSLATE_NEVER); | 261 Snackbar.UMA_TRANSLATE_NEVER, snackbarType); |
| 233 } else if (snackbarType == TranslateSnackbarType.ALWAYS_TRANSLATE) { | 262 } else if (snackbarType == TranslateSnackbarType.ALWAYS_TRANSLATE) { |
| 234 createAndShowSnackbar( | 263 createAndShowSnackbar( |
| 235 getContext().getString(R.string.translate_snackbar_always_tr anslate, | 264 getContext().getString(R.string.translate_snackbar_always_tr anslate, |
| 236 mOptions.sourceLanguageName(), mOptions.targetLangua geName()), | 265 mOptions.sourceLanguageName(), mOptions.targetLangua geName()), |
| 237 Snackbar.UMA_TRANSLATE_ALWAYS); | 266 Snackbar.UMA_TRANSLATE_ALWAYS, snackbarType); |
| 238 } else if (snackbarType == TranslateSnackbarType.NEVER_TRANSLATE_SITE) { | 267 } else if (snackbarType == TranslateSnackbarType.NEVER_TRANSLATE_SITE) { |
| 239 createAndShowSnackbar(getContext().getString(R.string.translate_snac kbar_site_never), | 268 createAndShowSnackbar(getContext().getString(R.string.translate_snac kbar_site_never), |
| 240 Snackbar.UMA_TRANSLATE_NEVER_SITE); | 269 Snackbar.UMA_TRANSLATE_NEVER_SITE, snackbarType); |
| 241 } | 270 } |
| 242 } | 271 } |
| 243 | 272 |
| 244 private void createAndShowSnackbar(String title, int type) { | 273 private void createAndShowSnackbar(String title, int type, TranslateSnackbar Type snackbarType) { |
| 245 if (getSnackbarManager() == null) { | 274 if (getSnackbarManager() == null) { |
| 246 return; | 275 return; |
| 247 } | 276 } |
| 248 getSnackbarManager().showSnackbar(Snackbar.make(title, new TranslateSnac kbarController(), | 277 getSnackbarManager().showSnackbar( |
| 249 Snackbar.TYPE_NOTIFICA TION, type) | 278 Snackbar.make(title, new TranslateSnackbarController(snackbarTyp e), |
| 250 .setSingleLine(false)); | 279 Snackbar.TYPE_NOTIFICATION, type) |
| 280 .setSingleLine(false) | |
| 281 .setAction( | |
| 282 getContext().getString(R.string.translate_snackb ar_cancel), null)); | |
| 251 } | 283 } |
| 252 | 284 |
| 253 private native void nativeApplyStringTranslateOption( | 285 private native void nativeApplyStringTranslateOption( |
| 254 long nativeTranslateCompactInfoBar, int option, String value); | 286 long nativeTranslateCompactInfoBar, int option, String value); |
| 255 private native void nativeApplyBoolTranslateOption( | 287 private native void nativeApplyBoolTranslateOption( |
| 256 long nativeTranslateCompactInfoBar, int option, boolean value); | 288 long nativeTranslateCompactInfoBar, int option, boolean value); |
| 257 } | 289 } |
| OLD | NEW |