Gateway whitelist AdvancedConnectedDeviceDashboardFragment
- Discovered a few more fragments that weren't whitelisted, so I whistlisted those as well. - Also found ZenModeExternalRuleSettings is misconfigured in manifest and no longer needed, so deleted all artifacts about this activity. Fixes: 74060141 Test: atest Change-Id: I159e403bfa6707e2939d075ecc2b8d2f13514153
This commit is contained in:
@@ -716,15 +716,6 @@
|
|||||||
android:value="true" />
|
android:value="true" />
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<!-- Keep compatibility with old shortcuts. -->
|
|
||||||
<activity-alias android:name="UserDictionarySettings"
|
|
||||||
android:label="@string/user_dict_settings_title"
|
|
||||||
android:exported="true"
|
|
||||||
android:targetActivity="Settings$UserDictionarySettingsActivity">
|
|
||||||
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
|
||||||
android:value="com.android.settings.UserDictionarySettings" />
|
|
||||||
</activity-alias>
|
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="Settings$ZenModeSettingsActivity"
|
android:name="Settings$ZenModeSettingsActivity"
|
||||||
android:label="@string/zen_mode_settings_title"
|
android:label="@string/zen_mode_settings_title"
|
||||||
@@ -867,25 +858,6 @@
|
|||||||
android:value="true" />
|
android:value="true" />
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
|
||||||
android:name="Settings$ZenModeExternalRuleSettingsActivity"
|
|
||||||
android:exported="true"
|
|
||||||
android:taskAffinity="com.android.settings"
|
|
||||||
android:parentActivityName="Settings">
|
|
||||||
<intent-filter android:priority="1">
|
|
||||||
<action android:name="android.settings.ZEN_MODE_EXTERNAL_RULE_SETTINGS" />
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
</intent-filter>
|
|
||||||
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
|
||||||
android:value="com.android.settings.notification.ZenModeExternalRuleSettings" />
|
|
||||||
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
|
|
||||||
android:value="true" />
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="Settings$DisplaySettingsActivity"
|
android:name="Settings$DisplaySettingsActivity"
|
||||||
android:label="@string/display_settings"
|
android:label="@string/display_settings"
|
||||||
@@ -1251,7 +1223,7 @@
|
|||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||||
android:value="com.android.settings.applications.BackgroundCheckSummary" />
|
android:value="com.android.settings.applications.appops.BackgroundCheckSummary" />
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
@@ -2248,7 +2220,7 @@
|
|||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
|
||||||
android:value="com.android.settings.fuelgauge.BatterySaverSettings" />
|
android:value="com.android.settings.fuelgauge.batterysaver.BatterySaverSettings" />
|
||||||
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
|
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
|
||||||
android:value="true" />
|
android:value="true" />
|
||||||
</activity>
|
</activity>
|
||||||
|
@@ -7410,15 +7410,9 @@
|
|||||||
<!-- [CHAR LIMIT=40] Zen mode settings: Delete rule dialog button caption -->
|
<!-- [CHAR LIMIT=40] Zen mode settings: Delete rule dialog button caption -->
|
||||||
<string name="zen_mode_delete_rule_button">Delete</string>
|
<string name="zen_mode_delete_rule_button">Delete</string>
|
||||||
|
|
||||||
<!-- [CHAR LIMIT=40] Zen mode settings: External rule type -->
|
|
||||||
<string name="zen_mode_rule_type">Rule type</string>
|
|
||||||
|
|
||||||
<!-- [CHAR LIMIT=40] Zen mode settings: External rule type name if unknown -->
|
<!-- [CHAR LIMIT=40] Zen mode settings: External rule type name if unknown -->
|
||||||
<string name="zen_mode_rule_type_unknown">Unknown</string>
|
<string name="zen_mode_rule_type_unknown">Unknown</string>
|
||||||
|
|
||||||
<!-- [CHAR LIMIT=40] Zen mode settings: Configure external rule -->
|
|
||||||
<string name="zen_mode_configure_rule">Configure rule</string>
|
|
||||||
|
|
||||||
<!-- [CHAR LIMIT=NONE] Zen mode behavior settings footer: footer describing why the user cannot change the current do not disturb behavior settings -->
|
<!-- [CHAR LIMIT=NONE] Zen mode behavior settings footer: footer describing why the user cannot change the current do not disturb behavior settings -->
|
||||||
<string name="zen_mode_app_set_behavior">These settings can\'t be changed right now. An app (<xliff:g id="app_name" example="Android Services">%1$s</xliff:g>) has automatically turned on Do Not Disturb with custom behavior."</string>
|
<string name="zen_mode_app_set_behavior">These settings can\'t be changed right now. An app (<xliff:g id="app_name" example="Android Services">%1$s</xliff:g>) has automatically turned on Do Not Disturb with custom behavior."</string>
|
||||||
|
|
||||||
|
@@ -1,45 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!--
|
|
||||||
Copyright (C) 2015 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.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:key="zen_mode_external_rule_settings" >
|
|
||||||
|
|
||||||
<!-- Rule name -->
|
|
||||||
<Preference
|
|
||||||
android:key="rule_name"
|
|
||||||
android:title="@string/zen_mode_rule_name"
|
|
||||||
android:persistent="false" />
|
|
||||||
|
|
||||||
<!-- Rule type -->
|
|
||||||
<Preference
|
|
||||||
android:key="type"
|
|
||||||
android:title="@string/zen_mode_rule_type"
|
|
||||||
android:persistent="false" />
|
|
||||||
|
|
||||||
<!-- Configure -->
|
|
||||||
<Preference
|
|
||||||
android:key="configure"
|
|
||||||
android:title="@string/zen_mode_configure_rule"
|
|
||||||
android:persistent="false" />
|
|
||||||
|
|
||||||
<!-- Zen mode -->
|
|
||||||
<DropDownPreference
|
|
||||||
android:key="zen_mode"
|
|
||||||
android:summary="%s"
|
|
||||||
android:title="@string/zen_mode_settings_title" />
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
|
@@ -103,7 +103,6 @@ public class Settings extends SettingsActivity {
|
|||||||
public static class ZenModeAutomationSettingsActivity extends SettingsActivity { /* empty */ }
|
public static class ZenModeAutomationSettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class ZenModeScheduleRuleSettingsActivity extends SettingsActivity { /* empty */ }
|
public static class ZenModeScheduleRuleSettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class ZenModeEventRuleSettingsActivity 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 SoundSettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class ConfigureNotificationSettingsActivity extends SettingsActivity { /* empty */ }
|
public static class ConfigureNotificationSettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class AppNotificationSettingsActivity extends SettingsActivity { /* empty */ }
|
public static class AppNotificationSettingsActivity extends SettingsActivity { /* empty */ }
|
||||||
@@ -155,7 +154,6 @@ public class Settings extends SettingsActivity {
|
|||||||
// Top level categories for new IA
|
// Top level categories for new IA
|
||||||
public static class NetworkDashboardActivity extends SettingsActivity {}
|
public static class NetworkDashboardActivity extends SettingsActivity {}
|
||||||
public static class ConnectedDeviceDashboardActivity extends SettingsActivity {}
|
public static class ConnectedDeviceDashboardActivity extends SettingsActivity {}
|
||||||
public static class ConnectedDeviceDashboardActivityOld extends SettingsActivity {}
|
|
||||||
public static class PowerUsageSummaryActivity extends SettingsActivity { /* empty */ }
|
public static class PowerUsageSummaryActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class PowerUsageSummaryLegacyActivity extends SettingsActivity { /* empty */ }
|
public static class PowerUsageSummaryLegacyActivity extends SettingsActivity { /* empty */ }
|
||||||
public static class AppAndNotificationDashboardActivity extends SettingsActivity {}
|
public static class AppAndNotificationDashboardActivity extends SettingsActivity {}
|
||||||
|
@@ -28,8 +28,6 @@ import com.android.settings.Settings;
|
|||||||
import com.android.settings.TestingSettings;
|
import com.android.settings.TestingSettings;
|
||||||
import com.android.settings.TetherSettings;
|
import com.android.settings.TetherSettings;
|
||||||
import com.android.settings.TrustedCredentialsSettings;
|
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.AccessibilitySettings;
|
||||||
import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard;
|
import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard;
|
||||||
import com.android.settings.accessibility.CaptionPropertiesFragment;
|
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.PictureInPictureDetails;
|
||||||
import com.android.settings.applications.appinfo.PictureInPictureSettings;
|
import com.android.settings.applications.appinfo.PictureInPictureSettings;
|
||||||
import com.android.settings.applications.appinfo.WriteSettingsDetails;
|
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.assist.ManageAssist;
|
||||||
import com.android.settings.applications.manageapplications.ManageApplications;
|
import com.android.settings.applications.manageapplications.ManageApplications;
|
||||||
import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
|
import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
|
||||||
import com.android.settings.bluetooth.BluetoothSettings;
|
import com.android.settings.bluetooth.BluetoothSettings;
|
||||||
|
import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment;
|
||||||
import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
|
import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
|
||||||
import com.android.settings.connecteddevice.usb.UsbDetailsFragment;
|
import com.android.settings.connecteddevice.usb.UsbDetailsFragment;
|
||||||
import com.android.settings.datausage.DataUsageList;
|
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.PublicVolumeSettings;
|
||||||
import com.android.settings.deviceinfo.StorageDashboardFragment;
|
import com.android.settings.deviceinfo.StorageDashboardFragment;
|
||||||
import com.android.settings.deviceinfo.StorageSettings;
|
import com.android.settings.deviceinfo.StorageSettings;
|
||||||
|
import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment;
|
||||||
import com.android.settings.display.NightDisplaySettings;
|
import com.android.settings.display.NightDisplaySettings;
|
||||||
import com.android.settings.dream.DreamSettings;
|
import com.android.settings.dream.DreamSettings;
|
||||||
import com.android.settings.enterprise.EnterprisePrivacySettings;
|
import com.android.settings.enterprise.EnterprisePrivacySettings;
|
||||||
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
|
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
|
||||||
import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
|
|
||||||
import com.android.settings.fuelgauge.PowerUsageSummary;
|
import com.android.settings.fuelgauge.PowerUsageSummary;
|
||||||
import com.android.settings.fuelgauge.PowerUsageSummaryLegacy;
|
import com.android.settings.fuelgauge.PowerUsageSummaryLegacy;
|
||||||
|
import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
|
||||||
import com.android.settings.gestures.AssistGestureSettings;
|
import com.android.settings.gestures.AssistGestureSettings;
|
||||||
import com.android.settings.gestures.DoubleTapPowerSettings;
|
import com.android.settings.gestures.DoubleTapPowerSettings;
|
||||||
import com.android.settings.gestures.DoubleTapScreenSettings;
|
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.WifiAPITest;
|
||||||
import com.android.settings.wifi.WifiInfo;
|
import com.android.settings.wifi.WifiInfo;
|
||||||
import com.android.settings.wifi.WifiSettings;
|
import com.android.settings.wifi.WifiSettings;
|
||||||
|
import com.android.settings.wifi.calling.WifiCallingSettings;
|
||||||
import com.android.settings.wifi.p2p.WifiP2pSettings;
|
import com.android.settings.wifi.p2p.WifiP2pSettings;
|
||||||
|
|
||||||
public class SettingsGateway {
|
public class SettingsGateway {
|
||||||
@@ -138,6 +140,7 @@ public class SettingsGateway {
|
|||||||
* security exception if the fragment it needs to display is not in this list.
|
* security exception if the fragment it needs to display is not in this list.
|
||||||
*/
|
*/
|
||||||
public static final String[] ENTRY_FRAGMENTS = {
|
public static final String[] ENTRY_FRAGMENTS = {
|
||||||
|
AdvancedConnectedDeviceDashboardFragment.class.getName(),
|
||||||
WifiSettings.class.getName(),
|
WifiSettings.class.getName(),
|
||||||
ConfigureWifiSettings.class.getName(),
|
ConfigureWifiSettings.class.getName(),
|
||||||
SavedAccessPointsWifiSettings.class.getName(),
|
SavedAccessPointsWifiSettings.class.getName(),
|
||||||
@@ -145,6 +148,7 @@ public class SettingsGateway {
|
|||||||
SimSettings.class.getName(),
|
SimSettings.class.getName(),
|
||||||
TetherSettings.class.getName(),
|
TetherSettings.class.getName(),
|
||||||
WifiP2pSettings.class.getName(),
|
WifiP2pSettings.class.getName(),
|
||||||
|
BackgroundCheckSummary.class.getName(),
|
||||||
VpnSettings.class.getName(),
|
VpnSettings.class.getName(),
|
||||||
DateTimeSettings.class.getName(),
|
DateTimeSettings.class.getName(),
|
||||||
LocaleListEditor.class.getName(),
|
LocaleListEditor.class.getName(),
|
||||||
@@ -257,7 +261,6 @@ public class SettingsGateway {
|
|||||||
// Home page
|
// Home page
|
||||||
Settings.NetworkDashboardActivity.class.getName(),
|
Settings.NetworkDashboardActivity.class.getName(),
|
||||||
Settings.ConnectedDeviceDashboardActivity.class.getName(),
|
Settings.ConnectedDeviceDashboardActivity.class.getName(),
|
||||||
Settings.ConnectedDeviceDashboardActivityOld.class.getName(),
|
|
||||||
Settings.AppAndNotificationDashboardActivity.class.getName(),
|
Settings.AppAndNotificationDashboardActivity.class.getName(),
|
||||||
Settings.DisplaySettingsActivity.class.getName(),
|
Settings.DisplaySettingsActivity.class.getName(),
|
||||||
Settings.SoundSettingsActivity.class.getName(),
|
Settings.SoundSettingsActivity.class.getName(),
|
||||||
|
@@ -16,44 +16,101 @@
|
|||||||
|
|
||||||
package com.android.settings.core;
|
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.ComponentName;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.ActivityInfo;
|
||||||
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.platform.test.annotations.Presubmit;
|
||||||
import android.support.test.InstrumentationRegistry;
|
import android.support.test.InstrumentationRegistry;
|
||||||
import android.support.test.filters.SmallTest;
|
import android.support.test.filters.SmallTest;
|
||||||
import android.support.test.runner.AndroidJUnit4;
|
import android.support.test.runner.AndroidJUnit4;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.settings.core.gateway.SettingsGateway;
|
import com.android.settings.core.gateway.SettingsGateway;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static org.junit.Assert.assertFalse;
|
|
||||||
|
|
||||||
@SmallTest
|
@SmallTest
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
public class SettingsGatewayTest {
|
public class SettingsGatewayTest {
|
||||||
|
|
||||||
private static final String TAG = "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
|
@Test
|
||||||
|
@Presubmit
|
||||||
public void allRestrictedActivityMustBeDefinedInManifest() {
|
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) {
|
for (String className : SettingsGateway.SETTINGS_FOR_RESTRICTED) {
|
||||||
final Intent intent = new Intent();
|
final Intent intent = new Intent();
|
||||||
intent.setComponent(new ComponentName(packageName, className));
|
intent.setComponent(new ComponentName(mPackageName, className));
|
||||||
List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent,
|
List<ResolveInfo> resolveInfos = mPackageManager.queryIntentActivities(intent,
|
||||||
PackageManager.MATCH_DISABLED_COMPONENTS);
|
MATCH_DISABLED_COMPONENTS);
|
||||||
Log.d(TAG, packageName + "/" + className + "; resolveInfo size: "
|
Log.d(TAG, mPackageName + "/" + className + "; resolveInfo size: "
|
||||||
+ resolveInfos.size());
|
+ resolveInfos.size());
|
||||||
assertFalse(className + " is not-defined in manifest", resolveInfos.isEmpty());
|
assertFalse(className + " is not-defined in manifest", resolveInfos.isEmpty());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Presubmit
|
||||||
|
public void publicFragmentMustAppearInSettingsGateway()
|
||||||
|
throws PackageManager.NameNotFoundException {
|
||||||
|
final List<String> 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<ActivityInfo> 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user