Merge changes I86d2f5b7,Iea81035e

* changes:
  Change bottomsheet peek height.
  Updated bottomsheet to be scrollable.
diff --git a/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java b/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java
index 28663c1..e3e9e7a 100644
--- a/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java
+++ b/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java
@@ -19,6 +19,9 @@
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.design.widget.BottomSheetBehavior;
+import android.support.design.widget.BottomSheetBehavior.BottomSheetCallback;
 import android.support.design.widget.BottomSheetDialog;
 import android.support.v4.content.ContextCompat;
 import android.text.TextUtils;
@@ -26,6 +29,7 @@
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
+import android.view.Window;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
@@ -49,9 +53,9 @@
       Context context,
       HistoryItemBottomSheetHeaderInfo historyItemBottomSheetHeaderInfo,
       List<HistoryItemActionModule> modules) {
-    super(context);
+    super(context, R.style.HistoryItemBottomSheet);
     this.modules = modules;
-    this.historyItemBottomSheetHeaderInfo = historyItemBottomSheetHeaderInfo;
+    this.historyItemBottomSheetHeaderInfo = Assert.isNotNull(historyItemBottomSheetHeaderInfo);
     setContentView(LayoutInflater.from(context).inflate(R.layout.sheet_layout, null));
   }
 
@@ -67,10 +71,10 @@
 
   @Override
   protected void onCreate(Bundle bundle) {
-    super.onCreate(bundle);
-    LinearLayout container = Assert.isNotNull(findViewById(R.id.action_container));
-    container.addView(getContactView(container));
+    setupWindow();
+    setupContactLayout();
 
+    LinearLayout container = Assert.isNotNull(findViewById(R.id.action_container));
     for (HistoryItemActionModule module : modules) {
       if (module instanceof DividerModule) {
         container.addView(getDividerView(container));
@@ -80,9 +84,20 @@
     }
   }
 
-  private View getContactView(ViewGroup container) {
-    LayoutInflater inflater = LayoutInflater.from(getContext());
-    View contactView = inflater.inflate(R.layout.contact_layout, container, false);
+  // Overrwrites the window size since Dialog's don't match parent.
+  private void setupWindow() {
+    Window window = getWindow();
+    if (window == null) {
+      return;
+    }
+    // TODO(calderwoodra): set the nav bar color
+    window.setLayout(
+        /* width = */ ViewGroup.LayoutParams.MATCH_PARENT,
+        /* height = */ ViewGroup.LayoutParams.MATCH_PARENT);
+  }
+
+  private void setupContactLayout() {
+    View contactView = Assert.isNotNull(findViewById(R.id.contact_layout_root));
 
     ContactPhotoView contactPhotoView = contactView.findViewById(R.id.contact_photo_view);
     contactPhotoView.setPhoto(historyItemBottomSheetHeaderInfo.getPhotoInfo());
@@ -97,7 +112,35 @@
       secondaryTextView.setVisibility(View.GONE);
       secondaryTextView.setText(null);
     }
-    return contactView;
+
+    View background = findViewById(android.support.design.R.id.touch_outside);
+    BottomSheetBehavior behavior =
+        BottomSheetBehavior.from(findViewById(android.support.design.R.id.design_bottom_sheet));
+    behavior.setBottomSheetCallback(
+        new BottomSheetCallback() {
+          @Override
+          public void onStateChanged(@NonNull View bottomSheet, int newState) {
+            if (newState == BottomSheetBehavior.STATE_HIDDEN) {
+              cancel();
+              return;
+            }
+
+            // If the bottomsheet can expand to full screen, set the header's elevation when it's
+            // fully expanded.
+            if (background.getHeight() == bottomSheet.getHeight()) {
+              contactView.setElevation(
+                  newState == BottomSheetBehavior.STATE_EXPANDED
+                      ? getContext()
+                          .getResources()
+                          .getDimensionPixelSize(R.dimen.contact_actions_header_elevation)
+                      : 0);
+              // TODO(calderwoodra): set the status bar color when expanded, else translucent
+            }
+          }
+
+          @Override
+          public void onSlide(@NonNull View bottomSheet, float slideOffset) {}
+        });
   }
 
   private View getDividerView(ViewGroup container) {
diff --git a/java/com/android/dialer/historyitemactions/res/layout/contact_layout.xml b/java/com/android/dialer/historyitemactions/res/layout/contact_layout.xml
index f2dc8c7..721740f 100644
--- a/java/com/android/dialer/historyitemactions/res/layout/contact_layout.xml
+++ b/java/com/android/dialer/historyitemactions/res/layout/contact_layout.xml
@@ -15,13 +15,15 @@
  ~ limitations under the License
  -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/contact_layout_root"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:layout_marginTop="8dp"
-    android:layout_marginBottom="12dp"
-    android:layout_marginEnd="8dp"
+    android:paddingTop="12dp"
+    android:paddingBottom="12dp"
+    android:paddingEnd="8dp"
     android:gravity="center_vertical"
-    android:orientation="horizontal">
+    android:orientation="horizontal"
+    android:background="#FFFFFF">
 
   <com.android.dialer.widget.ContactPhotoView
       android:id="@+id/contact_photo_view"
diff --git a/java/com/android/dialer/historyitemactions/res/layout/sheet_layout.xml b/java/com/android/dialer/historyitemactions/res/layout/sheet_layout.xml
index 6984367..006302e 100644
--- a/java/com/android/dialer/historyitemactions/res/layout/sheet_layout.xml
+++ b/java/com/android/dialer/historyitemactions/res/layout/sheet_layout.xml
@@ -16,9 +16,24 @@
  -->
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/action_container"
+    android:id="@+id/history_item_actions_bottom_sheet_root"
     android:orientation="vertical"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:paddingTop="4dp"
-    android:paddingBottom="8dp"/>
+    android:layout_height="match_parent">
+
+  <include layout="@layout/contact_layout"/>
+
+  <android.support.v4.widget.NestedScrollView
+      android:id="@+id/history_actions_scroll_view"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content">
+
+      <LinearLayout
+          android:id="@+id/action_container"
+          android:orientation="vertical"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          android:paddingBottom="4dp"
+          android:clipToPadding="false"/>
+  </android.support.v4.widget.NestedScrollView>
+</LinearLayout>
diff --git a/java/com/android/dialer/historyitemactions/res/values-land/styles.xml b/java/com/android/dialer/historyitemactions/res/values-land/styles.xml
new file mode 100644
index 0000000..bc727d0
--- /dev/null
+++ b/java/com/android/dialer/historyitemactions/res/values-land/styles.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2018 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
+ -->
+<resources>
+  <style name="HistoryItemBottomSheet.BottomSheetStyle" parent="Widget.Design.BottomSheet.Modal">
+    <item name="behavior_peekHeight">206dp</item>
+  </style>
+</resources>
diff --git a/java/com/android/dialer/historyitemactions/res/values/dimens.xml b/java/com/android/dialer/historyitemactions/res/values/dimens.xml
index 47bf804..a98101e 100644
--- a/java/com/android/dialer/historyitemactions/res/values/dimens.xml
+++ b/java/com/android/dialer/historyitemactions/res/values/dimens.xml
@@ -17,4 +17,5 @@
 <resources>
   <dimen name="contact_actions_image_size">48dp</dimen>
   <dimen name="contact_actions_image_margin">12dp</dimen>
+  <dimen name="contact_actions_header_elevation">4dp</dimen>
 </resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/historyitemactions/res/values/styles.xml b/java/com/android/dialer/historyitemactions/res/values/styles.xml
new file mode 100644
index 0000000..ed3cf11
--- /dev/null
+++ b/java/com/android/dialer/historyitemactions/res/values/styles.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2018 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
+ -->
+<resources>
+  <style name="HistoryItemBottomSheet.Base" parent="Theme.Design.Light.BottomSheetDialog">
+    <item name="android:windowDrawsSystemBarBackgrounds">false</item>
+    <item name="android:windowTranslucentNavigation">false</item>
+    <item name="android:windowTranslucentStatus">false</item>
+    <item name="android:navigationBarColor">@color/background_dialer_white</item>
+  </style>
+
+  <style name="HistoryItemBottomSheet" parent="HistoryItemBottomSheet.Base">
+    <item name="bottomSheetStyle">@style/HistoryItemBottomSheet.BottomSheetStyle</item>
+  </style>
+
+  <style name="HistoryItemBottomSheet.BottomSheetStyle" parent="Widget.Design.BottomSheet.Modal">
+    <item name="behavior_peekHeight">405dp</item>
+  </style>
+</resources>
diff --git a/java/com/android/dialer/speeddial/SpeedDialFragment.java b/java/com/android/dialer/speeddial/SpeedDialFragment.java
index 17591aa..c174599 100644
--- a/java/com/android/dialer/speeddial/SpeedDialFragment.java
+++ b/java/com/android/dialer/speeddial/SpeedDialFragment.java
@@ -80,7 +80,7 @@
 public class SpeedDialFragment extends Fragment {
 
   private final SpeedDialHeaderListener headerListener = new SpeedDialFragmentHeaderListener();
-  private final SuggestedContactsListener suggestedListener = new SpeedDialSuggestedListener();
+  private final SpeedDialSuggestedListener suggestedListener = new SpeedDialSuggestedListener();
 
   private ContextMenu contextMenu;
   private FrameLayout contextMenuBackground;
@@ -214,6 +214,7 @@
                 }),
         new DefaultFutureCallback<>(),
         DialerExecutorComponent.get(getContext()).backgroundExecutor());
+    suggestedListener.onPause();
   }
 
   @Override
@@ -313,6 +314,8 @@
 
   private final class SpeedDialSuggestedListener implements SuggestedContactsListener {
 
+    private HistoryItemActionBottomSheet bottomSheet;
+
     @Override
     public void onOverFlowMenuClicked(
         SpeedDialUiItem speedDialUiItem, HistoryItemBottomSheetHeaderInfo headerInfo) {
@@ -364,7 +367,7 @@
               R.string.contact_menu_contact_info,
               R.drawable.context_menu_contact_icon));
 
-      HistoryItemActionBottomSheet.show(getContext(), headerInfo, modules);
+      bottomSheet = HistoryItemActionBottomSheet.show(getContext(), headerInfo, modules);
     }
 
     @Override
@@ -430,6 +433,12 @@
         return false;
       }
     }
+
+    public void onPause() {
+      if (bottomSheet != null && bottomSheet.isShowing()) {
+        bottomSheet.dismiss();
+      }
+    }
   }
 
   private static final class SpeedDialContextMenuItemListener implements ContextMenuItemListener {