abouttreesummaryrefslogcommitdiff
path: root/srcs/juloo.keyboard2/Keyboard2.java
diff options
context:
space:
mode:
authorJules Aguillon2021-04-15 23:56:34 +0200
committerJules Aguillon2021-04-15 23:56:34 +0200
commitca07bff1330024bd78e28d1bc83940daab678fbb (patch)
tree784c839b541f9fc78bdeb2fce018ea0ca15b40a4 /srcs/juloo.keyboard2/Keyboard2.java
parentc22ca7302c16773dbe1971323034dd6e23d9611b (diff)
downloadunexpected-keyboard-ca07bff1330024bd78e28d1bc83940daab678fbb.tar.gz
unexpected-keyboard-ca07bff1330024bd78e28d1bc83940daab678fbb.zip
Use subtypes to choose layout
This removes the "layout" setting. Every layouts that the user could use will appear in the global settings.
Diffstat (limited to 'srcs/juloo.keyboard2/Keyboard2.java')
-rw-r--r--srcs/juloo.keyboard2/Keyboard2.java77
1 files changed, 54 insertions, 23 deletions
diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java
index cb1def8..f4226f6 100644
--- a/srcs/juloo.keyboard2/Keyboard2.java
+++ b/srcs/juloo.keyboard2/Keyboard2.java
@@ -1,5 +1,6 @@
package juloo.keyboard2;
+import android.content.Context;
import android.content.res.Configuration;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -10,22 +11,51 @@ import android.text.InputType;
import android.preference.PreferenceManager;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
+import android.view.inputmethod.InputMethodSubtype;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.util.Log;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
public class Keyboard2 extends InputMethodService
implements SharedPreferences.OnSharedPreferenceChangeListener
{
private Keyboard2View _keyboardView;
- private KeyboardData _textKeyboard = null;
- private KeyboardData _numericKeyboard = null;
+ private int _currentTextLayout;
private ViewGroup _emojiPane = null;
private Typeface _specialKeyFont = null;
private Config _config;
+ 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);
+ if (l == null)
+ {
+ l = KeyboardData.parse(getResources().getXml(resId));
+ _layoutCache.put(resId, l);
+ }
+ return l;
+ }
+
@Override
public void onCreate()
{
@@ -34,7 +64,6 @@ public class Keyboard2 extends InputMethodService
PreferenceManager.setDefaultValues(this, R.xml.settings, false);
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
_config = new Config(this);
- _numericKeyboard = KeyboardData.parse(getResources().getXml(R.xml.numeric));
_keyboardView = (Keyboard2View)getLayoutInflater().inflate(R.layout.keyboard, null);
_keyboardView.reset();
}
@@ -49,6 +78,14 @@ public class Keyboard2 extends InputMethodService
return (_specialKeyFont);
}
+ private void refreshSubtype(InputMethodSubtype subtype)
+ {
+ Integer l = LAYOUTS.get(subtype.getLanguageTag());
+ if (l == null)
+ l = DEFAULT_LAYOUT;
+ _currentTextLayout = l;
+ }
+
@Override
public View onCreateInputView()
{
@@ -62,17 +99,25 @@ public class Keyboard2 extends InputMethodService
@Override
public void onStartInputView(EditorInfo info, boolean restarting)
{
+ InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
+ refreshSubtype(imm.getCurrentInputMethodSubtype());
if ((info.inputType & InputType.TYPE_CLASS_NUMBER) != 0)
- _keyboardView.setKeyboard(_numericKeyboard);
- else
- _keyboardView.setKeyboard(_textKeyboard);
+ _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();
- updateConfig();
_keyboardView.reset();
}
@@ -82,20 +127,6 @@ public class Keyboard2 extends InputMethodService
_keyboardView.reset();
}
- private int _getKeyboardLayoutRes(SharedPreferences prefs)
- {
- // Not looking up using [getIdentifier] as it was intended because the
- // [packageName] argument can't be passed reliably (eg. debug builds)
- switch (prefs.getString("keyboard_layout", null))
- {
- case "azerty":
- return R.xml.azerty;
- default:
- case "qwerty":
- return R.xml.qwerty;
- }
- }
-
public void handleKeyUp(KeyValue key, int flags)
{
int eventCode = key.getEventCode();
@@ -110,9 +141,9 @@ public class Keyboard2 extends InputMethodService
startActivity(intent);
}
else if (eventCode == KeyValue.EVENT_SWITCH_TEXT)
- _keyboardView.setKeyboard(_textKeyboard);
+ _keyboardView.setKeyboard(getLayout(_currentTextLayout));
else if (eventCode == KeyValue.EVENT_SWITCH_NUMERIC)
- _keyboardView.setKeyboard(_numericKeyboard);
+ _keyboardView.setKeyboard(getLayout(R.xml.numeric));
else if (eventCode == KeyValue.EVENT_SWITCH_EMOJI)
{
if (_emojiPane == null)