From 41f5c0c37110da463ef2dec9f4f5bdcdd4bcd2f1 Mon Sep 17 00:00:00 2001 From: calderwoodra Date: Tue, 1 May 2018 11:31:45 -0700 Subject: Updated bottomsheet to be scrollable. Follow-up CLs will include: - white bottom nav - setting status bar color when expanded, translucent otherwise - automatically dismissing the bottomsheet onPause in calllog/vvm Bug: 73495458,77761183,77812338,77816530,77833456 Test: manual PiperOrigin-RevId: 194967761 Change-Id: Iea81035efd06ae7692950ca1f11757b7d9ebfd1c --- .../HistoryItemActionBottomSheet.java | 63 ++++++++++++++++++---- .../res/layout/contact_layout.xml | 10 ++-- .../historyitemactions/res/layout/sheet_layout.xml | 23 ++++++-- .../historyitemactions/res/values-land/styles.xml | 25 +++++++++ .../historyitemactions/res/values/dimens.xml | 1 + .../historyitemactions/res/values/styles.xml | 26 +++++++++ .../dialer/speeddial/SpeedDialFragment.java | 13 ++++- 7 files changed, 141 insertions(+), 20 deletions(-) create mode 100644 java/com/android/dialer/historyitemactions/res/values-land/styles.xml create mode 100644 java/com/android/dialer/historyitemactions/res/values/styles.xml (limited to 'java') diff --git a/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java b/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java index 28663c17d..f90effc4c 100644 --- a/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java +++ b/java/com/android/dialer/historyitemactions/HistoryItemActionBottomSheet.java @@ -19,13 +19,17 @@ package com.android.dialer.historyitemactions; import android.content.Context; import android.content.res.ColorStateList; import android.os.Bundle; -import android.support.design.widget.BottomSheetDialog; +import android.support.annotation.NonNull; +import android.support.design.bottomsheet.BottomSheetBehavior; +import android.support.design.bottomsheet.BottomSheetBehavior.BottomSheetCallback; +import android.support.design.bottomsheet.BottomSheetDialog; import android.support.v4.content.ContextCompat; import android.text.TextUtils; import android.view.LayoutInflater; 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 @@ public class HistoryItemActionBottomSheet extends BottomSheetDialog implements O Context context, HistoryItemBottomSheetHeaderInfo historyItemBottomSheetHeaderInfo, List 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 @@ public class HistoryItemActionBottomSheet extends BottomSheetDialog implements O @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 @@ public class HistoryItemActionBottomSheet extends BottomSheetDialog implements O } } - 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 @@ public class HistoryItemActionBottomSheet extends BottomSheetDialog implements O 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 f2dc8c7ac..721740f97 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 --> + android:orientation="horizontal" + android:background="#FFFFFF"> + android:layout_height="match_parent"> + + + + + + + + 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 000000000..af9c0d94d --- /dev/null +++ b/java/com/android/dialer/historyitemactions/res/values-land/styles.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/java/com/android/dialer/historyitemactions/res/values/dimens.xml b/java/com/android/dialer/historyitemactions/res/values/dimens.xml index 47bf804ac..a98101e0e 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 @@ 48dp 12dp + 4dp \ 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 000000000..fbdfb7d60 --- /dev/null +++ b/java/com/android/dialer/historyitemactions/res/values/styles.xml @@ -0,0 +1,26 @@ + + + + + +