diff --git a/app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java b/app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java index a1bac5588..2c45d1b95 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java @@ -280,6 +280,7 @@ protected void initializeWidgets() { mTray.addListeners(mWindows); attachToWindow(mWindows.getFocusedWindow(), null); + mWindows.setTray(mTray); addWidgets(Arrays.asList(mRootWidget, mNavigationBar, mKeyboard, mTray)); } diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/UIButton.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/UIButton.java index 0c416b005..885162126 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/views/UIButton.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/views/UIButton.java @@ -199,6 +199,7 @@ public void run() { mTooltipView = new TooltipWidget(getContext()); mTooltipView.setText(getTooltip()); + mTooltipView.setCurvedMode(false); mTooltipView.setLayoutParams(UIButton.this, mTooltipPosition, mTooltipDensity); mTooltipView.show(UIWidget.CLEAR_FOCUS); } diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/NavigationBarWidget.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/NavigationBarWidget.java index db0f9e284..5bc74e049 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/NavigationBarWidget.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/NavigationBarWidget.java @@ -51,7 +51,7 @@ public class NavigationBarWidget extends UIWidget implements GeckoSession.Naviga WidgetManagerDelegate.UpdateListener, SessionChangeListener, NavigationURLBar.NavigationURLBarDelegate, VoiceSearchWidget.VoiceSearchDelegate, SharedPreferences.OnSharedPreferenceChangeListener, SuggestionsWidget.URLBarPopupDelegate, - BookmarkListener, TrayListener { + BookmarkListener, TrayWidget.Delegate { private static final String LOGTAG = "VRB"; diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TooltipWidget.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TooltipWidget.java index b86f37a85..7dd7ea59a 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TooltipWidget.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TooltipWidget.java @@ -64,6 +64,10 @@ public void setLayoutParams(View targetView, ViewUtils.TooltipPosition position) this.setLayoutParams(targetView, position, mWidgetPlacement.density); } + public void setCurvedMode(boolean enabled) { + mWidgetPlacement.cylinder = enabled; + } + public void setLayoutParams(View targetView, ViewUtils.TooltipPosition position, float density) { mTargetView = targetView; mParentWidget = ViewUtils.getParentWidget(mTargetView); diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TrayListener.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TrayListener.java deleted file mode 100644 index 51b2cb9f9..000000000 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TrayListener.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.mozilla.vrbrowser.ui.widgets; - -public interface TrayListener { - default void onBookmarksClicked() {}; - default void onPrivateBrowsingClicked() {}; - default void onAddWindowClicked() {}; -} diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TrayWidget.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TrayWidget.java index c1626ee01..e923df585 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TrayWidget.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/TrayWidget.java @@ -30,7 +30,15 @@ import java.util.List; public class TrayWidget extends UIWidget implements SessionChangeListener, BookmarkListener, WidgetManagerDelegate.UpdateListener { - static final String LOGTAG = "VRB"; + + private static final String LOGTAG = TrayWidget.class.getSimpleName(); + + public interface Delegate { + default void onBookmarksClicked() {} + default void onPrivateBrowsingClicked() {} + default void onAddWindowClicked() {} + } + private static final int ICON_ANIMATION_DURATION = 200; private UIButton mSettingsButton; @@ -39,7 +47,7 @@ public class TrayWidget extends UIWidget implements SessionChangeListener, Bookm private AudioEngine mAudio; private int mSettingsDialogHandle = -1; private boolean mIsLastSessionPrivate; - private List mTrayListeners; + private List mTrayListeners; private int mMinPadding; private int mMaxPadding; private boolean mKeyboardVisible; @@ -184,11 +192,11 @@ public void onAnimationRepeat(Animator animator) { } } - public void addListeners(TrayListener... listeners) { + public void addListeners(Delegate... listeners) { mTrayListeners.addAll(Arrays.asList(listeners)); } - public void removeListeners(TrayListener... listeners) { + public void removeListeners(Delegate... listeners) { mTrayListeners.removeAll(Arrays.asList(listeners)); } @@ -197,15 +205,15 @@ public void onDestroy() { } private void notifyBookmarksClicked() { - mTrayListeners.forEach(TrayListener::onBookmarksClicked); + mTrayListeners.forEach(Delegate::onBookmarksClicked); } private void notifyPrivateBrowsingClicked() { - mTrayListeners.forEach(TrayListener::onPrivateBrowsingClicked); + mTrayListeners.forEach(Delegate::onPrivateBrowsingClicked); } private void notifyAddWindowClicked() { - mTrayListeners.forEach(TrayListener::onAddWindowClicked); + mTrayListeners.forEach(Delegate::onAddWindowClicked); } @Override @@ -220,8 +228,6 @@ protected void initializeWidgetPlacement(WidgetPlacement aPlacement) { aPlacement.anchorY = 0.5f; aPlacement.parentAnchorX = 0.5f; aPlacement.parentAnchorY = 0.5f; - aPlacement.rotationAxisX = 1.0f; - aPlacement.rotation = (float)Math.toRadians(-45); aPlacement.opaque = false; aPlacement.cylinder = false; aPlacement.textureScale = 1.0f; @@ -276,7 +282,9 @@ public void attachToWindow(@NonNull WindowWidget aWindow) { } detachFromWindow(); + mWidgetPlacement.parentHandle = aWindow.getHandle(); mAttachedWindow = aWindow; + updatePlacement(); mAttachedWindow.addBookmarksListener(this); mSessionStack = aWindow.getSessionStack(); @@ -292,6 +300,42 @@ public void attachToWindow(@NonNull WindowWidget aWindow) { } } + public void updatePlacement() { + switch (mAttachedWindow.getWindowPlacement()) { + case FRONT: + mWidgetPlacement.translationX = 0; + mWidgetPlacement.translationY = WidgetPlacement.unitFromMeters(getContext(), R.dimen.tray_world_y); + mWidgetPlacement.translationZ = WidgetPlacement.unitFromMeters(getContext(), R.dimen.tray_world_z); + mWidgetPlacement.rotationAxisX = 0.0f; + mWidgetPlacement.rotationAxisY = 0.0f; + mWidgetPlacement.rotationAxisZ = 0.0f; + mWidgetPlacement.rotation = 0; + break; + + case LEFT: + mWidgetPlacement.translationX = WidgetPlacement.unitFromMeters(getContext(), R.dimen.tray_world_x_sides); + mWidgetPlacement.translationY = WidgetPlacement.unitFromMeters(getContext(), R.dimen.tray_world_y); + mWidgetPlacement.translationZ = WidgetPlacement.unitFromMeters(getContext(), R.dimen.tray_world_z_sides); + mWidgetPlacement.rotationAxisX = 0.0f; + mWidgetPlacement.rotationAxisY = 1.0f; + mWidgetPlacement.rotationAxisZ = 0.0f; + mWidgetPlacement.rotation = -(float) Math.toRadians(-WidgetPlacement.floatDimension(getContext(), R.dimen.multi_window_angle)); + break; + + case RIGHT: + mWidgetPlacement.translationX = -WidgetPlacement.unitFromMeters(getContext(), R.dimen.tray_world_x_sides); + mWidgetPlacement.translationY = WidgetPlacement.unitFromMeters(getContext(), R.dimen.tray_world_y); + mWidgetPlacement.translationZ = WidgetPlacement.unitFromMeters(getContext(), R.dimen.tray_world_z_sides); + mWidgetPlacement.rotationAxisX = 0.0f; + mWidgetPlacement.rotationAxisY = 1.0f; + mWidgetPlacement.rotationAxisZ = 0.0f; + mWidgetPlacement.rotation = (float) Math.toRadians(-WidgetPlacement.floatDimension(getContext(), R.dimen.multi_window_angle)); + break; + } + + mWidgetManager.updateWidget(this); + } + // SessionStack.SessionChangeListener @Override @@ -328,6 +372,8 @@ private void toggleSettingsDialog() { mSettingsDialogHandle = widget.getHandle(); } + widget.getPlacement().parentHandle = mAttachedWindow.getHandle(); + if (widget.isVisible()) { widget.hide(REMOVE_WIDGET); } else { @@ -375,6 +421,10 @@ public void onBookmarksHidden(WindowWidget aWindow) { // WidgetManagerDelegate.UpdateListener @Override public void onWidgetUpdate(Widget aWidget) { + if (aWidget == mAttachedWindow) { + mWidgetManager.updateWidget(this); + } + if (!aWidget.getClass().equals(KeyboardWidget.class)) { return; } diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/Windows.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/Windows.java index f50f37c13..fed96c910 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/Windows.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/Windows.java @@ -25,7 +25,7 @@ import java.lang.reflect.Type; import java.util.ArrayList; -public class Windows implements TrayListener, TopBarWidget.Delegate, GeckoSession.ContentDelegate { +public class Windows implements TrayWidget.Delegate, TopBarWidget.Delegate, GeckoSession.ContentDelegate { private static final String WINDOWS_SAVE_FILENAME = "windows_state.json"; @@ -66,6 +66,7 @@ class WindowsState { private WindowWidget mFullscreenWindow; private WindowPlacement mPrevWindowPlacement; private boolean mCurvedMode = false; + private TrayWidget mTray; public enum WindowPlacement{ FRONT(0), @@ -147,6 +148,10 @@ public void setDelegate(Delegate aDelegate) { mDelegate = aDelegate; } + public void setTray(@NonNull TrayWidget tray) { + mTray = tray; + } + public WindowWidget getFocusedWindow() { if (mFullscreenWindow != null) { return mFullscreenWindow; @@ -600,6 +605,9 @@ private void updateViews() { } updateTopBars(); + if (mTray != null) + mTray.updatePlacement(); + ArrayList windows = getCurrentWindows(); // Sort windows so frontWindow is the first one. Required for proper native matrix updates. windows.sort((o1, o2) -> o1 == frontWindow ? -1 : 0); diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/settings/SettingsWidget.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/settings/SettingsWidget.java index a6c050f92..6274e131e 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/settings/SettingsWidget.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/settings/SettingsWidget.java @@ -208,6 +208,7 @@ protected void initializeWidgetPlacement(WidgetPlacement aPlacement) { aPlacement.parentAnchorY = 0.5f; aPlacement.anchorX = 0.5f; aPlacement.anchorY = 0.5f; + aPlacement.cylinder = true; aPlacement.translationY = WidgetPlacement.unitFromMeters(getContext(), R.dimen.settings_world_y); aPlacement.translationZ = WidgetPlacement.unitFromMeters(getContext(), R.dimen.settings_world_z); } diff --git a/app/src/main/res/layout/tray.xml b/app/src/main/res/layout/tray.xml index 82a01d77e..10309bbc6 100644 --- a/app/src/main/res/layout/tray.xml +++ b/app/src/main/res/layout/tray.xml @@ -2,9 +2,11 @@ + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:rotationX="15" + android:layout_margin="2dp"> 116dp - 1.6 - -2.0 + 0.0 + 2.0 770dp 490dp 320dp @@ -119,11 +119,14 @@ 20dp - 0.25 - -2.5 + 1.8 + -1.4 + 1.6 + 2.1 + 2.6 1.2 - 206dp - 40dp + 172dp + 45dp 4.0