From d7043060d0a94c2214308dddc916a2a5ea5929ab Mon Sep 17 00:00:00 2001 From: sspanak Date: Fri, 28 Jun 2024 11:19:22 +0300 Subject: [PATCH] vibration on suggestion selection --- .../sspanak/tt9/ui/{main => }/Vibration.java | 24 ++++++++++++++++++- .../tt9/ui/main/ResizableMainView.java | 20 +++++++--------- .../tt9/ui/main/keys/SoftBackspaceKey.java | 2 +- .../tt9/ui/main/keys/SoftFilterKey.java | 2 +- .../tt9/ui/main/keys/SoftInputModeKey.java | 2 +- .../sspanak/tt9/ui/main/keys/SoftKey.java | 9 +++---- .../tt9/ui/main/keys/SoftKeyArrow.java | 2 +- .../tt9/ui/main/keys/SoftNumberKey.java | 2 +- .../sspanak/tt9/ui/tray/SuggestionsBar.java | 6 +++-- 9 files changed, 46 insertions(+), 23 deletions(-) rename app/src/main/java/io/github/sspanak/tt9/ui/{main => }/Vibration.java (58%) diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/Vibration.java b/app/src/main/java/io/github/sspanak/tt9/ui/Vibration.java similarity index 58% rename from app/src/main/java/io/github/sspanak/tt9/ui/main/Vibration.java rename to app/src/main/java/io/github/sspanak/tt9/ui/Vibration.java index 52cead05..d0fa0c6e 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/Vibration.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/Vibration.java @@ -1,12 +1,24 @@ -package io.github.sspanak.tt9.ui.main; +package io.github.sspanak.tt9.ui; import android.os.Build; import android.view.HapticFeedbackConstants; +import android.view.View; +import androidx.annotation.NonNull; + +import io.github.sspanak.tt9.preferences.settings.SettingsStore; import io.github.sspanak.tt9.ui.main.keys.SoftKey; import io.github.sspanak.tt9.ui.main.keys.SoftNumberKey; public class Vibration { + @NonNull private final SettingsStore settings; + private final View view; + + public Vibration(@NonNull SettingsStore settings, View view) { + this.settings = settings; + this.view = view; + } + public static int getNoVibration() { return -1; } @@ -30,4 +42,14 @@ public class Vibration { return HapticFeedbackConstants.VIRTUAL_KEY; } } + + public void vibrate(int vibrationType) { + if (settings.getHapticFeedback() && view != null) { + view.performHapticFeedback(vibrationType, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + } + } + + public void vibrate() { + vibrate(getPressVibration(null)); + } } 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 3a7ac382..2762b2d5 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 @@ -7,8 +7,11 @@ import androidx.annotation.NonNull; import io.github.sspanak.tt9.ime.TraditionalT9; import io.github.sspanak.tt9.preferences.settings.SettingsStore; +import io.github.sspanak.tt9.ui.Vibration; public class ResizableMainView extends MainView implements View.OnAttachStateChangeListener { + private Vibration vibration; + private int height; private float resizeStartY; private long lastResizeTime; @@ -58,6 +61,8 @@ public class ResizableMainView extends MainView implements View.OnAttachStateCha main.getView().removeOnAttachStateChangeListener(this); main.getView().addOnAttachStateChangeListener(this); + vibration = new Vibration(tt9.getSettings(), main.getView()); + return true; } @@ -125,12 +130,12 @@ public class ResizableMainView extends MainView implements View.OnAttachStateCha settings.setMainViewLayout(SettingsStore.LAYOUT_SMALL); height = heightSmall; tt9.onCreateInputView(); - vibrate(); + vibration.vibrate(); } else if (settings.isMainLayoutSmall()) { settings.setMainViewLayout(SettingsStore.LAYOUT_NUMPAD); height = (int) Math.max(Math.max(heightNumpad * 0.6, heightSmall * 1.1), height + delta); tt9.onCreateInputView(); - vibrate(); + vibration.vibrate(); } else { changeHeight(delta, heightSmall, heightNumpad); } @@ -148,12 +153,12 @@ public class ResizableMainView extends MainView implements View.OnAttachStateCha settings.setMainViewLayout(SettingsStore.LAYOUT_TRAY); height = heightTray; tt9.onCreateInputView(); - vibrate(); + vibration.vibrate(); } else if (!changeHeight(delta, heightSmall, heightNumpad)) { settings.setMainViewLayout(SettingsStore.LAYOUT_SMALL); height = heightSmall; tt9.onCreateInputView(); - vibrate(); + vibration.vibrate(); } } @@ -196,11 +201,4 @@ public class ResizableMainView extends MainView implements View.OnAttachStateCha calculateInitialHeight(); setHeight(height, heightSmall, heightNumpad); } - - - private void vibrate() { - if (tt9.getSettings().getHapticFeedback() && main != null && main.getView() != null) { - main.getView().performHapticFeedback(Vibration.getPressVibration(null)); - } - } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftBackspaceKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftBackspaceKey.java index 4bb82c25..ff1fcd7e 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftBackspaceKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftBackspaceKey.java @@ -6,7 +6,7 @@ import android.view.KeyEvent; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.languages.LanguageKind; -import io.github.sspanak.tt9.ui.main.Vibration; +import io.github.sspanak.tt9.ui.Vibration; public class SoftBackspaceKey extends SoftKey { private boolean hold; diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftFilterKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftFilterKey.java index c198624c..62d99dd1 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftFilterKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftFilterKey.java @@ -4,7 +4,7 @@ import android.content.Context; import android.util.AttributeSet; import io.github.sspanak.tt9.preferences.settings.SettingsStore; -import io.github.sspanak.tt9.ui.main.Vibration; +import io.github.sspanak.tt9.ui.Vibration; public class SoftFilterKey extends SoftKey { public SoftFilterKey(Context context) { super(context); setFontSize(); } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftInputModeKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftInputModeKey.java index 6da1d229..429ff3f4 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftInputModeKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftInputModeKey.java @@ -4,7 +4,7 @@ import android.content.Context; import android.util.AttributeSet; import io.github.sspanak.tt9.R; -import io.github.sspanak.tt9.ui.main.Vibration; +import io.github.sspanak.tt9.ui.Vibration; public class SoftInputModeKey extends SoftKey { public SoftInputModeKey(Context context) { diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java index 7a711758..cc469cdb 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKey.java @@ -10,7 +10,6 @@ import android.text.Spanned; import android.text.style.RelativeSizeSpan; import android.text.style.StyleSpan; import android.util.AttributeSet; -import android.view.HapticFeedbackConstants; import android.view.MotionEvent; import android.view.View; @@ -19,7 +18,7 @@ import androidx.core.content.ContextCompat; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.ime.TraditionalT9; import io.github.sspanak.tt9.preferences.settings.SettingsStore; -import io.github.sspanak.tt9.ui.main.Vibration; +import io.github.sspanak.tt9.ui.Vibration; import io.github.sspanak.tt9.util.Characters; import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.util.Text; @@ -28,6 +27,7 @@ public class SoftKey extends androidx.appcompat.widget.AppCompatButton implement private final String LOG_TAG = getClass().getSimpleName(); protected TraditionalT9 tt9; + protected Vibration vibration; protected float complexLabelTitleSize = SettingsStore.SOFT_KEY_COMPLEX_LABEL_TITLE_RELATIVE_SIZE; protected float complexLabelSubTitleSize = SettingsStore.SOFT_KEY_COMPLEX_LABEL_SUB_TITLE_RELATIVE_SIZE; @@ -271,8 +271,9 @@ public class SoftKey extends androidx.appcompat.widget.AppCompatButton implement protected void vibrate(int vibrationType) { - if (tt9 != null && tt9.getSettings().getHapticFeedback() && vibrationType != Vibration.getNoVibration()) { - getRootView().performHapticFeedback(vibrationType, HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + if (tt9 != null) { + vibration = vibration == null ? new Vibration(tt9.getSettings(), this) : vibration; + vibration.vibrate(vibrationType); } } } diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyArrow.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyArrow.java index cd0ff48e..b3f47241 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyArrow.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftKeyArrow.java @@ -4,7 +4,7 @@ import android.content.Context; import android.util.AttributeSet; import io.github.sspanak.tt9.R; -import io.github.sspanak.tt9.ui.main.Vibration; +import io.github.sspanak.tt9.ui.Vibration; public class SoftKeyArrow extends SoftKey { private boolean hold; diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftNumberKey.java b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftNumberKey.java index c2890036..34316898 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftNumberKey.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/main/keys/SoftNumberKey.java @@ -12,7 +12,7 @@ import io.github.sspanak.tt9.ime.modes.InputMode; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.LanguageKind; import io.github.sspanak.tt9.preferences.settings.SettingsStore; -import io.github.sspanak.tt9.ui.main.Vibration; +import io.github.sspanak.tt9.ui.Vibration; import io.github.sspanak.tt9.util.Logger; public class SoftNumberKey extends SoftKey { diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java b/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java index d36f01bd..63e58191 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/tray/SuggestionsBar.java @@ -20,6 +20,7 @@ import java.util.List; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.preferences.settings.SettingsStore; +import io.github.sspanak.tt9.ui.Vibration; import io.github.sspanak.tt9.ui.main.ResizableMainView; public class SuggestionsBar { @@ -33,6 +34,7 @@ public class SuggestionsBar { private final RecyclerView mView; private final SettingsStore settings; private SuggestionsAdapter mSuggestionsAdapter; + private Vibration vibration; private final Handler alternativeScrollingHandler = new Handler(); @@ -52,8 +54,7 @@ public class SuggestionsBar { initDataAdapter(context); initSeparator(context); configureAnimation(); - - + vibration = new Vibration(settings, mView); } } @@ -258,6 +259,7 @@ public class SuggestionsBar { * Passes through suggestion selected using the touchscreen. */ private void handleItemClick(int position) { + vibration.vibrate(); selectedIndex = position; onItemClick.run(); }