Updated PreferenceController to enable or disable the preference based
on availability status.
PreferenceController now disables the preference if availability status
is AVAILABLE_FOR_VIEWING.
Bug: 139534680
Test: Manual, robolectric
Merged-In: I82a2321d3195a68f27d42b20183c93d07e238bf7
Change-Id: I82a2321d3195a68f27d42b20183c93d07e238bf7
diff --git a/src/com/android/car/settings/common/PreferenceController.java b/src/com/android/car/settings/common/PreferenceController.java
index 5dfe4ee..4aa8fcf 100644
--- a/src/com/android/car/settings/common/PreferenceController.java
+++ b/src/com/android/car/settings/common/PreferenceController.java
@@ -94,7 +94,8 @@
* @see #getAvailabilityStatus()
*/
@Retention(RetentionPolicy.SOURCE)
- @IntDef({AVAILABLE, CONDITIONALLY_UNAVAILABLE, UNSUPPORTED_ON_DEVICE, DISABLED_FOR_USER})
+ @IntDef({AVAILABLE, CONDITIONALLY_UNAVAILABLE, UNSUPPORTED_ON_DEVICE, DISABLED_FOR_USER,
+ AVAILABLE_FOR_VIEWING})
public @interface AvailabilityStatus {
}
@@ -120,6 +121,11 @@
public static final int DISABLED_FOR_USER = 3;
/**
+ * The setting cannot be changed.
+ */
+ public static final int AVAILABLE_FOR_VIEWING = 4;
+
+ /**
* Indicates whether all Preferences are configured to ignore UX Restrictions Event.
*/
private final boolean mAlwaysIgnoreUxRestrictions;
@@ -236,9 +242,10 @@
if (!mIsCreated) {
return;
}
- if (getAvailabilityStatus() == AVAILABLE) {
+
+ if (isAvailable()) {
mPreference.setVisible(true);
- mPreference.setEnabled(true);
+ mPreference.setEnabled(getAvailabilityStatus() != AVAILABLE_FOR_VIEWING);
updateState(mPreference);
onApplyUxRestrictions(mUxRestrictions);
} else {
@@ -246,6 +253,11 @@
}
}
+ private boolean isAvailable() {
+ int availabilityStatus = getAvailabilityStatus();
+ return availabilityStatus == AVAILABLE || availabilityStatus == AVAILABLE_FOR_VIEWING;
+ }
+
// Controller lifecycle ========================================================================
/**
@@ -346,8 +358,8 @@
/**
* Returns the {@link AvailabilityStatus} for the setting. This status is used to determine
- * if the setting should be shown or hidden. Defaults to {@link #AVAILABLE}. This will be
- * called before the controller lifecycle begins and on refresh events.
+ * if the setting should be shown, hidden, or disabled. Defaults to {@link #AVAILABLE}. This
+ * will be called before the controller lifecycle begins and on refresh events.
*/
@AvailabilityStatus
protected int getAvailabilityStatus() {
diff --git a/src/com/android/car/settings/system/BluetoothMacAddressPreferenceController.java b/src/com/android/car/settings/system/BluetoothMacAddressPreferenceController.java
index 05f9c60..e26db97 100644
--- a/src/com/android/car/settings/system/BluetoothMacAddressPreferenceController.java
+++ b/src/com/android/car/settings/system/BluetoothMacAddressPreferenceController.java
@@ -48,7 +48,7 @@
if (!getContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)) {
return UNSUPPORTED_ON_DEVICE;
}
- return super.getAvailabilityStatus();
+ return AVAILABLE_FOR_VIEWING;
}
@Override
diff --git a/src/com/android/car/settings/system/FirmwareVersionPreferenceController.java b/src/com/android/car/settings/system/FirmwareVersionPreferenceController.java
index 0d24dec..31aef17 100644
--- a/src/com/android/car/settings/system/FirmwareVersionPreferenceController.java
+++ b/src/com/android/car/settings/system/FirmwareVersionPreferenceController.java
@@ -44,4 +44,9 @@
preference.setSummary(
getContext().getString(R.string.about_summary, Build.VERSION.RELEASE));
}
+
+ @Override
+ protected int getAvailabilityStatus() {
+ return AVAILABLE_FOR_VIEWING;
+ }
}
diff --git a/src/com/android/car/settings/system/KernelVersionPreferenceController.java b/src/com/android/car/settings/system/KernelVersionPreferenceController.java
index 1d18523..2e82084 100644
--- a/src/com/android/car/settings/system/KernelVersionPreferenceController.java
+++ b/src/com/android/car/settings/system/KernelVersionPreferenceController.java
@@ -42,4 +42,9 @@
protected void updateState(Preference preference) {
preference.setSummary(DeviceInfoUtils.getFormattedKernelVersion(getContext()));
}
+
+ @Override
+ protected int getAvailabilityStatus() {
+ return AVAILABLE_FOR_VIEWING;
+ }
}
diff --git a/src/com/android/car/settings/system/ModelInfoPreferenceController.java b/src/com/android/car/settings/system/ModelInfoPreferenceController.java
index 4fd8b53..126176f 100644
--- a/src/com/android/car/settings/system/ModelInfoPreferenceController.java
+++ b/src/com/android/car/settings/system/ModelInfoPreferenceController.java
@@ -43,4 +43,9 @@
protected void updateState(Preference preference) {
preference.setSummary(Build.MODEL + DeviceInfoUtils.getMsvSuffix());
}
+
+ @Override
+ protected int getAvailabilityStatus() {
+ return AVAILABLE_FOR_VIEWING;
+ }
}
diff --git a/src/com/android/car/settings/system/SecurityPatchPreferenceController.java b/src/com/android/car/settings/system/SecurityPatchPreferenceController.java
index f48357c..fa697a2 100644
--- a/src/com/android/car/settings/system/SecurityPatchPreferenceController.java
+++ b/src/com/android/car/settings/system/SecurityPatchPreferenceController.java
@@ -42,4 +42,9 @@
protected void updateState(Preference preference) {
preference.setSummary(DeviceInfoUtils.getSecurityPatch());
}
+
+ @Override
+ protected int getAvailabilityStatus() {
+ return AVAILABLE_FOR_VIEWING;
+ }
}
diff --git a/src/com/android/car/settings/system/WifiMacAddressPreferenceController.java b/src/com/android/car/settings/system/WifiMacAddressPreferenceController.java
index 0ef369a..0a0d063 100644
--- a/src/com/android/car/settings/system/WifiMacAddressPreferenceController.java
+++ b/src/com/android/car/settings/system/WifiMacAddressPreferenceController.java
@@ -50,7 +50,7 @@
|| !getContext().getResources().getBoolean(R.bool.config_show_wifi_mac_address)) {
return UNSUPPORTED_ON_DEVICE;
}
- return super.getAvailabilityStatus();
+ return AVAILABLE_FOR_VIEWING;
}
protected void init(Context context) {
diff --git a/tests/robotests/src/com/android/car/settings/common/PreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/common/PreferenceControllerTest.java
index b51db10..29d0622 100644
--- a/tests/robotests/src/com/android/car/settings/common/PreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/common/PreferenceControllerTest.java
@@ -17,6 +17,7 @@
package com.android.car.settings.common;
import static com.android.car.settings.common.PreferenceController.AVAILABLE;
+import static com.android.car.settings.common.PreferenceController.AVAILABLE_FOR_VIEWING;
import static com.android.car.settings.common.PreferenceController.CONDITIONALLY_UNAVAILABLE;
import static com.android.car.settings.common.PreferenceController.UNSUPPORTED_ON_DEVICE;
@@ -25,7 +26,7 @@
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.testng.Assert.assertThrows;
@@ -246,24 +247,35 @@
}
@Test
- public void refreshUi_created_available_preferenceShown() {
+ public void refreshUi_created_available_preferenceShownAndEnabled() {
mControllerHelper.markState(Lifecycle.State.CREATED);
+ reset(mPreference);
mController.refreshUi();
- // onCreate, refreshUi.
- verify(mPreference, times(2)).setVisible(true);
+ verify(mPreference).setVisible(true);
+ verify(mPreference).setEnabled(true);
}
+ @Test
+ public void refreshUi_created_availableForViewing_preferenceShownAndDisabled() {
+ mController.setAvailabilityStatus(AVAILABLE_FOR_VIEWING);
+ mControllerHelper.markState(Lifecycle.State.CREATED);
+ reset(mPreference);
+ mController.refreshUi();
+
+ verify(mPreference).setVisible(true);
+ verify(mPreference).setEnabled(false);
+ }
@Test
public void refreshUi_created_notAvailable_preferenceHidden() {
mController.setAvailabilityStatus(CONDITIONALLY_UNAVAILABLE);
mControllerHelper.markState(Lifecycle.State.CREATED);
+ reset(mPreference);
mController.refreshUi();
- // onCreate, refreshUi.
- verify(mPreference, times(2)).setVisible(false);
+ verify(mPreference).setVisible(false);
}
@Test
diff --git a/tests/robotests/src/com/android/car/settings/system/BluetoothMacAddressPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/system/BluetoothMacAddressPreferenceControllerTest.java
index ade3c89..a96d0a1 100644
--- a/tests/robotests/src/com/android/car/settings/system/BluetoothMacAddressPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/system/BluetoothMacAddressPreferenceControllerTest.java
@@ -18,7 +18,7 @@
import static android.content.pm.PackageManager.FEATURE_BLUETOOTH;
-import static com.android.car.settings.common.PreferenceController.AVAILABLE;
+import static com.android.car.settings.common.PreferenceController.AVAILABLE_FOR_VIEWING;
import static com.android.car.settings.common.PreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.google.common.truth.Truth.assertThat;
@@ -98,12 +98,12 @@
}
@Test
- public void getAvailabilityStatus_enableDefaultAdapter_available() {
+ public void getAvailabilityStatus_enableDefaultAdapter_availableForViewing() {
Shadows.shadowOf(mContext.getPackageManager()).setSystemFeature(
FEATURE_BLUETOOTH, /* supported= */ true);
assertThat(mControllerHelper.getController().getAvailabilityStatus()).isEqualTo(
- AVAILABLE);
+ AVAILABLE_FOR_VIEWING);
}
private ShadowBluetoothAdapter getShadowBluetoothAdapter() {
diff --git a/tests/robotests/src/com/android/car/settings/system/WifiMacAddressPreferenceControllerTest.java b/tests/robotests/src/com/android/car/settings/system/WifiMacAddressPreferenceControllerTest.java
index 512aa42..f475dcb 100644
--- a/tests/robotests/src/com/android/car/settings/system/WifiMacAddressPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/car/settings/system/WifiMacAddressPreferenceControllerTest.java
@@ -16,7 +16,7 @@
package com.android.car.settings.system;
-import static com.android.car.settings.common.PreferenceController.AVAILABLE;
+import static com.android.car.settings.common.PreferenceController.AVAILABLE_FOR_VIEWING;
import static com.android.car.settings.common.PreferenceController.UNSUPPORTED_ON_DEVICE;
import static com.google.common.truth.Truth.assertThat;
@@ -76,12 +76,12 @@
}
@Test
- public void getAvailabilityStatus_wifiAvailable_available() {
+ public void getAvailabilityStatus_wifiAvailable_availableForViewing() {
Shadows.shadowOf(mContext.getPackageManager()).setSystemFeature(
PackageManager.FEATURE_WIFI, /* supported= */ true);
assertThat(mControllerHelper.getController().getAvailabilityStatus())
- .isEqualTo(AVAILABLE);
+ .isEqualTo(AVAILABLE_FOR_VIEWING);
}
@Test