Merge "[MEP] psim's logical slot index is 0" into tm-dev
diff --git a/res/drawable/screen_resolution_1080p.xml b/res/drawable/screen_resolution_1080p.xml
new file mode 100644
index 0000000..a9d89ee
--- /dev/null
+++ b/res/drawable/screen_resolution_1080p.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2022 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.
+ -->
+
+<shape>
+</shape>
\ No newline at end of file
diff --git a/res/drawable/screen_resolution_1440p.xml b/res/drawable/screen_resolution_1440p.xml
new file mode 100644
index 0000000..a9d89ee
--- /dev/null
+++ b/res/drawable/screen_resolution_1440p.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2022 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.
+ -->
+
+<shape>
+</shape>
\ No newline at end of file
diff --git a/res/values/config.xml b/res/values/config.xml
index 216d9e0..8933305 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -580,6 +580,18 @@
-->
</string-array>
+ <!-- The option list for switch screen resolution -->
+ <string-array name="config_screen_resolution_options_strings" translatable="false">
+ <item>@string/screen_resolution_option_high</item>
+ <item>@string/screen_resolution_option_highest</item>
+ </string-array>
+
+ <!-- The option summary list for screen resolution -->
+ <string-array name="config_screen_resolution_summaries_strings" translatable="false">
+ <item>@string/screen_resolution_summary_high</item>
+ <item>@string/screen_resolution_summary_highest</item>
+ </string-array>
+
<!-- Whether to aggregate for network selection list-->
<bool name="config_network_selection_list_aggregation_enabled">false</bool>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 87272b5..d16a63e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2908,6 +2908,18 @@
<string name="auto_rotate_option_face_based">On - Face-based</string>
<!-- SmartAutoRotatePreferenceFragment settings screen, face-based rotation switch label [CHAR LIMIT=30] -->
<string name="auto_rotate_switch_face_based">Enable Face Detection</string>
+
+ <!-- Display settings screen, screen resolution settings title [CHAR LIMIT=30] -->
+ <string name="screen_resolution_title">Screen resolution</string>
+ <!-- Display settings screen, screen resolution option for "FHD+" [CHAR LIMIT=45] -->
+ <string name="screen_resolution_option_high">High resolution</string>
+ <!-- Display settings screen, screen resolution option for "QHD+" [CHAR LIMIT=45] -->
+ <string name="screen_resolution_option_highest">Highest resolution</string>
+ <!-- Display settings screen, "FHD+" screen resolution summary [CHAR LIMIT=NONE] -->
+ <string name="screen_resolution_summary_high">1080p FHD+</string>
+ <!-- Display settings screen, "QHD+" screen resolution summary [CHAR LIMIT=NONE] -->
+ <string name="screen_resolution_summary_highest">1440p QHD+</string>
+
<!-- Display settings screen, Color mode settings title [CHAR LIMIT=30] -->
<string name="color_mode_title">Colors</string>
<!-- Display settings screen, Color mode option for "natural(sRGB) color" [CHAR LIMIT=45] -->
@@ -5200,9 +5212,9 @@
<!-- Title for accessibility shortcut preference for magnification. [CHAR LIMIT=60] -->
<string name="accessibility_screen_magnification_shortcut_title">Magnification shortcut</string>
<!-- Title for accessibility follow typing preference for magnification. [CHAR LIMIT=35] -->
- <string name="accessibility_screen_magnification_follow_typing_title">Follow typing</string>
+ <string name="accessibility_screen_magnification_follow_typing_title">Magnify typing</string>
<!-- Summary for accessibility follow typing preference for magnification. [CHAR LIMIT=none] -->
- <string name="accessibility_screen_magnification_follow_typing_summary">Magnification area automatically follows the text as you type</string>
+ <string name="accessibility_screen_magnification_follow_typing_summary">Magnifier follows text as you type</string>
<!-- Title for screen magnification footer. [CHAR LIMIT=60] -->
<string name="accessibility_screen_magnification_about_title">About magnification</string>
<!-- Screen magnification footer link content description [CHAR LIMIT=NONE] -->
@@ -8269,6 +8281,8 @@
<string name="keywords_default_apps">apps, default</string>
<string name="keywords_ignore_optimizations">ignore optimizations, doze, app standby</string>
<string name="keywords_color_mode">vibrant, RGB, sRGB, color, natural, standard</string>
+ <!-- Search keyword for "screen resolution" settings [CHAR_LIMIT=NONE]-->
+ <string name="keywords_screen_resolution">FHD, QHD, resolution, 1080p, 1440p</string>
<string name="keywords_color_temperature">color, temperature, D65, D73, white, yellow, blue, warm, cool</string>
<string name="keywords_lockscreen">slide to unlock, password, pattern, PIN</string>
<!-- Search keyword for App pinning Settings [CHAR LIMIT=NONE] -->
@@ -11829,8 +11843,14 @@
<string name="one_handed_mode_swipe_down_category">Swipe down to</string>
<!-- Category title for one handed use the shortcut [CHAR_LIMIT=60] -->
<string name="one_handed_mode_use_shortcut_category">Use the shortcut to</string>
+ <!-- One-handed mode intro Text [CHAR_LIMIT=NONE] -->
+ <string name="one_handed_mode_intro_text">Pull down the top half of your screen so it\u2019s easier to reach with one hand</string>
<!-- One-handed mode Intro Text [CHAR_LIMIT=NONE] -->
- <string name="one_handed_mode_intro_text">To use one handed mode, swipe down from the bottom edge of the screen. To use this feature, make sure gesture navigation is turned on in system navigation settings.</string>
+ <string name="one_handed_mode_footer_text">
+ <b>How to use one-handed mode</b>\n
+ • Make sure gesture navigation is selected in system navigation settings\n
+ • Swipe down near the bottom edge of the screen
+ </string>
<!-- One-handed mode pull down screen into reach action title [CHAR_LIMIT=60] -->
<string name="one_handed_action_pull_down_screen_title">Pull screen into reach</string>
<!-- One-handed mode pull down screen into reach action title [CHAR_LIMIT=NONE] -->
@@ -13360,7 +13380,7 @@
<!-- Device controls toggle name [CHAR LIMIT=60] -->
<string name="lockscreen_privacy_controls_setting_toggle">Show device controls</string>
<!-- Device controls summary [CHAR LIMIT=NONE] -->
- <string name="lockscreen_privacy_controls_summary">Access controls when locked</string>
+ <string name="lockscreen_privacy_controls_summary">Show controls for external devices from the lock screen</string>
<!-- Trivial Device controls toggle name [CHAR LIMIT=60] -->
<string name="lockscreen_trivial_controls_setting_toggle">Control from locked device</string>
<!-- Trivial Device controls summary [CHAR LIMIT=NONE] -->
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index ba52a30..03d073b 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -117,6 +117,13 @@
settings:keywords="@string/keywords_auto_rotate"
settings:controller="com.android.settings.display.DeviceStateAutoRotateOverviewController"/>
+ <Preference
+ android:key="screen_resolution"
+ android:title="@string/screen_resolution_title"
+ android:fragment="com.android.settings.display.ScreenResolutionFragment"
+ settings:keywords="@string/keywords_screen_resolution"
+ settings:controller="com.android.settings.display.ScreenResolutionController"/>
+
<SwitchPreference
android:key="display_white_balance"
android:title="@string/display_white_balance_title"
diff --git a/res/xml/one_handed_settings.xml b/res/xml/one_handed_settings.xml
index 523cf4d..7406993 100644
--- a/res/xml/one_handed_settings.xml
+++ b/res/xml/one_handed_settings.xml
@@ -22,6 +22,10 @@
android:persistent="false"
android:title="@string/one_handed_title">
+ <com.android.settingslib.widget.TopIntroPreference
+ android:key="gesture_one_handed_mode_intro"
+ android:title="@string/one_handed_mode_intro_text"/>
+
<com.android.settingslib.widget.IllustrationPreference
android:key="one_handed_header"
settings:searchable="false"
@@ -33,10 +37,6 @@
settings:keywords="@string/keywords_one_handed"
settings:controller="com.android.settings.gestures.OneHandedMainSwitchPreferenceController"/>
- <com.android.settingslib.widget.TopIntroPreference
- android:key="gesture_one_handed_mode_intro_text"
- android:title="@string/one_handed_mode_intro_text"/>
-
<PreferenceCategory
android:key="gesture_one_handed_mode_swipe_down"
android:title="@string/one_handed_mode_swipe_down_category"
@@ -46,13 +46,18 @@
android:key="gesture_one_handed_action_pull_screen_down"
android:title="@string/one_handed_action_pull_down_screen_title"
android:summary="@string/one_handed_action_pull_down_screen_summary"
- settings:controller="com.android.settings.gestures.OneHandedActionPullDownPrefController"/>
+ settings:controller="com.android.settings.gesture_one_handed_mode_footer_textgestures.OneHandedActionPullDownPrefController"/>
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="gesture_one_handed_action_show_notification"
android:title="@string/one_handed_action_show_notification_title"
android:summary="@string/one_handed_action_show_notification_summary"
settings:controller="com.android.settings.gestures.OneHandedActionShowNotificationPrefController"/>
-
</PreferenceCategory>
+
+ <com.android.settingslib.widget.FooterPreference
+ android:key="one_handed_mode_footer"
+ android:title="@string/one_handed_mode_footer_text"
+ android:selectable="false"
+ settings:searchable="false"/>
</PreferenceScreen>
diff --git a/res/xml/screen_resolution_settings.xml b/res/xml/screen_resolution_settings.xml
new file mode 100644
index 0000000..a305488
--- /dev/null
+++ b/res/xml/screen_resolution_settings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2022 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/screen_resolution_title"
+ android:key="screen_resolution" />
diff --git a/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizard.java
index c679330..0ff960f 100644
--- a/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizard.java
@@ -42,7 +42,7 @@
final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
final String title = getContext().getString(
R.string.accessibility_text_reading_options_title);
- final Drawable icon = getContext().getDrawable(R.drawable.ic_font_download);
+ final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
icon.setTintList(Utils.getColorAttr(getContext(), android.R.attr.colorPrimary));
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
/* description= */ null, icon);
diff --git a/src/com/android/settings/biometrics/face/FaceUpdater.java b/src/com/android/settings/biometrics/face/FaceUpdater.java
index bb77cae..3a1f77c 100644
--- a/src/com/android/settings/biometrics/face/FaceUpdater.java
+++ b/src/com/android/settings/biometrics/face/FaceUpdater.java
@@ -104,7 +104,7 @@
public void onEnrollmentProgress(int remaining) {
mCallback.onEnrollmentProgress(remaining);
if (remaining == 0) {
- BiometricsSafetySource.sendSafetyData(mContext); // biometrics data changed
+ BiometricsSafetySource.onBiometricsChanged(mContext); // biometrics data changed
}
}
}
@@ -131,7 +131,7 @@
@Override
public void onRemovalSucceeded(@Nullable Face fp, int remaining) {
mCallback.onRemovalSucceeded(fp, remaining);
- BiometricsSafetySource.sendSafetyData(mContext); // biometrics data changed
+ BiometricsSafetySource.onBiometricsChanged(mContext); // biometrics data changed
}
}
}
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintUpdater.java b/src/com/android/settings/biometrics/fingerprint/FingerprintUpdater.java
index 75d8f7b..66ed085 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintUpdater.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintUpdater.java
@@ -88,7 +88,7 @@
public void onEnrollmentProgress(int remaining) {
mCallback.onEnrollmentProgress(remaining);
if (remaining == 0) {
- BiometricsSafetySource.sendSafetyData(mContext); // biometrics data changed
+ BiometricsSafetySource.onBiometricsChanged(mContext); // biometrics data changed
}
}
}
@@ -115,7 +115,7 @@
@Override
public void onRemovalSucceeded(@Nullable Fingerprint fp, int remaining) {
mCallback.onRemovalSucceeded(fp, remaining);
- BiometricsSafetySource.sendSafetyData(mContext); // biometrics data changed
+ BiometricsSafetySource.onBiometricsChanged(mContext); // biometrics data changed
}
}
}
diff --git a/src/com/android/settings/display/ScreenResolutionController.java b/src/com/android/settings/display/ScreenResolutionController.java
new file mode 100644
index 0000000..dca1275
--- /dev/null
+++ b/src/com/android/settings/display/ScreenResolutionController.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2022 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.display;
+
+import android.content.Context;
+import android.hardware.display.DisplayManager;
+import android.view.Display;
+
+import androidx.annotation.VisibleForTesting;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+/** Controller that switch the screen resolution. */
+public class ScreenResolutionController extends BasePreferenceController {
+
+ static final int FHD_WIDTH = 1080;
+ static final int QHD_WIDTH = 1440;
+
+ private Display mDisplay;
+
+ public ScreenResolutionController(Context context, String key) {
+ super(context, key);
+
+ mDisplay =
+ mContext.getSystemService(DisplayManager.class).getDisplay(Display.DEFAULT_DISPLAY);
+ }
+
+ /** Check if the width is supported by the display. */
+ private boolean isSupportedMode(int width) {
+ for (Display.Mode mode : getSupportedModes()) {
+ if (mode.getPhysicalWidth() == width) return true;
+ }
+ return false;
+ }
+
+ /** Return true if the device contains two (or more) resolutions. */
+ protected boolean checkSupportedResolutions() {
+ return isSupportedMode(FHD_WIDTH) && isSupportedMode(QHD_WIDTH);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return (checkSupportedResolutions()) ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+ }
+
+ @Override
+ public CharSequence getSummary() {
+ String summary = null;
+ switch (getDisplayWidth()) {
+ case FHD_WIDTH:
+ summary = mContext.getString(R.string.screen_resolution_summary_high);
+ break;
+ case QHD_WIDTH:
+ summary = mContext.getString(R.string.screen_resolution_summary_highest);
+ break;
+ default:
+ summary = mContext.getString(R.string.screen_resolution_title);
+ }
+
+ return summary;
+ }
+
+ @VisibleForTesting
+ public int getDisplayWidth() {
+ return mDisplay.getMode().getPhysicalWidth();
+ }
+
+ @VisibleForTesting
+ public Display.Mode[] getSupportedModes() {
+ return mDisplay.getSupportedModes();
+ }
+}
diff --git a/src/com/android/settings/display/ScreenResolutionFragment.java b/src/com/android/settings/display/ScreenResolutionFragment.java
new file mode 100644
index 0000000..3195772
--- /dev/null
+++ b/src/com/android/settings/display/ScreenResolutionFragment.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2022 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.display;
+
+import static com.android.settings.display.ScreenResolutionController.FHD_WIDTH;
+import static com.android.settings.display.ScreenResolutionController.QHD_WIDTH;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Point;
+import android.graphics.drawable.Drawable;
+import android.hardware.display.DisplayManager;
+import android.text.TextUtils;
+import android.view.Display;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.widget.RadioButtonPickerFragment;
+import com.android.settingslib.search.SearchIndexable;
+import com.android.settingslib.widget.CandidateInfo;
+import com.android.settingslib.widget.IllustrationPreference;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/** Preference fragment used for switch screen resolution */
+@SearchIndexable
+public class ScreenResolutionFragment extends RadioButtonPickerFragment {
+
+ private static final String TAG = "ScreenResolution";
+
+ private Resources mResources;
+ private static final int FHD_INDEX = 0;
+ private static final int QHD_INDEX = 1;
+ private Display mDefaultDisplay;
+ private String[] mScreenResolutionOptions;
+ private Set<Point> mResolutions;
+
+ private IllustrationPreference mImagePreference;
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+
+ mDefaultDisplay =
+ context.getSystemService(DisplayManager.class).getDisplay(Display.DEFAULT_DISPLAY);
+ mResources = context.getResources();
+ mScreenResolutionOptions =
+ mResources.getStringArray(R.array.config_screen_resolution_options_strings);
+ mResolutions = getAllSupportedResolution();
+ mImagePreference = new IllustrationPreference(context);
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.screen_resolution_settings;
+ }
+
+ @Override
+ protected void addStaticPreferences(PreferenceScreen screen) {
+ updateIllustrationImage(mImagePreference);
+ screen.addPreference(mImagePreference);
+ }
+
+ @Override
+ protected List<? extends CandidateInfo> getCandidates() {
+ final List<ScreenResolutionCandidateInfo> candidates = new ArrayList<>();
+
+ for (int i = 0; i < mScreenResolutionOptions.length; i++) {
+ candidates.add(
+ new ScreenResolutionCandidateInfo(
+ mScreenResolutionOptions[i],
+ mScreenResolutionOptions[i],
+ true /* enabled */));
+ }
+
+ return candidates;
+ }
+
+ /** Get all supported resolutions on the device. */
+ private Set<Point> getAllSupportedResolution() {
+ Set<Point> resolutions = new HashSet<>();
+ for (Display.Mode mode : mDefaultDisplay.getSupportedModes()) {
+ resolutions.add(new Point(mode.getPhysicalWidth(), mode.getPhysicalHeight()));
+ }
+
+ return resolutions;
+ }
+
+ /** Get prefer display mode. */
+ private Display.Mode getPreferMode(int width) {
+ for (Point resolution : mResolutions) {
+ if (resolution.x == width) {
+ return new Display.Mode(
+ resolution.x, resolution.y, getDisplayMode().getRefreshRate());
+ }
+ }
+
+ return getDisplayMode();
+ }
+
+ /** Get current display mode. */
+ @VisibleForTesting
+ public Display.Mode getDisplayMode() {
+ return mDefaultDisplay.getMode();
+ }
+
+ /** Using display manager to set the display mode. */
+ @VisibleForTesting
+ public void setDisplayMode(int width) {
+ mDefaultDisplay.setUserPreferredDisplayMode(getPreferMode(width));
+ }
+
+ /** Get the key corresponding to the resolution. */
+ @VisibleForTesting
+ String getKeyForResolution(int width) {
+ return width == FHD_WIDTH
+ ? mScreenResolutionOptions[FHD_INDEX]
+ : width == QHD_WIDTH ? mScreenResolutionOptions[QHD_INDEX] : null;
+ }
+
+ @Override
+ protected String getDefaultKey() {
+ int physicalWidth = getDisplayMode().getPhysicalWidth();
+
+ return getKeyForResolution(physicalWidth);
+ }
+
+ @Override
+ protected boolean setDefaultKey(String key) {
+ if (mScreenResolutionOptions[FHD_INDEX].equals(key)) {
+ setDisplayMode(FHD_WIDTH);
+
+ } else if (mScreenResolutionOptions[QHD_INDEX].equals(key)) {
+ setDisplayMode(QHD_WIDTH);
+ }
+
+ updateIllustrationImage(mImagePreference);
+ return true;
+ }
+
+ /** Update the resolution image according display mode. */
+ private void updateIllustrationImage(IllustrationPreference preference) {
+ String key = getDefaultKey();
+
+ if (TextUtils.equals(mScreenResolutionOptions[FHD_INDEX], key)) {
+ preference.setLottieAnimationResId(R.drawable.screen_resolution_1080p);
+ } else if (TextUtils.equals(mScreenResolutionOptions[QHD_INDEX], key)) {
+ preference.setLottieAnimationResId(R.drawable.screen_resolution_1440p);
+ }
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.SCREEN_RESOLUTION;
+ }
+
+ static class ScreenResolutionCandidateInfo extends CandidateInfo {
+ private final CharSequence mLabel;
+ private final String mKey;
+
+ ScreenResolutionCandidateInfo(CharSequence label, String key, boolean enabled) {
+ super(enabled);
+ mLabel = label;
+ mKey = key;
+ }
+
+ @Override
+ public CharSequence loadLabel() {
+ return mLabel;
+ }
+
+ @Override
+ public Drawable loadIcon() {
+ return null;
+ }
+
+ @Override
+ public String getKey() {
+ return mKey;
+ }
+ }
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.screen_resolution_settings) {
+
+ boolean mIsFHDSupport = false;
+ boolean mIsQHDSupport = false;
+
+ @Override
+ protected boolean isPageSearchEnabled(Context context) {
+ ScreenResolutionController mController =
+ new ScreenResolutionController(context, "fragment");
+ return mController.checkSupportedResolutions();
+ }
+ };
+}
diff --git a/src/com/android/settings/flashlight/FlashlightHandleActivity.java b/src/com/android/settings/flashlight/FlashlightHandleActivity.java
index 5894965..0847d49 100644
--- a/src/com/android/settings/flashlight/FlashlightHandleActivity.java
+++ b/src/com/android/settings/flashlight/FlashlightHandleActivity.java
@@ -21,12 +21,13 @@
import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
+import android.util.Log;
import com.android.settings.R;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.search.Indexable;
-import com.android.settingslib.search.SearchIndexableRaw;
import com.android.settingslib.search.SearchIndexable;
+import com.android.settingslib.search.SearchIndexableRaw;
import java.util.ArrayList;
import java.util.List;
@@ -39,6 +40,9 @@
public static final String EXTRA_FALLBACK_TO_HOMEPAGE = "fallback_to_homepage";
+ private static final String TAG = "FlashlightActivity";
+ private static final String DATA_KEY = "flashlight";
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -69,10 +73,20 @@
data.intentTargetPackage = context.getPackageName();
data.intentTargetClass = FlashlightHandleActivity.class.getName();
data.intentAction = Intent.ACTION_MAIN;
- data.key = "flashlight";
+ data.key = DATA_KEY;
result.add(data);
return result;
}
+
+ @Override
+ public List<String> getNonIndexableKeys(Context context) {
+ List<String> keys = super.getNonIndexableKeys(context);
+ if (!FlashlightSlice.isFlashlightAvailable(context)) {
+ Log.i(TAG, "Flashlight is unavailable");
+ keys.add(DATA_KEY);
+ }
+ return keys;
+ }
};
}
diff --git a/src/com/android/settings/flashlight/FlashlightSlice.java b/src/com/android/settings/flashlight/FlashlightSlice.java
index eaf059a..5feaf4f 100644
--- a/src/com/android/settings/flashlight/FlashlightSlice.java
+++ b/src/com/android/settings/flashlight/FlashlightSlice.java
@@ -39,7 +39,6 @@
import androidx.slice.builders.ListBuilder.RowBuilder;
import androidx.slice.builders.SliceAction;
-import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.slices.CustomSliceRegistry;
@@ -138,7 +137,6 @@
return null;
}
- @VisibleForTesting
static boolean isFlashlightAvailable(Context context) {
int defaultAvailability = 0;
try {
diff --git a/src/com/android/settings/safetycenter/BiometricsSafetySource.java b/src/com/android/settings/safetycenter/BiometricsSafetySource.java
index 6a93bda..59408c7 100644
--- a/src/com/android/settings/safetycenter/BiometricsSafetySource.java
+++ b/src/com/android/settings/safetycenter/BiometricsSafetySource.java
@@ -22,6 +22,7 @@
import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
+import android.safetycenter.SafetyEvent;
import android.safetycenter.SafetySourceData;
import android.safetycenter.SafetySourceStatus;
@@ -38,11 +39,10 @@
public static final String SAFETY_SOURCE_ID = "Biometrics";
- private BiometricsSafetySource() {
- }
+ private BiometricsSafetySource() {}
- /** Sends biometric safety data to Safety Center. */
- public static void sendSafetyData(Context context) {
+ /** Sets biometric safety data for Safety Center. */
+ public static void setSafetySourceData(Context context, SafetyEvent safetyEvent) {
if (!SafetyCenterManagerWrapper.get().isEnabled(context)) {
return;
}
@@ -54,13 +54,14 @@
if (combinedBiometricStatusUtils.isAvailable()) {
final RestrictedLockUtils.EnforcedAdmin disablingAdmin =
combinedBiometricStatusUtils.getDisablingAdmin();
- sendBiometricSafetySourceData(context,
+ setBiometricSafetySourceData(context,
context.getString(R.string.security_settings_biometric_preference_title),
combinedBiometricStatusUtils.getSummary(),
biometricNavigationUtils.getBiometricSettingsIntent(context,
combinedBiometricStatusUtils.getSettingsClassName(), disablingAdmin,
Bundle.EMPTY),
- disablingAdmin == null /* enabled */);
+ disablingAdmin == null /* enabled */,
+ safetyEvent);
return;
}
@@ -70,13 +71,15 @@
if (faceStatusUtils.isAvailable()) {
final RestrictedLockUtils.EnforcedAdmin disablingAdmin =
faceStatusUtils.getDisablingAdmin();
- sendBiometricSafetySourceData(context,
+ setBiometricSafetySourceData(context,
context.getString(R.string.security_settings_face_preference_title),
faceStatusUtils.getSummary(),
biometricNavigationUtils.getBiometricSettingsIntent(context,
faceStatusUtils.getSettingsClassName(), disablingAdmin,
Bundle.EMPTY),
- disablingAdmin == null /* enabled */);
+ disablingAdmin == null /* enabled */,
+ safetyEvent);
+
return;
}
@@ -87,27 +90,37 @@
if (fingerprintStatusUtils.isAvailable()) {
final RestrictedLockUtils.EnforcedAdmin disablingAdmin =
fingerprintStatusUtils.getDisablingAdmin();
- sendBiometricSafetySourceData(context,
+ setBiometricSafetySourceData(context,
context.getString(R.string.security_settings_fingerprint_preference_title),
fingerprintStatusUtils.getSummary(),
biometricNavigationUtils.getBiometricSettingsIntent(context,
fingerprintStatusUtils.getSettingsClassName(), disablingAdmin,
Bundle.EMPTY),
- disablingAdmin == null /* enabled */);
+ disablingAdmin == null /* enabled */,
+ safetyEvent);
}
}
- private static void sendBiometricSafetySourceData(Context context, String title, String summary,
- Intent clickIntent, boolean enabled) {
+ /** Notifies Safety Center of a change in biometrics settings. */
+ public static void onBiometricsChanged(Context context) {
+ setSafetySourceData(
+ context,
+ new SafetyEvent.Builder(SafetyEvent.SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build()
+ );
+ }
+
+ private static void setBiometricSafetySourceData(Context context, String title, String summary,
+ Intent clickIntent, boolean enabled, SafetyEvent safetyEvent) {
final PendingIntent pendingIntent = createPendingIntent(context, clickIntent);
final SafetySourceStatus status = new SafetySourceStatus.Builder(title, summary,
SafetySourceStatus.STATUS_LEVEL_NONE, pendingIntent)
.setEnabled(enabled).build();
- final SafetySourceData safetySourceData = new SafetySourceData.Builder(SAFETY_SOURCE_ID)
- .setStatus(status).build();
+ final SafetySourceData safetySourceData =
+ new SafetySourceData.Builder().setStatus(status).build();
- SafetyCenterManagerWrapper.get().sendSafetyCenterUpdate(context, safetySourceData);
+ SafetyCenterManagerWrapper.get().setSafetySourceData(
+ context, SAFETY_SOURCE_ID, safetySourceData, safetyEvent);
}
private static PendingIntent createPendingIntent(Context context, Intent intent) {
diff --git a/src/com/android/settings/safetycenter/LockScreenSafetySource.java b/src/com/android/settings/safetycenter/LockScreenSafetySource.java
index d010821..ad0bd3a 100644
--- a/src/com/android/settings/safetycenter/LockScreenSafetySource.java
+++ b/src/com/android/settings/safetycenter/LockScreenSafetySource.java
@@ -16,11 +16,14 @@
package com.android.settings.safetycenter;
+import static android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED;
+
import android.app.PendingIntent;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.os.UserHandle;
+import android.safetycenter.SafetyEvent;
import android.safetycenter.SafetySourceData;
import android.safetycenter.SafetySourceIssue;
import android.safetycenter.SafetySourceStatus;
@@ -42,9 +45,10 @@
private LockScreenSafetySource() {
}
- /** Sends lock screen safety data to Safety Center. */
- public static void sendSafetyData(Context context,
- ScreenLockPreferenceDetailsUtils screenLockPreferenceDetailsUtils) {
+ /** Sets lock screen safety data for Safety Center. */
+ public static void setSafetySourceData(Context context,
+ ScreenLockPreferenceDetailsUtils screenLockPreferenceDetailsUtils,
+ SafetyEvent safetyEvent) {
if (!SafetyCenterManagerWrapper.get().isEnabled(context)) {
return;
}
@@ -71,21 +75,27 @@
.setEnabled(
!screenLockPreferenceDetailsUtils.isPasswordQualityManaged(userId, admin))
.setIconAction(gearMenuIconAction).build();
- final SafetySourceData.Builder safetySourceDataBuilder = new SafetySourceData.Builder(
- SAFETY_SOURCE_ID).setStatus(status);
+ final SafetySourceData.Builder safetySourceDataBuilder =
+ new SafetySourceData.Builder().setStatus(status);
if (!screenLockPreferenceDetailsUtils.isLockPatternSecure()) {
safetySourceDataBuilder.addIssue(createNoScreenLockIssue(context, pendingIntent));
}
final SafetySourceData safetySourceData = safetySourceDataBuilder.build();
- SafetyCenterManagerWrapper.get().sendSafetyCenterUpdate(context, safetySourceData);
+ SafetyCenterManagerWrapper.get().setSafetySourceData(
+ context,
+ SAFETY_SOURCE_ID,
+ safetySourceData,
+ safetyEvent
+ );
}
/** Notifies Safety Center of a change in lock screen settings. */
public static void onLockScreenChange(Context context) {
- sendSafetyData(
+ setSafetySourceData(
context,
- new ScreenLockPreferenceDetailsUtils(context, SettingsEnums.SAFETY_CENTER));
+ new ScreenLockPreferenceDetailsUtils(context, SettingsEnums.SAFETY_CENTER),
+ new SafetyEvent.Builder(SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build());
}
private static IconAction createGearMenuIconAction(Context context,
diff --git a/src/com/android/settings/safetycenter/SafetyCenterManagerWrapper.java b/src/com/android/settings/safetycenter/SafetyCenterManagerWrapper.java
index e4a1d67..e720526 100644
--- a/src/com/android/settings/safetycenter/SafetyCenterManagerWrapper.java
+++ b/src/com/android/settings/safetycenter/SafetyCenterManagerWrapper.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.safetycenter.SafetyCenterManager;
+import android.safetycenter.SafetyEvent;
import android.safetycenter.SafetySourceData;
import android.util.Log;
@@ -26,7 +27,12 @@
/** A wrapper for the SafetyCenterManager system service. */
public class SafetyCenterManagerWrapper {
- private static final String TAG = "SafetyCenterManagerWrapper";
+ /**
+ * Tag for logging.
+ *
+ * <p>The tag is restricted to 23 characters (the maximum allowed for Android logging).
+ */
+ private static final String TAG = "SafetyCenterManagerWrap";
@VisibleForTesting
public static SafetyCenterManagerWrapper sInstance;
@@ -41,8 +47,10 @@
return sInstance;
}
- /** Sends updated safety source data to Safety Center. */
- public void sendSafetyCenterUpdate(Context context, SafetySourceData safetySourceData) {
+ /** Sets the latest safety source data for Safety Center. */
+ public void setSafetySourceData(Context context, String safetySourceId,
+ SafetySourceData safetySourceData,
+ SafetyEvent safetyEvent) {
SafetyCenterManager safetyCenterManager =
context.getSystemService(SafetyCenterManager.class);
@@ -52,7 +60,11 @@
}
try {
- safetyCenterManager.sendSafetyCenterUpdate(safetySourceData);
+ safetyCenterManager.setSafetySourceData(
+ safetySourceId,
+ safetySourceData,
+ safetyEvent
+ );
} catch (Exception e) {
Log.e(TAG, "Failed to send SafetySourceData", e);
return;
diff --git a/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiver.java b/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiver.java
index a0d18c7..38458d9 100644
--- a/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiver.java
+++ b/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiver.java
@@ -19,11 +19,14 @@
import static android.content.Intent.ACTION_BOOT_COMPLETED;
import static android.safetycenter.SafetyCenterManager.ACTION_REFRESH_SAFETY_SOURCES;
import static android.safetycenter.SafetyCenterManager.EXTRA_REFRESH_SAFETY_SOURCE_IDS;
+import static android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_DEVICE_REBOOTED;
+import static android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_REFRESH_REQUESTED;
import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.safetycenter.SafetyEvent;
import com.android.settings.security.ScreenLockPreferenceDetailsUtils;
@@ -34,6 +37,11 @@
/** Broadcast receiver for handling requests from Safety Center for fresh data. */
public class SafetySourceBroadcastReceiver extends BroadcastReceiver {
+ private static final SafetyEvent EVENT_REFRESH_REQUESTED =
+ new SafetyEvent.Builder(SAFETY_EVENT_TYPE_REFRESH_REQUESTED).build();
+ private static final SafetyEvent EVENT_DEVICE_REBOOTED =
+ new SafetyEvent.Builder(SAFETY_EVENT_TYPE_DEVICE_REBOOTED).build();
+
@Override
public void onReceive(Context context, Intent intent) {
if (!SafetyCenterManagerWrapper.get().isEnabled(context)) {
@@ -44,31 +52,37 @@
String[] sourceIdsExtra =
intent.getStringArrayExtra(EXTRA_REFRESH_SAFETY_SOURCE_IDS);
if (sourceIdsExtra != null && sourceIdsExtra.length > 0) {
- refreshSafetySources(context, ImmutableList.copyOf(sourceIdsExtra));
+ refreshSafetySources(
+ context,
+ ImmutableList.copyOf(sourceIdsExtra),
+ EVENT_REFRESH_REQUESTED);
}
return;
}
if (ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
- refreshAllSafetySources(context);
+ refreshAllSafetySources(context, EVENT_DEVICE_REBOOTED);
}
}
- private static void refreshSafetySources(Context context, List<String> sourceIds) {
+ private static void refreshSafetySources(Context context, List<String> sourceIds,
+ SafetyEvent safetyEvent) {
if (sourceIds.contains(LockScreenSafetySource.SAFETY_SOURCE_ID)) {
- LockScreenSafetySource.sendSafetyData(context,
- new ScreenLockPreferenceDetailsUtils(context, SettingsEnums.SAFETY_CENTER));
+ LockScreenSafetySource.setSafetySourceData(context,
+ new ScreenLockPreferenceDetailsUtils(context, SettingsEnums.SAFETY_CENTER),
+ safetyEvent);
}
if (sourceIds.contains(BiometricsSafetySource.SAFETY_SOURCE_ID)) {
- BiometricsSafetySource.sendSafetyData(context);
+ BiometricsSafetySource.setSafetySourceData(context, safetyEvent);
}
}
- private static void refreshAllSafetySources(Context context) {
- LockScreenSafetySource.sendSafetyData(context,
- new ScreenLockPreferenceDetailsUtils(context, SettingsEnums.SAFETY_CENTER));
- BiometricsSafetySource.sendSafetyData(context);
+ private static void refreshAllSafetySources(Context context, SafetyEvent safetyEvent) {
+ LockScreenSafetySource.setSafetySourceData(context,
+ new ScreenLockPreferenceDetailsUtils(context, SettingsEnums.SAFETY_CENTER),
+ safetyEvent);
+ BiometricsSafetySource.setSafetySourceData(context, safetyEvent);
}
}
diff --git a/src/com/android/settings/users/UserDetailsSettings.java b/src/com/android/settings/users/UserDetailsSettings.java
index c3657be..a3c8e69 100644
--- a/src/com/android/settings/users/UserDetailsSettings.java
+++ b/src/com/android/settings/users/UserDetailsSettings.java
@@ -256,7 +256,7 @@
mSwitchUserPref.setTitle(
context.getString(com.android.settingslib.R.string.user_switch_to_user,
- UserSettings.getUserName(context, mUserInfo)));
+ mUserInfo.name));
if (mUserCaps.mDisallowSwitchUser) {
mSwitchUserPref.setDisabledByAdmin(RestrictedLockUtilsInternal.getDeviceOwner(context));
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 9878b44..64a65a4 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -16,7 +16,6 @@
package com.android.settings.users;
-import android.annotation.NonNull;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Dialog;
@@ -562,11 +561,10 @@
extras.putInt(UserDetailsSettings.EXTRA_USER_ID, userInfo.id);
extras.putBoolean(AppRestrictionsFragment.EXTRA_NEW_USER, newUser);
- final Context context = getContext();
- SubSettingLauncher launcher = new SubSettingLauncher(context)
+ SubSettingLauncher launcher = new SubSettingLauncher(getContext())
.setDestination(UserDetailsSettings.class.getName())
.setArguments(extras)
- .setTitleText(getUserName(context, userInfo))
+ .setTitleText(userInfo.name)
.setSourceMetricsCategory(getMetricsCategory());
if (mGuestUserAutoCreated && userInfo.isGuest()) {
launcher.setResultListener(this, REQUEST_EDIT_GUEST);
@@ -956,8 +954,7 @@
// "Resetting guest..."
mHandler.sendEmptyMessage(MESSAGE_UPDATE_LIST);
mExecutor.execute(() -> {
- UserInfo guest = mUserManager.createGuest(
- getContext(), getString(com.android.settingslib.R.string.user_guest));
+ UserInfo guest = mUserManager.createGuest(getContext());
mGuestCreationScheduled.set(false);
if (guest == null) {
Log.e(TAG, "Unable to automatically recreate guest user");
@@ -996,9 +993,8 @@
if (user.id == UserHandle.myUserId()) {
pref = mMePreference;
} else {
- final Context prefContext = getPrefContext();
- pref = new UserPreference(prefContext, null, user.id);
- pref.setTitle(getUserName(prefContext, user));
+ pref = new UserPreference(getPrefContext(), null, user.id);
+ pref.setTitle(user.name);
userPreferences.add(pref);
pref.setOnPreferenceClickListener(this);
pref.setEnabled(canOpenUserDetails);
@@ -1228,14 +1224,6 @@
}
}
- /** Returns the user's name, or the appropriate string in the case of a Guest. */
- public static String getUserName(Context context, @NonNull UserInfo userInfo) {
- if (userInfo.isGuest()) {
- return context.getString(R.string.user_guest);
- }
- return userInfo.name;
- }
-
@Override
public boolean onPreferenceClick(Preference pref) {
if (pref == mMePreference) {
@@ -1272,8 +1260,7 @@
mAddGuest.setEnabled(false); // prevent multiple tap issue
mMetricsFeatureProvider.action(getActivity(), SettingsEnums.ACTION_USER_GUEST_ADD);
Trace.beginSection("UserSettings.addGuest");
- UserInfo guest = mUserManager.createGuest(
- getContext(), getString(com.android.settingslib.R.string.user_guest));
+ UserInfo guest = mUserManager.createGuest(getContext());
Trace.endSection();
if (guest == null) {
Toast.makeText(getContext(),
diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
index 0fa3d5c..1376712 100644
--- a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
@@ -662,12 +662,12 @@
public void onPreferenceClick_addGuestClicked_createGuestAndOpenDetails() {
UserInfo createdGuest = getGuest(false);
removeFlag(createdGuest, UserInfo.FLAG_INITIALIZED);
- doReturn(createdGuest).when(mUserManager).createGuest(mActivity, "Guest");
+ doReturn(createdGuest).when(mUserManager).createGuest(mActivity);
doReturn(mActivity).when(mFragment).getContext();
mFragment.onPreferenceClick(mAddGuestPreference);
- verify(mUserManager).createGuest(mActivity, "Guest");
+ verify(mUserManager).createGuest(mActivity);
Intent startedIntent = shadowOf(mActivity).getNextStartedActivity();
ShadowIntent shadowIntent = shadowOf(startedIntent);
assertThat(shadowIntent.getIntentClass()).isEqualTo(SubSettings.class);
diff --git a/tests/unit/src/com/android/settings/display/ScreenResolutionControllerTest.java b/tests/unit/src/com/android/settings/display/ScreenResolutionControllerTest.java
new file mode 100644
index 0000000..a32904e
--- /dev/null
+++ b/tests/unit/src/com/android/settings/display/ScreenResolutionControllerTest.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2022 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.display;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import android.content.Context;
+import android.view.Display;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class ScreenResolutionControllerTest {
+
+ private static final int FHD_WIDTH = 1080;
+ private static final int QHD_WIDTH = 1440;
+
+ private ScreenResolutionController mController;
+
+ @Before
+ public void setUp() {
+ Context context = spy(ApplicationProvider.getApplicationContext());
+ mController = spy(new ScreenResolutionController(context, "test"));
+ }
+
+ @Test
+ public void getAvailabilityStatus_hasFhdAndQhdModes_returnAvailable() {
+ Display.Mode modeA = new Display.Mode(0, FHD_WIDTH, 0, 0);
+ Display.Mode modeB = new Display.Mode(0, QHD_WIDTH, 0, 0);
+ Display.Mode[] modes = {modeA, modeB};
+ doReturn(modes).when(mController).getSupportedModes();
+
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_hasOneMode_returnUnsupported() {
+ Display.Mode modeA = new Display.Mode(0, FHD_WIDTH, 0, 0);
+ Display.Mode[] modes = {modeA};
+ doReturn(modes).when(mController).getSupportedModes();
+
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
+ }
+
+ @Test
+ public void updateState_screenResolutionFHD_shouldSetSummaryToFHD() {
+ int width = FHD_WIDTH;
+ doReturn(width).when(mController).getDisplayWidth();
+
+ assertThat(mController.getSummary().toString()).isEqualTo("1080p FHD+");
+ }
+
+ @Test
+ public void updateState_screenResolutionQHD_shouldSetSummaryToQHD() {
+ int width = QHD_WIDTH;
+ doReturn(width).when(mController).getDisplayWidth();
+
+ assertThat(mController.getSummary().toString()).isEqualTo("1440p QHD+");
+ }
+}
diff --git a/tests/unit/src/com/android/settings/display/ScreenResolutionFragmentTest.java b/tests/unit/src/com/android/settings/display/ScreenResolutionFragmentTest.java
new file mode 100644
index 0000000..225a1d9
--- /dev/null
+++ b/tests/unit/src/com/android/settings/display/ScreenResolutionFragmentTest.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2022 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.display;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.view.Display;
+
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class ScreenResolutionFragmentTest {
+
+ private Context mContext;
+ private ScreenResolutionFragment mFragment;
+
+ private static final int FHD_WIDTH = 1080;
+ private static final int QHD_WIDTH = 1440;
+
+ @Before
+ @UiThreadTest
+ public void setup() {
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mFragment = spy(new ScreenResolutionFragment());
+ }
+
+ @Test
+ @UiThreadTest
+ public void getDefaultKey_FHD() {
+ Display.Mode mode = new Display.Mode(0, FHD_WIDTH, 0, 0);
+ doReturn(mode).when(mFragment).getDisplayMode();
+
+ mFragment.onAttach(mContext);
+ assertThat(mFragment.getDefaultKey()).isEqualTo(mFragment.getKeyForResolution(FHD_WIDTH));
+ }
+
+ @Test
+ @UiThreadTest
+ public void getDefaultKey_QHD() {
+ Display.Mode mode = new Display.Mode(0, QHD_WIDTH, 0, 0);
+ doReturn(mode).when(mFragment).getDisplayMode();
+
+ mFragment.onAttach(mContext);
+ assertThat(mFragment.getDefaultKey()).isEqualTo(mFragment.getKeyForResolution(QHD_WIDTH));
+ }
+
+ @Test
+ @UiThreadTest
+ public void setDefaultKey_FHD() {
+ mFragment.onAttach(mContext);
+
+ mFragment.setDefaultKey(mFragment.getKeyForResolution(FHD_WIDTH));
+
+ verify(mFragment).setDisplayMode(FHD_WIDTH);
+ }
+
+ @Test
+ @UiThreadTest
+ public void setDefaultKey_QHD() {
+ mFragment.onAttach(mContext);
+
+ mFragment.setDefaultKey(mFragment.getKeyForResolution(QHD_WIDTH));
+
+ verify(mFragment).setDisplayMode(QHD_WIDTH);
+ }
+}
diff --git a/tests/unit/src/com/android/settings/safetycenter/BiometricsSafetySourceTest.java b/tests/unit/src/com/android/settings/safetycenter/BiometricsSafetySourceTest.java
index 4a91e8f..13778f7 100644
--- a/tests/unit/src/com/android/settings/safetycenter/BiometricsSafetySourceTest.java
+++ b/tests/unit/src/com/android/settings/safetycenter/BiometricsSafetySourceTest.java
@@ -17,6 +17,7 @@
package com.android.settings.safetycenter;
import static android.provider.Settings.ACTION_SHOW_ADMIN_SUPPORT_DETAILS;
+import static android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED;
import static com.google.common.truth.Truth.assertThat;
@@ -36,6 +37,7 @@
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
import android.os.UserHandle;
+import android.safetycenter.SafetyEvent;
import android.safetycenter.SafetySourceData;
import android.safetycenter.SafetySourceStatus;
@@ -66,6 +68,8 @@
private static final ComponentName COMPONENT_NAME =
new ComponentName("package", "class");
private static final UserHandle USER_HANDLE = new UserHandle(UserHandle.myUserId());
+ private static final SafetyEvent EVENT_SOURCE_STATE_CHANGED =
+ new SafetyEvent.Builder(SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build();
private Context mApplicationContext;
@@ -103,27 +107,61 @@
}
@Test
- public void sendSafetyData_whenSafetyCenterIsDisabled_sendsNoData() {
+ public void setSafetyData_whenSafetyCenterIsDisabled_doesNotSetData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(false);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
+ verify(mSafetyCenterManagerWrapper, never()).setSafetySourceData(
+ any(), any(), any(), any());
}
@Test
- public void sendSafetyData_whenSafetyCenterIsEnabled_withoutBiometrics_sendsNoData() {
+ public void setSafetySourceData_whenSafetyCenterIsEnabled_withoutBiometrics_doesNotSetData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(false);
when(mFingerprintManager.isHardwareDetected()).thenReturn(false);
when(mFaceManager.isHardwareDetected()).thenReturn(false);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
+ verify(mSafetyCenterManagerWrapper, never()).setSafetySourceData(
+ any(), any(), any(), any());
}
@Test
- public void sendSafetyData_withFingerprintNotEnrolled_whenDisabledByAdmin_sendsData() {
+ public void setSafetySourceData_setsDataForBiometricSource() {
+ when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
+ when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
+ when(mFaceManager.isHardwareDetected()).thenReturn(false);
+ when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(false);
+ when(mDevicePolicyManager.getKeyguardDisabledFeatures(COMPONENT_NAME)).thenReturn(0);
+
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
+ ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), captor.capture(), any(), any());
+
+ assertThat(captor.getValue()).isEqualTo(BiometricsSafetySource.SAFETY_SOURCE_ID);
+ }
+
+ @Test
+ public void setSafetySourceData_setsDataWithCorrectSafetyEvent() {
+ when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
+ when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
+ when(mFaceManager.isHardwareDetected()).thenReturn(false);
+ when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(false);
+ when(mDevicePolicyManager.getKeyguardDisabledFeatures(COMPONENT_NAME)).thenReturn(0);
+
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
+ ArgumentCaptor<SafetyEvent> captor = ArgumentCaptor.forClass(SafetyEvent.class);
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), any(), any(), captor.capture());
+
+ assertThat(captor.getValue()).isEqualTo(EVENT_SOURCE_STATE_CHANGED);
+ }
+
+ @Test
+ public void setSafetySourceData_withFingerprintNotEnrolled_whenDisabledByAdmin_setsData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.isHardwareDetected()).thenReturn(false);
@@ -131,31 +169,31 @@
when(mDevicePolicyManager.getKeyguardDisabledFeatures(COMPONENT_NAME))
.thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceDisabledDataSentWithSingularSummary(
+ assertSafetySourceDisabledDataSetWithSingularSummary(
"security_settings_fingerprint_preference_title",
"security_settings_fingerprint_preference_summary_none");
}
@Test
- public void sendSafetyData_withFingerprintNotEnrolled_whenNotDisabledByAdmin_sendsData() {
+ public void setSafetySourceData_withFingerprintNotEnrolled_whenNotDisabledByAdmin_setsData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.isHardwareDetected()).thenReturn(false);
when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(false);
when(mDevicePolicyManager.getKeyguardDisabledFeatures(COMPONENT_NAME)).thenReturn(0);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceEnabledDataSentWithSingularSummary(
+ assertSafetySourceEnabledDataSetWithSingularSummary(
"security_settings_fingerprint_preference_title",
"security_settings_fingerprint_preference_summary_none",
FingerprintEnrollIntroduction.class.getName());
}
@Test
- public void sendSafetyData_withFingerprintsEnrolled_whenDisabledByAdmin_sendsData() {
+ public void setSafetySourceData_withFingerprintsEnrolled_whenDisabledByAdmin_setsData() {
final int enrolledFingerprintsCount = 2;
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
@@ -166,16 +204,16 @@
when(mDevicePolicyManager.getKeyguardDisabledFeatures(COMPONENT_NAME))
.thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceDisabledDataSentWithPluralSummary(
+ assertSafetySourceDisabledDataSetWithPluralSummary(
"security_settings_fingerprint_preference_title",
"security_settings_fingerprint_preference_summary",
enrolledFingerprintsCount);
}
@Test
- public void sendSafetyData_withFingerprintsEnrolled_whenNotDisabledByAdmin_sendsData() {
+ public void setSafetySourceData_withFingerprintsEnrolled_whenNotDisabledByAdmin_setsData() {
final int enrolledFingerprintsCount = 2;
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
@@ -185,16 +223,16 @@
.thenReturn(createFingerprintList(enrolledFingerprintsCount));
when(mDevicePolicyManager.getKeyguardDisabledFeatures(COMPONENT_NAME)).thenReturn(0);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceEnabledDataSentWithPluralSummary(
+ assertSafetySourceEnabledDataSetWithPluralSummary(
"security_settings_fingerprint_preference_title",
"security_settings_fingerprint_preference_summary", enrolledFingerprintsCount,
FingerprintSettings.class.getName());
}
@Test
- public void sendSafetyData_withFaceNotEnrolled_whenDisabledByAdmin_sendsData() {
+ public void setSafetySourceData_withFaceNotEnrolled_whenDisabledByAdmin_setsData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(false);
when(mFaceManager.isHardwareDetected()).thenReturn(true);
@@ -202,31 +240,31 @@
when(mDevicePolicyManager.getKeyguardDisabledFeatures(COMPONENT_NAME))
.thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FACE);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceDisabledDataSentWithSingularSummary(
+ assertSafetySourceDisabledDataSetWithSingularSummary(
"security_settings_face_preference_title",
"security_settings_face_preference_summary_none");
}
@Test
- public void sendSafetyData_withFaceNotEnrolled_whenNotDisabledByAdmin_sendsData() {
+ public void setSafetySourceData_withFaceNotEnrolled_whenNotDisabledByAdmin_setsData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(false);
when(mFaceManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(false);
when(mDevicePolicyManager.getKeyguardDisabledFeatures(COMPONENT_NAME)).thenReturn(0);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceEnabledDataSentWithSingularSummary(
+ assertSafetySourceEnabledDataSetWithSingularSummary(
"security_settings_face_preference_title",
"security_settings_face_preference_summary_none",
FaceEnrollIntroduction.class.getName());
}
@Test
- public void sendSafetyData_withFaceEnrolled_whenDisabledByAdmin_sendsData() {
+ public void setSafetySourceData_withFaceEnrolled_whenDisabledByAdmin_setsData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(false);
when(mFaceManager.isHardwareDetected()).thenReturn(true);
@@ -234,78 +272,78 @@
when(mDevicePolicyManager.getKeyguardDisabledFeatures(COMPONENT_NAME))
.thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FACE);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceDisabledDataSentWithSingularSummary(
+ assertSafetySourceDisabledDataSetWithSingularSummary(
"security_settings_face_preference_title",
"security_settings_face_preference_summary");
}
@Test
- public void sendSafetyData_withFaceEnrolled_whenNotDisabledByAdmin_sendsData() {
+ public void setSafetySourceData_withFaceEnrolled_whenNotDisabledByAdmin_setsData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(false);
when(mFaceManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.hasEnrolledTemplates(anyInt())).thenReturn(true);
when(mDevicePolicyManager.getKeyguardDisabledFeatures(COMPONENT_NAME)).thenReturn(0);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceEnabledDataSentWithSingularSummary(
+ assertSafetySourceEnabledDataSetWithSingularSummary(
"security_settings_face_preference_title",
"security_settings_face_preference_summary",
Settings.FaceSettingsActivity.class.getName());
}
@Test
- public void sandSafetyData_withFaceAndFingerprint_whenBothNotDisabledByAdmin_sendsData() {
+ public void setSafetySourceData_withFaceAndFingerprint_whenBothNotDisabledByAdmin_setsData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.isHardwareDetected()).thenReturn(true);
when(mDevicePolicyManager.getKeyguardDisabledFeatures(COMPONENT_NAME)).thenReturn(0);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceEnabledDataSentWithSingularSummary(
+ assertSafetySourceEnabledDataSetWithSingularSummary(
"security_settings_biometric_preference_title",
"security_settings_biometric_preference_summary_none_enrolled",
Settings.CombinedBiometricSettingsActivity.class.getName());
}
@Test
- public void sandSafetyData_withFaceAndFingerprint_whenFaceDisabledByAdmin_sendsData() {
+ public void setSafetySourceData_withFaceAndFingerprint_whenFaceDisabledByAdmin_setsData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.isHardwareDetected()).thenReturn(true);
when(mDevicePolicyManager.getKeyguardDisabledFeatures(COMPONENT_NAME))
.thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FACE);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceEnabledDataSentWithSingularSummary(
+ assertSafetySourceEnabledDataSetWithSingularSummary(
"security_settings_biometric_preference_title",
"security_settings_biometric_preference_summary_none_enrolled",
Settings.CombinedBiometricSettingsActivity.class.getName());
}
@Test
- public void sandSafetyData_withFaceAndFingerprint_whenFingerprintDisabledByAdmin_sendsData() {
+ public void setSafetySourceData_faceAndFingerprint_whenFingerprintDisabledByAdmin_setsData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.isHardwareDetected()).thenReturn(true);
when(mDevicePolicyManager.getKeyguardDisabledFeatures(COMPONENT_NAME))
.thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceEnabledDataSentWithSingularSummary(
+ assertSafetySourceEnabledDataSetWithSingularSummary(
"security_settings_biometric_preference_title",
"security_settings_biometric_preference_summary_none_enrolled",
Settings.CombinedBiometricSettingsActivity.class.getName());
}
@Test
- public void sandSafetyData_withFaceAndFingerprint_whenBothDisabledByAdmin_sendsData() {
+ public void setSafetySourceData_faceAndFingerprint_whenBothDisabledByAdmin_setsData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.isHardwareDetected()).thenReturn(true);
@@ -313,15 +351,15 @@
.thenReturn(DevicePolicyManager.KEYGUARD_DISABLE_FACE
| DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT);
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceDisabledDataSentWithSingularSummary(
+ assertSafetySourceDisabledDataSetWithSingularSummary(
"security_settings_biometric_preference_title",
"security_settings_biometric_preference_summary_none_enrolled");
}
@Test
- public void sandSafetyData_withFaceAndFingerprint_whenFaceEnrolled_withMpFingers_sendsData() {
+ public void setSafetySourceData_faceAndFingerprint_whenFaceEnrolled_withMpFingers_setsData() {
final int enrolledFingerprintsCount = 2;
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
@@ -330,16 +368,16 @@
when(mFingerprintManager.getEnrolledFingerprints(anyInt())).thenReturn(
createFingerprintList(enrolledFingerprintsCount));
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceEnabledDataSentWithSingularSummary(
+ assertSafetySourceEnabledDataSetWithSingularSummary(
"security_settings_biometric_preference_title",
"security_settings_biometric_preference_summary_both_fp_multiple",
Settings.CombinedBiometricSettingsActivity.class.getName());
}
@Test
- public void sandSafetyData_withFaceAndFingerprint_whenFaceEnrolled_withOneFinger_sendsData() {
+ public void setSafetySourceData_faceAndFingerprint_whenFaceEnrolled_withOneFinger_setsData() {
final int enrolledFingerprintsCount = 1;
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
@@ -348,16 +386,16 @@
when(mFingerprintManager.getEnrolledFingerprints(anyInt())).thenReturn(
createFingerprintList(enrolledFingerprintsCount));
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceEnabledDataSentWithSingularSummary(
+ assertSafetySourceEnabledDataSetWithSingularSummary(
"security_settings_biometric_preference_title",
"security_settings_biometric_preference_summary_both_fp_single",
Settings.CombinedBiometricSettingsActivity.class.getName());
}
@Test
- public void sandSafetyData_withFaceAndFingerprint_whenFaceEnrolled_withNoFingers_sendsData() {
+ public void setSafetySourceData_faceAndFingerprint_whenFaceEnrolled_withNoFingers_setsData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mFaceManager.isHardwareDetected()).thenReturn(true);
@@ -365,16 +403,16 @@
when(mFingerprintManager.getEnrolledFingerprints(anyInt())).thenReturn(
Collections.emptyList());
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceEnabledDataSentWithSingularSummary(
+ assertSafetySourceEnabledDataSetWithSingularSummary(
"security_settings_biometric_preference_title",
"security_settings_face_preference_summary",
Settings.CombinedBiometricSettingsActivity.class.getName());
}
@Test
- public void sandSafetyData_withFaceAndFingerprint_whenNoFaceEnrolled_withFingers_sendsData() {
+ public void setSafetySourceData_faceAndFingerprint_whenNoFaceEnrolled_withFingers_setsData() {
final int enrolledFingerprintsCount = 1;
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
@@ -383,38 +421,38 @@
when(mFingerprintManager.getEnrolledFingerprints(anyInt())).thenReturn(
createFingerprintList(enrolledFingerprintsCount));
- BiometricsSafetySource.sendSafetyData(mApplicationContext);
+ BiometricsSafetySource.setSafetySourceData(mApplicationContext, EVENT_SOURCE_STATE_CHANGED);
- assertSafetySourceEnabledDataSentWithPluralSummary(
+ assertSafetySourceEnabledDataSetWithPluralSummary(
"security_settings_biometric_preference_title",
"security_settings_fingerprint_preference_summary", enrolledFingerprintsCount,
Settings.CombinedBiometricSettingsActivity.class.getName());
}
- private void assertSafetySourceDisabledDataSentWithSingularSummary(String expectedTitleResName,
+ private void assertSafetySourceDisabledDataSetWithSingularSummary(String expectedTitleResName,
String expectedSummaryResName) {
- assertSafetySourceDisabledDataSent(
+ assertSafetySourceDisabledDataSet(
ResourcesUtils.getResourcesString(mApplicationContext, expectedTitleResName),
ResourcesUtils.getResourcesString(mApplicationContext, expectedSummaryResName)
);
}
- private void assertSafetySourceEnabledDataSentWithSingularSummary(String expectedTitleResName,
+ private void assertSafetySourceEnabledDataSetWithSingularSummary(String expectedTitleResName,
String expectedSummaryResName,
String expectedSettingsClassName) {
- assertSafetySourceEnabledDataSent(
+ assertSafetySourceEnabledDataSet(
ResourcesUtils.getResourcesString(mApplicationContext, expectedTitleResName),
ResourcesUtils.getResourcesString(mApplicationContext, expectedSummaryResName),
expectedSettingsClassName
);
}
- private void assertSafetySourceDisabledDataSentWithPluralSummary(String expectedTitleResName,
+ private void assertSafetySourceDisabledDataSetWithPluralSummary(String expectedTitleResName,
String expectedSummaryResName, int expectedSummaryQuantity) {
final int stringResId = ResourcesUtils.getResourcesId(
ApplicationProvider.getApplicationContext(), "plurals",
expectedSummaryResName);
- assertSafetySourceDisabledDataSent(
+ assertSafetySourceDisabledDataSet(
ResourcesUtils.getResourcesString(mApplicationContext, expectedTitleResName),
mApplicationContext.getResources().getQuantityString(stringResId,
expectedSummaryQuantity /* quantity */,
@@ -422,13 +460,13 @@
);
}
- private void assertSafetySourceEnabledDataSentWithPluralSummary(String expectedTitleResName,
+ private void assertSafetySourceEnabledDataSetWithPluralSummary(String expectedTitleResName,
String expectedSummaryResName, int expectedSummaryQuantity,
String expectedSettingsClassName) {
final int stringResId = ResourcesUtils.getResourcesId(
ApplicationProvider.getApplicationContext(), "plurals",
expectedSummaryResName);
- assertSafetySourceEnabledDataSent(
+ assertSafetySourceEnabledDataSet(
ResourcesUtils.getResourcesString(mApplicationContext, expectedTitleResName),
mApplicationContext.getResources().getQuantityString(stringResId,
expectedSummaryQuantity /* quantity */,
@@ -437,13 +475,13 @@
);
}
- private void assertSafetySourceDisabledDataSent(String expectedTitle, String expectedSummary) {
+ private void assertSafetySourceDisabledDataSet(String expectedTitle, String expectedSummary) {
ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
- verify(mSafetyCenterManagerWrapper).sendSafetyCenterUpdate(any(), captor.capture());
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), any(), captor.capture(), any());
SafetySourceData safetySourceData = captor.getValue();
SafetySourceStatus safetySourceStatus = safetySourceData.getStatus();
- assertThat(safetySourceData.getId()).isEqualTo(BiometricsSafetySource.SAFETY_SOURCE_ID);
assertThat(safetySourceStatus.getTitle().toString()).isEqualTo(expectedTitle);
assertThat(safetySourceStatus.getSummary().toString()).isEqualTo(expectedSummary);
assertThat(safetySourceStatus.isEnabled()).isFalse();
@@ -452,14 +490,14 @@
assertThat(clickIntent.getAction()).isEqualTo(ACTION_SHOW_ADMIN_SUPPORT_DETAILS);
}
- private void assertSafetySourceEnabledDataSent(String expectedTitle, String expectedSummary,
+ private void assertSafetySourceEnabledDataSet(String expectedTitle, String expectedSummary,
String expectedSettingsClassName) {
ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
- verify(mSafetyCenterManagerWrapper).sendSafetyCenterUpdate(any(), captor.capture());
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), any(), captor.capture(), any());
SafetySourceData safetySourceData = captor.getValue();
SafetySourceStatus safetySourceStatus = safetySourceData.getStatus();
- assertThat(safetySourceData.getId()).isEqualTo(BiometricsSafetySource.SAFETY_SOURCE_ID);
assertThat(safetySourceStatus.getTitle().toString()).isEqualTo(expectedTitle);
assertThat(safetySourceStatus.getSummary().toString()).isEqualTo(expectedSummary);
assertThat(safetySourceStatus.isEnabled()).isTrue();
diff --git a/tests/unit/src/com/android/settings/safetycenter/LockScreenSafetySourceTest.java b/tests/unit/src/com/android/settings/safetycenter/LockScreenSafetySourceTest.java
index 90a24aa..db2702d 100644
--- a/tests/unit/src/com/android/settings/safetycenter/LockScreenSafetySourceTest.java
+++ b/tests/unit/src/com/android/settings/safetycenter/LockScreenSafetySourceTest.java
@@ -16,6 +16,8 @@
package com.android.settings.safetycenter;
+import static android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
@@ -26,6 +28,7 @@
import android.content.Context;
import android.content.Intent;
+import android.safetycenter.SafetyEvent;
import android.safetycenter.SafetySourceData;
import android.safetycenter.SafetySourceIssue;
import android.safetycenter.SafetySourceStatus;
@@ -53,6 +56,8 @@
private static final String SUMMARY = "summary";
private static final String FAKE_ACTION_CHOOSE_LOCK_GENERIC_FRAGMENT = "choose_lock_generic";
private static final String FAKE_ACTION_SCREEN_LOCK_SETTINGS = "screen_lock_settings";
+ private static final SafetyEvent EVENT_SOURCE_STATE_CHANGED =
+ new SafetyEvent.Builder(SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build();
private Context mApplicationContext;
@@ -81,42 +86,74 @@
}
@Test
- public void sendSafetyData_whenScreenLockIsEnabled_whenSafetyCenterIsDisabled_sendsNoData() {
+ public void setSafetySourceData_whenScreenLockEnabled_safetyCenterDisabled_doesNotSetData() {
whenScreenLockIsEnabled();
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(false);
when(mScreenLockPreferenceDetailsUtils.isAvailable()).thenReturn(true);
- LockScreenSafetySource.sendSafetyData(mApplicationContext,
- mScreenLockPreferenceDetailsUtils);
+ LockScreenSafetySource.setSafetySourceData(mApplicationContext,
+ mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED);
- verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
+ verify(mSafetyCenterManagerWrapper, never()).setSafetySourceData(
+ any(), any(), any(), any());
}
@Test
- public void sendSafetyData_whenScreenLockIsDisabled_sendsNoData() {
+ public void setSafetySourceData_whenScreenLockIsDisabled_doesNotSetData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mScreenLockPreferenceDetailsUtils.isAvailable()).thenReturn(false);
- LockScreenSafetySource.sendSafetyData(mApplicationContext,
- mScreenLockPreferenceDetailsUtils);
+ LockScreenSafetySource.setSafetySourceData(mApplicationContext,
+ mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED);
- verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
+ verify(mSafetyCenterManagerWrapper, never()).setSafetySourceData(
+ any(), any(), any(), any());
}
@Test
- public void sendSafetyData_whenScreenLockIsEnabled_sendsData() {
+ public void setSafetySourceData_setsDataForLockscreenSafetySource() {
whenScreenLockIsEnabled();
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
- LockScreenSafetySource.sendSafetyData(mApplicationContext,
- mScreenLockPreferenceDetailsUtils);
+ LockScreenSafetySource.setSafetySourceData(mApplicationContext,
+ mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED);
+ ArgumentCaptor<String> idCaptor = ArgumentCaptor.forClass(String.class);
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), idCaptor.capture(), any(), any());
+ String safetySourceId = idCaptor.getValue();
+
+ assertThat(safetySourceId).isEqualTo(LockScreenSafetySource.SAFETY_SOURCE_ID);
+ }
+
+ @Test
+ public void setSafetySourceData_setsDataWithCorrectSafetyEvent() {
+ whenScreenLockIsEnabled();
+ when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
+
+ LockScreenSafetySource.setSafetySourceData(mApplicationContext,
+ mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED);
+ ArgumentCaptor<SafetyEvent> eventCaptor = ArgumentCaptor.forClass(SafetyEvent.class);
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), any(), any(), eventCaptor.capture());
+ SafetyEvent safetyEvent = eventCaptor.getValue();
+
+ assertThat(safetyEvent).isEqualTo(EVENT_SOURCE_STATE_CHANGED);
+ }
+
+ @Test
+ public void setSafetySourceData_whenScreenLockIsEnabled_setData() {
+ whenScreenLockIsEnabled();
+ when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
+
+ LockScreenSafetySource.setSafetySourceData(mApplicationContext,
+ mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED);
ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
- verify(mSafetyCenterManagerWrapper).sendSafetyCenterUpdate(any(), captor.capture());
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), any(), captor.capture(), any());
SafetySourceData safetySourceData = captor.getValue();
SafetySourceStatus safetySourceStatus = safetySourceData.getStatus();
- assertThat(safetySourceData.getId()).isEqualTo(LockScreenSafetySource.SAFETY_SOURCE_ID);
assertThat(safetySourceStatus.getTitle().toString())
.isEqualTo(ResourcesUtils.getResourcesString(
mApplicationContext,
@@ -129,16 +166,17 @@
}
@Test
- public void sendSafetyData_whenLockPatternIsSecure_sendsStatusLevelOk() {
+ public void setSafetySourceData_whenLockPatternIsSecure_setStatusLevelOk() {
whenScreenLockIsEnabled();
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(true);
- LockScreenSafetySource.sendSafetyData(mApplicationContext,
- mScreenLockPreferenceDetailsUtils);
+ LockScreenSafetySource.setSafetySourceData(mApplicationContext,
+ mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED);
ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
- verify(mSafetyCenterManagerWrapper).sendSafetyCenterUpdate(any(), captor.capture());
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), any(), captor.capture(), any());
SafetySourceData safetySourceData = captor.getValue();
SafetySourceStatus safetySourceStatus = safetySourceData.getStatus();
@@ -147,16 +185,17 @@
}
@Test
- public void sendSafetyData_whenLockPatternIsNotSecure_sendsStatusLevelRecommendation() {
+ public void setSafetySourceData_whenLockPatternIsNotSecure_setStatusLevelRecommendation() {
whenScreenLockIsEnabled();
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(false);
- LockScreenSafetySource.sendSafetyData(mApplicationContext,
- mScreenLockPreferenceDetailsUtils);
+ LockScreenSafetySource.setSafetySourceData(mApplicationContext,
+ mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED);
ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
- verify(mSafetyCenterManagerWrapper).sendSafetyCenterUpdate(any(), captor.capture());
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), any(), captor.capture(), any());
SafetySourceData safetySourceData = captor.getValue();
SafetySourceStatus safetySourceStatus = safetySourceData.getStatus();
@@ -165,32 +204,34 @@
}
@Test
- public void sendSafetyData_whenLockPatternIsSecure_sendsNoIssues() {
+ public void setSafetySourceData_whenLockPatternIsSecure_doesNotSetIssues() {
whenScreenLockIsEnabled();
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(true);
- LockScreenSafetySource.sendSafetyData(mApplicationContext,
- mScreenLockPreferenceDetailsUtils);
+ LockScreenSafetySource.setSafetySourceData(mApplicationContext,
+ mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED);
ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
- verify(mSafetyCenterManagerWrapper).sendSafetyCenterUpdate(any(), captor.capture());
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), any(), captor.capture(), any());
SafetySourceData safetySourceData = captor.getValue();
assertThat(safetySourceData.getIssues()).isEmpty();
}
@Test
- public void sendSafetyData_whenLockPatternIsNotSecure_sendsIssue() {
+ public void setSafetySourceData_whenLockPatternIsNotSecure_setIssue() {
whenScreenLockIsEnabled();
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mScreenLockPreferenceDetailsUtils.isLockPatternSecure()).thenReturn(false);
- LockScreenSafetySource.sendSafetyData(mApplicationContext,
- mScreenLockPreferenceDetailsUtils);
+ LockScreenSafetySource.setSafetySourceData(mApplicationContext,
+ mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED);
ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
- verify(mSafetyCenterManagerWrapper).sendSafetyCenterUpdate(any(), captor.capture());
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), any(), captor.capture(), any());
SafetySourceData safetySourceData = captor.getValue();
assertThat(safetySourceData.getIssues()).hasSize(1);
@@ -218,17 +259,18 @@
}
@Test
- public void sendSafetyData_whenPasswordQualityIsManaged_sendsDisabled() {
+ public void setSafetySourceData_whenPasswordQualityIsManaged_setDisabled() {
whenScreenLockIsEnabled();
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any()))
.thenReturn(true);
- LockScreenSafetySource.sendSafetyData(mApplicationContext,
- mScreenLockPreferenceDetailsUtils);
+ LockScreenSafetySource.setSafetySourceData(mApplicationContext,
+ mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED);
ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
- verify(mSafetyCenterManagerWrapper).sendSafetyCenterUpdate(any(), captor.capture());
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), any(), captor.capture(), any());
SafetySourceData safetySourceData = captor.getValue();
SafetySourceStatus safetySourceStatus = safetySourceData.getStatus();
@@ -236,17 +278,18 @@
}
@Test
- public void sendSafetyData_whenPasswordQualityIsNotManaged_sendsEnabled() {
+ public void setSafetySourceData_whenPasswordQualityIsNotManaged_setEnabled() {
whenScreenLockIsEnabled();
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mScreenLockPreferenceDetailsUtils.isPasswordQualityManaged(anyInt(), any()))
.thenReturn(false);
- LockScreenSafetySource.sendSafetyData(mApplicationContext,
- mScreenLockPreferenceDetailsUtils);
+ LockScreenSafetySource.setSafetySourceData(mApplicationContext,
+ mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED);
ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
- verify(mSafetyCenterManagerWrapper).sendSafetyCenterUpdate(any(), captor.capture());
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), any(), captor.capture(), any());
SafetySourceData safetySourceData = captor.getValue();
SafetySourceStatus safetySourceStatus = safetySourceData.getStatus();
@@ -254,7 +297,7 @@
}
@Test
- public void sendSafetyData_whenShouldShowGearMenu_sendsGearMenuActionIcon() {
+ public void setSafetySourceData_whenShouldShowGearMenu_setGearMenuActionIcon() {
whenScreenLockIsEnabled();
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
final Intent launchScreenLockSettings = new Intent(FAKE_ACTION_SCREEN_LOCK_SETTINGS);
@@ -262,12 +305,13 @@
.thenReturn(launchScreenLockSettings);
when(mScreenLockPreferenceDetailsUtils.shouldShowGearMenu()).thenReturn(true);
- LockScreenSafetySource.sendSafetyData(mApplicationContext,
- mScreenLockPreferenceDetailsUtils);
+ LockScreenSafetySource.setSafetySourceData(mApplicationContext,
+ mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED);
final ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(
SafetySourceData.class);
- verify(mSafetyCenterManagerWrapper).sendSafetyCenterUpdate(any(), captor.capture());
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), any(), captor.capture(), any());
final IconAction iconAction = captor.getValue().getStatus().getIconAction();
assertThat(iconAction.getIconType()).isEqualTo(IconAction.ICON_TYPE_GEAR);
@@ -276,16 +320,17 @@
}
@Test
- public void sendSafetyData_whenShouldNotShowGearMenu_sendsNoGearMenuActionIcon() {
+ public void setSafetySourceData_whenShouldNotShowGearMenu_doesNotSetGearMenuActionIcon() {
whenScreenLockIsEnabled();
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
when(mScreenLockPreferenceDetailsUtils.shouldShowGearMenu()).thenReturn(false);
- LockScreenSafetySource.sendSafetyData(mApplicationContext,
- mScreenLockPreferenceDetailsUtils);
+ LockScreenSafetySource.setSafetySourceData(mApplicationContext,
+ mScreenLockPreferenceDetailsUtils, EVENT_SOURCE_STATE_CHANGED);
ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
- verify(mSafetyCenterManagerWrapper).sendSafetyCenterUpdate(any(), captor.capture());
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(
+ any(), any(), captor.capture(), any());
SafetySourceData safetySourceData = captor.getValue();
SafetySourceStatus safetySourceStatus = safetySourceData.getStatus();
@@ -293,23 +338,24 @@
}
@Test
- public void onLockScreenChange_whenSafetyCenterEnabled_sendsData() {
+ public void onLockScreenChange_whenSafetyCenterEnabled_setData() {
whenScreenLockIsEnabled();
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
LockScreenSafetySource.onLockScreenChange(mApplicationContext);
- verify(mSafetyCenterManagerWrapper).sendSafetyCenterUpdate(any(), any());
+ verify(mSafetyCenterManagerWrapper).setSafetySourceData(any(), any(), any(), any());
}
@Test
- public void onLockScreenChange_whenSafetyCenterDisabled_sendsNoData() {
+ public void onLockScreenChange_whenSafetyCenterDisabled_doesNotSetData() {
whenScreenLockIsEnabled();
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(false);
LockScreenSafetySource.onLockScreenChange(mApplicationContext);
- verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
+ verify(mSafetyCenterManagerWrapper, never()).setSafetySourceData(
+ any(), any(), any(), any());
}
private void whenScreenLockIsEnabled() {
diff --git a/tests/unit/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiverTest.java b/tests/unit/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiverTest.java
index f042c22..8a4214c 100644
--- a/tests/unit/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiverTest.java
+++ b/tests/unit/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiverTest.java
@@ -18,6 +18,8 @@
import static android.safetycenter.SafetyCenterManager.ACTION_REFRESH_SAFETY_SOURCES;
import static android.safetycenter.SafetyCenterManager.EXTRA_REFRESH_SAFETY_SOURCE_IDS;
+import static android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_DEVICE_REBOOTED;
+import static android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_REFRESH_REQUESTED;
import static com.google.common.truth.Truth.assertThat;
@@ -29,7 +31,7 @@
import android.content.Context;
import android.content.Intent;
-import android.safetycenter.SafetySourceData;
+import android.safetycenter.SafetyEvent;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -45,6 +47,7 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import java.util.Arrays;
import java.util.List;
@RunWith(AndroidJUnit4.class)
@@ -74,17 +77,18 @@
}
@Test
- public void sendSafetyData_whenSafetyCenterIsEnabled_withNoIntentAction_sendsNoData() {
+ public void onReceive_onRefresh_whenSafetyCenterIsEnabled_withNoIntentAction_doesNotSetData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
Intent intent = new Intent().putExtra(EXTRA_REFRESH_SAFETY_SOURCE_IDS, new String[]{});
new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
- verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
+ verify(mSafetyCenterManagerWrapper, never()).setSafetySourceData(
+ any(), any(), any(), any());
}
@Test
- public void sendSafetyData_whenSafetyCenterIsDisabled_sendsNoData() {
+ public void onReceive_onRefresh_whenSafetyCenterIsDisabled_doesNotSetData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(false);
Intent intent =
new Intent()
@@ -95,21 +99,23 @@
new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
- verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
+ verify(mSafetyCenterManagerWrapper, never()).setSafetySourceData(
+ any(), any(), any(), any());
}
@Test
- public void sendSafetyData_whenSafetyCenterIsEnabled_withNullSourceIds_sendsNoData() {
+ public void onReceive_onRefresh_whenSafetyCenterIsEnabled_withNullSourceIds_doesNotSetData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
Intent intent = new Intent().setAction(ACTION_REFRESH_SAFETY_SOURCES);
new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
- verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
+ verify(mSafetyCenterManagerWrapper, never()).setSafetySourceData(
+ any(), any(), any(), any());
}
@Test
- public void sendSafetyData_whenSafetyCenterIsEnabled_withNoSourceIds_sendsNoData() {
+ public void onReceive_onRefresh_whenSafetyCenterIsEnabled_withNoSourceIds_doesNotSetData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
Intent intent =
new Intent()
@@ -118,11 +124,12 @@
new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
- verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
+ verify(mSafetyCenterManagerWrapper, never()).setSafetySourceData(
+ any(), any(), any(), any());
}
@Test
- public void sendSafetyData_withLockscreenSourceId_sendsLockscreenData() {
+ public void onReceive_onRefresh_setsRefreshEvent() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
Intent intent =
new Intent()
@@ -132,16 +139,34 @@
new String[]{ LockScreenSafetySource.SAFETY_SOURCE_ID });
new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
- ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
+ ArgumentCaptor<SafetyEvent> captor = ArgumentCaptor.forClass(SafetyEvent.class);
verify(mSafetyCenterManagerWrapper, times(1))
- .sendSafetyCenterUpdate(any(), captor.capture());
- SafetySourceData safetySourceData = captor.getValue();
+ .setSafetySourceData(any(), any(), any(), captor.capture());
- assertThat(safetySourceData.getId()).isEqualTo(LockScreenSafetySource.SAFETY_SOURCE_ID);
+ assertThat(captor.getValue()).isEqualTo(
+ new SafetyEvent.Builder(SAFETY_EVENT_TYPE_REFRESH_REQUESTED).build());
}
@Test
- public void sendSafetyData_withBiometricsSourceId_sendsBiometricData() {
+ public void onReceive_onRefresh_withLockscreenSourceId_setsLockscreenData() {
+ when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
+ Intent intent =
+ new Intent()
+ .setAction(ACTION_REFRESH_SAFETY_SOURCES)
+ .putExtra(
+ EXTRA_REFRESH_SAFETY_SOURCE_IDS,
+ new String[]{ LockScreenSafetySource.SAFETY_SOURCE_ID });
+
+ new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
+ ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
+ verify(mSafetyCenterManagerWrapper, times(1))
+ .setSafetySourceData(any(), captor.capture(), any(), any());
+
+ assertThat(captor.getValue()).isEqualTo(LockScreenSafetySource.SAFETY_SOURCE_ID);
+ }
+
+ @Test
+ public void onReceive_onRefresh_withBiometricsSourceId_setsBiometricData() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
Intent intent =
new Intent()
@@ -151,28 +176,42 @@
new String[]{ BiometricsSafetySource.SAFETY_SOURCE_ID });
new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
- ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
+ ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
verify(mSafetyCenterManagerWrapper, times(1))
- .sendSafetyCenterUpdate(any(), captor.capture());
- SafetySourceData safetySourceData = captor.getValue();
+ .setSafetySourceData(any(), captor.capture(), any(), any());
- assertThat(safetySourceData.getId()).isEqualTo(BiometricsSafetySource.SAFETY_SOURCE_ID);
+ assertThat(captor.getValue()).isEqualTo(BiometricsSafetySource.SAFETY_SOURCE_ID);
}
@Test
- public void sendSafetyData_onBootCompleted_sendsBiometricAndLockscreenData() {
+ public void onReceive_onBootCompleted_setsBootCompleteEvent() {
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
Intent intent = new Intent().setAction(Intent.ACTION_BOOT_COMPLETED);
new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
- ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
+ ArgumentCaptor<SafetyEvent> captor = ArgumentCaptor.forClass(SafetyEvent.class);
verify(mSafetyCenterManagerWrapper, times(2))
- .sendSafetyCenterUpdate(any(), captor.capture());
- List<SafetySourceData> safetySourceDataList = captor.getAllValues();
+ .setSafetySourceData(any(), any(), any(), captor.capture());
- assertThat(safetySourceDataList.stream().anyMatch(
- data -> data.getId().equals(LockScreenSafetySource.SAFETY_SOURCE_ID))).isTrue();
- assertThat(safetySourceDataList.stream().anyMatch(
- data -> data.getId().equals(BiometricsSafetySource.SAFETY_SOURCE_ID))).isTrue();
+ SafetyEvent bootEvent = new SafetyEvent.Builder(SAFETY_EVENT_TYPE_DEVICE_REBOOTED).build();
+ assertThat(captor.getAllValues())
+ .containsExactlyElementsIn(Arrays.asList(bootEvent, bootEvent));
+ }
+
+ @Test
+ public void onReceive_onBootCompleted_sendsBiometricAndLockscreenData() {
+ when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
+ Intent intent = new Intent().setAction(Intent.ACTION_BOOT_COMPLETED);
+
+ new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
+ ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
+ verify(mSafetyCenterManagerWrapper, times(2))
+ .setSafetySourceData(any(), captor.capture(), any(), any());
+ List<String> safetySourceIdList = captor.getAllValues();
+
+ assertThat(safetySourceIdList.stream().anyMatch(
+ id -> id.equals(LockScreenSafetySource.SAFETY_SOURCE_ID))).isTrue();
+ assertThat(safetySourceIdList.stream().anyMatch(
+ id -> id.equals(BiometricsSafetySource.SAFETY_SOURCE_ID))).isTrue();
}
}