[go: nahoru, domu]

blob: 21a3995040a57d4d651dfa6b1bfad501d1db4275 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.features.tasks;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.FAKE_SEARCH_BOX_CLICK_LISTENER;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.FAKE_SEARCH_BOX_TEXT_WATCHER;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.INCOGNITO_COOKIE_CONTROLS_ICON_CLICK_LISTENER;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.INCOGNITO_COOKIE_CONTROLS_MANAGER;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.INCOGNITO_COOKIE_CONTROLS_TOGGLE_CHECKED;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.INCOGNITO_COOKIE_CONTROLS_TOGGLE_CHECKED_LISTENER;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.INCOGNITO_COOKIE_CONTROLS_TOGGLE_ENFORCEMENT;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.INCOGNITO_LEARN_MORE_CLICK_LISTENER;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.IS_FAKE_SEARCH_BOX_VISIBLE;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.IS_LENS_BUTTON_VISIBLE;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.IS_SURFACE_BODY_VISIBLE;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.IS_VOICE_RECOGNITION_BUTTON_VISIBLE;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.LENS_BUTTON_CLICK_LISTENER;
import static org.chromium.chrome.features.tasks.TasksSurfaceProperties.VOICE_SEARCH_BUTTON_CLICK_LISTENER;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import androidx.annotation.Nullable;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.browser.feed.FeedReliabilityLogger;
import org.chromium.chrome.browser.lens.LensEntryPoint;
import org.chromium.chrome.browser.lens.LensMetrics;
import org.chromium.chrome.browser.ntp.IncognitoCookieControlsManager;
import org.chromium.chrome.browser.omnibox.OmniboxFocusReason;
import org.chromium.chrome.browser.omnibox.OmniboxStub;
import org.chromium.chrome.browser.omnibox.voice.VoiceRecognitionHandler;
import org.chromium.chrome.browser.tasks.tab_management.TabSwitcher.TabSwitcherViewObserver;
import org.chromium.components.content_settings.CookieControlsEnforcement;
import org.chromium.ui.modelutil.PropertyModel;
import java.util.List;
/** Mediator for handling {@link TasksSurface}-related logic. */
class TasksSurfaceMediator implements TabSwitcherViewObserver {
@Nullable private OmniboxStub mOmniboxStub;
private final IncognitoCookieControlsManager mIncognitoCookieControlsManager;
private IncognitoCookieControlsManager.Observer mIncognitoCookieControlsObserver;
private final PropertyModel mModel;
TasksSurfaceMediator(
PropertyModel model,
View.OnClickListener incognitoLearnMoreClickListener,
IncognitoCookieControlsManager incognitoCookieControlsManager) {
mModel = model;
model.set(INCOGNITO_LEARN_MORE_CLICK_LISTENER, incognitoLearnMoreClickListener);
// Set Incognito Cookie Controls functionality
mIncognitoCookieControlsManager = incognitoCookieControlsManager;
mModel.set(INCOGNITO_COOKIE_CONTROLS_MANAGER, mIncognitoCookieControlsManager);
// Set the initial state.
mModel.set(IS_SURFACE_BODY_VISIBLE, true);
mModel.set(IS_FAKE_SEARCH_BOX_VISIBLE, true);
mModel.set(IS_VOICE_RECOGNITION_BUTTON_VISIBLE, false);
mModel.set(IS_LENS_BUTTON_VISIBLE, false);
}
public void initWithNative(
OmniboxStub omniboxStub, @Nullable FeedReliabilityLogger feedReliabilityLogger) {
mOmniboxStub = omniboxStub;
assert mOmniboxStub != null;
mModel.set(
FAKE_SEARCH_BOX_CLICK_LISTENER,
new View.OnClickListener() {
@Override
public void onClick(View v) {
mOmniboxStub.setUrlBarFocus(
true, null, OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_TAP);
RecordUserAction.record("TasksSurface.FakeBox.Tapped");
}
});
mModel.set(
FAKE_SEARCH_BOX_TEXT_WATCHER,
new TextWatcher() {
@Override
public void beforeTextChanged(
CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
if (s.length() == 0) return;
mOmniboxStub.setUrlBarFocus(
true,
s.toString(),
OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_LONG_PRESS);
RecordUserAction.record("TasksSurface.FakeBox.LongPressed");
// This won't cause infinite loop since we checked s.length() == 0 above.
s.clear();
}
});
mModel.set(
VOICE_SEARCH_BUTTON_CLICK_LISTENER,
new View.OnClickListener() {
@Override
public void onClick(View v) {
if (feedReliabilityLogger != null) {
feedReliabilityLogger.onVoiceSearch();
}
mOmniboxStub
.getVoiceRecognitionHandler()
.startVoiceRecognition(
VoiceRecognitionHandler.VoiceInteractionSource
.TASKS_SURFACE);
RecordUserAction.record("TasksSurface.FakeBox.VoiceSearch");
}
});
mModel.set(
LENS_BUTTON_CLICK_LISTENER,
new View.OnClickListener() {
@Override
public void onClick(View v) {
LensMetrics.recordClicked(LensEntryPoint.TASKS_SURFACE);
mOmniboxStub.startLens(LensEntryPoint.TASKS_SURFACE);
}
});
mIncognitoCookieControlsObserver =
new IncognitoCookieControlsManager.Observer() {
@Override
public void onUpdate(
boolean checked, @CookieControlsEnforcement int enforcement) {
mModel.set(INCOGNITO_COOKIE_CONTROLS_TOGGLE_ENFORCEMENT, enforcement);
mModel.set(INCOGNITO_COOKIE_CONTROLS_TOGGLE_CHECKED, checked);
}
};
mIncognitoCookieControlsManager.addObserver(mIncognitoCookieControlsObserver);
mModel.set(
INCOGNITO_COOKIE_CONTROLS_TOGGLE_CHECKED_LISTENER, mIncognitoCookieControlsManager);
mModel.set(INCOGNITO_COOKIE_CONTROLS_ICON_CLICK_LISTENER, mIncognitoCookieControlsManager);
}
/** Called to initialize this Mediator. */
void initialize() {
mIncognitoCookieControlsManager.initialize();
}
@Override
public void startedShowing() {}
@Override
public void finishedShowing() {}
@Override
public void startedHiding() {}
@Override
public void finishedHiding() {}
/**
* Called to send the search query and params to omnibox to kick off a search.
* @param queryText Text of the search query to perform.
* @param searchParams A list of params to sent along with the search query.
*/
void performSearchQuery(String queryText, List<String> searchParams) {
if (mOmniboxStub != null) {
mOmniboxStub.performSearchQuery(queryText, searchParams);
}
}
}