Inset nav drawer correctly for cutout
Test: launched the app and verified that the drawer is offset correctly
on device with cutout.
BUG: 74423733
Change-Id: I49ac886937453bc4f0160743c3f50ee246a0bd38
diff --git a/res/layout/drawer_fragment.xml b/res/layout/drawer_fragment.xml
index 907fb92..bd55d6a 100644
--- a/res/layout/drawer_fragment.xml
+++ b/res/layout/drawer_fragment.xml
@@ -29,5 +29,6 @@
android:background="@color/navigation_drawer_background_color"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:clipToPadding="false"
android:divider="@null" />
-</FrameLayout>
\ No newline at end of file
+</FrameLayout>
diff --git a/res/layout/nav_header_main.xml b/res/layout/nav_header_main.xml
deleted file mode 100644
index 7a2e3cb..0000000
--- a/res/layout/nav_header_main.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
- Copyright (C) 2016 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.
- -->
-
-<View
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/nav_status_bar_spacer"
- android:layout_width="match_parent"
- android:layout_height="@dimen/nav_header_height"
- android:background="@color/contacts_accent_color"
- android:importantForAccessibility="no"/>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index f92cf79..6d100ac 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -188,9 +188,6 @@
<dimen name="contact_browser_list_item_height">56dp</dimen>
- <!-- Navigation drawer header height, the same as the status bar in landscape and portrait modes -->
- <dimen name="nav_header_height">24dp</dimen>
-
<!-- Default activity margins, per the Android Material Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
diff --git a/src/com/android/contacts/drawer/DrawerAdapter.java b/src/com/android/contacts/drawer/DrawerAdapter.java
index ef5df1b..9ff2139 100644
--- a/src/com/android/contacts/drawer/DrawerAdapter.java
+++ b/src/com/android/contacts/drawer/DrawerAdapter.java
@@ -48,8 +48,7 @@
private static final int VIEW_TYPE_ACCOUNT_ENTRY = 4;
private static final int VIEW_TYPE_CREATE_LABEL = 5;
private static final int VIEW_TYPE_NAV_SPACER = 6;
- private static final int VIEW_TYPE_STATUS_SPACER = 7;
- private static final int VIEW_TYPE_NAV_DIVIDER = 8;
+ private static final int VIEW_TYPE_NAV_DIVIDER = 7;
// This count must be updated if we add more view types.
private static final int VIEW_TYPE_COUNT = 9;
@@ -67,7 +66,6 @@
private ContactListFilter mSelectedAccount;
// Adapter elements, ordered in this way mItemsList. The ordering is based on:
- // [Status bar spacer item]
// [Navigation spacer item]
// [Primary items] (Contacts, Suggestions)
// [Group Header]
@@ -77,7 +75,6 @@
// [Accounts]
// [Misc items] (a divider, Settings, Help & Feedback)
// [Navigation spacer item]
- private StatusBarSpacerItem mStatusBarSpacerItem = null;
private NavSpacerItem mNavSpacerItem = null;
private List<PrimaryItem> mPrimaryItems = new ArrayList<>();
private HeaderItem mGroupHeader = null;
@@ -100,7 +97,6 @@
private void initializeDrawerMenuItems() {
// Spacer item for dividing sections in drawer
mNavSpacerItem = new NavSpacerItem(R.id.nav_drawer_spacer);
- mStatusBarSpacerItem = new StatusBarSpacerItem(R.id.nav_status_bar_spacer);
// Primary items
mPrimaryItems.add(new PrimaryItem(R.id.nav_all_contacts, R.string.contactsList,
R.drawable.quantum_ic_account_circle_vd_theme_24, ContactsView.ALL_CONTACTS));
@@ -128,7 +124,6 @@
private void rebuildItemsList() {
mItemsList.clear();
- mItemsList.add(mStatusBarSpacerItem);
mItemsList.add(mNavSpacerItem);
mItemsList.addAll(mPrimaryItems);
if (mAreGroupWritableAccountsAvailable || !mGroupEntries.isEmpty()) {
@@ -193,8 +188,6 @@
public View getView(int position, View view, ViewGroup viewGroup) {
final BaseDrawerItem drawerItem = getItem(position);
switch (drawerItem.viewType) {
- case VIEW_TYPE_STATUS_SPACER:
- return getBaseItemView(R.layout.nav_header_main, view, viewGroup);
case VIEW_TYPE_PRIMARY_ITEM:
return getPrimaryItemView((PrimaryItem) drawerItem, view, viewGroup);
case VIEW_TYPE_HEADER_ITEM:
@@ -405,15 +398,6 @@
}
}
-
- // Navigation drawer item for status bar spacer item to take up the height of status bar in the
- // drawer.
- public static class StatusBarSpacerItem extends BaseDrawerItem {
- public StatusBarSpacerItem(int id) {
- super(VIEW_TYPE_STATUS_SPACER, id, /* textResId */ 0, /* iconResId */ 0);
- }
- }
-
// Navigation drawer item for spacer item for dividing sections in the drawer.
public static class NavSpacerItem extends BaseDrawerItem {
public NavSpacerItem(int id) {
diff --git a/src/com/android/contacts/drawer/DrawerFragment.java b/src/com/android/contacts/drawer/DrawerFragment.java
index 854f0e6..485513a 100644
--- a/src/com/android/contacts/drawer/DrawerFragment.java
+++ b/src/com/android/contacts/drawer/DrawerFragment.java
@@ -297,6 +297,14 @@
}
}
+ private void applyTopInset(int insetTop) {
+ // set height of the scrim
+ mScrimDrawable.setIntrinsicHeight(insetTop);
+ mDrawerListView.setPadding(mDrawerListView.getPaddingLeft(),
+ insetTop, mDrawerListView.getPaddingRight(),
+ mDrawerListView.getPaddingBottom());
+ }
+
public interface DrawerFragmentListener {
void onDrawerItemClicked();
void onContactsViewSelected(ContactsView mode);
@@ -311,8 +319,7 @@
@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
final int insetTop = insets.getSystemWindowInsetTop();
- // set height of the scrim
- mScrimDrawable.setIntrinsicHeight(insetTop);
+ applyTopInset(insetTop);
return insets;
}
}