diff --git a/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java b/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java index 91e2ef8c4e..f6acd350da 100644 --- a/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java +++ b/android/KMAPro/kMAPro/src/main/java/com/keyman/android/SystemKeyboard.java @@ -5,10 +5,10 @@ package com.keyman.android; import com.keyman.engine.util.DownloadFileUtils; -import com.tavultesoft.kmapro.AdjustLongpressDelayActivity; import com.tavultesoft.kmapro.BuildConfig; import com.tavultesoft.kmapro.DefaultLanguageResource; import com.tavultesoft.kmapro.KeymanSettingsActivity; +import com.tavultesoft.kmapro.PreferencesManager; import com.keyman.engine.KMManager; import com.keyman.engine.KMManager.KeyboardType; import com.keyman.engine.KMHardwareKeyboardInterpreter; @@ -30,7 +30,6 @@ import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.view.Window; -import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.ExtractedText; import android.view.inputmethod.ExtractedTextRequest; @@ -287,9 +286,10 @@ public class SystemKeyboard extends InputMethodService implements OnKeyboardEven return true; }; - // TODO: Implement IME setting similar to Gboard "Show on-screen keyboard" with physical keyboard - // (default false) - return true; + Context context = getApplicationContext(); + SharedPreferences prefs = context.getSharedPreferences(PreferencesManager.kma_prefs_name, Context.MODE_PRIVATE); + boolean showOSK = prefs.getBoolean(KeymanSettingsActivity.oskWithPhysicalKeyboardKey, false); + return showOSK; } @Override diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsActivity.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsActivity.java index 3a8b12691d..bda56856b2 100644 --- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsActivity.java +++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsActivity.java @@ -13,6 +13,7 @@ public class KeymanSettingsActivity extends BaseActivity { protected static final String sendCrashReport = "SendCrashReport"; public static final String spacebarTextKey = "SpacebarText"; public static final String hapticFeedbackKey = "HapticFeedback"; + public static final String oskWithPhysicalKeyboardKey = "ShowOSK"; protected KeymanSettingsFragment innerFragment; diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsFragment.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsFragment.java index 59ac59e2f8..4629336635 100644 --- a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsFragment.java +++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/KeymanSettingsFragment.java @@ -6,6 +6,7 @@ package com.tavultesoft.kmapro; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.provider.Settings; import android.view.inputmethod.InputMethodManager; @@ -20,6 +21,7 @@ import androidx.preference.SwitchPreference; import com.keyman.engine.DisplayLanguages; import com.keyman.engine.KMManager; import com.keyman.engine.data.Dataset; +import com.tavultesoft.kmapro.PreferencesManager; import java.util.HashMap; @@ -157,6 +159,31 @@ public class KeymanSettingsFragment extends PreferenceFragmentCompat { } }); + SwitchPreference oskWithPhysicalKeyboardPreference = new SwitchPreference(context); + oskWithPhysicalKeyboardPreference.setKey(KeymanSettingsActivity.oskWithPhysicalKeyboardKey); + oskWithPhysicalKeyboardPreference.setTitle(getString(R.string.show_osk)); + oskWithPhysicalKeyboardPreference.setSummary(getString(R.string.show_osk_hint)); + + SharedPreferences prefs = context.getSharedPreferences( + PreferencesManager.kma_prefs_name, Context.MODE_PRIVATE); + SharedPreferences.Editor editor = prefs.edit(); + boolean showOSK = prefs.getBoolean( + KeymanSettingsActivity.oskWithPhysicalKeyboardKey, false); + oskWithPhysicalKeyboardPreference.setDefaultValue(showOSK); + + oskWithPhysicalKeyboardPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + if (newValue == null) { + return false; + } + + editor.putBoolean(KeymanSettingsActivity.oskWithPhysicalKeyboardKey, (boolean)newValue); + editor.commit(); + return true; + } + }); + SwitchPreference hapticFeedbackPreference = new SwitchPreference(context); hapticFeedbackPreference.setKey(KeymanSettingsActivity.hapticFeedbackKey); hapticFeedbackPreference.setTitle(getString(R.string.haptic_feedback)); @@ -198,6 +225,8 @@ public class KeymanSettingsFragment extends PreferenceFragmentCompat { screen.addPreference(adjustKeyboardHeight); screen.addPreference(adjustLongpressDelay); + + screen.addPreference(oskWithPhysicalKeyboardPreference); screen.addPreference(spacebarTextPreference); screen.addPreference(hapticFeedbackPreference); diff --git a/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/PreferencesManager.java b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/PreferencesManager.java new file mode 100644 index 0000000000..73abd79ecc --- /dev/null +++ b/android/KMAPro/kMAPro/src/main/java/com/tavultesoft/kmapro/PreferencesManager.java @@ -0,0 +1,11 @@ +/** + * Keyman is copyright (C) SIL Global. MIT License. + * + */ +package com.tavultesoft.kmapro; + +public class PreferencesManager { + + // TODO: Separate this from the Keyman Engine preference key name in strings.xml: #13633 + public static final String kma_prefs_name = "KMAPreferences"; +} diff --git a/android/KMAPro/kMAPro/src/main/res/values/strings.xml b/android/KMAPro/kMAPro/src/main/res/values/strings.xml index 32cdf07f1a..ce89ab5140 100644 --- a/android/KMAPro/kMAPro/src/main/res/values/strings.xml +++ b/android/KMAPro/kMAPro/src/main/res/values/strings.xml @@ -146,6 +146,12 @@ Do not show caption on spacebar + + Show On-Screen Keyboard + + + When physical keyboard is connected + Vibrate when typing diff --git a/android/docs/help/android_images/settings-screen-ap.png b/android/docs/help/android_images/settings-screen-ap.png index f83da38040..843f7e54d1 100644 Binary files a/android/docs/help/android_images/settings-screen-ap.png and b/android/docs/help/android_images/settings-screen-ap.png differ diff --git a/android/docs/help/basic/config/index.md b/android/docs/help/basic/config/index.md index 3667de747d..327c576a58 100644 --- a/android/docs/help/basic/config/index.md +++ b/android/docs/help/basic/config/index.md @@ -49,6 +49,9 @@ Click on this to [adjust the keyboard height](adjust-keyboard-height). Click on this to [adjust the delay time](adjust-longpress-delay) for a longpress gesture. +## Show On-Screen Keyboard +By default, Android 16 (Baklava) and later versions won't display the On-Screen keyboard if a physical keyboard is connected. When enabled, show the Keyman system keyboard even if a physical keyboard is connected. + ## Spacebar Caption Click on this to [change the displayed keyboard name](spacebar-caption) on the spacebar.