Show setting tiles for secondary users
Change-Id: I912b3324753731a6633cf6fabfc26ae2e61963a0
Fix: 34176802
Test: runtest --path tests/unit/src/com/android/settings/core/SettingsGatewayTest.java
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 06941d0..d779f3e 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -50,7 +50,6 @@
public static class LocalePickerActivity extends SettingsActivity { /* empty */ }
public static class LanguageAndRegionSettingsActivity extends SettingsActivity { /* empty */ }
public static class UserDictionarySettingsActivity extends SettingsActivity { /* empty */ }
- public static class HomeSettingsActivity extends SettingsActivity { /* empty */ }
public static class DisplaySettingsActivity extends SettingsActivity { /* empty */ }
public static class NightDisplaySettingsActivity extends SettingsActivity { /* empty */ }
public static class DeviceInfoSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 2ca0d4b..0751b81 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -165,64 +165,6 @@
private CharSequence mInitialTitle;
private int mInitialTitleResId;
- // Show only these settings for restricted users
- private String[] SETTINGS_FOR_RESTRICTED = {
- //wireless_section
- WifiSettingsActivity.class.getName(),
- Settings.BluetoothSettingsActivity.class.getName(),
- Settings.DataUsageSummaryActivity.class.getName(),
- Settings.SimSettingsActivity.class.getName(),
- Settings.WirelessSettingsActivity.class.getName(),
- //device_section
- Settings.HomeSettingsActivity.class.getName(),
- Settings.SoundSettingsActivity.class.getName(),
- Settings.DisplaySettingsActivity.class.getName(),
- Settings.StorageSettingsActivity.class.getName(),
- Settings.ManageApplicationsActivity.class.getName(),
- Settings.PowerUsageSummaryActivity.class.getName(),
- Settings.GestureSettingsActivity.class.getName(),
- //personal_section
- Settings.LocationSettingsActivity.class.getName(),
- Settings.SecuritySettingsActivity.class.getName(),
- Settings.InputMethodAndLanguageSettingsActivity.class.getName(),
- Settings.UserSettingsActivity.class.getName(),
- Settings.AccountSettingsActivity.class.getName(),
- //system_section
- Settings.DateTimeSettingsActivity.class.getName(),
- Settings.DeviceInfoSettingsActivity.class.getName(),
- Settings.AccessibilitySettingsActivity.class.getName(),
- Settings.PrintSettingsActivity.class.getName(),
- Settings.PaymentSettingsActivity.class.getName(),
- Settings.EnterprisePrivacySettingsActivity.class.getName(),
-
- // New IA
- // Home page
- Settings.NetworkDashboardActivity.class.getName(),
- Settings.ConnectedDeviceDashboardActivity.class.getName(),
- Settings.AppAndNotificationDashboardActivity.class.getName(),
- "com.android.settings.Settings.BatteryDashboardAlias",
- "com.android.settings.Settings.DisplayDashboardAlias",
- "com.android.settings.Settings.SoundDashboardAlias",
- "com.android.settings.Settings.SecurityDashboardAlias",
- Settings.UserAndAccountDashboardActivity.class.getName(),
- Settings.SystemDashboardActivity.class.getName(),
- Settings.SupportDashboardActivity.class.getName(),
- // Home page > Apps & Notifications
- "com.android.settings.Settings.ManageApplicationsDashboardAlias",
- "com.android.settings.Settings.PaymentSettingsDashboardAlias",
- // Home page > Network & Internet
- "com.android.settings.Settings.WifiDashboardAlias",
- "com.android.settings.Settings.DataUsageDashboardAlias",
- // Home page > Security
- "com.android.settings.Settings.LocationDashboardAlias",
- // Home page > System
- Settings.LanguageAndRegionSettingsActivity.class.getName(),
- Settings.InputAndGestureSettingsActivity.class.getName(),
- "com.android.settings.Settings.DateTimeDashboardAlias",
- "com.android.settings.Settings.AccessibilityDashboardAlias",
- "com.android.settings.Settings.AboutDeviceDashboardAlias",
- };
-
private static final String[] LIKE_SHORTCUT_INTENT_ACTION_ARRAY = {
"android.settings.APPLICATION_DETAILS_SETTINGS"
};
@@ -1009,8 +951,10 @@
for (DashboardCategory category : categories) {
for (Tile tile : category.tiles) {
ComponentName component = tile.intent.getComponent();
- if (packageName.equals(component.getPackageName()) && !ArrayUtils.contains(
- SETTINGS_FOR_RESTRICTED, component.getClassName())) {
+ final String name = component.getClassName();
+ final boolean isEnabledForRestricted = ArrayUtils.contains(
+ SettingsGateway.SETTINGS_FOR_RESTRICTED, name);
+ if (packageName.equals(component.getPackageName()) && !isEnabledForRestricted) {
setTileEnabled(component, false, isAdmin);
}
}
@@ -1055,7 +999,8 @@
private void setTileEnabled(ComponentName component, boolean enabled, boolean isAdmin) {
if (UserHandle.MU_ENABLED && !isAdmin && getPackageName().equals(component.getPackageName())
- && !ArrayUtils.contains(SETTINGS_FOR_RESTRICTED, component.getClassName())) {
+ && !ArrayUtils.contains(SettingsGateway.SETTINGS_FOR_RESTRICTED,
+ component.getClassName())) {
enabled = false;
}
setTileEnabled(component, enabled);
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index db7eb5a..637fcd5 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -32,6 +32,7 @@
import com.android.settings.MasterClear;
import com.android.settings.PrivacySettings;
import com.android.settings.SecuritySettings;
+import com.android.settings.Settings;
import com.android.settings.TestingSettings;
import com.android.settings.TetherSettings;
import com.android.settings.TrustedCredentialsSettings;
@@ -244,4 +245,60 @@
UserAndAccountDashboardFragment.class.getName(),
EnterprisePrivacySettings.class.getName(),
};
+
+ public static final String[] SETTINGS_FOR_RESTRICTED = {
+ //wireless_section
+ Settings.WifiSettingsActivity.class.getName(),
+ Settings.BluetoothSettingsActivity.class.getName(),
+ Settings.DataUsageSummaryActivity.class.getName(),
+ Settings.SimSettingsActivity.class.getName(),
+ Settings.WirelessSettingsActivity.class.getName(),
+ //device_section
+ Settings.SoundSettingsActivity.class.getName(),
+ Settings.DisplaySettingsActivity.class.getName(),
+ Settings.StorageSettingsActivity.class.getName(),
+ Settings.ManageApplicationsActivity.class.getName(),
+ Settings.PowerUsageSummaryActivity.class.getName(),
+ Settings.GestureSettingsActivity.class.getName(),
+ //personal_section
+ Settings.LocationSettingsActivity.class.getName(),
+ Settings.SecuritySettingsActivity.class.getName(),
+ Settings.InputMethodAndLanguageSettingsActivity.class.getName(),
+ Settings.UserSettingsActivity.class.getName(),
+ Settings.AccountSettingsActivity.class.getName(),
+ //system_section
+ Settings.DateTimeSettingsActivity.class.getName(),
+ Settings.DeviceInfoSettingsActivity.class.getName(),
+ Settings.AccessibilitySettingsActivity.class.getName(),
+ Settings.PrintSettingsActivity.class.getName(),
+ Settings.PaymentSettingsActivity.class.getName(),
+ Settings.EnterprisePrivacySettingsActivity.class.getName(),
+
+ // New IA
+ // Home page
+ Settings.NetworkDashboardActivity.class.getName(),
+ Settings.ConnectedDeviceDashboardActivity.class.getName(),
+ Settings.AppAndNotificationDashboardActivity.class.getName(),
+ "com.android.settings.BatteryDashboardAlias",
+ "com.android.settings.DisplayDashboardAlias",
+ "com.android.settings.SoundDashboardAlias",
+ "com.android.settings.SecurityDashboardAlias",
+ Settings.UserAndAccountDashboardActivity.class.getName(),
+ Settings.SystemDashboardActivity.class.getName(),
+ Settings.SupportDashboardActivity.class.getName(),
+ // Home page > Apps & Notifications
+ "com.android.settings.ManageApplicationsDashboardAlias",
+ "com.android.settings.PaymentSettingsDashboardAlias",
+ // Home page > Network & Internet
+ "com.android.settings.WifiDashboardAlias",
+ "com.android.settings.DataUsageDashboardAlias",
+ // Home page > Security
+ "com.android.settings.LocationDashboardAlias",
+ // Home page > System
+ Settings.LanguageAndRegionSettingsActivity.class.getName(),
+ Settings.InputAndGestureSettingsActivity.class.getName(),
+ "com.android.settings.DateTimeDashboardAlias",
+ "com.android.settings.AccessibilityDashboardAlias",
+ "com.android.settings.AboutDeviceDashboardAlias",
+ };
}
diff --git a/tests/unit/src/com/android/settings/core/SettingsGatewayTest.java b/tests/unit/src/com/android/settings/core/SettingsGatewayTest.java
new file mode 100644
index 0000000..abce2c8
--- /dev/null
+++ b/tests/unit/src/com/android/settings/core/SettingsGatewayTest.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2017 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.core;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.Log;
+
+import com.android.settings.core.gateway.SettingsGateway;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.List;
+
+import static org.junit.Assert.assertFalse;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class SettingsGatewayTest {
+
+ private static final String TAG = "SettingsGatewayTest";
+
+ @Test
+ public void allRestrictedActivityMustBeDefinedInManifest() {
+ final Context context = InstrumentationRegistry.getTargetContext();
+ final PackageManager packageManager = context.getPackageManager();
+ final String packageName = context.getPackageName();
+ for (String className : SettingsGateway.SETTINGS_FOR_RESTRICTED) {
+ final Intent intent = new Intent();
+ intent.setComponent(new ComponentName(packageName, className));
+ List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent,
+ PackageManager.MATCH_DISABLED_COMPONENTS);
+ Log.d(TAG, packageName + "/" + className + "; resolveInfo size: "
+ + resolveInfos.size());
+ assertFalse(className + " is not-defined in manifest", resolveInfos.isEmpty());
+ }
+ }
+}