diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 7034dc3580b..fd22c635b29 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2275,6 +2275,8 @@
+
@@ -3030,6 +3032,22 @@
android:value="com.android.settings.deletionhelper.AutomaticStorageManagerSettings" />
+
+
+
+
+
+
+
+
+
+
categories = getDashboardCategories();
+ List categories;
+ if (isDashboardFeatureEnabled()) {
+ categories = mDashboardFeatureProvider.getAllCategories();
+ } else {
+ categories = getDashboardCategories();
+ }
+
for (DashboardCategory category : categories) {
for (Tile tile : category.tiles) {
ComponentName component = tile.intent.getComponent();
@@ -1165,6 +1183,15 @@ public class SettingsActivity extends SettingsDrawerActivity
}
}
+ @Override
+ protected boolean isDashboardFeatureEnabled() {
+ if (mDashboardFeatureProvider == null) {
+ mDashboardFeatureProvider =
+ FeatureFactory.getFactory(this).getDashboardFeatureProvider(this);
+ }
+ return mDashboardFeatureProvider.isEnabled();
+ }
+
// give subclasses access to the Next button
public boolean hasNextButton() {
return mNextButton != null;
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProvider.java b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
index e4976f52091..c09374832a9 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProvider.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
@@ -15,12 +15,27 @@
*/
package com.android.settings.dashboard;
-import android.content.Context;
+import com.android.settingslib.drawer.DashboardCategory;
+
+import java.util.List;
/**
* FeatureProvider for dashboard (aka settings homepage).
*/
public interface DashboardFeatureProvider {
- boolean shouldUseNewIALayout(Context context);
+ /**
+ * Whether or not this feature is enabled.
+ */
+ boolean isEnabled();
+
+ /**
+ * Get tiles (wrapped in {@link DashboardCategory}) for homepage.
+ */
+ DashboardCategory getTilesForHomepage();
+
+ /**
+ * Get all tiles, grouped by category.
+ */
+ List getAllCategories();
}
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index d07729a2860..1f0b7f24d4c 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -18,14 +18,38 @@ package com.android.settings.dashboard;
import android.content.Context;
+import com.android.settingslib.drawer.CategoryKey;
+import com.android.settingslib.drawer.CategoryManager;
+import com.android.settingslib.drawer.DashboardCategory;
+
+import java.util.List;
+
/**
* Impl for {@code DashboardFeatureProvider}.
*/
public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
+ protected final Context mContext;
+
+ private final CategoryManager mCategoryManager;
+
+ public DashboardFeatureProviderImpl(Context context) {
+ mContext = context;
+ mCategoryManager = CategoryManager.get();
+ }
+
@Override
- public boolean shouldUseNewIALayout(Context context) {
+ public boolean isEnabled() {
return false;
}
+ @Override
+ public DashboardCategory getTilesForHomepage() {
+ return mCategoryManager.getTilesByCategory(mContext, CategoryKey.CATEGORY_HOMEPAGE);
+ }
+
+ @Override
+ public List getAllCategories() {
+ return mCategoryManager.getCategories(mContext);
+ }
}
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index fb8c959ed8a..d63eb0f617e 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -35,6 +35,7 @@ import com.android.settings.dashboard.conditional.Condition;
import com.android.settings.dashboard.conditional.ConditionAdapterUtils;
import com.android.settings.dashboard.conditional.ConditionManager;
import com.android.settings.dashboard.conditional.FocusRecyclerView;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.SuggestionParser;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.SettingsDrawerActivity;
@@ -50,7 +51,7 @@ public class DashboardSummary extends InstrumentedFragment
private static final boolean DEBUG_TIMING = false;
private static final String TAG = "DashboardSummary";
- public static final String[] INITIAL_ITEMS = new String[] {
+ public static final String[] INITIAL_ITEMS = new String[]{
Settings.WifiSettingsActivity.class.getName(),
Settings.BluetoothSettingsActivity.class.getName(),
Settings.DataUsageSummaryActivity.class.getName(),
@@ -74,6 +75,7 @@ public class DashboardSummary extends InstrumentedFragment
private SuggestionsChecks mSuggestionsChecks;
private ArrayList mSuggestionsShownLogged;
private ArrayList mSuggestionsHiddenLogged;
+ private DashboardFeatureProvider mDashboardFeatureProvider;
@Override
public int getMetricsCategory() {
@@ -84,10 +86,18 @@ public class DashboardSummary extends InstrumentedFragment
public void onCreate(Bundle savedInstanceState) {
long startTime = System.currentTimeMillis();
super.onCreate(savedInstanceState);
+ final Activity activity = getActivity();
+ mDashboardFeatureProvider = FeatureFactory.getFactory(activity)
+ .getDashboardFeatureProvider(activity);
+
+ if (mDashboardFeatureProvider.isEnabled()) {
+ mSummaryLoader = new SummaryLoader(activity,
+ mDashboardFeatureProvider.getTilesForHomepage());
+ } else {
+ mSummaryLoader = new SummaryLoader(activity,
+ ((SettingsActivity) getActivity()).getDashboardCategories());
+ }
- List categories =
- ((SettingsActivity) getActivity()).getDashboardCategories();
- mSummaryLoader = new SummaryLoader(getActivity(), categories);
Context context = getContext();
mConditionManager = ConditionManager.get(context, false);
mSuggestionParser = new SuggestionParser(context,
@@ -102,8 +112,10 @@ public class DashboardSummary extends InstrumentedFragment
mSuggestionsHiddenLogged =
savedInstanceState.getStringArrayList(EXTRA_SUGGESTION_HIDDEN_LOGGED);
}
- if (DEBUG_TIMING) Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime)
- + " ms");
+ if (DEBUG_TIMING) {
+ Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime)
+ + " ms");
+ }
}
@Override
@@ -124,8 +136,10 @@ public class DashboardSummary extends InstrumentedFragment
mMetricsFeatureProvider.visible(getContext(), c.getMetricsConstant());
}
}
- if (DEBUG_TIMING) Log.d(TAG, "onResume took " + (System.currentTimeMillis() - startTime)
- + " ms");
+ if (DEBUG_TIMING) {
+ Log.d(TAG, "onResume took " + (System.currentTimeMillis() - startTime)
+ + " ms");
+ }
}
@Override
@@ -163,13 +177,15 @@ public class DashboardSummary extends InstrumentedFragment
} else {
mConditionManager.remListener(this);
}
- if (DEBUG_TIMING) Log.d(TAG, "onWindowFocusChanged took "
- + (System.currentTimeMillis() - startTime) + " ms");
+ if (DEBUG_TIMING) {
+ Log.d(TAG, "onWindowFocusChanged took "
+ + (System.currentTimeMillis() - startTime) + " ms");
+ }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
+ Bundle savedInstanceState) {
return inflater.inflate(R.layout.dashboard, container, false);
}
@@ -204,8 +220,10 @@ public class DashboardSummary extends InstrumentedFragment
mDashboard.setAdapter(mAdapter);
mSummaryLoader.setAdapter(mAdapter);
ConditionAdapterUtils.addDismiss(mDashboard);
- if (DEBUG_TIMING) Log.d(TAG, "onViewCreated took "
- + (System.currentTimeMillis() - startTime) + " ms");
+ if (DEBUG_TIMING) {
+ Log.d(TAG, "onViewCreated took "
+ + (System.currentTimeMillis() - startTime) + " ms");
+ }
rebuildUI();
}
@@ -259,9 +277,18 @@ public class DashboardSummary extends InstrumentedFragment
if (activity == null) {
return;
}
- List categories =
- ((SettingsActivity) activity).getDashboardCategories();
- mAdapter.setCategoriesAndSuggestions(categories, tiles);
+
+ if (mDashboardFeatureProvider.isEnabled()) {
+ // Temporary hack to wrap homepage category into a list. Soon we will create adapter
+ // API that takes a single category.
+ List categories = new ArrayList<>();
+ categories.add(mDashboardFeatureProvider.getTilesForHomepage());
+ mAdapter.setCategoriesAndSuggestions(categories, tiles);
+ } else {
+ mAdapter.setCategoriesAndSuggestions(
+ ((SettingsActivity) activity).getDashboardCategories(), tiles);
+ }
+
}
}
}
diff --git a/src/com/android/settings/dashboard/SummaryLoader.java b/src/com/android/settings/dashboard/SummaryLoader.java
index 4232852661f..d55ec06f10e 100644
--- a/src/com/android/settings/dashboard/SummaryLoader.java
+++ b/src/com/android/settings/dashboard/SummaryLoader.java
@@ -30,6 +30,7 @@ import android.util.ArraySet;
import android.util.Log;
import com.android.settings.SettingsActivity;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.SettingsDrawerActivity;
import com.android.settingslib.drawer.Tile;
@@ -72,6 +73,19 @@ public class SummaryLoader {
}
}
+ public SummaryLoader(Activity activity, DashboardCategory categories) {
+ mHandler = new Handler();
+ mWorkerThread = new HandlerThread("SummaryLoader", Process.THREAD_PRIORITY_BACKGROUND);
+ mWorkerThread.start();
+ mWorker = new Worker(mWorkerThread.getLooper());
+ mActivity = activity;
+ List tiles = categories.tiles;
+ for (int j = 0; j < tiles.size(); j++) {
+ Tile tile = tiles.get(j);
+ mWorker.obtainMessage(Worker.MSG_GET_PROVIDER, tile).sendToTarget();
+ }
+ }
+
public void release() {
mWorkerThread.quitSafely();
// Make sure we aren't listening.
@@ -83,7 +97,7 @@ public class SummaryLoader {
}
public void setSummary(SummaryProvider provider, final CharSequence summary) {
- final ComponentName component= mSummaryMap.get(provider);
+ final ComponentName component = mSummaryMap.get(provider);
mHandler.post(new Runnable() {
@Override
public void run() {
@@ -95,9 +109,18 @@ public class SummaryLoader {
}
return;
}
- final List categories =
- ((SettingsDrawerActivity) mActivity).getDashboardCategories();
- final Tile tile = getTileFromCategory(categories, component);
+ final Tile tile;
+ final DashboardFeatureProvider dashboardFeatureProvider =
+ FeatureFactory.getFactory(mActivity).getDashboardFeatureProvider(mActivity);
+ if (dashboardFeatureProvider.isEnabled()) {
+ tile = getTileFromCategory(dashboardFeatureProvider.getTilesForHomepage(),
+ component);
+ } else {
+ tile = getTileFromCategory(
+ ((SettingsDrawerActivity) mActivity).getDashboardCategories(),
+ component);
+ }
+
if (tile == null) {
if (DEBUG) {
Log.d(TAG, "Can't find tile for " + component);
@@ -214,12 +237,20 @@ public class SummaryLoader {
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;
- }
+ final Tile tile = getTileFromCategory(category, component);
+ if (tile != null) {
+ return tile;
+ }
+ }
+ return null;
+ }
+
+ private Tile getTileFromCategory(DashboardCategory category, ComponentName component) {
+ 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;
diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java
index 7099b3f2d3d..dd3e9c83394 100644
--- a/src/com/android/settings/overlay/FeatureFactory.java
+++ b/src/com/android/settings/overlay/FeatureFactory.java
@@ -68,7 +68,7 @@ public abstract class FeatureFactory {
public abstract PowerUsageFeatureProvider getPowerUsageFeatureProvider();
- public abstract DashboardFeatureProvider getDashboardFeatureProvider();
+ public abstract DashboardFeatureProvider getDashboardFeatureProvider(Context context);
public static final class FactoryNotFoundException extends RuntimeException {
public FactoryNotFoundException(Throwable throwable) {
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index 8f7136358ef..65015c32e4c 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -53,9 +53,9 @@ public final class FeatureFactoryImpl extends FeatureFactory {
}
@Override
- public DashboardFeatureProvider getDashboardFeatureProvider() {
+ public DashboardFeatureProvider getDashboardFeatureProvider(Context context) {
if (mDashboardFeatureProvider == null) {
- mDashboardFeatureProvider = new DashboardFeatureProviderImpl();
+ mDashboardFeatureProvider = new DashboardFeatureProviderImpl(context);
}
return mDashboardFeatureProvider;
}