Backup Latin IME settings shared preferences.

Backup the shared preferences when they change.
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 0ceac89..91a5537 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -5,7 +5,8 @@
     <uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
     <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY" />
 
-    <application android:label="@string/english_ime_name">
+    <application android:label="@string/english_ime_name"
+            android:backupAgent="LatinIMEBackupAgent">
 <!-- TODO: enable before donut release
         <supports-density android:density="120" />
         <supports-density android:density="160" />
diff --git a/src/com/android/inputmethod/latin/LatinIMEBackupAgent.java b/src/com/android/inputmethod/latin/LatinIMEBackupAgent.java
new file mode 100644
index 0000000..c454f12
--- /dev/null
+++ b/src/com/android/inputmethod/latin/LatinIMEBackupAgent.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.latin;
+
+import android.backup.BackupHelperAgent;
+import android.backup.SharedPreferencesBackupHelper;
+
+/**
+ * Backs up the Latin IME shared preferences.
+ */
+public class LatinIMEBackupAgent extends BackupHelperAgent {
+
+    public void onCreate() {
+        addHelper("shared_pref", new SharedPreferencesBackupHelper(this,
+                "com.android.inputmethod.latin_preferences"));
+    }
+}
diff --git a/src/com/android/inputmethod/latin/LatinIMESettings.java b/src/com/android/inputmethod/latin/LatinIMESettings.java
index e87c4a5..c8ea309 100644
--- a/src/com/android/inputmethod/latin/LatinIMESettings.java
+++ b/src/com/android/inputmethod/latin/LatinIMESettings.java
@@ -16,14 +16,17 @@
 
 package com.android.inputmethod.latin;
 
+import android.backup.BackupManager;
+import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.preference.CheckBoxPreference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceGroup;
 import android.text.AutoText;
 
-public class LatinIMESettings extends PreferenceActivity {
-    
+public class LatinIMESettings extends PreferenceActivity
+    implements SharedPreferences.OnSharedPreferenceChangeListener {
+
     private static final String QUICK_FIXES_KEY = "quick_fixes";
     private static final String SHOW_SUGGESTIONS_KEY = "show_suggestions";
     private static final String PREDICTION_SETTINGS_KEY = "prediction_settings";
@@ -37,6 +40,8 @@
         addPreferencesFromResource(R.xml.prefs);
         mQuickFixes = (CheckBoxPreference) findPreference(QUICK_FIXES_KEY);
         mShowSuggestions = (CheckBoxPreference) findPreference(SHOW_SUGGESTIONS_KEY);
+        getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(
+                this);
     }
 
     @Override
@@ -50,4 +55,16 @@
             mShowSuggestions.setDependency(QUICK_FIXES_KEY);
         }
     }
+
+    @Override
+    protected void onDestroy() {
+        getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(
+                this);
+        super.onDestroy();
+    }
+
+    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
+            String key) {
+        (new BackupManager(this)).dataChanged();
+    }
 }