From 758d5047be84894698669c6bbc42822ff9e2cf08 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Wed, 8 Nov 2017 14:38:23 -0800 Subject: [PATCH] Refactor InsettableFrameLayout/DragLayer and add StateListener interface. Bug: 65387919 Change-Id: I5eb94c0f3962d44f63af3efc92d852e019bba711 --- .../launcher3/InsettableFrameLayout.java | 12 ++----- .../launcher3/LauncherStateManager.java | 32 ++++++++++++++++++- .../launcher3/dragndrop/DragLayer.java | 7 ++-- 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/com/android/launcher3/InsettableFrameLayout.java b/src/com/android/launcher3/InsettableFrameLayout.java index be7649013c..60f5ca2925 100644 --- a/src/com/android/launcher3/InsettableFrameLayout.java +++ b/src/com/android/launcher3/InsettableFrameLayout.java @@ -9,8 +9,7 @@ import android.view.ViewDebug; import android.view.ViewGroup; import android.widget.FrameLayout; -public class InsettableFrameLayout extends FrameLayout implements - ViewGroup.OnHierarchyChangeListener, Insettable { +public class InsettableFrameLayout extends FrameLayout implements Insettable { @ViewDebug.ExportedProperty(category = "launcher") protected Rect mInsets = new Rect(); @@ -21,7 +20,6 @@ public class InsettableFrameLayout extends FrameLayout implements public InsettableFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); - setOnHierarchyChangeListener(this); } public void setFrameLayoutChildInsets(View child, Rect newInsets, Rect oldInsets) { @@ -95,12 +93,8 @@ public class InsettableFrameLayout extends FrameLayout implements } @Override - public void onChildViewAdded(View parent, View child) { + public void onViewAdded(View child) { + super.onViewAdded(child); setFrameLayoutChildInsets(child, mInsets, new Rect()); } - - @Override - public void onChildViewRemoved(View parent, View child) { - } - } diff --git a/src/com/android/launcher3/LauncherStateManager.java b/src/com/android/launcher3/LauncherStateManager.java index f016e8d2e5..3b58ed8e04 100644 --- a/src/com/android/launcher3/LauncherStateManager.java +++ b/src/com/android/launcher3/LauncherStateManager.java @@ -25,7 +25,6 @@ import android.os.Handler; import android.os.Looper; import android.view.View; -import com.android.launcher3.allapps.AllAppsTransitionController; import com.android.launcher3.anim.AnimationLayerSet; import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.AnimatorPlaybackController; @@ -83,6 +82,8 @@ public class LauncherStateManager { private StateHandler[] mStateHandlers; private LauncherState mState = NORMAL; + private StateListener mStateListener; + public LauncherStateManager(Launcher l) { mUiHandler = new Handler(Looper.getMainLooper()); mLauncher = l; @@ -99,6 +100,10 @@ public class LauncherStateManager { return mStateHandlers; } + public void setStateListener(StateListener stateListener) { + mStateListener = stateListener; + } + /** * @see #goToState(LauncherState, boolean, Runnable) */ @@ -157,6 +162,9 @@ public class LauncherStateManager { for (StateHandler handler : getStateHandlers()) { handler.setState(state); } + if (mStateListener != null) { + mStateListener.onStateSetImmediately(state); + } mLauncher.getUserEventDispatcher().resetElapsedContainerMillis(); // Run any queued runnable @@ -210,6 +218,17 @@ public class LauncherStateManager { public void onAnimationStart(Animator animation) { // Change the internal state only when the transition actually starts setState(state); + if (mStateListener != null) { + mStateListener.onStateTransitionStart(state); + } + } + + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + if (mStateListener != null) { + mStateListener.onStateTransitionComplete(mState); + } } @Override @@ -304,4 +323,15 @@ public class LauncherStateManager { void setStateWithAnimation(LauncherState toState, AnimationLayerSet layerViews, AnimatorSet anim, AnimationConfig config); } + + public interface StateListener { + + /** + * Called when the state is set without an animation. + */ + void onStateSetImmediately(LauncherState state); + + void onStateTransitionStart(LauncherState toState); + void onStateTransitionComplete(LauncherState finalState); + } } diff --git a/src/com/android/launcher3/dragndrop/DragLayer.java b/src/com/android/launcher3/dragndrop/DragLayer.java index 8189b236e9..9f9822c4c6 100644 --- a/src/com/android/launcher3/dragndrop/DragLayer.java +++ b/src/com/android/launcher3/dragndrop/DragLayer.java @@ -703,13 +703,14 @@ public class DragLayer extends InsettableFrameLayout { } @Override - public void onChildViewAdded(View parent, View child) { - super.onChildViewAdded(parent, child); + public void onViewAdded(View child) { + super.onViewAdded(child); updateChildIndices(); } @Override - public void onChildViewRemoved(View parent, View child) { + public void onViewRemoved(View child) { + super.onViewRemoved(child); updateChildIndices(); }