abouttreesummaryrefslogcommitdiff
diff options
context:
space:
mode:
authorJules Aguillon2023-06-08 21:59:24 +0200
committerJules Aguillon2023-06-10 18:07:23 +0200
commita26a535729aa9937af0aab338273c645e33192d1 (patch)
treed3bc99f462d142a9e06bed8215d29e3d4c079937
parentb4177b52676321cd4a5fe7a336a4f09e50274f86 (diff)
downloadunexpected-keyboard-a26a535729aa9937af0aab338273c645e33192d1.tar.gz
unexpected-keyboard-a26a535729aa9937af0aab338273c645e33192d1.zip
Fix `_localeTextLayout` null on API < 12
On API level < 12 or on some rare cases, `refreshSubtypeLayout` was not called, making `_localeTextLayout` uninitialized. This might also happen if `getExtraValueOf` returns an invalid layout name. eg. `method.xml` contains an invalid layout name.
-rw-r--r--srcs/juloo.keyboard2/Config.java8
-rw-r--r--srcs/juloo.keyboard2/Keyboard2.java19
2 files changed, 13 insertions, 14 deletions
diff --git a/srcs/juloo.keyboard2/Config.java b/srcs/juloo.keyboard2/Config.java
index f754e52..8406be2 100644
--- a/srcs/juloo.keyboard2/Config.java
+++ b/srcs/juloo.keyboard2/Config.java
@@ -335,13 +335,13 @@ final class Config
}
}
+ /** Might return [null] if the selected layout is "system", "custom" or if
+ the name is not recognized. */
public KeyboardData layout_of_string(Resources res, String name)
{
- int id = R.xml.qwerty; // The config might store an invalid layout, don't crash
+ int id;
switch (name)
{
- case "system": case "none": return null;
- case "custom": if (custom_layout != null) return custom_layout; break;
case "azerty": id = R.xml.azerty; break;
case "bangla": id = R.xml.bangla; break;
case "bgph1": id = R.xml.local_bgph1; break;
@@ -376,6 +376,8 @@ final class Config
case "ar_alt": id = R.xml.ar_alt; break;
case "persian": id = R.xml.persian; break;
case "kurdish": id = R.xml.kurdish; break;
+ case "custom": return custom_layout;
+ case "system": case "none": default: return null;
}
return KeyboardData.load(res, id);
}
diff --git a/srcs/juloo.keyboard2/Keyboard2.java b/srcs/juloo.keyboard2/Keyboard2.java
index 2742de7..f8aab34 100644
--- a/srcs/juloo.keyboard2/Keyboard2.java
+++ b/srcs/juloo.keyboard2/Keyboard2.java
@@ -33,7 +33,7 @@ public class Keyboard2 extends InputMethodService
// If not 'null', the layout to use instead of [_currentTextLayout].
private KeyboardData _currentSpecialLayout;
private Current_text_layout _currentTextLayout;
- // Layout associated with the currently selected locale.
+ // Layout associated with the currently selected locale. Not 'null'.
private KeyboardData _localeTextLayout;
private ViewGroup _emojiPane = null;
public int actionId; // Action performed by the Action key.
@@ -99,15 +99,6 @@ public class Keyboard2 extends InputMethodService
return Arrays.asList();
}
- private void refreshSubtypeLayout(InputMethodSubtype subtype)
- {
- String s = subtype.getExtraValueOf("default_layout");
- if (s != null)
- _localeTextLayout = _config.layout_of_string(getResources(), s);
- else
- _localeTextLayout = KeyboardData.load(getResources(), R.xml.qwerty);
- }
-
private void extra_keys_of_subtype(Set<KeyValue> dst, InputMethodSubtype subtype)
{
String extra_keys = subtype.getExtraValueOf("extra_keys");
@@ -164,6 +155,7 @@ public class Keyboard2 extends InputMethodService
else
_config.shouldOfferSwitchingToNextInputMethod = shouldOfferSwitchingToNextInputMethod();
_config.shouldOfferVoiceTyping = (get_voice_typing_im(imm) != null);
+ KeyboardData default_layout = null;
if (VERSION.SDK_INT < 12)
{
// Subtypes won't work well under API level 12 (getExtraValueOf)
@@ -179,10 +171,15 @@ public class Keyboard2 extends InputMethodService
}
else
{
- refreshSubtypeLayout(subtype);
+ String s = subtype.getExtraValueOf("default_layout");
+ if (s != null)
+ default_layout = _config.layout_of_string(getResources(), s);
refreshAccentsOption(imm, subtype);
}
}
+ if (default_layout == null)
+ default_layout = KeyboardData.load(getResources(), R.xml.qwerty);
+ _localeTextLayout = default_layout;
if (_config.second_layout == null)
{
_config.shouldOfferSwitchingToSecond = false;