From a0d8ba27e39fd2c06e99e94fa7bc08adce6b0dd5 Mon Sep 17 00:00:00 2001 From: Yuriy Liskov Date: Sun, 9 Feb 2020 02:42:13 +0200 Subject: [PATCH] refactor --- .../ime/LeanbackKeyboardContainer.java | 25 +++++++++------- .../ime/LeanbackKeyboardController.java | 16 +++++----- .../leanback/ime/LeanbackKeyboardView.java | 21 ++++++++++---- .../android/leanback/ime/LeanbackUtils.java | 29 +++++++++++++++++++ .../leanback/ime/LeanbackImeService.java | 14 +++++++++ .../other/RestartServiceReceiver.java | 5 ++++ .../settings/misc/MiscFragment.java | 1 + .../leankeyboard/utils/LeanKeySettings.java | 11 +++++++ .../src/main/res/layout/selector_test.xml | 5 ++++ .../src/main/res/values-de/strings.xml | 2 ++ .../src/main/res/values-ru/strings.xml | 2 ++ .../src/main/res/values/strings.xml | 2 ++ 12 files changed, 109 insertions(+), 24 deletions(-) create mode 100644 leankeykeyboard/src/main/res/layout/selector_test.xml diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackKeyboardContainer.java b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackKeyboardContainer.java index e353925..9a16ff1 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackKeyboardContainer.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackKeyboardContainer.java @@ -183,7 +183,7 @@ public class LeanbackKeyboardContainer { mVoiceButtonView = (RecognizerView) mRootView.findViewById(R.id.voice); mActionButtonView = (Button) mRootView.findViewById(R.id.enter); mSelector = mRootView.findViewById(R.id.selector); - mSelectorAnimation = new LeanbackKeyboardContainer.ScaleAnimation((FrameLayout) mSelector); + mSelectorAnimation = new ScaleAnimation((FrameLayout) mSelector); mOverestimate = mContext.getResources().getFraction(R.fraction.focused_scale, 1, 1); final float scale = context.getResources().getFraction(R.fraction.clicked_scale, 1, 1); mClickAnimDur = context.getResources().getInteger(R.integer.clicked_anim_duration); @@ -217,7 +217,7 @@ public class LeanbackKeyboardContainer { initKeyboards(); } - private void configureFocus(LeanbackKeyboardContainer.KeyFocus focus, Rect rect, int index, int type) { + private void configureFocus(KeyFocus focus, Rect rect, int index, int type) { focus.type = type; focus.index = index; focus.rect.set(rect); @@ -231,7 +231,7 @@ public class LeanbackKeyboardContainer { * @param key {@link Key} * @param type {@link KeyFocus#type} constant */ - private void configureFocus(LeanbackKeyboardContainer.KeyFocus focus, Rect rect, int index, Key key, int type) { + private void configureFocus(KeyFocus focus, Rect rect, int index, Key key, int type) { focus.type = type; if (key != null) { if (key.codes != null) { @@ -435,7 +435,7 @@ public class LeanbackKeyboardContainer { * @param forceFocusChange force focus * @param animate animate transition */ - private void setKbFocus(final LeanbackKeyboardContainer.KeyFocus focus, final boolean forceFocusChange, final boolean animate) { + private void setKbFocus(final KeyFocus focus, final boolean forceFocusChange, final boolean animate) { boolean clicked = true; if (!focus.equals(mCurrKeyInfo) || forceFocusChange) { LeanbackKeyboardView prevView = mPrevView; @@ -968,18 +968,21 @@ public class LeanbackKeyboardContainer { mVoiceButtonView.setVisibility(View.INVISIBLE); } - public void setDismissListener(LeanbackKeyboardContainer.DismissListener listener) { + public void setDismissListener(DismissListener listener) { mDismissListener = listener; } - public void setFocus(LeanbackKeyboardContainer.KeyFocus focus) { + public void setFocus(KeyFocus focus) { setKbFocus(focus, false, true); } - public void setFocus(LeanbackKeyboardContainer.KeyFocus focus, final boolean animate) { + public void setFocus(KeyFocus focus, final boolean animate) { setKbFocus(focus, false, animate); } + /** + * NOTE: Selection animation when moving from one button to another + */ public void setSelectorToFocus(Rect rect, boolean overestimateWidth, boolean overestimateHeight, boolean animate) { if (mSelector.getWidth() != 0 && mSelector.getHeight() != 0 && rect.width() != 0 && rect.height() != 0) { final float width = (float) rect.width(); @@ -996,9 +999,11 @@ public class LeanbackKeyboardContainer { float deltaY = heightOver; float deltaX = widthOver; - if ((double) (Math.max(widthOver, heightOver) / Math.min(widthOver, heightOver)) < 1.1D) { - deltaY = Math.max(widthOver, heightOver); - deltaX = deltaY; + float maxDelta = Math.max(widthOver, heightOver); + float minDelta = Math.min(widthOver, heightOver); + if ((double) (maxDelta / minDelta) < 1.1D) { + deltaY = maxDelta; + deltaX = maxDelta; } final float x = rect.exactCenterX() - deltaX / 2.0F; diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackKeyboardController.java b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackKeyboardController.java index ef21b68..03fec9f 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackKeyboardController.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackKeyboardController.java @@ -79,9 +79,9 @@ public class LeanbackKeyboardController implements LeanbackKeyboardContainer.Voi } }; - mTouchEventListener = new LeanbackKeyboardController.TouchEventListener(); - mDownFocus = new LeanbackKeyboardContainer.KeyFocus(); - mTempFocus = new LeanbackKeyboardContainer.KeyFocus(); + mTouchEventListener = new TouchEventListener(); + mDownFocus = new KeyFocus(); + mTempFocus = new KeyFocus(); mKeyChangeHistory = new ArrayList<>(11); mTempPoint = new PointF(); mKeyDownReceived = false; @@ -142,10 +142,10 @@ public class LeanbackKeyboardController implements LeanbackKeyboardContainer.Voi } private void clearKeyIfNecessary() { - ++this.mMoveCount; - if (this.mMoveCount >= 3) { - this.mMoveCount = 0; - this.mKeyDownKeyFocus = null; + ++mMoveCount; + if (mMoveCount >= 3) { + mMoveCount = 0; + mKeyDownKeyFocus = null; } } @@ -158,7 +158,7 @@ public class LeanbackKeyboardController implements LeanbackKeyboardContainer.Voi * NOTE: Where all magic happens. Input from virtual kbd is processed here. * @param focus current key */ - private void commitKey(LeanbackKeyboardContainer.KeyFocus focus) { + private void commitKey(KeyFocus focus) { if (mContainer != null && focus != null) { switch (focus.type) { case KeyFocus.TYPE_VOICE: diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackKeyboardView.java b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackKeyboardView.java index c3bcd72..451354c 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackKeyboardView.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackKeyboardView.java @@ -14,11 +14,13 @@ import android.graphics.Typeface; import android.inputmethodservice.Keyboard; import android.inputmethodservice.Keyboard.Key; import android.util.AttributeSet; +import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import androidx.core.content.ContextCompat; +import com.liskovsoft.leankeyboard.utils.LeanKeySettings; import com.liskovsoft.leankeykeyboard.R; import java.util.Iterator; @@ -209,12 +211,19 @@ public class LeanbackKeyboardView extends FrameLayout { int iconWidth = key.width; // originally used key.icon.getIntrinsicWidth(); int iconHeight = key.height; // originally used key.icon.getIntrinsicHeight(); - if (key.width == key.height) { + if (key.width == key.height) { // square key proper fit int newSize = Math.round(key.width * mSquareIconScaleFactor); iconWidth = newSize; iconHeight = newSize; } + if (key.codes[0] == ASCII_SPACE && LeanKeySettings.instance(getContext()).getEnlargeKeyboard()) { + // space fix for large interface + float gap = getResources().getDimension(R.dimen.keyboard_horizontal_gap); + float gapDelta = (gap * 1.3f) - gap; + iconWidth -= gapDelta * (ASCII_PERIOD_LEN - 1); + } + int dx = (key.width - padding.left - padding.right - iconWidth) / 2 + padding.left; int dy = (key.height - padding.top - padding.bottom - iconHeight) / 2 + padding.top; @@ -255,6 +264,7 @@ public class LeanbackKeyboardView extends FrameLayout { image.setImageAlpha(opacity); image.setVisibility(View.VISIBLE); + return image; } @@ -300,7 +310,6 @@ public class LeanbackKeyboardView extends FrameLayout { Key key = iterator.next(); mKeys[i] = new KeyHolder(key); } - } public boolean dismissMiniKeyboard() { @@ -506,7 +515,7 @@ public class LeanbackKeyboardView extends FrameLayout { } /** - * Move focus to the key specified by index + * NOTE: Increase size of currently focused or clicked key * @param index index of the key * @param clicked key state * @param showFocusScale increase size @@ -535,8 +544,8 @@ public class LeanbackKeyboardView extends FrameLayout { if (mCurrentFocusView != null) { mCurrentFocusView.animate() - .scaleX(1.0F) - .scaleY(1.0F) + .scaleX(scale) + .scaleY(scale) .setInterpolator(LeanbackKeyboardContainer.sMovementInterpolator) .setStartDelay(mUnfocusStartDelay); @@ -558,7 +567,7 @@ public class LeanbackKeyboardView extends FrameLayout { .scaleX(scale) .scaleY(scale) .setInterpolator(LeanbackKeyboardContainer.sMovementInterpolator) - .setDuration((long) mClickAnimDur) + .setDuration(mClickAnimDur) .start(); } diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackUtils.java b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackUtils.java index 1bc6c70..3257179 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackUtils.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/android/leanback/ime/LeanbackUtils.java @@ -1,19 +1,25 @@ package com.liskovsoft.leankeyboard.keyboard.android.leanback.ime; import android.annotation.SuppressLint; +import android.content.Context; import android.os.Handler; import android.text.InputType; +import android.util.DisplayMetrics; +import android.util.Log; import android.view.KeyEvent; import android.view.View; +import android.view.WindowManager; import android.view.accessibility.AccessibilityEvent; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; +import androidx.core.content.ContextCompat; import com.liskovsoft.leankeyboard.keyboard.leanback.ime.LeanbackImeService; public class LeanbackUtils { private static final int ACCESSIBILITY_DELAY_MS = 250; private static final String EDITOR_LABEL = "label"; private static final Handler sAccessibilityHandler = new Handler(); + private static final String TAG = LeanbackUtils.class.getSimpleName(); public static int getImeAction(EditorInfo info) { return info.imeOptions & (EditorInfo.IME_FLAG_NO_ENTER_ACTION | EditorInfo.IME_MASK_ACTION); @@ -106,4 +112,27 @@ public class LeanbackUtils { return null; } + + public static DisplayMetrics createMetricsFrom(Context context, float factor) { + DisplayMetrics metrics = null; + Object service = context.getSystemService(Context.WINDOW_SERVICE); + + if (service instanceof WindowManager) { + WindowManager manager = (WindowManager) service; + metrics = new DisplayMetrics(); + manager.getDefaultDisplay().getMetrics(metrics); + Log.d(TAG, metrics.toString()); + + // new values + metrics.density *= factor; + metrics.densityDpi *= factor; + metrics.heightPixels *= factor; + metrics.widthPixels *= factor; + metrics.scaledDensity *= factor; + metrics.xdpi *= factor; + metrics.ydpi *= factor; + } + + return metrics; + } } diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/leanback/ime/LeanbackImeService.java b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/leanback/ime/LeanbackImeService.java index c43e93c..de00d49 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/leanback/ime/LeanbackImeService.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/keyboard/leanback/ime/LeanbackImeService.java @@ -2,16 +2,19 @@ package com.liskovsoft.leankeyboard.keyboard.leanback.ime; import android.annotation.SuppressLint; import android.app.Service; +import android.content.Context; import android.content.Intent; import android.inputmethodservice.InputMethodService; import android.os.Build.VERSION; import android.os.Handler; import android.os.Message; +import android.util.DisplayMetrics; import android.util.Log; import android.view.InputDevice; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; +import android.view.WindowManager; import android.view.inputmethod.CompletionInfo; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; @@ -64,6 +67,7 @@ public class LeanbackImeService extends InputMethodService { @Override public void onCreate() { + //setupDensity(); super.onCreate(); Log.d(TAG, "onCreate"); @@ -71,6 +75,16 @@ public class LeanbackImeService extends InputMethodService { initSettings(); } + private void setupDensity() { + if (LeanKeySettings.instance(this).getEnlargeKeyboard()) { + DisplayMetrics metrics = LeanbackUtils.createMetricsFrom(this, 1.3f); + + if (metrics != null) { + getResources().getDisplayMetrics().setTo(metrics); + } + } + } + private void initSettings() { mForceShowKbd = LeanKeySettings.instance(this).getForceShowKeyboard(); } diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/other/RestartServiceReceiver.java b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/other/RestartServiceReceiver.java index 567fd42..077b3a4 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/other/RestartServiceReceiver.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/other/RestartServiceReceiver.java @@ -12,6 +12,7 @@ public class RestartServiceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { sendMessageToService(context); + //restartService(context); } private void sendMessageToService(Context context) { @@ -20,4 +21,8 @@ public class RestartServiceReceiver extends BroadcastReceiver { intent.putExtra(LeanbackImeService.COMMAND_RESTART, true); context.startService(intent); } + + private void restartService(Context context) { + System.exit(0); + } } \ No newline at end of file diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/settings/misc/MiscFragment.java b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/settings/misc/MiscFragment.java index 9e712fb..92e0119 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/settings/misc/MiscFragment.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/settings/misc/MiscFragment.java @@ -19,6 +19,7 @@ public class MiscFragment extends BaseSettingsFragment { mPrefs = LeanKeySettings.instance(getActivity()); addCheckedAction(R.string.keep_on_screen, R.string.keep_on_screen_desc, mPrefs::getForceShowKeyboard, mPrefs::setForceShowKeyboard); + addCheckedAction(R.string.increase_kbd_size, R.string.increase_kbd_size_desc, mPrefs::getEnlargeKeyboard, mPrefs::setEnlargeKeyboard); } @NonNull diff --git a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/utils/LeanKeySettings.java b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/utils/LeanKeySettings.java index 8049ddf..5d90061 100644 --- a/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/utils/LeanKeySettings.java +++ b/leankeykeyboard/src/main/java/com/liskovsoft/leankeyboard/utils/LeanKeySettings.java @@ -9,6 +9,7 @@ public final class LeanKeySettings { private static final String BOOTSTRAP_SELECTED_LANGUAGE = "bootstrapSelectedLanguage"; private static final String APP_KEYBOARD_INDEX = "appKeyboardIndex"; private static final String FORCE_SHOW_KEYBOARD = "forceShowKeyboard"; + private static final String ENLARGE_KEYBOARD = "enlargeKeyboard"; private static LeanKeySettings sInstance; private final Context mContext; private SharedPreferences mPrefs; @@ -63,4 +64,14 @@ public final class LeanKeySettings { .putBoolean(FORCE_SHOW_KEYBOARD, force) .apply(); } + + public boolean getEnlargeKeyboard() { + return mPrefs.getBoolean(ENLARGE_KEYBOARD, false); + } + + public void setEnlargeKeyboard(boolean enlarge) { + mPrefs.edit() + .putBoolean(ENLARGE_KEYBOARD, enlarge) + .apply(); + } } diff --git a/leankeykeyboard/src/main/res/layout/selector_test.xml b/leankeykeyboard/src/main/res/layout/selector_test.xml new file mode 100644 index 0000000..ca38153 --- /dev/null +++ b/leankeykeyboard/src/main/res/layout/selector_test.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/leankeykeyboard/src/main/res/values-de/strings.xml b/leankeykeyboard/src/main/res/values-de/strings.xml index b77db17..7f7ef7c 100644 --- a/leankeykeyboard/src/main/res/values-de/strings.xml +++ b/leankeykeyboard/src/main/res/values-de/strings.xml @@ -31,4 +31,6 @@ Auf dem Display einblenden Andere Andere Einstellungen + Vergrößern Sie + Vergrößern Sie die Tastatur diff --git a/leankeykeyboard/src/main/res/values-ru/strings.xml b/leankeykeyboard/src/main/res/values-ru/strings.xml index 714b583..fd16b65 100644 --- a/leankeykeyboard/src/main/res/values-ru/strings.xml +++ b/leankeykeyboard/src/main/res/values-ru/strings.xml @@ -33,4 +33,6 @@ Показывать на экране вместе физической Разное Разные настройки + Увеличить + Увеличить клавиатуру diff --git a/leankeykeyboard/src/main/res/values/strings.xml b/leankeykeyboard/src/main/res/values/strings.xml index ef9e8ea..b2da1f1 100644 --- a/leankeykeyboard/src/main/res/values/strings.xml +++ b/leankeykeyboard/src/main/res/values/strings.xml @@ -44,4 +44,6 @@ Misc Settings Keep on Screen Clipboard + Enlarge keyboard + Increase keyboard size