Add "Manage backup data" item to "Backup & Reset" settings.

This patch uses new IBackupManager API. Item's label is taken from
getDataManagementLabel and Item's action is taken from getDataManagementIntent.
If getDataManagementIntent is null (or backup service is unresponsive)
the item is not displayed.

Change-Id: I19cbf7fa625fccff751f923aa41b7d64ccb6c1d3
diff --git a/res/xml/privacy_settings.xml b/res/xml/privacy_settings.xml
index f67c837..5e8d4a3 100644
--- a/res/xml/privacy_settings.xml
+++ b/res/xml/privacy_settings.xml
@@ -33,6 +33,11 @@
         <intent android:action="dummy" />
     </PreferenceScreen>
 
+    <PreferenceScreen
+        android:key="data_management"
+        android:persistent="false">
+    </PreferenceScreen>
+
     <SwitchPreference
         android:key="auto_restore"
         android:title="@string/auto_restore_title"
diff --git a/src/com/android/settings/PrivacySettings.java b/src/com/android/settings/PrivacySettings.java
index dbceb2b..df73fec 100644
--- a/src/com/android/settings/PrivacySettings.java
+++ b/src/com/android/settings/PrivacySettings.java
@@ -56,6 +56,7 @@
     private static final String BACKUP_DATA = "backup_data";
     private static final String AUTO_RESTORE = "auto_restore";
     private static final String CONFIGURE_ACCOUNT = "configure_account";
+    private static final String DATA_MANAGEMENT = "data_management";
     private static final String BACKUP_INACTIVE = "backup_inactive";
     private static final String NETWORK_RESET = "network_reset";
     private static final String FACTORY_RESET = "factory_reset";
@@ -64,6 +65,7 @@
     private PreferenceScreen mBackup;
     private SwitchPreference mAutoRestore;
     private PreferenceScreen mConfigure;
+    private PreferenceScreen mManageData;
     private boolean mEnabled;
 
     @Override
@@ -92,6 +94,7 @@
         mAutoRestore.setOnPreferenceChangeListener(preferenceChangeListener);
 
         mConfigure = (PreferenceScreen) screen.findPreference(CONFIGURE_ACCOUNT);
+        mManageData = (PreferenceScreen) screen.findPreference(DATA_MANAGEMENT);
 
         Set<String> keysToRemove = new HashSet<>();
         getNonVisibleKeys(getActivity(), keysToRemove);
@@ -146,11 +149,15 @@
         boolean backupEnabled = false;
         Intent configIntent = null;
         String configSummary = null;
+        Intent manageIntent = null;
+        String manageLabel = null;
         try {
             backupEnabled = mBackupManager.isBackupEnabled();
             String transport = mBackupManager.getCurrentTransport();
             configIntent = mBackupManager.getConfigurationIntent(transport);
             configSummary = mBackupManager.getDestinationString(transport);
+            manageIntent = mBackupManager.getDataManagementIntent(transport);
+            manageLabel = mBackupManager.getDataManagementLabel(transport);
 
             mBackup.setSummary(backupEnabled
                     ? R.string.accessibility_feature_state_on
@@ -169,6 +176,17 @@
         mConfigure.setIntent(configIntent);
         setConfigureSummary(configSummary);
 
+        final boolean manageEnabled = (manageIntent != null) && backupEnabled;
+        if (manageEnabled) {
+            mManageData.setIntent(manageIntent);
+            if (manageLabel != null) {
+                mManageData.setTitle(manageLabel);
+            }
+        } else {
+            // Hide the item if data management intent is not supported by transport.
+            getPreferenceScreen().removePreference(mManageData);
+        }
+
         RestrictedPreference networkResetPref = (RestrictedPreference) findPreference(
                 NETWORK_RESET);
         if (networkResetPref != null) {