Create backup agent for the Dialer app.

- Currently only the active tab is being backed up.
- More settings may be added later.

Change-Id: Id66565029be751beae8b58d4cc054f8d2d16ceea
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index bde0775..0efe21d 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -49,7 +49,11 @@
         android:label="@string/applicationLabel"
         android:icon="@mipmap/ic_launcher_phone"
         android:hardwareAccelerated="true"
-        android:supportsRtl="true">
+        android:supportsRtl="true"
+        android:backupAgent='com.android.dialer.DialerBackupAgent'>
+
+        <meta-data android:name="com.google.android.backup.api_key"
+            android:value="AEdPqrEAAAAIBXgtCEKQ6W0PXVnW-ZVia2KmlV2AxsTw3GjAeQ" />
 
         <!-- The entrance point for Phone UI.
              stateAlwaysHidden is set to suppress keyboard show up on
diff --git a/src/com/android/dialer/DialerBackupAgent.java b/src/com/android/dialer/DialerBackupAgent.java
new file mode 100644
index 0000000..0eef689
--- /dev/null
+++ b/src/com/android/dialer/DialerBackupAgent.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * 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.dialer;
+
+import android.app.backup.BackupAgentHelper;
+import android.app.backup.BackupDataInput;
+import android.app.backup.SharedPreferencesBackupHelper;
+import android.content.Context;
+
+/**
+ * The Dialer backup agent backs up the shared preferences settings of the
+ * Dialer App. Right now it backs up the whole shared preference file. This
+ * can be modified in the future to accommodate partical backup.
+ */
+public class DialerBackupAgent extends BackupAgentHelper
+{
+    private static final String SHARED_KEY = "shared_pref";
+
+    @Override
+    public void onCreate() {
+        addHelper(SHARED_KEY, new SharedPreferencesBackupHelper(this,
+               DialtactsActivity.SHARED_PREFS_NAME));
+    }
+}
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 32339d2..22e6ba0 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -21,6 +21,7 @@
 import android.app.ActionBar.Tab;
 import android.app.ActionBar.TabListener;
 import android.app.Activity;
+import android.app.backup.BackupManager;
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
@@ -108,6 +109,8 @@
 
     private SharedPreferences mPrefs;
 
+    public static final String SHARED_PREFS_NAME = "com.android.dialer_preferences";
+
     /** Last manually selected tab index */
     private static final String PREF_LAST_MANUALLY_SELECTED_TAB =
             "DialtactsActivity_last_manually_selected_tab";
@@ -526,7 +529,7 @@
         getActionBar().setDisplayShowHomeEnabled(false);
 
         // Load the last manually loaded tab
-        mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+        mPrefs = this.getSharedPreferences(SHARED_PREFS_NAME, Context.MODE_PRIVATE);
         mLastManuallySelectedFragment = mPrefs.getInt(PREF_LAST_MANUALLY_SELECTED_TAB,
                 PREF_LAST_MANUALLY_SELECTED_TAB_DEFAULT);
         if (mLastManuallySelectedFragment >= TAB_INDEX_COUNT) {
@@ -711,6 +714,12 @@
 
         mPrefs.edit().putInt(PREF_LAST_MANUALLY_SELECTED_TAB, mLastManuallySelectedFragment)
                 .apply();
+        requestBackup();
+    }
+
+    private void requestBackup() {
+        final BackupManager bm = new BackupManager(this);
+        bm.dataChanged();
     }
 
     private void fixIntent(Intent intent) {