diff --git a/res/layout/dashboard_tile.xml b/res/layout/dashboard_tile.xml
index d1625c7e68c..cc237eebdf9 100644
--- a/res/layout/dashboard_tile.xml
+++ b/res/layout/dashboard_tile.xml
@@ -59,7 +59,7 @@
diff --git a/res/values/strings.xml b/res/values/strings.xml
index bba72c54a92..8c1bb83c908 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7015,4 +7015,22 @@
See all
See less
+
+
+ Disconnected
+
+
+ %1$s of data used
+
+
+ %1$d apps installed
+
+
+ %1$s of %2$s used
+
+
+ Adaptive brightness in ON
+
+
+ Adaptive brightness in OFF
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index bcd05bdef37..60eb17c1d9c 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -17,6 +17,7 @@
package com.android.settings;
import android.animation.LayoutTransition;
+import android.app.Activity;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -24,8 +25,6 @@ import android.app.DialogFragment;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.app.LoaderManager.LoaderCallbacks;
-import android.icu.impl.ICUResourceBundle;
-import android.icu.util.UResourceBundle;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
@@ -39,6 +38,8 @@ import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
+import android.icu.impl.ICUResourceBundle;
+import android.icu.util.UResourceBundle;
import android.net.ConnectivityManager;
import android.net.INetworkPolicyManager;
import android.net.INetworkStatsService;
@@ -95,9 +96,9 @@ import android.widget.TabHost.TabSpec;
import android.widget.TabWidget;
import android.widget.TextView;
import android.widget.Toast;
-
import com.android.internal.logging.MetricsLogger;
import com.android.internal.telephony.PhoneConstants;
+import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.drawable.InsetBoundsDrawable;
import com.android.settings.net.DataUsageMeteredSettings;
import com.android.settings.search.BaseSearchIndexProvider;
@@ -110,11 +111,11 @@ import com.android.settingslib.AppItem;
import com.android.settingslib.NetworkPolicyEditor;
import com.android.settingslib.net.ChartData;
import com.android.settingslib.net.ChartDataLoader;
+import com.android.settingslib.net.MobileDataController;
import com.android.settingslib.net.SummaryForAllUidLoader;
import com.android.settingslib.net.UidDetail;
import com.android.settingslib.net.UidDetailProvider;
import com.google.android.collect.Lists;
-
import libcore.util.Objects;
import java.util.ArrayList;
@@ -2800,4 +2801,44 @@ public class DataUsageSummary extends HighlightingFragment implements Indexable
private boolean isMobileDataAvailable(int subId) {
return mSubscriptionManager.getActiveSubscriptionInfo(subId) != null;
}
+
+ private static class SummaryProvider
+ implements SummaryLoader.SummaryProvider {
+
+ private final Activity mActivity;
+ private final SummaryLoader mSummaryLoader;
+ private final MobileDataController mDataController;
+
+ public SummaryProvider(Activity activity, SummaryLoader summaryLoader) {
+ mActivity = activity;
+ mSummaryLoader = summaryLoader;
+ mDataController = new MobileDataController(activity);
+ }
+
+ @Override
+ public void setListening(boolean listening) {
+ if (listening) {
+ MobileDataController.DataUsageInfo info = mDataController.getDataUsageInfo();
+ String used;
+ if (info == null) {
+ used = Formatter.formatFileSize(mActivity, 0);
+ } else if (info.limitLevel <= 0) {
+ used = Formatter.formatFileSize(mActivity, info.usageLevel);
+ } else {
+ used = Utils.formatPercentage(info.usageLevel, info.limitLevel);
+ }
+ mSummaryLoader.setSummary(this,
+ mActivity.getString(R.string.data_usage_summary_format, used));
+ }
+ }
+ }
+
+ 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/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index e26200a8263..0d52aa7fdf1 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -38,9 +38,9 @@ import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference.OnPreferenceChangeListener;
import android.text.TextUtils;
import android.util.Log;
-
import com.android.internal.logging.MetricsLogger;
import com.android.internal.view.RotationPolicy;
+import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
@@ -481,6 +481,40 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
return R.string.help_uri_display;
}
+ private static class SummaryProvider implements SummaryLoader.SummaryProvider {
+ private final Context mContext;
+ private final SummaryLoader mLoader;
+
+ private SummaryProvider(Context context, SummaryLoader loader) {
+ mContext = context;
+ mLoader = loader;
+ }
+
+ @Override
+ public void setListening(boolean listening) {
+ if (listening) {
+ updateSummary();
+ }
+ }
+
+ private void updateSummary() {
+ boolean auto = Settings.System.getInt(mContext.getContentResolver(),
+ SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
+ == SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
+ mLoader.setSummary(this, mContext.getString(auto ? R.string.display_summary_on
+ : R.string.display_summary_off));
+ }
+ }
+
+ 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/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index b0a112077ef..fd4a493fadb 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -189,7 +189,7 @@ public class SettingsActivity extends SettingsDrawerActivity
public static final String EXTRA_SHOW_FRAGMENT_AS_SUBSETTING =
":settings:show_fragment_as_subsetting";
- private static final String META_DATA_KEY_FRAGMENT_CLASS =
+ public static final String META_DATA_KEY_FRAGMENT_CLASS =
"com.android.settings.FRAGMENT_CLASS";
private static final String EXTRA_UI_OPTIONS = "settings:ui_options";
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index dc09c45d32d..0b162cf180c 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -790,7 +790,7 @@ public class InstalledAppDetails extends AppInfoBase
}
}
- private static NetworkTemplate getTemplate(Context context) {
+ public static NetworkTemplate getTemplate(Context context) {
if (DataUsageSummary.hasReadyMobileRadio(context)) {
return NetworkTemplate.buildTemplateMobileWildcard();
}
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index 8694ca90eec..b65d03b5a49 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -17,6 +17,7 @@
package com.android.settings.applications;
import android.app.Activity;
+import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
@@ -45,7 +46,6 @@ import android.widget.Filterable;
import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.Spinner;
-
import com.android.internal.logging.MetricsLogger;
import com.android.settings.AppHeader;
import com.android.settings.HelpUtils;
@@ -63,6 +63,7 @@ import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
import com.android.settings.applications.AppStateAppOpsBridge.PermissionState;
import com.android.settings.applications.AppStateUsageBridge.UsageState;
+import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.fuelgauge.HighPowerDetail;
import com.android.settings.fuelgauge.PowerWhitelistBackend;
import com.android.settings.notification.AppNotificationSettings;
@@ -113,60 +114,60 @@ public class ManageApplications extends InstrumentedFragment
// Filter options used for displayed list of applications
// The order which they appear is the order they will show when spinner is present.
- public static final int FILTER_APPS_POWER_WHITELIST = 0;
- public static final int FILTER_APPS_POWER_WHITELIST_ALL = 1;
- public static final int FILTER_APPS_ALL = 2;
- public static final int FILTER_APPS_ENABLED = 3;
- public static final int FILTER_APPS_DISABLED = 4;
- public static final int FILTER_APPS_BLOCKED = 5;
- public static final int FILTER_APPS_PRIORITY = 6;
- public static final int FILTER_APPS_NO_PEEKING = 7;
- public static final int FILTER_APPS_SENSITIVE = 8;
- public static final int FILTER_APPS_PERSONAL = 9;
- public static final int FILTER_APPS_WORK = 10;
- public static final int FILTER_APPS_WITH_DOMAIN_URLS = 11;
- public static final int FILTER_APPS_USAGE_ACCESS = 12;
- public static final int FILTER_APPS_WITH_OVERLAY = 13;
- public static final int FILTER_APPS_WRITE_SETTINGS = 14;
+ public static final int FILTER_APPS_POWER_WHITELIST = 0;
+ public static final int FILTER_APPS_POWER_WHITELIST_ALL = 1;
+ public static final int FILTER_APPS_ALL = 2;
+ public static final int FILTER_APPS_ENABLED = 3;
+ public static final int FILTER_APPS_DISABLED = 4;
+ public static final int FILTER_APPS_BLOCKED = 5;
+ public static final int FILTER_APPS_PRIORITY = 6;
+ public static final int FILTER_APPS_NO_PEEKING = 7;
+ public static final int FILTER_APPS_SENSITIVE = 8;
+ public static final int FILTER_APPS_PERSONAL = 9;
+ public static final int FILTER_APPS_WORK = 10;
+ public static final int FILTER_APPS_WITH_DOMAIN_URLS = 11;
+ public static final int FILTER_APPS_USAGE_ACCESS = 12;
+ public static final int FILTER_APPS_WITH_OVERLAY = 13;
+ public static final int FILTER_APPS_WRITE_SETTINGS = 14;
// This is the string labels for the filter modes above, the order must be kept in sync.
- public static final int[] FILTER_LABELS = new int[] {
- R.string.high_power_filter_on, // High power whitelist, on
- R.string.filter_all_apps, // All apps label, but personal filter (for high power);
- R.string.filter_all_apps, // All apps
- R.string.filter_enabled_apps, // Enabled
- R.string.filter_apps_disabled, // Disabled
- R.string.filter_notif_blocked_apps, // Blocked Notifications
- R.string.filter_notif_priority_apps, // Priority Notifications
- R.string.filter_notif_no_peeking, // No peeking Notifications
- R.string.filter_notif_sensitive_apps, // Sensitive Notifications
- R.string.filter_personal_apps, // Personal
- R.string.filter_work_apps, // Work
- R.string.filter_with_domain_urls_apps, // Domain URLs
- R.string.filter_all_apps, // Usage access screen, never displayed
- R.string.filter_overlay_apps, // Apps with overlay permission
- R.string.filter_write_settings_apps, // Apps that can write system settings
+ public static final int[] FILTER_LABELS = new int[]{
+ R.string.high_power_filter_on, // High power whitelist, on
+ R.string.filter_all_apps, // All apps label, but personal filter (for high power);
+ R.string.filter_all_apps, // All apps
+ R.string.filter_enabled_apps, // Enabled
+ R.string.filter_apps_disabled, // Disabled
+ R.string.filter_notif_blocked_apps, // Blocked Notifications
+ R.string.filter_notif_priority_apps, // Priority Notifications
+ R.string.filter_notif_no_peeking, // No peeking Notifications
+ R.string.filter_notif_sensitive_apps, // Sensitive Notifications
+ R.string.filter_personal_apps, // Personal
+ R.string.filter_work_apps, // Work
+ R.string.filter_with_domain_urls_apps, // Domain URLs
+ R.string.filter_all_apps, // Usage access screen, never displayed
+ R.string.filter_overlay_apps, // Apps with overlay permission
+ R.string.filter_write_settings_apps, // Apps that can write system settings
};
// This is the actual mapping to filters from FILTER_ constants above, the order must
// be kept in sync.
- public static final AppFilter[] FILTERS = new AppFilter[] {
- new CompoundFilter(AppStatePowerBridge.FILTER_POWER_WHITELISTED,
- ApplicationsState.FILTER_ALL_ENABLED), // High power whitelist, on
- new CompoundFilter(ApplicationsState.FILTER_PERSONAL_WITHOUT_DISABLED_UNTIL_USED,
- ApplicationsState.FILTER_ALL_ENABLED), // All apps label, but personal filter
- ApplicationsState.FILTER_EVERYTHING, // All apps
- ApplicationsState.FILTER_ALL_ENABLED, // Enabled
- ApplicationsState.FILTER_DISABLED, // Disabled
- AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED, // Blocked Notifications
- AppStateNotificationBridge.FILTER_APP_NOTIFICATION_PRIORITY, // Priority Notifications
- AppStateNotificationBridge.FILTER_APP_NOTIFICATION_NO_PEEK, // No peeking Notifications
- AppStateNotificationBridge.FILTER_APP_NOTIFICATION_SENSITIVE, // Sensitive Notifications
- ApplicationsState.FILTER_PERSONAL, // Personal
- ApplicationsState.FILTER_WORK, // Work
- ApplicationsState.FILTER_WITH_DOMAIN_URLS, // Apps with Domain URLs
- AppStateUsageBridge.FILTER_APP_USAGE, // Apps with Domain URLs
- AppStateOverlayBridge.FILTER_SYSTEM_ALERT_WINDOW, // Apps that can draw overlays
- AppStateWriteSettingsBridge.FILTER_WRITE_SETTINGS, // Apps that can write system settings
+ public static final AppFilter[] FILTERS = new AppFilter[]{
+ new CompoundFilter(AppStatePowerBridge.FILTER_POWER_WHITELISTED,
+ ApplicationsState.FILTER_ALL_ENABLED), // High power whitelist, on
+ new CompoundFilter(ApplicationsState.FILTER_PERSONAL_WITHOUT_DISABLED_UNTIL_USED,
+ ApplicationsState.FILTER_ALL_ENABLED), // All apps label, but personal filter
+ ApplicationsState.FILTER_EVERYTHING, // All apps
+ ApplicationsState.FILTER_ALL_ENABLED, // Enabled
+ ApplicationsState.FILTER_DISABLED, // Disabled
+ AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED, // Blocked Notifications
+ AppStateNotificationBridge.FILTER_APP_NOTIFICATION_PRIORITY, // Priority Notifications
+ AppStateNotificationBridge.FILTER_APP_NOTIFICATION_NO_PEEK, // No peeking Notifications
+ AppStateNotificationBridge.FILTER_APP_NOTIFICATION_SENSITIVE, // Sensitive Notifications
+ ApplicationsState.FILTER_PERSONAL, // Personal
+ ApplicationsState.FILTER_WORK, // Work
+ ApplicationsState.FILTER_WITH_DOMAIN_URLS, // Apps with Domain URLs
+ AppStateUsageBridge.FILTER_APP_USAGE, // Apps with Domain URLs
+ AppStateOverlayBridge.FILTER_SYSTEM_ALERT_WINDOW, // Apps that can draw overlays
+ AppStateWriteSettingsBridge.FILTER_WRITE_SETTINGS, // Apps that can write system settings
};
// sort order
@@ -201,13 +202,13 @@ public class ManageApplications extends InstrumentedFragment
private Menu mOptionsMenu;
- public static final int LIST_TYPE_MAIN = 0;
+ public static final int LIST_TYPE_MAIN = 0;
public static final int LIST_TYPE_NOTIFICATION = 1;
public static final int LIST_TYPE_DOMAINS_URLS = 2;
- public static final int LIST_TYPE_STORAGE = 3;
+ public static final int LIST_TYPE_STORAGE = 3;
public static final int LIST_TYPE_USAGE_ACCESS = 4;
- public static final int LIST_TYPE_HIGH_POWER = 5;
- public static final int LIST_TYPE_OVERLAY = 6;
+ public static final int LIST_TYPE_HIGH_POWER = 5;
+ public static final int LIST_TYPE_OVERLAY = 6;
public static final int LIST_TYPE_WRITE_SETTINGS = 7;
private View mRootView;
@@ -280,7 +281,7 @@ public class ManageApplications extends InstrumentedFragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ Bundle savedInstanceState) {
// initialize the inflater
mInflater = inflater;
@@ -550,7 +551,7 @@ public class ManageApplications extends InstrumentedFragment
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int menuId = item.getItemId();
- switch(item.getItemId()) {
+ switch (item.getItemId()) {
case R.id.sort_order_alpha:
case R.id.sort_order_size:
mSortOrder = menuId;
@@ -713,7 +714,7 @@ public class ManageApplications extends InstrumentedFragment
private ArrayList mBaseEntries;
private ArrayList mEntries;
private boolean mResumed;
- private int mLastSortMode=-1;
+ private int mLastSortMode = -1;
private int mWhichSize = SIZE_TOTAL;
CharSequence mCurFilterPrefix;
private PackageManager mPm;
@@ -742,7 +743,7 @@ public class ManageApplications extends InstrumentedFragment
};
public ApplicationsAdapter(ApplicationsState state, ManageApplications manageApplications,
- int filterMode) {
+ int filterMode) {
mState = state;
mSession = state.newSession(this);
mManageApplications = manageApplications;
@@ -895,7 +896,7 @@ public class ManageApplications extends InstrumentedFragment
}
ArrayList applyPrefixFilter(CharSequence prefix,
- ArrayList origEntries) {
+ ArrayList origEntries) {
if (prefix == null || prefix.length() == 0) {
return origEntries;
} else {
@@ -903,7 +904,7 @@ public class ManageApplications extends InstrumentedFragment
final String spacePrefixStr = " " + prefixStr;
ArrayList newEntries
= new ArrayList();
- for (int i=0; i apps) {
+ if (apps == null) return;
+ mLoader.setSummary(this, mContext.getString(R.string.apps_summary, apps.size()));
+ }
+
+ @Override
+ public void onRebuildComplete(ArrayList apps) {
+ updateSummary(apps);
+ }
+
+ @Override
+ public void onPackageListChanged() {
+ updateSummary(mSession.rebuild(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER,
+ ApplicationsState.ALPHA_COMPARATOR));
+ }
+
+ @Override
+ public void onLauncherInfoChanged() {
+ updateSummary(mSession.rebuild(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER,
+ ApplicationsState.ALPHA_COMPARATOR));
+ }
+
+ @Override
+ public void onLoadEntriesCompleted() {
+ updateSummary(mSession.rebuild(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER,
+ ApplicationsState.ALPHA_COMPARATOR));
+ }
+
+ @Override
+ public void onRunningStateChanged(boolean running) {
+ }
+
+ @Override
+ public void onPackageIconChanged() {
+ }
+
+ @Override
+ public void onPackageSizeChanged(String packageName) {
+ }
+
+ @Override
+ public void onAllSizesComputed() {
+ }
+ }
+
+ 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/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index 8a1ef469681..eac89b18d14 100644
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -16,6 +16,7 @@
package com.android.settings.bluetooth;
+import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
@@ -39,16 +40,17 @@ import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
-
import com.android.internal.logging.MetricsLogger;
import com.android.settings.LinkifyUtils;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
+import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.location.ScanningSettings;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
import com.android.settings.widget.SwitchBar;
+import com.android.settingslib.bluetooth.BluetoothCallback;
import com.android.settingslib.bluetooth.BluetoothDeviceFilter;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
@@ -477,6 +479,84 @@ public final class BluetoothSettings extends DeviceListPreferenceFragment implem
return R.string.help_url_bluetooth;
}
+ private static class SummaryProvider
+ implements SummaryLoader.SummaryProvider, BluetoothCallback {
+
+ private final LocalBluetoothManager mBluetoothManager;
+ private final Context mContext;
+ private final SummaryLoader mSummaryLoader;
+
+ private boolean mEnabled;
+ private boolean mConnected;
+
+ public SummaryProvider(Context context, SummaryLoader summaryLoader) {
+ mBluetoothManager = Utils.getLocalBtManager(context);
+ mContext = context;
+ mSummaryLoader = summaryLoader;
+ }
+
+ @Override
+ public void setListening(boolean listening) {
+ if (listening) {
+ BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
+ mEnabled = defaultAdapter.isEnabled();
+ mConnected =
+ defaultAdapter.getConnectionState() == BluetoothAdapter.STATE_CONNECTED;
+ mSummaryLoader.setSummary(this, getSummary());
+ mBluetoothManager.getEventManager().registerCallback(this);
+ } else {
+ mBluetoothManager.getEventManager().unregisterCallback(this);
+ }
+ }
+
+ private CharSequence getSummary() {
+ return mContext.getString(!mEnabled ? R.string.disabled
+ : mConnected ? R.string.bluetooth_connected
+ : R.string.bluetooth_disconnected);
+ }
+
+ @Override
+ public void onBluetoothStateChanged(int bluetoothState) {
+ mEnabled = bluetoothState == BluetoothAdapter.STATE_ON;
+ mSummaryLoader.setSummary(this, getSummary());
+ }
+
+ @Override
+ public void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) {
+ mConnected = state == BluetoothAdapter.STATE_CONNECTED;
+ mSummaryLoader.setSummary(this, getSummary());
+ }
+
+ @Override
+ public void onScanningStateChanged(boolean started) {
+
+ }
+
+ @Override
+ public void onDeviceAdded(CachedBluetoothDevice cachedDevice) {
+
+ }
+
+ @Override
+ public void onDeviceDeleted(CachedBluetoothDevice cachedDevice) {
+
+ }
+
+ @Override
+ public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) {
+
+ }
+ }
+
+ 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 SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
new file mode 100644
index 00000000000..e2024f7a881
--- /dev/null
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2015 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.settings.dashboard;
+
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.TypedValue;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+import com.android.internal.util.ArrayUtils;
+import com.android.settings.SettingsActivity;
+import com.android.settingslib.drawer.DashboardCategory;
+import com.android.settingslib.drawer.DashboardTile;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DashboardAdapter extends RecyclerView.Adapter {
+ public static final String TAG = "DashboardAdapter";
+
+ private final List