Show toast on UxRestricted preference tapped
Bug: 168308383
Bug: 149322716
Test: manual, make -j50 RunCarSettingsRoboTests ROBOTEST_FILTER=com.android.car.settings.common.SettingsFragmentTest
Change-Id: Id0800b8f2d6e534e98fe8797f5268170882a2b38
Merged-In: Id0800b8f2d6e534e98fe8797f5268170882a2b38
diff --git a/src/com/android/car/settings/common/SettingsFragment.java b/src/com/android/car/settings/common/SettingsFragment.java
index 82f0f6a..6fe250d 100644
--- a/src/com/android/car/settings/common/SettingsFragment.java
+++ b/src/com/android/car/settings/common/SettingsFragment.java
@@ -40,6 +40,7 @@
import androidx.preference.PreferenceScreen;
import com.android.car.settings.R;
+import com.android.car.ui.preference.DisabledPreferenceCallback;
import com.android.car.ui.preference.PreferenceFragment;
import com.android.car.ui.toolbar.MenuItem;
import com.android.car.ui.toolbar.Toolbar;
@@ -78,6 +79,7 @@
private CarUxRestrictions mUxRestrictions;
private int mCurrentRequestIndex = 0;
+ private String mRestrictedWhileDrivingMessage;
/**
* Returns the resource id for the preference XML of this fragment.
@@ -160,6 +162,8 @@
mPreferenceControllersLookup.computeIfAbsent(controller.getClass(),
k -> new ArrayList<>(/* initialCapacity= */ 1)).add(controller);
});
+
+ mRestrictedWhileDrivingMessage = context.getString(R.string.restricted_while_driving);
}
/**
@@ -176,7 +180,14 @@
addPreferencesFromResource(resId);
PreferenceScreen screen = getPreferenceScreen();
for (PreferenceController controller : mPreferenceControllers) {
- controller.setPreference(screen.findPreference(controller.getPreferenceKey()));
+ Preference pref = screen.findPreference(controller.getPreferenceKey());
+
+ controller.setPreference(pref);
+
+ if (pref instanceof DisabledPreferenceCallback) {
+ ((DisabledPreferenceCallback) pref).setMessageToShowWhenDisabledPreferenceClicked(
+ mRestrictedWhileDrivingMessage);
+ }
}
}
diff --git a/tests/robotests/src/com/android/car/settings/common/SettingsFragmentTest.java b/tests/robotests/src/com/android/car/settings/common/SettingsFragmentTest.java
index 64477ba..ee10deb 100644
--- a/tests/robotests/src/com/android/car/settings/common/SettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/settings/common/SettingsFragmentTest.java
@@ -44,6 +44,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadows.ShadowToast;
/** Unit test for {@link SettingsFragment}. */
@RunWith(CarSettingsRobolectricTestRunner.class)
@@ -91,6 +92,19 @@
}
@Test
+ public void onUxRestrictedPreferenceTapped_showToast() {
+ mFragmentController.setup();
+ FakePreferenceController controller = mFragment.use(FakePreferenceController.class,
+ R.string.tpk_fake_controller);
+ CarUxRestrictions uxRestrictions = new CarUxRestrictions.Builder(/* reqOpt= */ true,
+ CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP, /* timestamp= */ 0).build();
+ mFragment.onUxRestrictionsChanged(uxRestrictions);
+ controller.getPreference().performClick();
+ assertThat(ShadowToast.showedToast(
+ mContext.getString(R.string.restricted_while_driving))).isTrue();
+ }
+
+ @Test
public void onDisplayPreferenceDialog_unknownPreferenceType_throwsIllegalArgumentException() {
mFragmentController.setup();