Not to update IME when Settings version is older than the last updated version.
- Check if just old version or not. - Sometimes, ContentObserver.onChange is called before finishing to save the actual value. This can be verified by checking the system settings version. If the version is not updated, cached value will be returned from Settings.Secure, and this should not be handled. Bug: 3406300 Change-Id: Ie3f5b484b5574e10a41dfc209ed31271a474b828
This commit is contained in:
@ -60,6 +60,7 @@ import android.os.RemoteException;
|
||||
import android.os.ResultReceiver;
|
||||
import android.os.ServiceManager;
|
||||
import android.os.SystemClock;
|
||||
import android.os.SystemProperties;
|
||||
import android.provider.Settings;
|
||||
import android.provider.Settings.Secure;
|
||||
import android.provider.Settings.SettingNotFoundException;
|
||||
@ -314,6 +315,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
|
||||
int mBackDisposition = InputMethodService.BACK_DISPOSITION_DEFAULT;
|
||||
int mImeWindowVis;
|
||||
long mOldSystemSettingsVersion;
|
||||
|
||||
AlertDialog.Builder mDialogBuilder;
|
||||
AlertDialog mSwitchingDialog;
|
||||
@ -486,6 +488,8 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
handleMessage(msg);
|
||||
}
|
||||
});
|
||||
// Initialize the system settings version to undefined.
|
||||
mOldSystemSettingsVersion = -1;
|
||||
|
||||
(new MyPackageMonitor()).register(mContext, true);
|
||||
|
||||
@ -1007,7 +1011,15 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Investigate and fix why are settings changes getting processed before the settings seq
|
||||
// number is updated?
|
||||
// TODO: Change this stuff to not rely on modifying settings for normal user interactions.
|
||||
void updateFromSettingsLocked() {
|
||||
long newSystemSettingsVersion = getSystemSettingsVersion();
|
||||
// This is a workaround to avoid a situation that old cached value in Settings.Secure
|
||||
// will be handled.
|
||||
if (newSystemSettingsVersion == mOldSystemSettingsVersion) return;
|
||||
|
||||
// We are assuming that whoever is changing DEFAULT_INPUT_METHOD and
|
||||
// ENABLED_INPUT_METHODS is taking care of keeping them correctly in
|
||||
// sync, so we will never have a DEFAULT_INPUT_METHOD that is not
|
||||
@ -1958,6 +1970,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
|
||||
private void setSelectedInputMethodAndSubtypeLocked(InputMethodInfo imi, int subtypeId,
|
||||
boolean setSubtypeOnly) {
|
||||
mOldSystemSettingsVersion = getSystemSettingsVersion();
|
||||
// Update the history of InputMethod and Subtype
|
||||
saveCurrentInputMethodAndSubtypeToHistory();
|
||||
|
||||
@ -2207,6 +2220,10 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
private static long getSystemSettingsVersion() {
|
||||
return SystemProperties.getLong(Settings.Secure.SYS_PROP_SETTING_VERSION, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Return the current subtype of this input method.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user