summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcalderwoodra <calderwoodra@google.com>2018-03-01 16:59:22 -0800
committerCopybara-Service <copybara-piper@google.com>2018-03-01 18:17:33 -0800
commit164ddd192af70ff07a4ad733180599e081a59046 (patch)
tree7327816bbfd588e00601e1565e97b65b40438394
parent1e04880221a772aa1705f0e549cc1c6c848c4eb9 (diff)
Implemented DialerFloatingActionButton
Implemented wrapper class for FloatingActionButton to resolve some of FloatingActinButton's many issues. One of which is alllowing clicks while animating that was causing a crash in NUI. This change also fixes an issue with the dialpad exit animation. Bug: 73995512 Test: Robolectric and Espresso don't support these kinds of tests very well PiperOrigin-RevId: 187556390 Change-Id: I4cb7c2346a0ef09f2f3d8b48e7e14d01460cd1a7
-rw-r--r--java/com/android/dialer/main/impl/MainSearchController.java5
-rw-r--r--java/com/android/dialer/main/impl/res/layout/main_activity.xml2
-rw-r--r--java/com/android/dialer/widget/DialerFloatingActionButton.java79
3 files changed, 85 insertions, 1 deletions
diff --git a/java/com/android/dialer/main/impl/MainSearchController.java b/java/com/android/dialer/main/impl/MainSearchController.java
index a6bdec5eb..993ed3d8c 100644
--- a/java/com/android/dialer/main/impl/MainSearchController.java
+++ b/java/com/android/dialer/main/impl/MainSearchController.java
@@ -136,6 +136,11 @@ public class MainSearchController implements SearchBarListener {
}
searchFragment.setQuery("", CallInitiationType.Type.DIALPAD);
+ // Split the transactions so that the dialpad fragment isn't popped off the stack when we exit
+ // search. We do this so that the dialpad actually animates down instead of just disappearing.
+ transaction.commit();
+ transaction = mainActivity.getFragmentManager().beginTransaction();
+
// Show Dialpad
if (getDialpadFragment() == null) {
DialpadFragment dialpadFragment = new DialpadFragment();
diff --git a/java/com/android/dialer/main/impl/res/layout/main_activity.xml b/java/com/android/dialer/main/impl/res/layout/main_activity.xml
index b69625e63..0883acebc 100644
--- a/java/com/android/dialer/main/impl/res/layout/main_activity.xml
+++ b/java/com/android/dialer/main/impl/res/layout/main_activity.xml
@@ -37,7 +37,7 @@
android:layout_height="match_parent"
android:layout_above="@+id/bottom_nav_bar"/>
- <android.support.design.widget.FloatingActionButton
+ <com.android.dialer.widget.DialerFloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/java/com/android/dialer/widget/DialerFloatingActionButton.java b/java/com/android/dialer/widget/DialerFloatingActionButton.java
new file mode 100644
index 000000000..17ad90736
--- /dev/null
+++ b/java/com/android/dialer/widget/DialerFloatingActionButton.java
@@ -0,0 +1,79 @@
+/*
+ * 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
+ */
+
+package com.android.dialer.widget;
+
+import android.content.Context;
+import android.support.annotation.Nullable;
+import android.support.design.widget.FloatingActionButton;
+import android.util.AttributeSet;
+import com.android.dialer.common.Assert;
+
+/**
+ * Since {@link FloatingActionButton} is possibly the worst widget supported by the framework, we
+ * need this class to work around several of it's bugs.
+ *
+ * <p>Current fixes:
+ *
+ * <ul>
+ * <li>Being able to trigger click events twice.
+ * <li>Banning setVisibility since 9 times out of 10, it just causes bad state.
+ * </ul>
+ *
+ * Planned fixes:
+ *
+ * <ul>
+ * <li>Animating on first show/hide
+ * <li>Being able to call show/hide rapidly and being in the proper state
+ * <li>Having a proper 48x48 touch target in mini mode
+ * </ul>
+ */
+public class DialerFloatingActionButton extends FloatingActionButton {
+
+ public DialerFloatingActionButton(Context context, AttributeSet attributeSet) {
+ super(context, attributeSet);
+ }
+
+ @Override
+ public void show() {
+ super.show();
+ setClickable(true);
+ }
+
+ @Override
+ public void show(@Nullable OnVisibilityChangedListener onVisibilityChangedListener) {
+ super.show(onVisibilityChangedListener);
+ setClickable(true);
+ }
+
+ @Override
+ public void hide() {
+ super.hide();
+ setClickable(false);
+ }
+
+ @Override
+ public void hide(@Nullable OnVisibilityChangedListener onVisibilityChangedListener) {
+ super.hide(onVisibilityChangedListener);
+ setClickable(false);
+ }
+
+ @Override
+ public void setVisibility(int i) {
+ throw Assert.createUnsupportedOperationFailException(
+ "Do not call setVisibility, call show/hide instead");
+ }
+}