Merge "Fix compilation errors after PagedRecyclerView migration to Gerrit" into pi-car-dev
diff --git a/car-chassis-lib/build.gradle b/car-chassis-lib/build.gradle
index 21b2b0d..6641025 100644
--- a/car-chassis-lib/build.gradle
+++ b/car-chassis-lib/build.gradle
@@ -65,8 +65,11 @@
     }
 }
 
+def outProduct = System.getenv("ANDROID_PRODUCT_OUT")
+
 dependencies {
     implementation 'androidx.annotation:annotation:1.1.0'
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
     implementation 'androidx.recyclerview:recyclerview:1.0.0'
+    implementation files(outProduct + '/obj/JAVA_LIBRARIES/android.car-stubs_intermediates/javalib.jar')
 }
diff --git a/car-chassis-lib/res/values/config.xml b/car-chassis-lib/res/values/config.xml
index 8a0875f..1ecdf6a 100644
--- a/car-chassis-lib/res/values/config.xml
+++ b/car-chassis-lib/res/values/config.xml
@@ -18,11 +18,10 @@
     <!--
     Configuration for a default scrollbar for the PagedRecyclerView. This component must inherit
     abstract class ScrollBar. If the ScrollBar is enabled, the component will be initialized from
-    PagedRecyclerView#createScrollBarFromConfig().
+    PagedRecyclerView#createScrollBarFromConfig(). If no component is provided,
+    {@link DefaultScrollbar} class will be used.
     -->
-    <string name="chassis_scrollbar_component" translatable="false">
-        com.google.android.apps.automotive.chassis.libraries.CarScrollBar
-    </string>
+    <string name="chassis_scrollbar_component" translatable="false"/>
 
     <!--
     Whether to include a gutter to the start, end or both sides of the list view items.
@@ -33,16 +32,16 @@
       end = 2
       both = 3
     -->
-    <integer name="chassis_scrollbar_gutter" translatable="false">1</integer>
+    <integer name="chassis_scrollbar_gutter">1</integer>
 
     <!--
     Position of the scrollbar. Default to left. Values are defined as follows:
       start = 0
       end = 1
     -->
-    <integer name="chassis_scrollbar_position" translatable="false">0</integer>
+    <integer name="chassis_scrollbar_position">0</integer>
 
     <!-- Width of the scrollbar container. -->
-    <dimen name="chassis_scrollbar_container_width" translatable="false">@*android:dimen/car_margin</dimen>
+    <dimen name="chassis_scrollbar_container_width" translatable="false">@dimen/chassis_margin</dimen>
 
 </resources>
\ No newline at end of file
diff --git a/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/CarUxRestrictionsUtil.java b/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/CarUxRestrictionsUtil.java
index 7e204bd..a000696 100644
--- a/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/CarUxRestrictionsUtil.java
+++ b/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/CarUxRestrictionsUtil.java
@@ -66,7 +66,7 @@
                     }
                 };
 
