Rearrange a few settings into System category page.
- Use activity-alias to define which activity shows up in what category.
We choose activity-alias because it creates a reference to UI we need
without having to define a new set of intent-filter and/or category
keys. This reduces maintainence in the long run. We should merge
metadata from activity-alias into targetActivity when cleaning up.
- Created new System dashboard activity that hosts all system category
tiles dynamically, and a static tile for checking system update.
Bug: 31781480
Test: manual
Test: make RunSettingsRoboTests -j40
Change-Id: Ia2d762e3e1aebd17423a395c5e6c286dc3326492
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index cf08f4a..3bec337 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -68,7 +68,10 @@
}
public static class BackgroundCheckSummaryActivity extends SettingsActivity { /* empty */ }
public static class StorageUseActivity extends SettingsActivity { /* empty */ }
- public static class DevelopmentSettingsActivity extends SettingsActivity { /* empty */ }
+ public static class DevelopmentSettingsActivity extends SettingsActivity {
+ public static final String DASHBOARD_ALIAS =
+ "com.android.settings.DevelopmentSettingsDashboardAlias";
+ }
public static class AccessibilitySettingsActivity extends SettingsActivity { /* empty */ }
public static class CaptioningSettingsActivity extends SettingsActivity { /* empty */ }
public static class AccessibilityInversionSettingsActivity extends SettingsActivity { /* empty */ }
@@ -161,6 +164,7 @@
public static class SystemSettings extends SettingsActivity { /* empty */ }
// Top level categories for new IA
- public static class SupportActivity extends SettingsActivity {}
+ public static class SystemDashboardActivity extends SettingsActivity {}
+ public static class SupportDashboardActivity extends SettingsActivity {}
}
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index ecfc373..08fa971 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -124,6 +124,7 @@
import com.android.settings.search.DynamicIndexableContentMonitor;
import com.android.settings.search.Index;
import com.android.settings.sim.SimSettings;
+import com.android.settings.system.SystemDashboardFragment;
import com.android.settings.tts.TextToSpeechSettings;
import com.android.settings.users.UserSettings;
import com.android.settings.vpn2.VpnSettings;
@@ -264,6 +265,18 @@
Settings.AccessibilitySettingsActivity.class.getName(),
Settings.PrintSettingsActivity.class.getName(),
Settings.PaymentSettingsActivity.class.getName(),
+
+ // New IA
+ // Home page
+ "com.android.settings.Settings.BatteryDashboardAlias",
+ Settings.SystemDashboardActivity.class.getName(),
+ Settings.SupportDashboardActivity.class.getName(),
+ // Home page > System
+ "com.android.settings.Settings.LanguageAndInputDashboardAlias",
+ "com.android.settings.Settings.DateTimeDashboardAlias",
+ "com.android.settings.Settings.AccessibilityDashboardAlias",
+ "com.android.settings.Settings.AboutDeviceDashboardAlias",
+
};
private static final String[] ENTRY_FRAGMENTS = {
@@ -363,7 +376,8 @@
NightDisplaySettings.class.getName(),
ManageDomainUrls.class.getName(),
AutomaticStorageManagerSettings.class.getName(),
- SupportFragment.class.getName()
+ SupportFragment.class.getName(),
+ SystemDashboardFragment.class.getName(),
};
@@ -1120,6 +1134,9 @@
setTileEnabled(new ComponentName(packageName,
Settings.DevelopmentSettingsActivity.class.getName()),
showDev, isAdmin, pm);
+ setTileEnabled(new ComponentName(packageName,
+ Settings.DevelopmentSettingsActivity.DASHBOARD_ALIAS),
+ showDev, isAdmin, pm);
// Reveal development-only quick settings tiles
DevelopmentTiles.setTilesEnabled(this, showDev);
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 9e86688..1186c46 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -16,7 +16,6 @@
package com.android.settings;
-import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
@@ -88,6 +87,7 @@
import android.view.animation.AnimationUtils;
import android.widget.ListView;
import android.widget.TabWidget;
+
import com.android.internal.app.UnlaunchableAppActivity;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.UserIcons;
diff --git a/src/com/android/settings/core/InstrumentedFragment.java b/src/com/android/settings/core/InstrumentedFragment.java
index e50eae3..79ba5c7 100644
--- a/src/com/android/settings/core/InstrumentedFragment.java
+++ b/src/com/android/settings/core/InstrumentedFragment.java
@@ -33,6 +33,10 @@
protected MetricsFeatureProvider mMetricsFeatureProvider;
+ // metrics placeholder value. Only use this for development.
+ protected final int PLACEHOLDER_METRIC = 10000;
+ protected final int SYSTEM_CATEGORY_FRAGMENT = PLACEHOLDER_METRIC + 1;
+
public InstrumentedFragment() {
// Mixin that logs visibility change for activity.
getLifecycle().addObserver(new VisibilityLoggerMixin(getMetricsCategory()));
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProvider.java b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
index c093748..148127e 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProvider.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
@@ -16,6 +16,7 @@
package com.android.settings.dashboard;
import com.android.settingslib.drawer.DashboardCategory;
+import com.android.settingslib.drawer.Tile;
import java.util.List;
@@ -35,7 +36,19 @@
DashboardCategory getTilesForHomepage();
/**
+ * Get tiles (wrapped in {@link DashboardCategory}) for system category.
+ */
+ DashboardCategory getTilesForSystemCategory();
+
+ /**
* Get all tiles, grouped by category.
*/
List<DashboardCategory> getAllCategories();
+
+ /**
+ * Returns a priority group for tile. priority level is grouped into hundreds. tiles with
+ * priority 100 - 199 belongs to priority level 100, tiles with priority 200 - 299 is in
+ * group 200, and so on.
+ */
+ int getPriorityGroup(Tile tile);
}
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index 1f0b7f2..836bfb0 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -21,6 +21,7 @@
import com.android.settingslib.drawer.CategoryKey;
import com.android.settingslib.drawer.CategoryManager;
import com.android.settingslib.drawer.DashboardCategory;
+import com.android.settingslib.drawer.Tile;
import java.util.List;
@@ -49,7 +50,17 @@
}
@Override
+ public DashboardCategory getTilesForSystemCategory() {
+ return mCategoryManager.getTilesByCategory(mContext, CategoryKey.CATEGORY_SYSTEM);
+ }
+
+ @Override
public List<DashboardCategory> getAllCategories() {
return mCategoryManager.getCategories(mContext);
}
+
+ @Override
+ public int getPriorityGroup(Tile tile) {
+ return tile.priority / 100;
+ }
}
diff --git a/src/com/android/settings/dashboard/DashboardTilePreference.java b/src/com/android/settings/dashboard/DashboardTilePreference.java
new file mode 100644
index 0000000..918cf08
--- /dev/null
+++ b/src/com/android/settings/dashboard/DashboardTilePreference.java
@@ -0,0 +1,45 @@
+/**
+ * Copyright (C) 2016 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.util.AttributeSet;
+
+import com.android.settings.DividerPreference;
+import com.android.settings.R;
+
+/**
+ * A {@code Preference} styled as a dashboard tile.
+ */
+public class DashboardTilePreference extends DividerPreference {
+
+ public DashboardTilePreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ public DashboardTilePreference(Context context) {
+ super(context);
+ init();
+ }
+
+ private void init() {
+ setLayoutResource(R.layout.dashboard_tile);
+ setDividerAllowedAbove(false);
+ setDividerAllowedBelow(false);
+ }
+
+}
diff --git a/src/com/android/settings/system/SystemDashboardFragment.java b/src/com/android/settings/system/SystemDashboardFragment.java
new file mode 100644
index 0000000..ca56255
--- /dev/null
+++ b/src/com/android/settings/system/SystemDashboardFragment.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2016 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.system;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.dashboard.DashboardFeatureProvider;
+import com.android.settings.dashboard.DashboardTilePreference;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.drawer.DashboardCategory;
+import com.android.settingslib.drawer.Tile;
+
+import java.util.List;
+
+public class SystemDashboardFragment extends SettingsPreferenceFragment implements
+ Preference.OnPreferenceClickListener {
+
+ private DashboardFeatureProvider mDashboardFeatureProvider;
+
+ @Override
+ public int getMetricsCategory() {
+ return SYSTEM_CATEGORY_FRAGMENT;
+ }
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ mDashboardFeatureProvider =
+ FeatureFactory.getFactory(context).getDashboardFeatureProvider(context);
+ }
+
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ super.onCreatePreferences(savedInstanceState, rootKey);
+ addPreferencesFromResource(R.xml.system_dashboard_fragment);
+ addDashboardCategoryAsPreference();
+ }
+
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ // Needed to enable preference click ripple
+ return false;
+ }
+
+ /**
+ * Adds dynamic tiles for system category onto PreferenceScreen.
+ */
+ private void addDashboardCategoryAsPreference() {
+ final Context context = getContext();
+ final PreferenceScreen screen = getPreferenceScreen();
+ final DashboardCategory category = mDashboardFeatureProvider.getTilesForSystemCategory();
+ final List<Tile> tiles = category.tiles;
+ for (Tile tile : tiles) {
+ final DashboardTilePreference pref = new DashboardTilePreference(context);
+ pref.setTitle(tile.title);
+ pref.setSummary(tile.summary);
+ if (tile.icon != null) {
+ pref.setIcon(tile.icon.loadDrawable(context));
+ }
+ if (tile.intent != null) {
+ pref.setIntent(tile.intent);
+ }
+ // Use negated priority for order, because tile priority is based on intent-filter
+ // (larger value has higher priority). However pref order defines smaller value has
+ // higher priority.
+ pref.setOrder(-tile.priority);
+ screen.addPreference(pref);
+ }
+ }
+
+}
\ No newline at end of file