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.omnibox; | 5 package org.chromium.chrome.browser.omnibox; |
6 | 6 |
7 import static org.chromium.chrome.browser.toolbar.ToolbarPhone.URL_FOCUS_CHANGE_
ANIMATION_DURATION_MS; | 7 import static org.chromium.chrome.browser.toolbar.ToolbarPhone.URL_FOCUS_CHANGE_
ANIMATION_DURATION_MS; |
8 | 8 |
9 import android.Manifest; | 9 import android.Manifest; |
10 import android.animation.Animator; | 10 import android.animation.Animator; |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 import org.chromium.chrome.browser.profiles.Profile; | 73 import org.chromium.chrome.browser.profiles.Profile; |
74 import org.chromium.chrome.browser.search_engines.TemplateUrlService; | 74 import org.chromium.chrome.browser.search_engines.TemplateUrlService; |
75 import org.chromium.chrome.browser.tab.Tab; | 75 import org.chromium.chrome.browser.tab.Tab; |
76 import org.chromium.chrome.browser.toolbar.ToolbarActionModeCallback; | 76 import org.chromium.chrome.browser.toolbar.ToolbarActionModeCallback; |
77 import org.chromium.chrome.browser.toolbar.ToolbarDataProvider; | 77 import org.chromium.chrome.browser.toolbar.ToolbarDataProvider; |
78 import org.chromium.chrome.browser.toolbar.ToolbarPhone; | 78 import org.chromium.chrome.browser.toolbar.ToolbarPhone; |
79 import org.chromium.chrome.browser.util.ColorUtils; | 79 import org.chromium.chrome.browser.util.ColorUtils; |
80 import org.chromium.chrome.browser.util.FeatureUtilities; | 80 import org.chromium.chrome.browser.util.FeatureUtilities; |
81 import org.chromium.chrome.browser.util.KeyNavigationUtil; | 81 import org.chromium.chrome.browser.util.KeyNavigationUtil; |
82 import org.chromium.chrome.browser.util.ViewUtils; | 82 import org.chromium.chrome.browser.util.ViewUtils; |
| 83 import org.chromium.chrome.browser.widget.BottomSheet; |
83 import org.chromium.chrome.browser.widget.TintedImageButton; | 84 import org.chromium.chrome.browser.widget.TintedImageButton; |
84 import org.chromium.chrome.browser.widget.animation.AnimatorProperties; | |
85 import org.chromium.chrome.browser.widget.animation.CancelAwareAnimatorListener; | 85 import org.chromium.chrome.browser.widget.animation.CancelAwareAnimatorListener; |
86 import org.chromium.components.security_state.ConnectionSecurityLevel; | 86 import org.chromium.components.security_state.ConnectionSecurityLevel; |
87 import org.chromium.content_public.browser.LoadUrlParams; | 87 import org.chromium.content_public.browser.LoadUrlParams; |
88 import org.chromium.content_public.browser.WebContents; | 88 import org.chromium.content_public.browser.WebContents; |
89 import org.chromium.ui.UiUtils; | 89 import org.chromium.ui.UiUtils; |
90 import org.chromium.ui.base.DeviceFormFactor; | 90 import org.chromium.ui.base.DeviceFormFactor; |
91 import org.chromium.ui.base.PageTransition; | 91 import org.chromium.ui.base.PageTransition; |
92 import org.chromium.ui.base.WindowAndroid; | 92 import org.chromium.ui.base.WindowAndroid; |
93 import org.chromium.ui.interpolators.BakedBezierInterpolator; | 93 import org.chromium.ui.interpolators.BakedBezierInterpolator; |
94 | 94 |
(...skipping 18 matching lines...) Expand all Loading... |
113 private static final int OMNIBOX_CONTAINER_BACKGROUND_FADE_MS = 250; | 113 private static final int OMNIBOX_CONTAINER_BACKGROUND_FADE_MS = 250; |
114 | 114 |
115 // Delay showing the geolocation snackbar when the omnibox is focused until
the keyboard is | 115 // Delay showing the geolocation snackbar when the omnibox is focused until
the keyboard is |
116 // hopefully visible. | 116 // hopefully visible. |
117 private static final int GEOLOCATION_SNACKBAR_SHOW_DELAY_MS = 750; | 117 private static final int GEOLOCATION_SNACKBAR_SHOW_DELAY_MS = 750; |
118 | 118 |
119 // The minimum confidence threshold that will result in navigating directly
to a voice search | 119 // The minimum confidence threshold that will result in navigating directly
to a voice search |
120 // response (as opposed to treating it like a typed string in the Omnibox). | 120 // response (as opposed to treating it like a typed string in the Omnibox). |
121 private static final float VOICE_SEARCH_CONFIDENCE_NAVIGATE_THRESHOLD = 0.9f
; | 121 private static final float VOICE_SEARCH_CONFIDENCE_NAVIGATE_THRESHOLD = 0.9f
; |
122 | 122 |
123 private static final int CONTENT_OVERLAY_COLOR = 0xA6000000; | |
124 private static final int OMNIBOX_RESULTS_BG_COLOR = 0xFFF5F5F6; | 123 private static final int OMNIBOX_RESULTS_BG_COLOR = 0xFFF5F5F6; |
125 private static final int OMNIBOX_INCOGNITO_RESULTS_BG_COLOR = 0xFF323232; | 124 private static final int OMNIBOX_INCOGNITO_RESULTS_BG_COLOR = 0xFF323232; |
126 | 125 |
127 /** | 126 /** |
128 * URI schemes that ContentView can handle. | 127 * URI schemes that ContentView can handle. |
129 * | 128 * |
130 * Copied from UrlUtilities.java. UrlUtilities uses a URI to check for sche
mes, which | 129 * Copied from UrlUtilities.java. UrlUtilities uses a URI to check for sche
mes, which |
131 * is more strict than Uri and causes the path stripping to fail. | 130 * is more strict than Uri and causes the path stripping to fail. |
132 * | 131 * |
133 * The following additions have been made: "chrome", "ftp". | 132 * The following additions have been made: "chrome", "ftp". |
134 */ | 133 */ |
135 private static final HashSet<String> ACCEPTED_SCHEMES = CollectionUtil.newHa
shSet( | 134 private static final HashSet<String> ACCEPTED_SCHEMES = CollectionUtil.newHa
shSet( |
136 "about", "data", "file", "ftp", "http", "https", "inline", "javascri
pt", "chrome"); | 135 "about", "data", "file", "ftp", "http", "https", "inline", "javascri
pt", "chrome"); |
137 private static final HashSet<String> UNSUPPORTED_SCHEMES_TO_SPLIT = | 136 private static final HashSet<String> UNSUPPORTED_SCHEMES_TO_SPLIT = |
138 CollectionUtil.newHashSet("file", "javascript", "data"); | 137 CollectionUtil.newHashSet("file", "javascript", "data"); |
139 | 138 |
140 protected ImageView mNavigationButton; | 139 protected ImageView mNavigationButton; |
141 protected TintedImageButton mSecurityButton; | 140 protected TintedImageButton mSecurityButton; |
142 protected TextView mVerboseStatusTextView; | 141 protected TextView mVerboseStatusTextView; |
143 protected TintedImageButton mDeleteButton; | 142 protected TintedImageButton mDeleteButton; |
144 protected TintedImageButton mMicButton; | 143 protected TintedImageButton mMicButton; |
145 protected UrlBar mUrlBar; | 144 protected UrlBar mUrlBar; |
146 | 145 |
| 146 /** A handle to the bottom sheet for chrome home. */ |
| 147 private BottomSheet mBottomSheet; |
| 148 |
147 private AutocompleteController mAutocomplete; | 149 private AutocompleteController mAutocomplete; |
148 | 150 |
149 protected ToolbarDataProvider mToolbarDataProvider; | 151 protected ToolbarDataProvider mToolbarDataProvider; |
150 private UrlFocusChangeListener mUrlFocusChangeListener; | 152 private UrlFocusChangeListener mUrlFocusChangeListener; |
151 | 153 |
152 protected boolean mNativeInitialized; | 154 protected boolean mNativeInitialized; |
153 | 155 |
154 private final List<Runnable> mDeferredNativeRunnables = new ArrayList<Runnab
le>(); | 156 private final List<Runnable> mDeferredNativeRunnables = new ArrayList<Runnab
le>(); |
155 | 157 |
156 // The type of the navigation button currently showing. | 158 // The type of the navigation button currently showing. |
(...skipping 17 matching lines...) Expand all Loading... |
174 private boolean mIgnoreOmniboxItemSelection = true; | 176 private boolean mIgnoreOmniboxItemSelection = true; |
175 | 177 |
176 private String mOriginalUrl = ""; | 178 private String mOriginalUrl = ""; |
177 | 179 |
178 private WindowAndroid mWindowAndroid; | 180 private WindowAndroid mWindowAndroid; |
179 private WindowDelegate mWindowDelegate; | 181 private WindowDelegate mWindowDelegate; |
180 | 182 |
181 private Runnable mRequestSuggestions; | 183 private Runnable mRequestSuggestions; |
182 | 184 |
183 private ViewGroup mOmniboxResultsContainer; | 185 private ViewGroup mOmniboxResultsContainer; |
184 private ObjectAnimator mFadeInOmniboxBackgroundAnimator; | 186 private View mFadingView; |
185 private ObjectAnimator mFadeOutOmniboxBackgroundAnimator; | 187 private ObjectAnimator mOverlayFadeInAnimator; |
186 private Animator mOmniboxBackgroundAnimator; | 188 private ObjectAnimator mOverlayFadeOutAnimator; |
| 189 private Animator mOverlayAnimator; |
187 | 190 |
188 private boolean mSuggestionsShown; | 191 private boolean mSuggestionsShown; |
189 private boolean mUrlHasFocus; | 192 private boolean mUrlHasFocus; |
190 protected boolean mUrlFocusChangeInProgress; | 193 protected boolean mUrlFocusChangeInProgress; |
191 private boolean mUrlFocusedFromFakebox; | 194 private boolean mUrlFocusedFromFakebox; |
192 private boolean mUrlFocusedWithoutAnimations; | 195 private boolean mUrlFocusedWithoutAnimations; |
193 | 196 |
194 private boolean mVoiceSearchEnabled; | 197 private boolean mVoiceSearchEnabled; |
195 | 198 |
196 // Set to true when the user has started typing new input in the omnibox, se
t to false | 199 // Set to true when the user has started typing new input in the omnibox, se
t to false |
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1034 | 1037 |
1035 /** | 1038 /** |
1036 * Handle and run any necessary animations that are triggered off focusing t
he UrlBar. | 1039 * Handle and run any necessary animations that are triggered off focusing t
he UrlBar. |
1037 * @param hasFocus Whether focus was gained. | 1040 * @param hasFocus Whether focus was gained. |
1038 */ | 1041 */ |
1039 protected void handleUrlFocusAnimation(boolean hasFocus) { | 1042 protected void handleUrlFocusAnimation(boolean hasFocus) { |
1040 if (hasFocus) mUrlFocusedWithoutAnimations = false; | 1043 if (hasFocus) mUrlFocusedWithoutAnimations = false; |
1041 if (mUrlFocusChangeListener != null) mUrlFocusChangeListener.onUrlFocusC
hange(hasFocus); | 1044 if (mUrlFocusChangeListener != null) mUrlFocusChangeListener.onUrlFocusC
hange(hasFocus); |
1042 | 1045 |
1043 updateOmniboxResultsContainer(); | 1046 updateOmniboxResultsContainer(); |
1044 if (hasFocus) updateOmniboxResultsContainerBackground(true); | 1047 if (hasFocus) updateFadingBackgroundView(true); |
1045 } | 1048 } |
1046 | 1049 |
1047 /** | 1050 /** |
1048 * Make a zero suggest request if native is loaded, the URL bar has focus, a
nd the | 1051 * Make a zero suggest request if native is loaded, the URL bar has focus, a
nd the |
1049 * current tab is not incognito. | 1052 * current tab is not incognito. |
1050 */ | 1053 */ |
1051 private void startZeroSuggest() { | 1054 private void startZeroSuggest() { |
1052 // Reset "edited" state in the omnibox if zero suggest is triggered -- n
ew edits | 1055 // Reset "edited" state in the omnibox if zero suggest is triggered -- n
ew edits |
1053 // now count as a new session. | 1056 // now count as a new session. |
1054 mHasStartedNewOmniboxEditSession = false; | 1057 mHasStartedNewOmniboxEditSession = false; |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1157 | 1160 |
1158 mUrlBar.setOnFocusChangeListener(new View.OnFocusChangeListener() { | 1161 mUrlBar.setOnFocusChangeListener(new View.OnFocusChangeListener() { |
1159 @Override | 1162 @Override |
1160 public void onFocusChange(View v, final boolean hasFocus) { | 1163 public void onFocusChange(View v, final boolean hasFocus) { |
1161 onUrlFocusChange(hasFocus); | 1164 onUrlFocusChange(hasFocus); |
1162 } | 1165 } |
1163 }); | 1166 }); |
1164 } | 1167 } |
1165 | 1168 |
1166 @Override | 1169 @Override |
| 1170 public void setBottomSheet(BottomSheet sheet) { |
| 1171 mBottomSheet = sheet; |
| 1172 } |
| 1173 |
| 1174 @Override |
1167 public void setMenuButtonHelper(AppMenuButtonHelper helper) { } | 1175 public void setMenuButtonHelper(AppMenuButtonHelper helper) { } |
1168 | 1176 |
1169 @Override | 1177 @Override |
1170 public View getMenuAnchor() { | 1178 public View getMenuAnchor() { |
1171 return null; | 1179 return null; |
1172 } | 1180 } |
1173 | 1181 |
1174 /** | 1182 /** |
1175 * Sets the URL focus change listner that will be notified when the URL gain
s or loses focus. | 1183 * Sets the URL focus change listner that will be notified when the URL gain
s or loses focus. |
1176 * @param listener The listener to be registered. | 1184 * @param listener The listener to be registered. |
(...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1872 if (currentTab != null && currentTab.getWebContents() != null) { | 1880 if (currentTab != null && currentTab.getWebContents() != null) { |
1873 Activity activity = currentTab.getWindowAndroid().getActivity().
get(); | 1881 Activity activity = currentTab.getWindowAndroid().getActivity().
get(); |
1874 if (activity != null) { | 1882 if (activity != null) { |
1875 WebsiteSettingsPopup.show( | 1883 WebsiteSettingsPopup.show( |
1876 activity, currentTab, null, WebsiteSettingsPopup.OPE
NED_FROM_TOOLBAR); | 1884 activity, currentTab, null, WebsiteSettingsPopup.OPE
NED_FROM_TOOLBAR); |
1877 } | 1885 } |
1878 } | 1886 } |
1879 } else if (v == mMicButton) { | 1887 } else if (v == mMicButton) { |
1880 RecordUserAction.record("MobileOmniboxVoiceSearch"); | 1888 RecordUserAction.record("MobileOmniboxVoiceSearch"); |
1881 startVoiceRecognition(); | 1889 startVoiceRecognition(); |
1882 } else if (v == mOmniboxResultsContainer) { | 1890 } else if (v == mFadingView) { |
1883 // This will only be triggered when no suggestion items are selected
in the container. | 1891 // This will only be triggered when no suggestion items are selected
in the container. |
1884 setUrlBarFocus(false); | 1892 setUrlBarFocus(false); |
1885 updateOmniboxResultsContainerBackground(false); | 1893 updateFadingBackgroundView(false); |
1886 } | 1894 } |
1887 } | 1895 } |
1888 | 1896 |
1889 @Override | 1897 @Override |
1890 public void onSuggestionsReceived(List<OmniboxSuggestion> newSuggestions, | 1898 public void onSuggestionsReceived(List<OmniboxSuggestion> newSuggestions, |
1891 String inlineAutocompleteText) { | 1899 String inlineAutocompleteText) { |
1892 // This is a callback from a listener that is set up by onNativeLibraryR
eady, | 1900 // This is a callback from a listener that is set up by onNativeLibraryR
eady, |
1893 // so can only be called once the native side is set up. | 1901 // so can only be called once the native side is set up. |
1894 assert mNativeInitialized : "Suggestions received before native side int
ialialized"; | 1902 assert mNativeInitialized : "Suggestions received before native side int
ialialized"; |
1895 | 1903 |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2182 */ | 2190 */ |
2183 @Override | 2191 @Override |
2184 public Tab getCurrentTab() { | 2192 public Tab getCurrentTab() { |
2185 if (mToolbarDataProvider == null) return null; | 2193 if (mToolbarDataProvider == null) return null; |
2186 return mToolbarDataProvider.getTab(); | 2194 return mToolbarDataProvider.getTab(); |
2187 } | 2195 } |
2188 | 2196 |
2189 private void initOmniboxResultsContainer() { | 2197 private void initOmniboxResultsContainer() { |
2190 if (mOmniboxResultsContainer != null) return; | 2198 if (mOmniboxResultsContainer != null) return; |
2191 | 2199 |
2192 ViewStub overlayStub = | 2200 // Use the omnibox results container in the bottom sheet if it exists. |
2193 (ViewStub) getRootView().findViewById(R.id.omnibox_results_conta
iner_stub); | 2201 int omniboxResultsContainerId = R.id.omnibox_results_container_stub; |
| 2202 if (mBottomSheet != null) { |
| 2203 omniboxResultsContainerId = R.id.bottom_omnibox_results_container_st
ub; |
| 2204 } |
| 2205 |
| 2206 ViewStub overlayStub = (ViewStub) getRootView().findViewById(omniboxResu
ltsContainerId); |
2194 mOmniboxResultsContainer = (ViewGroup) overlayStub.inflate(); | 2207 mOmniboxResultsContainer = (ViewGroup) overlayStub.inflate(); |
2195 mOmniboxResultsContainer.setBackgroundColor(CONTENT_OVERLAY_COLOR); | |
2196 mOmniboxResultsContainer.setOnClickListener(this); | |
2197 } | 2208 } |
2198 | 2209 |
2199 private void updateOmniboxResultsContainer() { | 2210 private void updateOmniboxResultsContainer() { |
2200 if (mSuggestionsShown || mUrlHasFocus) { | 2211 if (mSuggestionsShown || mUrlHasFocus) { |
2201 initOmniboxResultsContainer(); | 2212 initOmniboxResultsContainer(); |
2202 updateOmniboxResultsContainerVisibility(true); | 2213 updateOmniboxResultsContainerVisibility(true); |
2203 } else if (mOmniboxResultsContainer != null) { | 2214 } else if (mOmniboxResultsContainer != null) { |
2204 updateOmniboxResultsContainerBackground(false); | 2215 updateFadingBackgroundView(false); |
2205 } | 2216 } |
2206 } | 2217 } |
2207 | 2218 |
2208 private void updateOmniboxResultsContainerVisibility(boolean visible) { | 2219 private void updateOmniboxResultsContainerVisibility(boolean visible) { |
2209 boolean currentlyVisible = mOmniboxResultsContainer.getVisibility() == V
ISIBLE; | 2220 boolean currentlyVisible = mOmniboxResultsContainer.getVisibility() == V
ISIBLE; |
2210 if (currentlyVisible == visible) return; | 2221 if (currentlyVisible == visible) return; |
2211 | 2222 |
2212 ChromeActivity activity = (ChromeActivity) mWindowAndroid.getActivity().
get(); | 2223 ChromeActivity activity = (ChromeActivity) mWindowAndroid.getActivity().
get(); |
2213 | 2224 |
2214 if (visible) { | 2225 if (visible) { |
2215 mOmniboxResultsContainer.setVisibility(VISIBLE); | 2226 mOmniboxResultsContainer.setVisibility(VISIBLE); |
2216 if (activity != null) activity.addViewObscuringAllTabs(mOmniboxResul
tsContainer); | 2227 if (activity != null) activity.addViewObscuringAllTabs(mFadingView); |
2217 } else { | 2228 } else { |
2218 mOmniboxResultsContainer.setVisibility(INVISIBLE); | 2229 mOmniboxResultsContainer.setVisibility(INVISIBLE); |
2219 if (activity != null) activity.removeViewObscuringAllTabs(mOmniboxRe
sultsContainer); | 2230 if (activity != null) activity.removeViewObscuringAllTabs(mFadingVie
w); |
2220 } | 2231 } |
2221 } | 2232 } |
2222 | 2233 |
2223 /** | 2234 /** |
2224 * Set the background of the omnibox results container. | 2235 * Initialize the fading background for when the omnibox is focused. |
| 2236 */ |
| 2237 private void initFadingOverlayView() { |
| 2238 mFadingView = getRootView().findViewById(R.id.fading_focus_target); |
| 2239 mFadingView.setAlpha(0.0f); |
| 2240 mFadingView.setOnClickListener(this); |
| 2241 } |
| 2242 |
| 2243 /** |
| 2244 * Update the fading background view that shows when the omnibox is focused. |
2225 * @param visible Whether the background should be made visible. | 2245 * @param visible Whether the background should be made visible. |
2226 */ | 2246 */ |
2227 private void updateOmniboxResultsContainerBackground(boolean visible) { | 2247 private void updateFadingBackgroundView(boolean visible) { |
2228 if (getToolbarDataProvider() == null) return; | 2248 if (getToolbarDataProvider() == null) return; |
2229 | 2249 |
| 2250 if (mFadingView == null) initFadingOverlayView(); |
| 2251 |
2230 NewTabPage ntp = getToolbarDataProvider().getNewTabPageForCurrentTab(); | 2252 NewTabPage ntp = getToolbarDataProvider().getNewTabPageForCurrentTab(); |
2231 boolean locationBarShownInNTP = ntp != null && ntp.isLocationBarShownInN
TP(); | 2253 boolean locationBarShownInNTP = ntp != null && ntp.isLocationBarShownInN
TP(); |
2232 if (visible) { | 2254 |
2233 if (locationBarShownInNTP) { | 2255 if (visible && !locationBarShownInNTP) { |
2234 mOmniboxResultsContainer.getBackground().setAlpha(0); | 2256 // If the location bar is shown in the NTP, the toolbar will eventua
lly trigger a |
2235 } else { | 2257 // fade in. |
2236 fadeInOmniboxResultsContainerBackground(); | 2258 showFadingOverlay(); |
2237 } | |
2238 } else { | 2259 } else { |
2239 if (locationBarShownInNTP) { | 2260 hideFadingOverlay(!locationBarShownInNTP); |
2240 updateOmniboxResultsContainerVisibility(false); | |
2241 } else { | |
2242 fadeOutOmniboxResultsContainerBackground(); | |
2243 } | |
2244 } | 2261 } |
2245 } | 2262 } |
2246 | 2263 |
2247 /** | 2264 /** |
2248 * Trigger a fade in of the omnibox results background. | 2265 * Trigger a fade in of the omnibox results background creating a new animat
ion if necessary. |
2249 */ | 2266 */ |
2250 protected void fadeInOmniboxResultsContainerBackground() { | 2267 protected void showFadingOverlay() { |
2251 if (mFadeInOmniboxBackgroundAnimator == null) { | 2268 if (mOverlayFadeInAnimator == null) { |
2252 mFadeInOmniboxBackgroundAnimator = ObjectAnimator.ofInt( | 2269 mOverlayFadeInAnimator = ObjectAnimator.ofFloat(mFadingView, ALPHA,
1f); |
2253 getRootView().findViewById(R.id.omnibox_results_container).g
etBackground(), | 2270 mOverlayFadeInAnimator.setDuration(OMNIBOX_CONTAINER_BACKGROUND_FADE
_MS); |
2254 AnimatorProperties.DRAWABLE_ALPHA_PROPERTY, 0, 255); | 2271 mOverlayFadeInAnimator.setInterpolator( |
2255 mFadeInOmniboxBackgroundAnimator.setDuration(OMNIBOX_CONTAINER_BACKG
ROUND_FADE_MS); | |
2256 mFadeInOmniboxBackgroundAnimator.setInterpolator( | |
2257 BakedBezierInterpolator.FADE_IN_CURVE); | 2272 BakedBezierInterpolator.FADE_IN_CURVE); |
2258 } | 2273 } |
2259 runOmniboxResultsFadeAnimation(mFadeInOmniboxBackgroundAnimator); | 2274 |
| 2275 mFadingView.setVisibility(View.VISIBLE); |
| 2276 runFadeOverlayAnimation(mOverlayFadeInAnimator); |
2260 } | 2277 } |
2261 | 2278 |
2262 private void fadeOutOmniboxResultsContainerBackground() { | 2279 /** |
2263 if (mFadeOutOmniboxBackgroundAnimator == null) { | 2280 * Trigger a fade out of the omnibox results background creating a new anima
tion if necessary. |
2264 mFadeOutOmniboxBackgroundAnimator = ObjectAnimator.ofInt( | 2281 */ |
2265 getRootView().findViewById(R.id.omnibox_results_container).g
etBackground(), | 2282 private void hideFadingOverlay(boolean fadeOut) { |
2266 AnimatorProperties.DRAWABLE_ALPHA_PROPERTY, 255, 0); | 2283 if (mOverlayFadeOutAnimator == null) { |
2267 mFadeOutOmniboxBackgroundAnimator.setDuration(OMNIBOX_CONTAINER_BACK
GROUND_FADE_MS); | 2284 mOverlayFadeOutAnimator = ObjectAnimator.ofFloat(mFadingView, ALPHA,
0f); |
2268 mFadeOutOmniboxBackgroundAnimator.setInterpolator( | 2285 mOverlayFadeOutAnimator.setDuration(OMNIBOX_CONTAINER_BACKGROUND_FAD
E_MS); |
2269 BakedBezierInterpolator.FADE_OUT_CURVE); | 2286 mOverlayFadeOutAnimator.setInterpolator(BakedBezierInterpolator.FADE
_OUT_CURVE); |
2270 mFadeOutOmniboxBackgroundAnimator.addListener(new CancelAwareAnimato
rListener() { | 2287 mOverlayFadeOutAnimator.addListener(new CancelAwareAnimatorListener(
) { |
2271 @Override | 2288 @Override |
2272 public void onEnd(Animator animator) { | 2289 public void onEnd(Animator animator) { |
2273 updateOmniboxResultsContainerVisibility(false); | 2290 mFadingView.setVisibility(View.GONE); |
| 2291 onFadingOverlayHidden(); |
2274 } | 2292 } |
2275 }); | 2293 }); |
2276 } | 2294 } |
2277 runOmniboxResultsFadeAnimation(mFadeOutOmniboxBackgroundAnimator); | 2295 |
| 2296 runFadeOverlayAnimation(mOverlayFadeOutAnimator); |
| 2297 if (!fadeOut) mOverlayFadeOutAnimator.end(); |
2278 } | 2298 } |
2279 | 2299 |
2280 private void runOmniboxResultsFadeAnimation(Animator fadeAnimation) { | 2300 /** |
2281 if (mOmniboxBackgroundAnimator == fadeAnimation | 2301 * A notification that the fading overlay view is completely hidden. |
2282 && mOmniboxBackgroundAnimator.isRunning()) { | 2302 */ |
| 2303 private void onFadingOverlayHidden() { |
| 2304 updateOmniboxResultsContainerVisibility(false); |
| 2305 } |
| 2306 |
| 2307 private void runFadeOverlayAnimation(Animator fadeAnimation) { |
| 2308 if (mOverlayAnimator == fadeAnimation && mOverlayAnimator.isRunning()) { |
2283 return; | 2309 return; |
2284 } else if (mOmniboxBackgroundAnimator != null) { | 2310 } else if (mOverlayAnimator != null) { |
2285 mOmniboxBackgroundAnimator.cancel(); | 2311 mOverlayAnimator.cancel(); |
2286 } | 2312 } |
2287 mOmniboxBackgroundAnimator = fadeAnimation; | 2313 mOverlayAnimator = fadeAnimation; |
2288 mOmniboxBackgroundAnimator.start(); | 2314 mOverlayAnimator.start(); |
2289 } | 2315 } |
2290 | 2316 |
2291 @Override | 2317 @Override |
2292 public boolean isVoiceSearchEnabled() { | 2318 public boolean isVoiceSearchEnabled() { |
2293 if (mToolbarDataProvider == null) return false; | 2319 if (mToolbarDataProvider == null) return false; |
2294 if (mToolbarDataProvider.isIncognito()) return false; | 2320 if (mToolbarDataProvider.isIncognito()) return false; |
2295 if (mWindowAndroid == null) return false; | 2321 if (mWindowAndroid == null) return false; |
2296 | 2322 |
2297 if (!mWindowAndroid.hasPermission(Manifest.permission.RECORD_AUDIO) | 2323 if (!mWindowAndroid.hasPermission(Manifest.permission.RECORD_AUDIO) |
2298 && !mWindowAndroid.canRequestPermission(Manifest.permission.RECO
RD_AUDIO)) { | 2324 && !mWindowAndroid.canRequestPermission(Manifest.permission.RECO
RD_AUDIO)) { |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2459 public View getContainerView() { | 2485 public View getContainerView() { |
2460 return this; | 2486 return this; |
2461 } | 2487 } |
2462 | 2488 |
2463 @Override | 2489 @Override |
2464 public void setTitleToPageTitle() { } | 2490 public void setTitleToPageTitle() { } |
2465 | 2491 |
2466 @Override | 2492 @Override |
2467 public void setShowTitle(boolean showTitle) { } | 2493 public void setShowTitle(boolean showTitle) { } |
2468 } | 2494 } |
OLD | NEW |