Commit 183fabef authored by Matthew Jones's avatar Matthew Jones Committed by Commit Bot

Add TouchlessUiController

This patch adds the TouchlessUiController class that is created through
AppHooks. The class defines an interface for downstream classes to
implement.

Bug: 930785
Change-Id: I9ea09d6a064d36d38cc024249724ae57d8d10551
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1483392Reviewed-by: default avatarYaron Friedman <yfriedman@chromium.org>
Reviewed-by: default avatarMichael Thiessen <mthiesse@chromium.org>
Commit-Queue: Matthew Jones <mdjones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#641714}
parent 8545fb3d
......@@ -53,6 +53,7 @@ import org.chromium.chrome.browser.signin.GoogleActivityController;
import org.chromium.chrome.browser.survey.SurveyController;
import org.chromium.chrome.browser.tab.AuthenticatorNavigationInterceptor;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.touchless.TouchlessUiController;
import org.chromium.chrome.browser.webapps.GooglePlayWebApkInstallDelegate;
import org.chromium.chrome.browser.webauth.Fido2ApiHandler;
import org.chromium.chrome.browser.widget.FeatureHighlightProvider;
......@@ -366,6 +367,14 @@ public abstract class AppHooks {
return DownloadCollectionBridge.getDownloadCollectionBridge();
}
/**
* @param activity An activity for access to different features.
* @return A new {@link TouchlessUiController} instance.
*/
public TouchlessUiController createTouchlessUiController(ChromeActivity activity) {
return null;
}
/**
* Checks the Google Play services availability on the this device.
*
......
......@@ -1844,6 +1844,7 @@ if (notouch_build) {
"touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessNewTabPageProperties.java",
"touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessNewTabPageTopLayout.java",
"touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessTabObserver.java",
"touchless/java/src/org/chromium/chrome/browser/touchless/TouchlessUiController.java",
"touchless/java/src/org/chromium/chrome/browser/touchless/ui/iph/KeyFunctionsIPHCoordinator.java",
"touchless/java/src/org/chromium/chrome/browser/touchless/ui/iph/KeyFunctionsIPHMediator.java",
"touchless/java/src/org/chromium/chrome/browser/touchless/ui/iph/KeyFunctionsIPHProperties.java",
......@@ -1857,7 +1858,10 @@ if (notouch_build) {
"touchless/java/src/org/chromium/chrome/browser/touchless/ui/tooltip/TooltipView.java",
]
} else {
chrome_java_sources += [ "touchless/fallback/java/src/org/chromium/chrome/browser/touchless/TouchlessDelegate.java" ]
chrome_java_sources += [
"touchless/fallback/java/src/org/chromium/chrome/browser/touchless/TouchlessDelegate.java",
"touchless/fallback/java/src/org/chromium/chrome/browser/touchless/TouchlessUiController.java",
]
}
chrome_test_java_sources = [
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.touchless;
/**
* The fallback version of TouchlessUiController, when touchless mode isn't enabled.
*/
public class TouchlessUiController {}
......@@ -12,6 +12,7 @@ import android.view.ViewGroup;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.AppHooks;
import org.chromium.chrome.browser.IntentHandler;
import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate;
import org.chromium.chrome.browser.IntentHandler.TabOpenType;
......@@ -44,6 +45,9 @@ public class NoTouchActivity extends SingleTabActivity {
private TooltipView mTooltipView;
private ProgressBarView mProgressBarView;
/** The class that controls the UI for touchless devices. */
private TouchlessUiController mUiController;
/**
* Internal class which performs the intent handling operations delegated by IntentHandler.
*/
......@@ -111,6 +115,7 @@ public class NoTouchActivity extends SingleTabActivity {
(ViewGroup) findViewById(android.R.id.content), null /* controlContainer */);
getFullscreenManager().setTab(getActivityTab());
mUiController = AppHooks.get().createTouchlessUiController(this);
super.finishNativeInitialization();
}
......@@ -208,7 +213,10 @@ public class NoTouchActivity extends SingleTabActivity {
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (mProgressBarCoordinator != null) mProgressBarCoordinator.onKeyEvent();
return super.dispatchKeyEvent(event);
boolean consumedEvent = mUiController != null ? mUiController.onKeyEvent(event) : false;
return consumedEvent || super.dispatchKeyEvent(event);
}
@Override
......@@ -222,5 +230,9 @@ public class NoTouchActivity extends SingleTabActivity {
super.onDestroyInternal();
if (mKeyFunctionsIPHCoordinator != null) mKeyFunctionsIPHCoordinator.destroy();
if (mProgressBarCoordinator != null) mProgressBarCoordinator.destroy();
if (mUiController != null) {
mUiController.destroy();
mUiController = null;
}
}
}
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.touchless;
import android.view.KeyEvent;
/** A controller for touchless UI. */
public interface TouchlessUiController {
/**
* A notification that a key event occurred.
* @param event The event object.
* @return Whether the event was consumed.
*/
boolean onKeyEvent(KeyEvent event);
/**
* Clean up anything that needs to be.
*/
void destroy();
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment