From 011362d9f15a3acb96b59e833059825a232db133 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 3 Aug 2016 14:47:01 -0700 Subject: [PATCH] Update summary correctly in Settings dashboard. Bug: 30490325 SummaryLoader needs DashboardCategory to update summary and it currently ask for it from DashboardAdapter. But DashboardCategory is not always available in DashboardAdapter. When SummaryLoader wants to get category from adapter before adapter is ready, it won't have it, causing summary to appear blank sometimes. The fix is to get category from data source directly. Change-Id: I9d7f676954d1cece42d6e03748ab7aa35357f8b7 --- .../settings/dashboard/DashboardAdapter.java | 16 ------- .../settings/dashboard/SummaryLoader.java | 44 +++++++++++++++++-- 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index ecf6497b1ea..ca68a740628 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -15,7 +15,6 @@ */ package com.android.settings.dashboard; -import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; @@ -110,21 +109,6 @@ public class DashboardAdapter extends RecyclerView.Adapter categories, List suggestions) { mSuggestions = suggestions; diff --git a/src/com/android/settings/dashboard/SummaryLoader.java b/src/com/android/settings/dashboard/SummaryLoader.java index 778d620e08d..4232852661f 100644 --- a/src/com/android/settings/dashboard/SummaryLoader.java +++ b/src/com/android/settings/dashboard/SummaryLoader.java @@ -28,8 +28,10 @@ import android.os.Process; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; + import com.android.settings.SettingsActivity; import com.android.settingslib.drawer.DashboardCategory; +import com.android.settingslib.drawer.SettingsDrawerActivity; import com.android.settingslib.drawer.Tile; import java.lang.reflect.Field; @@ -87,9 +89,24 @@ public class SummaryLoader { public void run() { // Since tiles are not always cached (like on locale change for instance), // we need to always get the latest one. - Tile tile = mAdapter.getTile(component); - if (tile == null) return; - if (DEBUG) Log.d(TAG, "setSummary " + tile.title + " - " + summary); + if (!(mActivity instanceof SettingsDrawerActivity)) { + if (DEBUG) { + Log.d(TAG, "Can't get category list."); + } + return; + } + final List categories = + ((SettingsDrawerActivity) mActivity).getDashboardCategories(); + final Tile tile = getTileFromCategory(categories, component); + if (tile == null) { + if (DEBUG) { + Log.d(TAG, "Can't find tile for " + component); + } + return; + } + if (DEBUG) { + Log.d(TAG, "setSummary " + tile.title + " - " + summary); + } tile.summary = summary; mAdapter.notifyChanged(tile); } @@ -187,6 +204,27 @@ public class SummaryLoader { } } + private Tile getTileFromCategory(List categories, ComponentName component) { + if (categories == null) { + if (DEBUG) { + Log.d(TAG, "Category is null, can't find tile"); + } + return null; + } + final int categorySize = categories.size(); + for (int i = 0; i < categorySize; i++) { + final DashboardCategory category = categories.get(i); + final int tileCount = category.tiles.size(); + for (int j = 0; j < tileCount; j++) { + final Tile tile = category.tiles.get(j); + if (component.equals(tile.intent.getComponent())) { + return tile; + } + } + } + return null; + } + public interface SummaryProvider { void setListening(boolean listening); }