From db8e0d4539489b3b27aabc6daadd2aa0b688b533 Mon Sep 17 00:00:00 2001 From: Imanol Fernandez Date: Fri, 10 May 2019 22:14:52 +0200 Subject: [PATCH] Update keyboard placement (#1203) --- .../vrbrowser/ui/widgets/KeyboardWidget.java | 21 +++++++++------- app/src/main/cpp/BrowserWorld.cpp | 24 ++++++++++++------- app/src/main/res/layout/keyboard.xml | 3 ++- app/src/main/res/values/dimen.xml | 8 ++++--- 4 files changed, 34 insertions(+), 22 deletions(-) diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/KeyboardWidget.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/KeyboardWidget.java index ea914717f..36d07fe5a 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/KeyboardWidget.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/KeyboardWidget.java @@ -24,6 +24,7 @@ import android.view.inputmethod.InputConnection; import android.widget.ImageButton; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; @@ -73,6 +74,7 @@ public class KeyboardWidget extends UIWidget implements CustomKeyboardView.OnKey private Drawable mShiftOffIcon; private Drawable mCapsLockOnIcon; private View mFocusedView; + private LinearLayout mKeyboardLayout; private RelativeLayout mKeyboardContainer; private UIWidget mBrowserWidget; private InputConnection mInputConnection; @@ -119,6 +121,7 @@ private void initialize(Context aContext) { mPopupKeyboardview = findViewById(R.id.popupKeyboard); mPopupKeyboardLayer = findViewById(R.id.popupKeyboardLayer); mLanguageSelectorView = findViewById(R.id.langSelectorView); + mKeyboardLayout = findViewById(R.id.keyboardLayout); mKeyboardContainer = findViewById(R.id.keyboardContainer); mLanguageSelectorView.setDelegate(aItem -> handleLanguageChange((KeyboardInterface) aItem.tag)); mAutoCompletionView = findViewById(R.id.autoCompletionView); @@ -208,12 +211,11 @@ protected void initializeWidgetPlacement(WidgetPlacement aPlacement) { aPlacement.height = WidgetPlacement.dpDimension(context, R.dimen.keyboard_height); aPlacement.height += WidgetPlacement.dpDimension(context, R.dimen.autocompletion_widget_line_height); aPlacement.height += WidgetPlacement.dpDimension(context, R.dimen.keyboard_layout_padding); - aPlacement.parentAnchorX = 0.5f; - aPlacement.parentAnchorY = 0.0f; aPlacement.anchorX = 0.5f; - aPlacement.anchorY = 0.5f; - aPlacement.translationZ = WidgetPlacement.unitFromMeters(context, R.dimen.keyboard_z_distance_from_browser); - aPlacement.translationY = WidgetPlacement.unitFromMeters(context, R.dimen.keyboard_y_distance_from_browser); + aPlacement.anchorY = 0.0f; + aPlacement.translationX = WidgetPlacement.unitFromMeters(context, R.dimen.keyboard_x); + aPlacement.translationY = WidgetPlacement.unitFromMeters(context, R.dimen.keyboard_y); + aPlacement.translationZ = WidgetPlacement.unitFromMeters(context, R.dimen.keyboard_z); aPlacement.rotationAxisX = 1.0f; aPlacement.rotation = (float)Math.toRadians(WidgetPlacement.floatDimension(context, R.dimen.keyboard_world_rotation)); aPlacement.worldWidth = WidgetPlacement.floatDimension(context, R.dimen.keyboard_world_width); @@ -231,9 +233,6 @@ private int getKeyboardWidth(float aAlphabeticWidth) { public void setBrowserWidget(UIWidget aWidget) { mBrowserWidget = aWidget; - if (mBrowserWidget != null) { - mWidgetPlacement.parentHandle = mBrowserWidget.getHandle(); - } } private void resetKeyboardLayout() { @@ -342,7 +341,7 @@ public void onLongPress(Keyboard.Key popupKey) { maxCharsPerLine = MAX_CHARS_PER_LINE_LONG; } default: { - float totalWidth = WidgetPlacement.convertPixelsToDp(getContext(), mCurrentKeyboard.getAlphabeticKeyboardWidth()); + float totalWidth = WidgetPlacement.convertDpToPixel(getContext(), mCurrentKeyboard.getAlphabeticKeyboardWidth()); rightAligned = (float)popupKey.x > totalWidth * 0.5f; maxCharsPerLine = MAX_CHARS_PER_LINE_LONG; } @@ -611,6 +610,10 @@ private void handleLanguageChange(KeyboardInterface aKeyboard) { mKeyboardContainer.setLayoutParams(params); } + RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)mKeyboardLayout.getLayoutParams(); + params.topMargin = mCurrentKeyboard.supportsAutoCompletion() ? WidgetPlacement.pixelDimension(getContext(), R.dimen.keyboard_margin_top_without_autocompletion) : 0; + mKeyboardLayout.setLayoutParams(params); + SettingsStore.getInstance(getContext()).setSelectedKeyboard(aKeyboard.getLocale()); mKeyboardView.setKeyboard(mCurrentKeyboard.getAlphabeticKeyboard()); hideOverlays(); diff --git a/app/src/main/cpp/BrowserWorld.cpp b/app/src/main/cpp/BrowserWorld.cpp index 020e02aa1..bc841e208 100644 --- a/app/src/main/cpp/BrowserWorld.cpp +++ b/app/src/main/cpp/BrowserWorld.cpp @@ -935,24 +935,30 @@ BrowserWorld::LayoutWidget(int32_t aHandle) { widget->GetWorldSize(worldWidth, worldHeight); vrb::Matrix transform = vrb::Matrix::Identity(); - if (aPlacement->rotationAxis.Magnitude() > std::numeric_limits::epsilon()) { - transform = vrb::Matrix::Rotation(aPlacement->rotationAxis, aPlacement->rotation); - } vrb::Vector translation = vrb::Vector(aPlacement->translation.x() * kWorldDPIRatio, aPlacement->translation.y() * kWorldDPIRatio, aPlacement->translation.z() * kWorldDPIRatio); + const float anchorX = (aPlacement->anchor.x() - 0.5f) * worldWidth; + const float anchorY = (aPlacement->anchor.y() - 0.5f) * worldHeight; + + if (aPlacement->rotationAxis.Magnitude() > std::numeric_limits::epsilon()) { + transform = vrb::Matrix::Rotation(aPlacement->rotationAxis, aPlacement->rotation); + // Rotate from anchor point + transform.PreMultiplyInPlace(vrb::Matrix::Translation(vrb::Vector(anchorX, anchorY, 0.0f))); + transform.PostMultiplyInPlace(vrb::Matrix::Translation(vrb::Vector(-anchorX, -anchorY, 0.0f))); + } + // Widget anchor point - translation -= vrb::Vector((aPlacement->anchor.x() - 0.5f) * worldWidth, - (aPlacement->anchor.y() - 0.5f) * worldHeight, - 0.0f); + translation -= vrb::Vector(anchorX, anchorY, 0.0f); + // Parent anchor point if (parent) { translation += vrb::Vector( - parentWorldWith * aPlacement->parentAnchor.x() - parentWorldWith * 0.5f, - parentWorldHeight * aPlacement->parentAnchor.y() - parentWorldHeight * 0.5f, - 0.0f); + parentWorldWith * aPlacement->parentAnchor.x() - parentWorldWith * 0.5f, + parentWorldHeight * aPlacement->parentAnchor.y() - parentWorldHeight * 0.5f, + 0.0f); } transform.TranslateInPlace(translation); diff --git a/app/src/main/res/layout/keyboard.xml b/app/src/main/res/layout/keyboard.xml index b17186f8b..8d8afcea0 100644 --- a/app/src/main/res/layout/keyboard.xml +++ b/app/src/main/res/layout/keyboard.xml @@ -6,9 +6,10 @@ android:layout_width="match_parent" android:layout_height="match_parent"> 44dp - 2.85 - -0.18 - 2.0 + 3.25 + -0.15 + -0.6 + -2.5 -35.0 188dp 526dp @@ -45,6 +46,7 @@ 0dp 0dp 4dp + 37dp 1.6 320dp