diff --git a/car/src/main/java/androidx/car/drawer/DrawerItemViewHolder.java b/car/src/main/java/androidx/car/drawer/DrawerItemViewHolder.java
index 8994444..a374f8d 100644
--- a/car/src/main/java/androidx/car/drawer/DrawerItemViewHolder.java
+++ b/car/src/main/java/androidx/car/drawer/DrawerItemViewHolder.java
@@ -95,7 +95,7 @@
      *
      * @param restrictions current car UX restrictions.
      */
-    public void complyWithUxRestrictions(CarUxRestrictions restrictions) {
+    void complyWithUxRestrictions(CarUxRestrictions restrictions) {
         CarUxRestrictionsUtils.comply(itemView.getContext(), restrictions, getText());
     }
 }
diff --git a/car/src/main/java/androidx/car/moderator/SpeedBumpController.java b/car/src/main/java/androidx/car/moderator/SpeedBumpController.java
index 21cf124..dcaedc1 100644
--- a/car/src/main/java/androidx/car/moderator/SpeedBumpController.java
+++ b/car/src/main/java/androidx/car/moderator/SpeedBumpController.java
@@ -245,8 +245,17 @@
             try {
                 mCarUxRestrictionsManager = (CarUxRestrictionsManager)
                         mCar.getCarManager(Car.CAR_UX_RESTRICTION_SERVICE);
+
+                // Use explicit class definition instead of lambda. Using lambda makes compiler to
+                // desugar, which will lead to failure due to class definition not being available
+                // to dependencies at compile time (e.g. sample apk).
                 mCarUxRestrictionsManager.registerListener(
-                        SpeedBumpController.this::updateUnlimitedModeEnabled);
+                        new CarUxRestrictionsManager.onUxRestrictionsChangedListener() {
+                            @Override
+                            public void onUxRestrictionsChanged(CarUxRestrictions uxRestrictions) {
+                                updateUnlimitedModeEnabled(uxRestrictions);
+                            }
+                        });
 
                 updateUnlimitedModeEnabled(
                         mCarUxRestrictionsManager.getCurrentCarUxRestrictions());
diff --git a/car/src/main/java/androidx/car/utils/CarUxRestrictionsUtils.java b/car/src/main/java/androidx/car/utils/CarUxRestrictionsUtils.java
index 6b4019c..73d4c98 100644
--- a/car/src/main/java/androidx/car/utils/CarUxRestrictionsUtils.java
+++ b/car/src/main/java/androidx/car/utils/CarUxRestrictionsUtils.java
@@ -16,8 +16,11 @@
 
 package androidx.car.utils;
 
+import static android.support.annotation.RestrictTo.Scope.LIBRARY_GROUP;
+
 import android.car.drivingstate.CarUxRestrictions;
 import android.content.Context;
+import android.support.annotation.RestrictTo;
 import android.text.InputFilter;
 import android.widget.TextView;
 
@@ -29,7 +32,10 @@
 
 /**
  * Utility class that helps {@code View}s comply with {@link CarUxRestrictions}.
+ *
+ * @hide
  */
+@RestrictTo(LIBRARY_GROUP)
 public class CarUxRestrictionsUtils {
 
     private CarUxRestrictionsUtils() {};
diff --git a/car/src/main/java/androidx/car/widget/ListItem.java b/car/src/main/java/androidx/car/widget/ListItem.java
index 014ffd7..dd319e8 100644
--- a/car/src/main/java/androidx/car/widget/ListItem.java
+++ b/car/src/main/java/androidx/car/widget/ListItem.java
@@ -221,6 +221,6 @@
          *
          * @param restrictions current car UX restrictions.
          */
-        public abstract void complyWithUxRestrictions(CarUxRestrictions restrictions);
+        abstract void complyWithUxRestrictions(CarUxRestrictions restrictions);
     }
 }
diff --git a/car/src/main/java/androidx/car/widget/SeekbarListItem.java b/car/src/main/java/androidx/car/widget/SeekbarListItem.java
index 0136cd2..796fd24 100644
--- a/car/src/main/java/androidx/car/widget/SeekbarListItem.java
+++ b/car/src/main/java/androidx/car/widget/SeekbarListItem.java
@@ -520,7 +520,7 @@
         }
 
         @Override
-        public void complyWithUxRestrictions(CarUxRestrictions restrictions) {
+        void complyWithUxRestrictions(CarUxRestrictions restrictions) {
             CarUxRestrictionsUtils.comply(itemView.getContext(), restrictions, getText());
         }
 
diff --git a/car/src/main/java/androidx/car/widget/TextListItem.java b/car/src/main/java/androidx/car/widget/TextListItem.java
index 66fcb0f..24c1b12 100644
--- a/car/src/main/java/androidx/car/widget/TextListItem.java
+++ b/car/src/main/java/androidx/car/widget/TextListItem.java
@@ -762,7 +762,7 @@
          * @param restrictions current car UX restrictions.
          */
         @Override
-        public void complyWithUxRestrictions(CarUxRestrictions restrictions) {
+        void complyWithUxRestrictions(CarUxRestrictions restrictions) {
             CarUxRestrictionsUtils.comply(itemView.getContext(), restrictions, getBody());
         }
 
