diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 06941d09494..d779f3e3136 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -50,7 +50,6 @@ public class Settings extends SettingsActivity { 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 2ca0d4bf71d..0751b814c17 100644 --- a/src/com/android/settings/SettingsActivity.java +++ b/src/com/android/settings/SettingsActivity.java @@ -165,64 +165,6 @@ public class SettingsActivity extends SettingsDrawerActivity 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 @@ public class SettingsActivity extends SettingsDrawerActivity 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 @@ public class SettingsActivity extends SettingsDrawerActivity 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 db7eb5a2b2a..637fcd55079 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.IccLockSettings; 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 @@ public class SettingsGateway { 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 00000000000..abce2c8e616 --- /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 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()); + } + } +}