Restart LatinIME service when keyboard theme is changed
Bug: 6023947 Change-Id: I779da32708fca7333aff74929cc98173246ee685
This commit is contained in:
parent
77541fc92e
commit
3e2d385810
3 changed files with 9 additions and 36 deletions
|
@ -388,6 +388,7 @@ public class Keyboard {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Move this method to KeyboardSwitcher.
|
||||||
public static String toThemeName(int themeId) {
|
public static String toThemeName(int themeId) {
|
||||||
// This should be aligned with theme-*.xml resource files' themeId attribute.
|
// This should be aligned with theme-*.xml resource files' themeId attribute.
|
||||||
switch (themeId) {
|
switch (themeId) {
|
||||||
|
|
|
@ -39,8 +39,7 @@ import com.android.inputmethod.latin.SettingsValues;
|
||||||
import com.android.inputmethod.latin.SubtypeSwitcher;
|
import com.android.inputmethod.latin.SubtypeSwitcher;
|
||||||
import com.android.inputmethod.latin.Utils;
|
import com.android.inputmethod.latin.Utils;
|
||||||
|
|
||||||
public class KeyboardSwitcher implements KeyboardState.SwitchActions,
|
public class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
||||||
SharedPreferences.OnSharedPreferenceChangeListener {
|
|
||||||
private static final String TAG = KeyboardSwitcher.class.getSimpleName();
|
private static final String TAG = KeyboardSwitcher.class.getSimpleName();
|
||||||
|
|
||||||
public static final String PREF_KEYBOARD_LAYOUT = "pref_keyboard_layout_20110916";
|
public static final String PREF_KEYBOARD_LAYOUT = "pref_keyboard_layout_20110916";
|
||||||
|
@ -94,7 +93,6 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
|
||||||
mSubtypeSwitcher = SubtypeSwitcher.getInstance();
|
mSubtypeSwitcher = SubtypeSwitcher.getInstance();
|
||||||
mState = new KeyboardState(this);
|
mState = new KeyboardState(this);
|
||||||
setContextThemeWrapper(ims, getKeyboardThemeIndex(ims, prefs));
|
setContextThemeWrapper(ims, getKeyboardThemeIndex(ims, prefs));
|
||||||
prefs.registerOnSharedPreferenceChangeListener(this);
|
|
||||||
mForceNonDistinctMultitouch = prefs.getBoolean(
|
mForceNonDistinctMultitouch = prefs.getBoolean(
|
||||||
DebugSettings.FORCE_NON_DISTINCT_MULTITOUCH_KEY, false);
|
DebugSettings.FORCE_NON_DISTINCT_MULTITOUCH_KEY, false);
|
||||||
}
|
}
|
||||||
|
@ -341,34 +339,26 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
|
||||||
}
|
}
|
||||||
|
|
||||||
public View onCreateInputView() {
|
public View onCreateInputView() {
|
||||||
return createInputView(mThemeIndex, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private View createInputView(final int newThemeIndex, final boolean forceRecreate) {
|
|
||||||
if (mCurrentInputView != null && mThemeIndex == newThemeIndex && !forceRecreate)
|
|
||||||
return mCurrentInputView;
|
|
||||||
|
|
||||||
if (mKeyboardView != null) {
|
if (mKeyboardView != null) {
|
||||||
mKeyboardView.closing();
|
mKeyboardView.closing();
|
||||||
}
|
}
|
||||||
|
|
||||||
final int oldThemeIndex = mThemeIndex;
|
|
||||||
Utils.GCUtils.getInstance().reset();
|
Utils.GCUtils.getInstance().reset();
|
||||||
boolean tryGC = true;
|
boolean tryGC = true;
|
||||||
for (int i = 0; i < Utils.GCUtils.GC_TRY_LOOP_MAX && tryGC; ++i) {
|
for (int i = 0; i < Utils.GCUtils.GC_TRY_LOOP_MAX && tryGC; ++i) {
|
||||||
try {
|
try {
|
||||||
setContextThemeWrapper(mInputMethodService, newThemeIndex);
|
setContextThemeWrapper(mInputMethodService, mThemeIndex);
|
||||||
mCurrentInputView = (InputView)LayoutInflater.from(mThemeContext).inflate(
|
mCurrentInputView = (InputView)LayoutInflater.from(mThemeContext).inflate(
|
||||||
R.layout.input_view, null);
|
R.layout.input_view, null);
|
||||||
tryGC = false;
|
tryGC = false;
|
||||||
} catch (OutOfMemoryError e) {
|
} catch (OutOfMemoryError e) {
|
||||||
Log.w(TAG, "load keyboard failed: " + e);
|
Log.w(TAG, "load keyboard failed: " + e);
|
||||||
tryGC = Utils.GCUtils.getInstance().tryGCOrWait(
|
tryGC = Utils.GCUtils.getInstance().tryGCOrWait(
|
||||||
oldThemeIndex + "," + newThemeIndex, e);
|
Keyboard.toThemeName(mThemeIndex), e);
|
||||||
} catch (InflateException e) {
|
} catch (InflateException e) {
|
||||||
Log.w(TAG, "load keyboard failed: " + e);
|
Log.w(TAG, "load keyboard failed: " + e);
|
||||||
tryGC = Utils.GCUtils.getInstance().tryGCOrWait(
|
tryGC = Utils.GCUtils.getInstance().tryGCOrWait(
|
||||||
oldThemeIndex + "," + newThemeIndex, e);
|
Keyboard.toThemeName(mThemeIndex), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -385,27 +375,6 @@ public class KeyboardSwitcher implements KeyboardState.SwitchActions,
|
||||||
return mCurrentInputView;
|
return mCurrentInputView;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void postSetInputView(final View newInputView) {
|
|
||||||
final LatinIME latinIme = mInputMethodService;
|
|
||||||
latinIme.mHandler.post(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (newInputView != null) {
|
|
||||||
latinIme.setInputView(newInputView);
|
|
||||||
}
|
|
||||||
latinIme.updateInputViewShown();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
|
||||||
if (PREF_KEYBOARD_LAYOUT.equals(key)) {
|
|
||||||
final int themeIndex = getKeyboardThemeIndex(mInputMethodService, sharedPreferences);
|
|
||||||
postSetInputView(createInputView(themeIndex, false));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onNetworkStateChanged() {
|
public void onNetworkStateChanged() {
|
||||||
if (mKeyboardView != null) {
|
if (mKeyboardView != null) {
|
||||||
mKeyboardView.updateShortcutKey(SubtypeSwitcher.getInstance().isShortcutImeReady());
|
mKeyboardView.updateShortcutKey(SubtypeSwitcher.getInstance().isShortcutImeReady());
|
||||||
|
|
|
@ -25,6 +25,8 @@ import android.preference.CheckBoxPreference;
|
||||||
import android.preference.PreferenceActivity;
|
import android.preference.PreferenceActivity;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.android.inputmethod.keyboard.KeyboardSwitcher;
|
||||||
|
|
||||||
public class DebugSettings extends PreferenceActivity
|
public class DebugSettings extends PreferenceActivity
|
||||||
implements SharedPreferences.OnSharedPreferenceChangeListener {
|
implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
|
@ -61,7 +63,8 @@ public class DebugSettings extends PreferenceActivity
|
||||||
updateDebugMode();
|
updateDebugMode();
|
||||||
mServiceNeedsRestart = true;
|
mServiceNeedsRestart = true;
|
||||||
}
|
}
|
||||||
} else if (key.equals(FORCE_NON_DISTINCT_MULTITOUCH_KEY)) {
|
} else if (key.equals(FORCE_NON_DISTINCT_MULTITOUCH_KEY)
|
||||||
|
|| key.equals(KeyboardSwitcher.PREF_KEYBOARD_LAYOUT)) {
|
||||||
mServiceNeedsRestart = true;
|
mServiceNeedsRestart = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue