From 9ce4a1fcde76bc2894b4aeead9d0457abac92dac Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 15 Aug 2018 12:55:56 -0700 Subject: [PATCH 01/10] Use searchable="false" to suppress nonIndexables. When possible, remove or simplify getNonIndexable() logic in fragments, and use searchable="false" in xml to suppress index. Change-Id: I5bdf5bc7d5494a64cdd9e230a51321a4b210af69 Fixes: 112608186 Test: robotest and manual search --- .../accessibility_magnification_settings.xml | 10 +++--- res/xml/accessibility_settings.xml | 15 ++++++--- res/xml/configure_notification_settings.xml | 19 ++++++----- res/xml/connected_devices_advanced.xml | 6 ++-- res/xml/display_settings.xml | 10 +++--- res/xml/language_and_input.xml | 6 ++-- res/xml/location_settings.xml | 3 +- res/xml/my_device_info.xml | 3 +- res/xml/screen_lock_settings.xml | 4 ++- res/xml/security_lockscreen_settings.xml | 6 ++-- res/xml/tts_settings.xml | 4 ++- res/xml/virtual_keyboard_settings.xml | 4 ++- res/xml/wifi_tether_settings.xml | 11 ++++--- src/com/android/settings/DisplaySettings.java | 14 -------- .../accessibility/AccessibilitySettings.java | 20 ----------- .../MagnificationPreferenceFragment.java | 13 ++------ ...pSettingsActivityPreferenceController.java | 5 ++- ...ancedConnectedDeviceDashboardFragment.java | 3 -- .../AvailableMediaDeviceGroupController.java | 2 +- .../ConnectedDeviceDashboardFragment.java | 13 ++------ .../ConnectedDeviceGroupController.java | 2 +- .../usb/UsbDetailsFragment.java | 5 --- .../aboutphone/MyDeviceInfoFragment.java | 9 ----- .../AutoBrightnessPreferenceController.java | 2 +- .../dream/DreamEntryPreferenceController.java | 33 ------------------- .../fuelgauge/BatterySaverController.java | 2 +- .../settings/fuelgauge/PowerUsageSummary.java | 8 ----- ...stGestureSettingsPreferenceController.java | 11 +++---- .../inputmethod/VirtualKeyboardFragment.java | 11 ++----- .../language/LanguageAndInputSettings.java | 13 ++------ .../settings/location/LocationSettings.java | 13 ++------ .../ConfigureNotificationSettings.java | 3 -- .../ZenModeBlockedEffectsSettings.java | 6 ---- .../notification/ZenModeCallsSettings.java | 13 +++----- .../ZenModeMsgEventReminderSettings.java | 6 ---- .../ZenModeRestrictNotificationsSettings.java | 6 ---- .../security/LockscreenDashboardFragment.java | 2 -- .../screenlock/ScreenLockSettings.java | 13 ++------ .../system/ResetPreferenceController.java | 2 +- .../system/SystemDashboardFragment.java | 16 +++------ .../settings/tts/TextToSpeechSettings.java | 15 +++------ ...tingsActivityPreferenceControllerTest.java | 7 ++-- ...ailableMediaDeviceGroupControllerTest.java | 16 +++++---- .../ConnectedDeviceGroupControllerTest.java | 32 +++++++++--------- .../core/PreferenceXmlParserUtilsTest.java | 3 +- 45 files changed, 134 insertions(+), 286 deletions(-) delete mode 100644 src/com/android/settings/dream/DreamEntryPreferenceController.java diff --git a/res/xml/accessibility_magnification_settings.xml b/res/xml/accessibility_magnification_settings.xml index bac01bd901e..bb403948105 100644 --- a/res/xml/accessibility_magnification_settings.xml +++ b/res/xml/accessibility_magnification_settings.xml @@ -13,10 +13,12 @@ See the License for the specific language governing permissions and limitations under the License. --> - + + android:title="@string/tts_settings_title" + settings:searchable="false"/> + android:title="@string/title_font_size" + settings:searchable="false"/> + android:title="@string/screen_zoom_title" + settings:searchable="false"/> + android:title="@string/accessibility_autoclick_preference_title" + settings:searchable="false"/> + android:icon="@drawable/ic_daltonizer" + settings:searchable="false"/> + android:summary="@string/summary_placeholder" + settings:searchable="false"/> + settings:controller="com.android.settings.notification.PulseNotificationPreferenceController"/> + android:ringtoneType="notification"/> + settings:controller="com.android.settings.gestures.SwipeToNotificationPreferenceController"/> + settings:allowDividerAbove="false"/> + android:value="com.android.settings.Settings$NotificationAppListActivity"/> @@ -88,13 +89,15 @@ + android:order="23" + settings:searchable="false"> + android:order="24" + settings:searchable="false"/> diff --git a/res/xml/connected_devices_advanced.xml b/res/xml/connected_devices_advanced.xml index 2ff27c94134..a959d02405a 100644 --- a/res/xml/connected_devices_advanced.xml +++ b/res/xml/connected_devices_advanced.xml @@ -25,7 +25,8 @@ android:key="bluetooth_settings" android:title="@string/bluetooth_settings_title" android:icon="@drawable/ic_settings_bluetooth" - android:order="-9"/> + android:order="-9" + settings:searchable="false"/> + android:order="-3" + settings:searchable="false"/> + settings:searchable="false" /> + settings:useAdminDisabledSummary="true" + settings:searchable="false"> @@ -88,7 +90,7 @@ android:key="display_settings_screen_zoom" android:title="@string/screen_zoom_title" android:fragment="com.android.settings.display.ScreenZoomSettings" - settings:keywords="@string/screen_zoom_keywords" /> + settings:searchable="false"/> + settings:searchable="false" /> + android:fragment="com.android.settings.inputmethod.PhysicalKeyboardFragment" + settings:searchable="false"/> + android:fragment="com.android.settings.tts.TextToSpeechSettings" + settings:searchable="false"/> diff --git a/res/xml/location_settings.xml b/res/xml/location_settings.xml index 22079bfce8a..b53e9861642 100644 --- a/res/xml/location_settings.xml +++ b/res/xml/location_settings.xml @@ -29,7 +29,8 @@ android:title="@string/location_recent_location_requests_see_all" android:icon="@drawable/ic_chevron_right_24dp" android:selectable="true" - android:fragment="com.android.settings.location.RecentLocationRequestSeeAllFragment"/> + android:fragment="com.android.settings.location.RecentLocationRequestSeeAllFragment" + settings:searchable="false"/> + settings:allowDividerAbove="true" + settings:searchable="false"/> + android:title="@string/unlock_set_unlock_launch_picker_title" + settings:searchable="false"> + android:order="1001" + settings:searchable="false"> + android:summary="@string/summary_placeholder" + settings:searchable="false"/> diff --git a/res/xml/tts_settings.xml b/res/xml/tts_settings.xml index be34b28258b..4a2415477ee 100644 --- a/res/xml/tts_settings.xml +++ b/res/xml/tts_settings.xml @@ -16,6 +16,7 @@ @@ -24,7 +25,8 @@ + android:fragment="com.android.settings.tts.TtsEnginePreferenceFragment" + settings:searchable="false"/> + android:fragment="com.android.settings.inputmethod.AvailableVirtualKeyboardFragment" + settings:searchable="false"/> diff --git a/res/xml/wifi_tether_settings.xml b/res/xml/wifi_tether_settings.xml index 3e8f93f6a6a..6c5e3c449fd 100644 --- a/res/xml/wifi_tether_settings.xml +++ b/res/xml/wifi_tether_settings.xml @@ -20,31 +20,32 @@ xmlns:settings="http://schemas.android.com/apk/res-auto" android:key="wifi_tether_settings_screen" android:title="@string/wifi_hotspot_checkbox_text" + settings:searchable="false" settings:initialExpandedChildrenCount="3"> + android:summary="@string/summary_placeholder"/> + android:entryValues="@array/wifi_tether_security_values"/> + android:title="@string/wifi_hotspot_password_title"/> + android:summary="@string/wifi_hotspot_auto_off_summary"/> + android:title="@string/wifi_hotspot_ap_band_title"/> diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java index 236c7db3830..75f13aa596e 100644 --- a/src/com/android/settings/DisplaySettings.java +++ b/src/com/android/settings/DisplaySettings.java @@ -46,11 +46,7 @@ import java.util.List; public class DisplaySettings extends DashboardFragment { private static final String TAG = "DisplaySettings"; - public static final String KEY_DISPLAY_SIZE = "display_settings_screen_zoom"; - private static final String KEY_SCREEN_TIMEOUT = "screen_timeout"; - private static final String KEY_AUTO_BRIGHTNESS = "auto_brightness_entry"; - private static final String KEY_NIGHT_DISPLAY = "night_display"; @Override public int getMetricsCategory() { @@ -108,16 +104,6 @@ public class DisplaySettings extends DashboardFragment { return result; } - @Override - public List getNonIndexableKeys(Context context) { - List keys = super.getNonIndexableKeys(context); - keys.add(KEY_DISPLAY_SIZE); - keys.add(WallpaperPreferenceController.KEY_WALLPAPER); - keys.add(KEY_NIGHT_DISPLAY); - keys.add(KEY_AUTO_BRIGHTNESS); - return keys; - } - @Override public List createPreferenceControllers( Context context) { diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java index d1b1ad41b70..42dc7ac781e 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettings.java +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -118,8 +118,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements "magnification_preference_screen"; private static final String FONT_SIZE_PREFERENCE_SCREEN = "font_size_preference_screen"; - private static final String TTS_SETTINGS_PREFERENCE = - "tts_settings_preference"; private static final String AUTOCLICK_PREFERENCE_SCREEN = "autoclick_preference"; private static final String VIBRATION_PREFERENCE_SCREEN = @@ -887,8 +885,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider() { - public static final String KEY_DISPLAY_SIZE = "accessibility_settings_screen_zoom"; - @Override public List getXmlResourcesToIndex(Context context, boolean enabled) { @@ -898,21 +894,5 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements indexables.add(indexable); return indexables; } - - @Override - public List getNonIndexableKeys(Context context) { - List keys = super.getNonIndexableKeys(context); - // Duplicates in Display - keys.add(FONT_SIZE_PREFERENCE_SCREEN); - keys.add(KEY_DISPLAY_SIZE); - - // Duplicates in Language & Input - keys.add(TTS_SETTINGS_PREFERENCE); - - // Duplicates in child page - keys.add(DISPLAY_DALTONIZER_PREFERENCE_SCREEN); - keys.add(AUTOCLICK_PREFERENCE_SCREEN); - return keys; - } }; } diff --git a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java index 5f1cee4f099..31b23fa1d4b 100644 --- a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java @@ -27,6 +27,9 @@ import android.provider.Settings; import android.text.TextUtils; import android.view.accessibility.AccessibilityManager; +import androidx.annotation.VisibleForTesting; +import androidx.preference.Preference; + import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; @@ -39,9 +42,6 @@ import com.android.settingslib.search.SearchIndexable; import java.util.Arrays; import java.util.List; -import androidx.annotation.VisibleForTesting; -import androidx.preference.Preference; - @SearchIndexable public final class MagnificationPreferenceFragment extends DashboardFragment { @VisibleForTesting @@ -172,12 +172,5 @@ public final class MagnificationPreferenceFragment extends DashboardFragment { protected boolean isPageSearchEnabled(Context context) { return isApplicable(context.getResources()); } - - @Override - public List getNonIndexableKeys(Context context) { - List keys = super.getNonIndexableKeys(context); - keys.add(PREFERENCE_TITLE_KEY); - return keys; - } }; } diff --git a/src/com/android/settings/backup/BackupSettingsActivityPreferenceController.java b/src/com/android/settings/backup/BackupSettingsActivityPreferenceController.java index 131a2340532..1af80d9f900 100644 --- a/src/com/android/settings/backup/BackupSettingsActivityPreferenceController.java +++ b/src/com/android/settings/backup/BackupSettingsActivityPreferenceController.java @@ -26,13 +26,12 @@ import com.android.settings.core.BasePreferenceController; public class BackupSettingsActivityPreferenceController extends BasePreferenceController { private static final String TAG = "BackupSettingActivityPC"; - private static final String KEY_BACKUP_SETTINGS = "backup_settings"; private final UserManager mUm; private final BackupManager mBackupManager; - public BackupSettingsActivityPreferenceController(Context context) { - super(context, KEY_BACKUP_SETTINGS); + public BackupSettingsActivityPreferenceController(Context context, String key) { + super(context, key); mUm = (UserManager) context.getSystemService(Context.USER_SERVICE); mBackupManager = new BackupManager(context); } diff --git a/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java index e58ac1f176f..5c678a95c34 100644 --- a/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java +++ b/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java @@ -108,9 +108,6 @@ public class AdvancedConnectedDeviceDashboardFragment extends DashboardFragment keys.add(AndroidBeamPreferenceController.KEY_ANDROID_BEAM_SETTINGS); } - // Parent duplicate - keys.add(KEY_BLUETOOTH); - return keys; } diff --git a/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java b/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java index 183ed3f55d2..e0a7d279381 100644 --- a/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java +++ b/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupController.java @@ -95,7 +95,7 @@ public class AvailableMediaDeviceGroupController extends BasePreferenceControlle @Override public int getAvailabilityStatus() { return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH) - ? AVAILABLE + ? AVAILABLE_UNSEARCHABLE : UNSUPPORTED_ON_DEVICE; } diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java index 380e8a55a06..e9b076eabeb 100644 --- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java +++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java @@ -19,6 +19,8 @@ import android.app.Activity; import android.content.Context; import android.provider.SearchIndexableResource; +import androidx.annotation.VisibleForTesting; + import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; @@ -32,8 +34,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import androidx.annotation.VisibleForTesting; - @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC) public class ConnectedDeviceDashboardFragment extends DashboardFragment { @@ -139,14 +139,5 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment { context) { return buildPreferenceControllers(context, null /* lifecycle */); } - - @Override - public List getNonIndexableKeys(Context context) { - List keys = super.getNonIndexableKeys(context); - // Disable because they show dynamic data - keys.add(KEY_AVAILABLE_DEVICES); - keys.add(KEY_CONNECTED_DEVICES); - return keys; - } }; } diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java b/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java index 143b72d76ba..e986bc2f5ec 100644 --- a/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java +++ b/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java @@ -89,7 +89,7 @@ public class ConnectedDeviceGroupController extends BasePreferenceController @Override public int getAvailabilityStatus() { return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH) - ? AVAILABLE + ? AVAILABLE_UNSEARCHABLE : UNSUPPORTED_ON_DEVICE; } diff --git a/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java b/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java index 8fd0902b2e9..f5c3f53cc40 100644 --- a/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java +++ b/src/com/android/settings/connecteddevice/usb/UsbDetailsFragment.java @@ -113,11 +113,6 @@ public class UsbDetailsFragment extends DashboardFragment { return Lists.newArrayList(res); } - @Override - public List getNonIndexableKeys(Context context) { - return super.getNonIndexableKeys(context); - } - @Override public List createPreferenceControllers( Context context) { diff --git a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java index 425edd99a0f..3de46e015bc 100644 --- a/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java +++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java @@ -65,7 +65,6 @@ public class MyDeviceInfoFragment extends DashboardFragment private static final String LOG_TAG = "MyDeviceInfoFragment"; private static final String KEY_MY_DEVICE_INFO_HEADER = "my_device_info_header"; - private static final String KEY_LEGAL_CONTAINER = "legal_container"; @Override public int getMetricsCategory() { @@ -223,13 +222,5 @@ public class MyDeviceInfoFragment extends DashboardFragment return buildPreferenceControllers(context, null /*activity */, null /* fragment */, null /* lifecycle */); } - - @Override - public List getNonIndexableKeys(Context context) { - List keys = super.getNonIndexableKeys(context); - // The legal container is duplicated, so we ignore it here. - keys.add(KEY_LEGAL_CONTAINER); - return keys; - } }; } diff --git a/src/com/android/settings/display/AutoBrightnessPreferenceController.java b/src/com/android/settings/display/AutoBrightnessPreferenceController.java index 3b7a076f0f3..3f5f2b0164c 100644 --- a/src/com/android/settings/display/AutoBrightnessPreferenceController.java +++ b/src/com/android/settings/display/AutoBrightnessPreferenceController.java @@ -52,7 +52,7 @@ public class AutoBrightnessPreferenceController extends TogglePreferenceControll public int getAvailabilityStatus() { return mContext.getResources().getBoolean( com.android.internal.R.bool.config_automatic_brightness_available) - ? AVAILABLE + ? AVAILABLE_UNSEARCHABLE : UNSUPPORTED_ON_DEVICE; } diff --git a/src/com/android/settings/dream/DreamEntryPreferenceController.java b/src/com/android/settings/dream/DreamEntryPreferenceController.java deleted file mode 100644 index 097fa3a68e9..00000000000 --- a/src/com/android/settings/dream/DreamEntryPreferenceController.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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.dream; - -import android.content.Context; - -import com.android.settings.core.BasePreferenceController; - -public class DreamEntryPreferenceController extends BasePreferenceController { - - public DreamEntryPreferenceController(Context context, String preferenceKey) { - super(context, preferenceKey); - } - - @Override - public int getAvailabilityStatus() { - return AVAILABLE_UNSEARCHABLE; - } -} diff --git a/src/com/android/settings/fuelgauge/BatterySaverController.java b/src/com/android/settings/fuelgauge/BatterySaverController.java index e77393ee8f9..28cc893d20c 100644 --- a/src/com/android/settings/fuelgauge/BatterySaverController.java +++ b/src/com/android/settings/fuelgauge/BatterySaverController.java @@ -49,7 +49,7 @@ public class BatterySaverController extends BasePreferenceController @Override public int getAvailabilityStatus() { - return AVAILABLE; + return AVAILABLE_UNSEARCHABLE; } @Override diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index 75631206e53..054c66b69f3 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -68,7 +68,6 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList private static final boolean DEBUG = false; private static final String KEY_BATTERY_HEADER = "battery_header"; - private static final String KEY_BATTERY_TIP = "battery_tip"; private static final String KEY_SCREEN_USAGE = "screen_usage"; private static final String KEY_TIME_SINCE_LAST_FULL_CHARGE = "last_full_charge"; @@ -429,13 +428,6 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList sir.xmlResId = R.xml.power_usage_summary; return Collections.singletonList(sir); } - - @Override - public List getNonIndexableKeys(Context context) { - List niks = super.getNonIndexableKeys(context); - niks.add(KEY_BATTERY_SAVER_SUMMARY); - return niks; - } }; public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY diff --git a/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java b/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java index f8b86b06510..729962db62b 100644 --- a/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java +++ b/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java @@ -22,13 +22,13 @@ import static android.provider.Settings.Secure.ASSIST_GESTURE_SILENCE_ALERTS_ENA import android.content.Context; import android.provider.Settings; -import com.android.settings.R; -import com.android.settings.overlay.FeatureFactory; - import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; +import com.android.settings.R; +import com.android.settings.overlay.FeatureFactory; + public class AssistGestureSettingsPreferenceController extends GesturePreferenceController { private static final String PREF_KEY_VIDEO = "gesture_assist_video"; @@ -38,7 +38,6 @@ public class AssistGestureSettingsPreferenceController extends GesturePreference private static final int ON = 1; private static final int OFF = 0; - private final String mAssistGesturePrefKey; private final AssistGestureFeatureProvider mFeatureProvider; private boolean mWasAvailable; @@ -48,12 +47,10 @@ public class AssistGestureSettingsPreferenceController extends GesturePreference @VisibleForTesting boolean mAssistOnly; - public AssistGestureSettingsPreferenceController(Context context, - String key) { + public AssistGestureSettingsPreferenceController(Context context, String key) { super(context, key); mFeatureProvider = FeatureFactory.getFactory(context).getAssistGestureFeatureProvider(); mWasAvailable = isAvailable(); - mAssistGesturePrefKey = key; } @Override diff --git a/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java b/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java index 024fe603ad0..e1c9615a9f9 100644 --- a/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java +++ b/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java @@ -27,6 +27,8 @@ import android.provider.SearchIndexableResource; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; +import androidx.preference.Preference; + import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.util.Preconditions; import com.android.settings.R; @@ -42,8 +44,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import androidx.preference.Preference; - @SearchIndexable public final class VirtualKeyboardFragment extends SettingsPreferenceFragment implements Indexable { @@ -130,12 +130,5 @@ public final class VirtualKeyboardFragment extends SettingsPreferenceFragment im sir.xmlResId = R.xml.virtual_keyboard_settings; return Arrays.asList(sir); } - - @Override - public List getNonIndexableKeys(Context context) { - final List keys = super.getNonIndexableKeys(context); - keys.add("add_virtual_keyboard_screen"); - return keys; - } }; } diff --git a/src/com/android/settings/language/LanguageAndInputSettings.java b/src/com/android/settings/language/LanguageAndInputSettings.java index 68b1b2446bb..ae0a5684c39 100644 --- a/src/com/android/settings/language/LanguageAndInputSettings.java +++ b/src/com/android/settings/language/LanguageAndInputSettings.java @@ -23,12 +23,13 @@ import android.content.Context; import android.content.pm.PackageManager; import android.provider.SearchIndexableResource; import android.provider.Settings; -import android.speech.tts.TtsEngines; import android.text.TextUtils; import android.view.inputmethod.InputMethodInfo; import android.view.inputmethod.InputMethodManager; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; @@ -41,6 +42,7 @@ 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; @@ -53,7 +55,6 @@ public class LanguageAndInputSettings extends DashboardFragment { private static final String KEY_KEYBOARDS_CATEGORY = "keyboards_category"; private static final String KEY_TEXT_TO_SPEECH = "tts_settings_summary"; private static final String KEY_POINTER_AND_TTS_CATEGORY = "pointer_and_tts_category"; - private static final String KEY_PHYSICAL_KEYBOARD = "physical_keyboard_pref"; @Override public int getMetricsCategory() { @@ -175,13 +176,5 @@ public class LanguageAndInputSettings extends DashboardFragment { Context context) { return buildPreferenceControllers(context, null); } - - @Override - public List getNonIndexableKeys(Context context) { - List keys = super.getNonIndexableKeys(context); - // Duplicates in summary and details pages. - keys.add(KEY_PHYSICAL_KEYBOARD); - return keys; - } }; } diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java index 18b1033d408..758ca571f53 100644 --- a/src/com/android/settings/location/LocationSettings.java +++ b/src/com/android/settings/location/LocationSettings.java @@ -22,6 +22,9 @@ import android.location.SettingInjectorService; import android.os.Bundle; import android.provider.SearchIndexableResource; +import androidx.preference.Preference; +import androidx.preference.PreferenceGroup; + import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.SettingsActivity; @@ -41,9 +44,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; -import androidx.preference.Preference; -import androidx.preference.PreferenceGroup; - /** * System location settings (Settings > Location). The screen has three parts: *
    @@ -180,12 +180,5 @@ public class LocationSettings extends DashboardFragment { return buildPreferenceControllers(context, null /* fragment */, null /* lifecycle */); } - - @Override - public List getNonIndexableKeys(Context context) { - final List niks = super.getNonIndexableKeys(context); - niks.add("recent_location_requests_see_all_button"); // 'See all' button - return niks; - } }; } diff --git a/src/com/android/settings/notification/ConfigureNotificationSettings.java b/src/com/android/settings/notification/ConfigureNotificationSettings.java index 7120cf61306..13c5e888e2a 100644 --- a/src/com/android/settings/notification/ConfigureNotificationSettings.java +++ b/src/com/android/settings/notification/ConfigureNotificationSettings.java @@ -218,9 +218,6 @@ public class ConfigureNotificationSettings extends DashboardFragment implements public List getNonIndexableKeys(Context context) { final List keys = super.getNonIndexableKeys(context); keys.add(KEY_SWIPE_DOWN); - keys.add(KEY_LOCKSCREEN); - keys.add(KEY_LOCKSCREEN_WORK_PROFILE); - keys.add(KEY_LOCKSCREEN_WORK_PROFILE_HEADER); return keys; } }; diff --git a/src/com/android/settings/notification/ZenModeBlockedEffectsSettings.java b/src/com/android/settings/notification/ZenModeBlockedEffectsSettings.java index c105a1a6d55..6c7477a13af 100644 --- a/src/com/android/settings/notification/ZenModeBlockedEffectsSettings.java +++ b/src/com/android/settings/notification/ZenModeBlockedEffectsSettings.java @@ -108,12 +108,6 @@ public class ZenModeBlockedEffectsSettings extends ZenModeSettingsBase implement return result; } - @Override - public List getNonIndexableKeys(Context context) { - final List keys = super.getNonIndexableKeys(context); - return keys; - } - @Override public List createPreferenceControllers(Context context) { return buildPreferenceControllers(context, null); diff --git a/src/com/android/settings/notification/ZenModeCallsSettings.java b/src/com/android/settings/notification/ZenModeCallsSettings.java index bff1c9f298a..6ba53b5bf9d 100644 --- a/src/com/android/settings/notification/ZenModeCallsSettings.java +++ b/src/com/android/settings/notification/ZenModeCallsSettings.java @@ -82,14 +82,9 @@ public class ZenModeCallsSettings extends ZenModeSettingsBase implements Indexab } @Override - public List getNonIndexableKeys(Context context) { - final List keys = super.getNonIndexableKeys(context); - return keys; + public List createPreferenceControllers( + Context context) { + return buildPreferenceControllers(context, null); } - - @Override - public List createPreferenceControllers(Context context) { - return buildPreferenceControllers(context, null); - } - }; + }; } diff --git a/src/com/android/settings/notification/ZenModeMsgEventReminderSettings.java b/src/com/android/settings/notification/ZenModeMsgEventReminderSettings.java index b61b76e97a1..0e6747a6f57 100644 --- a/src/com/android/settings/notification/ZenModeMsgEventReminderSettings.java +++ b/src/com/android/settings/notification/ZenModeMsgEventReminderSettings.java @@ -80,12 +80,6 @@ public class ZenModeMsgEventReminderSettings extends ZenModeSettingsBase impleme return result; } - @Override - public List getNonIndexableKeys(Context context) { - final List keys = super.getNonIndexableKeys(context); - return keys; - } - @Override public List createPreferenceControllers(Context context) { return buildPreferenceControllers(context, null); diff --git a/src/com/android/settings/notification/ZenModeRestrictNotificationsSettings.java b/src/com/android/settings/notification/ZenModeRestrictNotificationsSettings.java index bf170df9603..56ed086b578 100644 --- a/src/com/android/settings/notification/ZenModeRestrictNotificationsSettings.java +++ b/src/com/android/settings/notification/ZenModeRestrictNotificationsSettings.java @@ -90,12 +90,6 @@ public class ZenModeRestrictNotificationsSettings extends ZenModeSettingsBase im return result; } - @Override - public List getNonIndexableKeys(Context context) { - final List keys = super.getNonIndexableKeys(context); - return keys; - } - @Override public List createPreferenceControllers(Context context) { return buildPreferenceControllers(context, null); diff --git a/src/com/android/settings/security/LockscreenDashboardFragment.java b/src/com/android/settings/security/LockscreenDashboardFragment.java index 71130ea5350..353391516f2 100644 --- a/src/com/android/settings/security/LockscreenDashboardFragment.java +++ b/src/com/android/settings/security/LockscreenDashboardFragment.java @@ -154,8 +154,6 @@ public class LockscreenDashboardFragment extends DashboardFragment public List getNonIndexableKeys(Context context) { final List niks = super.getNonIndexableKeys(context); niks.add(KEY_ADD_USER_FROM_LOCK_SCREEN); - niks.add(KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE); - niks.add(KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE_HEADER); return niks; } diff --git a/src/com/android/settings/security/screenlock/ScreenLockSettings.java b/src/com/android/settings/security/screenlock/ScreenLockSettings.java index abb4b333376..90b5e3f3833 100644 --- a/src/com/android/settings/security/screenlock/ScreenLockSettings.java +++ b/src/com/android/settings/security/screenlock/ScreenLockSettings.java @@ -20,6 +20,8 @@ import android.content.Context; import android.os.UserHandle; import android.provider.SearchIndexableResource; +import androidx.fragment.app.Fragment; + import com.android.internal.logging.nano.MetricsProto; import com.android.internal.widget.LockPatternUtils; import com.android.settings.R; @@ -34,16 +36,12 @@ import com.android.settingslib.search.SearchIndexable; import java.util.ArrayList; import java.util.List; -import androidx.fragment.app.Fragment; - @SearchIndexable public class ScreenLockSettings extends DashboardFragment implements OwnerInfoPreferenceController.OwnerInfoCallback { private static final String TAG = "ScreenLockSettings"; - private static final String KEY_LOCK_SCREEN_TITLE = "security_settings_password_sub_screen"; - private static final int MY_USER_ID = UserHandle.myUserId(); private LockPatternUtils mLockPatternUtils; @@ -107,12 +105,5 @@ public class ScreenLockSettings extends DashboardFragment return buildPreferenceControllers(context, null /* parent */, null /* lifecycle */, new LockPatternUtils(context)); } - - @Override - public List getNonIndexableKeys(Context context) { - final List keys = super.getNonIndexableKeys(context); - keys.add(KEY_LOCK_SCREEN_TITLE); - return keys; - } }; } diff --git a/src/com/android/settings/system/ResetPreferenceController.java b/src/com/android/settings/system/ResetPreferenceController.java index ec0c27b4ac8..050efc4cd1c 100644 --- a/src/com/android/settings/system/ResetPreferenceController.java +++ b/src/com/android/settings/system/ResetPreferenceController.java @@ -29,7 +29,7 @@ public class ResetPreferenceController extends BasePreferenceController { @Override public int getAvailabilityStatus() { return mContext.getResources().getBoolean(R.bool.config_show_reset_dashboard) - ? AVAILABLE + ? AVAILABLE_UNSEARCHABLE : UNSUPPORTED_ON_DEVICE; } } diff --git a/src/com/android/settings/system/SystemDashboardFragment.java b/src/com/android/settings/system/SystemDashboardFragment.java index 0c73e4d8913..4f0c738b15d 100644 --- a/src/com/android/settings/system/SystemDashboardFragment.java +++ b/src/com/android/settings/system/SystemDashboardFragment.java @@ -19,9 +19,12 @@ import android.content.Context; import android.os.Bundle; import android.provider.SearchIndexableResource; +import androidx.preference.Preference; +import androidx.preference.PreferenceGroup; +import androidx.preference.PreferenceScreen; + import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; -import com.android.settings.backup.BackupSettingsActivityPreferenceController; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; @@ -30,10 +33,6 @@ import com.android.settingslib.search.SearchIndexable; import java.util.Arrays; import java.util.List; -import androidx.preference.Preference; -import androidx.preference.PreferenceGroup; -import androidx.preference.PreferenceScreen; - @SearchIndexable public class SystemDashboardFragment extends DashboardFragment { @@ -97,12 +96,5 @@ public class SystemDashboardFragment extends DashboardFragment { sir.xmlResId = R.xml.system_dashboard_fragment; return Arrays.asList(sir); } - - @Override - public List getNonIndexableKeys(Context context) { - List keys = super.getNonIndexableKeys(context); - keys.add(KEY_RESET); - return keys; - } }; } \ No newline at end of file diff --git a/src/com/android/settings/tts/TextToSpeechSettings.java b/src/com/android/settings/tts/TextToSpeechSettings.java index d21d0c8d056..0f10d28572c 100644 --- a/src/com/android/settings/tts/TextToSpeechSettings.java +++ b/src/com/android/settings/tts/TextToSpeechSettings.java @@ -34,6 +34,10 @@ import android.text.TextUtils; import android.util.Log; import android.util.Pair; +import androidx.appcompat.app.AlertDialog; +import androidx.preference.ListPreference; +import androidx.preference.Preference; + import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.SettingsActivity; @@ -56,10 +60,6 @@ import java.util.MissingResourceException; import java.util.Objects; import java.util.Set; -import androidx.appcompat.app.AlertDialog; -import androidx.preference.ListPreference; -import androidx.preference.Preference; - @SearchIndexable public class TextToSpeechSettings extends SettingsPreferenceFragment implements Preference.OnPreferenceChangeListener, @@ -790,13 +790,6 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment sir.xmlResId = R.xml.tts_settings; return Arrays.asList(sir); } - - @Override - public List getNonIndexableKeys(Context context) { - final List keys = super.getNonIndexableKeys(context); - keys.add("tts_engine_preference"); - return keys; - } }; } diff --git a/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityPreferenceControllerTest.java index 3f8c0ef7d23..f6276d0fd3a 100644 --- a/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityPreferenceControllerTest.java @@ -17,6 +17,7 @@ package com.android.settings.backup; import static com.google.common.truth.Truth.assertThat; + import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -25,6 +26,8 @@ import android.app.backup.BackupManager; import android.content.Context; import android.os.UserManager; +import androidx.preference.Preference; + import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -38,8 +41,6 @@ import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; -import androidx.preference.Preference; - @RunWith(SettingsRobolectricTestRunner.class) @Config(shadows = BackupSettingsActivityPreferenceControllerTest.ShadowBackupManager.class) public class BackupSettingsActivityPreferenceControllerTest { @@ -63,7 +64,7 @@ public class BackupSettingsActivityPreferenceControllerTest { mContext = spy(RuntimeEnvironment.application.getApplicationContext()); when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); - mController = new BackupSettingsActivityPreferenceController(mContext); + mController = new BackupSettingsActivityPreferenceController(mContext, KEY_BACKUP_SETTINGS); } @Test diff --git a/tests/robotests/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupControllerTest.java index 7814b18c4c4..7d99550ea37 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupControllerTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/AvailableMediaDeviceGroupControllerTest.java @@ -15,9 +15,11 @@ */ package com.android.settings.connecteddevice; -import static com.android.settings.core.BasePreferenceController.AVAILABLE; +import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE; import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; + import static com.google.common.truth.Truth.assertThat; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; @@ -29,6 +31,11 @@ import android.content.Context; import android.content.pm.PackageManager; import android.media.AudioManager; +import androidx.preference.Preference; +import androidx.preference.PreferenceGroup; +import androidx.preference.PreferenceManager; +import androidx.preference.PreferenceScreen; + import com.android.settings.R; import com.android.settings.bluetooth.AvailableMediaBluetoothDeviceUpdater; import com.android.settings.dashboard.DashboardFragment; @@ -48,11 +55,6 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; -import androidx.preference.Preference; -import androidx.preference.PreferenceGroup; -import androidx.preference.PreferenceManager; -import androidx.preference.PreferenceScreen; - @RunWith(SettingsRobolectricTestRunner.class) @Config(shadows = { ShadowAudioManager.class, @@ -177,7 +179,7 @@ public class AvailableMediaDeviceGroupControllerTest { doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH); assertThat(mAvailableMediaDeviceGroupController.getAvailabilityStatus()).isEqualTo( - AVAILABLE); + AVAILABLE_UNSEARCHABLE); } @Test diff --git a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java index bd47f8b2ef9..a752a6cbfc7 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java @@ -15,9 +15,11 @@ */ package com.android.settings.connecteddevice; -import static com.android.settings.core.BasePreferenceController.AVAILABLE; +import static com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE; import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE; + import static com.google.common.truth.Truth.assertThat; + import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; @@ -27,6 +29,11 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.PackageManager; +import androidx.preference.Preference; +import androidx.preference.PreferenceGroup; +import androidx.preference.PreferenceManager; +import androidx.preference.PreferenceScreen; + import com.android.settings.bluetooth.ConnectedBluetoothDeviceUpdater; import com.android.settings.connecteddevice.dock.DockUpdater; import com.android.settings.connecteddevice.usb.ConnectedUsbDeviceUpdater; @@ -44,11 +51,6 @@ import org.robolectric.Shadows; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplicationPackageManager; -import androidx.preference.Preference; -import androidx.preference.PreferenceGroup; -import androidx.preference.PreferenceManager; -import androidx.preference.PreferenceScreen; - @RunWith(SettingsRobolectricTestRunner.class) @Config(shadows = ShadowApplicationPackageManager.class) public class ConnectedDeviceGroupControllerTest { @@ -94,7 +96,7 @@ public class ConnectedDeviceGroupControllerTest { } @Test - public void testOnDeviceAdded_firstAdd_becomeVisibleAndPreferenceAdded() { + public void onDeviceAdded_firstAdd_becomeVisibleAndPreferenceAdded() { mConnectedDeviceGroupController.onDeviceAdded(mPreference); assertThat(mPreferenceGroup.isVisible()).isTrue(); @@ -102,7 +104,7 @@ public class ConnectedDeviceGroupControllerTest { } @Test - public void testOnDeviceRemoved_lastRemove_becomeInvisibleAndPreferenceRemoved() { + public void onDeviceRemoved_lastRemove_becomeInvisibleAndPreferenceRemoved() { mPreferenceGroup.addPreference(mPreference); mConnectedDeviceGroupController.onDeviceRemoved(mPreference); @@ -112,7 +114,7 @@ public class ConnectedDeviceGroupControllerTest { } @Test - public void testOnDeviceRemoved_notLastRemove_stillVisible() { + public void onDeviceRemoved_notLastRemove_stillVisible() { mPreferenceGroup.setVisible(true); mPreferenceGroup.addPreference(mPreference); mPreferenceGroup.addPreference(new Preference(mContext)); @@ -123,7 +125,7 @@ public class ConnectedDeviceGroupControllerTest { } @Test - public void testDisplayPreference_becomeInvisible() { + public void displayPreference_becomeInvisible() { doReturn(mPreferenceGroup).when(mPreferenceScreen).findPreference(anyString()); mConnectedDeviceGroupController.displayPreference(mPreferenceScreen); @@ -132,7 +134,7 @@ public class ConnectedDeviceGroupControllerTest { } @Test - public void testRegister() { + public void onStart_shouldRegisterUpdaters() { // register the callback in onStart() mConnectedDeviceGroupController.onStart(); verify(mConnectedBluetoothDeviceUpdater).registerCallback(); @@ -141,7 +143,7 @@ public class ConnectedDeviceGroupControllerTest { } @Test - public void testUnregister() { + public void onStop_shouldUnregisterUpdaters() { // unregister the callback in onStop() mConnectedDeviceGroupController.onStop(); verify(mConnectedBluetoothDeviceUpdater).unregisterCallback(); @@ -150,7 +152,7 @@ public class ConnectedDeviceGroupControllerTest { } @Test - public void testGetAvailabilityStatus_noBluetoothFeature_returnUnSupported() { + public void getAvailabilityStatus_noBluetoothFeature_returnUnSupported() { mPackageManager.setSystemFeature(PackageManager.FEATURE_BLUETOOTH, false); assertThat(mConnectedDeviceGroupController.getAvailabilityStatus()).isEqualTo( @@ -158,10 +160,10 @@ public class ConnectedDeviceGroupControllerTest { } @Test - public void testGetAvailabilityStatus_BluetoothFeature_returnSupported() { + public void getAvailabilityStatus_BluetoothFeature_returnSupported() { mPackageManager.setSystemFeature(PackageManager.FEATURE_BLUETOOTH, true); assertThat(mConnectedDeviceGroupController.getAvailabilityStatus()).isEqualTo( - AVAILABLE); + AVAILABLE_UNSEARCHABLE); } } diff --git a/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java b/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java index b3dbdab01eb..06d75dae473 100644 --- a/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java +++ b/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java @@ -263,9 +263,10 @@ public class PreferenceXmlParserUtilsTest { } @Test + @Config(qualifiers = "mcc998") public void extractMetadata_requestSearchable_shouldDefaultToTrue() throws Exception { final List metadata = PreferenceXmlParserUtils.extractMetadata(mContext, - R.xml.display_settings, MetadataFlag.FLAG_NEED_SEARCHABLE); + R.xml.location_settings, MetadataFlag.FLAG_NEED_SEARCHABLE); for (Bundle bundle : metadata) { assertThat(bundle.getBoolean(METADATA_SEARCHABLE)).isTrue(); } From 54cfb649875047e90fe94304440d2d0646eaeaf2 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Fri, 17 Aug 2018 11:36:20 -0700 Subject: [PATCH 02/10] Use tile.getTitle(context) to get tile title. And switch to getId() instead of title when comparing 2 tiles. This is more accurate and more efficient. Bug: 77600770 Test: robotests Change-Id: I587d90702d98956bf7b420529ac3280351ca4a10 --- .../settings/dashboard/DashboardAdapter.java | 2 +- .../settings/dashboard/DashboardData.java | 11 +++++------ .../dashboard/DashboardFeatureProviderImpl.java | 2 +- .../settings/dashboard/DashboardFragment.java | 6 +++--- .../settings/dashboard/SummaryLoader.java | 7 ++++--- .../AccountDetailDashboardFragmentTest.java | 4 +++- .../settings/dashboard/DashboardAdapterTest.java | 3 +++ .../settings/dashboard/DashboardDataTest.java | 13 +++++++------ .../DashboardFeatureProviderImplTest.java | 16 +++++----------- 9 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index 488396f2a7c..abeecd97f25 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -355,7 +355,7 @@ public class DashboardAdapter extends RecyclerView.Adapter * First, try to find the exact identical instance of the tile object, if not found, - * then try to find a tile has the same title. + * then try to find a tile has the same id. * * @param tile tile that need to be found * @return position of the object, return INDEX_NOT_FOUND if object isn't in the list @@ -158,7 +157,7 @@ public class DashboardData { final Object entity = mItems.get(i).entity; if (entity == tile) { return i; - } else if (entity instanceof Tile && tile.title.equals(((Tile) entity).title)) { + } else if (entity instanceof Tile && tile.getId() == ((Tile) entity).getId()) { return i; } } @@ -227,7 +226,7 @@ public class DashboardData { final List tiles = mCategory.getTiles(); for (int i = 0; i < tiles.size(); i++) { final Tile tile = tiles.get(i); - addToItemList(tile, R.layout.dashboard_tile, Objects.hash(tile.title), + addToItemList(tile, R.layout.dashboard_tile, tile.getId(), true /* add */); } } @@ -425,8 +424,8 @@ public class DashboardData { final Tile localTile = (Tile) entity; final Tile targetTile = (Tile) targetItem.entity; - // Only check title and summary for dashboard tile - return TextUtils.equals(localTile.title, targetTile.title) + // Only check id and summary for dashboard tile + return localTile.getId() == targetTile.getId() && TextUtils.equals(localTile.summary, targetTile.summary); case TYPE_SUGGESTION_CONTAINER: case TYPE_CONDITION_CONTAINER: diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java index 7c6593628ad..b904f9d3da9 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java @@ -106,7 +106,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { if (pref == null) { return; } - pref.setTitle(tile.title); + pref.setTitle(tile.getTitle(activity.getApplicationContext())); if (!TextUtils.isEmpty(key)) { pref.setKey(key); } else { diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java index a90950e5521..cdd7d0e81df 100644 --- a/src/com/android/settings/dashboard/DashboardFragment.java +++ b/src/com/android/settings/dashboard/DashboardFragment.java @@ -156,9 +156,9 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment final String key = mDashboardFeatureProvider.getDashboardKeyForTile(tile); final Preference pref = getPreferenceScreen().findPreference(key); if (pref == null) { - Log.d(getLogTag(), - String.format("Can't find pref by key %s, skipping update summary %s/%s", - key, tile.title, tile.summary)); + Log.d(getLogTag(), String.format( + "Can't find pref by key %s, skipping update summary %s/%s", + key, tile.getDescription(), tile.summary)); return; } pref.setSummary(tile.summary); diff --git a/src/com/android/settings/dashboard/SummaryLoader.java b/src/com/android/settings/dashboard/SummaryLoader.java index 199331d5b21..dbca535ece5 100644 --- a/src/com/android/settings/dashboard/SummaryLoader.java +++ b/src/com/android/settings/dashboard/SummaryLoader.java @@ -96,7 +96,7 @@ public class SummaryLoader { return; } if (DEBUG) { - Log.d(TAG, "setSummary " + tile.title + " - " + summary); + Log.d(TAG, "setSummary " + tile.getDescription() + " - " + summary); } updateSummaryIfNeeded(tile, summary); @@ -107,7 +107,8 @@ public class SummaryLoader { void updateSummaryIfNeeded(Tile tile, CharSequence summary) { if (TextUtils.equals(tile.summary, summary)) { if (DEBUG) { - Log.d(TAG, "Summary doesn't change, skipping summary update for " + tile.title); + Log.d(TAG, "Summary doesn't change, skipping summary update for " + + tile.getDescription()); } return; } @@ -118,7 +119,7 @@ public class SummaryLoader { } else { if (DEBUG) { Log.d(TAG, "SummaryConsumer is null, skipping summary update for " - + tile.title); + + tile.getDescription()); } } } diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java index eca9f862b30..f2fb1219094 100644 --- a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java @@ -16,6 +16,7 @@ package com.android.settings.accounts; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; import static com.google.common.truth.Truth.assertThat; @@ -65,7 +66,7 @@ public class AccountDetailDashboardFragmentTest { public void setUp() { mContext = RuntimeEnvironment.application; mActivityInfo = new ActivityInfo(); - mActivityInfo.packageName = "pkg"; + mActivityInfo.packageName = mContext.getPackageName(); mActivityInfo.name = "clazz"; mActivityInfo.metaData = new Bundle(); @@ -123,6 +124,7 @@ public class AccountDetailDashboardFragmentTest { mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key"); mActivityInfo.metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT); mActivityInfo.metaData.putString(METADATA_ACCOUNT_TYPE, "com.abc"); + mActivityInfo.metaData.putString(META_DATA_PREFERENCE_TITLE, "summary"); mActivityInfo.metaData.putString("com.android.settings.intent.action", Intent.ACTION_ASSIST); tile.userHandle = null; diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java index a73f4a8700e..58a5cc9dc6f 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java @@ -15,6 +15,8 @@ */ package com.android.settings.dashboard; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -95,6 +97,7 @@ public class DashboardAdapterTest { mActivityInfo.packageName = "pkg"; mActivityInfo.name = "class"; mActivityInfo.metaData = new Bundle(); + mActivityInfo.metaData.putString(META_DATA_PREFERENCE_TITLE, "test-title"); when(mContext.getSystemService(Context.WINDOW_SERVICE)).thenReturn(mWindowManager); when(mContext.getResources()).thenReturn(mResources); diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java index d92cceb62a8..406cb3cd1df 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java @@ -49,13 +49,12 @@ import org.mockito.MockitoAnnotations; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Objects; @RunWith(SettingsRobolectricTestRunner.class) public class DashboardDataTest { private static final String TEST_SUGGESTION_TITLE = "Use fingerprint"; - private static final String TEST_CATEGORY_TILE_TITLE = "Display"; + private static final int TEST_TILE_ID = 12345; private DashboardData mDashboardDataWithOneConditions; private DashboardData mDashboardDataWithTwoConditions; @@ -95,7 +94,7 @@ public class DashboardDataTest { twoItemsConditions.add(mSecondCondition); // Build category - mTestCategoryTile.title = TEST_CATEGORY_TILE_TITLE; + when(mTestCategoryTile.getId()).thenReturn(TEST_TILE_ID); mDashboardCategory.addTile(mTestCategoryTile); @@ -132,7 +131,7 @@ public class DashboardDataTest { assertThat(items.get(1).id).isEqualTo(STABLE_ID_SUGGESTION_CONDITION_DIVIDER); assertThat(items.get(2).id).isEqualTo(STABLE_ID_CONDITION_CONTAINER); assertThat(items.get(3).id).isEqualTo(STABLE_ID_CONDITION_FOOTER); - assertThat(items.get(4).id).isEqualTo(Objects.hash(mTestCategoryTile.title)); + assertThat(items.get(4).id).isEqualTo(TEST_TILE_ID); } @Test @@ -185,15 +184,17 @@ public class DashboardDataTest { @Test public void testGetPositionByTile_equalTitle_returnPositionFound() { final Tile tile = mock(Tile.class); - tile.title = TEST_CATEGORY_TILE_TITLE; + when(tile.getId()).thenReturn(TEST_TILE_ID); + final int position = mDashboardDataWithOneConditions.getPositionByTile(tile); + assertThat(position).isNotEqualTo(DashboardData.POSITION_NOT_FOUND); } @Test public void testGetPositionByTile_notExisted_returnNotFound() { final Tile tile = mock(Tile.class); - tile.title = ""; + when(tile.getId()).thenReturn(123); final int position = mDashboardDataWithOneConditions.getPositionByTile(tile); assertThat(position).isEqualTo(DashboardData.POSITION_NOT_FOUND); } diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java index 22c589c8fd6..efebefd0892 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java @@ -19,6 +19,7 @@ package com.android.settings.dashboard; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL; import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY; @@ -99,11 +100,13 @@ public class DashboardFeatureProviderImplTest { public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); + doReturn(RuntimeEnvironment.application).when(mActivity).getApplicationContext(); mForceRoundedIcon = false; mActivityInfo = new ActivityInfo(); - mActivityInfo.packageName = "pkg"; + mActivityInfo.packageName = mContext.getPackageName(); mActivityInfo.name = "class"; mActivityInfo.metaData = new Bundle(); + mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_TITLE, R.string.settings_label); doReturn(mPackageManager).when(mContext).getPackageManager(); when(mPackageManager.resolveActivity(any(Intent.class), anyInt())) .thenReturn(new ResolveInfo()); @@ -121,7 +124,6 @@ public class DashboardFeatureProviderImplTest { final Preference preference = new Preference(RuntimeEnvironment.application); final Tile tile = spy(new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE)); mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10); - tile.title = "title"; tile.summary = "summary"; doReturn(Icon.createWithBitmap(Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565))) .when(tile).getIcon(any(Context.class)); @@ -129,7 +131,7 @@ public class DashboardFeatureProviderImplTest { mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER); - assertThat(preference.getTitle()).isEqualTo(tile.title); + assertThat(preference.getTitle()).isEqualTo(mContext.getText(R.string.settings_label)); assertThat(preference.getSummary()).isEqualTo(tile.summary); assertThat(preference.getIcon()).isNotNull(); assertThat(preference.getFragment()).isEqualTo( @@ -159,9 +161,6 @@ public class DashboardFeatureProviderImplTest { tile.userHandle.add(mock(UserHandle.class)); tile.userHandle.add(mock(UserHandle.class)); - when(mActivity.getApplicationContext().getSystemService(Context.USER_SERVICE)) - .thenReturn(mUserManager); - mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER); preference.getOnPreferenceClickListener().onPreferenceClick(null); @@ -199,11 +198,6 @@ public class DashboardFeatureProviderImplTest { tile.userHandle = new ArrayList<>(); tile.userHandle.add(mock(UserHandle.class)); - when(mActivity.getSystemService(Context.USER_SERVICE)) - .thenReturn(mUserManager); - when(mActivity.getApplicationContext().getPackageName()) - .thenReturn(RuntimeEnvironment.application.getPackageName()); - mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER); preference.getOnPreferenceClickListener().onPreferenceClick(null); From 64951163b8c69c4a9e32c559297212f7eaa1ff14 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 20 Aug 2018 14:13:14 -0700 Subject: [PATCH 03/10] Use getSummary() to get tile summary text. Bug: 77600770 Test: robotests Change-Id: Iecef09853bb49bc259502494912ed81d52e2d7ce --- .../settings/dashboard/DashboardAdapter.java | 5 +++-- .../settings/dashboard/DashboardData.java | 4 +++- .../DashboardFeatureProviderImpl.java | 9 ++++---- .../settings/dashboard/DashboardFragment.java | 6 +++--- .../settings/dashboard/SummaryLoader.java | 11 +++++----- .../DashboardFeatureProviderImplTest.java | 21 +++++++------------ .../settings/dashboard/SummaryLoaderTest.java | 15 +++++++------ 7 files changed, 37 insertions(+), 34 deletions(-) diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index abeecd97f25..5a8df911373 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -356,8 +356,9 @@ public class DashboardAdapter extends RecyclerView.Adapter { final Map providerMap = new ArrayMap<>(); final String uri = tile.getMetaData().getString(META_DATA_PREFERENCE_SUMMARY_URI); - final String summary = TileUtils.getTextFromUri( + final String summaryFromUri = TileUtils.getTextFromUri( mContext, uri, providerMap, META_DATA_PREFERENCE_SUMMARY); - ThreadUtils.postOnMainThread(() -> preference.setSummary(summary)); + ThreadUtils.postOnMainThread(() -> preference.setSummary(summaryFromUri)); }); } else { preference.setSummary(R.string.summary_placeholder); diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java index cdd7d0e81df..9f0acaa3486 100644 --- a/src/com/android/settings/dashboard/DashboardFragment.java +++ b/src/com/android/settings/dashboard/DashboardFragment.java @@ -157,11 +157,11 @@ public abstract class DashboardFragment extends SettingsPreferenceFragment final Preference pref = getPreferenceScreen().findPreference(key); if (pref == null) { Log.d(getLogTag(), String.format( - "Can't find pref by key %s, skipping update summary %s/%s", - key, tile.getDescription(), tile.summary)); + "Can't find pref by key %s, skipping update summary %s", + key, tile.getDescription())); return; } - pref.setSummary(tile.summary); + pref.setSummary(tile.getSummary(pref.getContext())); } @Override diff --git a/src/com/android/settings/dashboard/SummaryLoader.java b/src/com/android/settings/dashboard/SummaryLoader.java index dbca535ece5..cfb64efdeb0 100644 --- a/src/com/android/settings/dashboard/SummaryLoader.java +++ b/src/com/android/settings/dashboard/SummaryLoader.java @@ -18,6 +18,7 @@ package com.android.settings.dashboard; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.ComponentName; +import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; @@ -99,13 +100,13 @@ public class SummaryLoader { Log.d(TAG, "setSummary " + tile.getDescription() + " - " + summary); } - updateSummaryIfNeeded(tile, summary); + updateSummaryIfNeeded(mActivity.getApplicationContext(), tile, summary); }); } @VisibleForTesting - void updateSummaryIfNeeded(Tile tile, CharSequence summary) { - if (TextUtils.equals(tile.summary, summary)) { + void updateSummaryIfNeeded(Context context, Tile tile, CharSequence summary) { + if (TextUtils.equals(tile.getSummary(context), summary)) { if (DEBUG) { Log.d(TAG, "Summary doesn't change, skipping summary update for " + tile.getDescription()); @@ -113,7 +114,7 @@ public class SummaryLoader { return; } mSummaryTextMap.put(mDashboardFeatureProvider.getDashboardKeyForTile(tile), summary); - tile.summary = summary; + tile.overrideSummary(summary); if (mSummaryConsumer != null) { mSummaryConsumer.notifySummaryChanged(tile); } else { @@ -216,7 +217,7 @@ public class SummaryLoader { for (Tile tile : category.getTiles()) { final String key = mDashboardFeatureProvider.getDashboardKeyForTile(tile); if (mSummaryTextMap.containsKey(key)) { - tile.summary = mSummaryTextMap.get(key); + tile.overrideSummary(mSummaryTextMap.get(key)); } } } diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java index efebefd0892..d49e4fbb057 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java @@ -19,6 +19,7 @@ package com.android.settings.dashboard; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL; import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY; @@ -107,6 +108,8 @@ public class DashboardFeatureProviderImplTest { mActivityInfo.name = "class"; mActivityInfo.metaData = new Bundle(); mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_TITLE, R.string.settings_label); + mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_SUMMARY, + R.string.about_settings_summary); doReturn(mPackageManager).when(mContext).getPackageManager(); when(mPackageManager.resolveActivity(any(Intent.class), anyInt())) .thenReturn(new ResolveInfo()); @@ -124,7 +127,6 @@ public class DashboardFeatureProviderImplTest { final Preference preference = new Preference(RuntimeEnvironment.application); final Tile tile = spy(new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE)); mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10); - tile.summary = "summary"; doReturn(Icon.createWithBitmap(Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565))) .when(tile).getIcon(any(Context.class)); mActivityInfo.metaData.putString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS, "HI"); @@ -132,7 +134,8 @@ public class DashboardFeatureProviderImplTest { preference, tile, "123", Preference.DEFAULT_ORDER); assertThat(preference.getTitle()).isEqualTo(mContext.getText(R.string.settings_label)); - assertThat(preference.getSummary()).isEqualTo(tile.summary); + assertThat(preference.getSummary()) + .isEqualTo(mContext.getText(R.string.about_settings_summary)); assertThat(preference.getIcon()).isNotNull(); assertThat(preference.getFragment()).isEqualTo( mActivityInfo.metaData.getString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS)); @@ -232,7 +235,10 @@ public class DashboardFeatureProviderImplTest { @Test public void bindPreference_noSummary_shouldSetSummaryToPlaceholder() { final Preference preference = new Preference(RuntimeEnvironment.application); + mActivityInfo.metaData.remove(META_DATA_PREFERENCE_SUMMARY); + final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE); + mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN, preference, tile, null /*key */, Preference.DEFAULT_ORDER); @@ -240,17 +246,6 @@ public class DashboardFeatureProviderImplTest { .isEqualTo(RuntimeEnvironment.application.getString(R.string.summary_placeholder)); } - @Test - public void bindPreference_hasSummary_shouldSetSummary() { - final Preference preference = new Preference(RuntimeEnvironment.application); - final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE); - tile.summary = "test"; - mImpl.bindPreferenceToTile(mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN, - preference, tile, null /*key */, Preference.DEFAULT_ORDER); - - assertThat(preference.getSummary()).isEqualTo(tile.summary); - } - @Test @Config(shadows = {ShadowTileUtils.class, ShadowThreadUtils.class}) public void bindPreference_hasSummaryUri_shouldLoadSummaryFromContentProvider() { diff --git a/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java b/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java index 06d5a96de9b..3726fb4d2bd 100644 --- a/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java @@ -24,6 +24,7 @@ import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; import android.app.Activity; +import android.content.Context; import android.content.pm.ActivityInfo; import android.os.Bundle; @@ -46,6 +47,7 @@ public class SummaryLoaderTest { private static final String SUMMARY_1 = "summary1"; private static final String SUMMARY_2 = "summary2"; + private Context mContext; private SummaryLoader mSummaryLoader; private boolean mCallbackInvoked; private Tile mTile; @@ -54,12 +56,13 @@ public class SummaryLoaderTest { @Before public void SetUp() { MockitoAnnotations.initMocks(this); + mContext = RuntimeEnvironment.application; mFeatureFactory = FakeFeatureFactory.setupForTest(); final ActivityInfo activityInfo = new ActivityInfo(); activityInfo.packageName = "pkg"; activityInfo.name = "class"; mTile = new Tile(activityInfo, CategoryKey.CATEGORY_HOMEPAGE); - mTile.summary = SUMMARY_1; + mTile.overrideSummary(SUMMARY_1); mCallbackInvoked = false; final Activity activity = Robolectric.buildActivity(Activity.class).get(); @@ -75,14 +78,14 @@ public class SummaryLoaderTest { @Test public void testUpdateSummaryIfNeeded_SummaryIdentical_NoCallback() { - mSummaryLoader.updateSummaryIfNeeded(mTile, SUMMARY_1); + mSummaryLoader.updateSummaryIfNeeded(mContext, mTile, SUMMARY_1); assertThat(mCallbackInvoked).isFalse(); } @Test public void testUpdateSummaryIfNeeded_SummaryChanged_HasCallback() { - mSummaryLoader.updateSummaryIfNeeded(mTile, SUMMARY_2); + mSummaryLoader.updateSummaryIfNeeded(mContext, mTile, SUMMARY_2); assertThat(mCallbackInvoked).isTrue(); } @@ -102,10 +105,10 @@ public class SummaryLoaderTest { when(mFeatureFactory.dashboardFeatureProvider.getDashboardKeyForTile(tile)) .thenReturn(tile.getKey(RuntimeEnvironment.application)); - mSummaryLoader.updateSummaryIfNeeded(tile, testSummary); - tile.summary = null; + mSummaryLoader.updateSummaryIfNeeded(mContext, tile, testSummary); + tile.overrideSummary(null); mSummaryLoader.updateSummaryToCache(category); - assertThat(tile.summary).isEqualTo(testSummary); + assertThat(tile.getSummary(mContext)).isEqualTo(testSummary); } } From d011d45da5b6565a2bbad3e09e20928125e29cd8 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 20 Aug 2018 16:00:26 -0700 Subject: [PATCH 04/10] Remove getExtraAction() from DashboardFeatureProvider. It's always set to null and not doing anything. Bug: 111427617 Test: robotest Change-Id: I7172a31056950b1597f0b98625a3a2615305e466 --- .../android/settings/dashboard/CategoryManager.java | 12 +++--------- .../settings/dashboard/DashboardFeatureProvider.java | 5 ----- .../dashboard/DashboardFeatureProviderImpl.java | 7 +------ .../dashboard/DashboardFeatureProviderImplTest.java | 5 ----- 4 files changed, 4 insertions(+), 25 deletions(-) diff --git a/src/com/android/settings/dashboard/CategoryManager.java b/src/com/android/settings/dashboard/CategoryManager.java index 21324b288a8..5cc75c88f91 100644 --- a/src/com/android/settings/dashboard/CategoryManager.java +++ b/src/com/android/settings/dashboard/CategoryManager.java @@ -51,25 +51,19 @@ public class CategoryManager { private final Map mCategoryByKeyMap; private List mCategories; - private String mExtraAction; public static CategoryManager get(Context context) { - return get(context, null); - } - - public static CategoryManager get(Context context, String action) { if (sInstance == null) { - sInstance = new CategoryManager(context, action); + sInstance = new CategoryManager(context); } return sInstance; } - CategoryManager(Context context, String action) { + CategoryManager(Context context) { mTileByComponentCache = new ArrayMap<>(); mCategoryByKeyMap = new ArrayMap<>(); mInterestingConfigChanges = new InterestingConfigChanges(); mInterestingConfigChanges.applyNewConfig(context.getResources()); - mExtraAction = action; } public synchronized DashboardCategory getTilesByCategory(Context context, String categoryKey) { @@ -117,7 +111,7 @@ public class CategoryManager { mTileByComponentCache.clear(); } mCategoryByKeyMap.clear(); - mCategories = TileUtils.getCategories(context, mTileByComponentCache, mExtraAction); + mCategories = TileUtils.getCategories(context, mTileByComponentCache); for (DashboardCategory category : mCategories) { mCategoryByKeyMap.put(category.key, category); } diff --git a/src/com/android/settings/dashboard/DashboardFeatureProvider.java b/src/com/android/settings/dashboard/DashboardFeatureProvider.java index 81fb99e83be..9f562a08467 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProvider.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProvider.java @@ -58,11 +58,6 @@ public interface DashboardFeatureProvider { void bindPreferenceToTile(FragmentActivity activity, boolean forceRoundedIcon, int sourceMetricsCategory, Preference pref, Tile tile, String key, int baseOrder); - /** - * Returns additional intent filter action for dashboard tiles - */ - String getExtraIntentAction(); - /** * Opens a tile to its destination intent. */ diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java index 3c0a65d30f0..2267311a6e4 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java @@ -71,7 +71,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { public DashboardFeatureProviderImpl(Context context) { mContext = context.getApplicationContext(); - mCategoryManager = CategoryManager.get(context, getExtraIntentAction()); + mCategoryManager = CategoryManager.get(context); mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); mPackageManager = context.getPackageManager(); } @@ -151,11 +151,6 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { } } - @Override - public String getExtraIntentAction() { - return null; - } - @Override public void openTileIntent(FragmentActivity activity, Tile tile) { if (tile == null) { diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java index d49e4fbb057..4e788a11516 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java @@ -365,11 +365,6 @@ public class DashboardFeatureProviderImplTest { assertThat(launchIntent).isNull(); } - @Test - public void testGetExtraIntentAction_shouldReturnNull() { - assertThat(mImpl.getExtraIntentAction()).isNull(); - } - @Test public void openTileIntent_profileSelectionDialog_shouldShow() { final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE); From 241a192a10473ace0658597fe627b69b86a372fb Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Tue, 21 Aug 2018 10:39:07 -0400 Subject: [PATCH 05/10] Fix notifications crash Change-Id: I75a34beb124de92c0d7d9033e3fe21dbdeb67ed3 Fixes: 112656503 Test: manual --- .../settings/notification/AppNotificationSettings.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java index 9d8f6f65c0e..cbb50433fd1 100644 --- a/src/com/android/settings/notification/AppNotificationSettings.java +++ b/src/com/android/settings/notification/AppNotificationSettings.java @@ -67,12 +67,18 @@ public class AppNotificationSettings extends NotificationSettingsBase { // if showing legacy settings, pull advanced settings out of the advanced category Preference badge = findPreference(KEY_BADGE); Preference appLink = findPreference(KEY_APP_LINK); + PreferenceGroup advanced = (PreferenceGroup) findPreference(KEY_ADVANCED_CATEGORY); removePreference(KEY_ADVANCED_CATEGORY); if (badge != null) { + if (advanced != null) { + advanced.removePreference(badge); + } screen.addPreference(badge); - } if (appLink != null) { + if (advanced != null) { + advanced.removePreference(appLink); + } screen.addPreference(appLink); } } From 3cfa49e851f8366f991f35bf297995a45c07138f Mon Sep 17 00:00:00 2001 From: Beverly Date: Tue, 21 Aug 2018 11:35:54 -0400 Subject: [PATCH 06/10] Use title in ManagedServiceSetting dialogs - Use the title (not summary) of the preference in its warning dialogs Test: manual Bug: 112687996 Change-Id: Ia217e5252cf7a48450da853c0270093ffb57dca7 --- src/com/android/settings/utils/ManagedServiceSettings.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/utils/ManagedServiceSettings.java b/src/com/android/settings/utils/ManagedServiceSettings.java index e222e569583..a448776aa38 100644 --- a/src/com/android/settings/utils/ManagedServiceSettings.java +++ b/src/com/android/settings/utils/ManagedServiceSettings.java @@ -122,6 +122,7 @@ public abstract class ManagedServiceSettings extends EmptyTextSettings { // unlikely, as we are iterating over live services. Log.e(TAG, "can't find package name", e); } + final String finalTitle = title.toString(); final String summary = service.loadLabel(mPm).toString(); final SwitchPreference pref = new AppSwitchPreference(getPrefContext()); pref.setPersistent(false); @@ -142,7 +143,7 @@ public abstract class ManagedServiceSettings extends EmptyTextSettings { } pref.setOnPreferenceChangeListener((preference, newValue) -> { final boolean enable = (boolean) newValue; - return setEnabled(cn, summary, enable); + return setEnabled(cn, finalTitle, enable); }); pref.setKey(cn.flattenToString()); screen.addPreference(pref); From 57fcb2f1f133e033d6ca519ba240aee879e6ce12 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Tue, 21 Aug 2018 18:26:29 +0200 Subject: [PATCH 07/10] Cutout emulation: string changes and ordering Updates strings according to spec. Also ensures that the emulation overlays are shown in the order of their priority. Bug: 112876936 Test: Open developer options, go to "display cutout", verify strings. Change-Id: If2d05595d02a277896202ab2a6262c99508a3a17 Merged-In: If2d05595d02a277896202ab2a6262c99508a3a17 --- res/values/strings.xml | 6 ++--- ...lateDisplayCutoutPreferenceController.java | 6 ++++- .../wrapper/OverlayManagerWrapper.java | 5 +++- ...DisplayCutoutPreferenceControllerTest.java | 26 ++++++++++++++----- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 117035a349c..fb5f395571f 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -9417,13 +9417,13 @@ Ranking object doesn\'t contain this key. - Simulate a display with a cutout + Display cutout display cutout, notch - - None + + Device default Special app access diff --git a/src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java b/src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java index 9fa323a33b1..651772e2859 100644 --- a/src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java +++ b/src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java @@ -33,6 +33,7 @@ import com.android.settings.wrapper.OverlayManagerWrapper; import com.android.settings.wrapper.OverlayManagerWrapper.OverlayInfo; import com.android.settingslib.development.DeveloperOptionsPreferenceController; +import java.util.Comparator; import java.util.List; public class EmulateDisplayCutoutPreferenceController extends @@ -40,6 +41,8 @@ public class EmulateDisplayCutoutPreferenceController extends PreferenceControllerMixin { private static final String KEY = "display_cutout_emulation"; + private static final Comparator OVERLAY_INFO_COMPARATOR = + Comparator.comparingInt(a -> a.priority); private final OverlayManagerWrapper mOverlayManager; private final boolean mAvailable; @@ -120,7 +123,7 @@ public class EmulateDisplayCutoutPreferenceController extends int current = 0; pkgs[0] = ""; - labels[0] = mContext.getString(R.string.display_cutout_emulation_none); + labels[0] = mContext.getString(R.string.display_cutout_emulation_device_default); for (int i = 0; i < overlays.length; i++) { OverlayInfo o = overlays[i]; @@ -153,6 +156,7 @@ public class EmulateDisplayCutoutPreferenceController extends overlayInfos.remove(i); } } + overlayInfos.sort(OVERLAY_INFO_COMPARATOR); return overlayInfos.toArray(new OverlayInfo[overlayInfos.size()]); } diff --git a/src/com/android/settings/wrapper/OverlayManagerWrapper.java b/src/com/android/settings/wrapper/OverlayManagerWrapper.java index 6e3c2348857..371504ff551 100644 --- a/src/com/android/settings/wrapper/OverlayManagerWrapper.java +++ b/src/com/android/settings/wrapper/OverlayManagerWrapper.java @@ -81,18 +81,21 @@ public class OverlayManagerWrapper { public static final String CATEGORY_THEME = android.content.om.OverlayInfo.CATEGORY_THEME; public final String packageName; public final String category; + public final int priority; private final boolean mEnabled; - public OverlayInfo(String packageName, String category, boolean enabled) { + public OverlayInfo(String packageName, String category, boolean enabled, int priority) { this.packageName = packageName; this.category = category; mEnabled = enabled; + this.priority = priority; } public OverlayInfo(android.content.om.OverlayInfo info) { mEnabled = info.isEnabled(); category = info.category; packageName = info.packageName; + priority = info.priority; } public boolean isEnabled() { diff --git a/tests/robotests/src/com/android/settings/development/EmulateDisplayCutoutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/EmulateDisplayCutoutPreferenceControllerTest.java index 73c976c70bb..a01d33a75bb 100644 --- a/tests/robotests/src/com/android/settings/development/EmulateDisplayCutoutPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/EmulateDisplayCutoutPreferenceControllerTest.java @@ -17,6 +17,8 @@ package com.android.settings.development; import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.AdditionalMatchers.aryEq; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; @@ -38,6 +40,7 @@ import com.android.settings.wrapper.OverlayManagerWrapper.OverlayInfo; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.AdditionalMatchers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -46,10 +49,10 @@ import java.util.Arrays; @RunWith(SettingsRobolectricTestRunner.class) public class EmulateDisplayCutoutPreferenceControllerTest { - private static final OverlayInfo ONE_DISABLED = createFakeOverlay("emulation.one", false); - private static final OverlayInfo ONE_ENABLED = createFakeOverlay("emulation.one", true); - private static final OverlayInfo TWO_DISABLED = createFakeOverlay("emulation.two", false); - private static final OverlayInfo TWO_ENABLED = createFakeOverlay("emulation.two", true); + private static final OverlayInfo ONE_DISABLED = createFakeOverlay("emulation.one", false, 1); + private static final OverlayInfo ONE_ENABLED = createFakeOverlay("emulation.one", true, 1); + private static final OverlayInfo TWO_DISABLED = createFakeOverlay("emulation.two", false, 2); + private static final OverlayInfo TWO_ENABLED = createFakeOverlay("emulation.two", true, 2); @Mock private Context mContext; @@ -127,6 +130,16 @@ public class EmulateDisplayCutoutPreferenceControllerTest { verify(mPreference).setValueIndex(0); } + @Test + public void ordered_by_priority() throws Exception { + mockCurrentOverlays(TWO_DISABLED, ONE_DISABLED); + + mController.updateState(null); + + verify(mPreference).setEntryValues( + aryEq(new String[]{"", ONE_DISABLED.packageName, TWO_DISABLED.packageName})); + } + @Test public void onDeveloperOptionsSwitchDisabled() throws Exception { mockCurrentOverlays(ONE_ENABLED, TWO_DISABLED); @@ -145,7 +158,8 @@ public class EmulateDisplayCutoutPreferenceControllerTest { mOverlayManager); } - private static OverlayInfo createFakeOverlay(String pkg, boolean enabled) { - return new OverlayInfo(pkg, DisplayCutout.EMULATION_OVERLAY_CATEGORY, enabled); + private static OverlayInfo createFakeOverlay(String pkg, boolean enabled, int priority) { + return new OverlayInfo(pkg, DisplayCutout.EMULATION_OVERLAY_CATEGORY, enabled, + priority); } } \ No newline at end of file From 1be35697ed762b47e3b9bbf49f8162f4c6362241 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Tue, 21 Aug 2018 18:26:29 +0200 Subject: [PATCH 08/10] Cutout emulation: string changes and ordering Updates strings according to spec. Also ensures that the emulation overlays are shown in the order of their priority. Bug: 112876936 Test: Open developer options, go to "display cutout", verify strings. Change-Id: If2d05595d02a277896202ab2a6262c99508a3a17 --- res/values/strings.xml | 6 ++--- ...lateDisplayCutoutPreferenceController.java | 6 ++++- ...DisplayCutoutPreferenceControllerTest.java | 27 ++++++++++++++----- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index b1c94dff4e5..5bdd578e959 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -9392,13 +9392,13 @@ Ranking object doesn\'t contain this key. - Simulate a display with a cutout + Display cutout display cutout, notch - - None + + Device default Special app access diff --git a/src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java b/src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java index 01687c63131..4ae8cec168f 100644 --- a/src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java +++ b/src/com/android/settings/development/EmulateDisplayCutoutPreferenceController.java @@ -31,6 +31,7 @@ import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.development.DeveloperOptionsPreferenceController; +import java.util.Comparator; import java.util.List; import androidx.annotation.VisibleForTesting; @@ -43,6 +44,8 @@ public class EmulateDisplayCutoutPreferenceController extends PreferenceControllerMixin { private static final String KEY = "display_cutout_emulation"; + private static final Comparator OVERLAY_INFO_COMPARATOR = + Comparator.comparingInt(a -> a.priority); private final IOverlayManager mOverlayManager; private final boolean mAvailable; @@ -128,7 +131,7 @@ public class EmulateDisplayCutoutPreferenceController extends int current = 0; pkgs[0] = ""; - labels[0] = mContext.getString(R.string.display_cutout_emulation_none); + labels[0] = mContext.getString(R.string.display_cutout_emulation_device_default); for (int i = 0; i < overlays.length; i++) { OverlayInfo o = overlays[i]; @@ -165,6 +168,7 @@ public class EmulateDisplayCutoutPreferenceController extends } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } + overlayInfos.sort(OVERLAY_INFO_COMPARATOR); return overlayInfos.toArray(new OverlayInfo[overlayInfos.size()]); } diff --git a/tests/robotests/src/com/android/settings/development/EmulateDisplayCutoutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/EmulateDisplayCutoutPreferenceControllerTest.java index c77fcab2c53..a213f6a6e81 100644 --- a/tests/robotests/src/com/android/settings/development/EmulateDisplayCutoutPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/EmulateDisplayCutoutPreferenceControllerTest.java @@ -17,6 +17,8 @@ package com.android.settings.development; import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.AdditionalMatchers.aryEq; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; @@ -36,6 +38,7 @@ import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.AdditionalMatchers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; @@ -48,10 +51,10 @@ import androidx.preference.PreferenceScreen; @RunWith(SettingsRobolectricTestRunner.class) public class EmulateDisplayCutoutPreferenceControllerTest { - private static final OverlayInfo ONE_DISABLED = createFakeOverlay("emulation.one", false); - private static final OverlayInfo ONE_ENABLED = createFakeOverlay("emulation.one", true); - private static final OverlayInfo TWO_DISABLED = createFakeOverlay("emulation.two", false); - private static final OverlayInfo TWO_ENABLED = createFakeOverlay("emulation.two", true); + private static final OverlayInfo ONE_DISABLED = createFakeOverlay("emulation.one", false, 1); + private static final OverlayInfo ONE_ENABLED = createFakeOverlay("emulation.one", true, 1); + private static final OverlayInfo TWO_DISABLED = createFakeOverlay("emulation.two", false, 2); + private static final OverlayInfo TWO_ENABLED = createFakeOverlay("emulation.two", true, 2); @Mock private Context mContext; @@ -134,6 +137,16 @@ public class EmulateDisplayCutoutPreferenceControllerTest { verify(mPreference).setValueIndex(0); } + @Test + public void ordered_by_priority() throws Exception { + mockCurrentOverlays(TWO_DISABLED, ONE_DISABLED); + + mController.updateState(null); + + verify(mPreference).setEntryValues( + aryEq(new String[]{"", ONE_DISABLED.packageName, TWO_DISABLED.packageName})); + } + @Test public void onDeveloperOptionsSwitchDisabled() throws Exception { mockCurrentOverlays(ONE_ENABLED, TWO_DISABLED); @@ -152,16 +165,16 @@ public class EmulateDisplayCutoutPreferenceControllerTest { mOverlayManager); } - private static OverlayInfo createFakeOverlay(String pkg, boolean enabled) { + private static OverlayInfo createFakeOverlay(String pkg, boolean enabled, int priority) { final int state = (enabled) ? OverlayInfo.STATE_ENABLED : OverlayInfo.STATE_DISABLED; return new OverlayInfo(pkg /* packageName */, - pkg + ".target" /* targetPackageName */, + "android" /* targetPackageName */, DisplayCutout.EMULATION_OVERLAY_CATEGORY /* category */, pkg + ".baseCodePath" /* baseCodePath */, state /* state */, 0 /* userId */, - 0 /* priority */, + priority, true /* isStatic */); } } \ No newline at end of file From a4b14bd9f18fb59ab906a65e55e735bec65f6fc4 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 21 Aug 2018 12:15:42 -0700 Subject: [PATCH 09/10] Remove condition manager v1 code. Change-Id: I866c1f7c493c6080ccf766ecfc8e6b00dafeecd9 Fixes: 112485407 Test: robotests --- .../android/settings/core/FeatureFlags.java | 1 - .../settings/dashboard/DashboardAdapter.java | 52 +-- .../settings/dashboard/DashboardData.java | 84 ++-- .../settings/dashboard/DashboardSummary.java | 76 +--- .../AbnormalRingerConditionBase.java | 84 ---- .../AbnormalRingerConditionController.java | 4 +- .../conditional/AirplaneModeCondition.java | 121 ------ .../{v2 => }/AirplaneModeConditionCard.java | 2 +- .../AirplaneModeConditionController.java | 2 +- .../conditional/BackgroundDataCondition.java | 79 ---- .../{v2 => }/BackgroundDataConditionCard.java | 2 +- .../BackgroundDataConditionController.java | 2 +- .../conditional/BatterySaverCondition.java | 117 ------ .../{v2 => }/BatterySaverConditionCard.java | 2 +- .../BatterySaverConditionController.java | 2 +- .../conditional/CellularDataCondition.java | 118 ------ .../{v2 => }/CellularDataConditionCard.java | 2 +- .../CellularDataConditionController.java | 2 +- .../homepage/conditional/Condition.java | 162 -------- .../conditional/ConditionAdapter.java | 159 +++----- .../conditional/ConditionManager.java | 374 +++++++----------- .../conditional/{v2 => }/ConditionalCard.java | 2 +- .../{v2 => }/ConditionalCardController.java | 2 +- .../homepage/conditional/DndCondition.java | 166 -------- .../{v2 => }/DndConditionCard.java | 4 +- .../{v2 => }/DndConditionCardController.java | 2 +- .../conditional/HotspotCondition.java | 145 ------- .../{v2 => }/HotspotConditionCard.java | 2 +- .../{v2 => }/HotspotConditionController.java | 2 +- .../conditional/NightDisplayCondition.java | 96 ----- .../{v2 => }/NightDisplayConditionCard.java | 2 +- .../NightDisplayConditionController.java | 2 +- .../conditional/RingerMutedCondition.java | 71 ---- .../{v2 => }/RingerMutedConditionCard.java | 2 +- .../RingerMutedConditionController.java | 2 +- .../conditional/RingerVibrateCondition.java | 56 --- .../{v2 => }/RingerVibrateConditionCard.java | 2 +- .../RingerVibrateConditionController.java | 2 +- .../conditional/WorkModeCondition.java | 108 ----- .../{v2 => }/WorkModeConditionCard.java | 2 +- .../{v2 => }/WorkModeConditionController.java | 2 +- .../conditional/v2/ConditionAdapter.java | 130 ------ .../conditional/v2/ConditionManager.java | 210 ---------- .../dashboard/DashboardAdapterTest.java | 37 +- .../settings/dashboard/DashboardDataTest.java | 20 +- .../dashboard/DashboardSummaryTest.java | 1 - ...rmalRingerConditionControllerBaseTest.java | 4 +- ...BackgroundDataConditionControllerTest.java | 3 +- .../BatterySaverConditionControllerTest.java | 4 +- .../BatterySaverConditionTest.java | 103 ----- .../conditional/ConditionAdapterTest.java | 56 +-- .../{v2 => }/ConditionManagerTest.java | 5 +- .../homepage/conditional/ConditionTest.java | 161 -------- .../conditional/DndConditionTest.java | 118 ------ .../DndConditionalCardControllerTest.java | 4 +- .../{v2 => }/DndConditionalCardTest.java | 5 +- .../conditional/RingerMutedConditionTest.java | 96 ----- ...va => RingerVibrateConditionCardTest.java} | 18 +- .../WorkModeConditionControllerTest.java | 3 +- .../conditional/WorkModeConditionTest.java | 65 --- 60 files changed, 333 insertions(+), 2829 deletions(-) delete mode 100644 src/com/android/settings/homepage/conditional/AbnormalRingerConditionBase.java rename src/com/android/settings/homepage/conditional/{v2 => }/AbnormalRingerConditionController.java (96%) delete mode 100644 src/com/android/settings/homepage/conditional/AirplaneModeCondition.java rename src/com/android/settings/homepage/conditional/{v2 => }/AirplaneModeConditionCard.java (96%) rename src/com/android/settings/homepage/conditional/{v2 => }/AirplaneModeConditionController.java (97%) delete mode 100644 src/com/android/settings/homepage/conditional/BackgroundDataCondition.java rename src/com/android/settings/homepage/conditional/{v2 => }/BackgroundDataConditionCard.java (96%) rename src/com/android/settings/homepage/conditional/{v2 => }/BackgroundDataConditionController.java (96%) delete mode 100644 src/com/android/settings/homepage/conditional/BatterySaverCondition.java rename src/com/android/settings/homepage/conditional/{v2 => }/BatterySaverConditionCard.java (97%) rename src/com/android/settings/homepage/conditional/{v2 => }/BatterySaverConditionController.java (98%) delete mode 100644 src/com/android/settings/homepage/conditional/CellularDataCondition.java rename src/com/android/settings/homepage/conditional/{v2 => }/CellularDataConditionCard.java (96%) rename src/com/android/settings/homepage/conditional/{v2 => }/CellularDataConditionController.java (98%) delete mode 100644 src/com/android/settings/homepage/conditional/Condition.java rename src/com/android/settings/homepage/conditional/{v2 => }/ConditionalCard.java (95%) rename src/com/android/settings/homepage/conditional/{v2 => }/ConditionalCardController.java (95%) delete mode 100644 src/com/android/settings/homepage/conditional/DndCondition.java rename src/com/android/settings/homepage/conditional/{v2 => }/DndConditionCard.java (93%) rename src/com/android/settings/homepage/conditional/{v2 => }/DndConditionCardController.java (98%) delete mode 100644 src/com/android/settings/homepage/conditional/HotspotCondition.java rename src/com/android/settings/homepage/conditional/{v2 => }/HotspotConditionCard.java (97%) rename src/com/android/settings/homepage/conditional/{v2 => }/HotspotConditionController.java (98%) delete mode 100644 src/com/android/settings/homepage/conditional/NightDisplayCondition.java rename src/com/android/settings/homepage/conditional/{v2 => }/NightDisplayConditionCard.java (97%) rename src/com/android/settings/homepage/conditional/{v2 => }/NightDisplayConditionController.java (97%) delete mode 100644 src/com/android/settings/homepage/conditional/RingerMutedCondition.java rename src/com/android/settings/homepage/conditional/{v2 => }/RingerMutedConditionCard.java (97%) rename src/com/android/settings/homepage/conditional/{v2 => }/RingerMutedConditionController.java (97%) delete mode 100644 src/com/android/settings/homepage/conditional/RingerVibrateCondition.java rename src/com/android/settings/homepage/conditional/{v2 => }/RingerVibrateConditionCard.java (97%) rename src/com/android/settings/homepage/conditional/{v2 => }/RingerVibrateConditionController.java (95%) delete mode 100644 src/com/android/settings/homepage/conditional/WorkModeCondition.java rename src/com/android/settings/homepage/conditional/{v2 => }/WorkModeConditionCard.java (96%) rename src/com/android/settings/homepage/conditional/{v2 => }/WorkModeConditionController.java (97%) delete mode 100644 src/com/android/settings/homepage/conditional/v2/ConditionAdapter.java delete mode 100644 src/com/android/settings/homepage/conditional/v2/ConditionManager.java rename tests/robotests/src/com/android/settings/homepage/conditional/{v2 => }/AbnormalRingerConditionControllerBaseTest.java (92%) rename tests/robotests/src/com/android/settings/homepage/conditional/{v2 => }/BackgroundDataConditionControllerTest.java (93%) rename tests/robotests/src/com/android/settings/homepage/conditional/{v2 => }/BatterySaverConditionControllerTest.java (93%) delete mode 100644 tests/robotests/src/com/android/settings/homepage/conditional/BatterySaverConditionTest.java rename tests/robotests/src/com/android/settings/homepage/conditional/{v2 => }/ConditionManagerTest.java (93%) delete mode 100644 tests/robotests/src/com/android/settings/homepage/conditional/ConditionTest.java delete mode 100644 tests/robotests/src/com/android/settings/homepage/conditional/DndConditionTest.java rename tests/robotests/src/com/android/settings/homepage/conditional/{v2 => }/DndConditionalCardControllerTest.java (91%) rename tests/robotests/src/com/android/settings/homepage/conditional/{v2 => }/DndConditionalCardTest.java (87%) delete mode 100644 tests/robotests/src/com/android/settings/homepage/conditional/RingerMutedConditionTest.java rename tests/robotests/src/com/android/settings/homepage/conditional/{RingerVibrateConditionTest.java => RingerVibrateConditionCardTest.java} (74%) rename tests/robotests/src/com/android/settings/homepage/conditional/{v2 => }/WorkModeConditionControllerTest.java (93%) delete mode 100644 tests/robotests/src/com/android/settings/homepage/conditional/WorkModeConditionTest.java diff --git a/src/com/android/settings/core/FeatureFlags.java b/src/com/android/settings/core/FeatureFlags.java index c8ae82f4859..c6b9d836828 100644 --- a/src/com/android/settings/core/FeatureFlags.java +++ b/src/com/android/settings/core/FeatureFlags.java @@ -25,5 +25,4 @@ public class FeatureFlags { public static final String AUDIO_SWITCHER_SETTINGS = "settings_audio_switcher"; public static final String DYNAMIC_HOMEPAGE = "settings_dynamic_homepage"; public static final String HEARING_AID_SETTINGS = "settings_bluetooth_hearing_aid"; - public static final String CONDITION_MANAGER_V2 = "settings_condition_manager_v2"; } diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java index 5a8df911373..5e2e57da18d 100644 --- a/src/com/android/settings/dashboard/DashboardAdapter.java +++ b/src/com/android/settings/dashboard/DashboardAdapter.java @@ -40,10 +40,9 @@ import com.android.settings.R; import com.android.settings.R.id; import com.android.settings.dashboard.DashboardData.ConditionHeaderData; import com.android.settings.dashboard.suggestions.SuggestionAdapter; -import com.android.settings.homepage.conditional.Condition; import com.android.settings.homepage.conditional.ConditionAdapter; -import com.android.settings.homepage.conditional.v2.ConditionManager; -import com.android.settings.homepage.conditional.v2.ConditionalCard; +import com.android.settings.homepage.conditional.ConditionManager; +import com.android.settings.homepage.conditional.ConditionalCard; import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.RoundedHomepageIcon; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; @@ -88,7 +87,7 @@ public class DashboardAdapter extends RecyclerView.Adapter conditions, ConditionManager conditionManager, + ConditionManager conditionManager, SuggestionControllerMixinCompat suggestionControllerMixin, Lifecycle lifecycle) { DashboardCategory category = null; @@ -116,8 +115,7 @@ public class DashboardAdapter extends RecyclerView.Adapter conditions) { + public void setConditions(List conditions) { final DashboardData prevData = mDashboardData; Log.d(TAG, "adapter setConditions called"); mDashboardData = new DashboardData.Builder(prevData) @@ -151,15 +149,6 @@ public class DashboardAdapter extends RecyclerView.Adapter conditions) { - final DashboardData prevData = mDashboardData; - Log.d(TAG, "adapter setConditions called"); - mDashboardData = new DashboardData.Builder(prevData) - .setConditionsV2(conditions) - .build(); - notifyDashboardDataChanged(prevData); - } - @Override public void onSuggestionClosed(Suggestion suggestion) { final List list = mDashboardData.getSuggestions(); @@ -301,31 +290,12 @@ public class DashboardAdapter extends RecyclerView.Adapter conditionsV1; - final List conditionsV2; - if (conditions == null || conditions.isEmpty()) { - conditionsV1 = null; - conditionsV2 = null; - } else if (conditions.get(0) instanceof Condition) { - conditionsV1 = conditions; - conditionsV2 = null; - } else { - conditionsV1 = null; - conditionsV2 = conditions; - } - if (conditionsV2 == null) { - final ConditionAdapter adapter = new ConditionAdapter(mContext, - conditionsV1, mDashboardData.isConditionExpanded()); - adapter.addDismissHandling(holder.data); - holder.data.setAdapter(adapter); - } else { - final com.android.settings.homepage.conditional.v2.ConditionAdapter adapter = - new com.android.settings.homepage.conditional.v2.ConditionAdapter( - mContext, mConditionManager, conditionsV2, - mDashboardData.isConditionExpanded()); - holder.data.setAdapter(adapter); - } + final List conditions = + (List) mDashboardData.getItemEntityByPosition(position); + final ConditionAdapter adapter = new ConditionAdapter( + mContext, mConditionManager, conditions, + mDashboardData.isConditionExpanded()); + holder.data.setAdapter(adapter); holder.data.setLayoutManager(new LinearLayoutManager(mContext)); } diff --git a/src/com/android/settings/dashboard/DashboardData.java b/src/com/android/settings/dashboard/DashboardData.java index 9feff580e8d..db296ab7470 100644 --- a/src/com/android/settings/dashboard/DashboardData.java +++ b/src/com/android/settings/dashboard/DashboardData.java @@ -24,8 +24,7 @@ import androidx.annotation.VisibleForTesting; import androidx.recyclerview.widget.DiffUtil; import com.android.settings.R; -import com.android.settings.homepage.conditional.Condition; -import com.android.settings.homepage.conditional.v2.ConditionalCard; +import com.android.settings.homepage.conditional.ConditionalCard; import com.android.settingslib.drawer.DashboardCategory; import com.android.settingslib.drawer.Tile; @@ -57,15 +56,13 @@ public class DashboardData { private final List mItems; private final DashboardCategory mCategory; - private final List mConditions; - private final List mConditionsV2; + private final List mConditions; private final List mSuggestions; private final boolean mConditionExpanded; private DashboardData(Builder builder) { mCategory = builder.mCategory; mConditions = builder.mConditions; - mConditionsV2 = builder.mConditionsV2; mSuggestions = builder.mSuggestions; mConditionExpanded = builder.mConditionExpanded; mItems = new ArrayList<>(); @@ -106,7 +103,7 @@ public class DashboardData { return mCategory; } - public List getConditions() { + public List getConditions() { return mConditions; } @@ -168,7 +165,8 @@ public class DashboardData { /** * Add item into list when {@paramref add} is true. * - * @param item maybe {@link Condition}, {@link Tile}, {@link DashboardCategory} or null + * @param item maybe {@link ConditionalCard}, {@link Tile}, {@link DashboardCategory} + * or null * @param type type of the item, and value is the layout id * @param stableId The stable id for this item * @param add flag about whether to add item into list @@ -184,11 +182,8 @@ public class DashboardData { * and mIsShowingAll, mConditionExpanded flag. */ private void buildItemsData() { - final List conditionsV1 = getConditionsToShow(mConditions); - final boolean hasConditionsV1 = sizeOf(conditionsV1) > 0; - final List conditionsV2 = mConditionsV2; - final boolean hasConditionsV2 = sizeOf(conditionsV2) > 0; - final boolean hasConditions = hasConditionsV1 || hasConditionsV2; + final List conditions = mConditions; + final boolean hasConditions = sizeOf(conditions) > 0; final List suggestions = getSuggestionsToShow(mSuggestions); final boolean hasSuggestions = sizeOf(suggestions) > 0; @@ -203,20 +198,14 @@ public class DashboardData { STABLE_ID_SUGGESTION_CONDITION_DIVIDER, hasSuggestions && hasConditions); /* Condition header. This will be present when there is condition and it is collapsed */ - addToItemList(new ConditionHeaderData(conditionsV1, conditionsV2), + addToItemList(new ConditionHeaderData(conditions), R.layout.condition_header, STABLE_ID_CONDITION_HEADER, hasConditions && !mConditionExpanded); /* Condition container. This is the card view that contains the list of conditions. * This will be added whenever the condition list is not empty and expanded */ - if (hasConditionsV1) { - addToItemList(conditionsV1, R.layout.condition_container, - STABLE_ID_CONDITION_CONTAINER, hasConditionsV1 && mConditionExpanded); - } - if (hasConditionsV2) { - addToItemList(conditionsV2, R.layout.condition_container, - STABLE_ID_CONDITION_CONTAINER, hasConditionsV2 && mConditionExpanded); - } + addToItemList(conditions, R.layout.condition_container, + STABLE_ID_CONDITION_CONTAINER, hasConditions && mConditionExpanded); /* Condition footer. This will be present when there is condition and it is expanded */ addToItemList(null /* item */, R.layout.condition_footer, @@ -236,21 +225,6 @@ public class DashboardData { return list == null ? 0 : list.size(); } - private List getConditionsToShow(List conditions) { - if (conditions == null) { - return null; - } - List result = new ArrayList<>(); - final int size = conditions == null ? 0 : conditions.size(); - for (int i = 0; i < size; i++) { - final Condition condition = conditions.get(i); - if (condition.shouldShow()) { - result.add(condition); - } - } - return result; - } - private List getSuggestionsToShow(List suggestions) { if (suggestions == null) { return null; @@ -270,8 +244,7 @@ public class DashboardData { */ public static class Builder { private DashboardCategory mCategory; - private List mConditions; - private List mConditionsV2; + private List mConditions; private List mSuggestions; private boolean mConditionExpanded; @@ -281,7 +254,6 @@ public class DashboardData { public Builder(DashboardData dashboardData) { mCategory = dashboardData.mCategory; mConditions = dashboardData.mConditions; - mConditionsV2 = dashboardData.mConditionsV2; mSuggestions = dashboardData.mSuggestions; mConditionExpanded = dashboardData.mConditionExpanded; } @@ -291,16 +263,11 @@ public class DashboardData { return this; } - public Builder setConditions(List conditions) { + public Builder setConditions(List conditions) { this.mConditions = conditions; return this; } - public Builder setConditionsV2(List conditions) { - this.mConditionsV2 = conditions; - return this; - } - public Builder setSuggestions(List suggestions) { this.mSuggestions = suggestions; return this; @@ -374,7 +341,7 @@ public class DashboardData { } /** - * The main data object in item, usually is a {@link Tile}, {@link Condition} + * The main data object in item, usually is a {@link Tile}, {@link ConditionalCard} * object. This object can also be null when the * item is an divider line. Please refer to {@link #buildItemsData()} for * detail usage of the Item. @@ -448,22 +415,15 @@ public class DashboardData { public final CharSequence title; public final int conditionCount; - public ConditionHeaderData(List conditions, List conditionsV2) { - if (conditionsV2 == null) { - conditionCount = sizeOf(conditions); - title = conditionCount > 0 ? conditions.get(0).getTitle() : null; - conditionIcons = new ArrayList<>(); - for (int i = 0; conditions != null && i < conditions.size(); i++) { - final Condition condition = conditions.get(i); - conditionIcons.add(condition.getIcon()); - } - } else { - conditionCount = sizeOf(conditionsV2); - title = conditionCount > 0 ? conditionsV2.get(0).getTitle() : null; - conditionIcons = new ArrayList<>(); - for (ConditionalCard card : conditionsV2) { - conditionIcons.add(card.getIcon()); - } + public ConditionHeaderData(List conditions) { + conditionCount = sizeOf(conditions); + title = conditionCount > 0 ? conditions.get(0).getTitle() : null; + conditionIcons = new ArrayList<>(); + if (conditions == null) { + return; + } + for (ConditionalCard card : conditions) { + conditionIcons.add(card.getIcon()); } } } diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java index 18f6999cf6d..4575482f2d6 100644 --- a/src/com/android/settings/dashboard/DashboardSummary.java +++ b/src/com/android/settings/dashboard/DashboardSummary.java @@ -37,11 +37,10 @@ import com.android.settings.core.InstrumentedFragment; import com.android.settings.core.SettingsBaseActivity; import com.android.settings.core.SettingsBaseActivity.CategoryListener; import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider; -import com.android.settings.homepage.conditional.Condition; import com.android.settings.homepage.conditional.ConditionListener; -import com.android.settings.homepage.conditional.ConditionManager; import com.android.settings.homepage.conditional.FocusRecyclerView; import com.android.settings.homepage.conditional.FocusRecyclerView.FocusListener; +import com.android.settings.homepage.conditional.ConditionManager; import com.android.settings.overlay.FeatureFactory; import com.android.settings.widget.ActionBarShadowController; import com.android.settingslib.drawer.CategoryKey; @@ -74,7 +73,6 @@ public class DashboardSummary extends InstrumentedFragment private DashboardAdapter mAdapter; private SummaryLoader mSummaryLoader; private ConditionManager mConditionManager; - private com.android.settings.homepage.conditional.v2.ConditionManager mConditionManager2; private LinearLayoutManager mLayoutManager; private SuggestionControllerMixinCompat mSuggestionControllerMixin; private DashboardFeatureProvider mDashboardFeatureProvider; @@ -123,18 +121,9 @@ public class DashboardSummary extends InstrumentedFragment mSummaryLoader = new SummaryLoader(activity, CategoryKey.CATEGORY_HOMEPAGE); - if (com.android.settings.homepage.conditional.v2.ConditionManager.isEnabled(activity)) { - mConditionManager = null; - mConditionManager2 = - new com.android.settings.homepage.conditional.v2.ConditionManager( - activity, this /* listener */); - } else { - mConditionManager = ConditionManager.get(activity, false); - mConditionManager2 = null; - } - if (mConditionManager2 == null) { - getSettingsLifecycle().addObserver(mConditionManager); - } + mConditionManager = + new ConditionManager( + activity, this /* listener */); if (savedInstanceState != null) { mIsOnCategoriesChangedCalled = savedInstanceState.getBoolean(STATE_CATEGORIES_CHANGE_CALLED); @@ -157,17 +146,7 @@ public class DashboardSummary extends InstrumentedFragment ((SettingsBaseActivity) getActivity()).addCategoryListener(this); mSummaryLoader.setListening(true); - final int metricsCategory = getMetricsCategory(); - if (mConditionManager2 == null) { - for (Condition c : mConditionManager.getConditions()) { - if (c.shouldShow()) { - mMetricsFeatureProvider.visible(getContext(), metricsCategory, - c.getMetricsConstant()); - } - } - } else { - mConditionManager2.startMonitoringStateChange(); - } + mConditionManager.startMonitoringStateChange(); if (DEBUG_TIMING) { Log.d(TAG, "onResume took " + (System.currentTimeMillis() - startTime) + " ms"); } @@ -179,42 +158,16 @@ public class DashboardSummary extends InstrumentedFragment ((SettingsBaseActivity) getActivity()).remCategoryListener(this); mSummaryLoader.setListening(false); - if (mConditionManager2 == null) { - for (Condition c : mConditionManager.getConditions()) { - if (c.shouldShow()) { - mMetricsFeatureProvider.hidden(getContext(), c.getMetricsConstant()); - } - } - } - // Unregister condition listeners. - if (mConditionManager != null) { - mConditionManager.remListener(this); - } - if (mConditionManager2 != null) { - mConditionManager2.stopMonitoringStateChange(); - } + mConditionManager.stopMonitoringStateChange(); } @Override public void onWindowFocusChanged(boolean hasWindowFocus) { long startTime = System.currentTimeMillis(); - if (mConditionManager2 == null) { - if (hasWindowFocus) { - Log.d(TAG, "Listening for condition changes"); - mConditionManager.addListener(this); - Log.d(TAG, "conditions refreshed"); - mConditionManager.refreshAll(); - } else { - Log.d(TAG, "Stopped listening for condition changes"); - mConditionManager.remListener(this); - } + if (hasWindowFocus) { + mConditionManager.startMonitoringStateChange(); } else { - // TODO(b/112485407): Register monitoring for condition manager v2. - if (hasWindowFocus) { - mConditionManager2.startMonitoringStateChange(); - } else { - mConditionManager2.stopMonitoringStateChange(); - } + mConditionManager.stopMonitoringStateChange(); } if (DEBUG_TIMING) { Log.d(TAG, "onWindowFocusChanged took " @@ -248,8 +201,7 @@ public class DashboardSummary extends InstrumentedFragment mDashboard.setListener(this); mDashboard.setItemAnimator(new DashboardItemAnimator()); mAdapter = new DashboardAdapter(getContext(), bundle, - mConditionManager == null ? null : mConditionManager.getConditions(), - mConditionManager2, + mConditionManager, mSuggestionControllerMixin, getSettingsLifecycle()); mDashboard.setAdapter(mAdapter); @@ -290,14 +242,10 @@ public class DashboardSummary extends InstrumentedFragment // constructor when we create the view, the first handling is not necessary. // But, on the subsequent calls we need to handle it because there might be real changes to // conditions. - if (mOnConditionsChangedCalled || mConditionManager2 != null) { + if (mOnConditionsChangedCalled) { final boolean scrollToTop = mLayoutManager.findFirstCompletelyVisibleItemPosition() <= 1; - if (mConditionManager2 == null) { - mAdapter.setConditions(mConditionManager.getConditions()); - } else { - mAdapter.setConditionsV2(mConditionManager2.getDisplayableCards()); - } + mAdapter.setConditions(mConditionManager.getDisplayableCards()); if (scrollToTop) { mDashboard.scrollToPosition(0); diff --git a/src/com/android/settings/homepage/conditional/AbnormalRingerConditionBase.java b/src/com/android/settings/homepage/conditional/AbnormalRingerConditionBase.java deleted file mode 100644 index b6a67af3015..00000000000 --- a/src/com/android/settings/homepage/conditional/AbnormalRingerConditionBase.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * 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.homepage.conditional; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.media.AudioManager; -import android.provider.Settings; - -import com.android.settings.R; - -@Deprecated -public abstract class AbnormalRingerConditionBase extends Condition { - - private final IntentFilter mFilter; - - protected final AudioManager mAudioManager; - - private final RingerModeChangeReceiver mReceiver; - - AbnormalRingerConditionBase(ConditionManager manager) { - super(manager); - mAudioManager = - (AudioManager) mManager.getContext().getSystemService(Context.AUDIO_SERVICE); - mReceiver = new RingerModeChangeReceiver(this); - - mFilter = new IntentFilter(AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION); - manager.getContext().registerReceiver(mReceiver, mFilter); - } - - @Override - public CharSequence[] getActions() { - return new CharSequence[]{ - mManager.getContext().getText(R.string.condition_device_muted_action_turn_on_sound) - }; - } - - @Override - public void onPrimaryClick() { - mManager.getContext().startActivity( - new Intent(Settings.ACTION_SOUND_SETTINGS) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); - } - - @Override - public void onActionClick(int index) { - mAudioManager.setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL); - mAudioManager.setStreamVolume(AudioManager.STREAM_RING, 1, 0 /* flags */); - refreshState(); - } - - static class RingerModeChangeReceiver extends BroadcastReceiver { - - private final AbnormalRingerConditionBase mCondition; - - public RingerModeChangeReceiver(AbnormalRingerConditionBase condition) { - mCondition = condition; - } - - @Override - public void onReceive(Context context, Intent intent) { - final String action = intent.getAction(); - if (AudioManager.INTERNAL_RINGER_MODE_CHANGED_ACTION.equals(action)) { - mCondition.refreshState(); - } - } - } -} diff --git a/src/com/android/settings/homepage/conditional/v2/AbnormalRingerConditionController.java b/src/com/android/settings/homepage/conditional/AbnormalRingerConditionController.java similarity index 96% rename from src/com/android/settings/homepage/conditional/v2/AbnormalRingerConditionController.java rename to src/com/android/settings/homepage/conditional/AbnormalRingerConditionController.java index 1cc62b944c2..c6fa21d38c0 100644 --- a/src/com/android/settings/homepage/conditional/v2/AbnormalRingerConditionController.java +++ b/src/com/android/settings/homepage/conditional/AbnormalRingerConditionController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.BroadcastReceiver; import android.content.Context; @@ -23,8 +23,6 @@ import android.content.IntentFilter; import android.media.AudioManager; import android.provider.Settings; -import java.util.Objects; - public abstract class AbnormalRingerConditionController implements ConditionalCardController { private static final IntentFilter FILTER = diff --git a/src/com/android/settings/homepage/conditional/AirplaneModeCondition.java b/src/com/android/settings/homepage/conditional/AirplaneModeCondition.java deleted file mode 100644 index 069d316d81e..00000000000 --- a/src/com/android/settings/homepage/conditional/AirplaneModeCondition.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.settings.homepage.conditional; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.graphics.drawable.Drawable; -import android.net.ConnectivityManager; -import android.provider.Settings; -import android.util.Log; - -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.R; -import com.android.settingslib.WirelessUtils; - -/** - * @deprecated in favor of {@link AirplaneModeConditionCard}. - */ -@Deprecated -public class AirplaneModeCondition extends Condition { - public static String TAG = "APM_Condition"; - - private final Receiver mReceiver; - - private static final IntentFilter AIRPLANE_MODE_FILTER = - new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED); - - public AirplaneModeCondition(ConditionManager conditionManager) { - super(conditionManager); - mReceiver = new Receiver(); - } - - @Override - public void refreshState() { - Log.d(TAG, "APM condition refreshed"); - setActive(WirelessUtils.isAirplaneModeOn(mManager.getContext())); - } - - @Override - protected BroadcastReceiver getReceiver() { - return mReceiver; - } - - @Override - protected IntentFilter getIntentFilter() { - return AIRPLANE_MODE_FILTER; - } - - @Override - public Drawable getIcon() { - return mManager.getContext().getDrawable(R.drawable.ic_airplane); - } - - @Override - protected void setActive(boolean active) { - super.setActive(active); - Log.d(TAG, "setActive was called with " + active); - } - - @Override - public CharSequence getTitle() { - return mManager.getContext().getString(R.string.condition_airplane_title); - } - - @Override - public CharSequence getSummary() { - return mManager.getContext().getString(R.string.condition_airplane_summary); - } - - @Override - public CharSequence[] getActions() { - return new CharSequence[] {mManager.getContext().getString(R.string.condition_turn_off)}; - } - - @Override - public void onPrimaryClick() { - mManager.getContext().startActivity( - new Intent(Settings.ACTION_WIRELESS_SETTINGS) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); - } - - @Override - public void onActionClick(int index) { - if (index == 0) { - ConnectivityManager.from(mManager.getContext()).setAirplaneMode(false); - setActive(false); - } else { - throw new IllegalArgumentException("Unexpected index " + index); - } - } - - @Override - public int getMetricsConstant() { - return MetricsEvent.SETTINGS_CONDITION_AIRPLANE_MODE; - } - - public static class Receiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - if (Intent.ACTION_AIRPLANE_MODE_CHANGED.equals(intent.getAction())) { - ConditionManager.get(context).getCondition(AirplaneModeCondition.class) - .refreshState(); - } - } - } -} diff --git a/src/com/android/settings/homepage/conditional/v2/AirplaneModeConditionCard.java b/src/com/android/settings/homepage/conditional/AirplaneModeConditionCard.java similarity index 96% rename from src/com/android/settings/homepage/conditional/v2/AirplaneModeConditionCard.java rename to src/com/android/settings/homepage/conditional/AirplaneModeConditionCard.java index 99055a749fa..f56fcc34d98 100644 --- a/src/com/android/settings/homepage/conditional/v2/AirplaneModeConditionCard.java +++ b/src/com/android/settings/homepage/conditional/AirplaneModeConditionCard.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.graphics.drawable.Drawable; diff --git a/src/com/android/settings/homepage/conditional/v2/AirplaneModeConditionController.java b/src/com/android/settings/homepage/conditional/AirplaneModeConditionController.java similarity index 97% rename from src/com/android/settings/homepage/conditional/v2/AirplaneModeConditionController.java rename to src/com/android/settings/homepage/conditional/AirplaneModeConditionController.java index 2d200ecdba6..db3bc71375b 100644 --- a/src/com/android/settings/homepage/conditional/v2/AirplaneModeConditionController.java +++ b/src/com/android/settings/homepage/conditional/AirplaneModeConditionController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.BroadcastReceiver; import android.content.Context; diff --git a/src/com/android/settings/homepage/conditional/BackgroundDataCondition.java b/src/com/android/settings/homepage/conditional/BackgroundDataCondition.java deleted file mode 100644 index 4e374ef1c6a..00000000000 --- a/src/com/android/settings/homepage/conditional/BackgroundDataCondition.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.settings.homepage.conditional; - -import android.content.Intent; -import android.graphics.drawable.Drawable; -import android.net.NetworkPolicyManager; - -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.R; -import com.android.settings.Settings; - -@Deprecated -public class BackgroundDataCondition extends Condition { - - public BackgroundDataCondition(ConditionManager manager) { - super(manager); - } - - @Override - public void refreshState() { - setActive(NetworkPolicyManager.from(mManager.getContext()).getRestrictBackground()); - } - - @Override - public Drawable getIcon() { - return mManager.getContext().getDrawable(R.drawable.ic_data_saver); - } - - @Override - public CharSequence getTitle() { - return mManager.getContext().getString(R.string.condition_bg_data_title); - } - - @Override - public CharSequence getSummary() { - return mManager.getContext().getString(R.string.condition_bg_data_summary); - } - - @Override - public CharSequence[] getActions() { - return new CharSequence[] {mManager.getContext().getString(R.string.condition_turn_off)}; - } - - @Override - public void onPrimaryClick() { - mManager.getContext().startActivity(new Intent(mManager.getContext(), - Settings.DataUsageSummaryActivity.class) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); - } - - @Override - public int getMetricsConstant() { - return MetricsEvent.SETTINGS_CONDITION_BACKGROUND_DATA; - } - - @Override - public void onActionClick(int index) { - if (index == 0) { - NetworkPolicyManager.from(mManager.getContext()).setRestrictBackground(false); - setActive(false); - } else { - throw new IllegalArgumentException("Unexpected index " + index); - } - } -} diff --git a/src/com/android/settings/homepage/conditional/v2/BackgroundDataConditionCard.java b/src/com/android/settings/homepage/conditional/BackgroundDataConditionCard.java similarity index 96% rename from src/com/android/settings/homepage/conditional/v2/BackgroundDataConditionCard.java rename to src/com/android/settings/homepage/conditional/BackgroundDataConditionCard.java index 3ea31130d8d..13792a9634d 100644 --- a/src/com/android/settings/homepage/conditional/v2/BackgroundDataConditionCard.java +++ b/src/com/android/settings/homepage/conditional/BackgroundDataConditionCard.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.graphics.drawable.Drawable; diff --git a/src/com/android/settings/homepage/conditional/v2/BackgroundDataConditionController.java b/src/com/android/settings/homepage/conditional/BackgroundDataConditionController.java similarity index 96% rename from src/com/android/settings/homepage/conditional/v2/BackgroundDataConditionController.java rename to src/com/android/settings/homepage/conditional/BackgroundDataConditionController.java index 3649607879b..d7c06987e74 100644 --- a/src/com/android/settings/homepage/conditional/v2/BackgroundDataConditionController.java +++ b/src/com/android/settings/homepage/conditional/BackgroundDataConditionController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.content.Intent; diff --git a/src/com/android/settings/homepage/conditional/BatterySaverCondition.java b/src/com/android/settings/homepage/conditional/BatterySaverCondition.java deleted file mode 100644 index f36dcb7cf8d..00000000000 --- a/src/com/android/settings/homepage/conditional/BatterySaverCondition.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.settings.homepage.conditional; - -import android.content.Intent; -import android.graphics.drawable.Drawable; -import android.os.PowerManager; - -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.R; -import com.android.settings.core.SubSettingLauncher; -import com.android.settings.fuelgauge.BatterySaverReceiver; -import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings; -import com.android.settingslib.fuelgauge.BatterySaverUtils; - -/** - * @deprecated in favor of {@link BatterySaverConditionCard} - */ -@Deprecated -public class BatterySaverCondition extends Condition implements - BatterySaverReceiver.BatterySaverListener { - - private final BatterySaverReceiver mReceiver; - - public BatterySaverCondition(ConditionManager manager) { - super(manager); - - mReceiver = new BatterySaverReceiver(manager.getContext()); - mReceiver.setBatterySaverListener(this); - } - - @Override - public void refreshState() { - PowerManager powerManager = mManager.getContext().getSystemService(PowerManager.class); - setActive(powerManager.isPowerSaveMode()); - } - - @Override - public Drawable getIcon() { - return mManager.getContext().getDrawable(R.drawable.ic_battery_saver_accent_24dp); - } - - @Override - public CharSequence getTitle() { - return mManager.getContext().getString(R.string.condition_battery_title); - } - - @Override - public CharSequence getSummary() { - return mManager.getContext().getString(R.string.condition_battery_summary); - } - - @Override - public CharSequence[] getActions() { - return new CharSequence[]{mManager.getContext().getString(R.string.condition_turn_off)}; - } - - @Override - public void onPrimaryClick() { - new SubSettingLauncher(mManager.getContext()) - .setDestination(BatterySaverSettings.class.getName()) - .setSourceMetricsCategory(MetricsEvent.DASHBOARD_SUMMARY) - .setTitleRes(R.string.battery_saver) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - .launch(); - } - - @Override - public void onActionClick(int index) { - if (index == 0) { - BatterySaverUtils.setPowerSaveMode(mManager.getContext(), false, - /*needFirstTimeWarning*/ false); - refreshState(); - } else { - throw new IllegalArgumentException("Unexpected index " + index); - } - } - - @Override - public int getMetricsConstant() { - return MetricsEvent.SETTINGS_CONDITION_BATTERY_SAVER; - } - - @Override - public void onResume() { - mReceiver.setListening(true); - } - - @Override - public void onPause() { - mReceiver.setListening(false); - } - - @Override - public void onPowerSaveModeChanged() { - ConditionManager.get(mManager.getContext()).getCondition(BatterySaverCondition.class) - .refreshState(); - } - - @Override - public void onBatteryChanged(boolean pluggedIn) { - // do nothing - } -} diff --git a/src/com/android/settings/homepage/conditional/v2/BatterySaverConditionCard.java b/src/com/android/settings/homepage/conditional/BatterySaverConditionCard.java similarity index 97% rename from src/com/android/settings/homepage/conditional/v2/BatterySaverConditionCard.java rename to src/com/android/settings/homepage/conditional/BatterySaverConditionCard.java index c30715f5bd4..ea84cb2f521 100644 --- a/src/com/android/settings/homepage/conditional/v2/BatterySaverConditionCard.java +++ b/src/com/android/settings/homepage/conditional/BatterySaverConditionCard.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.graphics.drawable.Drawable; diff --git a/src/com/android/settings/homepage/conditional/v2/BatterySaverConditionController.java b/src/com/android/settings/homepage/conditional/BatterySaverConditionController.java similarity index 98% rename from src/com/android/settings/homepage/conditional/v2/BatterySaverConditionController.java rename to src/com/android/settings/homepage/conditional/BatterySaverConditionController.java index 167dc12c614..fdbe69866f4 100644 --- a/src/com/android/settings/homepage/conditional/v2/BatterySaverConditionController.java +++ b/src/com/android/settings/homepage/conditional/BatterySaverConditionController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.os.PowerManager; diff --git a/src/com/android/settings/homepage/conditional/CellularDataCondition.java b/src/com/android/settings/homepage/conditional/CellularDataCondition.java deleted file mode 100644 index 40729128c57..00000000000 --- a/src/com/android/settings/homepage/conditional/CellularDataCondition.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - */ - -package com.android.settings.homepage.conditional; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.graphics.drawable.Drawable; -import android.net.ConnectivityManager; -import android.telephony.TelephonyManager; - -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.internal.telephony.TelephonyIntents; -import com.android.settings.R; -import com.android.settings.Settings; - -@Deprecated -public class CellularDataCondition extends Condition { - - private final Receiver mReceiver; - - private static final IntentFilter DATA_CONNECTION_FILTER = - new IntentFilter(TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED); - - public CellularDataCondition(ConditionManager manager) { - super(manager); - mReceiver = new Receiver(); - } - - @Override - public void refreshState() { - ConnectivityManager connectivity = mManager.getContext().getSystemService( - ConnectivityManager.class); - TelephonyManager telephony = mManager.getContext().getSystemService(TelephonyManager.class); - if (!connectivity.isNetworkSupported(ConnectivityManager.TYPE_MOBILE) - || telephony.getSimState() != TelephonyManager.SIM_STATE_READY) { - setActive(false); - return; - } - setActive(!telephony.isDataEnabled()); - } - - @Override - protected BroadcastReceiver getReceiver() { - return mReceiver; - } - - @Override - protected IntentFilter getIntentFilter() { - return DATA_CONNECTION_FILTER; - } - - @Override - public Drawable getIcon() { - return mManager.getContext().getDrawable(R.drawable.ic_cellular_off); - } - - @Override - public CharSequence getTitle() { - return mManager.getContext().getString(R.string.condition_cellular_title); - } - - @Override - public CharSequence getSummary() { - return mManager.getContext().getString(R.string.condition_cellular_summary); - } - - @Override - public CharSequence[] getActions() { - return new CharSequence[] { mManager.getContext().getString(R.string.condition_turn_on) }; - } - - @Override - public void onPrimaryClick() { - mManager.getContext().startActivity(new Intent(mManager.getContext(), - Settings.DataUsageSummaryActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); - } - - @Override - public void onActionClick(int index) { - if (index == 0) { - TelephonyManager telephony = mManager.getContext().getSystemService( - TelephonyManager.class); - telephony.setDataEnabled(true); - setActive(false); - } else { - throw new IllegalArgumentException("Unexpected index " + index); - } - } - - @Override - public int getMetricsConstant() { - return MetricsEvent.SETTINGS_CONDITION_CELLULAR_DATA; - } - - public static class Receiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - if (TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED.equals( - intent.getAction())) { - CellularDataCondition condition = ConditionManager.get(context).getCondition( - CellularDataCondition.class); - if (condition != null) { - condition.refreshState(); - } - } - } - } -} diff --git a/src/com/android/settings/homepage/conditional/v2/CellularDataConditionCard.java b/src/com/android/settings/homepage/conditional/CellularDataConditionCard.java similarity index 96% rename from src/com/android/settings/homepage/conditional/v2/CellularDataConditionCard.java rename to src/com/android/settings/homepage/conditional/CellularDataConditionCard.java index c09e75a4f62..f135c4f8664 100644 --- a/src/com/android/settings/homepage/conditional/v2/CellularDataConditionCard.java +++ b/src/com/android/settings/homepage/conditional/CellularDataConditionCard.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.graphics.drawable.Drawable; diff --git a/src/com/android/settings/homepage/conditional/v2/CellularDataConditionController.java b/src/com/android/settings/homepage/conditional/CellularDataConditionController.java similarity index 98% rename from src/com/android/settings/homepage/conditional/v2/CellularDataConditionController.java rename to src/com/android/settings/homepage/conditional/CellularDataConditionController.java index d23dc343501..c5c92c22e54 100644 --- a/src/com/android/settings/homepage/conditional/v2/CellularDataConditionController.java +++ b/src/com/android/settings/homepage/conditional/CellularDataConditionController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.BroadcastReceiver; import android.content.Context; diff --git a/src/com/android/settings/homepage/conditional/Condition.java b/src/com/android/settings/homepage/conditional/Condition.java deleted file mode 100644 index f91e422aa6c..00000000000 --- a/src/com/android/settings/homepage/conditional/Condition.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.homepage.conditional; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.IntentFilter; -import android.graphics.drawable.Drawable; -import android.os.PersistableBundle; - -import androidx.annotation.VisibleForTesting; - -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.overlay.FeatureFactory; -import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; - -public abstract class Condition { - - private static final String KEY_SILENCE = "silence"; - private static final String KEY_ACTIVE = "active"; - private static final String KEY_LAST_STATE = "last_state"; - - protected final ConditionManager mManager; - protected final MetricsFeatureProvider mMetricsFeatureProvider; - protected boolean mReceiverRegistered; - - private boolean mIsSilenced; - private boolean mIsActive; - private long mLastStateChange; - - // All conditions must live in this package. - Condition(ConditionManager manager) { - this(manager, FeatureFactory.getFactory(manager.getContext()).getMetricsFeatureProvider()); - } - - Condition(ConditionManager manager, MetricsFeatureProvider metricsFeatureProvider) { - mManager = manager; - mMetricsFeatureProvider = metricsFeatureProvider; - } - - void restoreState(PersistableBundle bundle) { - mIsSilenced = bundle.getBoolean(KEY_SILENCE); - mIsActive = bundle.getBoolean(KEY_ACTIVE); - mLastStateChange = bundle.getLong(KEY_LAST_STATE); - } - - boolean saveState(PersistableBundle bundle) { - if (mIsSilenced) { - bundle.putBoolean(KEY_SILENCE, mIsSilenced); - } - if (mIsActive) { - bundle.putBoolean(KEY_ACTIVE, mIsActive); - bundle.putLong(KEY_LAST_STATE, mLastStateChange); - } - return mIsSilenced || mIsActive; - } - - protected void notifyChanged() { - mManager.notifyChanged(this); - } - - public boolean isSilenced() { - return mIsSilenced; - } - - public boolean isActive() { - return mIsActive; - } - - protected void setActive(boolean active) { - if (mIsActive == active) { - return; - } - mIsActive = active; - mLastStateChange = System.currentTimeMillis(); - if (mIsSilenced && !active) { - mIsSilenced = false; - onSilenceChanged(mIsSilenced); - } - notifyChanged(); - } - - public void silence() { - if (!mIsSilenced) { - mIsSilenced = true; - Context context = mManager.getContext(); - mMetricsFeatureProvider.action(context, MetricsEvent.ACTION_SETTINGS_CONDITION_DISMISS, - getMetricsConstant()); - onSilenceChanged(mIsSilenced); - notifyChanged(); - } - } - - @VisibleForTesting - void onSilenceChanged(boolean silenced) { - final BroadcastReceiver receiver = getReceiver(); - if (receiver == null) { - return; - } - if (silenced) { - if (!mReceiverRegistered) { - mManager.getContext().registerReceiver(receiver, getIntentFilter()); - mReceiverRegistered = true; - } - } else { - if (mReceiverRegistered) { - mManager.getContext().unregisterReceiver(receiver); - mReceiverRegistered = false; - } - } - } - - protected BroadcastReceiver getReceiver() { - return null; - } - - protected IntentFilter getIntentFilter() { - return null; - } - - public boolean shouldShow() { - return isActive() && !isSilenced(); - } - - long getLastChange() { - return mLastStateChange; - } - - public void onResume() { - } - - public void onPause() { - } - - // State. - public abstract void refreshState(); - - public abstract int getMetricsConstant(); - - // UI. - public abstract Drawable getIcon(); - public abstract CharSequence getTitle(); - public abstract CharSequence getSummary(); - public abstract CharSequence[] getActions(); - - public abstract void onPrimaryClick(); - public abstract void onActionClick(int index); -} diff --git a/src/com/android/settings/homepage/conditional/ConditionAdapter.java b/src/com/android/settings/homepage/conditional/ConditionAdapter.java index e975146d095..a87e4bc3eca 100644 --- a/src/com/android/settings/homepage/conditional/ConditionAdapter.java +++ b/src/com/android/settings/homepage/conditional/ConditionAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2017 The Android Open Source Project + * 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. @@ -13,77 +13,38 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.android.settings.homepage.conditional; import android.content.Context; -import android.util.Log; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; -import androidx.annotation.VisibleForTesting; -import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.R; -import com.android.settings.dashboard.DashboardAdapter.DashboardItemHolder; +import com.android.settings.dashboard.DashboardAdapter; import com.android.settings.overlay.FeatureFactory; -import com.android.settingslib.WirelessUtils; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; import java.util.List; -import java.util.Objects; -public class ConditionAdapter extends RecyclerView.Adapter { - public static final String TAG = "ConditionAdapter"; +public class ConditionAdapter extends RecyclerView.Adapter { private final Context mContext; private final MetricsFeatureProvider mMetricsFeatureProvider; - private List mConditions; - private boolean mExpanded; + private final ConditionManager mConditionManager; + private final List mConditions; + private final boolean mExpanded; - private View.OnClickListener mConditionClickListener = new View.OnClickListener() { - - @Override - public void onClick(View v) { - //TODO: get rid of setTag/getTag - Condition condition = (Condition) v.getTag(); - mMetricsFeatureProvider.action(mContext, - MetricsEvent.ACTION_SETTINGS_CONDITION_CLICK, - condition.getMetricsConstant()); - condition.onPrimaryClick(); - } - }; - - @VisibleForTesting - ItemTouchHelper.SimpleCallback mSwipeCallback = new ItemTouchHelper.SimpleCallback(0, - ItemTouchHelper.START | ItemTouchHelper.END) { - @Override - public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, - RecyclerView.ViewHolder target) { - return true; - } - - @Override - public int getSwipeDirs(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { - return viewHolder.getItemViewType() == R.layout.condition_tile - ? super.getSwipeDirs(recyclerView, viewHolder) : 0; - } - - @Override - public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { - Object item = getItem(viewHolder.getItemId()); - // item can become null when running monkey - if (item != null) { - ((Condition) item).silence(); - } - } - }; - - public ConditionAdapter(Context context, List conditions, boolean expanded) { + public ConditionAdapter(Context context, ConditionManager conditionManager, + List conditions, boolean expanded) { mContext = context; + mConditionManager = conditionManager; mConditions = conditions; mExpanded = expanded; mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); @@ -91,30 +52,22 @@ public class ConditionAdapter extends RecyclerView.Adapter setHasStableIds(true); } - public Object getItem(long itemId) { - for (Condition condition : mConditions) { - if (Objects.hash(condition.getTitle()) == itemId) { - return condition; - } - } - return null; + @Override + public DashboardAdapter.DashboardItemHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return new DashboardAdapter.DashboardItemHolder(LayoutInflater.from(parent.getContext()) + .inflate(viewType, parent, false)); } @Override - public DashboardItemHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new DashboardItemHolder(LayoutInflater.from(parent.getContext()).inflate( - viewType, parent, false)); - } - - @Override - public void onBindViewHolder(DashboardItemHolder holder, int position) { - bindViews(mConditions.get(position), holder, - position == mConditions.size() - 1, mConditionClickListener); + public void onBindViewHolder(DashboardAdapter.DashboardItemHolder holder, int position) { + final ConditionalCard condition = mConditions.get(position); + final boolean isLastItem = position == mConditions.size() - 1; + bindViews(condition, holder, isLastItem); } @Override public long getItemId(int position) { - return Objects.hash(mConditions.get(position).getTitle()); + return mConditions.get(position).getId(); } @Override @@ -130,52 +83,42 @@ public class ConditionAdapter extends RecyclerView.Adapter return 0; } - public void addDismissHandling(final RecyclerView recyclerView) { - final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(mSwipeCallback); - itemTouchHelper.attachToRecyclerView(recyclerView); - } - - private void bindViews(final Condition condition, - DashboardItemHolder view, boolean isLastItem, - View.OnClickListener onClickListener) { - if (condition instanceof AirplaneModeCondition) { - Log.d(TAG, "Airplane mode condition has been bound with " - + "isActive=" + condition.isActive() + ". Airplane mode is currently " + - WirelessUtils.isAirplaneModeOn(condition.mManager.getContext())); - } - View card = view.itemView.findViewById(R.id.content); - card.setTag(condition); - card.setOnClickListener(onClickListener); + private void bindViews(final ConditionalCard condition, + DashboardAdapter.DashboardItemHolder view, boolean isLastItem) { + mMetricsFeatureProvider.visible(mContext, MetricsProto.MetricsEvent.DASHBOARD_SUMMARY, + condition.getMetricsConstant()); + view.itemView.findViewById(R.id.content).setOnClickListener( + v -> { + mMetricsFeatureProvider.action(mContext, + MetricsProto.MetricsEvent.ACTION_SETTINGS_CONDITION_CLICK, + condition.getMetricsConstant()); + mConditionManager.onPrimaryClick(mContext, condition.getId()); + }); view.icon.setImageDrawable(condition.getIcon()); view.title.setText(condition.getTitle()); + view.summary.setText(condition.getSummary()); - CharSequence[] actions = condition.getActions(); - final boolean hasButtons = actions.length > 0; + setViewVisibility(view.itemView, R.id.divider, !isLastItem); + + final CharSequence action = condition.getActionText(); + final boolean hasButtons = !TextUtils.isEmpty(action); setViewVisibility(view.itemView, R.id.buttonBar, hasButtons); - view.summary.setText(condition.getSummary()); - for (int i = 0; i < 2; i++) { - Button button = (Button) view.itemView.findViewById(i == 0 - ? R.id.first_action : R.id.second_action); - if (actions.length > i) { - button.setVisibility(View.VISIBLE); - button.setText(actions[i]); - final int index = i; - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - Context context = v.getContext(); - FeatureFactory.getFactory(context).getMetricsFeatureProvider() - .action(context, MetricsEvent.ACTION_SETTINGS_CONDITION_BUTTON, - condition.getMetricsConstant()); - condition.onActionClick(index); - } - }); - } else { - button.setVisibility(View.GONE); - } + final Button button = view.itemView.findViewById(R.id.first_action); + if (hasButtons) { + button.setVisibility(View.VISIBLE); + button.setText(action); + button.setOnClickListener(v -> { + final Context context = v.getContext(); + mMetricsFeatureProvider.action( + context, MetricsProto.MetricsEvent.ACTION_SETTINGS_CONDITION_BUTTON, + condition.getMetricsConstant()); + mConditionManager.onActionClick(condition.getId()); + }); + } else { + button.setVisibility(View.GONE); } - setViewVisibility(view.itemView, R.id.divider, !isLastItem); + } private void setViewVisibility(View containerView, int viewId, boolean visible) { diff --git a/src/com/android/settings/homepage/conditional/ConditionManager.java b/src/com/android/settings/homepage/conditional/ConditionManager.java index dbb04ae7f37..d6e50123a52 100644 --- a/src/com/android/settings/homepage/conditional/ConditionManager.java +++ b/src/com/android/settings/homepage/conditional/ConditionManager.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015 The Android Open Source Project + * 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. @@ -13,279 +13,187 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.android.settings.homepage.conditional; import android.content.Context; -import android.os.AsyncTask; -import android.os.PersistableBundle; import android.util.Log; -import android.util.Xml; -import com.android.settingslib.core.lifecycle.LifecycleObserver; -import com.android.settingslib.core.lifecycle.events.OnPause; -import com.android.settingslib.core.lifecycle.events.OnResume; +import androidx.annotation.NonNull; +import androidx.annotation.VisibleForTesting; -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; -import org.xmlpull.v1.XmlSerializer; - -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; -public class ConditionManager implements LifecycleObserver, OnResume, OnPause { - +public class ConditionManager { private static final String TAG = "ConditionManager"; - private static final boolean DEBUG = false; + @VisibleForTesting + final List mCandidates; + @VisibleForTesting + final List mCardControllers; - private static final String PKG = "com.android.settings.homepage.conditional."; + private static final long DISPLAYABLE_CHECKER_TIMEOUT_MS = 20; - private static final String FILE_NAME = "condition_state.xml"; - private static final String TAG_CONDITIONS = "cs"; - private static final String TAG_CONDITION = "c"; - private static final String ATTR_CLASS = "cls"; + private final ExecutorService mExecutorService; + private final Context mAppContext; + private final ConditionListener mListener; - private static ConditionManager sInstance; + private boolean mIsListeningToStateChange; - private final Context mContext; - private final ArrayList mConditions; - private File mXmlFile; - - private final ArrayList mListeners = new ArrayList<>(); - - private ConditionManager(Context context, boolean loadConditionsNow) { - mContext = context; - mConditions = new ArrayList<>(); - if (loadConditionsNow) { - Log.d(TAG, "conditions loading synchronously"); - ConditionLoader loader = new ConditionLoader(); - loader.onPostExecute(loader.doInBackground()); - } else { - Log.d(TAG, "conditions loading asychronously"); - new ConditionLoader().execute(); - } + public ConditionManager(Context context, ConditionListener listener) { + mAppContext = context.getApplicationContext(); + mExecutorService = Executors.newCachedThreadPool(); + mCandidates = new ArrayList<>(); + mCardControllers = new ArrayList<>(); + mListener = listener; + initCandidates(); } - public void refreshAll() { - final int N = mConditions.size(); - for (int i = 0; i < N; i++) { - mConditions.get(i).refreshState(); + /** + * Returns a list of {@link ConditionalCard}s eligible for display. + */ + public List getDisplayableCards() { + final List cards = new ArrayList<>(); + final List> displayableCards = new ArrayList<>(); + // Check displayable future + for (ConditionalCard card : mCandidates) { + final DisplayableChecker future = new DisplayableChecker( + card, getController(card.getId())); + displayableCards.add(mExecutorService.submit(future)); } - } - - private void readFromXml(File xmlFile, ArrayList conditions) { - if (DEBUG) Log.d(TAG, "Reading from " + xmlFile.toString()); - try { - XmlPullParser parser = Xml.newPullParser(); - FileReader in = new FileReader(xmlFile); - parser.setInput(in); - int state = parser.getEventType(); - - while (state != XmlPullParser.END_DOCUMENT) { - if (TAG_CONDITION.equals(parser.getName())) { - int depth = parser.getDepth(); - String clz = parser.getAttributeValue("", ATTR_CLASS); - if (!clz.startsWith(PKG)) { - clz = PKG + clz; - } - Condition condition = createCondition(Class.forName(clz)); - PersistableBundle bundle = PersistableBundle.restoreFromXml(parser); - if (DEBUG) Log.d(TAG, "Reading " + clz + " -- " + bundle); - if (condition != null) { - condition.restoreState(bundle); - conditions.add(condition); - } else { - Log.e(TAG, "failed to add condition: " + clz); - } - while (parser.getDepth() > depth) { - parser.next(); - } + // Collect future and add displayable cards + for (Future cardFuture : displayableCards) { + try { + final ConditionalCard card = cardFuture.get(DISPLAYABLE_CHECKER_TIMEOUT_MS, + TimeUnit.MILLISECONDS); + if (card != null) { + cards.add(card); } - state = parser.next(); - } - in.close(); - } catch (XmlPullParserException | IOException | ClassNotFoundException e) { - Log.w(TAG, "Problem reading " + FILE_NAME, e); - } - } - - private void saveToXml() { - if (DEBUG) Log.d(TAG, "Writing to " + mXmlFile.toString()); - try { - XmlSerializer serializer = Xml.newSerializer(); - FileWriter writer = new FileWriter(mXmlFile); - serializer.setOutput(writer); - - serializer.startDocument("UTF-8", true); - serializer.startTag("", TAG_CONDITIONS); - - final int N = mConditions.size(); - for (int i = 0; i < N; i++) { - PersistableBundle bundle = new PersistableBundle(); - if (mConditions.get(i).saveState(bundle)) { - serializer.startTag("", TAG_CONDITION); - final String clz = mConditions.get(i).getClass().getSimpleName(); - serializer.attribute("", ATTR_CLASS, clz); - bundle.saveToXml(serializer); - serializer.endTag("", TAG_CONDITION); - } - } - - serializer.endTag("", TAG_CONDITIONS); - serializer.flush(); - writer.close(); - } catch (XmlPullParserException | IOException e) { - Log.w(TAG, "Problem writing " + FILE_NAME, e); - } - } - - private void addMissingConditions(ArrayList conditions) { - addIfMissing(AirplaneModeCondition.class, conditions); - addIfMissing(HotspotCondition.class, conditions); - addIfMissing(DndCondition.class, conditions); - addIfMissing(BatterySaverCondition.class, conditions); - addIfMissing(CellularDataCondition.class, conditions); - addIfMissing(BackgroundDataCondition.class, conditions); - addIfMissing(WorkModeCondition.class, conditions); - addIfMissing(NightDisplayCondition.class, conditions); - addIfMissing(RingerMutedCondition.class, conditions); - addIfMissing(RingerVibrateCondition.class, conditions); - Collections.sort(conditions, CONDITION_COMPARATOR); - } - - private void addIfMissing(Class clz, ArrayList conditions) { - if (getCondition(clz, conditions) == null) { - if (DEBUG) Log.d(TAG, "Adding missing " + clz.getName()); - Condition condition = createCondition(clz); - if (condition != null) { - conditions.add(condition); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + Log.w(TAG, "Failed to get displayable state for card, likely timeout. Skipping", e); } } + return cards; } - private Condition createCondition(Class clz) { - if (AirplaneModeCondition.class == clz) { - return new AirplaneModeCondition(this); - } else if (HotspotCondition.class == clz) { - return new HotspotCondition(this); - } else if (DndCondition.class == clz) { - return new DndCondition(this); - } else if (BatterySaverCondition.class == clz) { - return new BatterySaverCondition(this); - } else if (CellularDataCondition.class == clz) { - return new CellularDataCondition(this); - } else if (BackgroundDataCondition.class == clz) { - return new BackgroundDataCondition(this); - } else if (WorkModeCondition.class == clz) { - return new WorkModeCondition(this); - } else if (NightDisplayCondition.class == clz) { - return new NightDisplayCondition(this); - } else if (RingerMutedCondition.class == clz) { - return new RingerMutedCondition(this); - } else if (RingerVibrateCondition.class == clz) { - return new RingerVibrateCondition(this); + /** + * Handler when the card is clicked. + * + * @see {@link ConditionalCardController#onPrimaryClick(Context)} + */ + public void onPrimaryClick(Context context, long id) { + getController(id).onPrimaryClick(context); + } + + /** + * Handler when the card action is clicked. + * + * @see {@link ConditionalCardController#onActionClick()} + */ + public void onActionClick(long id) { + getController(id).onActionClick(); + onConditionChanged(); + } + + /** + * Start monitoring state change for all conditions + */ + public void startMonitoringStateChange() { + if (mIsListeningToStateChange) { + Log.d(TAG, "Already listening to condition state changes, skipping"); + return; } - Log.e(TAG, "unknown condition class: " + clz.getSimpleName()); - return null; + mIsListeningToStateChange = true; + for (ConditionalCardController controller : mCardControllers) { + controller.startMonitoringStateChange(); + } + // Force a refresh on listener + onConditionChanged(); } - Context getContext() { - return mContext; + /** + * Stop monitoring state change for all conditions + */ + public void stopMonitoringStateChange() { + if (!mIsListeningToStateChange) { + Log.d(TAG, "Not listening to condition state changes, skipping"); + return; + } + for (ConditionalCardController controller : mCardControllers) { + controller.stopMonitoringStateChange(); + } + mIsListeningToStateChange = false; } - public T getCondition(Class clz) { - return getCondition(clz, mConditions); + /** + * Called when some conditional card's state has changed + */ + void onConditionChanged() { + if (mListener != null) { + mListener.onConditionsChanged(); + } } - private T getCondition(Class clz, List conditions) { - final int N = conditions.size(); - for (int i = 0; i < N; i++) { - if (clz.equals(conditions.get(i).getClass())) { - return (T) conditions.get(i); + @NonNull + T getController(long id) { + for (ConditionalCardController controller : mCardControllers) { + if (controller.getId() == id) { + return (T) controller; } } - return null; + throw new IllegalStateException("Cannot find controller for " + id); } - public List getConditions() { - return mConditions; + private void initCandidates() { + // Initialize controllers first. + mCardControllers.add(new AirplaneModeConditionController(mAppContext, this /* manager */)); + mCardControllers.add(new BackgroundDataConditionController(mAppContext)); + mCardControllers.add(new BatterySaverConditionController(mAppContext, this /* manager */)); + mCardControllers.add(new CellularDataConditionController(mAppContext, this /* manager */)); + mCardControllers.add(new DndConditionCardController(mAppContext, this /* manager */)); + mCardControllers.add(new HotspotConditionController(mAppContext, this /* manager */)); + mCardControllers.add(new NightDisplayConditionController(mAppContext)); + mCardControllers.add(new RingerVibrateConditionController(mAppContext, this /* manager */)); + mCardControllers.add(new RingerMutedConditionController(mAppContext, this /* manager */)); + mCardControllers.add(new WorkModeConditionController(mAppContext)); + + // Initialize ui model later. UI model depends on controller. + mCandidates.add(new AirplaneModeConditionCard(mAppContext)); + mCandidates.add(new BackgroundDataConditionCard(mAppContext)); + mCandidates.add(new BatterySaverConditionCard(mAppContext)); + mCandidates.add(new CellularDataConditionCard(mAppContext)); + mCandidates.add(new DndConditionCard(mAppContext, this /* manager */)); + mCandidates.add(new HotspotConditionCard(mAppContext, this /* manager */)); + mCandidates.add(new NightDisplayConditionCard(mAppContext)); + mCandidates.add(new RingerMutedConditionCard(mAppContext)); + mCandidates.add(new RingerVibrateConditionCard(mAppContext)); + mCandidates.add(new WorkModeConditionCard(mAppContext)); } - public void notifyChanged(Condition condition) { - saveToXml(); - Collections.sort(mConditions, CONDITION_COMPARATOR); - final int N = mListeners.size(); - for (int i = 0; i < N; i++) { - mListeners.get(i).onConditionsChanged(); - } - } + /** + * Returns card if controller says it's displayable. Otherwise returns null. + */ + public static class DisplayableChecker implements Callable { - public void addListener(ConditionListener listener) { - mListeners.add(listener); - listener.onConditionsChanged(); - } + private final ConditionalCard mCard; + private final ConditionalCardController mController; - public void remListener(ConditionListener listener) { - mListeners.remove(listener); - } - - @Override - public void onResume() { - for (int i = 0, size = mConditions.size(); i < size; i++) { - mConditions.get(i).onResume(); - } - } - - @Override - public void onPause() { - for (int i = 0, size = mConditions.size(); i < size; i++) { - mConditions.get(i).onPause(); - } - } - - private class ConditionLoader extends AsyncTask> { - @Override - protected ArrayList doInBackground(Void... params) { - Log.d(TAG, "loading conditions from xml"); - ArrayList conditions = new ArrayList<>(); - mXmlFile = new File(mContext.getFilesDir(), FILE_NAME); - if (mXmlFile.exists()) { - readFromXml(mXmlFile, conditions); - } - addMissingConditions(conditions); - return conditions; + private DisplayableChecker(ConditionalCard card, ConditionalCardController controller) { + mCard = card; + mController = controller; } @Override - protected void onPostExecute(ArrayList conditions) { - Log.d(TAG, "conditions loaded from xml, refreshing conditions"); - mConditions.clear(); - mConditions.addAll(conditions); - refreshAll(); + public ConditionalCard call() throws Exception { + return mController.isDisplayable() ? mCard : null; } } - - public static ConditionManager get(Context context) { - return get(context, true); - } - - public static ConditionManager get(Context context, boolean loadConditionsNow) { - if (sInstance == null) { - sInstance = new ConditionManager(context.getApplicationContext(), loadConditionsNow); - } - return sInstance; - } - - private static final Comparator CONDITION_COMPARATOR = new Comparator() { - @Override - public int compare(Condition lhs, Condition rhs) { - return Long.compare(lhs.getLastChange(), rhs.getLastChange()); - } - }; } diff --git a/src/com/android/settings/homepage/conditional/v2/ConditionalCard.java b/src/com/android/settings/homepage/conditional/ConditionalCard.java similarity index 95% rename from src/com/android/settings/homepage/conditional/v2/ConditionalCard.java rename to src/com/android/settings/homepage/conditional/ConditionalCard.java index da832b7db86..f4c4547fe6d 100644 --- a/src/com/android/settings/homepage/conditional/v2/ConditionalCard.java +++ b/src/com/android/settings/homepage/conditional/ConditionalCard.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.graphics.drawable.Drawable; diff --git a/src/com/android/settings/homepage/conditional/v2/ConditionalCardController.java b/src/com/android/settings/homepage/conditional/ConditionalCardController.java similarity index 95% rename from src/com/android/settings/homepage/conditional/v2/ConditionalCardController.java rename to src/com/android/settings/homepage/conditional/ConditionalCardController.java index 7919d7356b4..9993f343731 100644 --- a/src/com/android/settings/homepage/conditional/v2/ConditionalCardController.java +++ b/src/com/android/settings/homepage/conditional/ConditionalCardController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; diff --git a/src/com/android/settings/homepage/conditional/DndCondition.java b/src/com/android/settings/homepage/conditional/DndCondition.java deleted file mode 100644 index d2386136ebe..00000000000 --- a/src/com/android/settings/homepage/conditional/DndCondition.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.settings.homepage.conditional; - -import android.app.NotificationManager; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.graphics.drawable.Drawable; -import android.os.PersistableBundle; -import android.provider.Settings; -import android.provider.Settings.Global; -import android.service.notification.ZenModeConfig; - -import androidx.annotation.VisibleForTesting; - -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.R; -import com.android.settings.core.SubSettingLauncher; -import com.android.settings.notification.ZenModeSettings; - -/** - * @deprecated in favor of {@link com.android.settings.homepage.conditional.v2.DndConditionCard} - */ -@Deprecated -public class DndCondition extends Condition { - - private static final String TAG = "DndCondition"; - private static final String KEY_STATE = "state"; - - private boolean mRegistered; - - @VisibleForTesting - static final IntentFilter DND_FILTER = - new IntentFilter(NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED_INTERNAL); - @VisibleForTesting - protected ZenModeConfig mConfig; - - private int mZen; - private final Receiver mReceiver; - - public DndCondition(ConditionManager manager) { - super(manager); - mReceiver = new Receiver(); - mManager.getContext().registerReceiver(mReceiver, DND_FILTER); - mRegistered = true; - } - - @Override - public void refreshState() { - NotificationManager notificationManager = - mManager.getContext().getSystemService(NotificationManager.class); - mZen = notificationManager.getZenMode(); - boolean zenModeEnabled = mZen != Settings.Global.ZEN_MODE_OFF; - if (zenModeEnabled) { - mConfig = notificationManager.getZenModeConfig(); - } else { - mConfig = null; - } - setActive(zenModeEnabled); - } - - @Override - boolean saveState(PersistableBundle bundle) { - bundle.putInt(KEY_STATE, mZen); - return super.saveState(bundle); - } - - @Override - void restoreState(PersistableBundle bundle) { - super.restoreState(bundle); - mZen = bundle.getInt(KEY_STATE, Global.ZEN_MODE_OFF); - } - - @Override - public Drawable getIcon() { - return mManager.getContext().getDrawable(R.drawable.ic_do_not_disturb_on_24dp); - } - - @Override - public CharSequence getTitle() { - return mManager.getContext().getString(R.string.condition_zen_title); - } - - @Override - public CharSequence getSummary() { - return ZenModeConfig.getDescription(mManager.getContext(), mZen != Global.ZEN_MODE_OFF, - mConfig, true); - } - - @Override - public CharSequence[] getActions() { - return new CharSequence[] { mManager.getContext().getString(R.string.condition_turn_off) }; - } - - @Override - public void onPrimaryClick() { - new SubSettingLauncher(mManager.getContext()) - .setDestination(ZenModeSettings.class.getName()) - .setSourceMetricsCategory(MetricsEvent.DASHBOARD_SUMMARY) - .setTitleRes(R.string.zen_mode_settings_title) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - .launch(); - } - - @Override - public void onActionClick(int index) { - if (index == 0) { - NotificationManager notificationManager = mManager.getContext().getSystemService( - NotificationManager.class); - notificationManager.setZenMode(Settings.Global.ZEN_MODE_OFF, null, TAG); - setActive(false); - } else { - throw new IllegalArgumentException("Unexpected index " + index); - } - } - - @Override - public int getMetricsConstant() { - return MetricsEvent.SETTINGS_CONDITION_DND; - } - - public static class Receiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - if (NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED_INTERNAL - .equals(intent.getAction())) { - final Condition condition = - ConditionManager.get(context).getCondition(DndCondition.class); - if (condition != null) { - condition.refreshState(); - } - } - } - } - - @Override - public void onResume() { - if (!mRegistered) { - mManager.getContext().registerReceiver(mReceiver, DND_FILTER); - mRegistered = true; - } - } - - @Override - public void onPause() { - if (mRegistered) { - mManager.getContext().unregisterReceiver(mReceiver); - mRegistered = false; - } - } -} diff --git a/src/com/android/settings/homepage/conditional/v2/DndConditionCard.java b/src/com/android/settings/homepage/conditional/DndConditionCard.java similarity index 93% rename from src/com/android/settings/homepage/conditional/v2/DndConditionCard.java rename to src/com/android/settings/homepage/conditional/DndConditionCard.java index 8e0fdd59aaf..dbc0d8394e9 100644 --- a/src/com/android/settings/homepage/conditional/v2/DndConditionCard.java +++ b/src/com/android/settings/homepage/conditional/DndConditionCard.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.graphics.drawable.Drawable; @@ -25,12 +25,10 @@ import com.android.settings.R; public class DndConditionCard implements ConditionalCard { private final Context mAppContext; - private final ConditionManager mManager; private final DndConditionCardController mController; public DndConditionCard(Context appContext, ConditionManager manager) { mAppContext = appContext; - mManager = manager; mController = manager.getController(getId()); } diff --git a/src/com/android/settings/homepage/conditional/v2/DndConditionCardController.java b/src/com/android/settings/homepage/conditional/DndConditionCardController.java similarity index 98% rename from src/com/android/settings/homepage/conditional/v2/DndConditionCardController.java rename to src/com/android/settings/homepage/conditional/DndConditionCardController.java index 9e51ef95efe..1729815ffd3 100644 --- a/src/com/android/settings/homepage/conditional/v2/DndConditionCardController.java +++ b/src/com/android/settings/homepage/conditional/DndConditionCardController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.app.NotificationManager; import android.content.BroadcastReceiver; diff --git a/src/com/android/settings/homepage/conditional/HotspotCondition.java b/src/com/android/settings/homepage/conditional/HotspotCondition.java deleted file mode 100644 index 6934d0f304e..00000000000 --- a/src/com/android/settings/homepage/conditional/HotspotCondition.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.settings.homepage.conditional; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.graphics.drawable.Drawable; -import android.net.ConnectivityManager; -import android.net.wifi.WifiConfiguration; -import android.net.wifi.WifiManager; -import android.os.UserHandle; -import android.os.UserManager; - -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.R; -import com.android.settings.TetherSettings; -import com.android.settings.core.SubSettingLauncher; -import com.android.settingslib.RestrictedLockUtils; -import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; - -@Deprecated -public class HotspotCondition extends Condition { - - private final WifiManager mWifiManager; - private final Receiver mReceiver; - - private static final IntentFilter WIFI_AP_STATE_FILTER = - new IntentFilter(WifiManager.WIFI_AP_STATE_CHANGED_ACTION); - - public HotspotCondition(ConditionManager manager) { - super(manager); - mWifiManager = mManager.getContext().getSystemService(WifiManager.class); - mReceiver = new Receiver(); - } - - @Override - public void refreshState() { - boolean wifiTetherEnabled = mWifiManager.isWifiApEnabled(); - setActive(wifiTetherEnabled); - } - - @Override - protected BroadcastReceiver getReceiver() { - return mReceiver; - } - - @Override - protected IntentFilter getIntentFilter() { - return WIFI_AP_STATE_FILTER; - } - - @Override - public Drawable getIcon() { - return mManager.getContext().getDrawable(R.drawable.ic_hotspot); - } - - private String getSsid() { - WifiConfiguration wifiConfig = mWifiManager.getWifiApConfiguration(); - if (wifiConfig == null) { - return mManager.getContext().getString( - com.android.internal.R.string.wifi_tether_configure_ssid_default); - } else { - return wifiConfig.SSID; - } - } - - @Override - public CharSequence getTitle() { - return mManager.getContext().getString(R.string.condition_hotspot_title); - } - - @Override - public CharSequence getSummary() { - return mManager.getContext().getString(R.string.condition_hotspot_summary, getSsid()); - } - - @Override - public CharSequence[] getActions() { - final Context context = mManager.getContext(); - if (RestrictedLockUtils.hasBaseUserRestriction(context, - UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId())) { - return new CharSequence[0]; - } - return new CharSequence[]{context.getString(R.string.condition_turn_off)}; - } - - @Override - public void onPrimaryClick() { - new SubSettingLauncher(mManager.getContext()) - .setDestination(TetherSettings.class.getName()) - .setSourceMetricsCategory(MetricsEvent.DASHBOARD_SUMMARY) - .setTitleRes(R.string.tether_settings_title_all) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - .launch(); - } - - @Override - public void onActionClick(int index) { - if (index == 0) { - final Context context = mManager.getContext(); - final EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(context, - UserManager.DISALLOW_CONFIG_TETHERING, UserHandle.myUserId()); - if (admin != null) { - RestrictedLockUtils.sendShowAdminSupportDetailsIntent(context, admin); - } else { - ConnectivityManager cm = (ConnectivityManager) context.getSystemService( - Context.CONNECTIVITY_SERVICE); - cm.stopTethering(ConnectivityManager.TETHERING_WIFI); - setActive(false); - } - } else { - throw new IllegalArgumentException("Unexpected index " + index); - } - } - - @Override - public int getMetricsConstant() { - return MetricsEvent.SETTINGS_CONDITION_HOTSPOT; - } - - public static class Receiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - if (WifiManager.WIFI_AP_STATE_CHANGED_ACTION.equals(intent.getAction())) { - ConditionManager.get(context).getCondition(HotspotCondition.class) - .refreshState(); - } - } - } -} diff --git a/src/com/android/settings/homepage/conditional/v2/HotspotConditionCard.java b/src/com/android/settings/homepage/conditional/HotspotConditionCard.java similarity index 97% rename from src/com/android/settings/homepage/conditional/v2/HotspotConditionCard.java rename to src/com/android/settings/homepage/conditional/HotspotConditionCard.java index 63b5034729d..a6ff224d6e0 100644 --- a/src/com/android/settings/homepage/conditional/v2/HotspotConditionCard.java +++ b/src/com/android/settings/homepage/conditional/HotspotConditionCard.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.graphics.drawable.Drawable; diff --git a/src/com/android/settings/homepage/conditional/v2/HotspotConditionController.java b/src/com/android/settings/homepage/conditional/HotspotConditionController.java similarity index 98% rename from src/com/android/settings/homepage/conditional/v2/HotspotConditionController.java rename to src/com/android/settings/homepage/conditional/HotspotConditionController.java index 56e95d1c4ed..42711366d24 100644 --- a/src/com/android/settings/homepage/conditional/v2/HotspotConditionController.java +++ b/src/com/android/settings/homepage/conditional/HotspotConditionController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.BroadcastReceiver; import android.content.Context; diff --git a/src/com/android/settings/homepage/conditional/NightDisplayCondition.java b/src/com/android/settings/homepage/conditional/NightDisplayCondition.java deleted file mode 100644 index 384f593ec4f..00000000000 --- a/src/com/android/settings/homepage/conditional/NightDisplayCondition.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (C) 2016 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.homepage.conditional; - -import android.content.Intent; -import android.graphics.drawable.Drawable; - -import com.android.internal.app.ColorDisplayController; -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.R; -import com.android.settings.core.SubSettingLauncher; -import com.android.settings.display.NightDisplaySettings; - -/** - * @deprecated in favor of {@link NightDisplayConditionController} - */ -@Deprecated -public final class NightDisplayCondition extends Condition - implements ColorDisplayController.Callback { - - private ColorDisplayController mController; - - NightDisplayCondition(ConditionManager manager) { - super(manager); - mController = new ColorDisplayController(manager.getContext()); - mController.setListener(this); - } - - @Override - public int getMetricsConstant() { - return MetricsEvent.SETTINGS_CONDITION_NIGHT_DISPLAY; - } - - @Override - public Drawable getIcon() { - return mManager.getContext().getDrawable(R.drawable.ic_settings_night_display); - } - - @Override - public CharSequence getTitle() { - return mManager.getContext().getString(R.string.condition_night_display_title); - } - - @Override - public CharSequence getSummary() { - return mManager.getContext().getString(R.string.condition_night_display_summary); - } - - @Override - public CharSequence[] getActions() { - return new CharSequence[] {mManager.getContext().getString(R.string.condition_turn_off)}; - } - - @Override - public void onPrimaryClick() { - new SubSettingLauncher(mManager.getContext()) - .setDestination(NightDisplaySettings.class.getName()) - .setSourceMetricsCategory(MetricsEvent.DASHBOARD_SUMMARY) - .setTitleRes(R.string.night_display_title) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - .launch(); - } - - @Override - public void onActionClick(int index) { - if (index == 0) { - mController.setActivated(false); - } else { - throw new IllegalArgumentException("Unexpected index " + index); - } - } - - @Override - public void refreshState() { - setActive(mController.isActivated()); - } - - @Override - public void onActivated(boolean activated) { - refreshState(); - } -} diff --git a/src/com/android/settings/homepage/conditional/v2/NightDisplayConditionCard.java b/src/com/android/settings/homepage/conditional/NightDisplayConditionCard.java similarity index 97% rename from src/com/android/settings/homepage/conditional/v2/NightDisplayConditionCard.java rename to src/com/android/settings/homepage/conditional/NightDisplayConditionCard.java index b08f8e721e5..e0c6ee0a57d 100644 --- a/src/com/android/settings/homepage/conditional/v2/NightDisplayConditionCard.java +++ b/src/com/android/settings/homepage/conditional/NightDisplayConditionCard.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.graphics.drawable.Drawable; diff --git a/src/com/android/settings/homepage/conditional/v2/NightDisplayConditionController.java b/src/com/android/settings/homepage/conditional/NightDisplayConditionController.java similarity index 97% rename from src/com/android/settings/homepage/conditional/v2/NightDisplayConditionController.java rename to src/com/android/settings/homepage/conditional/NightDisplayConditionController.java index 0d612188c5e..428fe488989 100644 --- a/src/com/android/settings/homepage/conditional/v2/NightDisplayConditionController.java +++ b/src/com/android/settings/homepage/conditional/NightDisplayConditionController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; diff --git a/src/com/android/settings/homepage/conditional/RingerMutedCondition.java b/src/com/android/settings/homepage/conditional/RingerMutedCondition.java deleted file mode 100644 index d3e618e5b59..00000000000 --- a/src/com/android/settings/homepage/conditional/RingerMutedCondition.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * 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.homepage.conditional; - -import static android.content.Context.NOTIFICATION_SERVICE; - -import android.app.NotificationManager; -import android.graphics.drawable.Drawable; -import android.media.AudioManager; -import android.provider.Settings; - -import com.android.internal.logging.nano.MetricsProto; -import com.android.settings.R; - -@Deprecated -public class RingerMutedCondition extends AbnormalRingerConditionBase { - - private final NotificationManager mNotificationManager; - - RingerMutedCondition(ConditionManager manager) { - super(manager); - mNotificationManager = - (NotificationManager) mManager.getContext().getSystemService(NOTIFICATION_SERVICE); - } - - @Override - public void refreshState() { - int zen = Settings.Global.ZEN_MODE_OFF; - if (mNotificationManager != null) { - zen = mNotificationManager.getZenMode(); - } - final boolean zenModeEnabled = zen != Settings.Global.ZEN_MODE_OFF; - final boolean isSilent = - mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_SILENT; - setActive(isSilent && !zenModeEnabled); - } - - @Override - public int getMetricsConstant() { - return MetricsProto.MetricsEvent.SETTINGS_CONDITION_DEVICE_MUTED; - } - - @Override - public Drawable getIcon() { - return mManager.getContext().getDrawable(R.drawable.ic_notifications_off_24dp); - } - - @Override - public CharSequence getTitle() { - return mManager.getContext().getText(R.string.condition_device_muted_title); - } - - @Override - public CharSequence getSummary() { - return mManager.getContext().getText(R.string.condition_device_muted_summary); - } -} diff --git a/src/com/android/settings/homepage/conditional/v2/RingerMutedConditionCard.java b/src/com/android/settings/homepage/conditional/RingerMutedConditionCard.java similarity index 97% rename from src/com/android/settings/homepage/conditional/v2/RingerMutedConditionCard.java rename to src/com/android/settings/homepage/conditional/RingerMutedConditionCard.java index c9a1ba062a7..47d64077991 100644 --- a/src/com/android/settings/homepage/conditional/v2/RingerMutedConditionCard.java +++ b/src/com/android/settings/homepage/conditional/RingerMutedConditionCard.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.graphics.drawable.Drawable; diff --git a/src/com/android/settings/homepage/conditional/v2/RingerMutedConditionController.java b/src/com/android/settings/homepage/conditional/RingerMutedConditionController.java similarity index 97% rename from src/com/android/settings/homepage/conditional/v2/RingerMutedConditionController.java rename to src/com/android/settings/homepage/conditional/RingerMutedConditionController.java index 19850ae1c43..4fce1ec9b03 100644 --- a/src/com/android/settings/homepage/conditional/v2/RingerMutedConditionController.java +++ b/src/com/android/settings/homepage/conditional/RingerMutedConditionController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import static android.content.Context.NOTIFICATION_SERVICE; diff --git a/src/com/android/settings/homepage/conditional/RingerVibrateCondition.java b/src/com/android/settings/homepage/conditional/RingerVibrateCondition.java deleted file mode 100644 index 92667c2117c..00000000000 --- a/src/com/android/settings/homepage/conditional/RingerVibrateCondition.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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.homepage.conditional; - -import android.graphics.drawable.Drawable; -import android.media.AudioManager; - -import com.android.internal.logging.nano.MetricsProto; -import com.android.settings.R; - -@Deprecated -public class RingerVibrateCondition extends AbnormalRingerConditionBase { - - RingerVibrateCondition(ConditionManager manager) { - super(manager); - } - - @Override - public void refreshState() { - setActive(mAudioManager.getRingerModeInternal() == AudioManager.RINGER_MODE_VIBRATE); - } - - @Override - public int getMetricsConstant() { - return MetricsProto.MetricsEvent.SETTINGS_CONDITION_DEVICE_VIBRATE; - } - - @Override - public Drawable getIcon() { - return mManager.getContext().getDrawable(R.drawable.ic_volume_ringer_vibrate); - } - - @Override - public CharSequence getTitle() { - return mManager.getContext().getText(R.string.condition_device_vibrate_title); - } - - @Override - public CharSequence getSummary() { - return mManager.getContext().getText(R.string.condition_device_vibrate_summary); - } -} diff --git a/src/com/android/settings/homepage/conditional/v2/RingerVibrateConditionCard.java b/src/com/android/settings/homepage/conditional/RingerVibrateConditionCard.java similarity index 97% rename from src/com/android/settings/homepage/conditional/v2/RingerVibrateConditionCard.java rename to src/com/android/settings/homepage/conditional/RingerVibrateConditionCard.java index 3ca3a4de552..229cc83f5ec 100644 --- a/src/com/android/settings/homepage/conditional/v2/RingerVibrateConditionCard.java +++ b/src/com/android/settings/homepage/conditional/RingerVibrateConditionCard.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.graphics.drawable.Drawable; diff --git a/src/com/android/settings/homepage/conditional/v2/RingerVibrateConditionController.java b/src/com/android/settings/homepage/conditional/RingerVibrateConditionController.java similarity index 95% rename from src/com/android/settings/homepage/conditional/v2/RingerVibrateConditionController.java rename to src/com/android/settings/homepage/conditional/RingerVibrateConditionController.java index d2d32447053..43de0803e7e 100644 --- a/src/com/android/settings/homepage/conditional/v2/RingerVibrateConditionController.java +++ b/src/com/android/settings/homepage/conditional/RingerVibrateConditionController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.media.AudioManager; diff --git a/src/com/android/settings/homepage/conditional/WorkModeCondition.java b/src/com/android/settings/homepage/conditional/WorkModeCondition.java deleted file mode 100644 index 31266a4b512..00000000000 --- a/src/com/android/settings/homepage/conditional/WorkModeCondition.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (C) 2016 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.homepage.conditional; - -import android.content.Context; -import android.content.Intent; -import android.content.pm.UserInfo; -import android.graphics.drawable.Drawable; -import android.os.UserHandle; -import android.os.UserManager; - -import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settings.R; -import com.android.settings.Settings; - -import java.util.List; - -@Deprecated -public class WorkModeCondition extends Condition { - - private UserManager mUm; - private UserHandle mUserHandle; - - public WorkModeCondition(ConditionManager conditionManager) { - super(conditionManager); - mUm = (UserManager) mManager.getContext().getSystemService(Context.USER_SERVICE); - } - - private void updateUserHandle() { - List profiles = mUm.getProfiles(UserHandle.myUserId()); - final int profilesCount = profiles.size(); - mUserHandle = null; - for (int i = 0; i < profilesCount; i++) { - UserInfo userInfo = profiles.get(i); - if (userInfo.isManagedProfile()) { - // We assume there's only one managed profile, otherwise UI needs to change. - mUserHandle = userInfo.getUserHandle(); - break; - } - } - } - - @Override - public void refreshState() { - updateUserHandle(); - setActive(mUserHandle != null && mUm.isQuietModeEnabled(mUserHandle)); - } - - @Override - public Drawable getIcon() { - return mManager.getContext().getDrawable(R.drawable.ic_signal_workmode_enable); - } - - @Override - public CharSequence getTitle() { - return mManager.getContext().getString(R.string.condition_work_title); - } - - @Override - public CharSequence getSummary() { - return mManager.getContext().getString(R.string.condition_work_summary); - } - - @Override - public CharSequence[] getActions() { - return new CharSequence[] { - mManager.getContext().getString(R.string.condition_turn_on) - }; - } - - @Override - public void onPrimaryClick() { - mManager.getContext().startActivity(new Intent(mManager.getContext(), - Settings.AccountDashboardActivity.class) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); - } - - @Override - public void onActionClick(int index) { - if (index == 0) { - if (mUserHandle != null) { - mUm.requestQuietModeEnabled(false, mUserHandle); - } - setActive(false); - } else { - throw new IllegalArgumentException("Unexpected index " + index); - } - } - - @Override - public int getMetricsConstant() { - return MetricsEvent.SETTINGS_CONDITION_WORK_MODE; - } -} diff --git a/src/com/android/settings/homepage/conditional/v2/WorkModeConditionCard.java b/src/com/android/settings/homepage/conditional/WorkModeConditionCard.java similarity index 96% rename from src/com/android/settings/homepage/conditional/v2/WorkModeConditionCard.java rename to src/com/android/settings/homepage/conditional/WorkModeConditionCard.java index 10bcd6d7a11..c283bece726 100644 --- a/src/com/android/settings/homepage/conditional/v2/WorkModeConditionCard.java +++ b/src/com/android/settings/homepage/conditional/WorkModeConditionCard.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.graphics.drawable.Drawable; diff --git a/src/com/android/settings/homepage/conditional/v2/WorkModeConditionController.java b/src/com/android/settings/homepage/conditional/WorkModeConditionController.java similarity index 97% rename from src/com/android/settings/homepage/conditional/v2/WorkModeConditionController.java rename to src/com/android/settings/homepage/conditional/WorkModeConditionController.java index 73689c7f557..1bd227a0912 100644 --- a/src/com/android/settings/homepage/conditional/v2/WorkModeConditionController.java +++ b/src/com/android/settings/homepage/conditional/WorkModeConditionController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import android.content.Context; import android.content.Intent; diff --git a/src/com/android/settings/homepage/conditional/v2/ConditionAdapter.java b/src/com/android/settings/homepage/conditional/v2/ConditionAdapter.java deleted file mode 100644 index 51d8c47e18c..00000000000 --- a/src/com/android/settings/homepage/conditional/v2/ConditionAdapter.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * 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.homepage.conditional.v2; - -import android.content.Context; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; - -import androidx.recyclerview.widget.RecyclerView; - -import com.android.internal.logging.nano.MetricsProto; -import com.android.settings.R; -import com.android.settings.dashboard.DashboardAdapter; -import com.android.settings.overlay.FeatureFactory; -import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; - -import java.util.List; - -public class ConditionAdapter extends RecyclerView.Adapter { - - private final Context mContext; - private final MetricsFeatureProvider mMetricsFeatureProvider; - private final ConditionManager mConditionManager; - private final List mConditions; - private final boolean mExpanded; - - public ConditionAdapter(Context context, ConditionManager conditionManager, - List conditions, boolean expanded) { - mContext = context; - mConditionManager = conditionManager; - mConditions = conditions; - mExpanded = expanded; - mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider(); - - setHasStableIds(true); - } - - @Override - public DashboardAdapter.DashboardItemHolder onCreateViewHolder(ViewGroup parent, int viewType) { - return new DashboardAdapter.DashboardItemHolder(LayoutInflater.from(parent.getContext()) - .inflate(viewType, parent, false)); - } - - @Override - public void onBindViewHolder(DashboardAdapter.DashboardItemHolder holder, int position) { - final ConditionalCard condition = mConditions.get(position); - final boolean isLastItem = position == mConditions.size() - 1; - bindViews(condition, holder, isLastItem); - } - - @Override - public long getItemId(int position) { - return mConditions.get(position).getId(); - } - - @Override - public int getItemViewType(int position) { - return R.layout.condition_tile; - } - - @Override - public int getItemCount() { - if (mExpanded) { - return mConditions.size(); - } - return 0; - } - - private void bindViews(final ConditionalCard condition, - DashboardAdapter.DashboardItemHolder view, boolean isLastItem) { - mMetricsFeatureProvider.visible(mContext, MetricsProto.MetricsEvent.DASHBOARD_SUMMARY, - condition.getMetricsConstant()); - view.itemView.findViewById(R.id.content).setOnClickListener( - v -> { - mMetricsFeatureProvider.action(mContext, - MetricsProto.MetricsEvent.ACTION_SETTINGS_CONDITION_CLICK, - condition.getMetricsConstant()); - mConditionManager.onPrimaryClick(mContext, condition.getId()); - }); - view.icon.setImageDrawable(condition.getIcon()); - view.title.setText(condition.getTitle()); - view.summary.setText(condition.getSummary()); - - setViewVisibility(view.itemView, R.id.divider, !isLastItem); - - final CharSequence action = condition.getActionText(); - final boolean hasButtons = !TextUtils.isEmpty(action); - setViewVisibility(view.itemView, R.id.buttonBar, hasButtons); - - final Button button = view.itemView.findViewById(R.id.first_action); - if (hasButtons) { - button.setVisibility(View.VISIBLE); - button.setText(action); - button.setOnClickListener(v -> { - final Context context = v.getContext(); - mMetricsFeatureProvider.action( - context, MetricsProto.MetricsEvent.ACTION_SETTINGS_CONDITION_BUTTON, - condition.getMetricsConstant()); - mConditionManager.onActionClick(condition.getId()); - }); - } else { - button.setVisibility(View.GONE); - } - - } - - private void setViewVisibility(View containerView, int viewId, boolean visible) { - View view = containerView.findViewById(viewId); - if (view != null) { - view.setVisibility(visible ? View.VISIBLE : View.GONE); - } - } -} diff --git a/src/com/android/settings/homepage/conditional/v2/ConditionManager.java b/src/com/android/settings/homepage/conditional/v2/ConditionManager.java deleted file mode 100644 index c67b255d4f0..00000000000 --- a/src/com/android/settings/homepage/conditional/v2/ConditionManager.java +++ /dev/null @@ -1,210 +0,0 @@ -/* - * 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.homepage.conditional.v2; - -import android.content.Context; -import android.util.FeatureFlagUtils; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.VisibleForTesting; - -import com.android.settings.core.FeatureFlags; -import com.android.settings.homepage.conditional.ConditionListener; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -public class ConditionManager { - private static final String TAG = "ConditionManager"; - - @VisibleForTesting - final List mCandidates; - @VisibleForTesting - final List mCardControllers; - - private static final long DISPLAYABLE_CHECKER_TIMEOUT_MS = 20; - - private final ExecutorService mExecutorService; - private final Context mAppContext; - private final ConditionListener mListener; - - private boolean mIsListeningToStateChange; - - /** - * Whether or not the new condition manager is should be used. - */ - public static boolean isEnabled(Context context) { - return FeatureFlagUtils.isEnabled(context, FeatureFlags.CONDITION_MANAGER_V2); - } - - public ConditionManager(Context context, ConditionListener listener) { - mAppContext = context.getApplicationContext(); - mExecutorService = Executors.newCachedThreadPool(); - mCandidates = new ArrayList<>(); - mCardControllers = new ArrayList<>(); - mListener = listener; - initCandidates(); - } - - /** - * Returns a list of {@link ConditionalCard}s eligible for display. - */ - public List getDisplayableCards() { - final List cards = new ArrayList<>(); - final List> displayableCards = new ArrayList<>(); - // Check displayable future - for (ConditionalCard card : mCandidates) { - final DisplayableChecker future = new DisplayableChecker( - card, getController(card.getId())); - displayableCards.add(mExecutorService.submit(future)); - } - // Collect future and add displayable cards - for (Future cardFuture : displayableCards) { - try { - final ConditionalCard card = cardFuture.get(DISPLAYABLE_CHECKER_TIMEOUT_MS, - TimeUnit.MILLISECONDS); - if (card != null) { - cards.add(card); - } - } catch (InterruptedException | ExecutionException | TimeoutException e) { - Log.w(TAG, "Failed to get displayable state for card, likely timeout. Skipping", e); - } - } - return cards; - } - - /** - * Handler when the card is clicked. - * - * @see {@link ConditionalCardController#onPrimaryClick(Context)} - */ - public void onPrimaryClick(Context context, long id) { - getController(id).onPrimaryClick(context); - } - - /** - * Handler when the card action is clicked. - * - * @see {@link ConditionalCardController#onActionClick()} - */ - public void onActionClick(long id) { - getController(id).onActionClick(); - onConditionChanged(); - } - - /** - * Start monitoring state change for all conditions - */ - public void startMonitoringStateChange() { - if (mIsListeningToStateChange) { - Log.d(TAG, "Already listening to condition state changes, skipping"); - return; - } - mIsListeningToStateChange = true; - for (ConditionalCardController controller : mCardControllers) { - controller.startMonitoringStateChange(); - } - // Force a refresh on listener - onConditionChanged(); - } - - /** - * Stop monitoring state change for all conditions - */ - public void stopMonitoringStateChange() { - if (!mIsListeningToStateChange) { - Log.d(TAG, "Not listening to condition state changes, skipping"); - return; - } - for (ConditionalCardController controller : mCardControllers) { - controller.stopMonitoringStateChange(); - } - mIsListeningToStateChange = false; - } - - /** - * Called when some conditional card's state has changed - */ - void onConditionChanged() { - if (mListener != null) { - mListener.onConditionsChanged(); - } - } - - @NonNull - T getController(long id) { - for (ConditionalCardController controller : mCardControllers) { - if (controller.getId() == id) { - return (T) controller; - } - } - throw new IllegalStateException("Cannot find controller for " + id); - } - - private void initCandidates() { - // Initialize controllers first. - mCardControllers.add(new AirplaneModeConditionController(mAppContext, this /* manager */)); - mCardControllers.add(new BackgroundDataConditionController(mAppContext)); - mCardControllers.add(new BatterySaverConditionController(mAppContext, this /* manager */)); - mCardControllers.add(new CellularDataConditionController(mAppContext, this /* manager */)); - mCardControllers.add(new DndConditionCardController(mAppContext, this /* manager */)); - mCardControllers.add(new HotspotConditionController(mAppContext, this /* manager */)); - mCardControllers.add(new NightDisplayConditionController(mAppContext)); - mCardControllers.add(new RingerVibrateConditionController(mAppContext, this /* manager */)); - mCardControllers.add(new RingerMutedConditionController(mAppContext, this /* manager */)); - mCardControllers.add(new WorkModeConditionController(mAppContext)); - - // Initialize ui model later. UI model depends on controller. - mCandidates.add(new AirplaneModeConditionCard(mAppContext)); - mCandidates.add(new BackgroundDataConditionCard(mAppContext)); - mCandidates.add(new BatterySaverConditionCard(mAppContext)); - mCandidates.add(new CellularDataConditionCard(mAppContext)); - mCandidates.add(new DndConditionCard(mAppContext, this /* manager */)); - mCandidates.add(new HotspotConditionCard(mAppContext, this /* manager */)); - mCandidates.add(new NightDisplayConditionCard(mAppContext)); - mCandidates.add(new RingerMutedConditionCard(mAppContext)); - mCandidates.add(new RingerVibrateConditionCard(mAppContext)); - mCandidates.add(new WorkModeConditionCard(mAppContext)); - } - - /** - * Returns card if controller says it's displayable. Otherwise returns null. - */ - public static class DisplayableChecker implements Callable { - - private final ConditionalCard mCard; - private final ConditionalCardController mController; - - private DisplayableChecker(ConditionalCard card, ConditionalCardController controller) { - mCard = card; - mController = controller; - } - - @Override - public ConditionalCard call() throws Exception { - return mController.isDisplayable() ? mCard : null; - } - } -} diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java index 58a5cc9dc6f..f544f09db97 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java @@ -47,8 +47,9 @@ import androidx.recyclerview.widget.RecyclerView; import com.android.settings.R; import com.android.settings.SettingsActivity; -import com.android.settings.homepage.conditional.Condition; import com.android.settings.dashboard.suggestions.SuggestionAdapter; +import com.android.settings.homepage.conditional.ConditionManager; +import com.android.settings.homepage.conditional.ConditionalCard; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.SettingsShadowResources; @@ -77,22 +78,22 @@ public class DashboardAdapterTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) private SettingsActivity mContext; @Mock - private View mView; - @Mock - private Condition mCondition; + private ConditionalCard mCondition; @Mock private Resources mResources; @Mock private WindowManager mWindowManager; + @Mock + private ConditionManager mConditionManager; + private ActivityInfo mActivityInfo; - private FakeFeatureFactory mFactory; private DashboardAdapter mDashboardAdapter; - private List mConditionList; + private List mConditionList; @Before public void setUp() { MockitoAnnotations.initMocks(this); - mFactory = FakeFeatureFactory.setupForTest(); + FakeFeatureFactory.setupForTest(); mActivityInfo = new ActivityInfo(); mActivityInfo.packageName = "pkg"; mActivityInfo.name = "class"; @@ -105,18 +106,15 @@ public class DashboardAdapterTest { mConditionList = new ArrayList<>(); mConditionList.add(mCondition); - when(mCondition.shouldShow()).thenReturn(true); mDashboardAdapter = new DashboardAdapter(mContext, null /* savedInstanceState */, - mConditionList, null /* conditionManager */, - null /* suggestionControllerMixin */, null /* lifecycle */); - when(mView.getTag()).thenReturn(mCondition); + mConditionManager, null /* suggestionControllerMixin */, null /* lifecycle */); } @Test public void onSuggestionClosed_notOnlySuggestion_updateSuggestionOnly() { final DashboardAdapter adapter = spy(new DashboardAdapter(mContext, null /* savedInstanceState */, - null /* conditions */, null /* conditionManager */, + mConditionManager, null /* suggestionControllerMixin */, null /* lifecycle */)); final List suggestions = makeSuggestions("pkg1", "pkg2", "pkg3"); @@ -149,7 +147,7 @@ public class DashboardAdapterTest { public void onSuggestionClosed_onlySuggestion_updateDashboardData() { final DashboardAdapter adapter = spy(new DashboardAdapter(mContext, null /* savedInstanceState */, - null /* conditions */, null /* conditionManager */, + mConditionManager, null /* suggestionControllerMixin */, null /* lifecycle */)); final List suggestions = makeSuggestions("pkg1"); adapter.setSuggestions(suggestions); @@ -166,7 +164,7 @@ public class DashboardAdapterTest { public void onSuggestionClosed_notInSuggestionList_shouldNotUpdateSuggestionList() { final DashboardAdapter adapter = spy(new DashboardAdapter(mContext, null /* savedInstanceState */, - null /* conditions */, null /* conditionManager */, + mConditionManager, null /* suggestionControllerMixin */, null /* lifecycle */)); final List suggestions = makeSuggestions("pkg1"); adapter.setSuggestions(suggestions); @@ -181,8 +179,7 @@ public class DashboardAdapterTest { @Test public void onBindSuggestion_shouldSetSuggestionAdapterAndNoCrash() { mDashboardAdapter = new DashboardAdapter(mContext, null /* savedInstanceState */, - null /* conditions */, null /* conditionManager */, - null /* suggestionControllerMixin */, null /* lifecycle */); + mConditionManager, null /* suggestionControllerMixin */, null /* lifecycle */); final List suggestions = makeSuggestions("pkg1"); mDashboardAdapter.setSuggestions(suggestions); @@ -218,8 +215,7 @@ public class DashboardAdapterTest { .thenReturn(context.getDrawable(R.drawable.ic_settings)); mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */, - null /* conditions */, null /* conditionManager */, - null /* suggestionControllerMixin */, null /* lifecycle */); + mConditionManager, null /* suggestionControllerMixin */, null /* lifecycle */); ReflectionHelpers.setField(mDashboardAdapter, "mCache", iconCache); mDashboardAdapter.onBindTile(holder, tile); @@ -239,7 +235,7 @@ public class DashboardAdapterTest { final IconCache iconCache = new IconCache(context); mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */, - null /* conditions */, null /* conditionManager */, + mConditionManager, null /* suggestionControllerMixin */, null /* lifecycle */); ReflectionHelpers.setField(mDashboardAdapter, "mCache", iconCache); @@ -264,8 +260,7 @@ public class DashboardAdapterTest { when(iconCache.getIcon(tile.getIcon(context))).thenReturn(mock(RoundedHomepageIcon.class)); mDashboardAdapter = new DashboardAdapter(context, null /* savedInstanceState */, - null /* conditions */, null /* conditionManager */, - null /* suggestionControllerMixin */, null /* lifecycle */); + mConditionManager, null /* suggestionControllerMixin */, null /* lifecycle */); ReflectionHelpers.setField(mDashboardAdapter, "mCache", iconCache); mDashboardAdapter.onBindTile(holder, tile); diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java index 406cb3cd1df..73b1734212b 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java @@ -33,8 +33,8 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.ListUpdateCallback; -import com.android.settings.homepage.conditional.AirplaneModeCondition; -import com.android.settings.homepage.conditional.Condition; +import com.android.settings.homepage.conditional.AirplaneModeConditionCard; +import com.android.settings.homepage.conditional.ConditionalCard; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settingslib.drawer.CategoryKey; import com.android.settingslib.drawer.DashboardCategory; @@ -63,9 +63,9 @@ public class DashboardDataTest { @Mock private Tile mTestCategoryTile; @Mock - private Condition mTestCondition; + private ConditionalCard mTestCondition; @Mock - private Condition mSecondCondition; // condition used to test insert in DiffUtil + private ConditionalCard mSecondCondition; // condition used to test insert in DiffUtil private Suggestion mTestSuggestion; @Before @@ -83,13 +83,11 @@ public class DashboardDataTest { suggestions.add(mTestSuggestion); // Build oneItemConditions - final List oneItemConditions = new ArrayList<>(); - when(mTestCondition.shouldShow()).thenReturn(true); + final List oneItemConditions = new ArrayList<>(); oneItemConditions.add(mTestCondition); // Build twoItemConditions - final List twoItemsConditions = new ArrayList<>(); - when(mSecondCondition.shouldShow()).thenReturn(true); + final List twoItemsConditions = new ArrayList<>(); twoItemsConditions.add(mTestCondition); twoItemsConditions.add(mSecondCondition); @@ -170,7 +168,7 @@ public class DashboardDataTest { @Test public void testGetPositionByEntity_notExisted_returnNotFound() { - final Condition condition = mock(AirplaneModeCondition.class); + final ConditionalCard condition = mock(AirplaneModeConditionCard.class); final int position = mDashboardDataWithOneConditions.getPositionByEntity(condition); assertThat(position).isEqualTo(DashboardData.POSITION_NOT_FOUND); } @@ -227,8 +225,8 @@ public class DashboardDataTest { testResultData.add(new ListUpdateResult.ResultData( ListUpdateResult.ResultData.TYPE_OPERATION_CHANGE, 2, 1)); // Build DashboardData - final List oneItemConditions = new ArrayList<>(); - when(mTestCondition.shouldShow()).thenReturn(true); + final List oneItemConditions = new ArrayList<>(); + oneItemConditions.add(mTestCondition); final List suggestions = new ArrayList<>(); suggestions.add(mTestSuggestion); diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java index 4eaeaf23e10..1759fffc9ca 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java @@ -27,7 +27,6 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import android.app.Activity; import android.content.Context; import com.android.settings.homepage.conditional.ConditionManager; diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/v2/AbnormalRingerConditionControllerBaseTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/AbnormalRingerConditionControllerBaseTest.java similarity index 92% rename from tests/robotests/src/com/android/settings/homepage/conditional/v2/AbnormalRingerConditionControllerBaseTest.java rename to tests/robotests/src/com/android/settings/homepage/conditional/AbnormalRingerConditionControllerBaseTest.java index dc06710335e..0b1772802be 100644 --- a/tests/robotests/src/com/android/settings/homepage/conditional/v2/AbnormalRingerConditionControllerBaseTest.java +++ b/tests/robotests/src/com/android/settings/homepage/conditional/AbnormalRingerConditionControllerBaseTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -23,6 +23,8 @@ import android.content.Context; import android.content.Intent; import android.media.AudioManager; +import com.android.settings.homepage.conditional.AbnormalRingerConditionController; +import com.android.settings.homepage.conditional.ConditionManager; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/v2/BackgroundDataConditionControllerTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/BackgroundDataConditionControllerTest.java similarity index 93% rename from tests/robotests/src/com/android/settings/homepage/conditional/v2/BackgroundDataConditionControllerTest.java rename to tests/robotests/src/com/android/settings/homepage/conditional/BackgroundDataConditionControllerTest.java index b12d786067a..4ad7e6dee7b 100644 --- a/tests/robotests/src/com/android/settings/homepage/conditional/v2/BackgroundDataConditionControllerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/conditional/BackgroundDataConditionControllerTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import static com.google.common.truth.Truth.assertThat; @@ -24,6 +24,7 @@ import android.content.Context; import android.content.Intent; import com.android.settings.Settings; +import com.android.settings.homepage.conditional.BackgroundDataConditionController; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/v2/BatterySaverConditionControllerTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/BatterySaverConditionControllerTest.java similarity index 93% rename from tests/robotests/src/com/android/settings/homepage/conditional/v2/BatterySaverConditionControllerTest.java rename to tests/robotests/src/com/android/settings/homepage/conditional/BatterySaverConditionControllerTest.java index 8849e2d58f3..9dd6780181d 100644 --- a/tests/robotests/src/com/android/settings/homepage/conditional/v2/BatterySaverConditionControllerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/conditional/BatterySaverConditionControllerTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import static com.google.common.truth.Truth.assertThat; @@ -27,6 +27,8 @@ import android.content.IntentFilter; import android.os.PowerManager; import com.android.settings.fuelgauge.BatterySaverReceiver; +import com.android.settings.homepage.conditional.BatterySaverConditionController; +import com.android.settings.homepage.conditional.ConditionManager; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/BatterySaverConditionTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/BatterySaverConditionTest.java deleted file mode 100644 index 323e6c5ff91..00000000000 --- a/tests/robotests/src/com/android/settings/homepage/conditional/BatterySaverConditionTest.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * 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.homepage.conditional; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.content.IntentFilter; -import android.os.PowerManager; - -import com.android.settings.R; -import com.android.settings.fuelgauge.BatterySaverReceiver; -import com.android.settings.testutils.SettingsRobolectricTestRunner; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.Shadows; -import org.robolectric.shadows.ShadowPowerManager; - -@RunWith(SettingsRobolectricTestRunner.class) -public class BatterySaverConditionTest { - @Mock - private ConditionManager mConditionManager; - - private ShadowPowerManager mPowerManager; - private Context mContext; - private BatterySaverCondition mCondition; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = spy(RuntimeEnvironment.application); - mPowerManager = Shadows.shadowOf(mContext.getSystemService(PowerManager.class)); - when(mConditionManager.getContext()).thenReturn(mContext); - mCondition = spy(new BatterySaverCondition(mConditionManager)); - } - - @Test - public void verifyText() { - assertThat(mCondition.getTitle()).isEqualTo( - mContext.getText(R.string.condition_battery_title)); - assertThat(mCondition.getSummary()).isEqualTo( - mContext.getText(R.string.condition_battery_summary)); - assertThat(mCondition.getActions()[0]).isEqualTo( - mContext.getText(R.string.condition_turn_off)); - } - - @Test - public void onResume_shouldRegisterReceiver() { - mCondition.onResume(); - - verify(mContext).registerReceiver(any(BatterySaverReceiver.class), any(IntentFilter.class)); - } - - @Test - public void onPause_shouldUnregisterReceiver() { - mCondition.onResume(); - mCondition.onPause(); - - verify(mContext).unregisterReceiver(any(BatterySaverReceiver.class)); - } - - @Test - public void refreshState_PowerSaverOn_shouldActivate() { - mPowerManager.setIsPowerSaveMode(true); - - mCondition.refreshState(); - - assertThat(mCondition.isActive()).isTrue(); - } - - @Test - public void refreshState_PowerSaverOff_shouldNotActivate() { - mPowerManager.setIsPowerSaveMode(false); - - mCondition.refreshState(); - - assertThat(mCondition.isActive()).isFalse(); - } -} diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionAdapterTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionAdapterTest.java index 663c630f3db..4d154da682a 100644 --- a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionAdapterTest.java +++ b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionAdapterTest.java @@ -17,6 +17,8 @@ package com.android.settings.homepage.conditional; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -25,8 +27,6 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; -import androidx.recyclerview.widget.RecyclerView; - import com.android.settings.R; import com.android.settings.dashboard.DashboardAdapter; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -45,22 +45,23 @@ import java.util.List; public class ConditionAdapterTest { @Mock - private Condition mCondition1; + private ConditionalCard mCondition1; @Mock - private Condition mCondition2; + private ConditionalCard mCondition2; + @Mock + private ConditionManager mConditionManager; private Context mContext; private ConditionAdapter mConditionAdapter; - private List mOneCondition; - private List mTwoConditions; + private List mOneCondition; + private List mTwoConditions; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; - final CharSequence[] actions = new CharSequence[2]; - when(mCondition1.getActions()).thenReturn(actions); - when(mCondition1.shouldShow()).thenReturn(true); + final CharSequence action = "action"; + when(mCondition1.getActionText()).thenReturn(action); mOneCondition = new ArrayList<>(); mOneCondition.add(mCondition1); mTwoConditions = new ArrayList<>(); @@ -70,32 +71,32 @@ public class ConditionAdapterTest { @Test public void getItemCount_notExpanded_shouldReturn0() { - mConditionAdapter = new ConditionAdapter(mContext, mOneCondition, false); + mConditionAdapter = new ConditionAdapter(mContext, mConditionManager, mOneCondition, false); assertThat(mConditionAdapter.getItemCount()).isEqualTo(0); } @Test public void getItemCount_expanded_shouldReturnListSize() { - mConditionAdapter = new ConditionAdapter(mContext, mOneCondition, true); + mConditionAdapter = new ConditionAdapter(mContext, mConditionManager, mOneCondition, true); assertThat(mConditionAdapter.getItemCount()).isEqualTo(1); - mConditionAdapter = new ConditionAdapter(mContext, mTwoConditions, true); + mConditionAdapter = new ConditionAdapter(mContext, mConditionManager, mTwoConditions, true); assertThat(mConditionAdapter.getItemCount()).isEqualTo(2); } @Test public void getItemViewType_shouldReturnConditionTile() { - mConditionAdapter = new ConditionAdapter(mContext, mTwoConditions, true); + mConditionAdapter = new ConditionAdapter(mContext, mConditionManager, mTwoConditions, true); assertThat(mConditionAdapter.getItemViewType(0)).isEqualTo(R.layout.condition_tile); } @Test public void onBindViewHolder_shouldSetListener() { final View view = LayoutInflater.from(mContext) - .inflate(R.layout.condition_tile, new LinearLayout(mContext), true); + .inflate(R.layout.condition_tile, new LinearLayout(mContext), true); final DashboardAdapter.DashboardItemHolder viewHolder = - new DashboardAdapter.DashboardItemHolder(view); - mConditionAdapter = new ConditionAdapter(mContext, mOneCondition, true); + new DashboardAdapter.DashboardItemHolder(view); + mConditionAdapter = new ConditionAdapter(mContext, mConditionManager, mOneCondition, true); mConditionAdapter.onBindViewHolder(viewHolder, 0); final View card = view.findViewById(R.id.content); @@ -106,30 +107,15 @@ public class ConditionAdapterTest { @Test public void viewClick_shouldInvokeConditionPrimaryClick() { final View view = LayoutInflater.from(mContext) - .inflate(R.layout.condition_tile, new LinearLayout(mContext), true); + .inflate(R.layout.condition_tile, new LinearLayout(mContext), true); final DashboardAdapter.DashboardItemHolder viewHolder = - new DashboardAdapter.DashboardItemHolder(view); - mConditionAdapter = new ConditionAdapter(mContext, mOneCondition, true); + new DashboardAdapter.DashboardItemHolder(view); + mConditionAdapter = new ConditionAdapter(mContext, mConditionManager, mOneCondition, true); mConditionAdapter.onBindViewHolder(viewHolder, 0); final View card = view.findViewById(R.id.content); assertThat(card).isNotNull(); card.performClick(); - verify(mCondition1).onPrimaryClick(); - } - - @Test - public void onSwiped_nullCondition_shouldNotCrash() { - final RecyclerView recyclerView = new RecyclerView(mContext); - final View view = LayoutInflater.from(mContext).inflate( - R.layout.condition_tile, new LinearLayout(mContext), true); - final DashboardAdapter.DashboardItemHolder viewHolder = - new DashboardAdapter.DashboardItemHolder(view); - mConditionAdapter = new ConditionAdapter(mContext, mOneCondition, true); - mConditionAdapter.addDismissHandling(recyclerView); - - // do not bind viewholder to simulate the null condition scenario - mConditionAdapter.mSwipeCallback.onSwiped(viewHolder, 0); - // no crash + verify(mConditionManager).onPrimaryClick(any(Context.class), anyLong()); } } diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/v2/ConditionManagerTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionManagerTest.java similarity index 93% rename from tests/robotests/src/com/android/settings/homepage/conditional/v2/ConditionManagerTest.java rename to tests/robotests/src/com/android/settings/homepage/conditional/ConditionManagerTest.java index 2f96eafb05b..f90c4489540 100644 --- a/tests/robotests/src/com/android/settings/homepage/conditional/v2/ConditionManagerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionManagerTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import static com.google.common.truth.Truth.assertThat; @@ -25,6 +25,9 @@ import static org.mockito.Mockito.when; import android.content.Context; import com.android.settings.homepage.conditional.ConditionListener; +import com.android.settings.homepage.conditional.ConditionManager; +import com.android.settings.homepage.conditional.ConditionalCard; +import com.android.settings.homepage.conditional.ConditionalCardController; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/ConditionTest.java deleted file mode 100644 index 981ef662ef5..00000000000 --- a/tests/robotests/src/com/android/settings/homepage/conditional/ConditionTest.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * Copyright (C) 2016 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.homepage.conditional; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.IntentFilter; -import android.graphics.drawable.Drawable; - -import com.android.internal.logging.nano.MetricsProto; -import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RuntimeEnvironment; - -@RunWith(SettingsRobolectricTestRunner.class) -public class ConditionTest { - - @Mock - private ConditionManager mConditionManager; - @Mock - private MetricsFeatureProvider mMetricsFeatureProvider; - - private Context mContext; - private TestCondition mCondition; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = spy(RuntimeEnvironment.application); - mCondition = new TestCondition(mConditionManager, mMetricsFeatureProvider); - when(mConditionManager.getContext()).thenReturn(mContext); - } - - @Test - public void initialize_shouldNotBeSilenced() { - assertThat(mCondition.isSilenced()).isFalse(); - } - - @Test - public void silence_shouldNotifyDataChangeAndLog() { - mCondition.silence(); - - assertThat(mCondition.isSilenced()).isTrue(); - verify(mConditionManager).notifyChanged(mCondition); - verify(mMetricsFeatureProvider).action(any(Context.class), - eq(MetricsProto.MetricsEvent.ACTION_SETTINGS_CONDITION_DISMISS), - eq(TestCondition.TEST_METRIC_CONSTANT)); - } - - @Test - public void onSilenceChanged_silenced_shouldRegisterReceiver() { - mCondition.onSilenceChanged(true); - - verify(mContext).registerReceiver( - TestCondition.mReceiver, TestCondition.TESTS_INTENT_FILTER); - } - - @Test - public void onSilenceChanged_notSilenced_registered_shouldUnregisterReceiver() { - mCondition.onSilenceChanged(true); - - mCondition.onSilenceChanged(false); - - verify(mContext).unregisterReceiver(TestCondition.mReceiver); - } - - @Test - public void onSilenceChanged_notSilenced_notRegistered_shouldNotCrash() { - mCondition.onSilenceChanged(false); - - verify(mContext, never()).unregisterReceiver(TestCondition.mReceiver); - // no crash - } - - private static final class TestCondition extends Condition { - - private static final int TEST_METRIC_CONSTANT = 1234; - private static final IntentFilter TESTS_INTENT_FILTER = new IntentFilter("TestIntent"); - private static final BroadcastReceiver mReceiver = mock(BroadcastReceiver.class); - - TestCondition(ConditionManager manager, MetricsFeatureProvider metricsFeatureProvider) { - super(manager, metricsFeatureProvider); - } - - @Override - public void refreshState() { - } - - @Override - public int getMetricsConstant() { - return TEST_METRIC_CONSTANT; - } - - @Override - public Drawable getIcon() { - return null; - } - - @Override - public CharSequence getTitle() { - return null; - } - - @Override - public CharSequence getSummary() { - return null; - } - - @Override - public CharSequence[] getActions() { - return new CharSequence[0]; - } - - @Override - public void onPrimaryClick() { - } - - @Override - public void onActionClick(int index) { - } - - @Override - public BroadcastReceiver getReceiver() { - return mReceiver; - } - - @Override - public IntentFilter getIntentFilter() { - return TESTS_INTENT_FILTER; - } - } -} diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/DndConditionTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/DndConditionTest.java deleted file mode 100644 index 9da1f9c3bb5..00000000000 --- a/tests/robotests/src/com/android/settings/homepage/conditional/DndConditionTest.java +++ /dev/null @@ -1,118 +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.homepage.conditional; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.ComponentName; -import android.content.Context; -import android.content.pm.PackageManager; - -import com.android.settings.testutils.FakeFeatureFactory; -import com.android.settings.testutils.SettingsRobolectricTestRunner; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -@RunWith(SettingsRobolectricTestRunner.class) -public class DndConditionTest { - - @Mock - private ConditionManager mConditionManager; - @Mock - private PackageManager mPackageManager; - @Mock - private Context mContext; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - FakeFeatureFactory.setupForTest(); - when(mConditionManager.getContext()).thenReturn(mContext); - when(mContext.getPackageManager()).thenReturn(mPackageManager); - } - - @Test - public void constructor_shouldNotDisableReceiver() { - new DndCondition(mConditionManager); - verify(mPackageManager, never()).setComponentEnabledSetting(any(ComponentName.class), - eq(PackageManager.COMPONENT_ENABLED_STATE_DISABLED), eq(PackageManager.DONT_KILL_APP)); - } - - @Test - public void constructor_shouldRegisterReceiver() { - new DndCondition(mConditionManager); - verify(mContext).registerReceiver(any(DndCondition.Receiver.class), - eq(DndCondition.DND_FILTER)); - } - - @Test - public void silence_shouldNotDisableReceiver() { - new DndCondition(mConditionManager).silence(); - - verify(mPackageManager, never()).setComponentEnabledSetting(any(ComponentName.class), - eq(PackageManager.COMPONENT_ENABLED_STATE_DISABLED), eq(PackageManager.DONT_KILL_APP)); - } - - @Test - public void onResume_shouldRegisterReceiver() { - DndCondition condition = new DndCondition(mConditionManager); - condition.onPause(); - condition.onResume(); - - // one from constructor, one from onResume() - verify(mContext, times(2)).registerReceiver(any(DndCondition.Receiver.class), - eq(DndCondition.DND_FILTER)); - } - - @Test - public void onPause_shouldUnregisterReceiver() { - new DndCondition(mConditionManager).onPause(); - - verify(mContext).unregisterReceiver(any(DndCondition.Receiver.class)); - } - - @Test - public void onPause_noReceiverRegistered_shouldNotUnregisterReceiver() { - DndCondition condition = new DndCondition(mConditionManager); - condition.onPause(); - reset(mContext); - - condition.onPause(); - - verify(mContext, never()).unregisterReceiver(any(DndCondition.Receiver.class)); - } - - @Test - public void nullZenConfig_noCrash() { - DndCondition condition = new DndCondition(mConditionManager); - assertThat(condition.mConfig).isNull(); - - // should not crash, instead summary is null - assertThat(condition.getSummary()).isNull(); - } -} diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/v2/DndConditionalCardControllerTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/DndConditionalCardControllerTest.java similarity index 91% rename from tests/robotests/src/com/android/settings/homepage/conditional/v2/DndConditionalCardControllerTest.java rename to tests/robotests/src/com/android/settings/homepage/conditional/DndConditionalCardControllerTest.java index fe4c621cdd4..c68f8999fc9 100644 --- a/tests/robotests/src/com/android/settings/homepage/conditional/v2/DndConditionalCardControllerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/conditional/DndConditionalCardControllerTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import static org.mockito.ArgumentMatchers.any; @@ -24,6 +24,8 @@ import static org.mockito.Mockito.verify; import android.content.Context; +import com.android.settings.homepage.conditional.ConditionManager; +import com.android.settings.homepage.conditional.DndConditionCardController; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/v2/DndConditionalCardTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/DndConditionalCardTest.java similarity index 87% rename from tests/robotests/src/com/android/settings/homepage/conditional/v2/DndConditionalCardTest.java rename to tests/robotests/src/com/android/settings/homepage/conditional/DndConditionalCardTest.java index 1dfbd294a87..47a3010babc 100644 --- a/tests/robotests/src/com/android/settings/homepage/conditional/v2/DndConditionalCardTest.java +++ b/tests/robotests/src/com/android/settings/homepage/conditional/DndConditionalCardTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import static com.google.common.truth.Truth.assertThat; @@ -24,6 +24,9 @@ import static org.mockito.Mockito.when; import android.content.Context; +import com.android.settings.homepage.conditional.ConditionManager; +import com.android.settings.homepage.conditional.DndConditionCard; +import com.android.settings.homepage.conditional.DndConditionCardController; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/RingerMutedConditionTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/RingerMutedConditionTest.java deleted file mode 100644 index 408aa137891..00000000000 --- a/tests/robotests/src/com/android/settings/homepage/conditional/RingerMutedConditionTest.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 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.homepage.conditional; - - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.media.AudioManager; -import android.provider.Settings; - -import com.android.settings.R; -import com.android.settings.testutils.SettingsRobolectricTestRunner; -import com.android.settings.testutils.shadow.ShadowAudioManager; -import com.android.settings.testutils.shadow.ShadowNotificationManager; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; -import org.robolectric.shadow.api.Shadow; - -@RunWith(SettingsRobolectricTestRunner.class) -@Config(shadows = {ShadowNotificationManager.class, ShadowAudioManager.class}) -public class RingerMutedConditionTest { - private static final String TAG = "RingerMutedConditionTest"; - @Mock - private ConditionManager mConditionManager; - - private Context mContext; - private ShadowNotificationManager mNotificationManager; - private ShadowAudioManager mAudioManager; - private RingerMutedCondition mCondition; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = RuntimeEnvironment.application; - mAudioManager = Shadow.extract(mContext.getSystemService(Context.AUDIO_SERVICE)); - mNotificationManager = Shadow.extract( - mContext.getSystemService(Context.NOTIFICATION_SERVICE)); - when(mConditionManager.getContext()).thenReturn(mContext); - mCondition = spy(new RingerMutedCondition(mConditionManager)); - } - - @Test - public void verifyText() { - assertThat(mCondition.getTitle()).isEqualTo( - mContext.getText(R.string.condition_device_muted_title)); - assertThat(mCondition.getSummary()).isEqualTo( - mContext.getText(R.string.condition_device_muted_summary)); - assertThat(mCondition.getActions()[0]).isEqualTo( - mContext.getText(R.string.condition_device_muted_action_turn_on_sound)); - } - - @Test - public void refreshState_zenModeOn_shouldNotActivate() { - mAudioManager.setRingerModeInternal(AudioManager.RINGER_MODE_SILENT); - mNotificationManager.setZenMode(Settings.Global.ZEN_MODE_NO_INTERRUPTIONS, null, TAG); - - mCondition.refreshState(); - - verify(mCondition).setActive(false); - } - - @Test - public void refreshState_zenModeOff_shouldActivate() { - mAudioManager.setRingerModeInternal(AudioManager.RINGER_MODE_SILENT); - mNotificationManager.setZenMode(Settings.Global.ZEN_MODE_OFF, null, TAG); - - mCondition.refreshState(); - - verify(mCondition).setActive(true); - } -} diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/RingerVibrateConditionTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/RingerVibrateConditionCardTest.java similarity index 74% rename from tests/robotests/src/com/android/settings/homepage/conditional/RingerVibrateConditionTest.java rename to tests/robotests/src/com/android/settings/homepage/conditional/RingerVibrateConditionCardTest.java index e886236e209..1f976ddd118 100644 --- a/tests/robotests/src/com/android/settings/homepage/conditional/RingerVibrateConditionTest.java +++ b/tests/robotests/src/com/android/settings/homepage/conditional/RingerVibrateConditionCardTest.java @@ -19,8 +19,6 @@ package com.android.settings.homepage.conditional; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.when; - import android.content.Context; import com.android.settings.R; @@ -29,33 +27,29 @@ import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; @RunWith(SettingsRobolectricTestRunner.class) -public class RingerVibrateConditionTest { - @Mock - private ConditionManager mConditionManager; +public class RingerVibrateConditionCardTest { private Context mContext; - private RingerVibrateCondition mCondition; + private RingerVibrateConditionCard mCard; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = RuntimeEnvironment.application; - when(mConditionManager.getContext()).thenReturn(mContext); - mCondition = new RingerVibrateCondition(mConditionManager); + mCard = new RingerVibrateConditionCard(mContext); } @Test public void verifyText() { - assertThat(mCondition.getTitle()).isEqualTo( + assertThat(mCard.getTitle()).isEqualTo( mContext.getText(R.string.condition_device_vibrate_title)); - assertThat(mCondition.getSummary()).isEqualTo( + assertThat(mCard.getSummary()).isEqualTo( mContext.getText(R.string.condition_device_vibrate_summary)); - assertThat(mCondition.getActions()[0]).isEqualTo( + assertThat(mCard.getActionText()).isEqualTo( mContext.getText(R.string.condition_device_muted_action_turn_on_sound)); } } diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/v2/WorkModeConditionControllerTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/WorkModeConditionControllerTest.java similarity index 93% rename from tests/robotests/src/com/android/settings/homepage/conditional/v2/WorkModeConditionControllerTest.java rename to tests/robotests/src/com/android/settings/homepage/conditional/WorkModeConditionControllerTest.java index 04d58412883..52c9ffedbf0 100644 --- a/tests/robotests/src/com/android/settings/homepage/conditional/v2/WorkModeConditionControllerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/conditional/WorkModeConditionControllerTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.settings.homepage.conditional.v2; +package com.android.settings.homepage.conditional; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.spy; @@ -24,6 +24,7 @@ import android.content.ComponentName; import android.content.Context; import com.android.settings.Settings; +import com.android.settings.homepage.conditional.WorkModeConditionController; import com.android.settings.testutils.SettingsRobolectricTestRunner; import org.junit.Before; diff --git a/tests/robotests/src/com/android/settings/homepage/conditional/WorkModeConditionTest.java b/tests/robotests/src/com/android/settings/homepage/conditional/WorkModeConditionTest.java deleted file mode 100644 index c846be0f854..00000000000 --- a/tests/robotests/src/com/android/settings/homepage/conditional/WorkModeConditionTest.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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.homepage.conditional; - -import static org.mockito.ArgumentMatchers.argThat; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.ComponentName; -import android.content.Context; - -import com.android.settings.Settings; -import com.android.settings.testutils.FakeFeatureFactory; -import com.android.settings.testutils.SettingsRobolectricTestRunner; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RuntimeEnvironment; - -@RunWith(SettingsRobolectricTestRunner.class) -public class WorkModeConditionTest { - - @Mock - private ConditionManager mConditionManager; - - private Context mContext; - private WorkModeCondition mCondition; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mContext = spy(RuntimeEnvironment.application); - FakeFeatureFactory.setupForTest(); - when(mConditionManager.getContext()).thenReturn(mContext); - mCondition = new WorkModeCondition(mConditionManager); - } - - @Test - public void onPrimaryClick_shouldLaunchAccountsSetting() { - final ComponentName componentName = - new ComponentName(mContext, Settings.AccountDashboardActivity.class); - - mCondition.onPrimaryClick(); - - verify(mContext).startActivity( - argThat(intent-> intent.getComponent().equals(componentName))); - } -} From 12c9be12552aaf6f61e5eaba7f839e274e424b4f Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Tue, 21 Aug 2018 20:25:47 +0200 Subject: [PATCH 10/10] DO NOT MERGE leverage default_theme string for display_cutout_emulation_device_default Bug: 112876936 Test: manual Change-Id: I1a41b96f9f19a5d5854eb1cce214616e303ca4f9 --- res/values-af/strings.xml | 1 + res/values-am/strings.xml | 1 + res/values-ar/strings.xml | 1 + res/values-as/strings.xml | 1 + res/values-az/strings.xml | 1 + res/values-b+sr+Latn/strings.xml | 1 + res/values-be/strings.xml | 1 + res/values-bg/strings.xml | 1 + res/values-bn/strings.xml | 1 + res/values-bs/strings.xml | 1 + res/values-ca/strings.xml | 1 + res/values-cs/strings.xml | 1 + res/values-da/strings.xml | 1 + res/values-de/strings.xml | 1 + res/values-el/strings.xml | 1 + res/values-en-rAU/strings.xml | 1 + res/values-en-rCA/strings.xml | 1 + res/values-en-rGB/strings.xml | 1 + res/values-en-rIN/strings.xml | 1 + res/values-en-rXC/strings.xml | 1 + res/values-es-rUS/strings.xml | 1 + res/values-es/strings.xml | 1 + res/values-et/strings.xml | 1 + res/values-eu/strings.xml | 1 + res/values-fa/strings.xml | 1 + res/values-fi/strings.xml | 1 + res/values-fr-rCA/strings.xml | 1 + res/values-fr/strings.xml | 1 + res/values-gl/strings.xml | 1 + res/values-gu/strings.xml | 1 + res/values-hi/strings.xml | 1 + res/values-hr/strings.xml | 1 + res/values-hu/strings.xml | 1 + res/values-hy/strings.xml | 1 + res/values-in/strings.xml | 1 + res/values-is/strings.xml | 1 + res/values-it/strings.xml | 1 + res/values-iw/strings.xml | 1 + res/values-ja/strings.xml | 1 + res/values-ka/strings.xml | 1 + res/values-kk/strings.xml | 1 + res/values-km/strings.xml | 1 + res/values-kn/strings.xml | 1 + res/values-ko/strings.xml | 1 + res/values-ky/strings.xml | 1 + res/values-lo/strings.xml | 1 + res/values-lt/strings.xml | 1 + res/values-lv/strings.xml | 1 + res/values-mk/strings.xml | 1 + res/values-ml/strings.xml | 1 + res/values-mn/strings.xml | 1 + res/values-mr/strings.xml | 1 + res/values-ms/strings.xml | 1 + res/values-my/strings.xml | 1 + res/values-nb/strings.xml | 1 + res/values-ne/strings.xml | 1 + res/values-nl/strings.xml | 1 + res/values-or/strings.xml | 1 + res/values-pa/strings.xml | 1 + res/values-pl/strings.xml | 1 + res/values-pt-rBR/strings.xml | 1 + res/values-pt-rPT/strings.xml | 1 + res/values-pt/strings.xml | 1 + res/values-ro/strings.xml | 1 + res/values-ru/strings.xml | 1 + res/values-si/strings.xml | 1 + res/values-sk/strings.xml | 1 + res/values-sl/strings.xml | 1 + res/values-sq/strings.xml | 1 + res/values-sr/strings.xml | 1 + res/values-sv/strings.xml | 1 + res/values-sw/strings.xml | 1 + res/values-ta/strings.xml | 1 + res/values-te/strings.xml | 1 + res/values-th/strings.xml | 1 + res/values-tl/strings.xml | 1 + res/values-tr/strings.xml | 1 + res/values-uk/strings.xml | 1 + res/values-ur/strings.xml | 1 + res/values-uz/strings.xml | 1 + res/values-vi/strings.xml | 1 + res/values-zh-rCN/strings.xml | 1 + res/values-zh-rHK/strings.xml | 1 + res/values-zh-rTW/strings.xml | 1 + res/values-zu/strings.xml | 1 + 85 files changed, 85 insertions(+) diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 18223eeafd3..84939d07834 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -4152,4 +4152,5 @@ "Netwerkbesonderhede" "Programme op jou foon kan jou toestelnaam sien. Ander mense sal dit dalk ook kan sien wanneer jy aan Bluetooth-toestelle koppel of \'n Wi-Fi-warmkol opstel." "Toestelle" + "Verstek" diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 9bc05d22283..de00ad2e06c 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -4152,4 +4152,5 @@ "የአውታረ መረብ ዝርዝሮች" "የእርስዎ መሣሪያ በእርስዎ ስልክ ላይ ላሉ መተግበሪያዎች የሚታይ ነው። ወድ ብሉቱዝ መሣሪያዎች ሲያገኙ ወይም የWi-Fi መገናኛ ነጥብን ሲያቀናብሩ በተጨማሪ በሌሎች ሰዎች የሚታይ ይሆናል።" "መሣሪያዎች" + "ነባሪ" diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 9a9b70c2293..30f0d8efef3 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -4428,4 +4428,5 @@ "تفاصيل الشبكة" "‏اسم جهازك مرئي للتطبيقات على هاتفك. ويمكن أيضًا أن يراه أشخاص آخرون عند الاتصال بأجهزة بلوتوث أو إعداد نقطة اتصال Wi-Fi." "الأجهزة" + "تلقائي" diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml index d17c32d22fc..4811c554866 100644 --- a/res/values-as/strings.xml +++ b/res/values-as/strings.xml @@ -4154,4 +4154,5 @@ "নেটৱৰ্কৰ সবিশেষ" "আপোনাৰ ডিভাইচটোৰ নাম আপোনাৰ ফ\'নটোত থকা এপসমূহৰ বাবে দৃশ্যমান। আপুনি ব্লুটুথ ডিভাইচৰ সৈতে সংযোগ কৰোঁতে বা ৱাই-ফাই হ\'টস্প\'ট ছেট আপ কৰোঁতেও নামটো অইনে দেখা পাব পাৰে।" "ডিভাইচসমূহ" + "ডিফ'ল্ট" diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index df1a0f9059f..089cd1ed9e1 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -4152,4 +4152,5 @@ "Şəbəkə məlumatları" "Cihazın adı telefondakı tətbiqlərdə görünəcək. Bluetooth cihazlarına qoşulduqda və ya Wi-Fi hotspotu ayarladıqda digərləri də onu görə bilər." "Cihazlar" + "Defolt" diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index f0530717b0f..442ec5fb570 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -4221,4 +4221,5 @@ "Detalji o mreži" "Ime uređaja vide aplikacije na telefonu. Mogu da ga vide i drugi ljudi kad se povežete sa Bluetooth uređajima ili podesite Wi-Fi hotspot." "Uređaji" + "Podrazumevana" diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index e789d795eb4..1bc0f6c0afd 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -4292,4 +4292,5 @@ "Інфармацыя аб сетцы" "Назва вашай прылады даступная для праграм на вашым тэлефоне. Яе таксама будуць бачыць іншыя людзі, калі вы падключыцеся да прылад праз Bluetooth ці наладзіце хот-спот Wi-Fi." "Прылады" + "Стандартная" diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index cfbd56dde74..9488eb288c9 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -4152,4 +4152,5 @@ "Подробности за мрежата" "Името на устройството ви е видимо за приложенията на телефона ви. То може да се вижда и от други хора, когато се свържете с устройства с Bluetooth или настроите точка за достъп до Wi-Fi." "Устройства" + "Стандартно" diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml index ab208e6e6e3..5deb82933e7 100644 --- a/res/values-bn/strings.xml +++ b/res/values-bn/strings.xml @@ -4152,4 +4152,5 @@ "নেটওয়ার্কের বিবরণ" "আপনার ডিভাইসের নাম আপনার ফোনে থাকা অ্যাপে দেখা যাবে। আপনি যখন এটিকে ব্লুটুথ ডিভাইসের সাথে কানেক্ট করেন বা ওয়াই-ফাই হটস্পট সেট-আপ করেন তখন এটি অন্যরাও দেখতে পেতে পারেন।" "ডিভাইস" + "ডিফল্ট" diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index 2d4be9eb281..7b5d7cc04b4 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -4221,4 +4221,5 @@ "Detalji o mreži" "Naziv uređaja mogu vidjeti aplikacije na telefonu. Mogu ga vidjeti i druge osobe kada se povežete na Bluetooth uređaje ili postavite WiFi pristupnu tačku." "Uređaji" + "Zadano" diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index f314c3b4750..c4190957457 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -4152,4 +4152,5 @@ "Detalls de la xarxa" "El nom del dispositiu és visible per a les aplicacions del telèfon. També el poden veure altres persones si el connectes a un dispositiu Bluetooth o si configures un punt d\'accés Wi-Fi." "Dispositius" + "Predeterminat" diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index ce225312e7c..7a403d7fb6a 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -4290,4 +4290,5 @@ "Podrobnosti sítě" "Název vašeho zařízení je viditelný pro aplikace v telefonu. Mohou ho vidět také ostatní uživatelé, když se připojíte k zařízení Bluetooth nebo hotspotu Wi-Fi." "Zařízení" + "Výchozí" diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index e66a6f231ac..25cd7fcc853 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -4152,4 +4152,5 @@ "Netværksoplysninger" "Navnet på din enhed er synligt for apps på din telefon. Det kan muligvis også ses af andre, når du opretter forbindelse til Bluetooth-enheder eller konfigurerer et Wi-Fi-hotspot." "Enheder" + "Standard" diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 9c37cf83cd3..ddd92c6e7d4 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -4152,4 +4152,5 @@ "Netzwerkdetails" "Dein Gerätename ist für Apps auf deinem Smartphone sichtbar. Wenn du dich mit Bluetooth-Geräten verbindest oder einen WLAN-Hotspot einrichtest, kann er möglicherweise auch von anderen Personen gesehen werden." "Geräte" + "Standard" diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index ffc074c1458..73c1b4ce800 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -4152,4 +4152,5 @@ "Λεπτομέρειες δικτύου" "Το όνομα της συσκευής σας είναι ορατό σε εφαρμογές στο τηλέφωνό σας. Ενδέχεται επίσης να είναι ορατό και σε άλλα άτομα, όταν συνδέεστε σε συσκευές Bluetooth ή ρυθμίζετε ένα σημείο πρόσβασης Wi-Fi." "Συσκευές" + "Προεπιλογή" diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index a9859239006..5f350ef78a1 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -4152,4 +4152,5 @@ "Network details" "Your device name is visible to apps on your phone. It may also be seen by other people when you connect to Bluetooth devices or set up a Wi-Fi hotspot." "Devices" + "Default" diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml index 6660d8a1509..213f0b8c8eb 100644 --- a/res/values-en-rCA/strings.xml +++ b/res/values-en-rCA/strings.xml @@ -4152,4 +4152,5 @@ "Network details" "Your device name is visible to apps on your phone. It may also be seen by other people when you connect to Bluetooth devices or set up a Wi-Fi hotspot." "Devices" + "Default" diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index a9859239006..5f350ef78a1 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -4152,4 +4152,5 @@ "Network details" "Your device name is visible to apps on your phone. It may also be seen by other people when you connect to Bluetooth devices or set up a Wi-Fi hotspot." "Devices" + "Default" diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index a9859239006..5f350ef78a1 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -4152,4 +4152,5 @@ "Network details" "Your device name is visible to apps on your phone. It may also be seen by other people when you connect to Bluetooth devices or set up a Wi-Fi hotspot." "Devices" + "Default" diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml index 7faabda4f36..064258d3c02 100644 --- a/res/values-en-rXC/strings.xml +++ b/res/values-en-rXC/strings.xml @@ -4151,4 +4151,5 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎Network details‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‎Your device name is visible to apps on your phone. It may also be seen by other people when you connect to Bluetooth devices or set up a Wi-Fi hotspot.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‎‏‏‏‎Devices‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‎‎‎Default‎‏‎‎‏‎" diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index b9150828d58..fbe68fd282a 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -4150,4 +4150,5 @@ "Detalles de la red" "El nombre de tu dispositivo es visible para las apps del teléfono. Es posible que también lo vean otras personas cuando te conectes a dispositivos Bluetooth o configures un hotspot de Wi-Fi." "Dispositivos" + "Predeterminado" diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 0afc3760eb7..43e802ad2b4 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -4152,4 +4152,5 @@ "Detalles de la red" "Las aplicaciones de tu teléfono pueden ver el nombre de tu dispositivo. También es posible que lo vean otros usuarios si lo conectas con dispositivos Bluetooth o configuras un punto de acceso Wi‑Fi." "Dispositivos" + "Predeterminado" diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index a0809086153..fb02afb9a67 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -4152,4 +4152,5 @@ "Võrgu üksikasjad" "Teie seadme nimi on telefonis rakendustele nähtav. Bluetoothi seadmetega ühendamisel või WiFi-pääsupunkti loomisel võivad seda näha ka teised inimesed." "Seadmed" + "Vaikeseade" diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 4cd9dc59a85..0b09abe1926 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -4152,4 +4152,5 @@ "Sarearen xehetasunak" "Mugikorreko aplikazioek gailuaren izena ikus dezakete. Halaber, jendeak ere ikus dezake Bluetooth gailuetara konektatzean edo Wi-Fi sare publiko bat konfiguratzean." "Gailuak" + "Lehenetsia" diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index f68fefc4624..2fefadc8160 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -4152,4 +4152,5 @@ "جزئیات شبکه" "‏نام دستگاه شما برای برنامه‌های موجود در تلفنتان قابل‌مشاهده است. ممکن است وقتی به دستگاه‌های بلوتوث متصل می‌شوید یا نقطه اتصال Wi-Fi راه‌اندازی می‌کنید، برای سایر افراد نیز قابل‌مشاهده باشد." "دستگاه‌ها" + "پیش‌فرض" diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index bc1dc37bce5..af57ea6dcb4 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -4152,4 +4152,5 @@ "Verkon tiedot" "Puhelimen sovellukset näkevät laitteesi nimen. Muut voivat myös nähdä nimen, kun muodostat Bluetooth-yhteyden laitteisiin tai aktivoit Wi-Fi-hotspotin." "Laitteet" + "Oletus" diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index dec7a5992a2..e1380fa6711 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -4152,4 +4152,5 @@ "Détails du réseau" "Le nom de votre appareil est visible pour les applications de votre téléphone. Il est aussi possible que d\'autres personnes le voient lorsque vous vous connectez à des appareils Bluetooth ou lorsque vous configurez un point d\'accès Wi-Fi." "Appareils" + "Par défaut" diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 96c301ce148..2eccda430a9 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -4152,4 +4152,5 @@ "Détails du réseau" "Le nom de votre appareil est visible par les applications installées sur votre téléphone. Il peut l\'être également par d\'autres personnes en cas de connexion à des appareils Bluetooth ou de configuration d\'un point d\'accès Wi-Fi." "Appareils" + "Par défaut" diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index 47ed64ff7e9..cbe396a89bd 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -4153,4 +4153,5 @@ "Detalles da rede" "As aplicacións do teu teléfono poden consultar o nome do teu dispositivo. Tamén poden velo outros usuarios cando te conectes a dispositivos Bluetooth ou configures zonas wifi." "Dispositivos" + "Predeterminado" diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index d20fe3d8dd1..93c5255feba 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -4152,4 +4152,5 @@ "નેટવર્કની વિગતો" "તમારા ઉપકરણનું નામ તમારા ફોનની ઍપ પર જોઈ શકાય છે. તમે બ્લૂટૂથથી કનેક્ટ કરો અથવા વાઇ-ફાઇ હૉટસ્પૉટને સેટ કરો ત્યારે તે અન્ય લોકોને પણ દેખાઈ શકે છે." "ઉપકરણો" + "ડિફૉલ્ટ" diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 0da9502d74a..8a38bf3c579 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -4152,4 +4152,5 @@ "नेटवर्क के बारे में जानकारी" "आपके फ़ोन पर मौजूद ऐप्लिकेशन, आपके डिवाइस का नाम जान सकते हैं. ब्लूटूथ डिवाइस जोड़ते समय या वाई-फ़ाई हॉटस्पॉट सेटअप करते समय, इसे दूसरे लोग भी देख सकते हैं." "डिवाइस" + "डिफ़ॉल्ट" diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index e6b5e653023..08ed45d8fdc 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -4221,4 +4221,5 @@ "Pojedinosti o mreži" "Naziv vašeg uređaja vidljiv je aplikacijama na vašem telefonu. Mogu ga vidjeti i drugi ljudi kada se povežete s Bluetooth uređajima ili postavite Wi-Fi žarišnu točku." "Uređaji" + "Zadano" diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 25f5f8e62f2..36628731ac5 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -4152,4 +4152,5 @@ "Hálózati információk" "Eszköze neve látható a telefonján lévő alkalmazások számára. Mások is láthatják, ha csatlakoztatja telefonját más Bluetooth-eszközökhöz, vagy ha Wi-Fi-hotspotot állít be." "Eszközök" + "Alapértelmezett" diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index b7334aa50f9..7933a760b07 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -4152,4 +4152,5 @@ "Ցանցի տվյալներ" "Ձեր սարքի անունը տեսանելի է հեռախոսի հավելվածներին։ Այն կարող են տեսնել օգտատերերը, երբ միանում եք Bluetooth սարքերի կամ կարգավորում եք Wi-Fi թեժ կետը։" "Սարքեր" + "Կանխադրված" diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index c95f6295975..da6b05a3c2b 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -4152,4 +4152,5 @@ "Detail jaringan" "Nama perangkat terlihat oleh aplikasi di ponsel, dan juga mungkin dilihat oleh orang lain saat Anda menghubungkan ke perangkat Bluetooth atau menyiapkan hotspot Wi-Fi." "Perangkat" + "Default" diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index 3e67fd5b025..6cf1b53bcfd 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -4152,4 +4152,5 @@ "Upplýsingar um net" "Heiti tækisins þíns er sýnilegt forritum í símanum. Heiti þess er hugsanlega einnig sýnilegt öðru fólki þegar þú tengist Bluetooth-tækjum eða setur upp heitan Wi-Fi reit." "Tæki" + "Sjálfgefið" diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 5bc0deca504..839c5591177 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -4152,4 +4152,5 @@ "Dettagli rete" "Il nome del tuo dispositivo è visibile alle app installate sul telefono. Potrebbe essere visibile anche ad altre persone se ti connetti a dispositivi Bluetooth o configuri un hotspot Wi-Fi." "Dispositivi" + "Valore predefinito" diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index b0fcc5c1c16..b11dd248e08 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -4292,4 +4292,5 @@ "פרטי הרשת" "‏שם המכשיר שלך גלוי לאפליקציות בטלפון שלך. כמו כן, ייתכן שאנשים אחרים יראו אותו בהתחברות למכשירי Bluetooth או כשמגדירים נקודת Wi-Fi לשיתוף אינטרנט." "מכשירים" + "ברירת מחדל" diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 4eb7c88b3a1..542c80922d0 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -4156,4 +4156,5 @@ "ネットワークの詳細" "端末名がスマートフォンのアプリに表示されます。また、Bluetooth デバイスに接続したり Wi-Fi アクセス ポイントを設定したりすると、他のユーザーも端末名を確認できるようになります。" "端末" + "デフォルト" diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml index ed452041b95..cb2dfcd7dd9 100644 --- a/res/values-ka/strings.xml +++ b/res/values-ka/strings.xml @@ -4152,4 +4152,5 @@ "ქსელის დეტალები" "თქვენი მოწყობილობის სახელი ხილულია თქვენს ტელეფონზე არსებული აპებისთვის. მისი დანახვას ასევე შეძლებენ სხვა პირები, როცა Bluetooth მოწყობილობებს დაუკავშირდებით ან Wi-Fi უსადენო ქსელით ისარგებლებთ." "მოწყობილობები" + "ნაგულისხმევი" diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index 2a319cc3e02..38661f317df 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -4152,4 +4152,5 @@ "Желі деректері" "Құрылғыңыздың аты телефоныңыздағы қолданбаларға көрінеді. Сонымен қатар Bluetooth құрылғыларына қосылғанда немесе Wi-Fi хотспотын орнатқанда, басқа адамдарға көрінуі мүмкін." "Құрылғылар" + "Әдепкі" diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index fc4eb490fcb..b64f4f74091 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -4152,4 +4152,5 @@ "ព័ត៌មាន​លម្អិតនៃ​បណ្ដាញ" "ឈ្មោះ​ឧបករណ៍​របស់អ្នក​អាច​ឱ្យ​កម្មវិធី​នៅលើ​ទូរសព្ទ​របស់អ្នក​មើលឃើញ។ វា​ក៏​អាច​ឱ្យ​អ្នក​ដទៃ​មើល​ឃើញ​ផងដែរ នៅពេល​ដែលអ្នក​ភ្ជាប់​ទៅ​ឧបករណ៍​ប៊្លូធូស ឬ​រៀបចំ​ហតស្ប៉ត Wi-Fi ។" "ឧបករណ៍" + "លំ​នាំ​ដើម" diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index 4cafa03b78b..b6c9ab32c02 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -4152,4 +4152,5 @@ "ನೆಟ್‌ವರ್ಕ್‌ ವಿವರಗಳು" "ನಿಮ್ಮ ಸಾಧನದ ಹೆಸರು ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿರುವ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಗೋಚರಿಸುತ್ತದೆ. ನೀವು ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳನ್ನು ಸಂಪರ್ಕಿಸಿದಾಗ ಅಥವಾ ವೈ-ಫೈ ಹಾಟ್‌ಸ್ಪಾಟ್ ಅನ್ನು ಹೊಂದಿಸಿದಾಗ ಇತರ ಜನರು ಸಹ ಅದನ್ನು ನೋಡಬಹುದು." "ಸಾಧನಗಳು" + "ಡಿಫಾಲ್ಟ್" diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 704dced6ad9..dbe85f6eec7 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -4152,4 +4152,5 @@ "네트워크 세부정보" "휴대전화에 설치된 앱에 기기 이름이 표시됩니다. 기기 이름은 블루투스 기기에 연결하거나 Wi-Fi 핫스팟을 설정할 때 다른 사용자에게 표시될 수도 있습니다." "기기" + "기본값" diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index 09ee09839f9..68a9d5dbd5f 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -4151,4 +4151,5 @@ "Тармактын чоо-жайы" "Түзмөгүңүздүн аталышы телефонуңуздагы колдонмолорго көрүнүктүү. Bluetooth түзмөктөрүнө туташканыңызда же Wi‑Fi туташуу түйүнүн жөндөгөнүңүздө, аны башка адамдар да көрүшү мүмкүн." "Түзмөктөр" + "Демейки" diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index 667639034f5..12e8bdb49d6 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -4152,4 +4152,5 @@ "ລາຍລະອຽດເຄືອຂ່າຍ" "ຊື່ອຸປະກອນຂອງທ່ານຈະສາມາດເບິ່ງເຫັນໄດ້ໂດຍແອັບຢູ່ໂທລະສັບຂອງທ່ານ. ນອກຈາກນັ້ນ, ຄົນອື່ນອາດຈະເຫັນມັນໄດ້ເມື່ອທ່ານເຊື່ອມຕໍ່ຫາອຸປະກອນ Bluetooth ຫຼື ຕັ້ງ Wi-Fi ຮັອດສະປອດ." "ອຸປະກອນ" + "ຄ່າເລີ່ມຕົ້ນ" diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index c054942773d..dd772a3af87 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -4290,4 +4290,5 @@ "Išsami tinklo informacija" "Įrenginio pavadinimas matomas jūsų telefone esančioms programoms. Kai prisijungiate prie „Bluetooth“ įrenginių arba nustatote „Wi-Fi“ viešosios interneto prieigos tašką, jį taip pat gali matyti kiti žmonės." "Įrenginiai" + "Numatytoji" diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index 103017b9cc8..92d568dab7f 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -4221,4 +4221,5 @@ "Dati par tīklu" "Jūsu ierīces nosaukums ir redzams tālrunī instalētajām lietotnēm. Ja izveidosiet savienojumu ar Bluetooth ierīcēm vai iestatīsiet Wi-Fi tīklāju, tas būs redzams arī citām personām." "Ierīces" + "Noklusējums" diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index f1427caaf29..bef4ee244a0 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -4152,4 +4152,5 @@ "Детали за мрежа" "Името на уредот е видливо за апликациите на телефонот. Може да го видат и други луѓе кога ќе се поврзете со уреди со Bluetooth или кога ќе поставите Wi-Fi точка на пристап." "Уреди" + "Стандардно" diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml index c782cd9f88c..1ebf329d0a4 100644 --- a/res/values-ml/strings.xml +++ b/res/values-ml/strings.xml @@ -4152,4 +4152,5 @@ "നെറ്റ്‌വർക്ക് വിശദാംശങ്ങൾ" "നിങ്ങളുടെ ഫോണിലെ അപ്ലിക്കേഷനുകൾക്ക് നിങ്ങളുടെ ഉപകരണത്തിന്റെ പേര് ദൃശ്യമാണ്. വൈഫൈ ഹോട്ട്‌സ്‌പോട്ട് സജ്ജീകരിക്കുമ്പോഴോ Bluetooth ഉപകരണങ്ങളുമായി കണക്‌റ്റ് ചെയ്യുമ്പോഴോ, ഇത് മറ്റ് ആളുകൾക്കും കാണാനായേക്കും." "ഉപകരണങ്ങൾ" + "ഡിഫോൾട്ട്" diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index 4a4c6d95817..a5d846485a4 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -4150,4 +4150,5 @@ "Сүлжээний мэдээлэл" "Таны төхөөрөмжийн нэр таны утасны аппуудад харагдана. Та Bluetooth төхөөрөмжүүдэд холбогдох эсвэл Wi-Fi сүлжээний цэгийг тохируулах үед энэ нь бусад хүмүүст харагдаж болзошгүй." "Төхөөрөмжүүд" + "Өгөгдмөл" diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index fa5d17b39bd..502fd10103a 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -4153,4 +4153,5 @@ "नेटवर्क तपशील" "तुमचे डिव्हाइस नाव तुमच्या फोनवरील अॅप्सना दृश्यमान आहे. तुम्ही ब्लूटूथ डिव्हाइसशी जोडता किंवा वाय-फाय हॉटस्पॉट सेट करता, तेव्हा हे इतर लोकांद्वारे देखील बघितले जाऊ शकते." "डिव्हाइस" + "डीफॉल्ट" diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index 8d1b2fdbec5..0f36fc9c214 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -4152,4 +4152,5 @@ "Butiran rangkaian" "Nama peranti anda kelihatan kepada apl pada telefon anda. Nama ini mungkin dapat dilihat oleh orang lain juga apabila anda menyambung ke peranti Bluetooth atau menyediakan tempat liputan Wi-Fi." "Peranti" + "Lalai" diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index cf1f4492ac8..94dd6a1d47c 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -4152,4 +4152,5 @@ "ကွန်ရက် အသေးစိတ်များ" "သင့်စက်ပစ္စည်းအမည်ကို သင့်ဖုန်းပေါ်ရှိ အက်ပ်များက မြင်ရပါသည်။ သင် \'ဘလူးတုသ်\' စက်ပစ္စည်းများသို့ ချိတ်ဆက်သည့်အခါ သို့မဟုတ် Wi-Fi ဟော့စပေါ့ ထုတ်လွှင့်သည့်အခါ အခြားသူများက မြင်နိုင်ပါသည်။" "စက်များ" + "မူရင်း" diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 29be3bfe900..136b23d2d13 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -4152,4 +4152,5 @@ "Nettverksdetaljer" "Enhetsnavnet ditt er synlig for apper på telefonen. Det kan også ses av andre personer når du kobler til Bluetooth-enheter eller konfigurerer en Wi-Fi-sone." "Enheter" + "Standard" diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index eea73afc8bc..0c21e541431 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -4152,4 +4152,5 @@ "नेटवर्कसम्बन्धी विवरणहरू" "तपाईंको फोनमा रहेका अनुप्रयोगहरूले तपाईंको यन्त्रको नाम देख्न सक्छन्। तपाईंले ब्लुटुथ यन्त्रहरूमा जडान गर्दा वा कुनै Wi-Fi हटस्पट सेटअप गर्दा अरू मान्छेहरू पनि यसलाई देख्न सक्छन्।" "यन्त्रहरू" + "पूर्वनिर्धारित" diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 0202d63ccac..824663e802b 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -4152,4 +4152,5 @@ "Netwerkgegevens" "De naam van je apparaat is zichtbaar voor apps op je telefoon. De apparaatnaam kan ook door andere mensen worden gezien wanneer je verbinding maakt met Bluetooth-apparaten of een wifi-hotspot instelt." "Apparaten" + "Standaard" diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml index bdba01cce41..a9ceba598cd 100644 --- a/res/values-or/strings.xml +++ b/res/values-or/strings.xml @@ -4154,4 +4154,5 @@ "ନେଟୱର୍କ୍‌ର ବିବରଣୀ" "ଆପଣଙ୍କ ଡିଭାଇସ୍‌ରେ ଥିବା ଆପ୍‌ଗୁଡ଼ିକୁ ଆପଣଙ୍କର ଡିଭାଇସ୍‍ ନାମ ଦେଖାଯାଉଛି। ବ୍ଲୁ-ଟୂଥ୍‍ ଡିଭାଇସ୍‍ ସହ ଯୋଡ଼ି ହେବାବେଳେ କିମ୍ୱା ଏକ ୱାଇ-ଫାଇ ହଟସ୍ପଟ୍ ସେଟ୍ କରିବା ସମୟରେ, ଏହା ଅନ୍ୟ ଲୋକମାନଙ୍କୁ ମଧ୍ୟ ଦେଖାଦେଇପାରେ।" "ଡିଭାଇସ୍‌" + "ପ୍ରାକ୍‌-ନିର୍ଦ୍ଧାରିତ" diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index a52de05e272..fada5842f03 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -4152,4 +4152,5 @@ "ਨੈੱਟਵਰਕ ਵੇਰਵੇ" "ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਨਾਮ ਤੁਹਾਡੇ ਫ਼ੋਨ \'ਤੇ ਐਪਾਂ ਨੂੰ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ। ਇਹ ਤੁਹਾਡੇ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸ ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਜਾਂ ਵਾਈ-ਫਾਈ ਹੌਟਸਪੌਟ ਸੈੱਟਅੱਪ ਕਰਨ \'ਤੇ ਹੋਰ ਲੋਕਾਂ ਵੱਲੋਂ ਵੀ ਦੇਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।" "ਡੀਵਾਈਸਾਂ" + "ਪੂਰਵ-ਨਿਰਧਾਰਤ" diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index 70a754c2cdd..86f0b9a6644 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -4290,4 +4290,5 @@ "Szczegóły sieci" "Nazwa urządzenia jest widoczna dla aplikacji na telefonie. Mogą ją też zobaczyć inne osoby, gdy łączysz się z urządzeniami przez Bluetooth lub konfigurujesz hotspot Wi-Fi." "Urządzenia" + "Wartość domyślna" diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index 593f5275120..1af0e5e289f 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -4152,4 +4152,5 @@ "Detalhes da rede" "O nome do seu dispositivo está visível para os apps no seu smartphone. Ele também pode ser visto por outras pessoas quando você se conecta a dispositivos Bluetooth ou configura um ponto de acesso Wi-Fi." "Dispositivos" + "Padrão" diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 44b4a04d6c8..65a8df89666 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -4152,4 +4152,5 @@ "Detalhes da rede" "O nome do seu dispositivo é visível para as aplicações do telemóvel. Também pode ser visto por outras pessoas quando se liga a dispositivos Bluetooth ou configura uma zona Wi-Fi." "Dispositivos" + "Predefinição" diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index 593f5275120..1af0e5e289f 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -4152,4 +4152,5 @@ "Detalhes da rede" "O nome do seu dispositivo está visível para os apps no seu smartphone. Ele também pode ser visto por outras pessoas quando você se conecta a dispositivos Bluetooth ou configura um ponto de acesso Wi-Fi." "Dispositivos" + "Padrão" diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index e77e1fa5b68..f2c0e74ea0f 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -4221,4 +4221,5 @@ "Detalii despre rețea" "Numele dispozitivului este vizibil aplicațiilor de pe telefon. Poate fi văzut și de alte persoane când vă conectați la dispozitivele Bluetooth sau configurați un hotspot Wi-Fi." "Dispozitive" + "Prestabilită" diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 5f5fc33e38d..c6096b0b81e 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -4290,4 +4290,5 @@ "Сведения о сети" "У приложений на телефоне есть доступ к названию устройства. Его могут видеть другие пользователи, когда вы подключаетесь к устройствам по Bluetooth или настраиваете точку доступа Wi-Fi." "Устройства" + "По умолчанию" diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml index a4a5eef456a..61441708ee4 100644 --- a/res/values-si/strings.xml +++ b/res/values-si/strings.xml @@ -4152,4 +4152,5 @@ "ජාල විස්තර" "ඔබගේ උපාංගයේ නම ඔබගේ දුරකථනයේ යෙදුම්වලට දෘශ්‍යමානය. ඔබ බ්ලූටූත්වලට සම්බන්ධ වූ විට හෝ Wi-Fi හොට්ස්පොට් එකක් පිහිට වූ විට වෙනත් පුද්ගලයන්ද එය දැකිය හැකිය." "උපාංග" + "පෙරනිමි" diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index e5c58e70cfb..29fc56340b0 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -4290,4 +4290,5 @@ "Podrobnosti siete" "Názov zariadenia je viditeľný pre aplikácie v telefóne. Môže sa zobrazovať aj ostatným používateľom po pripojení k zariadeniu Bluetooth alebo nastavení hotspotu Wi-Fi." "Zariadenia" + "Predvolený" diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index f89fa3c34e1..0982474b89f 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -4290,4 +4290,5 @@ "O omrežju" "Ime naprave je vidno aplikacijam v telefonu. Ko vzpostavite povezavo z napravami Bluetooth ali nastavite dostopno točko Wi-Fi, ga bodo morda videle tudi druge osebe." "Naprave" + "Privzeto" diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index faf55611e9a..35d48e7fc62 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -4152,4 +4152,5 @@ "Detajet e rrjetit" "Emri i pajisjes sate është i dukshëm për aplikacionet në telefonin tënd. Ai mund të shikohet po ashtu nga persona të tjerë kur lidhesh me pajisje me Bluetooth ose kur konfiguron një zonë të qasjes për internet me Wi-Fi." "Pajisjet" + "I parazgjedhur" diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index 2a5acacd1aa..d763e3b351b 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -4221,4 +4221,5 @@ "Детаљи о мрежи" "Име уређаја виде апликације на телефону. Могу да га виде и други људи кад се повежете са Bluetooth уређајима или подесите Wi-Fi хотспот." "Уређаји" + "Подразумевана" diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 151a56c821e..93305e43e6b 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -4152,4 +4152,5 @@ "Nätverksinformation" "Enhetens namn är synligt för appar i mobilen. Det kan också vara synligt för andra personer när du ansluter till Bluetooth-enheter eller om du skapar en Wi-Fi-surfzon." "Enheter" + "Standard" diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index a97ef307404..b392576b639 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -4152,4 +4152,5 @@ "Maelezo ya mtandao" "Jina la kifaa chako litaonekana kwenye programu zilizo katika simu yako. Pia linaweza kuonekana kwa watu wengine wakati unaunganisha vifaa vya Bluetooth au kuweka mtandao hewa wa Wi-Fi." "Vifaa" + "Chaguomsingi" diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index 8437eb963d2..9b6f81a8719 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -4152,4 +4152,5 @@ "நெட்வொர்க் விவரங்கள்" "உங்களது மொபைலில் உள்ள ஆப்ஸிற்கு, உங்கள் சாதனத்தின் பெயர் தெரியும். புளூடூத் சாதனங்களுடன் இணைக்கும்போது அல்லது வைஃபை ஹாட்ஸ்பாட்டை அமைக்கும்போது, அப்பெயர் பிறருக்குக் காட்டப்படலாம்." "சாதனங்கள்" + "இயல்பு" diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 03b771dc171..97f470b9918 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -4153,4 +4153,5 @@ "నెట్‌వర్క్ వివరాలు" "మీ ఫోన్‌లోని యాప్‌లకు మీ పరికరం పేరు కనిపిస్తుంది. మీరు బ్లూటూత్ పరికరాలకు కనెక్ట్ చేసినప్పుడు లేదా Wi-Fi హాట్‌స్పాట్‌ని సెటప్ చేసినప్పుడు ఇతర వ్యక్తులకు కూడా ఇది కనిపించవచ్చు." "పరికరాలు" + "డిఫాల్ట్" diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 651f1026a93..f396320c0fb 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -4152,4 +4152,5 @@ "รายละเอียดเครือข่าย" "แอปในโทรศัพท์จะเห็นชื่อของอุปกรณ์ และคนอื่นก็อาจเห็นเช่นกันหากคุณเชื่อมต่อกับอุปกรณ์บลูทูธหรือตั้งค่าฮอตสปอต Wi-Fi" "อุปกรณ์" + "ค่าเริ่มต้น" diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index 202a9defbf0..fa0bb84f90a 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -4152,4 +4152,5 @@ "Mga detalye ng network" "Nakikita ang pangalan ng iyong device sa mga app sa iyong telepono. Maaari rin itong makita ng ibang tao kapag kumonekta ka sa mga Bluetooth device o nag-set up ka ng Wi-Fi hotspot." "Mga Device" + "Default" diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 6f6c7821fe1..058074f0319 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -4152,4 +4152,5 @@ "Ağ ayrıntıları" "Telefonunuzdaki uygulamalar cihazınızın adını görür. Bluetooth cihazlarına bağlandığınızda veya bir kablosuz hotspot ayarladığınızda başka kişiler de bu adı görebilir." "Cihazlar" + "Varsayılan" diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 887bc81041d..234434e1e36 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -4290,4 +4290,5 @@ "Дані мережі" "Додатки на телефоні бачать назву пристрою. Її також можуть бачити інші люди, коли ви під’єднуєтеся до пристроїв Bluetooth або налаштовуєте точку доступу Wi-Fi." "Пристрої" + "За умовчанням" diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml index 9840bd0aab5..15b06c54014 100644 --- a/res/values-ur/strings.xml +++ b/res/values-ur/strings.xml @@ -4150,4 +4150,5 @@ "نیٹ ورک کی تفصیلات" "‏آپ کے آلہ کا نام آپ کے فون پر موجود ایپس میں مرئی ہوتا ہے۔ جب آپ بلوٹوتھ آلات سے منسلک ہوتے ہیں یا Wi-Fi ہاٹ اسپاٹ سیٹ اپ کرتے ہیں تو دوسرے لوگ بھی اسے دیکھ سکتے ہیں۔" "آلات" + "ڈیفالٹ" diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml index 2a6608f3253..c9e483ee9a6 100644 --- a/res/values-uz/strings.xml +++ b/res/values-uz/strings.xml @@ -4168,4 +4168,5 @@ "Tarmoq tafsilotlari" "Telefoningizdagi barcha ilovalarga qurilma nomi ko‘rinadi. Qurilmalarga Bluetooth orqali ulanganingizda yoki Wi-Fi hotspot sozlaganingizda boshqa foydalanuvchilarni ularni ko‘rishi mumkin." "Qurilmalar" + "Standart" diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 4463c282bac..712ec36eb84 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -4152,4 +4152,5 @@ "Thông tin chi tiết về mạng" "Tên thiết bị của bạn sẽ hiển thị với các ứng dụng trên điện thoại. Những người khác cũng có thể thấy tên thiết bị này khi bạn kết nối với thiết bị Bluetooth hoặc thiết lập điểm phát sóng Wi-Fi." "Thiết bị" + "Mặc định" diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 8bf6eeeb34c..f6259406420 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -4152,4 +4152,5 @@ "网络详情" "您的设备名称会显示在手机上的应用中。此外,当您连接到蓝牙设备或设置 WLAN 热点时,其他人可能也会看到您的设备名称。" "设备" + "默认" diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index f8621fd1133..219c30179ad 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -4155,4 +4155,5 @@ "網絡詳細資料" "您的裝置名稱會在手機的應用程式上顯示。當您連接藍牙裝置或設定 Wi-Fi 熱點時,其他人亦可能會看到您的裝置名稱。" "裝置" + "預設" diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 55c9fb3ba72..6ee29a6cb47 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -4156,4 +4156,5 @@ "網路詳細資料" "你的裝置名稱會顯示在手機的應用程式上。此外,當你連上藍牙裝置或設定 Wi-Fi 無線基地台時,其他人可能也會看到你的裝置名稱。" "裝置" + "預設" diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index cf7b7667c18..607cbc10e9f 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -4153,4 +4153,5 @@ "Imininingwane yenethiwekhi" "Igama ledivayisi yakho liyabonakala kuzinhlelo zokusebenza efonini yakho. Futhi lingabonwa ngabanye abantu uma uxhuma kumadivayisi e-Bluetooth noma usetha i-Wi-Fi hotspot." "Amadivayisi" + "Okuzenzakalelayo"