Add some more summaries for Settings Home

Change-Id: Iaca8db6bdce87e667832b5b670e4eb027580b668
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 462387b..28113da 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7020,4 +7020,25 @@
 
     <!-- Summary of display with adaptive brightness off [CHAR LIMIT=NONE] -->
     <string name="display_summary_off">Adaptive brightness is OFF</string>
+
+    <!-- Summary of memory screen [CHAR LIMIT=NONE] -->
+    <string name="memory_summary">Avg <xliff:g id="used_memory" example="1.7GB">%1$s</xliff:g> of <xliff:g id="total_memory" example="2GB">%2$s</xliff:g> memory used</string>
+
+    <!-- Summary of user screen [CHAR LIMIT=NONE] -->
+    <string name="user_summary">Signed in as <xliff:g id="user_name" example="Jason">%1$s</xliff:g></string>
+
+    <!-- Summary of payment screen [CHAR LIMIT=NONE] -->
+    <string name="payment_summary"><xliff:g id="app_name" example="Payment App">%1$s</xliff:g> is default</string>
+
+    <!-- Summary of location screen [CHAR LIMIT=NONE] -->
+    <string name="location_on_summary">ON / <xliff:g id="location_mode" example="High accuracy">%1$s</xliff:g></string>
+
+    <!-- Location off [CHAR LIMIT=NONE] -->
+    <string name="location_off_summary">OFF</string>
+
+    <!-- Backup disabled summary [CHAR LIMIT=NONE] -->
+    <string name="backup_disabled">Back up disabled</string>
+
+    <!-- Summary of device info page [CHAR LIMIT=NONE] -->
+    <string name="about_summary">Android <xliff:g id="version" example="6.0">%1$s</xliff:g></string>
 </resources>
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java
index 0540575..d92d610 100644
--- a/src/com/android/settings/DateTimeSettings.java
+++ b/src/com/android/settings/DateTimeSettings.java
@@ -38,6 +38,7 @@
 import android.widget.TimePicker;
 
 import com.android.internal.logging.MetricsLogger;
+import com.android.settings.dashboard.SummaryLoader;
 import com.android.settingslib.datetime.ZoneGetter;
 
 import java.util.Calendar;
@@ -353,4 +354,33 @@
             }
         }
     };
+
+    private static class SummaryProvider implements SummaryLoader.SummaryProvider {
+
+        private final Context mContext;
+        private final SummaryLoader mSummaryLoader;
+
+        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
+            mContext = context;
+            mSummaryLoader = summaryLoader;
+        }
+
+        @Override
+        public void setListening(boolean listening) {
+            if (listening) {
+                final Calendar now = Calendar.getInstance();
+                mSummaryLoader.setSummary(this, ZoneGetter.getTimeZoneOffsetAndName(
+                        now.getTimeZone(), now.getTime()));
+            }
+        }
+    }
+
+    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
+            = new SummaryLoader.SummaryProviderFactory() {
+        @Override
+        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
+                                                                   SummaryLoader summaryLoader) {
+            return new SummaryProvider(activity, summaryLoader);
+        }
+    };
 }
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java
index 40be2e7..95f1a83 100644
--- a/src/com/android/settings/DeviceInfoSettings.java
+++ b/src/com/android/settings/DeviceInfoSettings.java
@@ -36,6 +36,7 @@
 import android.widget.Toast;
 
 import com.android.internal.logging.MetricsLogger;
+import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Index;
 import com.android.settings.search.Indexable;
@@ -337,6 +338,34 @@
         startActivityForResult(intent, 0);
     }
 
+    private static class SummaryProvider implements SummaryLoader.SummaryProvider {
+
+        private final Context mContext;
+        private final SummaryLoader mSummaryLoader;
+
+        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
+            mContext = context;
+            mSummaryLoader = summaryLoader;
+        }
+
+        @Override
+        public void setListening(boolean listening) {
+            if (listening) {
+                mSummaryLoader.setSummary(this, mContext.getString(R.string.about_summary,
+                        Build.VERSION.RELEASE));
+            }
+        }
+    }
+
+    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
+            = new SummaryLoader.SummaryProviderFactory() {
+        @Override
+        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
+                                                                   SummaryLoader summaryLoader) {
+            return new SummaryProvider(activity, summaryLoader);
+        }
+    };
+
     /**
      * For Search.
      */
