From ef9a6972ce3bc51c44f5de4cb72cb05e71c946a3 Mon Sep 17 00:00:00 2001 From: Hyunyoung Song Date: Mon, 18 May 2020 08:58:05 -0700 Subject: [PATCH] AllAppsSearch interface change Version 3 Change-Id: I79f635582075a1e33e970e4f4eb6ec653572fefe --- .../allapps/AllAppsTransitionController.java | 43 +++++++++++-------- .../AbstractStateChangeTouchController.java | 5 +++ .../systemui/plugins/AllAppsSearchPlugin.java | 23 ++++++++-- 3 files changed, 49 insertions(+), 22 deletions(-) diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index f0570368ac..aa9edda582 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -1,6 +1,5 @@ package com.android.launcher3.allapps; -import static com.android.launcher3.LauncherState.ALL_APPS; import static com.android.launcher3.LauncherState.ALL_APPS_CONTENT; import static com.android.launcher3.LauncherState.ALL_APPS_HEADER_EXTRA; import static com.android.launcher3.LauncherState.APPS_VIEW_ITEM_MASK; @@ -23,6 +22,7 @@ import android.util.FloatProperty; import android.view.View; import android.view.ViewGroup; import android.view.animation.Interpolator; +import android.widget.EditText; import com.android.launcher3.DeviceProfile; import com.android.launcher3.DeviceProfile.OnDeviceProfileChangeListener; @@ -87,6 +87,7 @@ public class AllAppsTransitionController implements StateHandler, private float mScrollRangeDelta = 0; + // plugin related variables private AllAppsSearchPlugin mPlugin; private View mPluginContent; @@ -131,7 +132,6 @@ public class AllAppsTransitionController implements StateHandler, float shiftCurrent = progress * mShiftRange; mAppsView.setTranslationY(shiftCurrent); - if (mPlugin != null) { mPlugin.setProgress(progress); } @@ -160,7 +160,6 @@ public class AllAppsTransitionController implements StateHandler, setProgress(state.getVerticalProgress(mLauncher)); setAlphas(state, new StateAnimationConfig(), NO_ANIM_PROPERTY_SETTER); onProgressAnimationEnd(); - updatePlugin(state); } /** @@ -194,20 +193,6 @@ public class AllAppsTransitionController implements StateHandler, builder.add(anim); setAlphas(toState, config, builder); - - updatePlugin(toState); - } - - private void updatePlugin(LauncherState toState) { - if (mPlugin == null) return; - if (toState == ALL_APPS) { - // TODO: change this from toggle event to continuous transition event. - mPlugin.setEditText(mAppsView.getSearchUiManager().setTextSearchEnabled(true)); - } else { - mPlugin.setEditText(null); - mAppsView.getSearchUiManager().setTextSearchEnabled(false); - } - } public Animator createSpringAnimation(float... progressValues) { @@ -276,6 +261,7 @@ public class AllAppsTransitionController implements StateHandler, if (Float.compare(mProgress, 1f) == 0) { mAppsView.reset(false /* animate */); } + updatePluginAnimationEnd(); } @Override @@ -285,7 +271,7 @@ public class AllAppsTransitionController implements StateHandler, R.layout.all_apps_content_layout, mAppsView, false); mAppsView.addView(mPluginContent); mPluginContent.setAlpha(0f); - mPlugin.setup((ViewGroup) mPluginContent, mLauncher); + mPlugin.setup((ViewGroup) mPluginContent, mLauncher, mShiftRange); } @Override @@ -297,4 +283,25 @@ public class AllAppsTransitionController implements StateHandler, public void onActivityDestroyed() { PluginManagerWrapper.INSTANCE.get(mLauncher).removePluginListener(this); } + + /** Used for the plugin to signal when drag starts happens + * @param toAllApps*/ + public void onDragStart(boolean toAllApps) { + if (mPlugin == null) return; + + if (toAllApps) { + EditText editText = mAppsView.getSearchUiManager().setTextSearchEnabled(true); + mPlugin.setEditText(editText); + } + mPlugin.onDragStart(toAllApps ? 1f : 0f); + } + + private void updatePluginAnimationEnd() { + if (mPlugin == null) return; + mPlugin.onAnimationEnd(mProgress); + if (Float.compare(mProgress, 1f) == 0) { + mAppsView.getSearchUiManager().setTextSearchEnabled(false); + mPlugin.setEditText(null); + } + } } diff --git a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java index 2e63ccf19f..2c21609fa6 100644 --- a/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java +++ b/src/com/android/launcher3/touch/AbstractStateChangeTouchController.java @@ -242,6 +242,7 @@ public abstract class AbstractStateChangeTouchController public void onDragStart(boolean start, float startDisplacement) { mStartState = mLauncher.getStateManager().getState(); mIsLogContainerSet = false; + if (mCurrentAnimation == null) { mFromState = mStartState; mToState = null; @@ -259,6 +260,10 @@ public abstract class AbstractStateChangeTouchController } mCanBlockFling = mFromState == NORMAL; mFlingBlockCheck.unblockFling(); + // Must be called after all the animation controllers have been paused + if (mToState == ALL_APPS || mToState == NORMAL) { + mLauncher.getAllAppsController().onDragStart(mToState == ALL_APPS); + } } @Override diff --git a/src_plugins/com/android/systemui/plugins/AllAppsSearchPlugin.java b/src_plugins/com/android/systemui/plugins/AllAppsSearchPlugin.java index d458fc4a75..c57f07df44 100644 --- a/src_plugins/com/android/systemui/plugins/AllAppsSearchPlugin.java +++ b/src_plugins/com/android/systemui/plugins/AllAppsSearchPlugin.java @@ -19,17 +19,32 @@ package com.android.systemui.plugins; import android.app.Activity; import android.view.ViewGroup; import android.widget.EditText; + import com.android.systemui.plugins.annotations.ProvidesInterface; /** - * Implement this plugin interface to add a row of views to the top of the all apps drawer. + * Implement this plugin interface to replace the all apps recycler view of the all apps drawer. */ @ProvidesInterface(action = AllAppsSearchPlugin.ACTION, version = AllAppsSearchPlugin.VERSION) public interface AllAppsSearchPlugin extends Plugin { String ACTION = "com.android.systemui.action.PLUGIN_ALL_APPS_SEARCH_ACTIONS"; - int VERSION = 2; + int VERSION = 3; - void setup(ViewGroup parent, Activity activity); - void setEditText(EditText editText); + /** Following are the order that these methods should be called. */ + void setup(ViewGroup parent, Activity activity, float allAppsContainerHeight); + + /** + * When drag starts, pass window inset related fields and the progress to indicate + * whether user is swiping down or swiping up + */ + void onDragStart(float progress); + + /** progress is between [0, 1] 1: down, 0: up */ void setProgress(float progress); + + /** Called when container animation stops, so that plugin can perform cleanups */ + void onAnimationEnd(float progress); + + /** pass over the search box object */ + void setEditText(EditText editText); }