summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNancy Chen <nancychen@google.com>2015-09-11 00:47:31 -0400
committerNancy Chen <nancychen@google.com>2015-09-11 00:54:47 -0400
commitf3d9f829cef463eb328285ed478a9323e2c085e6 (patch)
tree61b5e4edf2f9100f47d41010562f3911c436ac78 /src
parent27031077952a07e9203c3f4594ae6ae6ec7ba108 (diff)
Translate FAB up and down when Snackbar appears and disappears.
This is implements custom behavior according the Material Design spec that the Snackbar cannot obscure the FAB. Converts the dialtacts activity layout to a CoordinatorLayout and attaches the FloatingActionButtonBehavior to the FAB. Bug: 23687913 Change-Id: Ic4d0493db415bb97cf7e21de4f23a02df9f753b1
Diffstat (limited to 'src')
-rw-r--r--src/com/android/dialer/DialtactsActivity.java6
-rw-r--r--src/com/android/dialer/FloatingActionButtonBehavior.java50
2 files changed, 53 insertions, 3 deletions
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 4ade04af1..6d8ed61e2 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -30,6 +30,7 @@ import android.os.Bundle;
import android.os.Trace;
import android.provider.CallLog.Calls;
import android.speech.RecognizerIntent;
+import android.support.design.widget.CoordinatorLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.telecom.PhoneAccount;
@@ -52,7 +53,6 @@ import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AbsListView.OnScrollListener;
import android.widget.EditText;
-import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.PopupMenu;
import android.widget.TextView;
@@ -143,7 +143,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
private static final int FAB_SCALE_IN_DELAY_MS = 300;
- private FrameLayout mParentLayout;
+ private CoordinatorLayout mParentLayout;
/**
* Fragment containing the dialpad that slides into view
@@ -468,7 +468,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
mSlideIn.setAnimationListener(mSlideInListener);
mSlideOut.setAnimationListener(mSlideOutListener);
- mParentLayout = (FrameLayout) findViewById(R.id.dialtacts_mainlayout);
+ mParentLayout = (CoordinatorLayout) findViewById(R.id.dialtacts_mainlayout);
mParentLayout.setOnDragListener(new LayoutOnDragListener());
floatingActionButtonContainer.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
diff --git a/src/com/android/dialer/FloatingActionButtonBehavior.java b/src/com/android/dialer/FloatingActionButtonBehavior.java
new file mode 100644
index 000000000..8a407bd61
--- /dev/null
+++ b/src/com/android/dialer/FloatingActionButtonBehavior.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2015 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.
+ */
+package com.android.dialer;
+
+import android.content.Context;
+import android.support.design.widget.CoordinatorLayout;
+import android.support.design.widget.Snackbar.SnackbarLayout;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.FrameLayout;
+
+/**
+ * Implements custom behavior for the movement of the FAB in response to the Snackbar.
+ * Because we are not using the design framework FloatingActionButton widget, we need to manually
+ * implement the Material Design behavior of having the FAB translate upward and downward with
+ * the appearance and disappearance of a Snackbar.
+ */
+public class FloatingActionButtonBehavior extends CoordinatorLayout.Behavior<FrameLayout> {
+ public FloatingActionButtonBehavior(Context context, AttributeSet attrs) {
+ }
+
+ @Override
+ public boolean layoutDependsOn(CoordinatorLayout parent, FrameLayout child, View dependency) {
+ // This needs to return true to trigger the callback correctly.
+ return true;
+ }
+
+ @Override
+ public boolean onDependentViewChanged(CoordinatorLayout parent, FrameLayout child,
+ View dependency) {
+ if (dependency instanceof SnackbarLayout) {
+ float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight());
+ child.setTranslationY(translationY);
+ }
+ return true;
+ }
+}