diff --git a/src/com/android/settings/PrivacySettings.java b/src/com/android/settings/PrivacySettings.java
index 14e45be..2344a33 100644
--- a/src/com/android/settings/PrivacySettings.java
+++ b/src/com/android/settings/PrivacySettings.java
@@ -16,6 +16,7 @@
 
 package com.android.settings;
 
+import android.app.Activity;
 import android.app.backup.IBackupManager;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -34,6 +35,7 @@
 import android.util.Log;
 
 import com.android.internal.logging.MetricsLogger;
+import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 
@@ -180,6 +182,51 @@
         return R.string.help_url_backup_reset;
     }
 
+    private static class SummaryProvider implements SummaryLoader.SummaryProvider {
+
+        private final Context mContext;
+        private final SummaryLoader mSummaryLoader;
+
+        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
+            mContext = context;
+            mSummaryLoader = summaryLoader;
+        }
+
+        @Override
+        public void setListening(boolean listening) {
+            if (listening) {
+                IBackupManager backupManager = IBackupManager.Stub.asInterface(
+                        ServiceManager.getService(Context.BACKUP_SERVICE));
+                try {
+                    boolean backupEnabled = backupManager.isBackupEnabled();
+                    if (backupEnabled) {
+                        String transport = backupManager.getCurrentTransport();
+                        String configSummary = backupManager.getDestinationString(transport);
+                        if (configSummary != null) {
+                            mSummaryLoader.setSummary(this, configSummary);
+                        } else {
+                            mSummaryLoader.setSummary(this, mContext.getString(
+                                    R.string.backup_configure_account_default_summary));
+                        }
+                    } else {
+                        mSummaryLoader.setSummary(this, mContext.getString(
+                                R.string.backup_disabled));
+                    }
+                } catch (RemoteException e) {
+                }
+            }
+        }
+    }
+
+    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
+            = new SummaryLoader.SummaryProviderFactory() {
+        @Override
+        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
+                                                                   SummaryLoader summaryLoader) {
+            return new SummaryProvider(activity, summaryLoader);
+        }
+    };
+
     /**
      * For Search.
      */
diff --git a/src/com/android/settings/applications/ProcessStatsSummary.java b/src/com/android/settings/applications/ProcessStatsSummary.java
index 399558b..09fea89 100644
--- a/src/com/android/settings/applications/ProcessStatsSummary.java
+++ b/src/com/android/settings/applications/ProcessStatsSummary.java
@@ -15,6 +15,8 @@
  */
 package com.android.settings.applications;
 
+import android.app.Activity;
+import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.os.Bundle;
 import android.support.v7.preference.Preference;
@@ -28,6 +30,7 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.applications.ProcStatsData.MemInfo;
+import com.android.settings.dashboard.SummaryLoader;
 
 public class ProcessStatsSummary extends ProcessStatsBase implements OnPreferenceClickListener {
 
@@ -123,4 +126,39 @@
         return false;
     }
 
+    private static class SummaryProvider implements SummaryLoader.SummaryProvider {
+
+        private final Context mContext;
+        private final SummaryLoader mSummaryLoader;
+
+        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
+            mContext = context;
+            mSummaryLoader = summaryLoader;
+        }
+
+        @Override
+        public void setListening(boolean listening) {
+            if (listening) {
+                ProcStatsData statsManager = new ProcStatsData(mContext, false);
+                statsManager.setDuration(sDurations[0]);
+                MemInfo memInfo = statsManager.getMemInfo();
+                String usedResult = Formatter.formatShortFileSize(mContext,
+                        (long) memInfo.realUsedRam);
+                String totalResult = Formatter.formatShortFileSize(mContext,
+                        (long) memInfo.realTotalRam);
+                mSummaryLoader.setSummary(this, mContext.getString(R.string.memory_summary,
+                        usedResult, totalResult));
+            }
+        }
+    }
+
+    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
+            = new SummaryLoader.SummaryProviderFactory() {
+        @Override
+        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
+                                                                   SummaryLoader summaryLoader) {
+            return new SummaryProvider(activity, summaryLoader);
+        }
+    };
+
 }
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index 779944b..fff5a78 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -60,6 +60,7 @@
 import com.android.settings.UserDictionarySettings;
 import com.android.settings.Utils;
 import com.android.settings.VoiceInputOutputSettings;
