From 8c1a935a45fe434a3afca3d88a2cbc10403a59fd Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Wed, 28 Mar 2018 13:17:32 -0700 Subject: [PATCH] Don't wait until layout to calculate the scroll range State UI is based on scroll range, which is applied on insets change. So the scroll range should be updated as part of insets change, for the State UI to be applied properly Bug: 77220795 Change-Id: I839f89e4887d9731b1483135724227c4245a00a9 --- .../allapps/AllAppsTransitionController.java | 20 ++++----- .../launcher3/allapps/SearchUiManager.java | 17 -------- .../search/AppsSearchContainerLayout.java | 43 ++++++------------- 3 files changed, 22 insertions(+), 58 deletions(-) diff --git a/src/com/android/launcher3/allapps/AllAppsTransitionController.java b/src/com/android/launcher3/allapps/AllAppsTransitionController.java index aafae10976..8788db4454 100644 --- a/src/com/android/launcher3/allapps/AllAppsTransitionController.java +++ b/src/com/android/launcher3/allapps/AllAppsTransitionController.java @@ -23,7 +23,6 @@ import com.android.launcher3.LauncherState; import com.android.launcher3.LauncherStateManager.AnimationConfig; import com.android.launcher3.LauncherStateManager.StateHandler; import com.android.launcher3.R; -import com.android.launcher3.allapps.SearchUiManager.OnScrollRangeChangeListener; import com.android.launcher3.anim.AnimationSuccessListener; import com.android.launcher3.anim.AnimatorSetBuilder; import com.android.launcher3.anim.PropertySetter; @@ -39,8 +38,7 @@ import com.android.launcher3.util.Themes; * If release velocity < THRES1, snap according to either top or bottom depending on whether it's * closer to top or closer to the page indicator. */ -public class AllAppsTransitionController - implements OnScrollRangeChangeListener, StateHandler, OnDeviceProfileChangeListener { +public class AllAppsTransitionController implements StateHandler, OnDeviceProfileChangeListener { public static final Property ALL_APPS_PROGRESS = new Property(Float.class, "allAppsProgress") { @@ -71,11 +69,11 @@ public class AllAppsTransitionController private float mShiftRange; // changes depending on the orientation private float mProgress; // [0, 1], mShiftRange * mProgress = shiftCurrent - private static final float DEFAULT_SHIFT_RANGE = 10; + private float mScrollRangeDelta = 0; public AllAppsTransitionController(Launcher l) { mLauncher = l; - mShiftRange = DEFAULT_SHIFT_RANGE; + mShiftRange = mLauncher.getDeviceProfile().heightPx; mProgress = 1f; mIsDarkTheme = Themes.getAttrBoolean(mLauncher, R.attr.isMainColorDark); @@ -95,6 +93,7 @@ public class AllAppsTransitionController @Override public void onDeviceProfileChanged(DeviceProfile dp) { mIsVerticalLayout = dp.isVerticalBarLayout(); + setScrollRangeDelta(mScrollRangeDelta); if (mIsVerticalLayout) { mAppsView.setAlpha(1); @@ -205,13 +204,14 @@ public class AllAppsTransitionController public void setupViews(AllAppsContainerView appsView) { mAppsView = appsView; - mAppsView.getSearchUiManager().addOnScrollRangeChangeListener(this); } - @Override - public void onScrollRangeChanged(int scrollRange) { - mShiftRange = scrollRange; - setProgress(mProgress); + /** + * Updates the total scroll range but does not update the UI. + */ + public void setScrollRangeDelta(float delta) { + mScrollRangeDelta = delta; + mShiftRange = mLauncher.getDeviceProfile().heightPx - mScrollRangeDelta; } /** diff --git a/src/com/android/launcher3/allapps/SearchUiManager.java b/src/com/android/launcher3/allapps/SearchUiManager.java index d8568f8eaf..68193f5c1c 100644 --- a/src/com/android/launcher3/allapps/SearchUiManager.java +++ b/src/com/android/launcher3/allapps/SearchUiManager.java @@ -15,8 +15,6 @@ */ package com.android.launcher3.allapps; -import android.support.animation.SpringAnimation; -import android.support.annotation.NonNull; import android.view.KeyEvent; /** @@ -29,11 +27,6 @@ public interface SearchUiManager { */ void initialize(AllAppsContainerView containerView); - /** - * A {@link SpringAnimation} that will be used when the user flings. - */ - @NonNull SpringAnimation getSpringForFling(); - /** * Notifies the search manager to close any active search session. */ @@ -44,14 +37,4 @@ public interface SearchUiManager { * some UI beforehand. */ void preDispatchKeyEvent(KeyEvent keyEvent); - - void addOnScrollRangeChangeListener(OnScrollRangeChangeListener listener); - - /** - * Callback for listening to changes in the vertical scroll range when opening all-apps. - */ - interface OnScrollRangeChangeListener { - - void onScrollRangeChanged(int scrollRange); - } } diff --git a/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java b/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java index dd80dace34..ad61c55db7 100644 --- a/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java +++ b/src/com/android/launcher3/allapps/search/AppsSearchContainerLayout.java @@ -23,10 +23,6 @@ import static com.android.launcher3.graphics.IconNormalizer.ICON_VISIBLE_AREA_FA import android.content.Context; import android.graphics.Rect; -import android.support.animation.FloatValueHolder; -import android.support.animation.SpringAnimation; -import android.support.animation.SpringForce; -import android.support.annotation.NonNull; import android.text.Selection; import android.text.Spannable; import android.text.SpannableString; @@ -39,6 +35,7 @@ import android.view.ViewGroup.MarginLayoutParams; import com.android.launcher3.DeviceProfile; import com.android.launcher3.ExtendedEditText; +import com.android.launcher3.Insettable; import com.android.launcher3.Launcher; import com.android.launcher3.R; import com.android.launcher3.allapps.AllAppsContainerView; @@ -55,7 +52,7 @@ import java.util.ArrayList; */ public class AppsSearchContainerLayout extends ExtendedEditText implements SearchUiManager, AllAppsSearchBarController.Callbacks, - AllAppsStore.OnUpdateListener { + AllAppsStore.OnUpdateListener, Insettable { private final Launcher mLauncher; @@ -64,7 +61,6 @@ public class AppsSearchContainerLayout extends ExtendedEditText private AlphabeticalAppsList mApps; private AllAppsContainerView mAppsView; - private SpringAnimation mSpring; public AppsSearchContainerLayout(Context context) { this(context, null); @@ -91,9 +87,6 @@ public class AppsSearchContainerLayout extends ExtendedEditText spanned.setSpan(new TintedDrawableSpan(getContext(), R.drawable.ic_allapps_search), 0, 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); setHint(spanned); - - // Note: This spring does nothing. - mSpring = new SpringAnimation(new FloatValueHolder()).setSpring(new SpringForce(0)); } @Override @@ -145,11 +138,6 @@ public class AppsSearchContainerLayout extends ExtendedEditText new DefaultAppSearchAlgorithm(mApps.getApps()), this, mLauncher, this); } - @Override - public @NonNull SpringAnimation getSpringForFling() { - return mSpring; - } - @Override public void onAppsUpdated() { mSearchBarController.refreshSearchResult(); @@ -206,22 +194,15 @@ public class AppsSearchContainerLayout extends ExtendedEditText } @Override - public void addOnScrollRangeChangeListener(final OnScrollRangeChangeListener listener) { - mLauncher.getHotseat().addOnLayoutChangeListener(new OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, - int oldLeft, int oldTop, int oldRight, int oldBottom) { - DeviceProfile dp = mLauncher.getDeviceProfile(); - if (!dp.isVerticalBarLayout()) { - Rect insets = dp.getInsets(); - int hotseatBottom = bottom - dp.hotseatBarBottomPaddingPx - insets.bottom; - MarginLayoutParams mlp = ((MarginLayoutParams) getLayoutParams()); - int myBot = mlp.topMargin + (int) getTranslationY() + mlp.height; - listener.onScrollRangeChanged(hotseatBottom - myBot); - } else { - listener.onScrollRangeChanged(bottom); - } - } - }); + public void setInsets(Rect insets) { + DeviceProfile dp = mLauncher.getDeviceProfile(); + if (dp.isVerticalBarLayout()) { + mLauncher.getAllAppsController().setScrollRangeDelta(0); + } else { + MarginLayoutParams mlp = ((MarginLayoutParams) getLayoutParams()); + int myBot = mlp.topMargin + (int) getTranslationY() + mlp.height; + mLauncher.getAllAppsController().setScrollRangeDelta( + dp.hotseatBarBottomPaddingPx + myBot); + } } }