Add UxRestricted message to PreferenceGroup
Added missing uxrestricted toast to compatible preferences contained
inside preference groups.
Bug: 176953799
Test: manual, atest CarSettingsUnitTests
Change-Id: I8975caa1e22594b7fab720a5ee512806efb9d1d4
(cherry picked from commit 3d2f8a03374fc6730e997b4137d080d79f14820d)
diff --git a/src/com/android/car/settings/applications/specialaccess/NotificationAccessPreferenceController.java b/src/com/android/car/settings/applications/specialaccess/NotificationAccessPreferenceController.java
index fb64c77..e3f024a 100644
--- a/src/com/android/car/settings/applications/specialaccess/NotificationAccessPreferenceController.java
+++ b/src/com/android/car/settings/applications/specialaccess/NotificationAccessPreferenceController.java
@@ -39,6 +39,7 @@
import com.android.car.settings.common.FragmentController;
import com.android.car.settings.common.Logger;
import com.android.car.settings.common.PreferenceController;
+import com.android.car.ui.preference.CarUiSwitchPreference;
import com.android.settingslib.applications.ServiceListing;
import java.util.List;
@@ -149,7 +150,7 @@
LOG.e("can't find package name", e);
}
String summary = service.loadLabel(packageManager).toString();
- SwitchPreference pref = new SwitchPreference(getContext());
+ SwitchPreference pref = new CarUiSwitchPreference(getContext());
pref.setPersistent(false);
pref.setIcon(mIconDrawableFactory.getBadgedIcon(service, service.applicationInfo,
UserHandle.getUserId(service.applicationInfo.uid)));
diff --git a/src/com/android/car/settings/common/ExtraSettingsPreferenceController.java b/src/com/android/car/settings/common/ExtraSettingsPreferenceController.java
index 480c22b..7431249 100644
--- a/src/com/android/car/settings/common/ExtraSettingsPreferenceController.java
+++ b/src/com/android/car/settings/common/ExtraSettingsPreferenceController.java
@@ -109,8 +109,6 @@
@Override
protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
- super.onApplyUxRestrictions(uxRestrictions);
-
// If preference intents into an activity that's not distraction optimized, disable the
// preference. This will override the UXRE flags config_ignore_ux_restrictions and
// config_always_ignore_ux_restrictions because navigating to these non distraction
diff --git a/src/com/android/car/settings/common/PreferenceController.java b/src/com/android/car/settings/common/PreferenceController.java
index e511e09..4a5787c 100644
--- a/src/com/android/car/settings/common/PreferenceController.java
+++ b/src/com/android/car/settings/common/PreferenceController.java
@@ -25,6 +25,7 @@
import androidx.lifecycle.DefaultLifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
import com.android.car.settings.R;
import com.android.car.ui.preference.DisabledPreferenceCallback;
@@ -459,12 +460,19 @@
showMessage = true;
}
}
- setRestrictedWhileDrivingMessage(mPreference, showMessage);
+ if (mPreference instanceof PreferenceGroup) {
+ PreferenceGroup preferenceGroup = (PreferenceGroup) mPreference;
+ for (int i = 0; i < preferenceGroup.getPreferenceCount(); i++) {
+ setRestrictedWhileDrivingMessage(preferenceGroup.getPreference(i), showMessage);
+ }
+ } else {
+ setRestrictedWhileDrivingMessage(mPreference, showMessage);
+ }
}
/**
* Updates the preference restricted while driving message.
-
+ *
* @param preference the preference to update.
* @param showMessage whether or not the message should be shown.
*/
diff --git a/src/com/android/car/settings/inputmethod/KeyboardManagementPreferenceController.java b/src/com/android/car/settings/inputmethod/KeyboardManagementPreferenceController.java
index be1001f..6029469 100644
--- a/src/com/android/car/settings/inputmethod/KeyboardManagementPreferenceController.java
+++ b/src/com/android/car/settings/inputmethod/KeyboardManagementPreferenceController.java
@@ -31,6 +31,7 @@
import com.android.car.settings.common.ConfirmationDialogFragment;
import com.android.car.settings.common.FragmentController;
import com.android.car.settings.common.PreferenceController;
+import com.android.car.ui.preference.CarUiSwitchPreference;
import java.util.Collections;
import java.util.Comparator;
@@ -183,7 +184,7 @@
* @return {@code SwitchPreference} which allows a user to enable/disable an input method.
*/
private SwitchPreference createSwitchPreference(InputMethodInfo inputMethodInfo) {
- SwitchPreference switchPreference = new SwitchPreference(getContext());
+ SwitchPreference switchPreference = new CarUiSwitchPreference(getContext());
switchPreference.setKey(String.valueOf(inputMethodInfo.getId()));
switchPreference.setIcon(InputMethodUtil.getPackageIcon(mPackageManager, inputMethodInfo));
switchPreference.setTitle(InputMethodUtil.getPackageLabel(mPackageManager,
diff --git a/src/com/android/car/settings/users/PermissionsPreferenceController.java b/src/com/android/car/settings/users/PermissionsPreferenceController.java
index e8800a4..422530c 100644
--- a/src/com/android/car/settings/users/PermissionsPreferenceController.java
+++ b/src/com/android/car/settings/users/PermissionsPreferenceController.java
@@ -28,6 +28,7 @@
import com.android.car.settings.R;
import com.android.car.settings.common.FragmentController;
+import com.android.car.ui.preference.CarUiSwitchPreference;
import java.util.ArrayList;
import java.util.List;
@@ -86,7 +87,7 @@
super(context, preferenceKey, fragmentController, uxRestrictions);
for (UserPermission permission : PERMISSIONS_LIST) {
- SwitchPreference preference = new SwitchPreference(context);
+ SwitchPreference preference = new CarUiSwitchPreference(context);
preference.setTitle(permission.getPermissionTitle());
preference.getExtras().putString(PERMISSION_TYPE_KEY, permission.getPermissionKey());
preference.setOnPreferenceChangeListener((pref, newValue) -> {
diff --git a/tests/unit/src/com/android/car/settings/common/ExtraSettingsPreferenceControllerTest.java b/tests/unit/src/com/android/car/settings/common/ExtraSettingsPreferenceControllerTest.java
index 6c7d36b..ca7e998 100644
--- a/tests/unit/src/com/android/car/settings/common/ExtraSettingsPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/car/settings/common/ExtraSettingsPreferenceControllerTest.java
@@ -175,6 +175,23 @@
}
@Test
+ public void onUxRestrictionsChanged_distractionOptimized_restrictedMessageUnset() {
+ mMetaData.putBoolean(META_DATA_DISTRACTION_OPTIMIZED, true);
+ mPreferenceBundleMap.put(mPreference, mMetaData);
+ when(mExtraSettingsLoaderMock.loadPreferences(FAKE_INTENT)).thenReturn(
+ mPreferenceBundleMap);
+ mPreferenceController.setExtraSettingsLoader(mExtraSettingsLoaderMock);
+
+ mPreferenceController.onCreate(mLifecycleOwner);
+
+ Mockito.reset(mPreference);
+ mPreferenceController.onUxRestrictionsChanged(NO_SETUP_UX_RESTRICTIONS);
+
+ verify((DisabledPreferenceCallback) mPreference)
+ .setMessageToShowWhenDisabledPreferenceClicked("");
+ }
+
+ @Test
public void onCreate_hasDynamicTitleData_placeholderAdded() {
mMetaData.putString(META_DATA_PREFERENCE_TITLE_URI, FAKE_PROVIDER);
mPreferenceBundleMap.put(mPreference, mMetaData);
diff --git a/tests/unit/src/com/android/car/settings/common/PreferenceControllerTest.java b/tests/unit/src/com/android/car/settings/common/PreferenceControllerTest.java
index 9181f05..e759bca 100644
--- a/tests/unit/src/com/android/car/settings/common/PreferenceControllerTest.java
+++ b/tests/unit/src/com/android/car/settings/common/PreferenceControllerTest.java
@@ -16,6 +16,7 @@
package com.android.car.settings.common;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import android.car.drivingstate.CarUxRestrictions;
@@ -23,6 +24,8 @@
import androidx.lifecycle.LifecycleOwner;
import androidx.preference.Preference;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
import androidx.test.annotation.UiThreadTest;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -100,6 +103,31 @@
}
@Test
+ @UiThreadTest
+ public void onUxRestrictionsChanged_restricted_preferenceGroup_restrictedMessageSet() {
+ PreferenceManager preferenceManager = new PreferenceManager(mContext);
+ PreferenceScreen preferenceScreen = preferenceManager.createPreferenceScreen(mContext);
+ CarUiPreference preference1 = mock(CarUiPreference.class);
+ CarUiPreference preference2 = mock(CarUiPreference.class);
+ preferenceScreen.addPreference(preference1);
+ preferenceScreen.addPreference(preference2);
+
+ mPreferenceController.setPreference(preferenceScreen);
+ mPreferenceController.onCreate(mLifecycleOwner);
+
+ Mockito.reset(preference1);
+ Mockito.reset(preference2);
+ mPreferenceController.onUxRestrictionsChanged(NO_SETUP_UX_RESTRICTIONS);
+
+ verify((DisabledPreferenceCallback) preference1)
+ .setMessageToShowWhenDisabledPreferenceClicked(
+ ResourceTestUtils.getString(mContext, "restricted_while_driving"));
+ verify((DisabledPreferenceCallback) preference2)
+ .setMessageToShowWhenDisabledPreferenceClicked(
+ ResourceTestUtils.getString(mContext, "restricted_while_driving"));
+ }
+
+ @Test
public void onCreate_unrestricted_disabled_restrictedMessageUnset() {
mPreference.setEnabled(false);
mPreferenceController.setPreference(mPreference);