diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java index 79ddad65..46dca251 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/CommandHandler.java @@ -180,6 +180,10 @@ abstract public class CommandHandler extends VoiceHandler { public void showCommandPalette() { + if (mainView.isCommandPaletteShown()) { + return; + } + suggestionOps.cancelDelayedAccept(); suggestionOps.acceptIncomplete(); mInputMode.reset(); diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/MainViewHandler.java b/app/src/main/java/io/github/sspanak/tt9/ime/MainViewHandler.java index ab9d4218..9ac44535 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ime/MainViewHandler.java +++ b/app/src/main/java/io/github/sspanak/tt9/ime/MainViewHandler.java @@ -1,9 +1,8 @@ package io.github.sspanak.tt9.ime; -import android.view.OrientationEventListener; - import androidx.annotation.Nullable; +import io.github.sspanak.tt9.ime.helpers.OrientationListener; import io.github.sspanak.tt9.ime.modes.ModeABC; import io.github.sspanak.tt9.ime.voice.VoiceInputOps; import io.github.sspanak.tt9.languages.Language; @@ -14,19 +13,15 @@ import io.github.sspanak.tt9.ui.main.ResizableMainView; * Informational methods for the on-screen keyboard **/ abstract public class MainViewHandler extends HotkeyHandler { + OrientationListener orientationListener; + @Override protected void onInit() { super.onInit(); - OrientationEventListener orientationListener = new OrientationEventListener(getApplicationContext()) { - @Override - public void onOrientationChanged(int orientation) { - mainView.onOrientationChanged(); - } - }; - - if (orientationListener.canDetectOrientation()) { - orientationListener.enable(); + if (orientationListener == null) { + orientationListener = new OrientationListener(this, mainView::onOrientationChanged); + orientationListener.start(); } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ime/helpers/OrientationListener.java b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/OrientationListener.java new file mode 100644 index 00000000..fa015968 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/ime/helpers/OrientationListener.java @@ -0,0 +1,43 @@ +package io.github.sspanak.tt9.ime.helpers; + +import android.content.Context; + +import androidx.annotation.NonNull; + +public class OrientationListener extends android.view.OrientationEventListener { + private static final short ORIENTATION_LANDSCAPE = 1; + private static final short ORIENTATION_UNKNOWN = 0; + private static final short ORIENTATION_PORTRAIT = -1; + + private short previousOrientation = ORIENTATION_UNKNOWN; + private final Runnable onChange; + + public OrientationListener(@NonNull Context context, @NonNull Runnable onChange) { + super(context); + this.onChange = onChange; + } + + @Override + public void onOrientationChanged(int orientation) { + short currentOrientation; + + if (orientation > 345 || orientation < 15 || (orientation > 165 && orientation < 195)) { + currentOrientation = ORIENTATION_PORTRAIT; + } else if ((orientation > 75 && orientation < 105) || (orientation > 255 && orientation < 285)) { + currentOrientation = ORIENTATION_LANDSCAPE; + } else { + return; + } + + if (currentOrientation != previousOrientation) { + previousOrientation = currentOrientation; + onChange.run(); + } + } + + public void start() { + if (canDetectOrientation()) { + enable(); + } + } +} diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/ResizableMainView.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/ResizableMainView.java index 3c992a05..38cc921c 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/ResizableMainView.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/ResizableMainView.java @@ -81,6 +81,7 @@ public class ResizableMainView extends MainView implements View.OnAttachStateCha public void onOrientationChanged() { calculateSnapHeights(); calculateInitialHeight(); + hideCommandPalette(); render(); }