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.