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();