| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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.contextualsearch; | 5 package org.chromium.chrome.browser.contextualsearch; |
| 6 | 6 |
| 7 import android.app.Activity; | 7 import android.app.Activity; |
| 8 import android.content.Context; | 8 import android.content.Context; |
| 9 import android.text.TextUtils; | 9 import android.text.TextUtils; |
| 10 import android.view.View; | 10 import android.view.View; |
| (...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 485 mNetworkCommunicator.getBasePageUrl())) { | 485 mNetworkCommunicator.getBasePageUrl())) { |
| 486 mNetworkCommunicator.startSearchTermResolutionRequest( | 486 mNetworkCommunicator.startSearchTermResolutionRequest( |
| 487 mSelectionController.getSelectedText()); | 487 mSelectionController.getSelectedText()); |
| 488 didRequestSurroundings = true; | 488 didRequestSurroundings = true; |
| 489 // Cache the target languages in case they are needed for translatio
n. | 489 // Cache the target languages in case they are needed for translatio
n. |
| 490 if (!mPolicy.disableForceTranslationOnebox()) getReadableLanguages()
; | 490 if (!mPolicy.disableForceTranslationOnebox()) getReadableLanguages()
; |
| 491 } else { | 491 } else { |
| 492 boolean shouldPrefetch = mPolicy.shouldPrefetchSearchResult(isTap); | 492 boolean shouldPrefetch = mPolicy.shouldPrefetchSearchResult(isTap); |
| 493 mSearchRequest = new ContextualSearchRequest(mSelectionController.ge
tSelectedText(), | 493 mSearchRequest = new ContextualSearchRequest(mSelectionController.ge
tSelectedText(), |
| 494 null, shouldPrefetch); | 494 null, shouldPrefetch); |
| 495 // TODO(donnd): figure out a way to do translation on long-press sel
ections. | 495 forceAutoDetectTranslateUnlessDisabled(mSearchRequest); |
| 496 mDidStartLoadingResolvedSearchRequest = false; | 496 mDidStartLoadingResolvedSearchRequest = false; |
| 497 mSearchPanel.displaySearchTerm(mSelectionController.getSelectedText(
)); | 497 mSearchPanel.displaySearchTerm(mSelectionController.getSelectedText(
)); |
| 498 if (shouldPrefetch) loadSearchUrl(); | 498 if (shouldPrefetch) loadSearchUrl(); |
| 499 } | 499 } |
| 500 | 500 |
| 501 if (!didRequestSurroundings) { | 501 if (!didRequestSurroundings) { |
| 502 // Gather surrounding text for Icing integration, which will make th
e selection and | 502 // Gather surrounding text for Icing integration, which will make th
e selection and |
| 503 // a shorter version of the surroundings available for Conversationa
l Search. | 503 // a shorter version of the surroundings available for Conversationa
l Search. |
| 504 // Although the surroundings are extracted, they will not be sent to
the server as | 504 // Although the surroundings are extracted, they will not be sent to
the server as |
| 505 // part of search term resolution, just sent to Icing which keeps th
em local until | 505 // part of search term resolution, just sent to Icing which keeps th
em local until |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 731 searchTerm = mSelectionController.getSelectedText(); | 731 searchTerm = mSelectionController.getSelectedText(); |
| 732 alternateTerm = null; | 732 alternateTerm = null; |
| 733 doPreventPreload = true; | 733 doPreventPreload = true; |
| 734 } | 734 } |
| 735 if (!TextUtils.isEmpty(searchTerm)) { | 735 if (!TextUtils.isEmpty(searchTerm)) { |
| 736 // TODO(donnd): Instead of preloading, we should prefetch (ie the UR
L should not | 736 // TODO(donnd): Instead of preloading, we should prefetch (ie the UR
L should not |
| 737 // appear in the user's history until the user views it). See crbug
.com/406446. | 737 // appear in the user's history until the user views it). See crbug
.com/406446. |
| 738 boolean shouldPreload = !doPreventPreload && mPolicy.shouldPrefetchS
earchResult(true); | 738 boolean shouldPreload = !doPreventPreload && mPolicy.shouldPrefetchS
earchResult(true); |
| 739 mSearchRequest = new ContextualSearchRequest(searchTerm, alternateTe
rm, shouldPreload); | 739 mSearchRequest = new ContextualSearchRequest(searchTerm, alternateTe
rm, shouldPreload); |
| 740 // Trigger translation, if enabled. | 740 // Trigger translation, if enabled. |
| 741 if (!contextLanguage.isEmpty()) { | 741 forceTranslateIfNeeded(mSearchRequest, contextLanguage); |
| 742 if (mPolicy.needsTranslation(contextLanguage, getReadableLanguag
es())) { | |
| 743 boolean doForceTranslate = !mPolicy.disableForceTranslationO
nebox(); | |
| 744 if (doForceTranslate) { | |
| 745 mSearchRequest.forceTranslation(contextLanguage, | |
| 746 mPolicy.bestTargetLanguage(getWritableLanguages(
))); | |
| 747 } | |
| 748 ContextualSearchUma.logTranslateOnebox(doForceTranslate); | |
| 749 } | |
| 750 } | |
| 751 mDidStartLoadingResolvedSearchRequest = false; | 742 mDidStartLoadingResolvedSearchRequest = false; |
| 752 if (mSearchPanel.isContentShowing()) { | 743 if (mSearchPanel.isContentShowing()) { |
| 753 mSearchRequest.setNormalPriority(); | 744 mSearchRequest.setNormalPriority(); |
| 754 } | 745 } |
| 755 if (mSearchPanel.isContentShowing() || shouldPreload) { | 746 if (mSearchPanel.isContentShowing() || shouldPreload) { |
| 756 loadSearchUrl(); | 747 loadSearchUrl(); |
| 757 } | 748 } |
| 758 mPolicy.logSearchTermResolutionDetails(searchTerm, | 749 mPolicy.logSearchTermResolutionDetails(searchTerm, |
| 759 mNetworkCommunicator.getBasePageUrl()); | 750 mNetworkCommunicator.getBasePageUrl()); |
| 760 } | 751 } |
| (...skipping 29 matching lines...) Expand all Loading... |
| 790 */ | 781 */ |
| 791 private boolean isTapSupported() { | 782 private boolean isTapSupported() { |
| 792 // Base page just started navigating away, so taps should be ignored. | 783 // Base page just started navigating away, so taps should be ignored. |
| 793 if (mDidBasePageLoadJustStart) return false; | 784 if (mDidBasePageLoadJustStart) return false; |
| 794 | 785 |
| 795 return mPolicy.isTapSupported(); | 786 return mPolicy.isTapSupported(); |
| 796 } | 787 } |
| 797 | 788 |
| 798 // =========================================================================
=================== | 789 // =========================================================================
=================== |
| 799 // Translation support | 790 // Translation support |
| 791 // TODO(donnd): move to a separate file. |
| 800 // =========================================================================
=================== | 792 // =========================================================================
=================== |
| 801 | 793 |
| 802 /** | 794 /** |
| 803 * Gets the list of readable languages for the current user, with the first | 795 * Gets the list of readable languages for the current user, with the first |
| 804 * item in the list being the user's primary language. | 796 * item in the list being the user's primary language. |
| 805 * We assume that the user can read all languages that they can write. | 797 * We assume that the user can read all languages that they can write. |
| 806 * @return The {@link List} of languages the user understands with their pri
mary language first. | 798 * @return The {@link List} of languages the user understands with their pri
mary language first. |
| 807 */ | 799 */ |
| 808 private List<String> getReadableLanguages() { | 800 private List<String> getReadableLanguages() { |
| 809 // May be cached. | 801 // May be cached. |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 864 * @return The given locale as a language code. | 856 * @return The given locale as a language code. |
| 865 */ | 857 */ |
| 866 private String trimLocaleToLanguage(String locale) { | 858 private String trimLocaleToLanguage(String locale) { |
| 867 // TODO(donnd): use getScript or getLanguageTag (both API 21), or some o
ther standard way to | 859 // TODO(donnd): use getScript or getLanguageTag (both API 21), or some o
ther standard way to |
| 868 // strip the country, instead of hard-coding the two character language
code. | 860 // strip the country, instead of hard-coding the two character language
code. |
| 869 // TODO(donnd): Shouldn't getLanguage() do this? | 861 // TODO(donnd): Shouldn't getLanguage() do this? |
| 870 String trimmedLocale = locale.substring(0, 2); | 862 String trimmedLocale = locale.substring(0, 2); |
| 871 return new Locale(trimmedLocale).getLanguage(); | 863 return new Locale(trimmedLocale).getLanguage(); |
| 872 } | 864 } |
| 873 | 865 |
| 866 /** |
| 867 * Force translation from the given language for the current search request, |
| 868 * unless disabled by experiment. Also log whenever conditions are right to
translate. |
| 869 * @param searchRequest The search request to force translation upon. |
| 870 * @param sourceLanguage The language to translate from, or an empty string
if not known. |
| 871 */ |
| 872 private void forceTranslateIfNeeded(ContextualSearchRequest searchRequest, |
| 873 String sourceLanguage) { |
| 874 if (!TextUtils.isEmpty(sourceLanguage)) { |
| 875 if (mPolicy.needsTranslation(sourceLanguage, getReadableLanguages())
) { |
| 876 boolean doForceTranslate = !mPolicy.disableForceTranslationOnebo
x(); |
| 877 if (doForceTranslate && searchRequest != null) { |
| 878 searchRequest.forceTranslation(sourceLanguage, |
| 879 mPolicy.bestTargetLanguage(getWritableLanguages())); |
| 880 } |
| 881 // Log that conditions were right for translation, even though i
t may be disabled |
| 882 // for an experiment so we can compare with the counter factual
data. |
| 883 ContextualSearchUma.logTranslateOnebox(doForceTranslate); |
| 884 } |
| 885 } |
| 886 } |
| 887 |
| 888 /** |
| 889 * Force auto-detect translation for the current search request unless disab
led by experiment. |
| 890 * Also log that conditions are right to translate. |
| 891 * @param searchRequest The search request to force translation upon. |
| 892 */ |
| 893 private void forceAutoDetectTranslateUnlessDisabled(ContextualSearchRequest
searchRequest) { |
| 894 // Always trigger translation using auto-detect when we're not resolving
, |
| 895 // unless disabled by policy. |
| 896 boolean shouldAutoDetectTranslate = !mPolicy.disableAutoDetectTranslatio
nOnebox(); |
| 897 if (shouldAutoDetectTranslate && searchRequest != null) { |
| 898 // The translation one-box won't actually show when the source text
ends up being |
| 899 // the same as the target text, so we err on over-triggering. |
| 900 searchRequest.forceAutoDetectTranslation( |
| 901 mPolicy.bestTargetLanguage(getWritableLanguages())); |
| 902 } |
| 903 // Log that conditions were right for translation, even though it may be
disabled |
| 904 // for an experiment so we can compare with the counter factual data. |
| 905 ContextualSearchUma.logTranslateOnebox(shouldAutoDetectTranslate); |
| 906 } |
| 907 |
| 874 // =========================================================================
=================== | 908 // =========================================================================
=================== |
| 875 // OverlayContentDelegate | 909 // OverlayContentDelegate |
| 876 // =========================================================================
=================== | 910 // =========================================================================
=================== |
| 877 | 911 |
| 878 @Override | 912 @Override |
| 879 public OverlayContentDelegate getOverlayContentDelegate() { | 913 public OverlayContentDelegate getOverlayContentDelegate() { |
| 880 return new SearchOverlayContentDelegate(); | 914 return new SearchOverlayContentDelegate(); |
| 881 } | 915 } |
| 882 | 916 |
| 883 /** | 917 /** |
| (...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1293 private native void nativeDestroy(long nativeContextualSearchManager); | 1327 private native void nativeDestroy(long nativeContextualSearchManager); |
| 1294 private native void nativeStartSearchTermResolutionRequest(long nativeContex
tualSearchManager, | 1328 private native void nativeStartSearchTermResolutionRequest(long nativeContex
tualSearchManager, |
| 1295 String selection, boolean useResolvedSearchTerm, ContentViewCore bas
eContentViewCore, | 1329 String selection, boolean useResolvedSearchTerm, ContentViewCore bas
eContentViewCore, |
| 1296 boolean maySendBasePageUrl); | 1330 boolean maySendBasePageUrl); |
| 1297 private native void nativeGatherSurroundingText(long nativeContextualSearchM
anager, | 1331 private native void nativeGatherSurroundingText(long nativeContextualSearchM
anager, |
| 1298 String selection, boolean useResolvedSearchTerm, ContentViewCore bas
eContentViewCore, | 1332 String selection, boolean useResolvedSearchTerm, ContentViewCore bas
eContentViewCore, |
| 1299 boolean maySendBasePageUrl); | 1333 boolean maySendBasePageUrl); |
| 1300 private native String nativeGetTargetLanguage(long nativeContextualSearchMan
ager); | 1334 private native String nativeGetTargetLanguage(long nativeContextualSearchMan
ager); |
| 1301 private native String nativeGetAcceptLanguages(long nativeContextualSearchMa
nager); | 1335 private native String nativeGetAcceptLanguages(long nativeContextualSearchMa
nager); |
| 1302 } | 1336 } |
| OLD | NEW |