+import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 import com.android.settings.search.SearchIndexableRaw;
@@ -648,6 +649,34 @@
         }
     }
 
+    private static class SummaryProvider implements SummaryLoader.SummaryProvider {
+
+        private final Context mContext;
+        private final SummaryLoader mSummaryLoader;
+
+        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
+            mContext = context;
+            mSummaryLoader = summaryLoader;
+        }
+
+        @Override
+        public void setListening(boolean listening) {
+            if (listening) {
+                String localeName = getLocaleName(mContext);
+                mSummaryLoader.setSummary(this, localeName);
+            }
+        }
+    }
+
+    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
+            = new SummaryLoader.SummaryProviderFactory() {
+        @Override
+        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
+                                                                   SummaryLoader summaryLoader) {
+            return new SummaryProvider(activity, summaryLoader);
+        }
+    };
+
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
         @Override
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index 38647bd..0259c9f 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.location;
 
+import android.app.Activity;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -24,6 +25,7 @@
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
+import android.provider.Settings;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceCategory;
 import android.support.v7.preference.PreferenceGroup;
@@ -41,6 +43,7 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
 import com.android.settings.applications.InstalledAppDetails;
+import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.widget.SwitchBar;
 import com.android.settingslib.location.RecentLocationApps;
 
@@ -331,23 +334,25 @@
         return R.string.help_url_location_access;
     }
 
-    @Override
-    public void onModeChanged(int mode, boolean restricted) {
+    private static int getLocationString(int mode) {
         switch (mode) {
             case android.provider.Settings.Secure.LOCATION_MODE_OFF:
-                mLocationMode.setSummary(R.string.location_mode_location_off_title);
-                break;
+                return R.string.location_mode_location_off_title;
             case android.provider.Settings.Secure.LOCATION_MODE_SENSORS_ONLY:
-                mLocationMode.setSummary(R.string.location_mode_sensors_only_title);
-                break;
+                return R.string.location_mode_sensors_only_title;
             case android.provider.Settings.Secure.LOCATION_MODE_BATTERY_SAVING:
-                mLocationMode.setSummary(R.string.location_mode_battery_saving_title);
-                break;
+                return R.string.location_mode_battery_saving_title;
             case android.provider.Settings.Secure.LOCATION_MODE_HIGH_ACCURACY:
-                mLocationMode.setSummary(R.string.location_mode_high_accuracy_title);
-                break;
-            default:
-                break;
+                return R.string.location_mode_high_accuracy_title;
+        }
+        return 0;
+    }
+
+    @Override
+    public void onModeChanged(int mode, boolean restricted) {
+        int modeDescription = getLocationString(mode);
+        if (modeDescription != 0) {
+            mLocationMode.setSummary(modeDescription);
         }
 
         // Restricted user can't change the location mode, so disable the master switch. But in some
@@ -422,4 +427,39 @@
             return true;
         }
     }
