Merge "Show icons for allowed sounds" into main
diff --git a/Android.bp b/Android.bp
index 0fd4cb0..4c472c8 100644
--- a/Android.bp
+++ b/Android.bp
@@ -68,6 +68,9 @@
static_libs: [
// External dependencies
"androidx.navigation_navigation-fragment-ktx",
+ "androidx.slice_slice-builders",
+ "androidx.slice_slice-core",
+ "androidx.slice_slice-view",
"androidx.window_window-java",
"gson",
"guava",
diff --git a/aconfig/settings_globalintl_flag_declarations.aconfig b/aconfig/settings_globalintl_flag_declarations.aconfig
index 48f3a29..2f046d0 100644
--- a/aconfig/settings_globalintl_flag_declarations.aconfig
+++ b/aconfig/settings_globalintl_flag_declarations.aconfig
@@ -14,3 +14,10 @@
description: "Feature flag for locale notification"
bug: "301380610"
}
+
+flag {
+ name: "accessibility_appearance_settings_backup_enabled"
+ namespace: "globalintl"
+ description: "Feature flag for B&R accessibility appearance settings"
+ bug: "341210043"
+}
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ecfc10a..ec2ff55 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4451,6 +4451,10 @@
<string name="sticky_keys">Sticky keys</string>
<!-- Summary text for the 'Sticky keys' preference sub-screen. [CHAR LIMIT=300] -->
<string name="sticky_keys_summary">Press one key at a time for shortcuts instead of holding keys down together</string>
+ <!-- Title for a toggle switch for 'mouse' keys, an accessibility setting that allows the mouse pointer to be controlled using certain keys on a physical keyboard if keyboard is connected. [CHAR LIMIT=35] -->
+ <string name="mouse_keys">Mouse keys</string>
+ <!-- Summary text for the accessibility setting 'Mouse keys' preference sub-screen. [CHAR LIMIT=100] -->
+ <string name="mouse_keys_summary">Use the physical keyboard to control the mouse.</string>
<!-- Title for the button to trigger the 'keyboard shortcuts helper' dialog. [CHAR LIMIT=35] -->
<string name="keyboard_shortcuts_helper">Keyboard shortcuts</string>
<!-- Summary text for the 'keyboard shortcuts helper' dialog. [CHAR LIMIT=100] -->
@@ -8867,9 +8871,10 @@
<string name="notif_listener_more_settings_desc">More settings are available inside this app</string>
<!-- Title for Polite Notifications setting [CHAR LIMIT=45]-->
- <string name="notification_polite_title">Adaptive Notifications</string>
- <string name="notification_polite_main_control_title">Use adaptive notifications</string>
- <string name="notification_polite_description">When you get many notifications within a short time, your phone will lower volume and minimize pop-ups on screen for up to two minutes. Calls, alarms, and priority conversations still vibrate, make a sound, or show up on the screen, and all notifications are easy to find when you pull down from the top of the screen.</string>
+ <string name="notification_polite_title">Notification cooldown</string>
+ <string name="notification_polite_main_control_title">Use notification cooldown</string>
+ <string name="notification_polite_description">When you receive many notifications within a short time, your device will lower it\u2019s volume and minimize alerts for up to 2 minutes. Calls, alarms, and priority conversations aren\u2019t affected.
+ \n\nNotifications received during the cooldown can be found by pulling down from the top of the screen.</string>
<string name="notification_polite_work">Apply to work profiles</string>
<string name="notification_polite_work_summary">Apply to work profile apps</string>
diff --git a/res/xml/physical_keyboard_settings.xml b/res/xml/physical_keyboard_settings.xml
index dd2b709..2063618 100644
--- a/res/xml/physical_keyboard_settings.xml
+++ b/res/xml/physical_keyboard_settings.xml
@@ -53,5 +53,11 @@
android:title="@string/slow_keys"
android:defaultValue="false" />
+ <SwitchPreferenceCompat
+ android:key="accessibility_mouse_keys"
+ android:title="@string/mouse_keys"
+ android:summary="@string/mouse_keys_summary"
+ android:defaultValue="false" />
+
</PreferenceCategory>
</PreferenceScreen>
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index d746434..23f8ec7 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -154,7 +154,7 @@
};
@VisibleForTesting
- final AccessibilitySettingsContentObserver mSettingsContentObserver;
+ AccessibilitySettingsContentObserver mSettingsContentObserver;
private final Map<String, PreferenceCategory> mCategoryToPrefCategoryMap =
new ArrayMap<>();
@@ -168,9 +168,14 @@
private boolean mIsForeground = true;
public AccessibilitySettings() {
+ mSettingsContentObserver = new AccessibilitySettingsContentObserver(mHandler);
+ }
+
+ private void initializeSettingsContentObserver() {
// Observe changes to anything that the shortcut can toggle, so we can reflect updates
final Collection<AccessibilityShortcutController.FrameworkFeatureInfo> features =
- AccessibilityShortcutController.getFrameworkShortcutFeaturesMap().values();
+ AccessibilityShortcutController
+ .getFrameworkShortcutFeaturesMap().values();
final List<String> shortcutFeatureKeys = new ArrayList<>(features.size());
for (AccessibilityShortcutController.FrameworkFeatureInfo feature : features) {
final String key = feature.getSettingKey();
@@ -188,7 +193,6 @@
shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_STICKY_KEYS);
shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_SLOW_KEYS);
shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_BOUNCE_KEYS);
- mSettingsContentObserver = new AccessibilitySettingsContentObserver(mHandler);
mSettingsContentObserver.registerKeysToObserverCallback(shortcutFeatureKeys,
key -> onContentChanged());
}
@@ -213,6 +217,7 @@
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ initializeSettingsContentObserver();
initializeAllPreferences();
updateAllPreferences();
mNeedPreferencesUpdate = false;
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
index 1ee980e..72a0f08 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
@@ -50,6 +50,7 @@
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ChooseLockPattern;
import com.android.settings.privatespace.PrivateSpaceSetupActivity;
+import com.android.settings.privatespace.delete.PrivateSpaceDeleteActivity;
import com.android.settings.remoteauth.RemoteAuthActivity;
import com.android.settings.remoteauth.RemoteAuthActivityInternal;
@@ -263,6 +264,9 @@
addActivityFilter(activityFilters, RemoteAuthActivityInternal.class);
addActivityFilter(activityFilters, ChooseLockPattern.class);
addActivityFilter(activityFilters, PrivateSpaceSetupActivity.class);
+ if (android.multiuser.Flags.fixLargeDisplayPrivateSpaceSettings()) {
+ addActivityFilter(activityFilters, PrivateSpaceDeleteActivity.class);
+ }
String action = mContext.getString(R.string.config_avatar_picker_action);
addActivityFilter(activityFilters, new Intent(action));
diff --git a/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java b/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
index caa7327..b9a0b93 100644
--- a/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
+++ b/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
@@ -65,7 +65,8 @@
static final int CONFIRM_REQUEST = 2001;
private static final int CHOOSE_LOCK_REQUEST = 2002;
protected static final int ACTIVE_UNLOCK_REQUEST = 2003;
- private static final int BIOMETRIC_AUTH_REQUEST = 2004;
+ @VisibleForTesting
+ static final int BIOMETRIC_AUTH_REQUEST = 2004;
private static final String SAVE_STATE_CONFIRM_CREDETIAL = "confirm_credential";
private static final String DO_NOT_FINISH_ACTIVITY = "do_not_finish_activity";
diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
index 29292a1..bafec32 100644
--- a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
@@ -73,6 +73,7 @@
private static final String ACCESSIBILITY_BOUNCE_KEYS = "accessibility_bounce_keys";
private static final String ACCESSIBILITY_SLOW_KEYS = "accessibility_slow_keys";
private static final String ACCESSIBILITY_STICKY_KEYS = "accessibility_sticky_keys";
+ private static final String ACCESSIBILITY_MOUSE_KEYS = "accessibility_mouse_keys";
private static final String KEYBOARD_SHORTCUTS_HELPER = "keyboard_shortcuts_helper";
private static final String MODIFIER_KEYS_SETTINGS = "modifier_keys_settings";
private static final String EXTRA_AUTO_SELECTION = "auto_selection";
@@ -84,6 +85,8 @@
Secure.ACCESSIBILITY_SLOW_KEYS);
private static final Uri sAccessibilityStickyKeysUri = Secure.getUriFor(
Secure.ACCESSIBILITY_STICKY_KEYS);
+ private static final Uri sAccessibilityMouseKeysUri = Secure.getUriFor(
+ Secure.ACCESSIBILITY_MOUSE_KEYS_ENABLED);
public static final int BOUNCE_KEYS_THRESHOLD = 500;
public static final int SLOW_KEYS_THRESHOLD = 500;
@@ -104,7 +107,8 @@
private TwoStatePreference mAccessibilitySlowKeys = null;
@Nullable
private TwoStatePreference mAccessibilityStickyKeys = null;
-
+ @Nullable
+ private TwoStatePreference mAccessibilityMouseKeys = null;
private Intent mIntentWaitingForResult;
private boolean mSupportsFirmwareUpdate;
@@ -138,6 +142,8 @@
getContext().getString(R.string.slow_keys_summary, SLOW_KEYS_THRESHOLD));
mAccessibilityStickyKeys = Objects.requireNonNull(
mKeyboardA11yCategory.findPreference(ACCESSIBILITY_STICKY_KEYS));
+ mAccessibilityMouseKeys = Objects.requireNonNull(
+ mKeyboardA11yCategory.findPreference(ACCESSIBILITY_MOUSE_KEYS));
FeatureFactory featureFactory = FeatureFactory.getFeatureFactory();
mMetricsFeatureProvider = featureFactory.getMetricsFeatureProvider();
@@ -160,6 +166,9 @@
if (!InputSettings.isAccessibilityStickyKeysFeatureEnabled()) {
mKeyboardA11yCategory.removePreference(mAccessibilityStickyKeys);
}
+ if (!InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) {
+ mKeyboardA11yCategory.removePreference(mAccessibilityMouseKeys);
+ }
InputDeviceIdentifier inputDeviceIdentifier = activity.getIntent().getParcelableExtra(
KeyboardLayoutPickerFragment.EXTRA_INPUT_DEVICE_IDENTIFIER,
InputDeviceIdentifier.class);
@@ -208,6 +217,8 @@
mAccessibilitySlowKeysSwitchPreferenceChangeListener);
Objects.requireNonNull(mAccessibilityStickyKeys).setOnPreferenceChangeListener(
mAccessibilityStickyKeysSwitchPreferenceChangeListener);
+ Objects.requireNonNull(mAccessibilityMouseKeys).setOnPreferenceChangeListener(
+ mAccessibilityMouseKeysSwitchPreferenceChangeListener);
registerSettingsObserver();
}
@@ -219,6 +230,7 @@
Objects.requireNonNull(mAccessibilityBounceKeys).setOnPreferenceChangeListener(null);
Objects.requireNonNull(mAccessibilitySlowKeys).setOnPreferenceChangeListener(null);
Objects.requireNonNull(mAccessibilityStickyKeys).setOnPreferenceChangeListener(null);
+ Objects.requireNonNull(mAccessibilityMouseKeys).setOnPreferenceChangeListener(null);
unregisterSettingsObserver();
}
@@ -309,12 +321,14 @@
if (InputSettings.isAccessibilityBounceKeysFeatureEnabled()
|| InputSettings.isAccessibilityStickyKeysFeatureEnabled()
- || InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()) {
+ || InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()
+ || InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) {
Objects.requireNonNull(mKeyboardA11yCategory).setOrder(2);
preferenceScreen.addPreference(mKeyboardA11yCategory);
updateAccessibilityBounceKeysSwitch();
updateAccessibilitySlowKeysSwitch();
updateAccessibilityStickyKeysSwitch();
+ updateAccessibilityMouseKeysSwitch();
}
}
@@ -365,9 +379,17 @@
mContentObserver,
UserHandle.myUserId());
}
+ if (InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) {
+ contentResolver.registerContentObserver(
+ sAccessibilityMouseKeysUri,
+ false,
+ mContentObserver,
+ UserHandle.myUserId());
+ }
updateAccessibilityBounceKeysSwitch();
updateAccessibilitySlowKeysSwitch();
updateAccessibilityStickyKeysSwitch();
+ updateAccessibilityMouseKeysSwitch();
}
private void unregisterSettingsObserver() {
@@ -398,6 +420,14 @@
InputSettings.isAccessibilityStickyKeysEnabled(getContext()));
}
+ private void updateAccessibilityMouseKeysSwitch() {
+ if (!InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) {
+ return;
+ }
+ Objects.requireNonNull(mAccessibilityMouseKeys).setChecked(
+ InputSettings.isAccessibilityMouseKeysEnabled(getContext()));
+ }
+
private void toggleKeyboardShortcutsMenu() {
getActivity().requestShowKeyboardShortcuts();
}
@@ -422,6 +452,12 @@
return true;
};
+ private final OnPreferenceChangeListener
+ mAccessibilityMouseKeysSwitchPreferenceChangeListener = (preference, newValue) -> {
+ InputSettings.setAccessibilityMouseKeysEnabled(getContext(), (Boolean) newValue);
+ return true;
+ };
+
private final ContentObserver mContentObserver = new ContentObserver(new Handler(true)) {
@Override
public void onChange(boolean selfChange, Uri uri) {
@@ -431,6 +467,8 @@
updateAccessibilitySlowKeysSwitch();
} else if (sAccessibilityStickyKeysUri.equals(uri)) {
updateAccessibilityStickyKeysSwitch();
+ } else if (sAccessibilityMouseKeysUri.equals(uri)) {
+ updateAccessibilityMouseKeysSwitch();
}
}
};
diff --git a/src/com/android/settings/network/MobileNetworkRepository.java b/src/com/android/settings/network/MobileNetworkRepository.java
index 9901929..f5763eb 100644
--- a/src/com/android/settings/network/MobileNetworkRepository.java
+++ b/src/com/android/settings/network/MobileNetworkRepository.java
@@ -29,7 +29,6 @@
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyCallback;
import android.telephony.TelephonyManager;
-import android.telephony.UiccCardInfo;
import android.telephony.UiccPortInfo;
import android.telephony.UiccSlotInfo;
import android.util.ArrayMap;
@@ -86,12 +85,6 @@
private AirplaneModeObserver mAirplaneModeObserver;
private MetricsFeatureProvider mMetricsFeatureProvider;
private int mPhysicalSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
- private int mLogicalSlotIndex = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
- private int mCardState = UiccSlotInfo.CARD_STATE_INFO_ABSENT;
- private int mPortIndex = TelephonyManager.INVALID_PORT_INDEX;
- private int mCardId = TelephonyManager.UNINITIALIZED_CARD_ID;
- private boolean mIsEuicc = false;
- private boolean mIsRemovable = false;
private boolean mIsActive = false;
private Map<Integer, SubscriptionInfo> mSubscriptionInfoMap = new ArrayMap<>();
private Map<Integer, TelephonyManager> mTelephonyManagerMap = new HashMap<>();
@@ -301,19 +294,13 @@
UiccSlotInfo curSlotInfo = uiccSlotInfos[i];
if (curSlotInfo != null && curSlotInfo.getCardStateInfo() == CARD_STATE_INFO_PRESENT) {
final int index = i;
- mIsEuicc = curSlotInfo.getIsEuicc();
- mCardState = curSlotInfo.getCardStateInfo();
- mIsRemovable = curSlotInfo.isRemovable();
- mCardId = subInfo.getCardId();
Collection<UiccPortInfo> uiccPortInfos = curSlotInfo.getPorts();
uiccPortInfos.forEach(portInfo -> {
if (portInfo.getPortIndex() == subInfo.getPortIndex()
&& portInfo.getLogicalSlotIndex() == subInfo.getSimSlotIndex()) {
mPhysicalSlotIndex = index;
- mLogicalSlotIndex = portInfo.getLogicalSlotIndex();
mIsActive = portInfo.isActive();
- mPortIndex = portInfo.getPortIndex();
} else if (DEBUG) {
Log.d(TAG, "Can not get port index and physicalSlotIndex for subId "
+ subInfo.getSubscriptionId());
@@ -433,7 +420,7 @@
mMobileNetworkDatabase.insertSubsInfo(subInfoEntity);
mMetricsFeatureProvider.action(mContext,
SettingsEnums.ACTION_MOBILE_NETWORK_DB_INSERT_SUB_INFO, subId);
- insertUiccInfo(subId, telephonyManager);
+ insertUiccInfo(subId);
insertMobileNetworkInfo(subId, telephonyManager);
}
} else if (DEBUG) {
@@ -488,8 +475,8 @@
}
}
- private void insertUiccInfo(int subId, TelephonyManager telephonyManager) {
- UiccInfoEntity uiccInfoEntity = convertToUiccInfoEntity(subId, telephonyManager);
+ private void insertUiccInfo(int subId) {
+ UiccInfoEntity uiccInfoEntity = convertToUiccInfoEntity(subId);
if (DEBUG) {
Log.d(TAG, "uiccInfoEntity = " + uiccInfoEntity);
}
@@ -532,27 +519,8 @@
);
}
- private UiccInfoEntity convertToUiccInfoEntity(int subId, TelephonyManager telephonyManager) {
- return new UiccInfoEntity(String.valueOf(subId), String.valueOf(mPhysicalSlotIndex),
- mLogicalSlotIndex, mCardId, mIsEuicc,
- isMultipleEnabledProfilesSupported(telephonyManager), mCardState, mIsRemovable,
- mIsActive, mPortIndex
- );
- }
-
- private boolean isMultipleEnabledProfilesSupported(TelephonyManager telephonyManager) {
- if (telephonyManager == null) {
- Log.d(TAG, "TelephonyManager is null");
- return false;
- }
-
- List<UiccCardInfo> cardInfos = telephonyManager.getUiccCardsInfo();
- if (cardInfos == null) {
- Log.d(TAG, "UICC card info list is empty.");
- return false;
- }
- return cardInfos.stream().anyMatch(
- cardInfo -> cardInfo.isMultipleEnabledProfilesSupported());
+ private UiccInfoEntity convertToUiccInfoEntity(int subId) {
+ return new UiccInfoEntity(String.valueOf(subId), mIsActive);
}
@Override
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index 4c18309..915fe17 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -160,7 +160,8 @@
static final int CHOOSE_LOCK_BEFORE_BIOMETRIC_REQUEST = 103;
@VisibleForTesting
static final int SKIP_FINGERPRINT_REQUEST = 104;
- private static final int BIOMETRIC_AUTH_REQUEST = 105;
+ @VisibleForTesting
+ static final int BIOMETRIC_AUTH_REQUEST = 105;
private LockPatternUtils mLockPatternUtils;
private DevicePolicyManager mDpm;
diff --git a/src/com/android/settings/sim/smartForwarding/SmartForwardingFragment.java b/src/com/android/settings/sim/smartForwarding/SmartForwardingFragment.java
index a95eb38..f847147 100644
--- a/src/com/android/settings/sim/smartForwarding/SmartForwardingFragment.java
+++ b/src/com/android/settings/sim/smartForwarding/SmartForwardingFragment.java
@@ -48,8 +48,7 @@
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.smart_forwarding_switch, rootKey);
- String title = getResources().getString(R.string.smart_forwarding_title);
- getActivity().getActionBar().setTitle(title);
+ getActivity().setTitle(R.string.smart_forwarding_title);
TwoStatePreference smartForwardingSwitch = findPreference(KEY_SMART_FORWARDING_SWITCH);
if (turnOffSwitch) {
diff --git a/src/com/android/settings/spa/core/instrumentation/SpaLogProvider.kt b/src/com/android/settings/spa/core/instrumentation/SpaLogProvider.kt
index 8659bf5..4377ccc 100644
--- a/src/com/android/settings/spa/core/instrumentation/SpaLogProvider.kt
+++ b/src/com/android/settings/spa/core/instrumentation/SpaLogProvider.kt
@@ -28,7 +28,6 @@
import com.android.settingslib.spa.framework.util.SESSION_BROWSE
import com.android.settingslib.spa.framework.util.SESSION_EXTERNAL
import com.android.settingslib.spa.framework.util.SESSION_SEARCH
-import com.android.settingslib.spa.framework.util.SESSION_SLICE
import com.android.settingslib.spa.framework.util.SESSION_UNKNOWN
/**
@@ -74,7 +73,6 @@
return when(sessionSource) {
SESSION_BROWSE -> SettingsEnums.SESSION_BROWSE
SESSION_SEARCH -> SettingsEnums.SESSION_SEARCH
- SESSION_SLICE -> SettingsEnums.SESSION_SLICE_TYPE
SESSION_EXTERNAL -> SettingsEnums.SESSION_EXTERNAL
else -> SettingsEnums.SESSION_UNKNOWN
}
diff --git a/src/com/android/settings/wifi/WifiConfigInfo.java b/src/com/android/settings/wifi/WifiConfigInfo.java
index 0de3063..16a4446 100644
--- a/src/com/android/settings/wifi/WifiConfigInfo.java
+++ b/src/com/android/settings/wifi/WifiConfigInfo.java
@@ -37,6 +37,7 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ WifiUtils.setupEdgeToEdge(this);
mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
setContentView(R.layout.wifi_config_info);
diff --git a/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceController.java b/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceController.java
deleted file mode 100644
index ae44b93..0000000
--- a/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceController.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.settings.wifi;
-
-import android.content.Context;
-
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.R;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.widget.GenericSwitchController;
-import com.android.settings.widget.SummaryUpdater;
-import com.android.settingslib.PrimarySwitchPreference;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnPause;
-import com.android.settingslib.core.lifecycle.events.OnResume;
-import com.android.settingslib.core.lifecycle.events.OnStart;
-import com.android.settingslib.core.lifecycle.events.OnStop;
-
-/**
- * PreferenceController to update the wifi state.
- */
-// TODO(b/167474581): Should clean up this controller when Provider Model finished.
-public class WifiPrimarySwitchPreferenceController extends AbstractPreferenceController
- implements PreferenceControllerMixin, SummaryUpdater.OnSummaryChangeListener,
- LifecycleObserver, OnResume, OnPause, OnStart, OnStop {
- //TODO(b/151133650): Replace AbstractPreferenceController with BasePreferenceController.
-
- public static final String KEY_TOGGLE_WIFI = "main_toggle_wifi";
-
- private PrimarySwitchPreference mWifiPreference;
- private WifiEnabler mWifiEnabler;
- private final WifiSummaryUpdater mSummaryHelper;
- private final MetricsFeatureProvider mMetricsFeatureProvider;
-
- public WifiPrimarySwitchPreferenceController(Context context,
- MetricsFeatureProvider metricsFeatureProvider) {
- super(context);
- mMetricsFeatureProvider = metricsFeatureProvider;
- mSummaryHelper = new WifiSummaryUpdater(mContext, this);
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- mWifiPreference = screen.findPreference(KEY_TOGGLE_WIFI);
- }
-
- @Override
- public boolean isAvailable() {
- return mContext.getResources().getBoolean(R.bool.config_show_wifi_settings);
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_TOGGLE_WIFI;
- }
-
- @Override
- public void onResume() {
- mSummaryHelper.register(true);
- if (mWifiEnabler != null) {
- mWifiEnabler.resume(mContext);
- }
- }
-
- @Override
- public void onPause() {
- if (mWifiEnabler != null) {
- mWifiEnabler.pause();
- }
- mSummaryHelper.register(false);
- }
-
- @Override
- public void onStart() {
- mWifiEnabler = new WifiEnabler(mContext, new GenericSwitchController(mWifiPreference),
- mMetricsFeatureProvider);
- }
-
- @Override
- public void onStop() {
- if (mWifiEnabler != null) {
- mWifiEnabler.teardownSwitchController();
- }
- }
-
- @Override
- public void onSummaryChanged(String summary) {
- if (mWifiPreference != null) {
- mWifiPreference.setSummary(summary);
- }
- }
-
-}
diff --git a/src/com/android/settings/wifi/WifiStatusTest.java b/src/com/android/settings/wifi/WifiStatusTest.java
index b4f3ab6..b9b1d70 100644
--- a/src/com/android/settings/wifi/WifiStatusTest.java
+++ b/src/com/android/settings/wifi/WifiStatusTest.java
@@ -115,6 +115,7 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ WifiUtils.setupEdgeToEdge(this);
mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
diff --git a/src/com/android/settings/wifi/WifiUtils.java b/src/com/android/settings/wifi/WifiUtils.java
index 68d8beb..e307bcf 100644
--- a/src/com/android/settings/wifi/WifiUtils.java
+++ b/src/com/android/settings/wifi/WifiUtils.java
@@ -16,6 +16,8 @@
package com.android.settings.wifi;
+import android.app.ActionBar;
+import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -32,8 +34,13 @@
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
+import android.util.TypedValue;
+import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
+import androidx.core.graphics.Insets;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
import com.android.settings.R;
import com.android.settings.Utils;
@@ -308,4 +315,34 @@
public static void setCanShowWifiHotspotCached(Boolean cached) {
sCanShowWifiHotspotCached = cached;
}
+
+ /**
+ * Enable new edge to edge feature.
+ *
+ * @param activity the Activity need to setup the edge to edge feature.
+ */
+ public static void setupEdgeToEdge(@NonNull Activity activity) {
+ final ActionBar actionBar = activity.getActionBar();
+ if (actionBar == null) {
+ return;
+ }
+
+ final TypedValue typedValue = new TypedValue();
+ if (activity.getTheme().resolveAttribute(
+ com.android.internal.R.attr.actionBarSize, typedValue, true)) {
+ ViewCompat.setOnApplyWindowInsetsListener(activity.findViewById(android.R.id.content),
+ (v, windowInsets) -> {
+ Insets insets = windowInsets.getInsets(
+ WindowInsetsCompat.Type.systemBars() |
+ WindowInsetsCompat.Type.ime());
+
+ // Apply the insets paddings to the view.
+ v.setPadding(insets.left, insets.top, insets.right, insets.bottom);
+
+ // Return CONSUMED if you don't want the window insets to keep being
+ // passed down to descendant views.
+ return WindowInsetsCompat.CONSUMED;
+ });
+ }
+ }
}
diff --git a/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java b/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java
index 8593860..a775731 100644
--- a/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java
@@ -24,7 +24,9 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
@@ -36,9 +38,12 @@
import android.content.Context;
import android.content.Intent;
import android.hardware.biometrics.BiometricManager;
+import android.hardware.biometrics.Flags;
import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
import android.util.AndroidRuntimeException;
import android.view.LayoutInflater;
import android.view.View;
@@ -57,6 +62,7 @@
import com.android.settings.biometrics.face.FaceStatusPreferenceController;
import com.android.settings.biometrics.fingerprint.FingerprintStatusPreferenceController;
import com.android.settings.password.ChooseLockSettingsHelper;
+import com.android.settings.password.ConfirmDeviceCredentialActivity;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowFragment;
import com.android.settings.testutils.shadow.ShadowSettingsPreferenceFragment;
@@ -92,6 +98,8 @@
@Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Rule
+ public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@Captor
private ArgumentCaptor<Preference> mPreferenceCaptor;
@Mock
@@ -169,6 +177,26 @@
}
@Test
+ @EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
+ public void testLaunchBiometricPrompt_onCreateFragment() {
+ ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
+ doNothing().when(mFragment).startActivityForResult(any(), anyInt());
+ when(mBiometricManager.canAuthenticate(
+ BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
+ .thenReturn(BiometricManager.BIOMETRIC_SUCCESS);
+
+ mFragment.onAttach(mContext);
+ mFragment.onCreate(null);
+
+ verify(mFragment).startActivityForResult(intentArgumentCaptor.capture(),
+ eq(BiometricsSettingsBase.BIOMETRIC_AUTH_REQUEST));
+
+ Intent intent = intentArgumentCaptor.getValue();
+ assertThat(intent.getComponent().getClassName()).isEqualTo(
+ ConfirmDeviceCredentialActivity.class.getName());
+ }
+
+ @Test
public void testClickFingerprintUnlockWithValidGkPwHandle() {
doAnswer(invocation -> {
final FingerprintManager.GenerateChallengeCallback callback =
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
index 58e7e2d..4ef3223 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
@@ -19,6 +19,7 @@
import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_POWER_BUTTON;
import static android.hardware.fingerprint.FingerprintSensorProperties.TYPE_UDFPS_OPTICAL;
+import static com.android.settings.biometrics.BiometricEnrollBase.BIOMETRIC_AUTH_REQUEST;
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment;
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.CHOOSE_LOCK_GENERIC_REQUEST;
import static com.android.settings.biometrics.fingerprint.FingerprintSettings.FingerprintSettingsFragment.KEY_REQUIRE_SCREEN_ON_TO_AUTH;
@@ -34,11 +35,14 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.Intent;
import android.content.pm.UserInfo;
+import android.hardware.biometrics.BiometricManager;
import android.hardware.biometrics.ComponentInfoInternal;
+import android.hardware.biometrics.Flags;
import android.hardware.biometrics.SensorProperties;
import android.hardware.fingerprint.FingerprintManager;
import android.hardware.fingerprint.FingerprintSensorProperties;
@@ -46,6 +50,8 @@
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.UserHandle;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.ViewGroup;
@@ -56,6 +62,7 @@
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.password.ChooseLockSettingsHelper;
+import com.android.settings.password.ConfirmDeviceCredentialActivity;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowFragment;
import com.android.settings.testutils.shadow.ShadowLockPatternUtils;
@@ -85,6 +92,11 @@
@Config(shadows = {ShadowSettingsPreferenceFragment.class, ShadowUtils.class, ShadowFragment.class,
ShadowUserManager.class, ShadowLockPatternUtils.class})
public class FingerprintSettingsFragmentTest {
+ @Rule
+ public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+
private static final int PRIMARY_USER_ID = 0;
private static final int GUEST_USER_ID = 10;
@@ -92,12 +104,12 @@
private Context mContext;
private FragmentActivity mActivity;
- @Rule
- public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@Mock
private FingerprintManager mFingerprintManager;
@Mock
private FragmentTransaction mFragmentTransaction;
+ @Mock
+ private BiometricManager mBiometricManager;
@Captor
private ArgumentCaptor<CancellationSignal> mCancellationSignalArgumentCaptor =
@@ -117,8 +129,11 @@
mContext = spy(ApplicationProvider.getApplicationContext());
mFragment = spy(new FingerprintSettingsFragment());
doReturn(mContext).when(mFragment).getContext();
-
+ doReturn(mBiometricManager).when(mContext).getSystemService(BiometricManager.class);
doReturn(true).when(mFingerprintManager).isHardwareDetected();
+ when(mBiometricManager.canAuthenticate(
+ BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
+ .thenReturn(BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE);
}
@After
@@ -139,6 +154,25 @@
false)).isTrue();
}
+ @Test
+ @EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
+ public void testLaunchBiometricPromptForFingerprint() {
+ when(mBiometricManager.canAuthenticate(
+ BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
+ .thenReturn(BiometricManager.BIOMETRIC_SUCCESS);
+
+ setUpFragment(false);
+ ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(
+ Intent.class);
+
+ verify(mFragment).startActivityForResult(intentArgumentCaptor.capture(),
+ eq(BIOMETRIC_AUTH_REQUEST));
+
+ Intent intent = intentArgumentCaptor.getValue();
+ assertThat(intent.getComponent().getClassName()).isEqualTo(
+ ConfirmDeviceCredentialActivity.class.getName());
+ }
+
// Test the case when FingerprintAuthenticateSidecar receives an error callback from the
// framework or from another authentication client. The cancellation signal should not be set
// to null because there may exist a running authentication client.
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
index e7e0b92..204bfe5 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockGenericTest.java
@@ -50,9 +50,13 @@
import android.app.admin.PasswordPolicy;
import android.content.Context;
import android.content.Intent;
+import android.hardware.biometrics.BiometricManager;
+import android.hardware.biometrics.Flags;
import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
import android.provider.Settings.Global;
import android.widget.TextView;
@@ -86,9 +90,13 @@
import org.mockito.junit.MockitoRule;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.Shadows;
import org.robolectric.android.controller.ActivityController;
import org.robolectric.annotation.Config;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowActivity;
import org.robolectric.shadows.ShadowApplication;
+import org.robolectric.shadows.ShadowBiometricManager;
@RunWith(RobolectricTestRunner.class)
@Config(
@@ -98,18 +106,23 @@
ShadowStorageManager.class,
ShadowUserManager.class,
ShadowUtils.class,
- ShadowInteractionJankMonitor.class
+ ShadowInteractionJankMonitor.class,
+ ShadowBiometricManager.class
})
@Ignore("b/179136903: Tests failed with collapsing toolbar, plan to figure out root cause later.")
public class ChooseLockGenericTest {
@Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Rule
+ public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
private ActivityController<ChooseLockGeneric> mActivityController;
private FakeFeatureFactory mFakeFeatureFactory;
private ChooseLockGenericFragment mFragment;
private ChooseLockGeneric mActivity;
+ private ShadowBiometricManager mShadowBiometricManager;
+ private ShadowActivity mShadowActivity;
@Mock
private FingerprintManager mFingerprintManager;
@Mock
@@ -125,6 +138,7 @@
.postCreate(null)
.resume()
.get();
+ mShadowActivity = Shadows.shadowOf(mActivity);
Global.putInt(application.getContentResolver(), Global.DEVICE_PROVISIONED, 1);
mFragment = new ChooseLockGenericFragment();
@@ -295,6 +309,21 @@
}
@Test
+ @EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
+ public void onActivityResult_requestcode100_shouldLaunchBiometricPrompt() {
+ initActivity(null);
+ mShadowBiometricManager.setCanAuthenticate(true);
+
+ mFragment.onActivityResult(
+ ChooseLockGenericFragment.CONFIRM_EXISTING_REQUEST,
+ Activity.RESULT_OK, null /* data */);
+
+ assertThat(mActivity.isFinishing()).isFalse();
+ assertThat(mShadowActivity.getNextStartedActivity().getComponent().getClassName())
+ .isEqualTo(ConfirmDeviceCredentialActivity.class.getName());
+ }
+
+ @Test
public void onActivityResult_requestcode102_shouldFinish() {
initActivity(null);
@@ -337,6 +366,17 @@
}
@Test
+ public void onActivityResult_requestcode105_shouldNotFinish() {
+ initActivity(null);
+
+ mFragment.onActivityResult(
+ ChooseLockGenericFragment.BIOMETRIC_AUTH_REQUEST, Activity.RESULT_OK,
+ null /* data */);
+
+ assertThat(mActivity.isFinishing()).isFalse();
+ }
+
+ @Test
public void securedScreenLock_notChangingConfig_notWaitForConfirmation_onStopFinishSelf() {
Intent intent = new Intent().putExtra(
LockPatternUtils.PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_NUMERIC);
@@ -676,6 +716,13 @@
mActivity = Robolectric.buildActivity(ChooseLockGeneric.InternalActivity.class, intent)
.create().start().postCreate(null).resume().get();
mActivity.getSupportFragmentManager().beginTransaction().add(mFragment, null).commitNow();
+ mShadowBiometricManager = Shadow.extract(mFragment.getContext().getSystemService(
+ BiometricManager.class));
+ //TODO(b/352603684): Should be Authenticators.MANDATORY_BIOMETRICS,
+ // but it is not supported by ShadowBiometricManager
+ mShadowBiometricManager.setAuthenticatorType(
+ BiometricManager.Authenticators.BIOMETRIC_STRONG);
+ mShadowBiometricManager.setCanAuthenticate(false);
}
private static String capitalize(final String input) {
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceControllerTest.java
deleted file mode 100644
index 9204d43..0000000
--- a/tests/robotests/src/com/android/settings/wifi/WifiPrimarySwitchPreferenceControllerTest.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.wifi;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.ConnectivityManager;
-import android.net.NetworkRequest;
-import android.net.NetworkScoreManager;
-import android.net.wifi.WifiManager;
-import android.os.Handler;
-
-import androidx.preference.Preference.OnPreferenceChangeListener;
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal;
-import com.android.settingslib.PrimarySwitchPreference;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-@RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowRestrictedLockUtilsInternal.class)
-public class WifiPrimarySwitchPreferenceControllerTest {
-
- @Mock
- private Intent mIntentReceiver;
- @Mock
- private WifiManager mWifiManager;
- @Mock
- private PreferenceScreen mScreen;
- @Mock
- private PrimarySwitchPreference mPreference;
- @Mock
- private ConnectivityManager mConnectivityManager;
- @Mock
- private NetworkScoreManager mNetworkScoreManager;
-
- private Context mContext;
- private WifiPrimarySwitchPreferenceController mController;
- private MetricsFeatureProvider mMetricsFeatureProvider;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mMetricsFeatureProvider = FakeFeatureFactory.setupForTest().getMetricsFeatureProvider();
- mContext = spy(RuntimeEnvironment.application.getApplicationContext());
- doReturn(mIntentReceiver).when(mContext)
- .registerReceiver(any(BroadcastReceiver.class), any(IntentFilter.class), anyInt());
- doNothing().when(mContext).unregisterReceiver(any(BroadcastReceiver.class));
- when(mContext.getSystemService(ConnectivityManager.class)).thenReturn(mConnectivityManager);
- when(mContext.getSystemService(NetworkScoreManager.class)).thenReturn(mNetworkScoreManager);
- mController = new WifiPrimarySwitchPreferenceController(mContext, mMetricsFeatureProvider);
- when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
- when(mContext.getSystemService(Context.WIFI_SERVICE)).thenReturn(mWifiManager);
- when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_DISABLED);
- }
-
- @Test
- public void testWifiPrimarySwitch_byDefault_shouldBeShown() {
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Test
- @Config(qualifiers = "mcc999")
- public void testWifiPrimarySwitch_ifDisabled_shouldNotBeShown() {
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void onResume_shouldRegisterCallback() {
- mController.onResume();
-
- verify(mContext).registerReceiver(
- any(BroadcastReceiver.class), any(IntentFilter.class), anyInt());
- verify(mConnectivityManager).registerNetworkCallback(
- any(NetworkRequest.class),
- any(ConnectivityManager.NetworkCallback.class),
- any(Handler.class));
- }
-
- @Test
- public void onPause_shouldUnregisterCallback() {
- mController.onResume();
- mController.onPause();
-
- verify(mContext).unregisterReceiver(any(BroadcastReceiver.class));
- verify(mConnectivityManager, times(2)).unregisterNetworkCallback(
- any(ConnectivityManager.NetworkCallback.class));
- }
-
- @Test
- public void onStart_shouldRegisterPreferenceChangeListener() {
- mController.displayPreference(mScreen);
- mController.onStart();
-
- verify(mPreference).setOnPreferenceChangeListener(any(OnPreferenceChangeListener.class));
- }
-
- @Test
- public void onStop_shouldRegisterPreferenceChangeListener() {
- mController.displayPreference(mScreen);
- mController.onStart();
-
- mController.onStop();
-
- verify(mPreference).setOnPreferenceChangeListener(null);
- }
-
- @Test
- public void onSummaryChanged_shouldUpdatePreferenceSummary() {
- mController.displayPreference(mScreen);
-
- mController.onSummaryChanged("test summary");
-
- verify(mPreference).setSummary("test summary");
- }
-}
diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppInstallerInfoPreferenceTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppInstallerInfoPreferenceTest.kt
index 96e4707..6297c62 100644
--- a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppInstallerInfoPreferenceTest.kt
+++ b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppInstallerInfoPreferenceTest.kt
@@ -68,7 +68,6 @@
@Before
fun setUp() {
mockSession = mockitoSession()
- .initMocks(this)
.mockStatic(AppStoreUtil::class.java)
.mockStatic(Utils::class.java)
.mockStatic(AppUtils::class.java)
@@ -77,8 +76,7 @@
whenever(AppStoreUtil.getInstallerPackageName(any(), eq(PACKAGE_NAME)))
.thenReturn(INSTALLER_PACKAGE_NAME)
whenever(AppStoreUtil.getInstallerPackageNameAndInstallSourceInfo(any(), eq(PACKAGE_NAME)))
- .thenReturn(
- Pair<String, InstallSourceInfo>(INSTALLER_PACKAGE_NAME, INSTALL_SOURCE_INFO))
+ .thenReturn(Pair(INSTALLER_PACKAGE_NAME, INSTALL_SOURCE_INFO))
whenever(AppStoreUtil.getAppStoreLink(context, INSTALLER_PACKAGE_NAME, PACKAGE_NAME))
.thenReturn(STORE_LINK)
whenever(AppStoreUtil.isInitiatedFromDifferentPackage(eq(INSTALL_SOURCE_INFO)))
@@ -97,7 +95,8 @@
@Test
fun whenNoInstaller_notDisplayed() {
- whenever(AppStoreUtil.getInstallerPackageName(any(), eq(PACKAGE_NAME))).thenReturn(null)
+ whenever(AppStoreUtil.getInstallerPackageNameAndInstallSourceInfo(any(), eq(PACKAGE_NAME)))
+ .thenReturn(Pair(null, INSTALL_SOURCE_INFO))
setContent()
diff --git a/tests/spa_unit/src/com/android/settings/spa/app/backgroundinstall/BackgroundInstalledAppsPageProviderTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/backgroundinstall/BackgroundInstalledAppsPageProviderTest.kt
index 5c65da1..6a6b91b 100644
--- a/tests/spa_unit/src/com/android/settings/spa/app/backgroundinstall/BackgroundInstalledAppsPageProviderTest.kt
+++ b/tests/spa_unit/src/com/android/settings/spa/app/backgroundinstall/BackgroundInstalledAppsPageProviderTest.kt
@@ -23,6 +23,7 @@
import android.content.pm.PackageManager
import android.content.pm.ParceledListSlice
import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.hasText
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
@@ -30,6 +31,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.settings.R
import com.android.settingslib.spa.testutils.FakeNavControllerWrapper
+import com.android.settingslib.spa.testutils.waitUntilExists
import com.android.settingslib.spaprivileged.template.app.AppListItemModel
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.flow.first
@@ -146,8 +148,9 @@
BackgroundInstalledAppList()
}
- composeTestRule.onNodeWithText(
- context.getString(R.string.background_install_title)).assertIsDisplayed()
+ composeTestRule.waitUntilExists(
+ hasText(context.getString(R.string.background_install_title))
+ )
}
@Test
diff --git a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
index dc15f0b..d7241b9 100644
--- a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
+++ b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt
@@ -40,7 +40,6 @@
import com.android.settings.notification.syncacrossdevices.SyncAcrossDevicesFeatureProvider
import com.android.settings.overlay.DockUpdaterFeatureProvider
import com.android.settings.overlay.FeatureFactory
-import com.android.settings.overlay.SurveyFeatureProvider
import com.android.settings.panel.PanelFeatureProvider
import com.android.settings.privatespace.PrivateSpaceLoginFeatureProvider
import com.android.settings.search.SearchFeatureProvider
@@ -98,9 +97,7 @@
override val searchFeatureProvider: SearchFeatureProvider
get() = TODO("Not yet implemented")
- override fun getSurveyFeatureProvider(context: Context): SurveyFeatureProvider? {
- TODO("Not yet implemented")
- }
+ override fun getSurveyFeatureProvider(context: Context) = null
override val securityFeatureProvider: SecurityFeatureProvider
get() = TODO("Not yet implemented")