Commit 15f803cc authored by Michael Thiessen's avatar Michael Thiessen Committed by Commit Bot

Hide (Android) NTP omnibox while in VR.

The NTP omnibox doesn't work in VR because we don't support keyboard for
Android Java UI elements. We also have a separate omnibox below the
content window in VR, so the one on the NTP is redundant.

Bug: 767988
Change-Id: I17fc2a81da20bac4b4effa279876a093c76ddad5
Reviewed-on: https://chromium-review.googlesource.com/899465Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Commit-Queue: Michael Thiessen <mthiesse@chromium.org>
Cr-Commit-Position: refs/heads/master@{#534546}
parent 29b1d414
......@@ -55,6 +55,7 @@ import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.util.FeatureUtilities;
import org.chromium.chrome.browser.util.MathUtils;
import org.chromium.chrome.browser.util.ViewUtils;
import org.chromium.chrome.browser.vr_shell.VrShellDelegate;
import org.chromium.chrome.browser.widget.displaystyle.UiConfig;
import org.chromium.ui.base.DeviceFormFactor;
......@@ -62,7 +63,8 @@ import org.chromium.ui.base.DeviceFormFactor;
* The native new tab page, represented by some basic data such as title and url, and an Android
* View that displays the page.
*/
public class NewTabPageView extends FrameLayout implements TileGroup.Observer {
public class NewTabPageView
extends FrameLayout implements TileGroup.Observer, VrShellDelegate.VrModeObserver {
private static final String TAG = "NewTabPageView";
private static final long SNAP_SCROLL_DELAY_MS = 30;
......@@ -249,12 +251,6 @@ public class NewTabPageView extends FrameLayout implements TileGroup.Observer {
mContextMenuManager = new ContextMenuManager(mManager.getNavigationDelegate(),
mRecyclerView::setTouchEnabled, closeContextMenuCallback);
mTab.getWindowAndroid().addContextMenuCloseListener(mContextMenuManager);
manager.addDestructionObserver(new DestructionObserver() {
@Override
public void onDestroy() {
mTab.getWindowAndroid().removeContextMenuCloseListener(mContextMenuManager);
}
});
Profile profile = Profile.getLastUsedProfile();
OfflinePageBridge offlinePageBridge =
......@@ -340,6 +336,16 @@ public class NewTabPageView extends FrameLayout implements TileGroup.Observer {
}
});
VrShellDelegate.registerVrModeObserver(this);
if (VrShellDelegate.isInVr()) onEnterVr();
manager.addDestructionObserver(new DestructionObserver() {
@Override
public void onDestroy() {
NewTabPageView.this.onDestroy();
}
});
mInitialized = true;
TraceEvent.end(TAG + ".initialize()");
......@@ -1012,4 +1018,18 @@ public class NewTabPageView extends FrameLayout implements TileGroup.Observer {
}
}
@Override
public void onEnterVr() {
mSearchBoxView.setVisibility(GONE);
}
@Override
public void onExitVr() {
mSearchBoxView.setVisibility(VISIBLE);
}
private void onDestroy() {
mTab.getWindowAndroid().removeContextMenuCloseListener(mContextMenuManager);
VrShellDelegate.unregisterVrModeObserver(this);
}
}
......@@ -65,6 +65,8 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
/**
* Manages interactions with the VR Shell.
......@@ -180,6 +182,23 @@ public class VrShellDelegate
// Gets run when the user exits VR mode by clicking the 'x' button or system UI back button.
private Runnable mCloseButtonListener;
private static final List<VrModeObserver> sVrModeObservers = new ArrayList<>();
/**
* Used to observe changes to whether Chrome is currently being viewed in VR.
*/
public static interface VrModeObserver {
/**
* Called when Chrome enters VR rendering mode.
*/
void onEnterVr();
/**
* Called when Chrome exits VR rendering mode.
*/
void onExitVr();
}
private static final class VrBroadcastReceiver extends BroadcastReceiver {
private final WeakReference<ChromeActivity> mTargetActivity;
......@@ -246,6 +265,24 @@ public class VrShellDelegate
}
}
/**
* Registers the given {@link VrModeObserver}.
*
* @param observer The VrModeObserver to register.
*/
public static void registerVrModeObserver(VrModeObserver observer) {
sVrModeObservers.add(observer);
}
/**
* Unregisters the given {@link VrModeObserver}.
*
* @param observer The VrModeObserver to remove.
*/
public static void unregisterVrModeObserver(VrModeObserver observer) {
sVrModeObservers.remove(observer);
}
/**
* See {@link Activity#onActivityResult}.
*/
......@@ -874,6 +911,8 @@ public class VrShellDelegate
}, EXPECT_DON_TIMEOUT_MS);
}
maybeSetPresentResult(true, donSuceeded);
for (VrModeObserver observer : sVrModeObservers) observer.onEnterVr();
}
private static void addBlackOverlayViewForActivity(ChromeActivity activity) {
......@@ -1489,6 +1528,8 @@ public class VrShellDelegate
// that we are exiting VR.
callOnExitVrRequestListener(false);
assert mOnExitVrRequestListener == null;
for (VrModeObserver observer : sVrModeObservers) observer.onExitVr();
}
private void callOnExitVrRequestListener(boolean success) {
......
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