summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/app/DialtactsActivity.java
diff options
context:
space:
mode:
authorcalderwoodra <calderwoodra@google.com>2017-10-09 16:59:04 -0700
committerEric Erfanian <erfanian@google.com>2017-10-10 07:13:45 -0700
commit6007f5208514c4f69ca6fa75507abba92ef5372d (patch)
treede82c4575349ebd7c211ace9785cf51100c1723a /java/com/android/dialer/app/DialtactsActivity.java
parent19e6dbd30ae88e68cd68f3d3873440d50d19d902 (diff)
Improved FAB UX.
One of the biggest issues with the FAB is that it doesn't scale in/out properly. It looked more like setVisibility was being called instead. This CL migrates the FAB controller to use the built in scale in/out methods #show and #hide and the animation is much nicer. Some of the other issues were: - Now scaling animation is correct and visible. - No longer flashes when going in/out of search. - No longer shows on top of the return to call controller. - No longer bugs when switching between VVM TOS and contacts. - No longer shows FAB over VVM TOS when entering/exiting search Bug: 62588192,35359563,64116334,27458212,37991480,67419607 Test: manual PiperOrigin-RevId: 171608105 Change-Id: I9b3f61df35abf3659a432adf411b1b7d20eba683
Diffstat (limited to 'java/com/android/dialer/app/DialtactsActivity.java')
-rw-r--r--java/com/android/dialer/app/DialtactsActivity.java43
1 files changed, 32 insertions, 11 deletions
diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 5f3620b1c..164c1ea82 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -38,6 +38,7 @@ import android.support.annotation.NonNull;
import android.support.annotation.VisibleForTesting;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
+import android.support.design.widget.FloatingActionButton.OnVisibilityChangedListener;
import android.support.design.widget.Snackbar;
import android.support.v4.app.ActivityCompat;
import android.support.v4.view.ViewPager;
@@ -67,7 +68,6 @@ import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
import com.android.contacts.common.list.PhoneNumberListAdapter;
import com.android.contacts.common.list.PhoneNumberPickerFragment.CursorReranker;
import com.android.contacts.common.list.PhoneNumberPickerFragment.OnLoadFinishedListener;
-import com.android.contacts.common.widget.FloatingActionButtonController;
import com.android.dialer.animation.AnimUtils;
import com.android.dialer.animation.AnimationListenerAdapter;
import com.android.dialer.app.calllog.CallLogActivity;
@@ -98,6 +98,7 @@ import com.android.dialer.callintent.CallIntentBuilder;
import com.android.dialer.callintent.CallSpecificAppData;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.ThreadUtil;
import com.android.dialer.configprovider.ConfigProviderBindings;
import com.android.dialer.constants.ActivityRequestCodes;
import com.android.dialer.contactsfragment.ContactsFragment;
@@ -133,6 +134,7 @@ import com.android.dialer.util.PermissionsUtil;
import com.android.dialer.util.TouchPointManager;
import com.android.dialer.util.TransactionSafeActivity;
import com.android.dialer.util.ViewUtil;
+import com.android.dialer.widget.FloatingActionButtonController;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -548,7 +550,7 @@ public class DialtactsActivity extends TransactionSafeActivity
mDialerDatabaseHelper.startSmartDialUpdateThread();
}
if (mIsDialpadShown) {
- mFloatingActionButtonController.setVisible(false);
+ mFloatingActionButtonController.scaleOut();
} else {
mFloatingActionButtonController.align(getFabAlignment(), false /* animate */);
}
@@ -857,7 +859,7 @@ public class DialtactsActivity extends TransactionSafeActivity
mFloatingActionButtonController.scaleOut();
maybeEnterSearchUi();
} else {
- mFloatingActionButtonController.setVisible(false);
+ mFloatingActionButtonController.scaleOut();
maybeEnterSearchUi();
}
mActionBarController.onDialpadUp();
@@ -955,7 +957,7 @@ public class DialtactsActivity extends TransactionSafeActivity
ft.hide(mDialpadFragment);
ft.commit();
}
- mFloatingActionButtonController.scaleIn(AnimUtils.NO_DELAY);
+ mFloatingActionButtonController.scaleIn();
}
private void updateSearchFragmentPosition() {
@@ -1271,12 +1273,28 @@ public class DialtactsActivity extends TransactionSafeActivity
setNotInSearchUi();
- // Restore the FAB for the lists fragment.
- if (getFabAlignment() != FloatingActionButtonController.ALIGN_END) {
- mFloatingActionButtonController.setVisible(false);
+ // There are four states the fab can be in:
+ // - Not visible and should remain not visible (do nothing)
+ // - Not visible (move then show the fab)
+ // - Visible, in the correct position (do nothing)
+ // - Visible, in the wrong position (hide, move, then show the fab)
+ if (mFloatingActionButtonController.isVisible()
+ && getFabAlignment() != FloatingActionButtonController.ALIGN_END) {
+ mFloatingActionButtonController.scaleOut(
+ new OnVisibilityChangedListener() {
+ @Override
+ public void onHidden(FloatingActionButton floatingActionButton) {
+ super.onHidden(floatingActionButton);
+ onPageScrolled(
+ mListsFragment.getCurrentTabIndex(), 0 /* offset */, 0 /* pixelOffset */);
+ mFloatingActionButtonController.scaleIn();
+ }
+ });
+ } else if (!mFloatingActionButtonController.isVisible() && mListsFragment.shouldShowFab()) {
+ onPageScrolled(mListsFragment.getCurrentTabIndex(), 0 /* offset */, 0 /* pixelOffset */);
+ ThreadUtil.getUiThreadHandler()
+ .postDelayed(() -> mFloatingActionButtonController.scaleIn(), FAB_SCALE_IN_DELAY_MS);
}
- mFloatingActionButtonController.scaleIn(FAB_SCALE_IN_DELAY_MS);
- onPageScrolled(mListsFragment.getCurrentTabIndex(), 0 /* offset */, 0 /* pixelOffset */);
final FragmentTransaction transaction = getFragmentManager().beginTransaction();
if (mSmartDialSearchFragment != null) {
@@ -1527,8 +1545,10 @@ public class DialtactsActivity extends TransactionSafeActivity
public void onPageSelected(int position) {
updateMissedCalls();
int tabIndex = mListsFragment.getCurrentTabIndex();
+ if (tabIndex != mPreviouslySelectedTabIndex) {
+ mFloatingActionButtonController.scaleIn();
+ }
mPreviouslySelectedTabIndex = tabIndex;
- mFloatingActionButtonController.setVisible(true);
timeTabSelected = SystemClock.elapsedRealtime();
}
@@ -1563,7 +1583,8 @@ public class DialtactsActivity extends TransactionSafeActivity
return mActionBarHeight;
}
- private int getFabAlignment() {
+ @VisibleForTesting
+ public int getFabAlignment() {
if (!mIsLandscape
&& !isInSearchUi()
&& mListsFragment.getCurrentTabIndex() == DialtactsPagerAdapter.TAB_INDEX_SPEED_DIAL) {