diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2795ba1ab2d..dbe231b5255 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -716,15 +716,6 @@
android:value="true" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:value="com.android.settings.applications.appops.BackgroundCheckSummary" />
+ android:value="com.android.settings.fuelgauge.batterysaver.BatterySaverSettings" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ae898902011..2c919424f94 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7412,15 +7412,9 @@
Delete
-
- Rule type
-
Unknown
-
- Configure rule
-
These settings can\'t be changed right now. An app (%1$s) has automatically turned on Do Not Disturb with custom behavior."
diff --git a/res/xml/zen_mode_external_rule_settings.xml b/res/xml/zen_mode_external_rule_settings.xml
deleted file mode 100644
index 0869cb03b71..00000000000
--- a/res/xml/zen_mode_external_rule_settings.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index d2d9166968d..4baa77b2872 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -103,7 +103,6 @@ public class Settings extends SettingsActivity {
public static class ZenModeAutomationSettingsActivity extends SettingsActivity { /* empty */ }
public static class ZenModeScheduleRuleSettingsActivity extends SettingsActivity { /* empty */ }
public static class ZenModeEventRuleSettingsActivity extends SettingsActivity { /* empty */ }
- public static class ZenModeExternalRuleSettingsActivity extends SettingsActivity { /* empty */ }
public static class SoundSettingsActivity extends SettingsActivity { /* empty */ }
public static class ConfigureNotificationSettingsActivity extends SettingsActivity { /* empty */ }
public static class AppNotificationSettingsActivity extends SettingsActivity { /* empty */ }
@@ -156,7 +155,6 @@ public class Settings extends SettingsActivity {
// Top level categories for new IA
public static class NetworkDashboardActivity extends SettingsActivity {}
public static class ConnectedDeviceDashboardActivity extends SettingsActivity {}
- public static class ConnectedDeviceDashboardActivityOld extends SettingsActivity {}
public static class PowerUsageSummaryActivity extends SettingsActivity { /* empty */ }
public static class PowerUsageSummaryLegacyActivity extends SettingsActivity { /* empty */ }
public static class AppAndNotificationDashboardActivity extends SettingsActivity {}
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 51e151ebeff..f9c78479c16 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -28,8 +28,6 @@ import com.android.settings.Settings;
import com.android.settings.TestingSettings;
import com.android.settings.TetherSettings;
import com.android.settings.TrustedCredentialsSettings;
-import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment;
-import com.android.settings.wifi.calling.WifiCallingSettings;
import com.android.settings.accessibility.AccessibilitySettings;
import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard;
import com.android.settings.accessibility.CaptionPropertiesFragment;
@@ -52,10 +50,12 @@ import com.android.settings.applications.appinfo.ExternalSourcesDetails;
import com.android.settings.applications.appinfo.PictureInPictureDetails;
import com.android.settings.applications.appinfo.PictureInPictureSettings;
import com.android.settings.applications.appinfo.WriteSettingsDetails;
+import com.android.settings.applications.appops.BackgroundCheckSummary;
import com.android.settings.applications.assist.ManageAssist;
import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
import com.android.settings.bluetooth.BluetoothSettings;
+import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment;
import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
import com.android.settings.connecteddevice.usb.UsbDetailsFragment;
import com.android.settings.datausage.DataUsageList;
@@ -69,13 +69,14 @@ import com.android.settings.deviceinfo.PrivateVolumeSettings;
import com.android.settings.deviceinfo.PublicVolumeSettings;
import com.android.settings.deviceinfo.StorageDashboardFragment;
import com.android.settings.deviceinfo.StorageSettings;
+import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment;
import com.android.settings.display.NightDisplaySettings;
import com.android.settings.dream.DreamSettings;
import com.android.settings.enterprise.EnterprisePrivacySettings;
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
-import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settings.fuelgauge.PowerUsageSummaryLegacy;
+import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
import com.android.settings.gestures.AssistGestureSettings;
import com.android.settings.gestures.DoubleTapPowerSettings;
import com.android.settings.gestures.DoubleTapScreenSettings;
@@ -129,6 +130,7 @@ import com.android.settings.wifi.SavedAccessPointsWifiSettings;
import com.android.settings.wifi.WifiAPITest;
import com.android.settings.wifi.WifiInfo;
import com.android.settings.wifi.WifiSettings;
+import com.android.settings.wifi.calling.WifiCallingSettings;
import com.android.settings.wifi.p2p.WifiP2pSettings;
public class SettingsGateway {
@@ -138,6 +140,7 @@ public class SettingsGateway {
* security exception if the fragment it needs to display is not in this list.
*/
public static final String[] ENTRY_FRAGMENTS = {
+ AdvancedConnectedDeviceDashboardFragment.class.getName(),
WifiSettings.class.getName(),
ConfigureWifiSettings.class.getName(),
SavedAccessPointsWifiSettings.class.getName(),
@@ -145,6 +148,7 @@ public class SettingsGateway {
SimSettings.class.getName(),
TetherSettings.class.getName(),
WifiP2pSettings.class.getName(),
+ BackgroundCheckSummary.class.getName(),
VpnSettings.class.getName(),
DateTimeSettings.class.getName(),
LocaleListEditor.class.getName(),
@@ -257,7 +261,6 @@ public class SettingsGateway {
// Home page
Settings.NetworkDashboardActivity.class.getName(),
Settings.ConnectedDeviceDashboardActivity.class.getName(),
- Settings.ConnectedDeviceDashboardActivityOld.class.getName(),
Settings.AppAndNotificationDashboardActivity.class.getName(),
Settings.DisplaySettingsActivity.class.getName(),
Settings.SoundSettingsActivity.class.getName(),
diff --git a/tests/unit/src/com/android/settings/core/SettingsGatewayTest.java b/tests/unit/src/com/android/settings/core/SettingsGatewayTest.java
index abce2c8e616..ed49b2e3335 100644
--- a/tests/unit/src/com/android/settings/core/SettingsGatewayTest.java
+++ b/tests/unit/src/com/android/settings/core/SettingsGatewayTest.java
@@ -16,44 +16,101 @@
package com.android.settings.core;
+import static android.content.pm.PackageManager.GET_ACTIVITIES;
+import static android.content.pm.PackageManager.GET_META_DATA;
+import static android.content.pm.PackageManager.MATCH_DISABLED_COMPONENTS;
+import static com.android.settings.SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS;
+import static com.google.common.truth.Truth.assertThat;
+import static junit.framework.Assert.fail;
+import static org.junit.Assert.assertFalse;
+
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.os.Bundle;
+import android.platform.test.annotations.Presubmit;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
+import android.text.TextUtils;
import android.util.Log;
import com.android.settings.core.gateway.SettingsGateway;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
-import static org.junit.Assert.assertFalse;
-
@SmallTest
@RunWith(AndroidJUnit4.class)
public class SettingsGatewayTest {
private static final String TAG = "SettingsGatewayTest";
+ private Context mContext;
+ private PackageManager mPackageManager;
+ private String mPackageName;
+
+ @Before
+ public void setUp() {
+ mContext = InstrumentationRegistry.getTargetContext();
+ mPackageManager = mContext.getPackageManager();
+ mPackageName = mContext.getPackageName();
+ }
+
@Test
+ @Presubmit
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: "
+ intent.setComponent(new ComponentName(mPackageName, className));
+ List resolveInfos = mPackageManager.queryIntentActivities(intent,
+ MATCH_DISABLED_COMPONENTS);
+ Log.d(TAG, mPackageName + "/" + className + "; resolveInfo size: "
+ resolveInfos.size());
assertFalse(className + " is not-defined in manifest", resolveInfos.isEmpty());
}
}
+
+ @Test
+ @Presubmit
+ public void publicFragmentMustAppearInSettingsGateway()
+ throws PackageManager.NameNotFoundException {
+ final List whitelistedFragment = new ArrayList<>();
+ final StringBuilder error = new StringBuilder();
+
+ for (String fragment : SettingsGateway.ENTRY_FRAGMENTS) {
+ whitelistedFragment.add(fragment);
+ }
+ final PackageInfo pi = mPackageManager.getPackageInfo(mPackageName,
+ GET_META_DATA | MATCH_DISABLED_COMPONENTS | GET_ACTIVITIES);
+ final List activities = Arrays.asList(pi.activities);
+
+ for (ActivityInfo activity : activities) {
+ final Bundle metaData = activity.metaData;
+ if (metaData == null || !metaData.containsKey(META_DATA_KEY_FRAGMENT_CLASS)) {
+ continue;
+ }
+ final String fragmentName = metaData.getString(META_DATA_KEY_FRAGMENT_CLASS);
+
+ assertThat(fragmentName).isNotNull();
+ if (!whitelistedFragment.contains(fragmentName)) {
+ error.append("SettingsGateway.ENTRY_FRAGMENTS must contain " + fragmentName
+ + " because this fragment is used in manifest for " + activity.name)
+ .append("\n");
+ }
+ }
+ final String message = error.toString();
+ if (!TextUtils.isEmpty(message)) {
+ fail(message);
+ }
+ }
}