-        mCarApi = Car.createCar(context);
+        mCarApi = Car.createCar(context, null, null);
         mObservers = Collections.newSetFromMap(new WeakHashMap<>());
 
         try {
diff --git a/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/CarScrollBar.java b/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/DefaultScrollBar.java
similarity index 98%
rename from car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/CarScrollBar.java
rename to car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/DefaultScrollBar.java
index 0ec40d4..758b61c 100644
--- a/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/CarScrollBar.java
+++ b/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/DefaultScrollBar.java
@@ -34,6 +34,7 @@
 
 import com.android.car.chassis.R;
 import com.android.car.chassis.pagedrecyclerview.PagedRecyclerView.ScrollBarPosition;
+import com.android.car.chassis.utils.ResourceUtils;
 
 /**
  * The default scroll bar widget for the {@link PagedRecyclerView}.
@@ -41,9 +42,9 @@
  * <p>Inspired by {@link androidx.car.widget.PagedListView}. Most pagination and scrolling logic has
  * been ported from the PLV with minor updates.
  */
-class CarScrollBar implements ScrollBar {
+class DefaultScrollBar implements ScrollBar {
     private float mButtonDisabledAlpha;
-    private static final String TAG = "CarScrollBar";
+    private static final String TAG = "DefaultScrollBar";
     private PagedSnapHelper mSnapHelper;
 
     private ImageView mUpButton;
@@ -86,7 +87,8 @@
                 new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
 
         Resources res = rv.getContext().getResources();
-        mButtonDisabledAlpha = res.getFloat(R.dimen.chassis_button_disabled_alpha);
+
+        mButtonDisabledAlpha = ResourceUtils.getFloat(res, R.dimen.chassis_button_disabled_alpha);
 
         if (scrollBarAboveRecyclerView) {
             parent.addView(mScrollView);
diff --git a/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/PagedRecyclerView.java b/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/PagedRecyclerView.java
index 7f76e16..677754e 100644
--- a/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/PagedRecyclerView.java
+++ b/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/PagedRecyclerView.java
@@ -690,7 +690,9 @@
 
         Class<?> cls;
         try {
-            cls = getContext().getClassLoader().loadClass(mScrollBarClass);
+            cls = mScrollBarClass != null
+                    ? getContext().getClassLoader().loadClass(mScrollBarClass)
+                    : DefaultScrollBar.class;
         } catch (Throwable t) {
             throw andLog("Error loading scroll bar component: " + mScrollBarClass, t);
         }
@@ -784,15 +786,17 @@
             mNestedRecyclerViewState = new SparseArray<>();
         }
 
+        @SuppressWarnings("unchecked")
         private SavedState(Parcel in) {
             super(in);
             mNestedRecyclerViewState = in.readSparseArray(mContext.getClassLoader());
         }
 
+        @SuppressWarnings("unchecked")
         @Override
         public void writeToParcel(Parcel out, int flags) {
             super.writeToParcel(out, flags);
-            out.writeSparseArray(mNestedRecyclerViewState);
+            out.writeSparseArray((SparseArray<Object>) (Object) mNestedRecyclerViewState);
         }
 
         public static final Parcelable.Creator<SavedState> CREATOR =
diff --git a/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/PagedSmoothScroller.java b/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/PagedSmoothScroller.java
index 910e370..53a4d44 100644
--- a/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/PagedSmoothScroller.java
+++ b/car-chassis-lib/src/com/android/car/chassis/pagedrecyclerview/PagedSmoothScroller.java
@@ -25,6 +25,7 @@
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.android.car.chassis.R;
+import com.android.car.chassis.utils.ResourceUtils;
 
 /**
  * Code drop from {androidx.car.widget.PagedSmoothScroller}
@@ -48,17 +49,14 @@
     }
 
     private void init(Context context) {
-        mMillisecondsPerInch =
-                context.getResources().getFloat(R.dimen.chassis_scrollbar_milliseconds_per_inch);
-        mDecelerationTimeDivisor =
-                context.getResources().getFloat(
-                        R.dimen.chassis_scrollbar_deceleration_times_divisor);
+        mMillisecondsPerInch = ResourceUtils.getFloat(context.getResources(),
+                R.dimen.chassis_scrollbar_milliseconds_per_inch);
+        mDecelerationTimeDivisor = ResourceUtils.getFloat(context.getResources(),
+                R.dimen.chassis_scrollbar_deceleration_times_divisor);
         mInterpolator =
                 new DecelerateInterpolator(
-                        context
-                                .getResources()
-                                .getFloat(
-                                        R.dimen.chassis_scrollbar_decelerate_interpolator_factor));
+                        ResourceUtils.getFloat(context.getResources(),
+                                R.dimen.chassis_scrollbar_decelerate_interpolator_factor));
     }
 
     @Override
diff --git a/car-chassis-lib/src/com/android/car/chassis/utils/ResourceUtils.java b/car-chassis-lib/src/com/android/car/chassis/utils/ResourceUtils.java
new file mode 100644
index 0000000..1ed0ae3
--- /dev/null
+++ b/car-chassis-lib/src/com/android/car/chassis/utils/ResourceUtils.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.car.chassis.utils;
+
+import android.content.res.Resources;
+import android.util.TypedValue;
+
+import androidx.annotation.DimenRes;
+
+/**
+ * Collection of resource utility methods
+ */
+public final class ResourceUtils {
+    /** This is a utility class */
+    private ResourceUtils() {}
+
+    /**
+     * Reads a float value from a dimens resource. This is necessary as {@link Resources#getFloat}
+     * is not currently public.
+     *
+     * @param res {@link Resources} to read values from
+     * @param resId Id of the dimens resource to read
+     */
+    public static float getFloat(Resources res, @DimenRes int resId) {
+        TypedValue outValue = new TypedValue();
+        res.getValue(resId, outValue, true);
+        return outValue.getFloat();
+    }
+}
diff --git a/car-chassis-lib/tests/paintbooth/res/values/strings.xml b/car-chassis-lib/tests/paintbooth/res/values/strings.xml
index 9bfdb07..6896e36 100644
--- a/car-chassis-lib/tests/paintbooth/res/values/strings.xml
+++ b/car-chassis-lib/tests/paintbooth/res/values/strings.xml
@@ -16,5 +16,5 @@
   -->
 <resources>
   <!-- Application name [CHAR LIMIT=30] -->
-  <string name="app_name">Paint Booth (Gerrit)</string>
+  <string name="app_name" translatable="false">Paint Booth (Gerrit)</string>
 </resources>