diff --git a/app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java b/app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java index 312c22717..09b6d3d33 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/VRBrowserActivity.java @@ -166,6 +166,12 @@ protected void onCreate(Bundle savedInstanceState) { workaroundGeckoSigAction(); } mUiThread = Thread.currentThread(); + mUiThread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { + @Override + public void uncaughtException(Thread t, Throwable e) { + e.printStackTrace(); + } + }); Bundle extras = getIntent() != null ? getIntent().getExtras() : null; SessionStore.get().setContext(this, extras); diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/keyboards/BaseKeyboard.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/keyboards/BaseKeyboard.java index fd643509b..353232acd 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/keyboards/BaseKeyboard.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/keyboards/BaseKeyboard.java @@ -4,6 +4,7 @@ import android.view.inputmethod.EditorInfo; import org.mozilla.vrbrowser.R; +import org.mozilla.vrbrowser.ui.widgets.WidgetPlacement; import org.mozilla.vrbrowser.utils.StringUtils; import java.util.Locale; @@ -41,4 +42,8 @@ public String getComposingText(String aComposing, String aCode) { public String getModeChangeKeyText() { return mContext.getString(R.string.keyboard_mode_change); } + + public float getAlphabeticKeyboardWidth() { + return WidgetPlacement.dpDimension(mContext, R.dimen.keyboard_alphabetic_width); + } } diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/keyboards/KeyboardInterface.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/keyboards/KeyboardInterface.java index 316bf9e32..4e03c42dc 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/keyboards/KeyboardInterface.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/keyboards/KeyboardInterface.java @@ -29,6 +29,7 @@ public enum Action { public String composing; } @NonNull CustomKeyboard getAlphabeticKeyboard(); + float getAlphabeticKeyboardWidth(); default @Nullable CandidatesResult getCandidates(String aComposingText) { return null; } default boolean supportsAutoCompletion() { return false; } default boolean usesComposingText() { return false; } 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 d2e938dbe..2b862751b 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 @@ -16,6 +16,7 @@ import android.util.AttributeSet; import android.util.Log; import android.view.View; +import android.view.ViewGroup; import android.view.inputmethod.CursorAnchorInfo; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.ExtractedText; @@ -23,7 +24,6 @@ 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; @@ -74,6 +74,7 @@ public class KeyboardWidget extends UIWidget implements CustomKeyboardView.OnKey private Drawable mShiftOffIcon; private Drawable mCapsLockOnIcon; private View mFocusedView; + private RelativeLayout mKeyboardContainer; private UIWidget mBrowserWidget; private InputConnection mInputConnection; private EditorInfo mEditorInfo = new EditorInfo(); @@ -119,7 +120,11 @@ private void initialize(Context aContext) { mPopupKeyboardview = findViewById(R.id.popupKeyboard); mPopupKeyboardLayer = findViewById(R.id.popupKeyboardLayer); mLanguageSelectorView = findViewById(R.id.langSelectorView); + mKeyboardContainer = findViewById(R.id.keyboardContainer); mLanguageSelectorView.setDelegate(aItem -> handleLanguageChange((KeyboardInterface) aItem.tag)); + mAutoCompletionView = findViewById(R.id.autoCompletionView); + mAutoCompletionView.setExtendedHeight((int)(mWidgetPlacement.height * mWidgetPlacement.density)); + mAutoCompletionView.setDelegate(this); mKeyboards = new ArrayList<>(); mKeyboards.add(new EnglishKeyboard(aContext)); @@ -129,10 +134,10 @@ private void initialize(Context aContext) { mKeyboards.add(new SpanishKeyboard(aContext)); mKeyboards.add(new ChinesePinyinKeyboard(aContext)); mKeyboards.add(new ChineseZhuyinKeyboard(aContext)); - setDefaultKeyboard(); mKeyboardSymbols = new CustomKeyboard(aContext.getApplicationContext(), R.xml.keyboard_symbols); mKeyboardNumeric = new CustomKeyboard(aContext.getApplicationContext(), R.xml.keyboard_numeric); + setDefaultKeyboard(); mKeyboardView.setPreviewEnabled(false); mKeyboardView.setKeyboard(mCurrentKeyboard.getAlphabeticKeyboard()); @@ -201,7 +206,7 @@ public void releaseWidget() { @Override protected void initializeWidgetPlacement(WidgetPlacement aPlacement) { Context context = getContext(); - aPlacement.width = WidgetPlacement.dpDimension(context, R.dimen.keyboard_width); + aPlacement.width = getKeyboardWidth(WidgetPlacement.dpDimension(context, R.dimen.keyboard_alphabetic_width)); 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_autocompletion_padding); @@ -218,6 +223,14 @@ protected void initializeWidgetPlacement(WidgetPlacement aPlacement) { aPlacement.cylinder = true; } + private int getKeyboardWidth(float aAlphabeticWidth) { + float width = aAlphabeticWidth; + width += WidgetPlacement.dpDimension(getContext(), R.dimen.keyboard_autocompletion_padding); + width += WidgetPlacement.dpDimension(getContext(), R.dimen.keyboard_numeric_width); + Log.e("VRB", "Mangu " + width); + return (int) width; + } + public void setBrowserWidget(UIWidget aWidget) { mBrowserWidget = aWidget; @@ -453,8 +466,9 @@ public void swipeUp() { } private void setDefaultKeyboard() { - mCurrentKeyboard = getKeyboardForLocale(SettingsStore.getInstance(getContext()).getKeyboardLocale()); - if (mCurrentKeyboard != null) { + KeyboardInterface keyboard = getKeyboardForLocale(SettingsStore.getInstance(getContext()).getKeyboardLocale()); + if (keyboard != null) { + handleLanguageChange(keyboard); return; } @@ -465,11 +479,12 @@ private void setDefaultKeyboard() { supportedLocales[i] = mKeyboards.get(i).getLocale().toLanguageTag(); } Locale bestMatch = localeList.getFirstMatch(supportedLocales); - mCurrentKeyboard = getKeyboardForLocale(bestMatch); - if (mCurrentKeyboard == null) { + keyboard = getKeyboardForLocale(bestMatch); + if (keyboard == null) { // Fall back to english. - mCurrentKeyboard = getKeyboardForLocale(Locale.ENGLISH); + keyboard = getKeyboardForLocale(Locale.ENGLISH); } + handleLanguageChange(keyboard); } private KeyboardInterface getKeyboardForLocale(@Nullable Locale aLocale) { @@ -559,7 +574,6 @@ private void handleBackspace(final boolean isLongPress) { connection.commitText("", 1); } }); - } private void handleGlobeClick() { @@ -578,6 +592,18 @@ private void handleLanguageChange(KeyboardInterface aKeyboard) { cleanComposingText(); mCurrentKeyboard = aKeyboard; + final int width = getKeyboardWidth(mCurrentKeyboard.getAlphabeticKeyboardWidth()); + if (width != mWidgetPlacement.width) { + mWidgetPlacement.width = width; + float defaultWorldWidth = WidgetPlacement.floatDimension(getContext(), R.dimen.keyboard_world_width); + int defaultKeyboardWidth = getKeyboardWidth(mKeyboards.get(0).getAlphabeticKeyboardWidth()); + mWidgetPlacement.worldWidth = defaultWorldWidth * ((float) width / (float) defaultKeyboardWidth); + mWidgetManager.updateWidget(this); + ViewGroup.LayoutParams params = mKeyboardContainer.getLayoutParams(); + params.width = WidgetPlacement.convertDpToPixel(getContext(), mCurrentKeyboard.getAlphabeticKeyboardWidth()); + mKeyboardContainer.setLayoutParams(params); + } + SettingsStore.getInstance(getContext()).setSelectedKeyboard(aKeyboard.getLocale()); mKeyboardView.setKeyboard(mCurrentKeyboard.getAlphabeticKeyboard()); hideOverlays(); @@ -621,6 +647,7 @@ private void handleModeChange() { Keyboard current = mKeyboardView.getKeyboard(); Keyboard alphabetic = mCurrentKeyboard.getAlphabeticKeyboard(); mKeyboardView.setKeyboard(current == alphabetic ? mKeyboardSymbols : alphabetic); + mKeyboardView.setLayoutParams(mKeyboardView.getLayoutParams()); } private void handleKey(int primaryCode, int[] keyCodes) { diff --git a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WidgetPlacement.java b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WidgetPlacement.java index c25b258a3..be907f509 100644 --- a/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WidgetPlacement.java +++ b/app/src/common/shared/org/mozilla/vrbrowser/ui/widgets/WidgetPlacement.java @@ -116,11 +116,10 @@ public static float unitFromMeters(Context aContext, int aDimensionId) { return unitFromMeters(floatDimension(aContext, aDimensionId)); } - public static float convertDpToPixel(Context aContext, float dp){ + public static int convertDpToPixel(Context aContext, float dp){ Resources resources = aContext.getResources(); DisplayMetrics metrics = resources.getDisplayMetrics(); - float px = dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT); - return px; + return (int) Math.ceil(dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT)); } public static float convertPixelsToDp(Context aContext, float px){ diff --git a/app/src/main/res/layout/keyboard.xml b/app/src/main/res/layout/keyboard.xml index 8bb318cd1..3cae71ac7 100644 --- a/app/src/main/res/layout/keyboard.xml +++ b/app/src/main/res/layout/keyboard.xml @@ -6,12 +6,12 @@ android:layout_width="match_parent" android:layout_height="match_parent"> diff --git a/app/src/main/res/values/dimen.xml b/app/src/main/res/values/dimen.xml index eae680c6d..a60ba6475 100644 --- a/app/src/main/res/values/dimen.xml +++ b/app/src/main/res/values/dimen.xml @@ -20,7 +20,6 @@ -0.18 2.0 -35.0 - 674dp 188dp 526dp 144dp