NavigationView dispatches insets to headers

Bug: 29062870
Change-Id: I5c335428a05665bc6e9994a71236544e681cde66
diff --git a/design/src/android/support/design/internal/NavigationMenuPresenter.java b/design/src/android/support/design/internal/NavigationMenuPresenter.java
index 609795f..afdef82 100644
--- a/design/src/android/support/design/internal/NavigationMenuPresenter.java
+++ b/design/src/android/support/design/internal/NavigationMenuPresenter.java
@@ -29,6 +29,8 @@
 import android.support.annotation.Nullable;
 import android.support.annotation.StyleRes;
 import android.support.design.R;
+import android.support.v4.view.ViewCompat;
+import android.support.v4.view.WindowInsetsCompat;
 import android.support.v7.view.menu.MenuBuilder;
 import android.support.v7.view.menu.MenuItemImpl;
 import android.support.v7.view.menu.MenuPresenter;
@@ -254,13 +256,15 @@
         }
     }
 
-    public void setPaddingTopDefault(int paddingTopDefault) {
-        if (mPaddingTopDefault != paddingTopDefault) {
-            mPaddingTopDefault = paddingTopDefault;
+    public void dispatchApplyWindowInsets(WindowInsetsCompat insets) {
+        int top = insets.getSystemWindowInsetTop();
+        if (mPaddingTopDefault != top) {
+            mPaddingTopDefault = top;
             if (mHeaderLayout.getChildCount() == 0) {
                 mMenuView.setPadding(0, mPaddingTopDefault, 0, mMenuView.getPaddingBottom());
             }
         }
+        ViewCompat.dispatchApplyWindowInsets(mHeaderLayout, insets);
     }
 
     private abstract static class ViewHolder extends RecyclerView.ViewHolder {
diff --git a/design/src/android/support/design/internal/ScrimInsetsFrameLayout.java b/design/src/android/support/design/internal/ScrimInsetsFrameLayout.java
index 252c6b4..80aee76 100644
--- a/design/src/android/support/design/internal/ScrimInsetsFrameLayout.java
+++ b/design/src/android/support/design/internal/ScrimInsetsFrameLayout.java
@@ -70,7 +70,7 @@
                                 insets.getSystemWindowInsetTop(),
                                 insets.getSystemWindowInsetRight(),
                                 insets.getSystemWindowInsetBottom());
-                        onInsetsChanged(mInsets);
+                        onInsetsChanged(insets);
                         setWillNotDraw(mInsets.isEmpty() || mInsetForeground == null);
                         ViewCompat.postInvalidateOnAnimation(ScrimInsetsFrameLayout.this);
                         return insets.consumeSystemWindowInsets();
@@ -128,7 +128,7 @@
         }
     }
 
-    protected void onInsetsChanged(Rect insets) {
+    protected void onInsetsChanged(WindowInsetsCompat insets) {
     }
 
 }
diff --git a/design/src/android/support/design/widget/NavigationView.java b/design/src/android/support/design/widget/NavigationView.java
index e84aa19..e53b7e8 100644
--- a/design/src/android/support/design/widget/NavigationView.java
+++ b/design/src/android/support/design/widget/NavigationView.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.content.res.ColorStateList;
-import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.Parcel;
@@ -38,6 +37,7 @@
 import android.support.v4.os.ParcelableCompatCreatorCallbacks;
 import android.support.v4.view.AbsSavedState;
 import android.support.v4.view.ViewCompat;
+import android.support.v4.view.WindowInsetsCompat;
 import android.support.v7.content.res.AppCompatResources;
 import android.support.v7.view.SupportMenuInflater;
 import android.support.v7.view.menu.MenuBuilder;
@@ -230,8 +230,8 @@
      * @hide
      */
     @Override
-    protected void onInsetsChanged(Rect insets) {
-        mPresenter.setPaddingTopDefault(insets.top);
+    protected void onInsetsChanged(WindowInsetsCompat insets) {
+        mPresenter.dispatchApplyWindowInsets(insets);
     }
 
     /**
diff --git a/samples/SupportDesignDemos/res/layout/design_navigation_header.xml b/samples/SupportDesignDemos/res/layout/design_navigation_header.xml
index a03f0bb..1ab584d 100644
--- a/samples/SupportDesignDemos/res/layout/design_navigation_header.xml
+++ b/samples/SupportDesignDemos/res/layout/design_navigation_header.xml
@@ -14,13 +14,27 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
 
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:minHeight="180dp"
-          android:padding="16dp"
-          android:background="?attr/colorPrimary"
-          android:gravity="bottom|start"
-          android:text="@string/navigation_header"
-          android:textAppearance="?android:attr/textAppearanceLargeInverse"/>
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="?attr/colorPrimary"
+        android:gravity="bottom|start"
+        android:minHeight="180dp"
+        android:padding="16dp"
+        android:text="@string/navigation_header"
+        android:textAppearance="?android:attr/textAppearanceLargeInverse"/>
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:fitsSystemWindows="true"
+        android:gravity="top|end"
+        android:text="@string/navigation_header"
+        android:textAppearance="?android:attr/textAppearanceMediumInverse"/>
+
+</FrameLayout>