com.android.settings.bluetooth.DevicePickerFragment
-com.android.settings.language.LanguageAndRegionSettings
com.android.settings.notification.ZenModePrioritySettings
com.android.settings.accounts.AccountDetailDashboardFragment
com.android.settings.fuelgauge.PowerUsageAnomalyDetails
-com.android.settings.fuelgauge.PowerUsageDetail
com.android.settings.fuelgauge.AdvancedPowerUsageDetail
com.android.settings.deviceinfo.StorageProfileFragment
com.android.settings.wifi.details.WifiNetworkDetailsFragment
com.android.settings.applications.ProcessStatsDetail
com.android.settings.wifi.WifiInfo
com.android.settings.applications.VrListenerSettings
-com.android.settings.nfc.PaymentSettings
-com.android.settings.inputmethod.VirtualKeyboardFragment
-com.android.settings.bluetooth.DevicePickerFragment
com.android.settings.inputmethod.UserDictionaryList
com.android.settings.deviceinfo.Status
com.android.settings.datausage.DataSaverSummary
com.android.settings.notification.ChannelNotificationSettings
com.android.settings.datausage.AppDataUsage
com.android.settings.accessibility.FontSizePreferenceFragmentForSetupWizard
-com.android.settings.inputmethod.PhysicalKeyboardFragment
com.android.settings.applications.ManageDomainUrls
com.android.settings.applications.WriteSettingsDetails
com.android.settings.location.LocationSettings
com.android.settings.users.RestrictedProfileSettings
com.android.settings.accounts.ChooseAccountActivity
com.android.settings.accounts.ManagedProfileSettings
-com.android.settings.notification.ZenModeAutomationSettings
com.android.settings.accessibility.ToggleAutoclickPreferenceFragment
com.android.settings.applications.AppLaunchSettings
com.android.settings.fuelgauge.BatterySaverSettings
com.android.settings.location.ScanningSettings
com.android.settings.tts.TextToSpeechSettings
com.android.settings.applications.ProcessStatsUi
-com.android.settings.fuelgauge.PowerUsageDetail
com.android.settings.notification.ZenModeScheduleRuleSettings
com.android.settings.datausage.BillingCycleSettings
com.android.settings.notification.NotificationStation
com.android.settings.accounts.AccountSyncSettings
com.android.settings.notification.RedactionInterstitial$RedactionInterstitialFragment
com.android.settings.inputmethod.InputMethodAndSubtypeEnabler
-com.android.settings.inputmethod.AvailableVirtualKeyboardFragment
com.android.settings.applications.DrawOverlayDetails
-com.android.settings.tts.TtsEngineSettingsFragment
com.android.settings.backup.ToggleBackupSettingFragment
com.android.settings.users.UserDetailsSettings
com.android.settings.datausage.UnrestrictedDataAccess
com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragmentForSetupWizard
com.android.settings.fuelgauge.BatteryHistoryDetail
-com.android.settings.fuelgauge.PowerUsageSummary
com.android.settings.applications.RunningServices
-com.android.settings.wifi.p2p.WifiP2pSettings
-com.android.settings.applications.assistant.ManageAssist
com.android.settings.applications.ConfirmConvertToFbe
com.android.settings.deviceinfo.PublicVolumeSettings
com.android.settings.applications.InstalledAppDetails
com.android.settings.deletionhelper.AutomaticStorageManagerSettings
com.android.settings.notification.ZenAccessSettings
com.android.settings.accessibility.ToggleFontSizePreferenceFragment
-com.android.settings.accessibility.ToggleGlobalGesturePreferenceFragment
-com.android.settings.wifi.ConfigureWifiSettings
com.android.settings.applications.PremiumSmsAccess
com.android.settings.applications.UsageAccessDetails
com.android.settings.applications.AppStorageSettings
com.android.settings.notification.NotificationAccessSettings
com.android.settings.notification.ZenModeSettings
com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment
-com.android.settings.applications.ConvertToFbe
com.android.settings.localepicker.LocaleListEditor
com.android.settings.qstile.DevelopmentTileConfigActivity$DevelopmentTileConfigFragment
com.android.settings.applications.ExternalSourcesDetails
com.android.settings.display.ScreenZoomPreferenceFragmentForSetupWizard
-com.android.settings.print.PrintServiceSettingsFragment
-com.android.settings.language.LanguageAndInputSettings
-com.android.settings.enterprise.EnterprisePrivacySettings
com.android.settings.applications.AdvancedAppSettings
com.android.settings.fuelgauge.PowerUsageSummary
-com.android.settings.inputmethod.InputMethodAndLanguageSettings
import java.lang.reflect.Modifier;
import java.util.List;
+import static com.google.common.truth.Truth.assertWithMessage;
+
/**
* Inspector takes a list of class objects and perform static code analysis in its {@link #run()}
* method.
*/
public abstract void run();
+ protected void assertNoObsoleteInGrandfatherList(String listName, List<String> list) {
+ final StringBuilder obsoleteGrandfatherItems = new StringBuilder(
+ listName + " contains item that should not be grandfathered.\n");
+ for (String c : list) {
+ obsoleteGrandfatherItems.append(c).append("\n");
+ }
+ assertWithMessage(obsoleteGrandfatherItems.toString())
+ .that(list)
+ .isEmpty();
+ }
+
protected boolean isConcreteSettingsClass(Class clazz) {
// Abstract classes
if (Modifier.isAbstract(clazz.getModifiers())) {
}
final String className = clazz.getName();
// If it's a fragment, it must also be instrumentable.
+ final boolean whitelisted =
+ grandfather_notImplementingInstrumentable.remove(className);
if (Fragment.class.isAssignableFrom(clazz)
&& !Instrumentable.class.isAssignableFrom(clazz)
- && !grandfather_notImplementingInstrumentable.contains(className)) {
+ && !whitelisted) {
broken.add(className);
}
}
assertWithMessage(sb.toString())
.that(broken.isEmpty())
.isTrue();
+ assertNoObsoleteInGrandfatherList("grandfather_not_implementing_instrumentable",
+ grandfather_notImplementingInstrumentable);
}
}
// If it's a SettingsPreferenceFragment, it must also be Indexable.
final boolean implementsIndexable = Indexable.class.isAssignableFrom(clazz);
if (!implementsIndexable) {
- if (!notImplementingIndexableGrandfatherList.contains(className)) {
+ if (!notImplementingIndexableGrandfatherList.remove(className)) {
notImplementingIndexable.add(className);
}
continue;
final boolean hasSearchIndexProvider = hasSearchIndexProvider(clazz);
// If it implements Indexable, it must also implement the index provider field.
if (!hasSearchIndexProvider) {
- if (!notImplementingIndexProviderGrandfatherList.contains(className)) {
+ if (!notImplementingIndexProviderGrandfatherList.remove(className)) {
notImplementingIndexProvider.add(className);
}
continue;
final boolean isSharingPrefControllers = DashboardFragmentSearchIndexProviderInspector
.isSharingPreferenceControllers(clazz);
if (!isSharingPrefControllers) {
- if (!notSharingPrefControllersGrandfatherList.contains(className)) {
+ if (!notSharingPrefControllersGrandfatherList.remove(className)) {
notSharingPreferenceControllers.add(className);
}
continue;
}
// Must be in SearchProviderRegistry
if (SearchIndexableResources.getResourceByName(className) == null) {
- if (!notInSearchIndexableRegistryGrandfatherList.contains(className)) {
+ if (!notInSearchIndexableRegistryGrandfatherList.remove(className)) {
notInSearchProviderRegistry.add(className);
}
continue;
assertWithMessage(notInProviderRegistryError)
.that(notInSearchProviderRegistry)
.isEmpty();
+ assertNoObsoleteInGrandfatherList("grandfather_not_implementing_indexable",
+ notImplementingIndexableGrandfatherList);
+ assertNoObsoleteInGrandfatherList("grandfather_not_implementing_index_provider",
+ notImplementingIndexProviderGrandfatherList);
+ assertNoObsoleteInGrandfatherList("grandfather_not_in_search_index_provider_registry",
+ notInSearchIndexableRegistryGrandfatherList);
+ assertNoObsoleteInGrandfatherList(
+ "grandfather_not_sharing_pref_controllers_with_search_provider",
+ notSharingPrefControllersGrandfatherList);
}
private boolean hasSearchIndexProvider(Class clazz) {