summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/settings/DateTimeSettings.java2
-rw-r--r--src/com/android/settings/DisplaySettings.java2
-rw-r--r--src/com/android/settings/LegalSettings.java108
-rw-r--r--src/com/android/settings/PrivacySettings.java248
-rw-r--r--src/com/android/settings/accessibility/AccessibilitySettings.java2
-rw-r--r--src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java2
-rw-r--r--src/com/android/settings/accessibility/MagnificationPreferenceFragment.java2
-rw-r--r--src/com/android/settings/accessibility/VibrationSettings.java2
-rw-r--r--src/com/android/settings/accounts/AccountDashboardFragment.java2
-rw-r--r--src/com/android/settings/accounts/AccountPreferenceBase.java7
-rw-r--r--src/com/android/settings/accounts/AccountSyncSettings.java10
-rw-r--r--src/com/android/settings/accounts/ContactSearchPreferenceController.java88
-rw-r--r--src/com/android/settings/accounts/ManagedProfileSettings.java112
-rw-r--r--src/com/android/settings/accounts/WorkModePreferenceController.java146
-rw-r--r--src/com/android/settings/applications/AppAndNotificationDashboardFragment.java2
-rw-r--r--src/com/android/settings/applications/DefaultAppSettings.java2
-rw-r--r--src/com/android/settings/applications/SpecialAccessSettings.java3
-rw-r--r--src/com/android/settings/applications/assist/ManageAssist.java2
-rw-r--r--src/com/android/settings/applications/manageapplications/ManageApplications.java15
-rw-r--r--src/com/android/settings/backup/AutoRestorePreferenceController.java89
-rw-r--r--src/com/android/settings/backup/BackupDataPreferenceController.java64
-rw-r--r--src/com/android/settings/backup/BackupInactivePreferenceController.java39
-rw-r--r--src/com/android/settings/backup/BackupSettingsActivity.java2
-rw-r--r--src/com/android/settings/backup/BackupSettingsFragment.java2
-rw-r--r--src/com/android/settings/backup/ConfigureAccountPreferenceController.java64
-rw-r--r--src/com/android/settings/backup/DataManagementPreferenceController.java58
-rw-r--r--src/com/android/settings/backup/PrivacySettings.java96
-rw-r--r--src/com/android/settings/backup/PrivacySettingsConfigData.java85
-rw-r--r--src/com/android/settings/backup/PrivacySettingsUtils.java122
-rw-r--r--src/com/android/settings/bluetooth/BluetoothDetailsHeaderController.java10
-rw-r--r--src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java33
-rw-r--r--src/com/android/settings/bluetooth/Utf8ByteLengthFilter.java2
-rw-r--r--src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java2
-rw-r--r--src/com/android/settings/connecteddevice/BluetoothDashboardFragment.java2
-rw-r--r--src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java2
-rw-r--r--src/com/android/settings/connecteddevice/PreviouslyConnectedDeviceDashboardFragment.java2
-rw-r--r--src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java4
-rw-r--r--src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java2
-rw-r--r--src/com/android/settings/core/PreferenceControllerListHelper.java3
-rw-r--r--src/com/android/settings/core/gateway/SettingsGateway.java2
-rw-r--r--src/com/android/settings/datausage/ChartDataUsagePreference.java4
-rw-r--r--src/com/android/settings/datausage/DataUsageSummary.java2
-rw-r--r--src/com/android/settings/datausage/DataUsageSummaryLegacy.java2
-rw-r--r--src/com/android/settings/datausage/DataUsageSummaryPreference.java4
-rw-r--r--src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java18
-rw-r--r--src/com/android/settings/datetime/TimeZonePreferenceController.java8
-rw-r--r--src/com/android/settings/datetime/ZonePicker.java306
-rw-r--r--src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java2
-rw-r--r--src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java3
-rw-r--r--src/com/android/settings/development/ForceGpuRenderingPreferenceController.java68
-rw-r--r--src/com/android/settings/deviceinfo/DeviceInfoSettings.java2
-rw-r--r--src/com/android/settings/deviceinfo/PrivateVolumeForget.java29
-rw-r--r--src/com/android/settings/deviceinfo/PrivateVolumeFormat.java5
-rw-r--r--src/com/android/settings/deviceinfo/PrivateVolumeUnmount.java12
-rw-r--r--src/com/android/settings/deviceinfo/StorageDashboardFragment.java2
-rw-r--r--src/com/android/settings/deviceinfo/StorageSettings.java2
-rw-r--r--src/com/android/settings/deviceinfo/StorageVolumePreference.java2
-rw-r--r--src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java2
-rw-r--r--src/com/android/settings/deviceinfo/legal/CopyrightPreferenceController.java32
-rw-r--r--src/com/android/settings/deviceinfo/legal/LegalPreferenceController.java96
-rw-r--r--src/com/android/settings/deviceinfo/legal/LicensePreferenceController.java32
-rw-r--r--src/com/android/settings/deviceinfo/legal/TermsPreferenceController.java32
-rw-r--r--src/com/android/settings/deviceinfo/legal/WallpaperAttributionsPreferenceController.java (renamed from src/com/android/settings/search/SearchIndexableResources.java)24
-rw-r--r--src/com/android/settings/deviceinfo/legal/WebViewLicensePreferenceController.java32
-rw-r--r--src/com/android/settings/deviceinfo/storage/UserProfileController.java2
-rw-r--r--src/com/android/settings/display/AmbientDisplaySettings.java2
-rw-r--r--src/com/android/settings/display/AutoBrightnessSettings.java2
-rw-r--r--src/com/android/settings/display/NightDisplaySettings.java2
-rw-r--r--src/com/android/settings/display/ScreenZoomSettings.java2
-rw-r--r--src/com/android/settings/dream/DreamSettings.java2
-rw-r--r--src/com/android/settings/enterprise/EnterprisePrivacySettings.java2
-rw-r--r--src/com/android/settings/fuelgauge/BatteryMeterView.java3
-rw-r--r--src/com/android/settings/fuelgauge/BatterySaverDrawable.java4
-rw-r--r--src/com/android/settings/fuelgauge/PowerUsageAdvanced.java2
-rw-r--r--src/com/android/settings/fuelgauge/PowerUsageSummary.java2
-rw-r--r--src/com/android/settings/fuelgauge/SmartBatterySettings.java2
-rw-r--r--src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java2
-rw-r--r--src/com/android/settings/gestures/AssistGestureSettings.java2
-rw-r--r--src/com/android/settings/gestures/DoubleTapPowerSettings.java2
-rw-r--r--src/com/android/settings/gestures/DoubleTapScreenSettings.java2
-rw-r--r--src/com/android/settings/gestures/DoubleTwistGestureSettings.java2
-rw-r--r--src/com/android/settings/gestures/GestureSettings.java2
-rw-r--r--src/com/android/settings/gestures/PickupGestureSettings.java2
-rw-r--r--src/com/android/settings/gestures/PreventRingingGestureSettings.java2
-rw-r--r--src/com/android/settings/gestures/SwipeToNotificationSettings.java2
-rw-r--r--src/com/android/settings/gestures/SwipeUpGestureSettings.java2
-rw-r--r--src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java2
-rw-r--r--src/com/android/settings/inputmethod/KeyboardLayoutPickerController.java162
-rw-r--r--src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java126
-rw-r--r--src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java26
-rw-r--r--src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java26
-rw-r--r--src/com/android/settings/inputmethod/UserDictionaryList.java150
-rw-r--r--src/com/android/settings/inputmethod/UserDictionaryListPreferenceController.java211
-rw-r--r--src/com/android/settings/inputmethod/VirtualKeyboardFragment.java2
-rw-r--r--src/com/android/settings/language/LanguageAndInputSettings.java2
-rw-r--r--src/com/android/settings/language/UserDictionaryPreferenceController.java7
-rw-r--r--src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java10
-rw-r--r--src/com/android/settings/location/LocationSettings.java3
-rw-r--r--src/com/android/settings/location/RecentLocationRequestSeeAllFragment.java3
-rw-r--r--src/com/android/settings/location/ScanningSettings.java2
-rw-r--r--src/com/android/settings/network/NetworkDashboardFragment.java26
-rw-r--r--src/com/android/settings/nfc/PaymentSettings.java2
-rw-r--r--src/com/android/settings/notification/ConfigureNotificationSettings.java8
-rw-r--r--src/com/android/settings/notification/PulseNotificationPreferenceController.java51
-rw-r--r--src/com/android/settings/notification/SoundSettings.java2
-rw-r--r--src/com/android/settings/notification/ZenAutomaticRuleHeaderPreferenceController.java4
-rw-r--r--src/com/android/settings/notification/ZenModeAutomationSettings.java2
-rw-r--r--src/com/android/settings/notification/ZenModeBehaviorSettings.java2
-rw-r--r--src/com/android/settings/notification/ZenModeBlockedEffectsSettings.java2
-rw-r--r--src/com/android/settings/notification/ZenModeSettings.java2
-rw-r--r--src/com/android/settings/print/PrintSettingsFragment.java2
-rw-r--r--src/com/android/settings/search/SearchFeatureProvider.java1
-rw-r--r--src/com/android/settings/search/SearchFeatureProviderImpl.java4
-rw-r--r--src/com/android/settings/search/SearchIndexableResourcesImpl.java196
-rw-r--r--src/com/android/settings/security/EncryptionAndCredential.java2
-rw-r--r--src/com/android/settings/security/LockdownButtonPreferenceController.java8
-rw-r--r--src/com/android/settings/security/LockscreenDashboardFragment.java4
-rw-r--r--src/com/android/settings/security/ScreenPinningSettings.java2
-rw-r--r--src/com/android/settings/security/SecuritySettings.java2
-rw-r--r--src/com/android/settings/security/screenlock/ScreenLockSettings.java2
-rw-r--r--src/com/android/settings/sim/SimSettings.java2
-rw-r--r--src/com/android/settings/support/SupportDashboardActivity.java2
-rw-r--r--src/com/android/settings/system/ResetDashboardFragment.java2
-rw-r--r--src/com/android/settings/system/SystemDashboardFragment.java2
-rw-r--r--src/com/android/settings/tts/TextToSpeechSettings.java2
-rw-r--r--src/com/android/settings/tts/TtsEnginePreferenceFragment.java3
-rw-r--r--src/com/android/settings/users/UserSettings.java2
-rw-r--r--src/com/android/settings/wallpaper/WallpaperTypePreferenceController.java122
-rw-r--r--src/com/android/settings/wallpaper/WallpaperTypeSettings.java63
-rwxr-xr-xsrc/com/android/settings/wfd/WifiDisplaySettings.java2
-rw-r--r--src/com/android/settings/widget/DonutView.java5
-rw-r--r--src/com/android/settings/widget/EntityHeaderController.java19
-rw-r--r--src/com/android/settings/wifi/ConfigureWifiSettings.java2
-rw-r--r--src/com/android/settings/wifi/WifiSettings.java2
134 files changed, 2014 insertions, 1482 deletions
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java
index 2a4934c3f6..16c6ff5bcf 100644
--- a/src/com/android/settings/DateTimeSettings.java
+++ b/src/com/android/settings/DateTimeSettings.java
@@ -38,11 +38,13 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.datetime.ZoneGetter;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
+@SearchIndexable
public class DateTimeSettings extends DashboardFragment implements
TimePreferenceController.TimePreferenceHost, DatePreferenceController.DatePreferenceHost {
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index fef56ad582..4c8b311a18 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -40,10 +40,12 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class DisplaySettings extends DashboardFragment {
private static final String TAG = "DisplaySettings";
diff --git a/src/com/android/settings/LegalSettings.java b/src/com/android/settings/LegalSettings.java
index e9b2694b82..3538cc9ef8 100644
--- a/src/com/android/settings/LegalSettings.java
+++ b/src/com/android/settings/LegalSettings.java
@@ -16,113 +16,47 @@
package com.android.settings;
-import android.app.Activity;
import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.os.Bundle;
import android.provider.SearchIndexableResource;
-import android.support.annotation.VisibleForTesting;
-import android.support.v7.preference.PreferenceGroup;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
+import com.android.settingslib.search.SearchIndexable;
import java.util.Arrays;
import java.util.List;
-public class LegalSettings extends SettingsPreferenceFragment implements Indexable {
+@SearchIndexable
+public class LegalSettings extends DashboardFragment {
- private static final String KEY_TERMS = "terms";
- private static final String KEY_LICENSE = "license";
- private static final String KEY_COPYRIGHT = "copyright";
- private static final String KEY_WEBVIEW_LICENSE = "webview_license";
- @VisibleForTesting static final String KEY_WALLPAPER_ATTRIBUTIONS = "wallpaper_attributions";
-
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- addPreferencesFromResource(R.xml.about_legal);
-
- final Activity act = getActivity();
- // These are contained in the "container" preference group
- PreferenceGroup parentPreference = getPreferenceScreen();
- Utils.updatePreferenceToSpecificActivityOrRemove(act, parentPreference, KEY_TERMS,
- Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
- Utils.updatePreferenceToSpecificActivityOrRemove(act, parentPreference, KEY_LICENSE,
- Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
- Utils.updatePreferenceToSpecificActivityOrRemove(act, parentPreference, KEY_COPYRIGHT,
- Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
- Utils.updatePreferenceToSpecificActivityOrRemove(act, parentPreference, KEY_WEBVIEW_LICENSE,
- Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY);
-
- checkWallpaperAttributionAvailability(act);
- }
+ private static final String TAG = "LegalSettings";
@Override
public int getMetricsCategory() {
return MetricsEvent.ABOUT_LEGAL_SETTINGS;
}
- @VisibleForTesting
- void checkWallpaperAttributionAvailability(Context context) {
- if (!context.getResources().getBoolean(
- R.bool.config_show_wallpaper_attribution)) {
- removePreference(KEY_WALLPAPER_ATTRIBUTIONS);
- }
+ @Override
+ protected String getLogTag() {
+ return TAG;
}
- public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider() {
-
- @Override
- public List<SearchIndexableResource> getXmlResourcesToIndex(
- Context context, boolean enabled) {
- final SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.about_legal;
- return Arrays.asList(sir);
- }
-
- @Override
- public List<String> getNonIndexableKeys(Context context) {
- final List<String> keys = super.getNonIndexableKeys(context);
- if (!checkIntentAction(context, "android.settings.TERMS")) {
- keys.add(KEY_TERMS);
- }
- if (!checkIntentAction(context, "android.settings.LICENSE")) {
- keys.add(KEY_LICENSE);
- }
- if (!checkIntentAction(context, "android.settings.COPYRIGHT")) {
- keys.add(KEY_COPYRIGHT);
- }
- if (!checkIntentAction(context, "android.settings.WEBVIEW_LICENSE")) {
- keys.add(KEY_WEBVIEW_LICENSE);
- }
- keys.add(KEY_WALLPAPER_ATTRIBUTIONS);
- return keys;
- }
-
- private boolean checkIntentAction(Context context, String action) {
- final Intent intent = new Intent(action);
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.about_legal;
+ }
- // Find the activity that is in the system image
- final PackageManager pm = context.getPackageManager();
- final List<ResolveInfo> list = pm.queryIntentActivities(intent, 0);
- final int listSize = list.size();
+ public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider() {
- for (int i = 0; i < listSize; i++) {
- ResolveInfo resolveInfo = list.get(i);
- if ((resolveInfo.activityInfo.applicationInfo.flags &
- ApplicationInfo.FLAG_SYSTEM) != 0) {
- return true;
- }
+ @Override
+ public List<SearchIndexableResource> getXmlResourcesToIndex(
+ Context context, boolean enabled) {
+ final SearchIndexableResource sir = new SearchIndexableResource(context);
+ sir.xmlResId = R.xml.about_legal;
+ return Arrays.asList(sir);
}
-
- return false;
- }
- };
-
+ };
}
diff --git a/src/com/android/settings/PrivacySettings.java b/src/com/android/settings/PrivacySettings.java
deleted file mode 100644
index 24774e0657..0000000000
--- a/src/com/android/settings/PrivacySettings.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright (C) 2009 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;
-
-import android.app.backup.IBackupManager;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.provider.SearchIndexableResource;
-import android.provider.Settings;
-import android.support.annotation.VisibleForTesting;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.Preference.OnPreferenceChangeListener;
-import android.support.v7.preference.PreferenceScreen;
-import android.util.Log;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
-import com.android.settingslib.RestrictedLockUtils;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Gesture lock pattern settings.
- */
-public class PrivacySettings extends SettingsPreferenceFragment {
-
- // Vendor specific
- private static final String GSETTINGS_PROVIDER = "com.google.settings";
- @VisibleForTesting
- static final String BACKUP_DATA = "backup_data";
- @VisibleForTesting
- static final String AUTO_RESTORE = "auto_restore";
- @VisibleForTesting
- static final String CONFIGURE_ACCOUNT = "configure_account";
- @VisibleForTesting
- static final String DATA_MANAGEMENT = "data_management";
- private static final String BACKUP_INACTIVE = "backup_inactive";
- private static final String TAG = "PrivacySettings";
- private IBackupManager mBackupManager;
- private Preference mBackup;
- private SwitchPreference mAutoRestore;
- private Preference mConfigure;
- private Preference mManageData;
- private boolean mEnabled;
-
- @Override
- public int getMetricsCategory() {
- return MetricsEvent.PRIVACY;
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // Don't allow any access if this is not an admin user.
- // TODO: backup/restore currently only works with owner user b/22760572
- mEnabled = UserManager.get(getActivity()).isAdminUser();
- if (!mEnabled) {
- return;
- }
-
- addPreferencesFromResource(R.xml.privacy_settings);
- final PreferenceScreen screen = getPreferenceScreen();
- mBackupManager = IBackupManager.Stub.asInterface(
- ServiceManager.getService(Context.BACKUP_SERVICE));
-
- setPreferenceReferences(screen);
-
- Set<String> keysToRemove = new HashSet<>();
- getNonVisibleKeys(getActivity(), keysToRemove);
- final int screenPreferenceCount = screen.getPreferenceCount();
- for (int i = screenPreferenceCount - 1; i >= 0; --i) {
- Preference preference = screen.getPreference(i);
- if (keysToRemove.contains(preference.getKey())) {
- screen.removePreference(preference);
- }
- }
-
- updateToggles();
- }
-
- @Override
- public void onResume() {
- super.onResume();
-
- // Refresh UI
- if (mEnabled) {
- updateToggles();
- }
- }
-
- @VisibleForTesting
- void setPreferenceReferences(PreferenceScreen screen) {
- mBackup = screen.findPreference(BACKUP_DATA);
-
- mAutoRestore = (SwitchPreference) screen.findPreference(AUTO_RESTORE);
- mAutoRestore.setOnPreferenceChangeListener(preferenceChangeListener);
-
- mConfigure = screen.findPreference(CONFIGURE_ACCOUNT);
- mManageData = screen.findPreference(DATA_MANAGEMENT);
- }
-
- private OnPreferenceChangeListener preferenceChangeListener = new OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- if (!(preference instanceof SwitchPreference)) {
- return true;
- }
- boolean nextValue = (Boolean) newValue;
- boolean result = false;
- if (preference == mAutoRestore) {
- try {
- mBackupManager.setAutoRestore(nextValue);
- result = true;
- } catch (RemoteException e) {
- mAutoRestore.setChecked(!nextValue);
- }
- }
- return result;
- }
- };
-
-
- /*
- * Creates toggles for each backup/reset preference.
- */
- private void updateToggles() {
- ContentResolver res = getContentResolver();
-
- boolean backupEnabled = false;
- Intent configIntent = null;
- String configSummary = null;
- Intent manageIntent = null;
- String manageLabel = null;
- try {
- backupEnabled = mBackupManager.isBackupEnabled();
- String transport = mBackupManager.getCurrentTransport();
- configIntent = validatedActivityIntent(
- mBackupManager.getConfigurationIntent(transport), "config");
- configSummary = mBackupManager.getDestinationString(transport);
- manageIntent = validatedActivityIntent(
- mBackupManager.getDataManagementIntent(transport), "management");
- manageLabel = mBackupManager.getDataManagementLabel(transport);
-
- mBackup.setSummary(backupEnabled
- ? R.string.accessibility_feature_state_on
- : R.string.accessibility_feature_state_off);
- } catch (RemoteException e) {
- // leave it 'false' and disable the UI; there's no backup manager
- mBackup.setEnabled(false);
- }
-
- mAutoRestore.setChecked(Settings.Secure.getInt(res,
- Settings.Secure.BACKUP_AUTO_RESTORE, 1) == 1);
- mAutoRestore.setEnabled(backupEnabled);
-
- final boolean configureEnabled = (configIntent != null) && backupEnabled;
- mConfigure.setEnabled(configureEnabled);
- mConfigure.setIntent(configIntent);
- setConfigureSummary(configSummary);
-
- final boolean manageEnabled = (manageIntent != null) && backupEnabled;
- if (manageEnabled) {
- mManageData.setIntent(manageIntent);
- if (manageLabel != null) {
- mManageData.setTitle(manageLabel);
- }
- } else {
- // Hide the item if data management intent is not supported by transport.
- getPreferenceScreen().removePreference(mManageData);
- }
- }
-
- private Intent validatedActivityIntent(Intent intent, String logLabel) {
- if (intent != null) {
- PackageManager pm = getPackageManager();
- List<ResolveInfo> resolved = pm.queryIntentActivities(intent, 0);
- if (resolved == null || resolved.isEmpty()) {
- intent = null;
- Log.e(TAG, "Backup " + logLabel + " intent " + intent
- + " fails to resolve; ignoring");
- }
- }
- return intent;
- }
-
- private void setConfigureSummary(String summary) {
- if (summary != null) {
- mConfigure.setSummary(summary);
- } else {
- mConfigure.setSummary(R.string.backup_configure_account_default_summary);
- }
- }
-
- @Override
- public int getHelpResource() {
- return R.string.help_url_backup_reset;
- }
-
- private static void getNonVisibleKeys(Context context, Collection<String> nonVisibleKeys) {
- final IBackupManager backupManager = IBackupManager.Stub.asInterface(
- ServiceManager.getService(Context.BACKUP_SERVICE));
- boolean isServiceActive = false;
- try {
- isServiceActive = backupManager.isBackupServiceActive(UserHandle.myUserId());
- } catch (RemoteException e) {
- Log.w(TAG, "Failed querying backup manager service activity status. " +
- "Assuming it is inactive.");
- }
- boolean vendorSpecific = context.getPackageManager().
- resolveContentProvider(GSETTINGS_PROVIDER, 0) == null;
- if (vendorSpecific || isServiceActive) {
- nonVisibleKeys.add(BACKUP_INACTIVE);
- }
- if (vendorSpecific || !isServiceActive) {
- nonVisibleKeys.add(BACKUP_DATA);
- nonVisibleKeys.add(AUTO_RESTORE);
- nonVisibleKeys.add(CONFIGURE_ACCOUNT);
- }
- }
-}
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index 3f7bd2582c..0268ca4881 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -59,6 +59,7 @@ import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.accessibility.AccessibilityUtils;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Collection;
@@ -70,6 +71,7 @@ import java.util.Set;
/**
* Activity with the accessibility settings.
*/
+@SearchIndexable
public class AccessibilitySettings extends SettingsPreferenceFragment implements
Preference.OnPreferenceChangeListener, Indexable {
diff --git a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
index bc164ab515..1510ae46cf 100644
--- a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
@@ -36,10 +36,12 @@ import com.android.settings.R;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.accessibility.AccessibilityUtils;
+import com.android.settingslib.search.SearchIndexable;
/**
* Settings page for accessibility shortcut
*/
+@SearchIndexable
public class AccessibilityShortcutPreferenceFragment extends ToggleFeaturePreferenceFragment
implements Indexable {
diff --git a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java
index 44d5b7942c..e79dd54098 100644
--- a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java
@@ -32,10 +32,12 @@ import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
+import com.android.settingslib.search.SearchIndexable;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public final class MagnificationPreferenceFragment extends DashboardFragment {
private static final String TAG = "MagnificationPreferenceFragment";
diff --git a/src/com/android/settings/accessibility/VibrationSettings.java b/src/com/android/settings/accessibility/VibrationSettings.java
index 83a5af6ac8..37207e743e 100644
--- a/src/com/android/settings/accessibility/VibrationSettings.java
+++ b/src/com/android/settings/accessibility/VibrationSettings.java
@@ -23,6 +23,7 @@ import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
@@ -30,6 +31,7 @@ import java.util.List;
/**
* Accessibility settings for the vibration.
*/
+@SearchIndexable
public class VibrationSettings extends DashboardFragment {
private static final String TAG = "VibrationSettings";
diff --git a/src/com/android/settings/accounts/AccountDashboardFragment.java b/src/com/android/settings/accounts/AccountDashboardFragment.java
index b97694031e..094390c2e0 100644
--- a/src/com/android/settings/accounts/AccountDashboardFragment.java
+++ b/src/com/android/settings/accounts/AccountDashboardFragment.java
@@ -34,11 +34,13 @@ import com.android.settings.users.AutoSyncPersonalDataPreferenceController;
import com.android.settings.users.AutoSyncWorkDataPreferenceController;
import com.android.settingslib.accounts.AuthenticatorHelper;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class AccountDashboardFragment extends DashboardFragment {
private static final String TAG = "AccountDashboardFrag";
diff --git a/src/com/android/settings/accounts/AccountPreferenceBase.java b/src/com/android/settings/accounts/AccountPreferenceBase.java
index 54ddf64eaa..bdf9c98a05 100644
--- a/src/com/android/settings/accounts/AccountPreferenceBase.java
+++ b/src/com/android/settings/accounts/AccountPreferenceBase.java
@@ -33,8 +33,6 @@ import com.android.settings.Utils;
import com.android.settingslib.accounts.AuthenticatorHelper;
import com.android.settingslib.utils.ThreadUtils;
-import java.util.Date;
-
abstract class AccountPreferenceBase extends SettingsPreferenceFragment
implements AuthenticatorHelper.OnAccountsUpdateListener {
@@ -129,9 +127,4 @@ abstract class AccountPreferenceBase extends SettingsPreferenceFragment
protected CharSequence getLabelForType(final String accountType) {
return mAuthenticatorHelper.getLabelForType(getActivity(), accountType);
}
-
- protected String formatSyncDate(Date date) {
- // TODO: Switch to using DateUtils.formatDateTime
- return mDateFormat.format(date) + " " + mTimeFormat.format(date);
- }
}
diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java
index 6b60e87f85..fd2e2c557b 100644
--- a/src/com/android/settings/accounts/AccountSyncSettings.java
+++ b/src/com/android/settings/accounts/AccountSyncSettings.java
@@ -37,6 +37,7 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.support.v7.preference.Preference;
import android.text.TextUtils;
+import android.text.format.DateUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -462,7 +463,7 @@ public class AccountSyncSettings extends AccountPreferenceBase {
syncPref.setSummary(R.string.sync_in_progress);
} else if (successEndTime != 0) {
date.setTime(successEndTime);
- final String timeString = formatSyncDate(date);
+ final String timeString = formatSyncDate(getContext(), date);
syncPref.setSummary(getResources().getString(R.string.last_synced, timeString));
} else {
syncPref.setSummary("");
@@ -575,4 +576,11 @@ public class AccountSyncSettings extends AccountPreferenceBase {
public int getHelpResource() {
return R.string.help_url_accounts;
}
+
+ private static String formatSyncDate(Context context, Date date) {
+ return DateUtils.formatDateTime(context, date.getTime(),
+ DateUtils.FORMAT_SHOW_DATE
+ | DateUtils.FORMAT_SHOW_YEAR
+ | DateUtils.FORMAT_SHOW_TIME);
+ }
}
diff --git a/src/com/android/settings/accounts/ContactSearchPreferenceController.java b/src/com/android/settings/accounts/ContactSearchPreferenceController.java
new file mode 100644
index 0000000000..578a5cb3a7
--- /dev/null
+++ b/src/com/android/settings/accounts/ContactSearchPreferenceController.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2018 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.accounts;
+
+import static android.provider.Settings.Secure.MANAGED_PROFILE_CONTACT_REMOTE_SEARCH;
+
+import android.content.Context;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.slices.SliceData;
+import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.RestrictedSwitchPreference;
+
+public class ContactSearchPreferenceController extends BasePreferenceController implements
+ Preference.OnPreferenceChangeListener {
+
+ private UserHandle mManagedUser;
+
+ public ContactSearchPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ public void setManagedUser(UserHandle managedUser) {
+ mManagedUser = managedUser;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return (mManagedUser != null) ? AVAILABLE : DISABLED_FOR_USER;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ if (preference instanceof RestrictedSwitchPreference) {
+ final RestrictedSwitchPreference pref = (RestrictedSwitchPreference) preference;
+ pref.setChecked(isChecked());
+ if (mManagedUser != null) {
+ final RestrictedLockUtils.EnforcedAdmin enforcedAdmin =
+ RestrictedLockUtils.checkIfRemoteContactSearchDisallowed(
+ mContext, mManagedUser.getIdentifier());
+ pref.setDisabledByAdmin(enforcedAdmin);
+ }
+ }
+ }
+
+ private boolean isChecked() {
+ if (mManagedUser == null) {
+ return false;
+ }
+ return 0 != Settings.Secure.getIntForUser(mContext.getContentResolver(),
+ MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, 0, mManagedUser.getIdentifier());
+ }
+
+ private boolean setChecked(boolean isChecked) {
+ if (mManagedUser != null) {
+ final int value = isChecked ? 1 : 0;
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, value, mManagedUser.getIdentifier());
+ }
+ return true;
+ }
+
+ @Override
+ public final boolean onPreferenceChange(Preference preference, Object newValue) {
+ return setChecked((boolean) newValue);
+ }
+
+ @Override
+ @SliceData.SliceType
+ public int getSliceType() {
+ return SliceData.SliceType.SWITCH;
+ }
+} \ No newline at end of file
diff --git a/src/com/android/settings/accounts/ManagedProfileSettings.java b/src/com/android/settings/accounts/ManagedProfileSettings.java
index 09330428d3..07e5845898 100644
--- a/src/com/android/settings/accounts/ManagedProfileSettings.java
+++ b/src/com/android/settings/accounts/ManagedProfileSettings.java
@@ -23,69 +23,61 @@ import android.content.IntentFilter;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
-import android.provider.Settings;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.Preference;
import android.util.Log;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
-import com.android.settingslib.RestrictedLockUtils;
-import com.android.settingslib.RestrictedSwitchPreference;
-
-import static android.provider.Settings.Secure.MANAGED_PROFILE_CONTACT_REMOTE_SEARCH;
+import com.android.settings.dashboard.DashboardFragment;
/**
* Setting page for managed profile.
* FIXME: It currently assumes there is only one managed profile.
*/
-public class ManagedProfileSettings extends SettingsPreferenceFragment
- implements Preference.OnPreferenceChangeListener {
-
- private SwitchPreference mWorkModePreference;
- private RestrictedSwitchPreference mContactPrefrence;
+public class ManagedProfileSettings extends DashboardFragment {
private UserManager mUserManager;
private UserHandle mManagedUser;
- private Context mContext;
private ManagedProfileBroadcastReceiver mManagedProfileBroadcastReceiver;
- private static final String KEY_WORK_MODE = "work_mode";
- private static final String KEY_CONTACT = "contacts_search";
-
private static final String TAG = "ManagedProfileSettings";
@Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- addPreferencesFromResource(R.xml.managed_profile_settings);
- mWorkModePreference = (SwitchPreference) findPreference(KEY_WORK_MODE);
- mWorkModePreference.setOnPreferenceChangeListener(this);
- mContactPrefrence = (RestrictedSwitchPreference) findPreference(KEY_CONTACT);
- mContactPrefrence.setOnPreferenceChangeListener(this);
- mContext = getActivity().getApplicationContext();
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.managed_profile_settings;
+ }
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
mUserManager = (UserManager) getSystemService(Context.USER_SERVICE);
mManagedUser = getManagedUserFromArgument();
if (mManagedUser == null) {
getActivity().finish();
}
- mManagedProfileBroadcastReceiver = new ManagedProfileBroadcastReceiver();
- mManagedProfileBroadcastReceiver.register(getActivity());
+ use(WorkModePreferenceController.class).setManagedUser(mManagedUser);
+ use(ContactSearchPreferenceController.class).setManagedUser(mManagedUser);
}
@Override
- public void onResume() {
- super.onResume();
- loadDataAndPopulateUi();
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ mManagedProfileBroadcastReceiver = new ManagedProfileBroadcastReceiver();
+ mManagedProfileBroadcastReceiver.register(getActivity());
}
@Override
public void onDestroy() {
super.onDestroy();
- mManagedProfileBroadcastReceiver.unregister(getActivity());
+ if (mManagedProfileBroadcastReceiver != null) {
+ mManagedProfileBroadcastReceiver.unregister(getActivity());
+ }
}
private UserHandle getManagedUserFromArgument() {
@@ -102,59 +94,21 @@ public class ManagedProfileSettings extends SettingsPreferenceFragment
return Utils.getManagedProfile(mUserManager);
}
- private void loadDataAndPopulateUi() {
- if (mWorkModePreference != null) {
- updateWorkModePreference();
- }
-
- if (mContactPrefrence != null) {
- int value = Settings.Secure.getIntForUser(getContentResolver(),
- MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, 0, mManagedUser.getIdentifier());
- mContactPrefrence.setChecked(value != 0);
- RestrictedLockUtils.EnforcedAdmin enforcedAdmin =
- RestrictedLockUtils.checkIfRemoteContactSearchDisallowed(
- mContext, mManagedUser.getIdentifier());
- mContactPrefrence.setDisabledByAdmin(enforcedAdmin);
- }
- }
-
@Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.ACCOUNTS_WORK_PROFILE_SETTINGS;
}
- private void updateWorkModePreference() {
- boolean isWorkModeOn = !mUserManager.isQuietModeEnabled(mManagedUser);
- mWorkModePreference.setChecked(isWorkModeOn);
- mWorkModePreference.setSummary(isWorkModeOn
- ? R.string.work_mode_on_summary
- : R.string.work_mode_off_summary);
- }
-
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- if (preference == mWorkModePreference) {
- boolean quietModeEnabled = !(boolean) newValue;
- mUserManager.requestQuietModeEnabled(quietModeEnabled, mManagedUser);
- return true;
- }
- if (preference == mContactPrefrence) {
- int value = ((boolean) newValue == true) ? 1 : 0;
- Settings.Secure.putIntForUser(getContentResolver(),
- MANAGED_PROFILE_CONTACT_REMOTE_SEARCH, value, mManagedUser.getIdentifier());
- return true;
- }
- return false;
- }
-
private class ManagedProfileBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
+ if (intent == null) {
+ return;
+ }
final String action = intent.getAction();
Log.v(TAG, "Received broadcast: " + action);
- if (action.equals(Intent.ACTION_MANAGED_PROFILE_REMOVED)) {
+ if (Intent.ACTION_MANAGED_PROFILE_REMOVED.equals(action)) {
if (intent.getIntExtra(Intent.EXTRA_USER_HANDLE,
UserHandle.USER_NULL) == mManagedUser.getIdentifier()) {
getActivity().finish();
@@ -162,23 +116,12 @@ public class ManagedProfileSettings extends SettingsPreferenceFragment
return;
}
- if (action.equals(Intent.ACTION_MANAGED_PROFILE_AVAILABLE)
- || action.equals(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE)) {
- if (intent.getIntExtra(Intent.EXTRA_USER_HANDLE,
- UserHandle.USER_NULL) == mManagedUser.getIdentifier()) {
- updateWorkModePreference();
- }
- return;
- }
Log.w(TAG, "Cannot handle received broadcast: " + intent.getAction());
}
-
public void register(Context context) {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED);
- intentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
- intentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
context.registerReceiver(this, intentFilter);
}
@@ -186,5 +129,4 @@ public class ManagedProfileSettings extends SettingsPreferenceFragment
context.unregisterReceiver(this);
}
}
-
}
diff --git a/src/com/android/settings/accounts/WorkModePreferenceController.java b/src/com/android/settings/accounts/WorkModePreferenceController.java
new file mode 100644
index 0000000000..e3fb15d5e8
--- /dev/null
+++ b/src/com/android/settings/accounts/WorkModePreferenceController.java
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2018 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.accounts;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.support.v7.preference.TwoStatePreference;
+import android.util.Log;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.slices.SliceData;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
+
+public class WorkModePreferenceController extends BasePreferenceController implements
+ Preference.OnPreferenceChangeListener, LifecycleObserver, OnStart, OnStop {
+
+ private static final String TAG = "WorkModeController";
+
+ private UserManager mUserManager;
+ private UserHandle mManagedUser;
+
+ private Preference mPreference;
+ private IntentFilter mIntentFilter;
+
+ public WorkModePreferenceController(Context context, String key) {
+ super(context, key);
+ mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+ mIntentFilter = new IntentFilter();
+ mIntentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_AVAILABLE);
+ mIntentFilter.addAction(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE);
+ }
+
+ public void setManagedUser(UserHandle managedUser) {
+ mManagedUser = managedUser;
+ }
+
+ @Override
+ public void onStart() {
+ mContext.registerReceiver(mReceiver, mIntentFilter);
+ }
+
+ @Override
+ public void onStop() {
+ mContext.unregisterReceiver(mReceiver);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return (mManagedUser != null) ? AVAILABLE : DISABLED_FOR_USER;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ return mContext.getText(isChecked()
+ ? R.string.work_mode_on_summary
+ : R.string.work_mode_off_summary);
+ }
+
+ private boolean isChecked() {
+ boolean isWorkModeOn = false;
+ if (mUserManager != null && mManagedUser != null) {
+ isWorkModeOn = !mUserManager.isQuietModeEnabled(mManagedUser);
+ }
+ return isWorkModeOn;
+ }
+
+ private boolean setChecked(boolean isChecked) {
+ if (mUserManager != null && mManagedUser != null) {
+ final boolean quietModeEnabled = !isChecked;
+ mUserManager.requestQuietModeEnabled(quietModeEnabled, mManagedUser);
+ }
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ if (preference instanceof TwoStatePreference) {
+ ((TwoStatePreference) preference).setChecked(isChecked());
+ }
+ }
+
+ @Override
+ public final boolean onPreferenceChange(Preference preference, Object newValue) {
+ return setChecked((boolean) newValue);
+ }
+
+ /**
+ * Receiver that listens to {@link Intent#ACTION_MANAGED_PROFILE_AVAILABLE} and
+ * {@link Intent#ACTION_MANAGED_PROFILE_UNAVAILABLE}, and updates the work mode
+ */
+ @VisibleForTesting
+ final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (intent == null) {
+ return;
+ }
+ final String action = intent.getAction();
+ Log.v(TAG, "Received broadcast: " + action);
+
+ if (Intent.ACTION_MANAGED_PROFILE_AVAILABLE.equals(action)
+ || Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE.equals(action)) {
+ if (intent.getIntExtra(Intent.EXTRA_USER_HANDLE,
+ UserHandle.USER_NULL) == mManagedUser.getIdentifier()) {
+ updateState(mPreference);
+ }
+ return;
+ }
+ Log.w(TAG, "Cannot handle received broadcast: " + intent.getAction());
+ }
+ };
+
+ @Override
+ @SliceData.SliceType
+ public int getSliceType() {
+ return SliceData.SliceType.SWITCH;
+ }
+} \ No newline at end of file
diff --git a/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java b/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java
index eb74fb1386..aaf1d5825e 100644
--- a/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java
+++ b/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java
@@ -28,11 +28,13 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.notification.EmergencyBroadcastPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class AppAndNotificationDashboardFragment extends DashboardFragment {
private static final String TAG = "AppAndNotifDashboard";
diff --git a/src/com/android/settings/applications/DefaultAppSettings.java b/src/com/android/settings/applications/DefaultAppSettings.java
index 7fc405f3d3..8def015738 100644
--- a/src/com/android/settings/applications/DefaultAppSettings.java
+++ b/src/com/android/settings/applications/DefaultAppSettings.java
@@ -37,11 +37,13 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.widget.PreferenceCategoryController;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class DefaultAppSettings extends DashboardFragment {
static final String TAG = "DefaultAppSettings";
diff --git a/src/com/android/settings/applications/SpecialAccessSettings.java b/src/com/android/settings/applications/SpecialAccessSettings.java
index 6387ec7053..da41a18a97 100644
--- a/src/com/android/settings/applications/SpecialAccessSettings.java
+++ b/src/com/android/settings/applications/SpecialAccessSettings.java
@@ -26,9 +26,12 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
+
import java.util.ArrayList;
import java.util.List;
+@SearchIndexable
public class SpecialAccessSettings extends DashboardFragment {
private static final String TAG = "SpecialAccessSettings";
diff --git a/src/com/android/settings/applications/assist/ManageAssist.java b/src/com/android/settings/applications/assist/ManageAssist.java
index 82db01ff3d..cd85aca897 100644
--- a/src/com/android/settings/applications/assist/ManageAssist.java
+++ b/src/com/android/settings/applications/assist/ManageAssist.java
@@ -27,6 +27,7 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
@@ -35,6 +36,7 @@ import java.util.List;
/**
* Settings screen to manage everything about assist.
*/
+@SearchIndexable
public class ManageAssist extends DashboardFragment {
private static final String TAG = "ManageAssist";
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index 301e71bfe4..f720432ef5 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -155,6 +155,7 @@ public class ManageApplications extends InstrumentedFragment
private static final String EXTRA_SHOW_SYSTEM = "showSystem";
private static final String EXTRA_HAS_ENTRIES = "hasEntries";
private static final String EXTRA_HAS_BRIDGE = "hasBridge";
+ private static final String EXTRA_FILTER_TYPE = "filterType";
// attributes used as keys when passing values to AppInfoDashboardFragment activity
public static final String APP_CHG = "chg";
@@ -232,6 +233,7 @@ public class ManageApplications extends InstrumentedFragment
private boolean mIsWorkOnly;
private int mWorkUserId;
private View mEmptyView;
+ private int mFilterType;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -312,6 +314,8 @@ public class ManageApplications extends InstrumentedFragment
if (savedInstanceState != null) {
mSortOrder = savedInstanceState.getInt(EXTRA_SORT_ORDER, mSortOrder);
mShowSystem = savedInstanceState.getBoolean(EXTRA_SHOW_SYSTEM, mShowSystem);
+ mFilterType =
+ savedInstanceState.getInt(EXTRA_FILTER_TYPE, AppFilterRegistry.FILTER_APPS_ALL);
}
mInvalidSizeStr = activity.getText(R.string.invalid_size_value);
@@ -494,6 +498,7 @@ public class ManageApplications extends InstrumentedFragment
outState.putBoolean(EXTRA_SHOW_SYSTEM, mShowSystem);
outState.putBoolean(EXTRA_HAS_ENTRIES, mApplications.mHasReceivedLoadEntries);
outState.putBoolean(EXTRA_HAS_BRIDGE, mApplications.mHasReceivedBridgeCallback);
+ outState.putInt(EXTRA_FILTER_TYPE, mFilter.getFilterType());
if (mApplications != null) {
mApplications.onSaveInstanceState(outState);
}
@@ -790,6 +795,16 @@ public class ManageApplications extends InstrumentedFragment
mManageApplications.mFilterSpinner.setSelection(0);
mManageApplications.onItemSelected(null, null, 0, 0);
}
+ if (mFilterOptions.size() > 1) {
+ if (filterType == mManageApplications.mFilterType) {
+ int index = mFilterOptions.indexOf(filter);
+ if (index != -1) {
+ mManageApplications.mFilterSpinner.setSelection(index);
+ mManageApplications.onItemSelected(null, null, index, 0);
+ mManageApplications.mFilterType = AppFilterRegistry.FILTER_APPS_ALL;
+ }
+ }
+ }
}
public void disableFilter(@AppFilterRegistry.FilterType int filterType) {
diff --git a/src/com/android/settings/backup/AutoRestorePreferenceController.java b/src/com/android/settings/backup/AutoRestorePreferenceController.java
new file mode 100644
index 0000000000..7bcf350e3d
--- /dev/null
+++ b/src/com/android/settings/backup/AutoRestorePreferenceController.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2018 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.backup;
+
+import android.app.backup.IBackupManager;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.provider.Settings;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.util.Log;
+
+import com.android.settings.core.TogglePreferenceController;
+
+public class AutoRestorePreferenceController extends TogglePreferenceController {
+ private static final String TAG = "AutoRestorePrefCtrler";
+
+ private PrivacySettingsConfigData mPSCD;
+ private Preference mPreference;
+
+ public AutoRestorePreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ public void setPrivacySettingsConfigData(final PrivacySettingsConfigData pData) {
+ mPSCD = pData;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ if (!PrivacySettingsUtils.isAdminUser(mContext)) {
+ return DISABLED_FOR_USER;
+ }
+ if (PrivacySettingsUtils.isInvisibleKey(mContext, PrivacySettingsUtils.AUTO_RESTORE)) {
+ return DISABLED_UNSUPPORTED;
+ }
+ return AVAILABLE;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ mPreference = preference;
+ preference.setEnabled(mPSCD.isBackupEnabled());
+ }
+
+ @Override
+ public boolean isChecked() {
+ final ContentResolver res = mContext.getContentResolver();
+
+ return Settings.Secure.getInt(res,
+ Settings.Secure.BACKUP_AUTO_RESTORE, 1) == 1;
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ final boolean nextValue = isChecked;
+ boolean result = false;
+
+ final IBackupManager backupManager = IBackupManager.Stub.asInterface(
+ ServiceManager.getService(Context.BACKUP_SERVICE));
+
+ try {
+ backupManager.setAutoRestore(nextValue);
+ result = true;
+ } catch (RemoteException e) {
+ ((SwitchPreference) mPreference).setChecked(!nextValue);
+ Log.e(TAG, "Error can't set setAutoRestore", e);
+ }
+
+ return result;
+ }
+} \ No newline at end of file
diff --git a/src/com/android/settings/backup/BackupDataPreferenceController.java b/src/com/android/settings/backup/BackupDataPreferenceController.java
new file mode 100644
index 0000000000..0a0f581c1f
--- /dev/null
+++ b/src/com/android/settings/backup/BackupDataPreferenceController.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2018 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.backup;
+
+import android.content.Context;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.R;
+
+public class BackupDataPreferenceController extends BasePreferenceController {
+ private PrivacySettingsConfigData mPSCD;
+
+ public BackupDataPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ public void setPrivacySettingsConfigData(final PrivacySettingsConfigData pData) {
+ mPSCD = pData;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ if (!PrivacySettingsUtils.isAdminUser(mContext)) {
+ return DISABLED_FOR_USER;
+ }
+ if (PrivacySettingsUtils.isInvisibleKey(mContext, PrivacySettingsUtils.BACKUP_DATA)) {
+ return DISABLED_UNSUPPORTED;
+ }
+ return AVAILABLE;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ if (mPSCD.isBackupGray()) {
+ preference.setEnabled(false);
+ }
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ if (!mPSCD.isBackupGray()) {
+ return mPSCD.isBackupEnabled()
+ ? mContext.getText(R.string.accessibility_feature_state_on)
+ : mContext.getText(R.string.accessibility_feature_state_off);
+ }
+ return null;
+ }
+} \ No newline at end of file
diff --git a/src/com/android/settings/backup/BackupInactivePreferenceController.java b/src/com/android/settings/backup/BackupInactivePreferenceController.java
new file mode 100644
index 0000000000..d44801e97e
--- /dev/null
+++ b/src/com/android/settings/backup/BackupInactivePreferenceController.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2018 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.backup;
+
+import android.content.Context;
+
+import com.android.settings.core.BasePreferenceController;
+
+public class BackupInactivePreferenceController extends BasePreferenceController {
+
+ public BackupInactivePreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ if (!PrivacySettingsUtils.isAdminUser(mContext)) {
+ return DISABLED_FOR_USER;
+ }
+ if (PrivacySettingsUtils.isInvisibleKey(mContext, PrivacySettingsUtils.BACKUP_INACTIVE)) {
+ return DISABLED_UNSUPPORTED;
+ }
+ return AVAILABLE;
+ }
+} \ No newline at end of file
diff --git a/src/com/android/settings/backup/BackupSettingsActivity.java b/src/com/android/settings/backup/BackupSettingsActivity.java
index d78af32d36..c69414eac0 100644
--- a/src/com/android/settings/backup/BackupSettingsActivity.java
+++ b/src/com/android/settings/backup/BackupSettingsActivity.java
@@ -31,6 +31,7 @@ import com.android.settings.R;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
@@ -40,6 +41,7 @@ import java.util.List;
* The activity used to launch the configured Backup activity or the preference screen
* if the manufacturer provided their backup settings.
*/
+@SearchIndexable
public class BackupSettingsActivity extends Activity implements Indexable {
private static final String TAG = "BackupSettingsActivity";
private FragmentManager mFragmentManager;
diff --git a/src/com/android/settings/backup/BackupSettingsFragment.java b/src/com/android/settings/backup/BackupSettingsFragment.java
index e9bcc6fe9e..d21e2e4636 100644
--- a/src/com/android/settings/backup/BackupSettingsFragment.java
+++ b/src/com/android/settings/backup/BackupSettingsFragment.java
@@ -26,6 +26,7 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
@@ -33,6 +34,7 @@ import java.util.List;
/**
* Fragment showing the items to launch different backup settings screens.
*/
+@SearchIndexable
public class BackupSettingsFragment extends DashboardFragment {
private static final String TAG = "BackupSettings";
diff --git a/src/com/android/settings/backup/ConfigureAccountPreferenceController.java b/src/com/android/settings/backup/ConfigureAccountPreferenceController.java
new file mode 100644
index 0000000000..f1bcee9150
--- /dev/null
+++ b/src/com/android/settings/backup/ConfigureAccountPreferenceController.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2018 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.backup;
+
+import android.content.Context;
+import android.content.Intent;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.R;
+
+public class ConfigureAccountPreferenceController extends BasePreferenceController {
+ private PrivacySettingsConfigData mPSCD;
+
+ public ConfigureAccountPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ public void setPrivacySettingsConfigData(final PrivacySettingsConfigData pData) {
+ mPSCD = pData;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ if (!PrivacySettingsUtils.isAdminUser(mContext)) {
+ return DISABLED_FOR_USER;
+ }
+ if (PrivacySettingsUtils.isInvisibleKey(mContext, PrivacySettingsUtils.CONFIGURE_ACCOUNT)) {
+ return DISABLED_UNSUPPORTED;
+ }
+ return AVAILABLE;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ final Intent configIntent = mPSCD.getConfigIntent();
+ final boolean configureEnabled = (configIntent != null) && mPSCD.isBackupEnabled();
+ preference.setEnabled(configureEnabled);
+ preference.setIntent(configIntent);
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ final String configSummary = mPSCD.getConfigSummary();
+ return configSummary != null
+ ? configSummary
+ : mContext.getText(R.string.backup_configure_account_default_summary);
+ }
+} \ No newline at end of file
diff --git a/src/com/android/settings/backup/DataManagementPreferenceController.java b/src/com/android/settings/backup/DataManagementPreferenceController.java
new file mode 100644
index 0000000000..de987abbde
--- /dev/null
+++ b/src/com/android/settings/backup/DataManagementPreferenceController.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 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.backup;
+
+import android.content.Context;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.core.BasePreferenceController;
+
+public class DataManagementPreferenceController extends BasePreferenceController {
+ private PrivacySettingsConfigData mPSCD;
+ private boolean mManageEnabled;
+
+ public DataManagementPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ public void setPrivacySettingsConfigData(final PrivacySettingsConfigData pData) {
+ mPSCD = pData;
+ mManageEnabled = (mPSCD.getManageIntent() != null) && mPSCD.isBackupEnabled();
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ if (!PrivacySettingsUtils.isAdminUser(mContext)) {
+ return DISABLED_FOR_USER;
+ }
+ if (!mManageEnabled) {
+ return DISABLED_UNSUPPORTED;
+ }
+ return AVAILABLE;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ if (mManageEnabled) {
+ preference.setIntent(mPSCD.getManageIntent());
+ final String manageLabel = mPSCD.getManageLabel();
+ if (manageLabel != null) {
+ preference.setTitle(manageLabel);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/com/android/settings/backup/PrivacySettings.java b/src/com/android/settings/backup/PrivacySettings.java
new file mode 100644
index 0000000000..9b342e7477
--- /dev/null
+++ b/src/com/android/settings/backup/PrivacySettings.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2009 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.backup;
+
+import android.content.Context;
+import android.provider.SearchIndexableResource;
+
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
+
+import java.util.Arrays;
+import java.util.List;
+
+@SearchIndexable
+public class PrivacySettings extends DashboardFragment {
+ private static final String TAG = "PrivacySettings";
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsEvent.PRIVACY;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.privacy_settings;
+ }
+
+ @Override
+ public int getHelpResource() {
+ return R.string.help_url_backup_reset;
+ }
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ updatePrivacySettingsConfigData(context);
+ }
+
+ @Override
+ protected void updatePreferenceStates() {
+ updatePrivacySettingsConfigData(getContext());
+ super.updatePreferenceStates();
+ }
+
+ private void updatePrivacySettingsConfigData(final Context context) {
+ final PrivacySettingsConfigData pData = new PrivacySettingsConfigData();
+ if (PrivacySettingsUtils.isAdminUser(context)) {
+ PrivacySettingsUtils.updatePrivacyBuffer(context, pData);
+ }
+
+ use(BackupDataPreferenceController.class).setPrivacySettingsConfigData(pData);
+ use(ConfigureAccountPreferenceController.class).setPrivacySettingsConfigData(pData);
+ use(DataManagementPreferenceController.class).setPrivacySettingsConfigData(pData);
+ use(AutoRestorePreferenceController.class).setPrivacySettingsConfigData(pData);
+ }
+
+ public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider() {
+ @Override
+ public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+ boolean enabled) {
+ final SearchIndexableResource sir = new SearchIndexableResource(context);
+ sir.xmlResId = R.xml.privacy_settings;
+ return Arrays.asList(sir);
+ }
+
+ @Override
+ protected boolean isPageSearchEnabled(Context context) {
+ final BackupSettingsHelper backupHelper = new BackupSettingsHelper(context);
+ return !backupHelper.isBackupProvidedByManufacturer() &&
+ !backupHelper.isIntentProvidedByTransport();
+ }
+ };
+}
diff --git a/src/com/android/settings/backup/PrivacySettingsConfigData.java b/src/com/android/settings/backup/PrivacySettingsConfigData.java
new file mode 100644
index 0000000000..9b72a829a2
--- /dev/null
+++ b/src/com/android/settings/backup/PrivacySettingsConfigData.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2018 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.backup;
+
+import android.content.Intent;
+
+public class PrivacySettingsConfigData {
+ private boolean mBackupEnabled;
+ private boolean mBackupGray;
+ private Intent mConfigIntent;
+ private String mConfigSummary;
+ private Intent mManageIntent;
+ private String mManageLabel;
+
+ public PrivacySettingsConfigData() {
+ mBackupEnabled = false;
+ mBackupGray = false;
+ mConfigIntent = null;
+ mConfigSummary = null;
+ mManageIntent = null;
+ mManageLabel = null;
+ }
+
+ public boolean isBackupEnabled() {
+ return mBackupEnabled;
+ }
+
+ public void setBackupEnabled(final boolean backupEnabled) {
+ mBackupEnabled = backupEnabled;
+ }
+
+ public boolean isBackupGray() {
+ return mBackupGray;
+ }
+
+ public void setBackupGray(final boolean backupGray) {
+ mBackupGray = backupGray;
+ }
+
+ public Intent getConfigIntent() {
+ return mConfigIntent;
+ }
+
+ public void setConfigIntent(final Intent configIntent) {
+ mConfigIntent = configIntent;
+ }
+
+ public String getConfigSummary() {
+ return mConfigSummary;
+ }
+
+ public void setConfigSummary(final String configSummary) {
+ mConfigSummary = configSummary;
+ }
+
+ public Intent getManageIntent() {
+ return mManageIntent;
+ }
+
+ public void setManageIntent(final Intent manageIntent) {
+ mManageIntent = manageIntent;
+ }
+
+ public String getManageLabel() {
+ return mManageLabel;
+ }
+
+ public void setManageLabel(final String manageLabel) {
+ mManageLabel = manageLabel;
+ }
+}
diff --git a/src/com/android/settings/backup/PrivacySettingsUtils.java b/src/com/android/settings/backup/PrivacySettingsUtils.java
new file mode 100644
index 0000000000..f8f21ddeef
--- /dev/null
+++ b/src/com/android/settings/backup/PrivacySettingsUtils.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2018 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.backup;
+
+import android.app.backup.IBackupManager;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.util.Log;
+
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+public class PrivacySettingsUtils {
+ private static final String TAG = "PrivacySettingsUtils";
+ private static final String GSETTINGS_PROVIDER = "com.google.settings";
+
+ static final String BACKUP_DATA = "backup_data";
+ static final String AUTO_RESTORE = "auto_restore";
+ static final String CONFIGURE_ACCOUNT = "configure_account";
+ static final String BACKUP_INACTIVE = "backup_inactive";
+
+ // Don't allow any access if this is not an admin user.
+ // TODO: backup/restore currently only works with owner user b/22760572
+ static boolean isAdminUser(final Context context) {
+ return UserManager.get(context).isAdminUser();
+ }
+
+ /**
+ * Send a {@param key} to check its preference will display in PrivacySettings or not.
+ */
+ static boolean isInvisibleKey(final Context context, final String key) {
+ final Set<String> keysToRemove = getInvisibleKey(context);
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG,
+ "keysToRemove size=" + keysToRemove.size() + " keysToRemove=" + keysToRemove);
+ }
+ if (keysToRemove.contains(key)) {
+ return true;
+ }
+ return false;
+ }
+
+ private static Set<String> getInvisibleKey(final Context context) {
+ final IBackupManager backupManager = IBackupManager.Stub.asInterface(
+ ServiceManager.getService(Context.BACKUP_SERVICE));
+ boolean isServiceActive = false;
+ try {
+ isServiceActive = backupManager.isBackupServiceActive(UserHandle.myUserId());
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed querying backup manager service activity status. " +
+ "Assuming it is inactive.");
+ }
+ boolean vendorSpecific = context.getPackageManager().
+ resolveContentProvider(GSETTINGS_PROVIDER, 0) == null;
+ final Set<String> inVisibleKeys = new TreeSet<>();
+ if (vendorSpecific || isServiceActive) {
+ inVisibleKeys.add(BACKUP_INACTIVE);
+ }
+ if (vendorSpecific || !isServiceActive) {
+ inVisibleKeys.add(BACKUP_DATA);
+ inVisibleKeys.add(AUTO_RESTORE);
+ inVisibleKeys.add(CONFIGURE_ACCOUNT);
+ }
+ return inVisibleKeys;
+ }
+
+ public static void updatePrivacyBuffer(final Context context, PrivacySettingsConfigData data) {
+ final IBackupManager backupManager = IBackupManager.Stub.asInterface(
+ ServiceManager.getService(Context.BACKUP_SERVICE));
+
+ try {
+ data.setBackupEnabled(backupManager.isBackupEnabled());
+ String transport = backupManager.getCurrentTransport();
+ data.setConfigIntent(validatedActivityIntent(context,
+ backupManager.getConfigurationIntent(transport), "config"));
+ data.setConfigSummary(backupManager.getDestinationString(transport));
+ data.setManageIntent(validatedActivityIntent(context,
+ backupManager.getDataManagementIntent(transport), "management"));
+ data.setManageLabel(backupManager.getDataManagementLabel(transport));
+ data.setBackupGray(false);
+ } catch (RemoteException e) {
+ // leave it 'false' and disable the UI; there's no backup manager
+ // mBackup.setEnabled(false);
+ data.setBackupGray(true);
+ }
+ }
+
+ private static Intent validatedActivityIntent(final Context context, Intent intent,
+ String logLabel) {
+ if (intent != null) {
+ PackageManager pm = context.getPackageManager();
+ List<ResolveInfo> resolved = pm.queryIntentActivities(intent, 0);
+ if (resolved == null || resolved.isEmpty()) {
+ intent = null;
+ Log.e(TAG, "Backup " + logLabel + " intent " + intent
+ + " fails to resolve; ignoring");
+ }
+ }
+ return intent;
+ }
+} \ No newline at end of file
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsHeaderController.java b/src/com/android/settings/bluetooth/BluetoothDetailsHeaderController.java
index 8679b5566c..ba7cf54e94 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsHeaderController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsHeaderController.java
@@ -73,6 +73,16 @@ public class BluetoothDetailsHeaderController extends BluetoothDetailsController
mHeaderController.setIcon(pair.first);
mHeaderController.setIconContentDescription(pair.second);
mHeaderController.setSummary(summaryText);
+ mHeaderController.setEditListener(v -> showEditDeviceNameDialog());
+ mHeaderController.setButtonActions(
+ EntityHeaderController.ActionType.ACTION_EDIT_PREFERENCE,
+ EntityHeaderController.ActionType.ACTION_NONE);
+ }
+
+ @VisibleForTesting
+ void showEditDeviceNameDialog() {
+ RemoteDeviceNameDialogFragment.newInstance(mCachedDevice).show(
+ mFragment.getFragmentManager(), RemoteDeviceNameDialogFragment.TAG);
}
@Override
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
index 1e8288922e..aa3b42948b 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
@@ -22,9 +22,6 @@ import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.VisibleForTesting;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
@@ -41,9 +38,6 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
public static final String KEY_DEVICE_ADDRESS = "device_address";
private static final String TAG = "BTDeviceDetailsFrg";
- @VisibleForTesting
- static int EDIT_DEVICE_NAME_ITEM_ID = Menu.FIRST;
-
/**
* An interface to let tests override the normal mechanism for looking up the
* CachedBluetoothDevice and LocalBluetoothManager, and substitute their own mocks instead.
@@ -60,9 +54,12 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
@VisibleForTesting
static TestDataFactory sTestDataFactory;
- private String mDeviceAddress;
- private LocalBluetoothManager mManager;
- private CachedBluetoothDevice mCachedDevice;
+ @VisibleForTesting
+ String mDeviceAddress;
+ @VisibleForTesting
+ LocalBluetoothManager mManager;
+ @VisibleForTesting
+ CachedBluetoothDevice mCachedDevice;
public BluetoothDeviceDetailsFragment() {
super(DISALLOW_CONFIG_BLUETOOTH);
@@ -118,24 +115,6 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
}
@Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- MenuItem item = menu.add(0, EDIT_DEVICE_NAME_ITEM_ID, 0, R.string.bluetooth_rename_button);
- item.setIcon(R.drawable.ic_mode_edit);
- item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
- super.onCreateOptionsMenu(menu, inflater);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem menuItem) {
- if (menuItem.getItemId() == EDIT_DEVICE_NAME_ITEM_ID) {
- RemoteDeviceNameDialogFragment.newInstance(mCachedDevice).show(
- getFragmentManager(), RemoteDeviceNameDialogFragment.TAG);
- return true;
- }
- return super.onOptionsItemSelected(menuItem);
- }
-
- @Override
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
ArrayList<AbstractPreferenceController> controllers = new ArrayList<>();
diff --git a/src/com/android/settings/bluetooth/Utf8ByteLengthFilter.java b/src/com/android/settings/bluetooth/Utf8ByteLengthFilter.java
index ab498183bc..536f4cc939 100644
--- a/src/com/android/settings/bluetooth/Utf8ByteLengthFilter.java
+++ b/src/com/android/settings/bluetooth/Utf8ByteLengthFilter.java
@@ -16,6 +16,7 @@
package com.android.settings.bluetooth;
+import android.support.annotation.Keep;
import android.text.InputFilter;
import android.text.Spanned;
@@ -40,6 +41,7 @@ import android.text.Spanned;
public class Utf8ByteLengthFilter implements InputFilter {
private final int mMaxBytes;
+ @Keep
Utf8ByteLengthFilter(int maxBytes) {
mMaxBytes = maxBytes;
}
diff --git a/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java
index 45794c5a20..e347c3fc04 100644
--- a/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java
@@ -28,6 +28,7 @@ import com.android.settings.print.PrintSettingPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
@@ -36,6 +37,7 @@ import java.util.List;
/**
* This fragment contains all the advanced connection preferences(i.e, Bluetooth, NFC, USB..)
*/
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class AdvancedConnectedDeviceDashboardFragment extends DashboardFragment {
private static final String TAG = "AdvancedConnectedDeviceFrag";
diff --git a/src/com/android/settings/connecteddevice/BluetoothDashboardFragment.java b/src/com/android/settings/connecteddevice/BluetoothDashboardFragment.java
index ec616c8682..d56f1c22c3 100644
--- a/src/com/android/settings/connecteddevice/BluetoothDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/BluetoothDashboardFragment.java
@@ -34,6 +34,7 @@ import com.android.settings.search.SearchIndexableRaw;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.SwitchBarController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.FooterPreference;
import java.util.ArrayList;
@@ -43,6 +44,7 @@ import java.util.List;
* Dedicated screen for allowing the user to toggle bluetooth which displays relevant information to
* the user based on related settings such as bluetooth scanning.
*/
+@SearchIndexable(forTarget = SearchIndexable.ALL)
public class BluetoothDashboardFragment extends DashboardFragment {
private static final String TAG = "BluetoothDashboardFrag";
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
index 227fd9b8ad..b2ee023c68 100644
--- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
@@ -28,11 +28,13 @@ import com.android.settings.nfc.NfcPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class ConnectedDeviceDashboardFragment extends DashboardFragment {
private static final String TAG = "ConnectedDeviceFrag";
diff --git a/src/com/android/settings/connecteddevice/PreviouslyConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/PreviouslyConnectedDeviceDashboardFragment.java
index 195daf372f..0b74861342 100644
--- a/src/com/android/settings/connecteddevice/PreviouslyConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/PreviouslyConnectedDeviceDashboardFragment.java
@@ -22,6 +22,7 @@ import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.SearchIndexableRaw;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
@@ -29,6 +30,7 @@ import java.util.List;
/**
* This fragment contains previously connected device
*/
+@SearchIndexable(forTarget = SearchIndexable.MOBILE)
public class PreviouslyConnectedDeviceDashboardFragment extends DashboardFragment {
private static final String TAG = "PreConnectedDeviceFrag";
diff --git a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
index 098cdb46ea..451faba03a 100644
--- a/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
+++ b/src/com/android/settings/connecteddevice/usb/ConnectedUsbDeviceUpdater.java
@@ -42,8 +42,8 @@ public class ConnectedUsbDeviceUpdater {
UsbConnectionBroadcastReceiver.UsbConnectionListener mUsbConnectionListener =
(connected, functions, powerRole, dataRole) -> {
if (connected) {
- mUsbPreference.setSummary(getSummary(mUsbBackend.getCurrentFunctions(),
- mUsbBackend.getPowerRole()));
+ mUsbPreference.setSummary(getSummary(dataRole == UsbPort.DATA_ROLE_DEVICE
+ ? functions : UsbManager.FUNCTION_NONE, powerRole));
mDevicePreferenceCallback.onDeviceAdded(mUsbPreference);
} else {
mDevicePreferenceCallback.onDeviceRemoved(mUsbPreference);
diff --git a/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java b/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
index 662abbfcfd..044d4a8d10 100644
--- a/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
+++ b/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java
@@ -27,6 +27,7 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import com.google.android.collect.Lists;
@@ -36,6 +37,7 @@ import java.util.List;
/**
* Controls the USB device details and provides updates to individual controllers.
*/
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class UsbDetailsFragment extends DashboardFragment {
private static final String TAG = UsbDetailsFragment.class.getSimpleName();
diff --git a/src/com/android/settings/core/PreferenceControllerListHelper.java b/src/com/android/settings/core/PreferenceControllerListHelper.java
index 738a6952e8..5879ba443b 100644
--- a/src/com/android/settings/core/PreferenceControllerListHelper.java
+++ b/src/com/android/settings/core/PreferenceControllerListHelper.java
@@ -54,7 +54,8 @@ public class PreferenceControllerListHelper {
List<Bundle> preferenceMetadata;
try {
preferenceMetadata = PreferenceXmlParserUtils.extractMetadata(context, xmlResId,
- MetadataFlag.FLAG_NEED_KEY | MetadataFlag.FLAG_NEED_PREF_CONTROLLER);
+ MetadataFlag.FLAG_NEED_KEY | MetadataFlag.FLAG_NEED_PREF_CONTROLLER
+ | MetadataFlag.FLAG_INCLUDE_PREF_SCREEN);
} catch (IOException | XmlPullParserException e) {
Log.e(TAG, "Failed to parse preference xml for getting controllers", e);
return controllers;
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index aa9d7b5487..be9b722a5a 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -21,7 +21,6 @@ import com.android.settings.DeviceAdminSettings;
import com.android.settings.DisplaySettings;
import com.android.settings.IccLockSettings;
import com.android.settings.MasterClear;
-import com.android.settings.PrivacySettings;
import com.android.settings.Settings;
import com.android.settings.TestingSettings;
import com.android.settings.TetherSettings;
@@ -51,6 +50,7 @@ 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.backup.PrivacySettings;
import com.android.settings.backup.ToggleBackupSettingFragment;
import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment;
diff --git a/src/com/android/settings/datausage/ChartDataUsagePreference.java b/src/com/android/settings/datausage/ChartDataUsagePreference.java
index 3ddfd47828..6773a0fb62 100644
--- a/src/com/android/settings/datausage/ChartDataUsagePreference.java
+++ b/src/com/android/settings/datausage/ChartDataUsagePreference.java
@@ -51,8 +51,8 @@ public class ChartDataUsagePreference extends Preference {
public ChartDataUsagePreference(Context context, AttributeSet attrs) {
super(context, attrs);
setSelectable(false);
- mLimitColor = Utils.getColorAttr(context, android.R.attr.colorError);
- mWarningColor = Utils.getColorAttr(context, android.R.attr.textColorSecondary);
+ mLimitColor = Utils.getColorAttrDefaultColor(context, android.R.attr.colorError);
+ mWarningColor = Utils.getColorAttrDefaultColor(context, android.R.attr.textColorSecondary);
setLayoutResource(R.layout.data_usage_graph);
}
diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index afe148d88c..bfde89e9d0 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -44,6 +44,7 @@ import com.android.settings.search.Indexable;
import com.android.settingslib.NetworkPolicyEditor;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.net.DataUsageController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
@@ -51,6 +52,7 @@ import java.util.List;
/**
* Settings preference fragment that displays data usage summary.
*/
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class DataUsageSummary extends DataUsageBaseFragment implements Indexable,
DataUsageEditController {
diff --git a/src/com/android/settings/datausage/DataUsageSummaryLegacy.java b/src/com/android/settings/datausage/DataUsageSummaryLegacy.java
index 090e8e4537..7e8ee885a0 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryLegacy.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryLegacy.java
@@ -48,6 +48,7 @@ import com.android.settings.search.Indexable;
import com.android.settingslib.NetworkPolicyEditor;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.net.DataUsageController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
@@ -55,6 +56,7 @@ import java.util.List;
/**
* Legacy {@link DataUsageSummary} fragment.
*/
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class DataUsageSummaryLegacy extends DataUsageBaseFragment implements Indexable,
DataUsageEditController {
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreference.java b/src/com/android/settings/datausage/DataUsageSummaryPreference.java
index e5e83eba54..79be5ab8b3 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreference.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreference.java
@@ -72,7 +72,7 @@ public class DataUsageSummaryPreference extends Preference {
private long mSnapshotTimeMs;
/** Name of carrier, or null if not available */
private CharSequence mCarrierName;
- private String mLimitInfoText;
+ private CharSequence mLimitInfoText;
private Intent mLaunchIntent;
/** Progress to display on ProgressBar */
@@ -97,7 +97,7 @@ public class DataUsageSummaryPreference extends Preference {
setLayoutResource(R.layout.data_usage_summary_preference);
}
- public void setLimitInfo(String text) {
+ public void setLimitInfo(CharSequence text) {
if (!Objects.equals(text, mLimitInfoText)) {
mLimitInfoText = text;
notifyChanged();
diff --git a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
index 58faac2236..14b97170df 100644
--- a/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
+++ b/src/com/android/settings/datausage/DataUsageSummaryPreferenceController.java
@@ -216,18 +216,18 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
}
if (info.warningLevel > 0 && info.limitLevel > 0) {
- summaryPreference.setLimitInfo(TextUtils.expandTemplate(
- mContext.getText(R.string.cell_data_warning_and_limit),
- DataUsageUtils.formatDataUsage(mContext, info.warningLevel),
- DataUsageUtils.formatDataUsage(mContext, info.limitLevel)).toString());
+ summaryPreference.setLimitInfo(TextUtils.expandTemplate(
+ mContext.getText(R.string.cell_data_warning_and_limit),
+ DataUsageUtils.formatDataUsage(mContext, info.warningLevel),
+ DataUsageUtils.formatDataUsage(mContext, info.limitLevel)));
} else if (info.warningLevel > 0) {
- summaryPreference.setLimitInfo(TextUtils.expandTemplate(
- mContext.getText(R.string.cell_data_warning),
- DataUsageUtils.formatDataUsage(mContext, info.warningLevel)).toString());
+ summaryPreference.setLimitInfo(TextUtils.expandTemplate(
+ mContext.getText(R.string.cell_data_warning),
+ DataUsageUtils.formatDataUsage(mContext, info.warningLevel)));
} else if (info.limitLevel > 0) {
summaryPreference.setLimitInfo(TextUtils.expandTemplate(
mContext.getText(R.string.cell_data_limit),
- DataUsageUtils.formatDataUsage(mContext, info.limitLevel)).toString());
+ DataUsageUtils.formatDataUsage(mContext, info.limitLevel)));
} else {
summaryPreference.setLimitInfo(null);
}
@@ -238,7 +238,7 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
summaryPreference.setChartEnabled(false);
} else {
summaryPreference.setChartEnabled(true);
- summaryPreference.setLabels(DataUsageUtils.formatDataUsage(mContext, 0 /* sizeBytes */),
+ summaryPreference.setLabels(Formatter.formatFileSize(mContext, 0 /* sizeBytes */),
DataUsageUtils.formatDataUsage(mContext, mDataBarSize));
summaryPreference.setProgress(mDataplanUse / (float) mDataBarSize);
}
diff --git a/src/com/android/settings/datetime/TimeZonePreferenceController.java b/src/com/android/settings/datetime/TimeZonePreferenceController.java
index aff204d76f..435b1fe77a 100644
--- a/src/com/android/settings/datetime/TimeZonePreferenceController.java
+++ b/src/com/android/settings/datetime/TimeZonePreferenceController.java
@@ -19,11 +19,8 @@ package com.android.settings.datetime;
import android.content.Context;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
-import android.util.FeatureFlagUtils;
-import com.android.settings.core.FeatureFlags;
import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.datetime.timezone.TimeZoneSettings;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.datetime.ZoneGetter;
@@ -36,13 +33,11 @@ public class TimeZonePreferenceController extends AbstractPreferenceController
private static final String KEY_TIMEZONE = "timezone";
private final AutoTimeZonePreferenceController mAutoTimeZonePreferenceController;
- private final boolean mZonePickerV2;
public TimeZonePreferenceController(Context context,
AutoTimeZonePreferenceController autoTimeZonePreferenceController) {
super(context);
mAutoTimeZonePreferenceController = autoTimeZonePreferenceController;
- mZonePickerV2 = FeatureFlagUtils.isEnabled(mContext, FeatureFlags.ZONE_PICKER_V2);
}
@Override
@@ -50,9 +45,6 @@ public class TimeZonePreferenceController extends AbstractPreferenceController
if (!(preference instanceof RestrictedPreference)) {
return;
}
- if (mZonePickerV2) {
- preference.setFragment(TimeZoneSettings.class.getName());
- }
preference.setSummary(getTimeZoneOffsetAndName());
if( !((RestrictedPreference) preference).isDisabledByAdmin()) {
preference.setEnabled(!mAutoTimeZonePreferenceController.isEnabled());
diff --git a/src/com/android/settings/datetime/ZonePicker.java b/src/com/android/settings/datetime/ZonePicker.java
deleted file mode 100644
index dc691275e3..0000000000
--- a/src/com/android/settings/datetime/ZonePicker.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * 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.datetime;
-
-import android.annotation.NonNull;
-import android.app.Activity;
-import android.app.AlarmManager;
-import android.app.ListFragment;
-import android.content.Context;
-import android.os.Bundle;
-import android.support.annotation.VisibleForTesting;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ListView;
-import android.widget.SimpleAdapter;
-import android.widget.TextView;
-
-import com.android.internal.logging.nano.MetricsProto;
-import com.android.settings.R;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.core.instrumentation.Instrumentable;
-import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin;
-import com.android.settingslib.datetime.ZoneGetter;
-
-import java.text.Collator;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TimeZone;
-
-/**
- * The class displaying a list of time zones that match a filter string
- * such as "Africa", "Europe", etc. Choosing an item from the list will set
- * the time zone. Pressing Back without choosing from the list will not
- * result in a change in the time zone setting.
- */
-public class ZonePicker extends ListFragment implements Instrumentable {
-
- private static final int MENU_TIMEZONE = Menu.FIRST+1;
- private static final int MENU_ALPHABETICAL = Menu.FIRST;
- private VisibilityLoggerMixin mVisibilityLoggerMixin;
-
- private boolean mSortedByTimezone;
-
- private SimpleAdapter mTimezoneSortedAdapter;
- private SimpleAdapter mAlphabeticalAdapter;
-
- /**
- * Constructs an adapter with TimeZone list. Sorted by TimeZone in default.
- *
- * @param sortedByName use Name for sorting the list.
- */
- public static SimpleAdapter constructTimezoneAdapter(Context context,
- boolean sortedByName) {
- return constructTimezoneAdapter(context, sortedByName,
- R.layout.date_time_custom_list_item_2);
- }
-
- /**
- * Constructs an adapter with TimeZone list. Sorted by TimeZone in default.
- *
- * @param sortedByName use Name for sorting the list.
- */
- public static SimpleAdapter constructTimezoneAdapter(Context context,
- boolean sortedByName, int layoutId) {
- final String[] from = new String[] {
- ZoneGetter.KEY_DISPLAY_LABEL,
- ZoneGetter.KEY_OFFSET_LABEL
- };
- final int[] to = new int[] {android.R.id.text1, android.R.id.text2};
-
- final String sortKey = (sortedByName
- ? ZoneGetter.KEY_DISPLAY_LABEL
- : ZoneGetter.KEY_OFFSET);
- final MyComparator comparator = new MyComparator(sortKey);
- final List<Map<String, Object>> sortedList = ZoneGetter.getZonesList(context);
- Collections.sort(sortedList, comparator);
- final SimpleAdapter adapter = new SimpleAdapter(context,
- sortedList,
- layoutId,
- from,
- to);
- adapter.setViewBinder(new TimeZoneViewBinder());
- return adapter;
- }
-
- private static class TimeZoneViewBinder implements SimpleAdapter.ViewBinder {
-
- /**
- * Set the text to the given {@link CharSequence} as is, instead of calling toString, so
- * that additional information stored in the CharSequence is, like spans added to a
- * {@link android.text.SpannableString} are preserved.
- */
- @Override
- public boolean setViewValue(View view, Object data, String textRepresentation) {
- TextView textView = (TextView) view;
- textView.setText((CharSequence) data);
- return true;
- }
- }
-
- /**
- * Searches {@link TimeZone} from the given {@link SimpleAdapter} object, and returns
- * the index for the TimeZone.
- *
- * @param adapter SimpleAdapter constructed by
- * {@link #constructTimezoneAdapter(Context, boolean)}.
- * @param tz TimeZone to be searched.
- * @return Index for the given TimeZone. -1 when there's no corresponding list item.
- * returned.
- */
- public static int getTimeZoneIndex(SimpleAdapter adapter, TimeZone tz) {
- final String defaultId = tz.getID();
- final int listSize = adapter.getCount();
- for (int i = 0; i < listSize; i++) {
- // Using HashMap<String, Object> induces unnecessary warning.
- final HashMap<?,?> map = (HashMap<?,?>)adapter.getItem(i);
- final String id = (String)map.get(ZoneGetter.KEY_ID);
- if (defaultId.equals(id)) {
- // If current timezone is in this list, move focus to it
- return i;
- }
- }
- return -1;
- }
-
- @Override
- public int getMetricsCategory() {
- return MetricsProto.MetricsEvent.ZONE_PICKER;
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- final Activity activity = getActivity();
- mTimezoneSortedAdapter = constructTimezoneAdapter(activity, false);
- mAlphabeticalAdapter = constructTimezoneAdapter(activity, true);
-
- // Sets the adapter
- setSorting(true);
- setHasOptionsMenu(true);
- activity.setTitle(R.string.date_time_set_timezone);
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mVisibilityLoggerMixin = new VisibilityLoggerMixin(getMetricsCategory(),
- FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider());
- }
-
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- final View view = super.onCreateView(inflater, container, savedInstanceState);
- final ListView list = view.findViewById(android.R.id.list);
- prepareCustomPreferencesList(list);
- return view;
- }
-
- @Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- menu.add(0, MENU_ALPHABETICAL, 0, R.string.zone_list_menu_sort_alphabetically)
- .setIcon(android.R.drawable.ic_menu_sort_alphabetically);
- menu.add(0, MENU_TIMEZONE, 0, R.string.zone_list_menu_sort_by_timezone)
- .setIcon(R.drawable.ic_menu_3d_globe);
- super.onCreateOptionsMenu(menu, inflater);
- }
-
- @Override
- public void onPrepareOptionsMenu(Menu menu) {
- if (mSortedByTimezone) {
- menu.findItem(MENU_TIMEZONE).setVisible(false);
- menu.findItem(MENU_ALPHABETICAL).setVisible(true);
- } else {
- menu.findItem(MENU_TIMEZONE).setVisible(true);
- menu.findItem(MENU_ALPHABETICAL).setVisible(false);
- }
- }
-
- @Override
- public void onResume() {
- super.onResume();
- mVisibilityLoggerMixin.onResume();
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
-
- case MENU_TIMEZONE:
- setSorting(true);
- return true;
-
- case MENU_ALPHABETICAL:
- setSorting(false);
- return true;
-
- default:
- return false;
- }
- }
-
- static void prepareCustomPreferencesList(ListView list) {
- list.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
- list.setClipToPadding(false);
- list.setDivider(null);
- }
-
- private void setSorting(boolean sortByTimezone) {
- final SimpleAdapter adapter =
- sortByTimezone ? mTimezoneSortedAdapter : mAlphabeticalAdapter;
- setListAdapter(adapter);
- mSortedByTimezone = sortByTimezone;
- final int defaultIndex = getTimeZoneIndex(adapter, TimeZone.getDefault());
- if (defaultIndex >= 0) {
- setSelection(defaultIndex);
- }
- }
-
- @Override
- public void onListItemClick(ListView listView, View v, int position, long id) {
- // Ignore extra clicks
- if (!isResumed()) return;
- final Map<?, ?> map = (Map<?, ?>)listView.getItemAtPosition(position);
- final String tzId = (String) map.get(ZoneGetter.KEY_ID);
-
- // Update the system timezone value
- final Activity activity = getActivity();
- final AlarmManager alarm = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
- alarm.setTimeZone(tzId);
-
- getActivity().onBackPressed();
-
- }
-
- @Override
- public void onPause() {
- super.onPause();
- mVisibilityLoggerMixin.onPause();
- }
-
- @VisibleForTesting
- static class MyComparator implements Comparator<Map<?, ?>> {
- private final Collator mCollator;
- private String mSortingKey;
- private boolean mSortedByName;
-
- public MyComparator(String sortingKey) {
- mCollator = Collator.getInstance();
- mSortingKey = sortingKey;
- mSortedByName = ZoneGetter.KEY_DISPLAY_LABEL.equals(sortingKey);
- }
-
- public void setSortingKey(String sortingKey) {
- mSortingKey = sortingKey;
- mSortedByName = ZoneGetter.KEY_DISPLAY_LABEL.equals(sortingKey);
- }
-
- public int compare(Map<?, ?> map1, Map<?, ?> map2) {
- Object value1 = map1.get(mSortingKey);
- Object value2 = map2.get(mSortingKey);
-
- /*
- * This should never happen, but just in-case, put non-comparable
- * items at the end.
- */
- if (!isComparable(value1)) {
- return isComparable(value2) ? 1 : 0;
- } else if (!isComparable(value2)) {
- return -1;
- }
-
- if (mSortedByName) {
- return mCollator.compare(value1, value2);
- } else {
- return ((Comparable) value1).compareTo(value2);
- }
- }
-
- private boolean isComparable(Object value) {
- return (value != null) && (value instanceof Comparable);
- }
- }
-}
diff --git a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
index 590254538a..d37dbe0a35 100644
--- a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
+++ b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
@@ -36,6 +36,7 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.widget.SwitchBar;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
@@ -44,6 +45,7 @@ import java.util.List;
* AutomaticStorageManagerSettings is the Settings screen for configuration and management of the
* automatic storage manager.
*/
+@SearchIndexable
public class AutomaticStorageManagerSettings extends DashboardFragment
implements OnPreferenceChangeListener {
private static final String KEY_DAYS = "days";
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index 3ee5db1df7..d69109c06c 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -49,11 +49,13 @@ import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.development.SystemPropPoker;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFragment
implements SwitchBar.OnSwitchChangeListener, OemUnlockDialogHost, AdbDialogHost,
AdbClearKeysDialogHost, LogPersistDialogHost {
@@ -428,7 +430,6 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
controllers.add(new TransitionAnimationScalePreferenceController(context));
controllers.add(new AnimatorDurationScalePreferenceController(context));
controllers.add(new SecondaryDisplayPreferenceController(context));
- controllers.add(new ForceGpuRenderingPreferenceController(context));
controllers.add(new GpuViewUpdatesPreferenceController(context));
controllers.add(new HardwareLayersUpdatesPreferenceController(context));
controllers.add(new DebugGpuOverdrawPreferenceController(context));
diff --git a/src/com/android/settings/development/ForceGpuRenderingPreferenceController.java b/src/com/android/settings/development/ForceGpuRenderingPreferenceController.java
deleted file mode 100644
index 72074cb5ac..0000000000
--- a/src/com/android/settings/development/ForceGpuRenderingPreferenceController.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.development;
-
-import android.content.Context;
-import android.os.SystemProperties;
-import android.support.annotation.VisibleForTesting;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.Preference;
-
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.development.DeveloperOptionsPreferenceController;
-import com.android.settingslib.development.SystemPropPoker;
-
-public class ForceGpuRenderingPreferenceController extends DeveloperOptionsPreferenceController
- implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
-
- private static final String FORCE_HARDWARE_UI_KEY = "force_hw_ui";
-
- @VisibleForTesting
- static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
-
- public ForceGpuRenderingPreferenceController(Context context) {
- super(context);
- }
-
- @Override
- public String getPreferenceKey() {
- return FORCE_HARDWARE_UI_KEY;
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final boolean isEnabled = (Boolean) newValue;
- SystemProperties.set(HARDWARE_UI_PROPERTY,
- isEnabled ? Boolean.toString(true) : Boolean.toString(false));
- SystemPropPoker.getInstance().poke();
- return true;
- }
-
- @Override
- public void updateState(Preference preference) {
- final boolean isEnabled = SystemProperties.getBoolean(HARDWARE_UI_PROPERTY,
- false /* default */);
- ((SwitchPreference) mPreference).setChecked(isEnabled);
- }
-
- @Override
- protected void onDeveloperOptionsSwitchDisabled() {
- super.onDeveloperOptionsSwitchDisabled();
- SystemProperties.set(HARDWARE_UI_PROPERTY, Boolean.toString(false));
- ((SwitchPreference) mPreference).setChecked(false);
- }
-}
diff --git a/src/com/android/settings/deviceinfo/DeviceInfoSettings.java b/src/com/android/settings/deviceinfo/DeviceInfoSettings.java
index 3f70d8b3ef..5e78362b0d 100644
--- a/src/com/android/settings/deviceinfo/DeviceInfoSettings.java
+++ b/src/com/android/settings/deviceinfo/DeviceInfoSettings.java
@@ -35,11 +35,13 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class DeviceInfoSettings extends DashboardFragment implements Indexable {
private static final String LOG_TAG = "DeviceInfoSettings";
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeForget.java b/src/com/android/settings/deviceinfo/PrivateVolumeForget.java
index b6d50cef75..af485db0a3 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeForget.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeForget.java
@@ -18,13 +18,13 @@ package com.android.settings.deviceinfo;
import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.DialogFragment;
import android.app.Fragment;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.storage.StorageManager;
import android.os.storage.VolumeRecord;
+import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
@@ -35,11 +35,13 @@ import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.InstrumentedFragment;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.search.actionbar.SearchMenuController;
-public class PrivateVolumeForget extends SettingsPreferenceFragment {
- private static final String TAG_FORGET_CONFIRM = "forget_confirm";
+public class PrivateVolumeForget extends InstrumentedFragment {
+ @VisibleForTesting
+ static final String TAG_FORGET_CONFIRM = "forget_confirm";
private VolumeRecord mRecord;
@@ -49,6 +51,13 @@ public class PrivateVolumeForget extends SettingsPreferenceFragment {
}
@Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ setHasOptionsMenu(true);
+ SearchMenuController.init(this /* host */);
+ }
+
+ @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final StorageManager storage = getActivity().getSystemService(StorageManager.class);
@@ -116,12 +125,12 @@ public class PrivateVolumeForget extends SettingsPreferenceFragment {
builder.setPositiveButton(R.string.storage_menu_forget,
new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- storage.forgetVolume(fsUuid);
- getActivity().finish();
- }
- });
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ storage.forgetVolume(fsUuid);
+ getActivity().finish();
+ }
+ });
builder.setNegativeButton(R.string.cancel, null);
return builder.create();
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeFormat.java b/src/com/android/settings/deviceinfo/PrivateVolumeFormat.java
index 4a63e64a44..0bac2964c0 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeFormat.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeFormat.java
@@ -17,7 +17,6 @@
package com.android.settings.deviceinfo;
import static android.os.storage.DiskInfo.EXTRA_DISK_ID;
-
import static com.android.settings.deviceinfo.StorageWizardBase.EXTRA_FORMAT_FORGET_UUID;
import static com.android.settings.deviceinfo.StorageWizardBase.EXTRA_FORMAT_PRIVATE;
@@ -36,9 +35,9 @@ import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
-import com.android.settings.core.InstrumentedPreferenceFragment;
+import com.android.settings.core.InstrumentedFragment;
-public class PrivateVolumeFormat extends InstrumentedPreferenceFragment {
+public class PrivateVolumeFormat extends InstrumentedFragment {
private VolumeInfo mVolume;
private DiskInfo mDisk;
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeUnmount.java b/src/com/android/settings/deviceinfo/PrivateVolumeUnmount.java
index 0aa5b920f5..e74abc9295 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeUnmount.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeUnmount.java
@@ -30,10 +30,11 @@ import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.core.InstrumentedFragment;
import com.android.settings.deviceinfo.StorageSettings.UnmountTask;
+import com.android.settings.search.actionbar.SearchMenuController;
-public class PrivateVolumeUnmount extends SettingsPreferenceFragment {
+public class PrivateVolumeUnmount extends InstrumentedFragment {
private VolumeInfo mVolume;
private DiskInfo mDisk;
@@ -43,6 +44,13 @@ public class PrivateVolumeUnmount extends SettingsPreferenceFragment {
}
@Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ setHasOptionsMenu(true);
+ SearchMenuController.init(this /* host */);
+ }
+
+ @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final StorageManager storage = getActivity().getSystemService(StorageManager.class);
diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
index 8e56b12ec8..06515249a1 100644
--- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
@@ -51,12 +51,14 @@ import com.android.settingslib.applications.StorageStatsSource;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.deviceinfo.PrivateStorageInfo;
import com.android.settingslib.deviceinfo.StorageManagerVolumeProvider;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class StorageDashboardFragment extends DashboardFragment
implements
LoaderManager.LoaderCallbacks<SparseArray<StorageAsyncLoader.AppsStorageResult>> {
diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index cf9d34b3bc..720cebd83a 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -57,6 +57,7 @@ import com.android.settings.search.SearchIndexableRaw;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.deviceinfo.PrivateStorageInfo;
import com.android.settingslib.deviceinfo.StorageManagerVolumeProvider;
+import com.android.settingslib.search.SearchIndexable;
import java.text.NumberFormat;
import java.util.ArrayList;
@@ -67,6 +68,7 @@ import java.util.List;
* Panel showing both internal storage (both built-in storage and private
* volumes) and removable storage (public volumes).
*/
+@SearchIndexable
public class StorageSettings extends SettingsPreferenceFragment implements Indexable {
static final String TAG = "StorageSettings";
diff --git a/src/com/android/settings/deviceinfo/StorageVolumePreference.java b/src/com/android/settings/deviceinfo/StorageVolumePreference.java
index 023b2a1b20..6135acd218 100644
--- a/src/com/android/settings/deviceinfo/StorageVolumePreference.java
+++ b/src/com/android/settings/deviceinfo/StorageVolumePreference.java
@@ -106,7 +106,7 @@ public class StorageVolumePreference extends Preference {
}
if (freeBytes < mStorageManager.getStorageLowBytes(path)) {
- mColor = Utils.getColorAttr(context, android.R.attr.colorError);
+ mColor = Utils.getColorAttrDefaultColor(context, android.R.attr.colorError);
icon = context.getDrawable(R.drawable.ic_warning_24dp);
}
diff --git a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
index 09262a0647..bc5184439c 100644
--- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
+++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
@@ -54,11 +54,13 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class MyDeviceInfoFragment extends DashboardFragment
implements DeviceNamePreferenceController.DeviceNamePreferenceHost {
private static final String LOG_TAG = "MyDeviceInfoFragment";
diff --git a/src/com/android/settings/deviceinfo/legal/CopyrightPreferenceController.java b/src/com/android/settings/deviceinfo/legal/CopyrightPreferenceController.java
new file mode 100644
index 0000000000..68e51f40df
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/legal/CopyrightPreferenceController.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2018 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.deviceinfo.legal;
+
+import android.content.Context;
+import android.content.Intent;
+
+public class CopyrightPreferenceController extends LegalPreferenceController {
+
+ private static final Intent INTENT = new Intent("android.settings.COPYRIGHT");
+
+ public CopyrightPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ protected Intent getIntent() {
+ return INTENT;
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/legal/LegalPreferenceController.java b/src/com/android/settings/deviceinfo/legal/LegalPreferenceController.java
new file mode 100644
index 0000000000..f64eb4b59f
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/legal/LegalPreferenceController.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2018 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.deviceinfo.legal;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.core.BasePreferenceController;
+
+import java.util.List;
+
+
+public abstract class LegalPreferenceController extends BasePreferenceController {
+ private final PackageManager mPackageManager;
+ private Preference mPreference;
+
+ public LegalPreferenceController(Context context, String key) {
+ super(context, key);
+ mPackageManager = mContext.getPackageManager();
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ if (findMatchingSpecificActivity() != null) {
+ return AVAILABLE;
+ } else {
+ return DISABLED_UNSUPPORTED;
+ }
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ mPreference = screen.findPreference(getPreferenceKey());
+ super.displayPreference(screen);
+
+ if (getAvailabilityStatus() == AVAILABLE) {
+ replacePreferenceIntent();
+ }
+ }
+
+ protected abstract Intent getIntent();
+
+ private ResolveInfo findMatchingSpecificActivity() {
+ final Intent intent = getIntent();
+ if (intent == null) {
+ return null;
+ }
+
+ // Find the activity that is in the system image
+ final List<ResolveInfo> list = mPackageManager.queryIntentActivities(intent, 0);
+ if (list == null) {
+ return null;
+ }
+
+ for (ResolveInfo resolveInfo : list) {
+ if ((resolveInfo.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM)
+ != 0) {
+ return resolveInfo;
+ }
+ }
+
+ // Did not find a matching activity
+ return null;
+ }
+
+ private void replacePreferenceIntent() {
+ final ResolveInfo resolveInfo = findMatchingSpecificActivity();
+ if (resolveInfo == null) {
+ return;
+ }
+
+ // Replace the intent with this specific activity
+ mPreference.setIntent(new Intent().setClassName(
+ resolveInfo.activityInfo.packageName,
+ resolveInfo.activityInfo.name));
+
+ mPreference.setTitle(resolveInfo.loadLabel(mPackageManager));
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/legal/LicensePreferenceController.java b/src/com/android/settings/deviceinfo/legal/LicensePreferenceController.java
new file mode 100644
index 0000000000..67af15b4fc
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/legal/LicensePreferenceController.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2018 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.deviceinfo.legal;
+
+import android.content.Context;
+import android.content.Intent;
+
+public class LicensePreferenceController extends LegalPreferenceController {
+
+ private static final Intent INTENT = new Intent("android.settings.LICENSE");
+
+ public LicensePreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ protected Intent getIntent() {
+ return INTENT;
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/legal/TermsPreferenceController.java b/src/com/android/settings/deviceinfo/legal/TermsPreferenceController.java
new file mode 100644
index 0000000000..bccc44579b
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/legal/TermsPreferenceController.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2018 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.deviceinfo.legal;
+
+import android.content.Context;
+import android.content.Intent;
+
+public class TermsPreferenceController extends LegalPreferenceController {
+
+ private static final Intent INTENT = new Intent("android.settings.TERMS");
+
+ public TermsPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ protected Intent getIntent() {
+ return INTENT;
+ }
+}
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/deviceinfo/legal/WallpaperAttributionsPreferenceController.java
index 5a0a131af6..418b149df9 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/deviceinfo/legal/WallpaperAttributionsPreferenceController.java
@@ -13,17 +13,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package com.android.settings.deviceinfo.legal;
-package com.android.settings.search;
+import android.content.Context;
-import java.util.Collection;
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
-public interface SearchIndexableResources {
+public class WallpaperAttributionsPreferenceController extends BasePreferenceController {
- /**
- * Returns a collection of classes that should be indexed for search.
- *
- * Each class should have the SEARCH_INDEX_DATA_PROVIDER public static member.
- */
- Collection<Class> getProviderValues();
+ public WallpaperAttributionsPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return mContext.getResources().getBoolean(R.bool.config_show_wallpaper_attribution)
+ ? AVAILABLE
+ : DISABLED_UNSUPPORTED;
+ }
}
diff --git a/src/com/android/settings/deviceinfo/legal/WebViewLicensePreferenceController.java b/src/com/android/settings/deviceinfo/legal/WebViewLicensePreferenceController.java
new file mode 100644
index 0000000000..9d8b3f9502
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/legal/WebViewLicensePreferenceController.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2018 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.deviceinfo.legal;
+
+import android.content.Context;
+import android.content.Intent;
+
+public class WebViewLicensePreferenceController extends LegalPreferenceController {
+
+ private static final Intent INTENT = new Intent("android.settings.WEBVIEW_LICENSE");
+
+ public WebViewLicensePreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ protected Intent getIntent() {
+ return INTENT;
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/storage/UserProfileController.java b/src/com/android/settings/deviceinfo/storage/UserProfileController.java
index 510b0c0390..05856cbb25 100644
--- a/src/com/android/settings/deviceinfo/storage/UserProfileController.java
+++ b/src/com/android/settings/deviceinfo/storage/UserProfileController.java
@@ -130,7 +130,7 @@ public class UserProfileController extends AbstractPreferenceController implemen
private static Drawable applyTint(Context context, Drawable icon) {
icon = icon.mutate();
- icon.setTint(Utils.getColorAttr(context, android.R.attr.colorControlNormal));
+ icon.setTintList(Utils.getColorAttr(context, android.R.attr.colorControlNormal));
return icon;
}
diff --git a/src/com/android/settings/display/AmbientDisplaySettings.java b/src/com/android/settings/display/AmbientDisplaySettings.java
index 8745e3ff18..ba3e1ee46e 100644
--- a/src/com/android/settings/display/AmbientDisplaySettings.java
+++ b/src/com/android/settings/display/AmbientDisplaySettings.java
@@ -32,6 +32,7 @@ import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
@@ -39,6 +40,7 @@ import java.util.List;
/**
* Settings screen for Ambient display.
*/
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class AmbientDisplaySettings extends DashboardFragment {
public static final String KEY_AMBIENT_DISPLAY_ALWAYS_ON = "ambient_display_always_on";
diff --git a/src/com/android/settings/display/AutoBrightnessSettings.java b/src/com/android/settings/display/AutoBrightnessSettings.java
index 778acf6880..39877ec5dd 100644
--- a/src/com/android/settings/display/AutoBrightnessSettings.java
+++ b/src/com/android/settings/display/AutoBrightnessSettings.java
@@ -24,10 +24,12 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class AutoBrightnessSettings extends DashboardFragment {
private static final String TAG = "AutoBrightnessSettings";
diff --git a/src/com/android/settings/display/NightDisplaySettings.java b/src/com/android/settings/display/NightDisplaySettings.java
index 4e0ebcd0f6..add4443f98 100644
--- a/src/com/android/settings/display/NightDisplaySettings.java
+++ b/src/com/android/settings/display/NightDisplaySettings.java
@@ -33,6 +33,7 @@ import com.android.settings.search.Indexable;
import com.android.settings.widget.SeekBarPreference;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.text.DateFormat;
import java.time.LocalTime;
@@ -45,6 +46,7 @@ import java.util.TimeZone;
* Settings screen for Night display.
* TODO (b/69912911) Upgrade to Dashboard fragment
*/
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class NightDisplaySettings extends SettingsPreferenceFragment
implements ColorDisplayController.Callback, Preference.OnPreferenceChangeListener,
Indexable {
diff --git a/src/com/android/settings/display/ScreenZoomSettings.java b/src/com/android/settings/display/ScreenZoomSettings.java
index 6b5216e7ab..fed8aa67f5 100644
--- a/src/com/android/settings/display/ScreenZoomSettings.java
+++ b/src/com/android/settings/display/ScreenZoomSettings.java
@@ -30,6 +30,7 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
import com.android.settingslib.display.DisplayDensityUtils;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
@@ -37,6 +38,7 @@ import java.util.List;
/**
* Preference fragment used to control screen zoom.
*/
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class ScreenZoomSettings extends PreviewSeekBarPreferenceFragment implements Indexable {
private int mDefaultDensity;
diff --git a/src/com/android/settings/dream/DreamSettings.java b/src/com/android/settings/dream/DreamSettings.java
index c0d4c400cc..97f2c89cb5 100644
--- a/src/com/android/settings/dream/DreamSettings.java
+++ b/src/com/android/settings/dream/DreamSettings.java
@@ -32,11 +32,13 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.dream.DreamBackend;
import com.android.settingslib.dream.DreamBackend.WhenToDream;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class DreamSettings extends DashboardFragment {
private static final String TAG = "DreamSettings";
diff --git a/src/com/android/settings/enterprise/EnterprisePrivacySettings.java b/src/com/android/settings/enterprise/EnterprisePrivacySettings.java
index 92ae38df94..f04c421429 100644
--- a/src/com/android/settings/enterprise/EnterprisePrivacySettings.java
+++ b/src/com/android/settings/enterprise/EnterprisePrivacySettings.java
@@ -26,11 +26,13 @@ import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.PreferenceCategoryController;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class EnterprisePrivacySettings extends DashboardFragment {
static final String TAG = "EnterprisePrivacySettings";
diff --git a/src/com/android/settings/fuelgauge/BatteryMeterView.java b/src/com/android/settings/fuelgauge/BatteryMeterView.java
index 353b3d7ab6..9f1e115a87 100644
--- a/src/com/android/settings/fuelgauge/BatteryMeterView.java
+++ b/src/com/android/settings/fuelgauge/BatteryMeterView.java
@@ -51,7 +51,8 @@ public class BatteryMeterView extends ImageView {
final int frameColor = context.getColor(R.color.meter_background_color);
mAccentColorFilter = new PorterDuffColorFilter(
- Utils.getColorAttr(context, android.R.attr.colorAccent), PorterDuff.Mode.SRC_IN);
+ Utils.getColorAttrDefaultColor(context, android.R.attr.colorAccent),
+ PorterDuff.Mode.SRC_IN);
mErrorColorFilter = new PorterDuffColorFilter(
context.getColor(R.color.battery_icon_color_error), PorterDuff.Mode.SRC_IN);
diff --git a/src/com/android/settings/fuelgauge/BatterySaverDrawable.java b/src/com/android/settings/fuelgauge/BatterySaverDrawable.java
index 0d3008a0e3..ce2936177a 100644
--- a/src/com/android/settings/fuelgauge/BatterySaverDrawable.java
+++ b/src/com/android/settings/fuelgauge/BatterySaverDrawable.java
@@ -37,7 +37,7 @@ public class BatterySaverDrawable extends BatteryMeterDrawableBase {
setPowerSave(true);
setCharging(false);
setPowerSaveAsColorError(false);
- final int tintColor = Utils.getColorAttr(context, android.R.attr.colorAccent);
+ final int tintColor = Utils.getColorAttrDefaultColor(context, android.R.attr.colorAccent);
setColorFilter(new PorterDuffColorFilter(tintColor, PorterDuff.Mode.SRC_IN));
}
-} \ No newline at end of file
+}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
index 327a6c58bf..cf80196eca 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
@@ -30,12 +30,14 @@ import com.android.settings.SettingsActivity;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.utils.StringUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class PowerUsageAdvanced extends PowerUsageBase {
private static final String TAG = "AdvancedBatteryUsage";
private static final String KEY_BATTERY_GRAPH = "battery_graph";
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 4c4b6e926c..e314dde657 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -51,6 +51,7 @@ import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.utils.PowerUtil;
import com.android.settingslib.utils.StringUtil;
@@ -62,6 +63,7 @@ import java.util.List;
* Displays a list of apps and subsystems that consume power, ordered by how much power was
* consumed since the last time it was unplugged.
*/
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class PowerUsageSummary extends PowerUsageBase implements OnLongClickListener,
BatteryTipPreferenceController.BatteryTipListener {
diff --git a/src/com/android/settings/fuelgauge/SmartBatterySettings.java b/src/com/android/settings/fuelgauge/SmartBatterySettings.java
index bcbac3f1c8..ba2b47671f 100644
--- a/src/com/android/settings/fuelgauge/SmartBatterySettings.java
+++ b/src/com/android/settings/fuelgauge/SmartBatterySettings.java
@@ -27,6 +27,7 @@ import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
@@ -35,6 +36,7 @@ import java.util.List;
/**
* Fragment to show smart battery and restricted app controls
*/
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class SmartBatterySettings extends DashboardFragment {
public static final String TAG = "SmartBatterySettings";
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
index 8009e954e3..aa16fc9fe1 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
@@ -27,6 +27,7 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
@@ -35,6 +36,7 @@ import java.util.List;
/**
* Battery saver settings page
*/
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class BatterySaverSettings extends DashboardFragment {
private static final String TAG = "BatterySaverSettings";
diff --git a/src/com/android/settings/gestures/AssistGestureSettings.java b/src/com/android/settings/gestures/AssistGestureSettings.java
index df2dd93a54..ffe223443e 100644
--- a/src/com/android/settings/gestures/AssistGestureSettings.java
+++ b/src/com/android/settings/gestures/AssistGestureSettings.java
@@ -26,11 +26,13 @@ import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class AssistGestureSettings extends DashboardFragment {
private static final String TAG = "AssistGesture";
diff --git a/src/com/android/settings/gestures/DoubleTapPowerSettings.java b/src/com/android/settings/gestures/DoubleTapPowerSettings.java
index 6eec6cd31c..8afd2c1f64 100644
--- a/src/com/android/settings/gestures/DoubleTapPowerSettings.java
+++ b/src/com/android/settings/gestures/DoubleTapPowerSettings.java
@@ -26,10 +26,12 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class DoubleTapPowerSettings extends DashboardFragment {
private static final String TAG = "DoubleTapPower";
diff --git a/src/com/android/settings/gestures/DoubleTapScreenSettings.java b/src/com/android/settings/gestures/DoubleTapScreenSettings.java
index 29e0a1a4b7..fcea8e4062 100644
--- a/src/com/android/settings/gestures/DoubleTapScreenSettings.java
+++ b/src/com/android/settings/gestures/DoubleTapScreenSettings.java
@@ -28,11 +28,13 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class DoubleTapScreenSettings extends DashboardFragment {
private static final String TAG = "DoubleTapScreen";
diff --git a/src/com/android/settings/gestures/DoubleTwistGestureSettings.java b/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
index a3f37f0821..145a06c55f 100644
--- a/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
+++ b/src/com/android/settings/gestures/DoubleTwistGestureSettings.java
@@ -26,10 +26,12 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class DoubleTwistGestureSettings extends DashboardFragment {
private static final String TAG = "DoubleTwistGesture";
diff --git a/src/com/android/settings/gestures/GestureSettings.java b/src/com/android/settings/gestures/GestureSettings.java
index ec0577bd66..2c9574976e 100644
--- a/src/com/android/settings/gestures/GestureSettings.java
+++ b/src/com/android/settings/gestures/GestureSettings.java
@@ -29,11 +29,13 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class GestureSettings extends DashboardFragment {
private static final String TAG = "GestureSettings";
diff --git a/src/com/android/settings/gestures/PickupGestureSettings.java b/src/com/android/settings/gestures/PickupGestureSettings.java
index 8f4e7b3f1f..05aba4e99e 100644
--- a/src/com/android/settings/gestures/PickupGestureSettings.java
+++ b/src/com/android/settings/gestures/PickupGestureSettings.java
@@ -27,10 +27,12 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class PickupGestureSettings extends DashboardFragment {
private static final String TAG = "PickupGestureSettings";
diff --git a/src/com/android/settings/gestures/PreventRingingGestureSettings.java b/src/com/android/settings/gestures/PreventRingingGestureSettings.java
index 09570dfb4f..58ff5fa660 100644
--- a/src/com/android/settings/gestures/PreventRingingGestureSettings.java
+++ b/src/com/android/settings/gestures/PreventRingingGestureSettings.java
@@ -26,11 +26,13 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class PreventRingingGestureSettings extends DashboardFragment {
private static final String TAG = "RingingGestureSettings";
diff --git a/src/com/android/settings/gestures/SwipeToNotificationSettings.java b/src/com/android/settings/gestures/SwipeToNotificationSettings.java
index c18289c1a9..7ae8644b22 100644
--- a/src/com/android/settings/gestures/SwipeToNotificationSettings.java
+++ b/src/com/android/settings/gestures/SwipeToNotificationSettings.java
@@ -26,10 +26,12 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class SwipeToNotificationSettings extends DashboardFragment {
private static final String TAG = "SwipeToNotifSettings";
diff --git a/src/com/android/settings/gestures/SwipeUpGestureSettings.java b/src/com/android/settings/gestures/SwipeUpGestureSettings.java
index 1fe74c6c72..41a1aa4427 100644
--- a/src/com/android/settings/gestures/SwipeUpGestureSettings.java
+++ b/src/com/android/settings/gestures/SwipeUpGestureSettings.java
@@ -26,10 +26,12 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class SwipeUpGestureSettings extends DashboardFragment {
private static final String TAG = "SwipeUpGesture";
diff --git a/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java b/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
index 48b0b4ada4..96185e2ad1 100644
--- a/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
@@ -42,11 +42,13 @@ import com.android.settings.search.Indexable;
import com.android.settingslib.inputmethod.InputMethodAndSubtypeUtil;
import com.android.settingslib.inputmethod.InputMethodPreference;
import com.android.settingslib.inputmethod.InputMethodSettingValuesWrapper;
+import com.android.settingslib.search.SearchIndexable;
import java.text.Collator;
import java.util.ArrayList;
import java.util.List;
+@SearchIndexable
public final class AvailableVirtualKeyboardFragment extends SettingsPreferenceFragment
implements InputMethodPreference.OnSavePreferenceListener, Indexable {
diff --git a/src/com/android/settings/inputmethod/KeyboardLayoutPickerController.java b/src/com/android/settings/inputmethod/KeyboardLayoutPickerController.java
new file mode 100644
index 0000000000..d3f7f17ccb
--- /dev/null
+++ b/src/com/android/settings/inputmethod/KeyboardLayoutPickerController.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2018 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.inputmethod;
+
+
+import android.app.Fragment;
+import android.content.Context;
+import android.hardware.input.InputDeviceIdentifier;
+import android.hardware.input.InputManager;
+import android.hardware.input.KeyboardLayout;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.view.InputDevice;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class KeyboardLayoutPickerController extends BasePreferenceController implements
+ InputManager.InputDeviceListener, LifecycleObserver, OnStart, OnStop {
+
+ private final InputManager mIm;
+ private final Map<SwitchPreference, KeyboardLayout> mPreferenceMap;
+
+ private Fragment mParent;
+ private int mInputDeviceId;
+ private InputDeviceIdentifier mInputDeviceIdentifier;
+ private KeyboardLayout[] mKeyboardLayouts;
+ private PreferenceScreen mScreen;
+
+
+ public KeyboardLayoutPickerController(Context context, String key) {
+ super(context, key);
+ mIm = (InputManager) context.getSystemService(Context.INPUT_SERVICE);
+ mInputDeviceId = -1;
+ mPreferenceMap = new HashMap<>();
+ }
+
+ public void initialize(Fragment parent, InputDeviceIdentifier inputDeviceIdentifier) {
+ mParent = parent;
+ mInputDeviceIdentifier = inputDeviceIdentifier;
+ mKeyboardLayouts = mIm.getKeyboardLayoutsForInputDevice(mInputDeviceIdentifier);
+ Arrays.sort(mKeyboardLayouts);
+ }
+
+ @Override
+ public void onStart() {
+ mIm.registerInputDeviceListener(this, null);
+
+ final InputDevice inputDevice =
+ mIm.getInputDeviceByDescriptor(mInputDeviceIdentifier.getDescriptor());
+ if (inputDevice == null) {
+ mParent.getActivity().finish();
+ return;
+ }
+ mInputDeviceId = inputDevice.getId();
+
+ updateCheckedState();
+ }
+
+ @Override
+ public void onStop() {
+ mIm.unregisterInputDeviceListener(this);
+ mInputDeviceId = -1;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mScreen = screen;
+ createPreferenceHierarchy();
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ if (!(preference instanceof SwitchPreference)) {
+ return false;
+ }
+
+ final SwitchPreference switchPref = (SwitchPreference) preference;
+ final KeyboardLayout layout = mPreferenceMap.get(switchPref);
+ if (layout != null) {
+ final boolean checked = switchPref.isChecked();
+ if (checked) {
+ mIm.addKeyboardLayoutForInputDevice(mInputDeviceIdentifier,
+ layout.getDescriptor());
+ } else {
+ mIm.removeKeyboardLayoutForInputDevice(mInputDeviceIdentifier,
+ layout.getDescriptor());
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onInputDeviceAdded(int deviceId) {
+
+ }
+
+ @Override
+ public void onInputDeviceRemoved(int deviceId) {
+ if (mInputDeviceId >= 0 && deviceId == mInputDeviceId) {
+ mParent.getActivity().finish();
+ }
+ }
+
+ @Override
+ public void onInputDeviceChanged(int deviceId) {
+ if (mInputDeviceId >= 0 && deviceId == mInputDeviceId) {
+ updateCheckedState();
+ }
+ }
+
+ private void updateCheckedState() {
+ final String[] enabledKeyboardLayouts = mIm.getEnabledKeyboardLayoutsForInputDevice(
+ mInputDeviceIdentifier);
+ Arrays.sort(enabledKeyboardLayouts);
+
+ for (Map.Entry<SwitchPreference, KeyboardLayout> entry : mPreferenceMap.entrySet()) {
+ entry.getKey().setChecked(Arrays.binarySearch(enabledKeyboardLayouts,
+ entry.getValue().getDescriptor()) >= 0);
+ }
+ }
+
+ private void createPreferenceHierarchy() {
+ for (KeyboardLayout layout : mKeyboardLayouts) {
+ final SwitchPreference pref = new SwitchPreference(mScreen.getContext());
+ pref.setTitle(layout.getLabel());
+ pref.setSummary(layout.getCollection());
+ pref.setKey(layout.getDescriptor());
+ mScreen.addPreference(pref);
+ mPreferenceMap.put(pref, layout);
+ }
+ }
+}
+
diff --git a/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java b/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java
index 4c9715ca46..2c3f89ba63 100644
--- a/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java
+++ b/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java
@@ -18,29 +18,15 @@ package com.android.settings.inputmethod;
import android.content.Context;
import android.hardware.input.InputDeviceIdentifier;
-import android.hardware.input.InputManager;
-import android.hardware.input.InputManager.InputDeviceListener;
-import android.hardware.input.KeyboardLayout;
-import android.os.Bundle;
-import android.support.v7.preference.CheckBoxPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-import android.view.InputDevice;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-public class KeyboardLayoutPickerFragment extends SettingsPreferenceFragment
- implements InputDeviceListener {
- private InputDeviceIdentifier mInputDeviceIdentifier;
- private int mInputDeviceId = -1;
- private InputManager mIm;
- private KeyboardLayout[] mKeyboardLayouts;
- private HashMap<CheckBoxPreference, KeyboardLayout> mPreferenceMap = new HashMap<>();
+public class KeyboardLayoutPickerFragment extends DashboardFragment {
+
+ private static final String TAG = "KeyboardLayoutPicker";
/**
* Intent extra: The input device descriptor of the keyboard whose keyboard
@@ -54,105 +40,25 @@ public class KeyboardLayoutPickerFragment extends SettingsPreferenceFragment
}
@Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- mInputDeviceIdentifier = getActivity().getIntent().getParcelableExtra(
- EXTRA_INPUT_DEVICE_IDENTIFIER);
- if (mInputDeviceIdentifier == null) {
- getActivity().finish();
- }
-
- mIm = (InputManager) getSystemService(Context.INPUT_SERVICE);
- mKeyboardLayouts = mIm.getKeyboardLayoutsForInputDevice(mInputDeviceIdentifier);
- Arrays.sort(mKeyboardLayouts);
- setPreferenceScreen(createPreferenceHierarchy());
- }
-
- @Override
- public void onResume() {
- super.onResume();
+ public void onAttach(Context context) {
+ super.onAttach(context);
- mIm.registerInputDeviceListener(this, null);
-
- InputDevice inputDevice =
- mIm.getInputDeviceByDescriptor(mInputDeviceIdentifier.getDescriptor());
- if (inputDevice == null) {
+ final InputDeviceIdentifier inputDeviceIdentifier = getActivity().getIntent().
+ getParcelableExtra(EXTRA_INPUT_DEVICE_IDENTIFIER);
+ if (inputDeviceIdentifier == null) {
getActivity().finish();
- return;
- }
- mInputDeviceId = inputDevice.getId();
-
- updateCheckedState();
- }
-
- @Override
- public void onPause() {
- mIm.unregisterInputDeviceListener(this);
- mInputDeviceId = -1;
-
- super.onPause();
- }
-
- @Override
- public boolean onPreferenceTreeClick(Preference preference) {
- if (preference instanceof CheckBoxPreference) {
- CheckBoxPreference checkboxPref = (CheckBoxPreference)preference;
- KeyboardLayout layout = mPreferenceMap.get(checkboxPref);
- if (layout != null) {
- boolean checked = checkboxPref.isChecked();
- if (checked) {
- mIm.addKeyboardLayoutForInputDevice(mInputDeviceIdentifier,
- layout.getDescriptor());
- } else {
- mIm.removeKeyboardLayoutForInputDevice(mInputDeviceIdentifier,
- layout.getDescriptor());
- }
- return true;
- }
}
- return super.onPreferenceTreeClick(preference);
- }
-
- @Override
- public void onInputDeviceAdded(int deviceId) {
- }
- @Override
- public void onInputDeviceChanged(int deviceId) {
- if (mInputDeviceId >= 0 && deviceId == mInputDeviceId) {
- updateCheckedState();
- }
+ use(KeyboardLayoutPickerController.class).initialize(this /*parent*/,
+ inputDeviceIdentifier);
}
@Override
- public void onInputDeviceRemoved(int deviceId) {
- if (mInputDeviceId >= 0 && deviceId == mInputDeviceId) {
- getActivity().finish();
- }
- }
-
- private PreferenceScreen createPreferenceHierarchy() {
- PreferenceScreen root = getPreferenceManager().createPreferenceScreen(getActivity());
-
- for (KeyboardLayout layout : mKeyboardLayouts) {
- CheckBoxPreference pref = new CheckBoxPreference(getPrefContext());
- pref.setTitle(layout.getLabel());
- pref.setSummary(layout.getCollection());
- root.addPreference(pref);
- mPreferenceMap.put(pref, layout);
- }
- return root;
+ protected String getLogTag() {
+ return TAG;
}
- private void updateCheckedState() {
- String[] enabledKeyboardLayouts = mIm.getEnabledKeyboardLayoutsForInputDevice(
- mInputDeviceIdentifier);
- Arrays.sort(enabledKeyboardLayouts);
-
- for (Map.Entry<CheckBoxPreference, KeyboardLayout> entry : mPreferenceMap.entrySet()) {
- entry.getKey().setChecked(Arrays.binarySearch(enabledKeyboardLayouts,
- entry.getValue().getDescriptor()) >= 0);
- }
+ protected int getPreferenceScreenResId() {
+ return R.xml.keyboard_layout_picker_fragment;
}
}
diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
index 36f4e92f23..5729ab253e 100644
--- a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
@@ -38,7 +38,6 @@ import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;
import android.view.InputDevice;
-import com.android.internal.inputmethod.InputMethodUtils;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.util.Preconditions;
import com.android.settings.R;
@@ -46,15 +45,16 @@ import com.android.settings.Settings;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.utils.ThreadUtils;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.List;
import java.util.Objects;
+@SearchIndexable
public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
implements InputManager.InputDeviceListener,
KeyboardLayoutDialogFragment.OnSetupKeyboardLayoutsListener, Indexable {
@@ -71,8 +71,6 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
private PreferenceCategory mKeyboardAssistanceCategory;
@NonNull
private SwitchPreference mShowVirtualKeyboardSwitch;
- @NonNull
- private InputMethodUtils.InputMethodSettings mSettings;
private Intent mIntentWaitingForResult;
@@ -81,13 +79,6 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
Activity activity = Preconditions.checkNotNull(getActivity());
addPreferencesFromResource(R.xml.physical_keyboard_settings);
mIm = Preconditions.checkNotNull(activity.getSystemService(InputManager.class));
- mSettings = new InputMethodUtils.InputMethodSettings(
- activity.getResources(),
- getContentResolver(),
- new HashMap<>(),
- new ArrayList<>(),
- UserHandle.myUserId(),
- false /* copyOnWrite */);
mKeyboardAssistanceCategory = Preconditions.checkNotNull(
(PreferenceCategory) findPreference(KEYBOARD_ASSISTANCE_CATEGORY));
mShowVirtualKeyboardSwitch = Preconditions.checkNotNull(
@@ -208,7 +199,8 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
}
private void updateShowVirtualKeyboardSwitch() {
- mShowVirtualKeyboardSwitch.setChecked(mSettings.isShowImeWithHardKeyboardEnabled());
+ mShowVirtualKeyboardSwitch.setChecked(
+ Secure.getInt(getContentResolver(), Secure.SHOW_IME_WITH_HARD_KEYBOARD, 0) != 0);
}
private void toggleKeyboardShortcutsMenu() {
@@ -216,12 +208,10 @@ public final class PhysicalKeyboardFragment extends SettingsPreferenceFragment
}
private final OnPreferenceChangeListener mShowVirtualKeyboardSwitchPreferenceChangeListener =
- new OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- mSettings.setShowImeWithHardKeyboard((Boolean) newValue);
- return true;
- }
+ (preference, newValue) -> {
+ Secure.putInt(getContentResolver(), Secure.SHOW_IME_WITH_HARD_KEYBOARD,
+ ((Boolean) newValue) ? 1 : 0);
+ return true;
};
private final ContentObserver mContentObserver = new ContentObserver(new Handler(true)) {
diff --git a/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java b/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java
index 620bc65281..716226db4c 100644
--- a/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java
+++ b/src/com/android/settings/inputmethod/UserDictionaryAddWordContents.java
@@ -60,8 +60,8 @@ public class UserDictionaryAddWordContents {
private String mSavedShortcut;
/* package */ UserDictionaryAddWordContents(final View view, final Bundle args) {
- mWordEditText = (EditText)view.findViewById(R.id.user_dictionary_add_word_text);
- mShortcutEditText = (EditText)view.findViewById(R.id.user_dictionary_add_shortcut);
+ mWordEditText = (EditText) view.findViewById(R.id.user_dictionary_add_word_text);
+ mShortcutEditText = (EditText) view.findViewById(R.id.user_dictionary_add_shortcut);
final String word = args.getString(EXTRA_WORD);
if (null != word) {
mWordEditText.setText(word);
@@ -81,8 +81,8 @@ public class UserDictionaryAddWordContents {
/* package */ UserDictionaryAddWordContents(final View view,
final UserDictionaryAddWordContents oldInstanceToBeEdited) {
- mWordEditText = (EditText)view.findViewById(R.id.user_dictionary_add_word_text);
- mShortcutEditText = (EditText)view.findViewById(R.id.user_dictionary_add_shortcut);
+ mWordEditText = (EditText) view.findViewById(R.id.user_dictionary_add_word_text);
+ mShortcutEditText = (EditText) view.findViewById(R.id.user_dictionary_add_shortcut);
mMode = MODE_EDIT;
mOldWord = oldInstanceToBeEdited.mSavedWord;
mOldShortcut = oldInstanceToBeEdited.mSavedShortcut;
@@ -167,23 +167,24 @@ public class UserDictionaryAddWordContents {
return UserDictionaryAddWordActivity.CODE_WORD_ADDED;
}
- private static final String[] HAS_WORD_PROJECTION = { UserDictionary.Words.WORD };
+ private static final String[] HAS_WORD_PROJECTION = {UserDictionary.Words.WORD};
private static final String HAS_WORD_SELECTION_ONE_LOCALE = UserDictionary.Words.WORD
+ "=? AND " + UserDictionary.Words.LOCALE + "=?";
private static final String HAS_WORD_SELECTION_ALL_LOCALES = UserDictionary.Words.WORD
+ "=? AND " + UserDictionary.Words.LOCALE + " is null";
+
private boolean hasWord(final String word, final Context context) {
final Cursor cursor;
// mLocale == "" indicates this is an entry for all languages. Here, mLocale can't
// be null at all (it's ensured by the updateLocale method).
if ("".equals(mLocale)) {
cursor = context.getContentResolver().query(UserDictionary.Words.CONTENT_URI,
- HAS_WORD_PROJECTION, HAS_WORD_SELECTION_ALL_LOCALES,
- new String[] { word }, null /* sort order */);
+ HAS_WORD_PROJECTION, HAS_WORD_SELECTION_ALL_LOCALES,
+ new String[] {word}, null /* sort order */);
} else {
cursor = context.getContentResolver().query(UserDictionary.Words.CONTENT_URI,
- HAS_WORD_PROJECTION, HAS_WORD_SELECTION_ONE_LOCALE,
- new String[] { word, mLocale }, null /* sort order */);
+ HAS_WORD_PROJECTION, HAS_WORD_SELECTION_ONE_LOCALE,
+ new String[] {word, mLocale}, null /* sort order */);
}
try {
if (null == cursor) return false;
@@ -196,6 +197,7 @@ public class UserDictionaryAddWordContents {
public static class LocaleRenderer {
private final String mLocaleString;
private final String mDescription;
+
// LocaleString may NOT be null.
public LocaleRenderer(final Context context, final String localeString) {
mLocaleString = localeString;
@@ -207,13 +209,16 @@ public class UserDictionaryAddWordContents {
mDescription = Utils.createLocaleFromString(localeString).getDisplayName();
}
}
+
@Override
public String toString() {
return mDescription;
}
+
public String getLocaleString() {
return mLocaleString;
}
+
// "More languages..." is null ; "All languages" is the empty string.
public boolean isMoreLanguages() {
return null == mLocaleString;
@@ -229,7 +234,8 @@ public class UserDictionaryAddWordContents {
// Helper method to get the list of locales to display for this word
public ArrayList<LocaleRenderer> getLocalesList(final Activity activity) {
- final TreeSet<String> locales = UserDictionaryList.getUserDictionaryLocalesSet(activity);
+ final TreeSet<String> locales =
+ UserDictionaryListPreferenceController.getUserDictionaryLocalesSet(activity);
// Remove our locale if it's in, because we're always gonna put it at the top
locales.remove(mLocale); // mLocale may not be null
final String systemLocale = Locale.getDefault().toString();
diff --git a/src/com/android/settings/inputmethod/UserDictionaryList.java b/src/com/android/settings/inputmethod/UserDictionaryList.java
index 2f59dc90da..46723bc461 100644
--- a/src/com/android/settings/inputmethod/UserDictionaryList.java
+++ b/src/com/android/settings/inputmethod/UserDictionaryList.java
@@ -16,33 +16,17 @@
package com.android.settings.inputmethod;
-import android.app.Activity;
import android.content.Context;
import android.content.Intent;
-import android.database.Cursor;
import android.os.Bundle;
-import android.provider.UserDictionary;
-import android.support.annotation.NonNull;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceGroup;
-import android.text.TextUtils;
-import android.view.inputmethod.InputMethodInfo;
-import android.view.inputmethod.InputMethodManager;
-import android.view.inputmethod.InputMethodSubtype;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.Utils;
+import com.android.settings.dashboard.DashboardFragment;
-import java.util.List;
-import java.util.Locale;
-import java.util.TreeSet;
+public class UserDictionaryList extends DashboardFragment {
-public class UserDictionaryList extends SettingsPreferenceFragment {
- public static final String USER_DICTIONARY_SETTINGS_INTENT_ACTION =
- "android.settings.USER_DICTIONARY_SETTINGS";
- private String mLocale;
+ private static final String TAG = "UserDictionaryList";
@Override
public int getMetricsCategory() {
@@ -50,15 +34,8 @@ public class UserDictionaryList extends SettingsPreferenceFragment {
}
@Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- setPreferenceScreen(getPreferenceManager().createPreferenceScreen(getActivity()));
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- getActivity().getActionBar().setTitle(R.string.user_dict_settings_title);
+ public void onAttach(Context context) {
+ super.onAttach(context);
final Intent intent = getActivity().getIntent();
final String localeFromIntent =
@@ -76,122 +53,17 @@ public class UserDictionaryList extends SettingsPreferenceFragment {
} else {
locale = null;
}
- mLocale = locale;
- }
-
- @NonNull
- public static TreeSet<String> getUserDictionaryLocalesSet(Context context) {
- final Cursor cursor = context.getContentResolver().query(
- UserDictionary.Words.CONTENT_URI, new String[]{UserDictionary.Words.LOCALE},
- null, null, null);
- final TreeSet<String> localeSet = new TreeSet<>();
- if (cursor == null) {
- // The user dictionary service is not present or disabled. Return empty set.
- return localeSet;
- }
- try {
- if (cursor.moveToFirst()) {
- final int columnIndex = cursor.getColumnIndex(UserDictionary.Words.LOCALE);
- do {
- final String locale = cursor.getString(columnIndex);
- localeSet.add(null != locale ? locale : "");
- } while (cursor.moveToNext());
- }
- } finally {
- cursor.close();
- }
-
- // CAVEAT: Keep this for consistency of the implementation between Keyboard and Settings
- // if (!UserDictionarySettings.IS_SHORTCUT_API_SUPPORTED) {
- // // For ICS, we need to show "For all languages" in case that the keyboard locale
- // // is different from the system locale
- // localeSet.add("");
- // }
-
- final InputMethodManager imm =
- (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
- final List<InputMethodInfo> imis = imm.getEnabledInputMethodList();
- for (final InputMethodInfo imi : imis) {
- final List<InputMethodSubtype> subtypes =
- imm.getEnabledInputMethodSubtypeList(
- imi, true /* allowsImplicitlySelectedSubtypes */);
- for (InputMethodSubtype subtype : subtypes) {
- final String locale = subtype.getLocale();
- if (!TextUtils.isEmpty(locale)) {
- localeSet.add(locale);
- }
- }
- }
-
- // We come here after we have collected locales from existing user dictionary entries and
- // enabled subtypes. If we already have the locale-without-country version of the system
- // locale, we don't add the system locale to avoid confusion even though it's technically
- // correct to add it.
- if (!localeSet.contains(Locale.getDefault().getLanguage().toString())) {
- localeSet.add(Locale.getDefault().toString());
- }
- return localeSet;
+ use(UserDictionaryListPreferenceController.class).setLocale(locale);
}
- /**
- * Creates the entries that allow the user to go into the user dictionary for each locale.
- *
- * @param userDictGroup The group to put the settings in.
- */
- protected void createUserDictSettings(PreferenceGroup userDictGroup) {
- final Activity activity = getActivity();
- userDictGroup.removeAll();
- final TreeSet<String> localeSet =
- UserDictionaryList.getUserDictionaryLocalesSet(activity);
- if (mLocale != null) {
- // If the caller explicitly specify empty string as a locale, we'll show "all languages"
- // in the list.
- localeSet.add(mLocale);
- }
- if (localeSet.size() > 1) {
- // Have an "All languages" entry in the languages list if there are two or more active
- // languages
- localeSet.add("");
- }
-
- if (localeSet.isEmpty()) {
- userDictGroup.addPreference(createUserDictionaryPreference(null, activity));
- } else {
- for (String locale : localeSet) {
- userDictGroup.addPreference(createUserDictionaryPreference(locale, activity));
- }
- }
- }
-
- /**
- * Create a single User Dictionary Preference object, with its parameters set.
- *
- * @param locale The locale for which this user dictionary is for.
- * @return The corresponding preference.
- */
- protected Preference createUserDictionaryPreference(String locale, Activity activity) {
- final Preference newPref = new Preference(getPrefContext());
- final Intent intent = new Intent(USER_DICTIONARY_SETTINGS_INTENT_ACTION);
- if (null == locale) {
- newPref.setTitle(Locale.getDefault().getDisplayName());
- } else {
- if ("".equals(locale)) {
- newPref.setTitle(getString(R.string.user_dict_settings_all_languages));
- } else {
- newPref.setTitle(Utils.createLocaleFromString(locale).getDisplayName());
- }
- intent.putExtra("locale", locale);
- newPref.getExtras().putString("locale", locale);
- }
- newPref.setIntent(intent);
- newPref.setFragment(UserDictionarySettings.class.getName());
- return newPref;
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.user_dictionary_list_fragment;
}
@Override
- public void onResume() {
- super.onResume();
- createUserDictSettings(getPreferenceScreen());
+ protected String getLogTag() {
+ return TAG;
}
}
diff --git a/src/com/android/settings/inputmethod/UserDictionaryListPreferenceController.java b/src/com/android/settings/inputmethod/UserDictionaryListPreferenceController.java
new file mode 100644
index 0000000000..715246aa17
--- /dev/null
+++ b/src/com/android/settings/inputmethod/UserDictionaryListPreferenceController.java
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2018 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.inputmethod;
+
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.provider.UserDictionary;
+import android.support.annotation.NonNull;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.view.inputmethod.InputMethodSubtype;
+
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+
+import java.util.List;
+import java.util.Locale;
+import java.util.TreeSet;
+
+public class UserDictionaryListPreferenceController extends BasePreferenceController implements
+ LifecycleObserver, OnStart {
+
+ public static final String USER_DICTIONARY_SETTINGS_INTENT_ACTION =
+ "android.settings.USER_DICTIONARY_SETTINGS";
+ private final String KEY_ALL_LANGUAGE = "all_languages";
+ private String mLocale;
+ private PreferenceScreen mScreen;
+
+ public UserDictionaryListPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ public void setLocale(String locale) {
+ mLocale = locale;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ // This is to make newly inserted languages being sorted alphabetically when updating
+ // the existing preferenceScreen, and for "For all languages" to be always on the top.
+ screen.setOrderingAsAdded(false);
+ mScreen = screen;
+ }
+
+ @Override
+ public void onStart() {
+ createUserDictSettings();
+ }
+
+ @NonNull
+ public static TreeSet<String> getUserDictionaryLocalesSet(Context context) {
+ final Cursor cursor = context.getContentResolver().query(
+ UserDictionary.Words.CONTENT_URI, new String[] {UserDictionary.Words.LOCALE},
+ null, null, null);
+ final TreeSet<String> localeSet = new TreeSet<>();
+ if (cursor == null) {
+ // The user dictionary service is not present or disabled. Return empty set.
+ return localeSet;
+ }
+ try {
+ if (cursor.moveToFirst()) {
+ final int columnIndex = cursor.getColumnIndex(UserDictionary.Words.LOCALE);
+ do {
+ final String locale = cursor.getString(columnIndex);
+ localeSet.add(null != locale ? locale : "");
+ } while (cursor.moveToNext());
+ }
+ } finally {
+ cursor.close();
+ }
+
+ // CAVEAT: Keep this for consistency of the implementation between Keyboard and Settings
+ // if (!UserDictionarySettings.IS_SHORTCUT_API_SUPPORTED) {
+ // // For ICS, we need to show "For all languages" in case that the keyboard locale
+ // // is different from the system locale
+ // localeSet.add("");
+ // }
+
+ final InputMethodManager imm =
+ (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
+ final List<InputMethodInfo> imis = imm.getEnabledInputMethodList();
+ for (final InputMethodInfo imi : imis) {
+ final List<InputMethodSubtype> subtypes =
+ imm.getEnabledInputMethodSubtypeList(
+ imi, true /* allowsImplicitlySelectedSubtypes */);
+ for (InputMethodSubtype subtype : subtypes) {
+ final String locale = subtype.getLocale();
+ if (!TextUtils.isEmpty(locale)) {
+ localeSet.add(locale);
+ }
+ }
+ }
+
+ // We come here after we have collected locales from existing user dictionary entries and
+ // enabled subtypes. If we already have the locale-without-country version of the system
+ // locale, we don't add the system locale to avoid confusion even though it's technically
+ // correct to add it.
+ if (!localeSet.contains(Locale.getDefault().getLanguage().toString())) {
+ localeSet.add(Locale.getDefault().toString());
+ }
+
+ return localeSet;
+ }
+
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ TreeSet<String> getUserDictLocalesSet(Context context) {
+ return getUserDictionaryLocalesSet(context);
+ }
+
+ /**
+ * Creates the entries that allow the user to go into the user dictionary for each locale.
+ */
+ private void createUserDictSettings() {
+
+ final TreeSet<String> localeSet = getUserDictLocalesSet(mContext);
+ final int prefCount = mScreen.getPreferenceCount();
+ String prefKey;
+
+ if (mLocale != null) {
+ // If the caller explicitly specify empty string as a locale, we'll show "all languages"
+ // in the list.
+ localeSet.add(mLocale);
+ }
+ if (localeSet.size() > 1) {
+ // Have an "All languages" entry in the languages list if there are two or more active
+ // languages
+ localeSet.add("");
+ }
+
+ // Update the existing preferenceScreen according to the corresponding data set.
+ if (prefCount > 0) {
+ for (int i = prefCount - 1; i >= 0; i--) {
+ prefKey = mScreen.getPreference(i).getKey();
+ if (KEY_ALL_LANGUAGE.equals(prefKey)) {
+ prefKey = "";
+ }
+ if (!localeSet.isEmpty() && localeSet.contains(prefKey)) {
+ localeSet.remove(prefKey);
+ continue;
+ }
+ mScreen.removePreference(mScreen.findPreference(prefKey));
+ }
+ }
+
+ if (localeSet.isEmpty() && prefCount == 0) {
+ mScreen.addPreference(createUserDictionaryPreference(null));
+ } else {
+ for (String locale : localeSet) {
+ mScreen.addPreference(createUserDictionaryPreference(locale));
+ }
+ }
+ }
+
+ /**
+ * Create a single User Dictionary Preference object, with its parameters set.
+ *
+ * @param locale The locale for which this user dictionary is for.
+ * @return The corresponding preference.
+ */
+ private Preference createUserDictionaryPreference(String locale) {
+ final String KEY_LOCALE = "locale";
+ final Preference newPref = new Preference(mScreen.getContext());
+ final Intent intent = new Intent(USER_DICTIONARY_SETTINGS_INTENT_ACTION);
+ if (locale == null) {
+ newPref.setTitle(Locale.getDefault().getDisplayName());
+ newPref.setKey(Locale.getDefault().toString());
+ } else {
+ if (TextUtils.isEmpty(locale)) {
+ newPref.setTitle(mContext.getString(R.string.user_dict_settings_all_languages));
+ newPref.setKey(KEY_ALL_LANGUAGE);
+ newPref.setOrder(0);
+ } else {
+ newPref.setTitle(Utils.createLocaleFromString(locale).getDisplayName());
+ newPref.setKey(locale);
+ }
+ intent.putExtra(KEY_LOCALE, locale);
+ newPref.getExtras().putString(KEY_LOCALE, locale);
+ }
+ newPref.setIntent(intent);
+ newPref.setFragment(UserDictionarySettings.class.getName());
+ return newPref;
+ }
+}
diff --git a/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java b/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java
index fbe9690bb6..b7c6c46a5f 100644
--- a/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java
@@ -36,12 +36,14 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.inputmethod.InputMethodAndSubtypeUtil;
import com.android.settingslib.inputmethod.InputMethodPreference;
+import com.android.settingslib.search.SearchIndexable;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public final class VirtualKeyboardFragment extends SettingsPreferenceFragment implements Indexable {
private static final String ADD_VIRTUAL_KEYBOARD_SCREEN = "add_virtual_keyboard_screen";
diff --git a/src/com/android/settings/language/LanguageAndInputSettings.java b/src/com/android/settings/language/LanguageAndInputSettings.java
index 126f3c848d..c92349e11e 100644
--- a/src/com/android/settings/language/LanguageAndInputSettings.java
+++ b/src/com/android/settings/language/LanguageAndInputSettings.java
@@ -43,11 +43,13 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.PreferenceCategoryController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class LanguageAndInputSettings extends DashboardFragment {
private static final String TAG = "LangAndInputSettings";
diff --git a/src/com/android/settings/language/UserDictionaryPreferenceController.java b/src/com/android/settings/language/UserDictionaryPreferenceController.java
index 3a1d6e0ff4..fa6dce6c92 100644
--- a/src/com/android/settings/language/UserDictionaryPreferenceController.java
+++ b/src/com/android/settings/language/UserDictionaryPreferenceController.java
@@ -23,6 +23,7 @@ import android.support.v7.preference.Preference;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.inputmethod.UserDictionaryList;
+import com.android.settings.inputmethod.UserDictionaryListPreferenceController;
import com.android.settings.inputmethod.UserDictionarySettings;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -61,10 +62,10 @@ public class UserDictionaryPreferenceController extends AbstractPreferenceContro
// parameter in the extras. This will be interpreted by the
// UserDictionarySettings class as meaning
// "the current locale". Note that with the current code for
- // UserDictionaryList#getUserDictionaryLocalesSet()
+ // UserDictionaryListPreferenceController#getUserDictionaryLocalesSet()
// the locale list always has at least one element, since it
// always includes the current locale explicitly.
- // @see UserDictionaryList.getUserDictionaryLocalesSet().
+ // @see UserDictionaryListPreferenceController.getUserDictionaryLocalesSet().
extras.putString("locale", localeSet.first());
}
targetFragment = UserDictionarySettings.class;
@@ -75,6 +76,6 @@ public class UserDictionaryPreferenceController extends AbstractPreferenceContro
}
protected TreeSet<String> getDictionaryLocales() {
- return UserDictionaryList.getUserDictionaryLocalesSet(mContext);
+ return UserDictionaryListPreferenceController.getUserDictionaryLocalesSet(mContext);
}
}
diff --git a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
index 0d8cbaf116..a6cb6f5e69 100644
--- a/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
+++ b/src/com/android/settings/localepicker/LocaleDragAndDropAdapter.java
@@ -29,6 +29,7 @@ import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.CheckBox;
import android.widget.CompoundButton;
import com.android.internal.app.LocalePicker;
@@ -159,10 +160,13 @@ class LocaleDragAndDropAdapter
dragCell.setShowCheckbox(mRemoveMode);
dragCell.setShowMiniLabel(!mRemoveMode);
dragCell.setShowHandle(!mRemoveMode && mDragEnabled);
- dragCell.setChecked(mRemoveMode ? feedItem.getChecked() : false);
dragCell.setTag(feedItem);
- dragCell.getCheckbox()
- .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ CheckBox checkbox = dragCell.getCheckbox();
+ // clear listener before setChecked() in case another item already bind to
+ // current ViewHolder and checked event is triggered on stale listener mistakenly.
+ checkbox.setOnCheckedChangeListener(null);
+ checkbox.setChecked(mRemoveMode ? feedItem.getChecked() : false);
+ checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
LocaleStore.LocaleInfo feedItem =
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index 13ba8f5eb0..90547e91ae 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -34,6 +34,8 @@ import com.android.settings.widget.SwitchBar;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.location.RecentLocationApps;
+import com.android.settingslib.search.SearchIndexable;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -58,6 +60,7 @@ import java.util.List;
* other things, this simplifies integration with future changes to the default (AOSP)
* implementation.
*/
+@SearchIndexable
public class LocationSettings extends DashboardFragment {
private static final String TAG = "LocationSettings";
diff --git a/src/com/android/settings/location/RecentLocationRequestSeeAllFragment.java b/src/com/android/settings/location/RecentLocationRequestSeeAllFragment.java
index 0b7614c22b..7bc7778828 100644
--- a/src/com/android/settings/location/RecentLocationRequestSeeAllFragment.java
+++ b/src/com/android/settings/location/RecentLocationRequestSeeAllFragment.java
@@ -26,11 +26,14 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/** Dashboard Fragment to display all recent location requests, sorted by recency. */
+@SearchIndexable
public class RecentLocationRequestSeeAllFragment extends DashboardFragment {
private static final String TAG = "RecentLocationReqAll";
diff --git a/src/com/android/settings/location/ScanningSettings.java b/src/com/android/settings/location/ScanningSettings.java
index 91359520ea..b2ce5fbf7d 100644
--- a/src/com/android/settings/location/ScanningSettings.java
+++ b/src/com/android/settings/location/ScanningSettings.java
@@ -25,6 +25,7 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
@@ -33,6 +34,7 @@ import java.util.List;
/**
* A page that configures the background scanning settings for Wi-Fi and Bluetooth.
*/
+@SearchIndexable
public class ScanningSettings extends DashboardFragment {
private static final String TAG = "ScanningSettings";
diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
index 89bf5f4dec..f6a739135b 100644
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -23,6 +23,7 @@ import android.app.AlertDialog;
import android.app.Dialog;
import android.app.Fragment;
import android.content.Context;
+import android.icu.text.ListFormatter;
import android.provider.SearchIndexableResource;
import android.support.annotation.VisibleForTesting;
import android.text.BidiFormatter;
@@ -38,11 +39,13 @@ import com.android.settings.wifi.WifiMasterSwitchPreferenceController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class NetworkDashboardFragment extends DashboardFragment implements
MobilePlanPreferenceHost {
@@ -173,25 +176,22 @@ public class NetworkDashboardFragment extends DashboardFragment implements
@Override
public void setListening(boolean listening) {
if (listening) {
- String summary = BidiFormatter.getInstance()
- .unicodeWrap(mContext.getString(R.string.wifi_settings_title));
+ final List<String> summaries = new ArrayList<>();
+
+ summaries.add(BidiFormatter.getInstance()
+ .unicodeWrap(mContext.getString(R.string.wifi_settings_title)));
if (mMobileNetworkPreferenceController.isAvailable()) {
- final String mobileSettingSummary = mContext.getString(
- R.string.network_dashboard_summary_mobile);
- summary = mContext.getString(R.string.join_many_items_middle, summary,
- mobileSettingSummary);
+ summaries.add(mContext.getString(
+ R.string.network_dashboard_summary_mobile));
}
final String dataUsageSettingSummary = mContext.getString(
R.string.network_dashboard_summary_data_usage);
- summary = mContext.getString(R.string.join_many_items_middle, summary,
- dataUsageSettingSummary);
+ summaries.add(dataUsageSettingSummary);
if (mTetherPreferenceController.isAvailable()) {
- final String hotspotSettingSummary = mContext.getString(
- R.string.network_dashboard_summary_hotspot);
- summary = mContext.getString(R.string.join_many_items_middle, summary,
- hotspotSettingSummary);
+ summaries.add(mContext.getString(
+ R.string.network_dashboard_summary_hotspot));
}
- mSummaryLoader.setSummary(this, summary);
+ mSummaryLoader.setSummary(this, ListFormatter.getInstance().format(summaries));
}
}
}
diff --git a/src/com/android/settings/nfc/PaymentSettings.java b/src/com/android/settings/nfc/PaymentSettings.java
index c832dfc8ec..9532dac840 100644
--- a/src/com/android/settings/nfc/PaymentSettings.java
+++ b/src/com/android/settings/nfc/PaymentSettings.java
@@ -35,10 +35,12 @@ import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
+@SearchIndexable
public class PaymentSettings extends SettingsPreferenceFragment implements Indexable {
public static final String TAG = "PaymentSettings";
diff --git a/src/com/android/settings/notification/ConfigureNotificationSettings.java b/src/com/android/settings/notification/ConfigureNotificationSettings.java
index 1ca4a4d6a2..2763776761 100644
--- a/src/com/android/settings/notification/ConfigureNotificationSettings.java
+++ b/src/com/android/settings/notification/ConfigureNotificationSettings.java
@@ -26,23 +26,23 @@ import android.os.UserHandle;
import android.provider.SearchIndexableResource;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
-import android.text.TextUtils;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.RingtonePreference;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.SummaryLoader;
-import com.android.settings.gestures.SwipeToNotificationPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class ConfigureNotificationSettings extends DashboardFragment {
private static final String TAG = "ConfigNotiSettings";
@@ -95,21 +95,17 @@ public class ConfigureNotificationSettings extends DashboardFragment {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
final BadgingNotificationPreferenceController badgeController =
new BadgingNotificationPreferenceController(context);
- final PulseNotificationPreferenceController pulseController =
- new PulseNotificationPreferenceController(context);
final LockScreenNotificationPreferenceController lockScreenNotificationController =
new LockScreenNotificationPreferenceController(context,
KEY_LOCKSCREEN,
KEY_LOCKSCREEN_WORK_PROFILE_HEADER,
KEY_LOCKSCREEN_WORK_PROFILE);
if (lifecycle != null) {
- lifecycle.addObserver(pulseController);
lifecycle.addObserver(lockScreenNotificationController);
}
controllers.add(new RecentNotifyingAppsPreferenceController(
context, new NotificationBackend(), app, host));
controllers.add(badgeController);
- controllers.add(pulseController);
controllers.add(lockScreenNotificationController);
controllers.add(new NotificationRingtonePreferenceController(context) {
@Override
diff --git a/src/com/android/settings/notification/PulseNotificationPreferenceController.java b/src/com/android/settings/notification/PulseNotificationPreferenceController.java
index 4a8b8204f4..c39f482fd2 100644
--- a/src/com/android/settings/notification/PulseNotificationPreferenceController.java
+++ b/src/com/android/settings/notification/PulseNotificationPreferenceController.java
@@ -24,33 +24,28 @@ import android.os.Handler;
import android.provider.Settings;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
-import android.support.v7.preference.TwoStatePreference;
-import android.util.Log;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settings.core.TogglePreferenceController;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;
import static android.provider.Settings.System.NOTIFICATION_LIGHT_PULSE;
-public class PulseNotificationPreferenceController extends AbstractPreferenceController
- implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener,
- LifecycleObserver, OnResume, OnPause {
+public class PulseNotificationPreferenceController extends TogglePreferenceController
+ implements OnResume, OnPause {
- private static final String TAG = "PulseNotifPrefContr";
- private static final String KEY_NOTIFICATION_PULSE = "notification_pulse";
+ private static final int ON = 1;
+ private static final int OFF = 0;
private SettingObserver mSettingObserver;
- public PulseNotificationPreferenceController(Context context) {
- super(context);
+ public PulseNotificationPreferenceController(Context context, String key) {
+ super(context, key);
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
- Preference preference = screen.findPreference(KEY_NOTIFICATION_PULSE);
+ Preference preference = screen.findPreference(getPreferenceKey());
if (preference != null) {
mSettingObserver = new SettingObserver(preference);
}
@@ -71,32 +66,22 @@ public class PulseNotificationPreferenceController extends AbstractPreferenceCon
}
@Override
- public String getPreferenceKey() {
- return KEY_NOTIFICATION_PULSE;
+ public int getAvailabilityStatus() {
+ return mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_intrusiveNotificationLed) ? AVAILABLE
+ : DISABLED_UNSUPPORTED;
}
@Override
- public boolean isAvailable() {
- return mContext.getResources()
- .getBoolean(com.android.internal.R.bool.config_intrusiveNotificationLed);
+ public boolean isChecked() {
+ return Settings.System.getInt(mContext.getContentResolver(), NOTIFICATION_LIGHT_PULSE, OFF)
+ == ON;
}
@Override
- public void updateState(Preference preference) {
- try {
- final boolean checked = Settings.System.getInt(mContext.getContentResolver(),
- NOTIFICATION_LIGHT_PULSE) == 1;
- ((TwoStatePreference) preference).setChecked(checked);
- } catch (Settings.SettingNotFoundException snfe) {
- Log.e(TAG, NOTIFICATION_LIGHT_PULSE + " not found");
- }
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final boolean val = (Boolean) newValue;
- return Settings.System.putInt(mContext.getContentResolver(),
- NOTIFICATION_LIGHT_PULSE, val ? 1 : 0);
+ public boolean setChecked(boolean isChecked) {
+ return Settings.System.putInt(mContext.getContentResolver(), NOTIFICATION_LIGHT_PULSE,
+ isChecked ? ON : OFF);
}
class SettingObserver extends ContentObserver {
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index 653581221a..287c57f375 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -37,11 +37,13 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.PreferenceCategoryController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class SoundSettings extends DashboardFragment {
private static final String TAG = "SoundSettings";
diff --git a/src/com/android/settings/notification/ZenAutomaticRuleHeaderPreferenceController.java b/src/com/android/settings/notification/ZenAutomaticRuleHeaderPreferenceController.java
index 9eab8bb182..b4ca87e12a 100644
--- a/src/com/android/settings/notification/ZenAutomaticRuleHeaderPreferenceController.java
+++ b/src/com/android/settings/notification/ZenAutomaticRuleHeaderPreferenceController.java
@@ -75,7 +75,7 @@ public class ZenAutomaticRuleHeaderPreferenceController extends AbstractZenModeP
.newInstance(mFragment.getActivity(), mFragment,
pref.findViewById(R.id.entity_header));
- mController.setEditZenRuleNameListener(new View.OnClickListener() {
+ mController.setEditListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ZenRuleNameDialog.show(mFragment, mRule.getName(), null,
@@ -89,7 +89,7 @@ public class ZenAutomaticRuleHeaderPreferenceController extends AbstractZenModeP
.setPackageName(mRule.getOwner().getPackageName())
.setUid(mContext.getUserId())
.setHasAppInfoLink(false)
- .setButtonActions(EntityHeaderController.ActionType.ACTION_DND_RULE_PREFERENCE,
+ .setButtonActions(EntityHeaderController.ActionType.ACTION_EDIT_PREFERENCE,
EntityHeaderController.ActionType.ACTION_NONE)
.done(mFragment.getActivity(), mContext);
diff --git a/src/com/android/settings/notification/ZenModeAutomationSettings.java b/src/com/android/settings/notification/ZenModeAutomationSettings.java
index 1bb6fc678c..74bc93de07 100644
--- a/src/com/android/settings/notification/ZenModeAutomationSettings.java
+++ b/src/com/android/settings/notification/ZenModeAutomationSettings.java
@@ -29,10 +29,12 @@ import com.android.settings.utils.ManagedServiceSettings;
import com.android.settings.utils.ZenServiceListing;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
+@SearchIndexable
public class ZenModeAutomationSettings extends ZenModeSettingsBase {
protected final ManagedServiceSettings.Config CONFIG = getConditionProviderConfig();
diff --git a/src/com/android/settings/notification/ZenModeBehaviorSettings.java b/src/com/android/settings/notification/ZenModeBehaviorSettings.java
index 31542c35ed..5a084e88e2 100644
--- a/src/com/android/settings/notification/ZenModeBehaviorSettings.java
+++ b/src/com/android/settings/notification/ZenModeBehaviorSettings.java
@@ -25,10 +25,12 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
+@SearchIndexable
public class ZenModeBehaviorSettings extends ZenModeSettingsBase implements Indexable {
@Override
diff --git a/src/com/android/settings/notification/ZenModeBlockedEffectsSettings.java b/src/com/android/settings/notification/ZenModeBlockedEffectsSettings.java
index 8b0cf5f072..bda98ea2c1 100644
--- a/src/com/android/settings/notification/ZenModeBlockedEffectsSettings.java
+++ b/src/com/android/settings/notification/ZenModeBlockedEffectsSettings.java
@@ -35,10 +35,12 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
+@SearchIndexable
public class ZenModeBlockedEffectsSettings extends ZenModeSettingsBase implements Indexable {
@Override
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index 1f0dcc2836..b3c93ebf54 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -33,6 +33,7 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
@@ -40,6 +41,7 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+@SearchIndexable
public class ZenModeSettings extends ZenModeSettingsBase {
private static final String KEY_SOUND = "zen_effect_sound";
@Override
diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java
index 21ee360e98..c2cf87f58a 100644
--- a/src/com/android/settings/print/PrintSettingsFragment.java
+++ b/src/com/android/settings/print/PrintSettingsFragment.java
@@ -56,6 +56,7 @@ import com.android.settings.R;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.utils.ProfileSettingsPreferenceFragment;
+import com.android.settingslib.search.SearchIndexable;
import java.text.DateFormat;
import java.util.ArrayList;
@@ -64,6 +65,7 @@ import java.util.List;
/**
* Fragment with the top level print settings.
*/
+@SearchIndexable
public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment
implements Indexable, OnClickListener {
public static final String TAG = "PrintSettingsFragment";
diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java
index cbe49f8c79..a7ad92b8d0 100644
--- a/src/com/android/settings/search/SearchFeatureProvider.java
+++ b/src/com/android/settings/search/SearchFeatureProvider.java
@@ -24,6 +24,7 @@ import android.content.Intent;
import android.widget.Toolbar;
import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.search.SearchIndexableResources;
/**
* FeatureProvider for Settings Search
diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.java b/src/com/android/settings/search/SearchFeatureProviderImpl.java
index 78c47edf04..2e68f90900 100644
--- a/src/com/android/settings/search/SearchFeatureProviderImpl.java
+++ b/src/com/android/settings/search/SearchFeatureProviderImpl.java
@@ -24,6 +24,8 @@ import android.text.TextUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.indexing.IndexData;
+import com.android.settingslib.search.SearchIndexableResources;
+import com.android.settingslib.search.SearchIndexableResourcesMobile;
import java.util.Locale;
@@ -76,7 +78,7 @@ public class SearchFeatureProviderImpl implements SearchFeatureProvider {
@Override
public SearchIndexableResources getSearchIndexableResources() {
if (mSearchIndexableResources == null) {
- mSearchIndexableResources = new SearchIndexableResourcesImpl();
+ mSearchIndexableResources = new SearchIndexableResourcesMobile();
}
return mSearchIndexableResources;
}
diff --git a/src/com/android/settings/search/SearchIndexableResourcesImpl.java b/src/com/android/settings/search/SearchIndexableResourcesImpl.java
deleted file mode 100644
index 3b58c64ed3..0000000000
--- a/src/com/android/settings/search/SearchIndexableResourcesImpl.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (C) 2014 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.search;
-
-import android.support.annotation.VisibleForTesting;
-
-import com.android.settings.DateTimeSettings;
-import com.android.settings.DisplaySettings;
-import com.android.settings.LegalSettings;
-import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment;
-import com.android.settings.connecteddevice.PreviouslyConnectedDeviceDashboardFragment;
-import com.android.settings.connecteddevice.BluetoothDashboardFragment;
-import com.android.settings.datausage.DataUsageSummaryLegacy;
-import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment;
-import com.android.settings.accessibility.AccessibilitySettings;
-import com.android.settings.accessibility.AccessibilityShortcutPreferenceFragment;
-import com.android.settings.accessibility.MagnificationPreferenceFragment;
-import com.android.settings.accessibility.VibrationSettings;
-import com.android.settings.accounts.AccountDashboardFragment;
-import com.android.settings.applications.AppAndNotificationDashboardFragment;
-import com.android.settings.applications.DefaultAppSettings;
-import com.android.settings.applications.SpecialAccessSettings;
-import com.android.settings.applications.assist.ManageAssist;
-import com.android.settings.backup.BackupSettingsActivity;
-import com.android.settings.backup.BackupSettingsFragment;
-import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
-import com.android.settings.connecteddevice.usb.UsbDetailsFragment;
-import com.android.settings.datausage.DataUsageSummary;
-import com.android.settings.deletionhelper.AutomaticStorageManagerSettings;
-import com.android.settings.development.DevelopmentSettingsDashboardFragment;
-import com.android.settings.deviceinfo.DeviceInfoSettings;
-import com.android.settings.deviceinfo.StorageDashboardFragment;
-import com.android.settings.deviceinfo.StorageSettings;
-import com.android.settings.display.AmbientDisplaySettings;
-import com.android.settings.display.AutoBrightnessSettings;
-import com.android.settings.display.NightDisplaySettings;
-import com.android.settings.display.ScreenZoomSettings;
-import com.android.settings.dream.DreamSettings;
-import com.android.settings.enterprise.EnterprisePrivacySettings;
-import com.android.settings.fuelgauge.PowerUsageAdvanced;
-import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
-import com.android.settings.fuelgauge.PowerUsageSummary;
-import com.android.settings.fuelgauge.SmartBatterySettings;
-import com.android.settings.gestures.AssistGestureSettings;
-import com.android.settings.gestures.DoubleTapPowerSettings;
-import com.android.settings.gestures.DoubleTapScreenSettings;
-import com.android.settings.gestures.DoubleTwistGestureSettings;
-import com.android.settings.gestures.SwipeUpGestureSettings;
-import com.android.settings.gestures.GestureSettings;
-import com.android.settings.gestures.PickupGestureSettings;
-import com.android.settings.gestures.SwipeToNotificationSettings;
-import com.android.settings.inputmethod.AvailableVirtualKeyboardFragment;
-import com.android.settings.inputmethod.PhysicalKeyboardFragment;
-import com.android.settings.inputmethod.VirtualKeyboardFragment;
-import com.android.settings.language.LanguageAndInputSettings;
-import com.android.settings.location.LocationSettings;
-import com.android.settings.location.RecentLocationRequestSeeAllFragment;
-import com.android.settings.location.ScanningSettings;
-import com.android.settings.network.NetworkDashboardFragment;
-import com.android.settings.nfc.PaymentSettings;
-import com.android.settings.notification.ConfigureNotificationSettings;
-import com.android.settings.notification.SoundSettings;
-import com.android.settings.notification.ZenModeAutomationSettings;
-import com.android.settings.notification.ZenModeBehaviorSettings;
-import com.android.settings.notification.ZenModeBlockedEffectsSettings;
-import com.android.settings.notification.ZenModeSettings;
-import com.android.settings.print.PrintSettingsFragment;
-import com.android.settings.security.EncryptionAndCredential;
-import com.android.settings.security.LockscreenDashboardFragment;
-import com.android.settings.security.ScreenPinningSettings;
-import com.android.settings.security.SecuritySettings;
-import com.android.settings.security.screenlock.ScreenLockSettings;
-import com.android.settings.sim.SimSettings;
-import com.android.settings.support.SupportDashboardActivity;
-import com.android.settings.system.ResetDashboardFragment;
-import com.android.settings.system.SystemDashboardFragment;
-import com.android.settings.tts.TextToSpeechSettings;
-import com.android.settings.tts.TtsEnginePreferenceFragment;
-import com.android.settings.users.UserSettings;
-import com.android.settings.wallpaper.WallpaperTypeSettings;
-import com.android.settings.wfd.WifiDisplaySettings;
-import com.android.settings.wifi.ConfigureWifiSettings;
-import com.android.settings.wifi.WifiSettings;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Set;
-
-public class SearchIndexableResourcesImpl implements SearchIndexableResources {
-
- private final Set<Class> sProviders = new HashSet<>();
-
- @VisibleForTesting
- void addIndex(Class indexClass) {
- sProviders.add(indexClass);
- }
-
- public SearchIndexableResourcesImpl() {
- addIndex(WifiSettings.class);
- addIndex(NetworkDashboardFragment.class);
- addIndex(ConfigureWifiSettings.class);
- addIndex(SimSettings.class);
- addIndex(DataUsageSummary.class);
- addIndex(DataUsageSummaryLegacy.class);
- addIndex(ScreenZoomSettings.class);
- addIndex(DisplaySettings.class);
- addIndex(AutoBrightnessSettings.class);
- addIndex(AmbientDisplaySettings.class);
- addIndex(WallpaperTypeSettings.class);
- addIndex(AppAndNotificationDashboardFragment.class);
- addIndex(SoundSettings.class);
- addIndex(ZenModeSettings.class);
- addIndex(StorageSettings.class);
- addIndex(PowerUsageAdvanced.class);
- addIndex(DefaultAppSettings.class);
- addIndex(ManageAssist.class);
- addIndex(SpecialAccessSettings.class);
- addIndex(UserSettings.class);
- addIndex(AssistGestureSettings.class);
- addIndex(PickupGestureSettings.class);
- addIndex(DoubleTapScreenSettings.class);
- addIndex(DoubleTapPowerSettings.class);
- addIndex(DoubleTwistGestureSettings.class);
- addIndex(SwipeUpGestureSettings.class);
- addIndex(SwipeToNotificationSettings.class);
- addIndex(GestureSettings.class);
- addIndex(LanguageAndInputSettings.class);
- addIndex(LocationSettings.class);
- addIndex(ScanningSettings.class);
- addIndex(SecuritySettings.class);
- addIndex(ScreenLockSettings.class);
- addIndex(EncryptionAndCredential.class);
- addIndex(ScreenPinningSettings.class);
- addIndex(AccountDashboardFragment.class);
- addIndex(VirtualKeyboardFragment.class);
- addIndex(AvailableVirtualKeyboardFragment.class);
- addIndex(PhysicalKeyboardFragment.class);
- addIndex(BackupSettingsActivity.class);
- addIndex(BackupSettingsFragment.class);
- addIndex(DateTimeSettings.class);
- addIndex(AccessibilitySettings.class);
- addIndex(PrintSettingsFragment.class);
- addIndex(DevelopmentSettingsDashboardFragment.class);
- addIndex(DeviceInfoSettings.class);
- addIndex(LegalSettings.class);
- addIndex(SystemDashboardFragment.class);
- addIndex(ResetDashboardFragment.class);
- addIndex(StorageDashboardFragment.class);
- addIndex(ConnectedDeviceDashboardFragment.class);
- addIndex(AdvancedConnectedDeviceDashboardFragment.class);
- addIndex(EnterprisePrivacySettings.class);
- addIndex(PaymentSettings.class);
- addIndex(TextToSpeechSettings.class);
- addIndex(TtsEnginePreferenceFragment.class);
- addIndex(MagnificationPreferenceFragment.class);
- addIndex(AccessibilityShortcutPreferenceFragment.class);
- addIndex(DreamSettings.class);
- addIndex(SupportDashboardActivity.class);
- addIndex(AutomaticStorageManagerSettings.class);
- addIndex(ConfigureNotificationSettings.class);
- addIndex(PowerUsageSummary.class);
- addIndex(BatterySaverSettings.class);
- addIndex(LockscreenDashboardFragment.class);
- addIndex(UsbDetailsFragment.class);
- addIndex(WifiDisplaySettings.class);
- addIndex(ZenModeBehaviorSettings.class);
- addIndex(ZenModeBlockedEffectsSettings.class);
- addIndex(ZenModeAutomationSettings.class);
- addIndex(NightDisplaySettings.class);
- addIndex(SmartBatterySettings.class);
- addIndex(MyDeviceInfoFragment.class);
- addIndex(VibrationSettings.class);
- addIndex(RecentLocationRequestSeeAllFragment.class);
- addIndex(PreviouslyConnectedDeviceDashboardFragment.class);
- addIndex(BluetoothDashboardFragment.class);
- }
-
- @Override
- public Collection<Class> getProviderValues() {
- return sProviders;
- }
-}
diff --git a/src/com/android/settings/security/EncryptionAndCredential.java b/src/com/android/settings/security/EncryptionAndCredential.java
index 66ae20b08c..9096486466 100644
--- a/src/com/android/settings/security/EncryptionAndCredential.java
+++ b/src/com/android/settings/security/EncryptionAndCredential.java
@@ -30,6 +30,7 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.PreferenceCategoryController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
@@ -38,6 +39,7 @@ import java.util.List;
/**
* Encryption and Credential settings.
*/
+@SearchIndexable
public class EncryptionAndCredential extends DashboardFragment {
private static final String TAG = "EncryptionAndCredential";
diff --git a/src/com/android/settings/security/LockdownButtonPreferenceController.java b/src/com/android/settings/security/LockdownButtonPreferenceController.java
index 89605020b3..dd6e0d0f7c 100644
--- a/src/com/android/settings/security/LockdownButtonPreferenceController.java
+++ b/src/com/android/settings/security/LockdownButtonPreferenceController.java
@@ -19,8 +19,6 @@ package com.android.settings.security;
import android.content.Context;
import android.os.UserHandle;
import android.provider.Settings;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.TwoStatePreference;
import com.android.internal.widget.LockPatternUtils;
import com.android.settings.core.BasePreferenceController;
@@ -28,12 +26,10 @@ import com.android.settings.core.TogglePreferenceController;
public class LockdownButtonPreferenceController extends TogglePreferenceController {
- private static final String KEY_LOCKDOWN_ENALBED = "security_setting_lockdown_enabled";
-
private final LockPatternUtils mLockPatternUtils;
- public LockdownButtonPreferenceController(Context context) {
- super(context, KEY_LOCKDOWN_ENALBED);
+ public LockdownButtonPreferenceController(Context context, String key) {
+ super(context, key);
mLockPatternUtils = new LockPatternUtils(context);
}
diff --git a/src/com/android/settings/security/LockscreenDashboardFragment.java b/src/com/android/settings/security/LockscreenDashboardFragment.java
index 21b4c921fc..209eb0179b 100644
--- a/src/com/android/settings/security/LockscreenDashboardFragment.java
+++ b/src/com/android/settings/security/LockscreenDashboardFragment.java
@@ -28,6 +28,7 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.users.AddUserWhenLockedPreferenceController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
@@ -36,6 +37,7 @@ import java.util.List;
/**
* Settings screen for lock screen preference
*/
+@SearchIndexable
public class LockscreenDashboardFragment extends DashboardFragment
implements OwnerInfoPreferenceController.OwnerInfoCallback {
@@ -91,7 +93,6 @@ public class LockscreenDashboardFragment extends DashboardFragment
mOwnerInfoPreferenceController =
new OwnerInfoPreferenceController(context, this, lifecycle);
controllers.add(mOwnerInfoPreferenceController);
- controllers.add(new LockdownButtonPreferenceController(context));
return controllers;
}
@@ -122,7 +123,6 @@ public class LockscreenDashboardFragment extends DashboardFragment
KEY_ADD_USER_FROM_LOCK_SCREEN, null /* lifecycle */));
controllers.add(new OwnerInfoPreferenceController(
context, null /* fragment */, null /* lifecycle */));
- controllers.add(new LockdownButtonPreferenceController(context));
return controllers;
}
diff --git a/src/com/android/settings/security/ScreenPinningSettings.java b/src/com/android/settings/security/ScreenPinningSettings.java
index 6e4856ee42..f7efa01777 100644
--- a/src/com/android/settings/security/ScreenPinningSettings.java
+++ b/src/com/android/settings/security/ScreenPinningSettings.java
@@ -40,6 +40,7 @@ import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.widget.SwitchBar;
+import com.android.settingslib.search.SearchIndexable;
import java.util.Arrays;
import java.util.List;
@@ -47,6 +48,7 @@ import java.util.List;
/**
* Screen pinning settings.
*/
+@SearchIndexable
public class ScreenPinningSettings extends SettingsPreferenceFragment
implements SwitchBar.OnSwitchChangeListener, Indexable {
diff --git a/src/com/android/settings/security/SecuritySettings.java b/src/com/android/settings/security/SecuritySettings.java
index 0839450a93..652b66da29 100644
--- a/src/com/android/settings/security/SecuritySettings.java
+++ b/src/com/android/settings/security/SecuritySettings.java
@@ -41,10 +41,12 @@ import com.android.settings.security.trustagent.TrustAgentListPreferenceControll
import com.android.settings.widget.PreferenceCategoryController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
+@SearchIndexable
public class SecuritySettings extends DashboardFragment {
private static final String TAG = "SecuritySettings";
diff --git a/src/com/android/settings/security/screenlock/ScreenLockSettings.java b/src/com/android/settings/security/screenlock/ScreenLockSettings.java
index 2fa4124f95..6c6e862f63 100644
--- a/src/com/android/settings/security/screenlock/ScreenLockSettings.java
+++ b/src/com/android/settings/security/screenlock/ScreenLockSettings.java
@@ -30,10 +30,12 @@ import com.android.settings.search.Indexable;
import com.android.settings.security.OwnerInfoPreferenceController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
+@SearchIndexable
public class ScreenLockSettings extends DashboardFragment
implements OwnerInfoPreferenceController.OwnerInfoCallback {
diff --git a/src/com/android/settings/sim/SimSettings.java b/src/com/android/settings/sim/SimSettings.java
index 3d6bfb162a..2211d47947 100644
--- a/src/com/android/settings/sim/SimSettings.java
+++ b/src/com/android/settings/sim/SimSettings.java
@@ -42,10 +42,12 @@ import com.android.settings.RestrictedSettingsFragment;
import com.android.settings.Utils;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
+@SearchIndexable
public class SimSettings extends RestrictedSettingsFragment implements Indexable {
private static final String TAG = "SimSettings";
private static final boolean DBG = false;
diff --git a/src/com/android/settings/support/SupportDashboardActivity.java b/src/com/android/settings/support/SupportDashboardActivity.java
index e829577cc3..ed7e76ce9b 100644
--- a/src/com/android/settings/support/SupportDashboardActivity.java
+++ b/src/com/android/settings/support/SupportDashboardActivity.java
@@ -26,6 +26,7 @@ import com.android.settings.overlay.SupportFeatureProvider;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
@@ -33,6 +34,7 @@ import java.util.List;
/**
* Trampoline activity that decides which version of support should be shown to the user.
*/
+@SearchIndexable
public class SupportDashboardActivity extends Activity implements Indexable {
@Override
diff --git a/src/com/android/settings/system/ResetDashboardFragment.java b/src/com/android/settings/system/ResetDashboardFragment.java
index 03543cc498..153177a4ac 100644
--- a/src/com/android/settings/system/ResetDashboardFragment.java
+++ b/src/com/android/settings/system/ResetDashboardFragment.java
@@ -28,10 +28,12 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
+@SearchIndexable
public class ResetDashboardFragment extends DashboardFragment {
private static final String TAG = "ResetDashboardFragment";
diff --git a/src/com/android/settings/system/SystemDashboardFragment.java b/src/com/android/settings/system/SystemDashboardFragment.java
index 1556659fa8..8258f20e7a 100644
--- a/src/com/android/settings/system/SystemDashboardFragment.java
+++ b/src/com/android/settings/system/SystemDashboardFragment.java
@@ -28,10 +28,12 @@ import com.android.settings.backup.BackupSettingsActivityPreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
+import com.android.settingslib.search.SearchIndexable;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class SystemDashboardFragment extends DashboardFragment {
private static final String TAG = "SystemDashboardFrag";
diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java
index 9bb7958e23..c6b20b0ee8 100644
--- a/src/com/android/settings/tts/TextToSpeechSettings.java
+++ b/src/com/android/settings/tts/TextToSpeechSettings.java
@@ -46,6 +46,7 @@ import com.android.settings.search.Indexable;
import com.android.settings.widget.ActionButtonPreference;
import com.android.settings.widget.GearPreference;
import com.android.settings.widget.SeekBarPreference;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
@@ -58,6 +59,7 @@ import java.util.MissingResourceException;
import java.util.Objects;
import java.util.Set;
+@SearchIndexable
public class TextToSpeechSettings extends SettingsPreferenceFragment
implements Preference.OnPreferenceChangeListener,
GearPreference.OnGearClickListener, Indexable {
diff --git a/src/com/android/settings/tts/TtsEnginePreferenceFragment.java b/src/com/android/settings/tts/TtsEnginePreferenceFragment.java
index 8e6cfecb8f..81afe8d833 100644
--- a/src/com/android/settings/tts/TtsEnginePreferenceFragment.java
+++ b/src/com/android/settings/tts/TtsEnginePreferenceFragment.java
@@ -15,12 +15,15 @@ import android.util.Log;
import static android.provider.Settings.Secure.TTS_DEFAULT_SYNTH;
import com.android.settings.search.Indexable;
import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
+
import android.content.Context;
import android.provider.SearchIndexableResource;
import java.util.List;
import java.util.Arrays;
+@SearchIndexable
public class TtsEnginePreferenceFragment extends SettingsPreferenceFragment //implements
implements RadioButtonGroupState, Indexable {
private static final String TAG = "TtsEnginePrefFragment";
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index bc02b3003f..3b1a4de1c2 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -73,6 +73,7 @@ import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.drawable.CircleFramedDrawable;
+import com.android.settingslib.search.SearchIndexable;
import java.io.IOException;
import java.io.InputStream;
@@ -89,6 +90,7 @@ import java.util.List;
* The first one is always the current user.
* Owner is the primary user.
*/
+@SearchIndexable
public class UserSettings extends SettingsPreferenceFragment
implements OnPreferenceClickListener, OnClickListener, DialogInterface.OnDismissListener,
EditUserInfoController.OnContentChangedCallback, Indexable {
diff --git a/src/com/android/settings/wallpaper/WallpaperTypePreferenceController.java b/src/com/android/settings/wallpaper/WallpaperTypePreferenceController.java
new file mode 100644
index 0000000000..5b8d723987
--- /dev/null
+++ b/src/com/android/settings/wallpaper/WallpaperTypePreferenceController.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2018 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.wallpaper;
+
+import android.app.Fragment;
+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.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class WallpaperTypePreferenceController extends BasePreferenceController
+ implements LifecycleObserver, OnStart {
+ private Fragment mParentFragment;
+ private PreferenceScreen mScreen;
+
+ public WallpaperTypePreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ public void setParentFragment(Fragment parentFragment) {
+ mParentFragment = parentFragment;
+ }
+
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mScreen = screen;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ if (preference.getIntent() == null) {
+ return super.handlePreferenceTreeClick(preference);
+ }
+ mParentFragment.startActivity(preference.getIntent());
+ mParentFragment.getActivity().finish();
+ return true;
+ }
+
+ @Override
+ public void onStart() {
+ populateWallpaperTypes();
+ }
+
+ private void populateWallpaperTypes() {
+ // Search for activities that satisfy the ACTION_SET_WALLPAPER action
+ final Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER);
+ final PackageManager pm = mContext.getPackageManager();
+ final List<ResolveInfo> rList = pm.queryIntentActivities(intent,
+ PackageManager.MATCH_DEFAULT_ONLY);
+
+ removeUselessExistingPreference(rList);
+ mScreen.setOrderingAsAdded(false);
+ // Add Preference items for each of the matching activities
+ for (ResolveInfo info : rList) {
+ final String packageName = info.activityInfo.packageName;
+ Preference pref = mScreen.findPreference(packageName);
+ if (pref == null) {
+ pref = new Preference(mScreen.getContext());
+ }
+ final Intent prefIntent = new Intent(intent).addFlags(
+ Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ prefIntent.setComponent(new ComponentName(packageName, info.activityInfo.name));
+ pref.setIntent(prefIntent);
+ pref.setKey(packageName);
+ CharSequence label = info.loadLabel(pm);
+ if (label == null) {
+ label = packageName;
+ }
+ pref.setTitle(label);
+ pref.setIcon(info.loadIcon(pm));
+ mScreen.addPreference(pref);
+ }
+ }
+
+ private void removeUselessExistingPreference(List<ResolveInfo> rList) {
+ final int count = mScreen.getPreferenceCount();
+ if (count <= 0) {
+ return;
+ }
+ for (int i = count - 1; i >= 0; i--) {
+ final Preference pref = mScreen.getPreference(i);
+ final List<ResolveInfo> result = rList.stream().filter(
+ rInfo -> TextUtils.equals(pref.getKey(),
+ rInfo.activityInfo.packageName)).collect(Collectors.toList());
+ if (result.isEmpty()) {
+ mScreen.removePreference(pref);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/com/android/settings/wallpaper/WallpaperTypeSettings.java b/src/com/android/settings/wallpaper/WallpaperTypeSettings.java
index 1a1e1214fa..ca42ddaef4 100644
--- a/src/com/android/settings/wallpaper/WallpaperTypeSettings.java
+++ b/src/com/android/settings/wallpaper/WallpaperTypeSettings.java
@@ -16,26 +16,24 @@
package com.android.settings.wallpaper;
-import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
-import android.os.Bundle;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
-public class WallpaperTypeSettings extends SettingsPreferenceFragment implements Indexable {
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
+public class WallpaperTypeSettings extends DashboardFragment {
+ private static final String TAG = "WallpaperTypeSettings";
@Override
public int getMetricsCategory() {
@@ -48,52 +46,26 @@ public class WallpaperTypeSettings extends SettingsPreferenceFragment implements
}
@Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- addPreferencesFromResource(R.xml.wallpaper_settings);
- populateWallpaperTypes();
+ protected String getLogTag() {
+ return TAG;
}
- private void populateWallpaperTypes() {
- // Search for activities that satisfy the ACTION_SET_WALLPAPER action
- final Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER);
- final PackageManager pm = getPackageManager();
- final List<ResolveInfo> rList = pm.queryIntentActivities(intent,
- PackageManager.MATCH_DEFAULT_ONLY);
-
- final PreferenceScreen parent = getPreferenceScreen();
- parent.setOrderingAsAdded(false);
- // Add Preference items for each of the matching activities
- for (ResolveInfo info : rList) {
- Preference pref = new Preference(getPrefContext());
- Intent prefIntent = new Intent(intent).addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
- prefIntent.setComponent(new ComponentName(
- info.activityInfo.packageName, info.activityInfo.name));
- pref.setIntent(prefIntent);
- CharSequence label = info.loadLabel(pm);
- if (label == null) label = info.activityInfo.packageName;
- pref.setTitle(label);
- pref.setIcon(info.loadIcon(pm));
- parent.addPreference(pref);
- }
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.wallpaper_settings;
}
@Override
- public boolean onPreferenceTreeClick(Preference preference) {
- if (preference.getIntent() == null) {
- return super.onPreferenceTreeClick(preference);
- }
- startActivity(preference.getIntent());
- finish();
- return true;
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ use(WallpaperTypePreferenceController.class).setParentFragment(this);
}
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
- final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
+ final List<SearchIndexableRaw> result = new ArrayList<>();
final Intent intent = new Intent(Intent.ACTION_SET_WALLPAPER);
final PackageManager pm = context.getPackageManager();
@@ -108,9 +80,10 @@ public class WallpaperTypeSettings extends SettingsPreferenceFragment implements
continue;
}
CharSequence label = info.loadLabel(pm);
- if (label == null) label = info.activityInfo.packageName;
-
- SearchIndexableRaw data = new SearchIndexableRaw(context);
+ if (label == null) {
+ label = info.activityInfo.packageName;
+ }
+ final SearchIndexableRaw data = new SearchIndexableRaw(context);
data.title = label.toString();
data.key = "wallpaper_type_settings";
data.screenTitle = context.getResources().getString(
diff --git a/src/com/android/settings/wfd/WifiDisplaySettings.java b/src/com/android/settings/wfd/WifiDisplaySettings.java
index 8f42389a8c..9a8ac70c4a 100755
--- a/src/com/android/settings/wfd/WifiDisplaySettings.java
+++ b/src/com/android/settings/wfd/WifiDisplaySettings.java
@@ -66,6 +66,7 @@ import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
@@ -78,6 +79,7 @@ import java.util.List;
* on the system. In that case, the enable option will not be shown but other
* remote display routes will continue to be made available.
*/
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public final class WifiDisplaySettings extends SettingsPreferenceFragment implements Indexable {
private static final String TAG = "WifiDisplaySettings";
private static final boolean DEBUG = false;
diff --git a/src/com/android/settings/widget/DonutView.java b/src/com/android/settings/widget/DonutView.java
index c5ac40bde7..86024bf3cc 100644
--- a/src/com/android/settings/widget/DonutView.java
+++ b/src/com/android/settings/widget/DonutView.java
@@ -70,7 +70,8 @@ public class DonutView extends View {
public DonutView(Context context, AttributeSet attrs) {
super(context, attrs);
mMeterBackgroundColor = context.getColor(R.color.meter_background_color);
- mMeterConsumedColor = Utils.getDefaultColor(mContext, R.color.meter_consumed_color);
+ mMeterConsumedColor = Utils.getColorStateListDefaultColor(mContext,
+ R.color.meter_consumed_color);
boolean applyColorAccent = true;
Resources resources = context.getResources();
mStrokeWidth = resources.getDimension(R.dimen.storage_donut_thickness);
@@ -107,7 +108,7 @@ public class DonutView extends View {
if (applyColorAccent) {
final ColorFilter mAccentColorFilter =
new PorterDuffColorFilter(
- Utils.getColorAttr(context, android.R.attr.colorAccent),
+ Utils.getColorAttrDefaultColor(context, android.R.attr.colorAccent),
PorterDuff.Mode.SRC_IN);
mBackgroundCircle.setColorFilter(mAccentColorFilter);
mFilledArc.setColorFilter(mAccentColorFilter);
diff --git a/src/com/android/settings/widget/EntityHeaderController.java b/src/com/android/settings/widget/EntityHeaderController.java
index 5131159f14..f9d16cde10 100644
--- a/src/com/android/settings/widget/EntityHeaderController.java
+++ b/src/com/android/settings/widget/EntityHeaderController.java
@@ -61,13 +61,13 @@ public class EntityHeaderController {
@IntDef({ActionType.ACTION_NONE,
ActionType.ACTION_APP_PREFERENCE,
ActionType.ACTION_NOTIF_PREFERENCE,
- ActionType.ACTION_DND_RULE_PREFERENCE,})
+ ActionType.ACTION_EDIT_PREFERENCE,})
@Retention(RetentionPolicy.SOURCE)
public @interface ActionType {
int ACTION_NONE = 0;
int ACTION_APP_PREFERENCE = 1;
int ACTION_NOTIF_PREFERENCE = 2;
- int ACTION_DND_RULE_PREFERENCE = 3;
+ int ACTION_EDIT_PREFERENCE = 3;
}
public static final String PREF_KEY_APP_HEADER = "pref_app_header";
@@ -100,7 +100,7 @@ public class EntityHeaderController {
private boolean mIsInstantApp;
- private View.OnClickListener mEditRuleNameOnClickListener;
+ private View.OnClickListener mEditOnClickListener;
/**
* Creates a new instance of the controller.
@@ -227,8 +227,8 @@ public class EntityHeaderController {
return this;
}
- public EntityHeaderController setEditZenRuleNameListener(View.OnClickListener listener) {
- this.mEditRuleNameOnClickListener = listener;
+ public EntityHeaderController setEditListener(View.OnClickListener listener) {
+ this.mEditOnClickListener = listener;
return this;
}
@@ -322,7 +322,8 @@ public class EntityHeaderController {
return this;
}
actionBar.setBackgroundDrawable(
- new ColorDrawable(Utils.getColorAttr(activity, android.R.attr.colorSecondary)));
+ new ColorDrawable(
+ Utils.getColorAttrDefaultColor(activity, android.R.attr.colorPrimary)));
actionBar.setElevation(0);
if (mRecyclerView != null && mLifecycle != null) {
ActionBarShadowController.attachToRecyclerView(mActivity, mLifecycle, mRecyclerView);
@@ -344,13 +345,13 @@ public class EntityHeaderController {
return;
}
switch (action) {
- case ActionType.ACTION_DND_RULE_PREFERENCE: {
- if (mEditRuleNameOnClickListener == null) {
+ case ActionType.ACTION_EDIT_PREFERENCE: {
+ if (mEditOnClickListener == null) {
button.setVisibility(View.GONE);
} else {
button.setImageResource(R.drawable.ic_mode_edit);
button.setVisibility(View.VISIBLE);
- button.setOnClickListener(mEditRuleNameOnClickListener);
+ button.setOnClickListener(mEditOnClickListener);
}
return;
}
diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java
index 818b295e0b..e0e63cc3c8 100644
--- a/src/com/android/settings/wifi/ConfigureWifiSettings.java
+++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java
@@ -31,11 +31,13 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.wifi.p2p.WifiP2pPreferenceController;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+@SearchIndexable
public class ConfigureWifiSettings extends DashboardFragment {
private static final String TAG = "ConfigureWifiSettings";
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 7a7caf47ef..e2a7f25f1b 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -65,6 +65,7 @@ import com.android.settings.widget.SummaryUpdater.OnSummaryChangeListener;
import com.android.settings.widget.SwitchBarController;
import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.AccessPoint.AccessPointListener;
import com.android.settingslib.wifi.AccessPointPreference;
@@ -82,6 +83,7 @@ import java.util.List;
* The second is for Setup Wizard, with a simplified interface that hides the action bar
* and menus.
*/
+@SearchIndexable
public class WifiSettings extends RestrictedSettingsFragment
implements Indexable, WifiTracker.WifiListener, AccessPointListener,
WifiDialog.WifiDialogListener {