+
+    private static class SummaryProvider implements SummaryLoader.SummaryProvider {
+
+        private final Context mContext;
+        private final SummaryLoader mSummaryLoader;
+
+        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
+            mContext = context;
+            mSummaryLoader = summaryLoader;
+        }
+
+        @Override
+        public void setListening(boolean listening) {
+            if (listening) {
+                int mode = Settings.Secure.getInt(mContext.getContentResolver(),
+                        Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
+                if (mode != Settings.Secure.LOCATION_MODE_OFF) {
+                    mSummaryLoader.setSummary(this, mContext.getString(R.string.location_on_summary,
+                            mContext.getString(getLocationString(mode))));
+                } else {
+                    mSummaryLoader.setSummary(this,
+                            mContext.getString(R.string.location_off_summary));
+                }
+            }
+        }
+    }
+
+    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
+            = new SummaryLoader.SummaryProviderFactory() {
+        @Override
+        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
+                                                                   SummaryLoader summaryLoader) {
+            return new SummaryProvider(activity, summaryLoader);
+        }
+    };
 }
diff --git a/src/com/android/settings/nfc/NfcPaymentPreference.java b/src/com/android/settings/nfc/NfcPaymentPreference.java
index c918d2f..4738728 100644
--- a/src/com/android/settings/nfc/NfcPaymentPreference.java
+++ b/src/com/android/settings/nfc/NfcPaymentPreference.java
@@ -15,6 +15,7 @@
  */
 package com.android.settings.nfc;
 
+import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.ActivityNotFoundException;
 import android.content.Context;
@@ -32,6 +33,7 @@
 
 import com.android.settings.CustomDialogPreference;
 import com.android.settings.R;
+import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.nfc.PaymentBackend.PaymentAppInfo;
 
 import java.util.List;
diff --git a/src/com/android/settings/nfc/PaymentSettings.java b/src/com/android/settings/nfc/PaymentSettings.java
index b03a9ef..42545b9 100644
--- a/src/com/android/settings/nfc/PaymentSettings.java
+++ b/src/com/android/settings/nfc/PaymentSettings.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.nfc;
 
+import android.app.Activity;
+import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 import android.support.v7.preference.PreferenceManager;
@@ -25,9 +27,12 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+
 import com.android.internal.logging.MetricsLogger;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.nfc.PaymentBackend.PaymentAppInfo;
 
 import java.util.List;
 
@@ -93,4 +98,35 @@
         menuItem.setIntent(howItWorksIntent);
         menuItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_NEVER);
     }
+
+    private static class SummaryProvider implements SummaryLoader.SummaryProvider {
+
+        private final Context mContext;
+        private final SummaryLoader mSummaryLoader;
+
+        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
+            mContext = context;
+            mSummaryLoader = summaryLoader;
+        }
+
+        @Override
+        public void setListening(boolean listening) {
+            if (listening) {
+                PaymentBackend paymentBackend = new PaymentBackend(mContext);
+                paymentBackend.refresh();
+                PaymentAppInfo app = paymentBackend.getDefaultApp();
+                mSummaryLoader.setSummary(this, mContext.getString(R.string.payment_summary,
+                        app.label));
+            }
+        }
+    }
+
+    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
+            = new SummaryLoader.SummaryProviderFactory() {
+        @Override
+        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
+                                                                   SummaryLoader summaryLoader) {
+            return new SummaryProvider(activity, summaryLoader);
+        }
+    };
 }
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 59ab901..3e2ac87 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -61,6 +61,7 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.dashboard.SummaryLoader;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 import com.android.settings.search.SearchIndexableRaw;
@@ -1052,6 +1053,36 @@
         }
     }
 
+    private static class SummaryProvider implements SummaryLoader.SummaryProvider {
+
+        private final Context mContext;
+        private final SummaryLoader mSummaryLoader;
+
+        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
+            mContext = context;
+            mSummaryLoader = summaryLoader;
+        }
+
+        @Override
+        public void setListening(boolean listening) {
+            if (listening) {
+                UserInfo info = mContext.getSystemService(UserManager.class).getUserInfo(
+                        UserHandle.myUserId());
+                mSummaryLoader.setSummary(this, mContext.getString(R.string.user_summary,
+                        info.name));
+            }
+        }
+    }
+
+    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
+            = new SummaryLoader.SummaryProviderFactory() {
+        @Override
+        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
+                                                                   SummaryLoader summaryLoader) {
+            return new SummaryProvider(activity, summaryLoader);
+        }
+    };
+
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
                 @Override