abouttreesummaryrefslogcommitdiff
diff options
context:
space:
mode:
authorJules Aguillon2021-04-28 00:23:52 +0200
committerJules Aguillon2021-04-29 01:06:51 +0200
commitd00576ac2d7605c48034dc52e6622f48f680d4ae (patch)
tree4e52e2c1ff1785a2f762fd5de134dfe08a064802
parentc86a11944873534c140cd07b7c91d63c939b45b6 (diff)
downloadunexpected-keyboard-d00576ac2d7605c48034dc52e6622f48f680d4ae.tar.gz
unexpected-keyboard-d00576ac2d7605c48034dc52e6622f48f680d4ae.zip
Add the "layout" option again
Some versions of android don't allow to configure several languages.
-rw-r--r--res/values/arrays.xml9
-rw-r--r--res/values/strings.xml11
-rw-r--r--res/xml/method.xml2
-rw-r--r--res/xml/settings.xml8
-rw-r--r--srcs/juloo.keyboard2/Config.java15
-rw-r--r--srcs/juloo.keyboard2/Keyboard2.java44
-rw-r--r--srcs/juloo.keyboard2/Keyboard2View.java7
7 files changed, 64 insertions, 32 deletions
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 896c515..c6e2139 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
- <string-array name="pref_layout_values">
- <item>azerty</item>
- <item>qwerty</item>
- </string-array>
+ <string-array name="pref_layout_values">
+ <item>system</item>
+ <item>azerty</item>
+ <item>qwerty</item>
+ </string-array>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9637b57..04c3b57 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5,10 +5,17 @@
<string name="settings_activity_label">Unexpected Keyboard Settings</string>
- <string name="subtype_label_azerty">%s AZERTY</string>
- <string name="subtype_label_qwerty">%s QWERTY</string>
+ <string name="subtype_label_azerty">%s</string>
+ <string name="subtype_label_qwerty">%s</string>
<string name="pref_category_layout">Layout</string>
+ <string name="pref_layout_title">Change keyboard layout</string>
+ <string name="pref_layout_summary">%s</string>
+ <string-array name="pref_layout_entries">
+ <item>System settings</item>
+ <item>Azerty</item>
+ <item>Qwerty</item>
+ </string-array>
<string name="pref_disable_accent_keys_title">Toggle accent keys</string>
<string name="pref_disable_accent_keys_summary">Whether to remove the accent keys from the keyboard</string>
diff --git a/res/xml/method.xml b/res/xml/method.xml
index 92c02ff..5a515cd 100644
--- a/res/xml/method.xml
+++ b/res/xml/method.xml
@@ -7,11 +7,13 @@
android:imeSubtypeLocale="en_US"
android:imeSubtypeMode="keyboard"
android:isAsciiCapable="true"
+ android:imeSubtypeExtraValue="default_layout=qwerty"
/>
<subtype android:label="@string/subtype_label_azerty"
android:languageTag="fr"
android:imeSubtypeLocale="fr_FR"
android:imeSubtypeMode="keyboard"
android:isAsciiCapable="true"
+ android:imeSubtypeExtraValue="default_layout=azerty"
/>
</input-method>
diff --git a/res/xml/settings.xml b/res/xml/settings.xml
index d56f029..f943557 100644
--- a/res/xml/settings.xml
+++ b/res/xml/settings.xml
@@ -1,6 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/pref_category_layout">
+ <ListPreference
+ android:key="layout"
+ android:title="@string/pref_layout_title"
+ android:summary="@string/pref_layout_summary"
+ android:defaultValue="system"
+ android:entries="@array/pref_layout_entries"
+ android:entryValues="@array/pref_layout_values" />
+ />
<CheckBoxPreference
android:key="disable_accent_keys"
android:title="@string/pref_disable_accent_keys_title"
diff --git a/srcs/juloo.keyboard2/Config.java b/srcs/juloo.keyboard2/Config.java
index dd42b0e..386dc73 100644
--- a/srcs/juloo.keyboard2/Config.java
+++ b/srcs/juloo.keyboard2/Config.java
@@ -15,6 +15,7 @@ class Config
public final float keyHorizontalInterval;
public final float keyRound;
+ public int layout; // Or '-1' for the system defaults
public float subValueDist;
public boolean vibrateEnabled;
public long vibrateDuration;
@@ -41,6 +42,7 @@ class Config
keyHorizontalInterval = res.getDimension(R.dimen.key_horizontal_interval);
keyRound = res.getDimension(R.dimen.key_round);
// default values
+ layout = -1;
subValueDist = 10f;
vibrateEnabled = true;
vibrateDuration = 20;
@@ -65,6 +67,7 @@ class Config
{
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(_context);
+ layout = layoutId_of_string(prefs.getString("layout", "system"));
subValueDist = prefs.getFloat("sub_value_dist", subValueDist);
vibrateEnabled = prefs.getBoolean("vibrate_enabled", vibrateEnabled);
vibrateDuration = prefs.getInt("vibrate_duration", (int)vibrateDuration);
@@ -87,4 +90,16 @@ class Config
return (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value,
_context.getResources().getDisplayMetrics()));
}
+
+ public static int layoutId_of_string(String name)
+ {
+ switch (name)
+ {
+ case "azerty": return R.xml.azerty;
+ case "qwerty": return R.xml.qwerty;
+ case "system": return -1;
+ default: throw new IllegalArgumentException();
+ }
+ }
+
}
diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java
index d0e58eb..7310053 100644
--- a/srcs/juloo.keyboard2/Keyboard2.java
+++ b/srcs/juloo.keyboard2/Keyboard2.java
@@ -33,19 +33,6 @@ public class Keyboard2 extends InputMethodService
private Map<Integer, KeyboardData> _layoutCache = new HashMap<Integer, KeyboardData>();
- private static final int DEFAULT_LAYOUT = R.xml.qwerty;
- private static final Map<String, Integer> LAYOUTS = new HashMap<String, Integer>();
-
- private static void add_layout(String lang, int resId)
- {
- LAYOUTS.put(new Locale(lang).getLanguage(), resId);
- }
-
- static
- {
- add_layout("fr", R.xml.azerty);
- }
-
private KeyboardData getLayout(int resId)
{
KeyboardData l = _layoutCache.get(resId);
@@ -81,10 +68,23 @@ public class Keyboard2 extends InputMethodService
private void refreshSubtype(InputMethodSubtype subtype)
{
- Integer l = LAYOUTS.get(subtype.getLanguageTag());
- if (l == null)
- l = DEFAULT_LAYOUT;
- _currentTextLayout = l;
+ int l;
+ if (_config.layout == -1)
+ l = Config.layoutId_of_string(subtype.getExtraValueOf("default_layout"));
+ else
+ l = _config.layout;
+ if (_currentTextLayout != l)
+ {
+ _currentTextLayout = l;
+ _keyboardView.setKeyboard(getLayout(l));
+ }
+ }
+
+ private void refreshSubtypeImm()
+ {
+ InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
+ _config.shouldOfferSwitchingToNextInputMethod = imm.shouldOfferSwitchingToNextInputMethod(getConnectionToken());
+ refreshSubtype(imm.getCurrentInputMethodSubtype());
}
@Override
@@ -100,27 +100,23 @@ public class Keyboard2 extends InputMethodService
@Override
public void onStartInputView(EditorInfo info, boolean restarting)
{
- InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
- _config.shouldOfferSwitchingToNextInputMethod = imm.shouldOfferSwitchingToNextInputMethod(getConnectionToken());
- refreshSubtype(imm.getCurrentInputMethodSubtype());
+ refreshSubtypeImm();
if ((info.inputType & InputType.TYPE_CLASS_NUMBER) != 0)
_keyboardView.setKeyboard(getLayout(R.xml.numeric));
- else
- _keyboardView.setKeyboard(getLayout(_currentTextLayout));
}
@Override
public void onCurrentInputMethodSubtypeChanged(InputMethodSubtype subtype)
{
refreshSubtype(subtype);
- _keyboardView.setKeyboard(getLayout(_currentTextLayout));
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
{
_config.refresh();
- _keyboardView.refreshConfig(_config);
+ refreshSubtypeImm();
+ _keyboardView.refreshConfig(_config, getLayout(_currentTextLayout));
}
@Override
diff --git a/srcs/juloo.keyboard2/Keyboard2View.java b/srcs/juloo.keyboard2/Keyboard2View.java
index 0dc76ea..37a210f 100644
--- a/srcs/juloo.keyboard2/Keyboard2View.java
+++ b/srcs/juloo.keyboard2/Keyboard2View.java
@@ -56,11 +56,12 @@ public class Keyboard2View extends View
super(context, attrs);
_vibratorService = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE);
_handler = new Handler(this);
- refreshConfig(((Keyboard2)context).getConfig());
+ refreshConfig(((Keyboard2)context).getConfig(), null);
setOnTouchListener(this);
}
- public void refreshConfig(Config config)
+ /* Internally calls [reset()]. */
+ public void refreshConfig(Config config, KeyboardData kw)
{
Resources res = getResources();
_config = config;
@@ -76,6 +77,8 @@ public class Keyboard2View extends View
Typeface specialKeysFont = ((Keyboard2)getContext()).getSpecialKeyFont();
_specialKeyLabelPaint = initLabelPaint(Paint.Align.CENTER, specialKeysFont);
_specialKeySubLabelPaint = initLabelPaint(Paint.Align.LEFT, specialKeysFont);
+ if (kw != null)
+ setKeyboard(kw); // handle layout options then calls reset().
}
private Paint initLabelPaint(Paint.Align align, Typeface font)