Overlap insets with item margins

The system insets already create visual space for us, so there is no
need to add additional margin if we already have the insets acting as a
buffer. So we can just overlap them, preventing scenarios where we have
too much scrollable white space.

As a bonus, we get a more robust way of determining the clear all
button's bottom margins as we now base it directly off whether the
insets cover the space as opposed to using the orientation (which is
an indirect way of knowing the insets).

Bug: 131636735
Test: Test on 320x569 mdpi. Matches UX spec.
Change-Id: I6a3a3a5475ed303ed21bca3ed3cc363276c6e745
diff --git a/go/quickstep/res/values-sw480dp/dimens.xml b/go/quickstep/res/values-sw480dp/dimens.xml
index be27d4b..b48dafb 100644
--- a/go/quickstep/res/values-sw480dp/dimens.xml
+++ b/go/quickstep/res/values-sw480dp/dimens.xml
@@ -25,6 +25,6 @@
 
     <dimen name="clear_all_item_view_height">48dp</dimen>
     <dimen name="clear_all_item_view_top_margin">28dp</dimen>
-    <dimen name="clear_all_item_view_landscape_bottom_margin">28dp</dimen>
+    <dimen name="clear_all_item_view_bottom_margin">28dp</dimen>
     <dimen name="clear_all_button_width">140dp</dimen>
 </resources>
\ No newline at end of file
diff --git a/go/quickstep/res/values/dimens.xml b/go/quickstep/res/values/dimens.xml
index 60e997a..91040f2 100644
--- a/go/quickstep/res/values/dimens.xml
+++ b/go/quickstep/res/values/dimens.xml
@@ -25,6 +25,6 @@
 
     <dimen name="clear_all_item_view_height">36dp</dimen>
     <dimen name="clear_all_item_view_top_margin">20dp</dimen>
-    <dimen name="clear_all_item_view_landscape_bottom_margin">20dp</dimen>
+    <dimen name="clear_all_item_view_bottom_margin">20dp</dimen>
     <dimen name="clear_all_button_width">106dp</dimen>
 </resources>
\ No newline at end of file
diff --git a/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java b/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java
index ce22489..f951304 100644
--- a/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java
+++ b/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java
@@ -16,7 +16,6 @@
 package com.android.quickstep.views;
 
 import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
-import static android.content.res.Configuration.ORIENTATION_PORTRAIT;
 
 import static androidx.recyclerview.widget.LinearLayoutManager.VERTICAL;
 
@@ -32,7 +31,6 @@
 import android.animation.PropertyValuesHolder;
 import android.animation.ValueAnimator;
 import android.content.Context;
-import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Rect;
 import android.util.ArraySet;
@@ -125,6 +123,7 @@
     private boolean mTransitionedFromApp;
     private AnimatorSet mLayoutAnimation;
     private final ArraySet<View> mLayingOutViews = new ArraySet<>();
+    private Rect mInsets;
     private final RecentsModel.TaskThumbnailChangeListener listener = (taskId, thumbnailData) -> {
         ArrayList<TaskItemView> itemViews = getTaskViews();
         for (int i = 0, size = itemViews.size(); i < size; i++) {
@@ -194,13 +193,25 @@
                         case ITEM_TYPE_CLEAR_ALL:
                             outRect.top = (int) res.getDimension(
                                     R.dimen.clear_all_item_view_top_margin);
-                            if (res.getConfiguration().orientation == ORIENTATION_LANDSCAPE) {
-                                outRect.bottom = (int) res.getDimension(
-                                        R.dimen.clear_all_item_view_landscape_bottom_margin);
+                            int desiredBottomMargin = (int) res.getDimension(
+                                    R.dimen.clear_all_item_view_bottom_margin);
+                            // Only add bottom margin if insets aren't enough.
+                            if (mInsets.bottom < desiredBottomMargin) {
+                                outRect.bottom = desiredBottomMargin - mInsets.bottom;
                             }
                             break;
                         case ITEM_TYPE_TASK:
-                            outRect.top = (int) res.getDimension(R.dimen.task_item_top_margin);
+                            int desiredTopMargin = (int) res.getDimension(
+                                    R.dimen.task_item_top_margin);
+                            if (mTaskRecyclerView.getChildAdapterPosition(view) ==
+                                    state.getItemCount() - 1) {
+                                // Only add top margin to top task view if insets aren't enough.
+                                if (mInsets.top < desiredTopMargin) {
+                                    outRect.top = desiredTopMargin - mInsets.bottom;
+                                }
+                                return;
+                            }
+                            outRect.top = desiredTopMargin;
                             break;
                         default:
                     }
@@ -233,11 +244,6 @@
         }
     }
 
-    @Override
-    protected void onConfigurationChanged(Configuration newConfig) {
-        mTaskRecyclerView.invalidateItemDecorations();
-    }
-
     /**
      * Set activity helper for the view to callback to.
      *
@@ -522,6 +528,8 @@
 
     @Override
     public void setInsets(Rect insets) {
+        mInsets = insets;
         mTaskRecyclerView.setPadding(insets.left, insets.top, insets.right, insets.bottom);
+        mTaskRecyclerView.invalidateItemDecorations();
     }
 }