am 076d059b: Merge "Not to update IME when Settings version is older than the last updated version." into honeycomb

* commit '076d059b54664b31920f0be13d56c657ab77cecc':
  Not to update IME when Settings version is older than the last updated version.
diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 586d222..6636fb7 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -60,6 +60,7 @@
 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 @@
 
     int mBackDisposition = InputMethodService.BACK_DISPOSITION_DEFAULT;
     int mImeWindowVis;
+    long mOldSystemSettingsVersion;
 
     AlertDialog.Builder mDialogBuilder;
     AlertDialog mSwitchingDialog;
@@ -486,6 +488,8 @@
                 handleMessage(msg);
             }
         });
+        // Initialize the system settings version to undefined.
+        mOldSystemSettingsVersion = -1;
 
         (new MyPackageMonitor()).register(mContext, true);
 
@@ -1007,7 +1011,15 @@
         }
     }
 
+    // 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 @@
 
     private void setSelectedInputMethodAndSubtypeLocked(InputMethodInfo imi, int subtypeId,
             boolean setSubtypeOnly) {
+        mOldSystemSettingsVersion = getSystemSettingsVersion();
         // Update the history of InputMethod and Subtype
         saveCurrentInputMethodAndSubtypeToHistory();
 
@@ -2207,6 +2220,10 @@
         }
     }
 
+    private static long getSystemSettingsVersion() {
+        return SystemProperties.getLong(Settings.Secure.SYS_PROP_SETTING_VERSION, 0);
+    }
+
     /**
      * @return Return the current subtype of this input method.
      */