summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/res/res/values/config.xml4
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--services/java/com/android/server/SystemServer.java13
3 files changed, 17 insertions, 1 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 4a60fb7e8292..12c55f873373 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -4410,6 +4410,10 @@
or empty if the default should be used. -->
<string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider"></string>
+ <!-- Class name of the device specific implementation of InputMethodManagerService
+ or empty if the default should be used. -->
+ <string translatable="false" name="config_deviceSpecificInputMethodManagerService"></string>
+
<!-- Component name of media projection permission dialog -->
<string name="config_mediaProjectionPermissionDialogComponent" translatable="false">com.android.systemui/com.android.systemui.media.MediaProjectionPermissionActivity</string>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index e9f80235d746..daed3bb6dc42 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -483,6 +483,7 @@
<java-symbol type="array" name="config_deviceSpecificSystemServices" />
<java-symbol type="string" name="config_deviceSpecificDevicePolicyManagerService" />
<java-symbol type="string" name="config_deviceSpecificAudioService" />
+ <java-symbol type="string" name="config_deviceSpecificInputMethodManagerService" />
<java-symbol type="integer" name="config_num_physical_slots" />
<java-symbol type="integer" name="config_default_cellular_usage_setting" />
<java-symbol type="array" name="config_supported_cellular_usage_settings" />
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 88c0ec6d9c95..fe2d0be0fe36 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -1665,7 +1665,18 @@ public final class SystemServer implements Dumpable {
// Bring up services needed for UI.
if (mFactoryTestMode != FactoryTest.FACTORY_TEST_LOW_LEVEL) {
t.traceBegin("StartInputMethodManagerLifecycle");
- mSystemServiceManager.startService(InputMethodManagerService.Lifecycle.class);
+ String immsClassName = context.getResources().getString(
+ R.string.config_deviceSpecificInputMethodManagerService);
+ if (immsClassName.isEmpty()) {
+ mSystemServiceManager.startService(InputMethodManagerService.Lifecycle.class);
+ } else {
+ try {
+ Slog.i(TAG, "Starting custom IMMS: " + immsClassName);
+ mSystemServiceManager.startService(immsClassName);
+ } catch (Throwable e) {
+ reportWtf("starting " + immsClassName, e);
+ }
+ }
t.traceEnd();
t.traceBegin("StartAccessibilityManagerService");