From 6ac079b4d236120232f59c080aeeb17ac16c7c8b Mon Sep 17 00:00:00 2001 From: Jin Cao Date: Wed, 15 Oct 2014 19:59:39 -0700 Subject: Cleanup of drawer drag - Don't do anything in enableHardwareLayer if it's already enabled - Add onDrawerDragEnded in TPC for consistency so it has access to all 3 drawer events. - Change ObjectAnimator back into ViewPropertyAnimator Change-Id: If78b833d35f0c37f6b9e4d8c644c8a6714bfc7b7 --- src/com/android/mail/ui/FolderListFragment.java | 46 +++++++++---------------- src/com/android/mail/ui/TwoPaneController.java | 9 ++++- src/com/android/mail/ui/TwoPaneLayout.java | 8 ++--- src/com/android/mail/utils/Utils.java | 3 +- 4 files changed, 30 insertions(+), 36 deletions(-) (limited to 'src/com/android/mail') diff --git a/src/com/android/mail/ui/FolderListFragment.java b/src/com/android/mail/ui/FolderListFragment.java index 87f315c16..3ac54f04d 100644 --- a/src/com/android/mail/ui/FolderListFragment.java +++ b/src/com/android/mail/ui/FolderListFragment.java @@ -226,9 +226,6 @@ public class FolderListFragment extends ListFragment implements private AnimatorListenerAdapter mMiniDrawerFadeInListener; private AnimatorListenerAdapter mListViewFadeInListener; - private ObjectAnimator mCurrentMiniDrawerAnimator; - private ObjectAnimator mCurrentListViewAnimator; - /** * Constructor needs to be public to handle orientation changes and activity lifecycle events. */ @@ -793,14 +790,6 @@ public class FolderListFragment extends ListFragment implements mIsMinimized = minimized; - // Cancel any current running animation if exists - if (mCurrentMiniDrawerAnimator != null) { - mCurrentMiniDrawerAnimator.cancel(); - } - if (mCurrentListViewAnimator != null) { - mCurrentListViewAnimator.cancel(); - } - Utils.enableHardwareLayer(mMiniDrawerView); Utils.enableHardwareLayer(mListView); if (mIsMinimized) { @@ -810,11 +799,15 @@ public class FolderListFragment extends ListFragment implements mMiniDrawerView.setVisibility(View.VISIBLE); // Animate the mini-drawer to fade in. - mCurrentMiniDrawerAnimator = createFadeAnimation(mMiniDrawerView, 1f, duration, - mMiniDrawerFadeInListener); + mMiniDrawerView.animate() + .alpha(1f) + .setDuration(duration) + .setListener(mMiniDrawerFadeInListener); // Animate the list view to fade out. - mCurrentListViewAnimator = createFadeAnimation(mListView, 0f, duration, - mListViewFadeOutListener); + mListView.animate() + .alpha(0f) + .setDuration(duration) + .setListener(mListViewFadeOutListener); } else { // From the current state (either minimized or partially dragged) to maximized. final float startAlpha = mMiniDrawerView.getAlpha(); @@ -823,23 +816,16 @@ public class FolderListFragment extends ListFragment implements mListView.requestFocus(); // Animate the mini-drawer to fade out. - mCurrentMiniDrawerAnimator = createFadeAnimation(mMiniDrawerView, 0f, duration, - mMiniDrawerFadeOutListener); + mMiniDrawerView.animate() + .alpha(0f) + .setDuration(duration) + .setListener(mMiniDrawerFadeOutListener); // Animate the list view to fade in. - mCurrentListViewAnimator = createFadeAnimation(mListView, 1f, duration, - mListViewFadeInListener); + mListView.animate() + .alpha(1f) + .setDuration(duration) + .setListener(mListViewFadeInListener); } - - mCurrentMiniDrawerAnimator.start(); - mCurrentListViewAnimator.start(); - } - - private ObjectAnimator createFadeAnimation(View v, float alpha, long duration, - AnimatorListenerAdapter listener) { - final ObjectAnimator anim = ObjectAnimator.ofFloat(v, "alpha", alpha); - anim.setDuration(duration); - anim.addListener(listener); - return anim; } public void onDrawerDragStarted() { diff --git a/src/com/android/mail/ui/TwoPaneController.java b/src/com/android/mail/ui/TwoPaneController.java index c3d91a794..f36a2b312 100644 --- a/src/com/android/mail/ui/TwoPaneController.java +++ b/src/com/android/mail/ui/TwoPaneController.java @@ -380,7 +380,8 @@ public final class TwoPaneController extends AbstractActivityController implemen } } - protected void onDragStarted() { + /** START TPL DRAWER DRAG CALLBACKS **/ + protected void onDrawerDragStarted() { final FolderListFragment flf = getFolderListFragment(); if (flf == null) { LogUtils.w(LOG_TAG, "no drawer to toggle open/closed"); @@ -400,6 +401,12 @@ public final class TwoPaneController extends AbstractActivityController implemen flf.onDrawerDrag(percent); } + protected void onDrawerDragEnded(boolean minimized) { + // On drag completion animate the drawer to the final state. + setDrawerState(minimized); + } + /** END TPL DRAWER DRAG CALLBACKS **/ + @Override public boolean shouldPreventListSwipesEntirely() { return isDrawerOpen(); diff --git a/src/com/android/mail/ui/TwoPaneLayout.java b/src/com/android/mail/ui/TwoPaneLayout.java index cf1a047ab..df563fd3a 100644 --- a/src/com/android/mail/ui/TwoPaneLayout.java +++ b/src/com/android/mail/ui/TwoPaneLayout.java @@ -475,7 +475,7 @@ final class TwoPaneLayout extends FrameLayout implements ModeChangeListener, @Override public void onDragStarted() { - mController.onDragStarted(); + mController.onDrawerDragStarted(); } @Override @@ -503,13 +503,13 @@ final class TwoPaneLayout extends FrameLayout implements ModeChangeListener, if (isFling) { // Drawer is minimized if velocity is toward the left or it's rtl. if (mIsRtl) { - mController.setDrawerState(velocityX >= 0); + mController.onDrawerDragEnded(velocityX >= 0); } else { - mController.setDrawerState(velocityX < 0); + mController.onDrawerDragEnded(velocityX < 0); } } else { // If we got past the half-way mark, animate it rest of the way. - mController.setDrawerState(computeDragPercentage(deltaX) < 0.5f); + mController.onDrawerDragEnded(computeDragPercentage(deltaX) < 0.5f); } } diff --git a/src/com/android/mail/utils/Utils.java b/src/com/android/mail/utils/Utils.java index 0bfec5858..a9c93bf16 100644 --- a/src/com/android/mail/utils/Utils.java +++ b/src/com/android/mail/utils/Utils.java @@ -922,7 +922,8 @@ public class Utils { * is enabled. Does nothing otherwise. */ public static void enableHardwareLayer(View v) { - if (v != null && v.isHardwareAccelerated()) { + if (v != null && v.isHardwareAccelerated() && + v.getLayerType() != View.LAYER_TYPE_HARDWARE) { v.setLayerType(View.LAYER_TYPE_HARDWARE, null); v.buildLayer(); } -- cgit v1.2.3