diff options
| author | Jules Aguillon | 2023-06-03 11:08:22 +0200 |
|---|---|---|
| committer | Jules Aguillon | 2023-06-03 11:15:19 +0200 |
| commit | 69e0b4c2a2424b83ce0ec876938ec3e73dd5b612 (patch) | |
| tree | 75c002dcf243d440497a6ce11b30c50a50b4bd8f | |
| parent | 6f418727cfcdd9377a345c8a40e200f701aa7ac7 (diff) | |
| download | unexpected-keyboard-69e0b4c2a2424b83ce0ec876938ec3e73dd5b612.tar.gz unexpected-keyboard-69e0b4c2a2424b83ce0ec876938ec3e73dd5b612.zip | |
More control over vibration
The newer haptic feedback API that is used instead of the vibrator
service since ef03dfe doesn't work for everyone.
The new vibration option allow to choose both the newer API ("system")
and the older API ("strong", "medium", "light").
| -rw-r--r-- | res/values-cs/strings.xml | 5 | ||||
| -rw-r--r-- | res/values-de/strings.xml | 5 | ||||
| -rw-r--r-- | res/values-es/strings.xml | 5 | ||||
| -rw-r--r-- | res/values-fa/strings.xml | 5 | ||||
| -rw-r--r-- | res/values-fr/strings.xml | 5 | ||||
| -rw-r--r-- | res/values-it/strings.xml | 5 | ||||
| -rw-r--r-- | res/values-ko/strings.xml | 5 | ||||
| -rw-r--r-- | res/values-lv/strings.xml | 5 | ||||
| -rw-r--r-- | res/values-pl/strings.xml | 5 | ||||
| -rw-r--r-- | res/values-pt/strings.xml | 5 | ||||
| -rw-r--r-- | res/values-ru/strings.xml | 5 | ||||
| -rw-r--r-- | res/values-tr/strings.xml | 5 | ||||
| -rw-r--r-- | res/values-vi/strings.xml | 5 | ||||
| -rw-r--r-- | res/values-zh-rCN/strings.xml | 5 | ||||
| -rw-r--r-- | res/values/arrays.xml | 14 | ||||
| -rw-r--r-- | res/values/strings.xml | 5 | ||||
| -rw-r--r-- | res/xml/settings.xml | 2 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/Config.java | 5 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/Keyboard2View.java | 9 | ||||
| -rw-r--r-- | srcs/juloo.keyboard2/VibratorCompat.java | 81 |
20 files changed, 175 insertions, 11 deletions
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index 552d06f..b02c056 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -67,6 +67,11 @@ <!-- <string name="pref_category_advanced">Advanced</string> --> <!-- <string name="pref_custom_layout_title">Custom layout</string> --> <!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> --> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">Další</string> <string name="key_action_done">Dokončit</string> <string name="key_action_go">Spustit</string> diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index bbaf594..4cccd3a 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -67,6 +67,11 @@ <string name="pref_category_advanced">Erweitert</string> <string name="pref_custom_layout_title">Eigenes Layout</string> <string name="pref_custom_layout_summary">Bitte Sourcecode ansehen. Diese Option ist nicht zur Verwendung vorgesehen.</string> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">Nächstes</string> <string name="key_action_done">Fertig</string> <string name="key_action_go">Los</string> diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 41f53ba..b1908fd 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -67,6 +67,11 @@ <!-- <string name="pref_category_advanced">Advanced</string> --> <!-- <string name="pref_custom_layout_title">Custom layout</string> --> <!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> --> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">Siguiente</string> <string name="key_action_done">Hecho</string> <string name="key_action_go">Ir</string> diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 84399e9..93d0310 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -67,6 +67,11 @@ <string name="pref_category_advanced">پیشرفته</string> <string name="pref_custom_layout_title">طرح شخصی</string> <string name="pref_custom_layout_summary">کد منبع را ببینید. این گزینه قرار نیست استفاده شود.</string> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">بعدی</string> <string name="key_action_done">اتمام</string> <string name="key_action_go">برو</string> diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 8ea5379..428b4ff 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -67,6 +67,11 @@ <string name="pref_category_advanced">Avancé</string> <string name="pref_custom_layout_title">Disposition personnalisée</string> <string name="pref_custom_layout_summary">Cette option n\'est pas faite pour être utilisée.</string> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">Suiv.</string> <string name="key_action_done">Fin</string> <string name="key_action_go">Aller</string> diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 2774c6c..893500c 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -67,6 +67,11 @@ <!-- <string name="pref_category_advanced">Advanced</string> --> <!-- <string name="pref_custom_layout_title">Custom layout</string> --> <!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> --> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">Prossimo</string> <string name="key_action_done">Fatto</string> <string name="key_action_go">Vai</string> diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 63d57b6..7a9d001 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -67,6 +67,11 @@ <!-- <string name="pref_category_advanced">Advanced</string> --> <!-- <string name="pref_custom_layout_title">Custom layout</string> --> <!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> --> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">다음</string> <string name="key_action_done">확인</string> <string name="key_action_go">Go</string> diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index f59e234..aa89788 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -67,6 +67,11 @@ <string name="pref_category_advanced">Papildu</string> <string name="pref_custom_layout_title">Pielāgots izkārtojums</string> <string name="pref_custom_layout_summary">Skatīt pirmkodu. Šī iespēja nav paredzēta izmantošanai.</string> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">Nākamais</string> <string name="key_action_done">Darīts</string> <string name="key_action_go">Aiziet</string> diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 0b2edb1..697a104 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -67,6 +67,11 @@ <string name="pref_category_advanced">Zaawansowane</string> <string name="pref_custom_layout_title">Własny układ</string> <string name="pref_custom_layout_summary">Zobacz kod źródłowy. Ta opcja nie jest przeznaczona do użycia.</string> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">Dalej</string> <string name="key_action_done">OK</string> <string name="key_action_go">Przejdź</string> diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 6b92f44..8add41d 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -67,6 +67,11 @@ <string name="pref_category_advanced">Avançado</string> <string name="pref_custom_layout_title">Layout personalizado</string> <string name="pref_custom_layout_summary">Veja o código-fonte. Esta opção não deve ser usada.</string> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">Próximo</string> <string name="key_action_done">Pronto</string> <string name="key_action_go">Ir</string> diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 3ff8235..66e17d3 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -67,6 +67,11 @@ <string name="pref_category_advanced">Расширенные настройки</string> <string name="pref_custom_layout_title">Пользовательская раскладка</string> <string name="pref_custom_layout_summary">Откройте исходный код. Эта параметр не предназначен для использования.</string> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">Далее</string> <string name="key_action_done">Ввод</string> <string name="key_action_go">Go</string> diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 4e5a420..236f368 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -67,6 +67,11 @@ <!-- <string name="pref_category_advanced">Advanced</string> --> <!-- <string name="pref_custom_layout_title">Custom layout</string> --> <!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> --> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">İleri</string> <string name="key_action_done">Bitti</string> <string name="key_action_go">İlerle</string> diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 2f00ac3..be2d515 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -69,6 +69,11 @@ <string name="pref_category_advanced">Nâng cao</string> <string name="pref_custom_layout_title">Tùy chỉnh bố cục</string> <string name="pref_custom_layout_summary">Hãy xem mã nguồn. Lựa chọn này không có mục đích sử dụng.</string> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">Tiếp</string> <string name="key_action_done">Xong</string> <string name="key_action_go">Đi</string> diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index fc1d70a..e5bd4d4 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -67,6 +67,11 @@ <!-- <string name="pref_category_advanced">Advanced</string> --> <!-- <string name="pref_custom_layout_title">Custom layout</string> --> <!-- <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> --> + <!-- <string name="pref_vibration_e_disabled">Disabled</string> --> + <!-- <string name="pref_vibration_e_system">System</string> --> + <!-- <string name="pref_vibration_e_strong">Strong</string> --> + <!-- <string name="pref_vibration_e_medium">Medium</string> --> + <!-- <string name="pref_vibration_e_light">Light</string> --> <string name="key_action_next">下一项</string> <string name="key_action_done">完成</string> <string name="key_action_go">前往</string> diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 51c5940..cf66614 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -134,4 +134,18 @@ <item>25</item> <item>35</item> </string-array> + <string-array name="pref_vibration_entries"> + <item>@string/pref_vibration_e_disabled</item> + <item>@string/pref_vibration_e_system</item> + <item>@string/pref_vibration_e_strong</item> + <item>@string/pref_vibration_e_medium</item> + <item>@string/pref_vibration_e_light</item> + </string-array> + <string-array name="pref_vibration_values"> + <item>disabled</item> + <item>system</item> + <item>strong</item> + <item>medium</item> + <item>light</item> + </string-array> </resources> diff --git a/res/values/strings.xml b/res/values/strings.xml index 7b6e0df..94eb47d 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -67,6 +67,11 @@ <string name="pref_category_advanced">Advanced</string> <string name="pref_custom_layout_title">Custom layout</string> <string name="pref_custom_layout_summary">See the source code. This option is not meant to be used.</string> + <string name="pref_vibration_e_disabled">Disabled</string> + <string name="pref_vibration_e_system">System</string> + <string name="pref_vibration_e_strong">Strong</string> + <string name="pref_vibration_e_medium">Medium</string> + <string name="pref_vibration_e_light">Light</string> <string name="key_action_next">Next</string> <string name="key_action_done">Done</string> <string name="key_action_go">Go</string> diff --git a/res/xml/settings.xml b/res/xml/settings.xml index fafc174..322bf4d 100644 --- a/res/xml/settings.xml +++ b/res/xml/settings.xml @@ -55,7 +55,7 @@ <PreferenceCategory android:title="@string/pref_category_behavior"> <CheckBoxPreference android:key="autocapitalisation" android:title="@string/pref_autocapitalisation_title" android:summary="@string/pref_autocapitalisation_summary" android:defaultValue="true"/> <CheckBoxPreference android:key="switch_input_immediate" android:title="@string/pref_switch_input_immediate_title" android:summary="@string/pref_switch_input_immediate_summary" android:defaultValue="false"/> - <CheckBoxPreference android:key="vibrate_enabled" android:title="@string/pref_vibrate_title" android:summary="@string/pref_vibrate_summary" android:defaultValue="true"/> + <ListPreference android:key="vibration_behavior" android:title="@string/pref_vibrate_title" android:summary="@string/pref_vibrate_summary" android:defaultValue="system" android:entries="@array/pref_vibration_entries" android:entryValues="@array/pref_vibration_values"/> </PreferenceCategory> <PreferenceCategory android:title="@string/pref_category_style"> <ListPreference android:key="theme" android:title="@string/pref_theme" android:summary="%s" android:defaultValue="system" android:entries="@array/pref_theme_entries" android:entryValues="@array/pref_theme_values"/> diff --git a/srcs/juloo.keyboard2/Config.java b/srcs/juloo.keyboard2/Config.java index 1abef6b..9fa6593 100644 --- a/srcs/juloo.keyboard2/Config.java +++ b/srcs/juloo.keyboard2/Config.java @@ -31,7 +31,7 @@ final class Config public boolean number_row; public float swipe_dist_px; public float slide_step_px; - public boolean vibrateEnabled; + public VibratorCompat.VibrationBehavior vibration_behavior; public long longPressTimeout; public long longPressInterval; public float margin_bottom; @@ -123,7 +123,8 @@ final class Config float swipe_dist_value = Float.valueOf(_prefs.getString("swipe_dist", "15")); swipe_dist_px = swipe_dist_value / 25.f * swipe_scaling; slide_step_px = swipe_dist_px / 4.f; - vibrateEnabled = _prefs.getBoolean("vibrate_enabled", true); + vibration_behavior = + VibratorCompat.VibrationBehavior.of_string(_prefs.getString("vibration_behavior", "system")); longPressTimeout = _prefs.getInt("longpress_timeout", 600); longPressInterval = _prefs.getInt("longpress_interval", 65); margin_bottom = get_dip_pref(dm, oriented_pref("margin_bottom"), diff --git a/srcs/juloo.keyboard2/Keyboard2View.java b/srcs/juloo.keyboard2/Keyboard2View.java index 65098d0..f4053f2 100644 --- a/srcs/juloo.keyboard2/Keyboard2View.java +++ b/srcs/juloo.keyboard2/Keyboard2View.java @@ -10,7 +10,6 @@ import android.inputmethodservice.InputMethodService; import android.os.Build.VERSION; import android.util.AttributeSet; import android.util.DisplayMetrics; -import android.view.HapticFeedbackConstants; import android.view.MotionEvent; import android.view.View; import android.view.Window; @@ -231,13 +230,7 @@ public class Keyboard2View extends View private void vibrate() { - if (!_config.vibrateEnabled) - return ; - if (VERSION.SDK_INT >= 5) - { - performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, - HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); - } + VibratorCompat.vibrate(this, _config.vibration_behavior); } @Override diff --git a/srcs/juloo.keyboard2/VibratorCompat.java b/srcs/juloo.keyboard2/VibratorCompat.java new file mode 100644 index 0000000..99ff5f5 --- /dev/null +++ b/srcs/juloo.keyboard2/VibratorCompat.java @@ -0,0 +1,81 @@ +package juloo.keyboard2; + +import android.content.Context; +import android.os.Build.VERSION; +import android.os.Vibrator; +import android.view.HapticFeedbackConstants; +import android.view.View; + +public final class VibratorCompat +{ + public static void vibrate(View v, VibrationBehavior b) + { + switch (b) + { + case DISABLED: + break; + case SYSTEM: + if (VERSION.SDK_INT >= 8) + v.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, + HapticFeedbackConstants.FLAG_IGNORE_VIEW_SETTING); + break; + case STRONG: + vibrator_vibrate(v, 50); + break; + case MEDIUM: + vibrator_vibrate(v, 20); + break; + case LIGHT: + vibrator_vibrate(v, 10); + break; + } + } + + /** Use the older [Vibrator] when the newer API is not available or the user + wants more control. */ + static void vibrator_vibrate(View v, int duration) + { + try + { + get_vibrator(v).vibrate(duration); + } + catch (Exception e) {} + } + + static Vibrator vibrator_service = null; + + static Vibrator get_vibrator(View v) + { + if (vibrator_service == null) + { + vibrator_service = + (Vibrator)v.getContext().getSystemService(Context.VIBRATOR_SERVICE); + } + return vibrator_service; + } + + public static enum VibrationBehavior + { + DISABLED, + SYSTEM, + STRONG, + MEDIUM, + LIGHT; + + VibrationBehavior() {} + + /** Defaults [SYSTEM] for unrecognized strings. */ + public static VibrationBehavior of_string(String s) + { + switch (s) + { + case "disabled": return DISABLED; + case "system": return SYSTEM; + case "strong": return STRONG; + case "medium": return MEDIUM; + case "light": return LIGHT; + default: return SYSTEM; + } + } + } +} |
