Merge "Restore focus history properly" into rvc-qpr-dev
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/MenuItem.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/MenuItem.java
index 27f8140..5645b0d 100644
--- a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/MenuItem.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/MenuItem.java
@@ -73,6 +73,17 @@
     private boolean mIsVisible;
     private boolean mIsActivated;
 
+    @SuppressWarnings("FieldCanBeLocal") // Used with weak references
+    private final CarUxRestrictionsUtil.OnUxRestrictionsChangedListener mUxRestrictionsListener =
+            uxRestrictions -> {
+                boolean wasRestricted = isRestricted();
+                mCurrentRestrictions = uxRestrictions;
+
+                if (isRestricted() != wasRestricted) {
+                    update();
+                }
+            };
+
     private MenuItem(Builder builder) {
         mContext = builder.mContext;
         mId = builder.mId;
@@ -92,7 +103,7 @@
         mIsPrimary = builder.mIsPrimary;
         mUxRestrictions = builder.mUxRestrictions;
 
-        mCurrentRestrictions = CarUxRestrictionsUtil.getInstance(mContext).getCurrentRestrictions();
+        CarUxRestrictionsUtil.getInstance(mContext).register(mUxRestrictionsListener);
     }
 
     private void update() {
@@ -239,15 +250,6 @@
         update();
     }
 
-    /* package */ void setCarUxRestrictions(CarUxRestrictions restrictions) {
-        boolean wasRestricted = isRestricted();
-        mCurrentRestrictions = restrictions;
-
-        if (isRestricted() != wasRestricted) {
-            update();
-        }
-    }
-
     /* package */ boolean isRestricted() {
         return CarUxRestrictionsUtil.isRestricted(mUxRestrictions, mCurrentRestrictions);
     }
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/MenuItemRenderer.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/MenuItemRenderer.java
index 68d233b..6d5f572 100644
--- a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/MenuItemRenderer.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/MenuItemRenderer.java
@@ -18,7 +18,6 @@
 import static com.android.car.ui.utils.CarUiUtils.requireViewByRefId;
 
 import android.app.Activity;
-import android.car.drivingstate.CarUxRestrictions;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
@@ -85,10 +84,6 @@
         }
     }
 
-    void setCarUxRestrictions(CarUxRestrictions restrictions) {
-        mMenuItem.setCarUxRestrictions(restrictions);
-    }
-
     @Override
     public void onMenuItemChanged(MenuItem changedItem) {
         updateView();
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/ToolbarControllerImpl.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/ToolbarControllerImpl.java
index 02b3a1a..e30f5f5 100644
--- a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/ToolbarControllerImpl.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/toolbar/ToolbarControllerImpl.java
@@ -49,7 +49,6 @@
 import com.android.car.ui.recyclerview.CarUiListItem;
 import com.android.car.ui.recyclerview.CarUiListItemAdapter;
 import com.android.car.ui.utils.CarUiUtils;
-import com.android.car.ui.utils.CarUxRestrictionsUtil;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -123,15 +122,6 @@
         setState(getState());
     };
 
-    // Despite the warning, this has to be a field so it's not garbage-collected.
-    // The only other reference to it is a weak reference
-    private final CarUxRestrictionsUtil.OnUxRestrictionsChangedListener
-            mOnUxRestrictionsChangedListener = restrictions -> {
-                for (MenuItemRenderer renderer : mMenuItemRenderers) {
-                    renderer.setCarUxRestrictions(restrictions);
-                }
-            };
-
 
     public ToolbarControllerImpl(View view) {
         mContext = view.getContext();
@@ -197,10 +187,6 @@
         setBackgroundShown(true);
 
         mOverflowAdapter = new CarUiListItemAdapter(mUiOverflowItems);
-
-        // This holds weak references so we don't need to unregister later
-        CarUxRestrictionsUtil.getInstance(getContext())
-                .register(mOnUxRestrictionsChangedListener);
     }
 
     private Context getContext() {
diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/DirectManipulationHelper.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/DirectManipulationHelper.java
index 184e522..cdc0257 100644
--- a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/DirectManipulationHelper.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/utils/DirectManipulationHelper.java
@@ -26,6 +26,7 @@
 import android.view.accessibility.AccessibilityNodeInfo;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
 
 /** Helper class to toggle direct manipulation mode. */
 public final class DirectManipulationHelper {
@@ -35,7 +36,8 @@
      * class name of {@link AccessibilityEvent} to indicate that the AccessibilityEvent represents
      * a request to toggle direct manipulation mode.
      */
-    private static final String DIRECT_MANIPULATION =
+    @VisibleForTesting
+    public static final String DIRECT_MANIPULATION =
             "com.android.car.ui.utils.DIRECT_MANIPULATION";
 
     /** This is a utility class. */