Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit abb18ea6 authored by Andy Wickham's avatar Andy Wickham Committed by Android (Google) Code Review
Browse files

Merge "Fixes for floating search bar (e.g. background protection)." into tm-qpr-dev

parents db8b9706 493831af
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -44,6 +44,13 @@

    </com.android.launcher3.allapps.FloatingHeaderView>

    <View
        android:id="@+id/search_protection"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"
        android:forceHasOverlappingRendering="false" />

    <include layout="@layout/search_container_all_apps" />

    <include layout="@layout/all_apps_fast_scroller" />
+1 −1
Original line number Diff line number Diff line
@@ -282,7 +282,7 @@ public class ActivityAllAppsContainerView<T extends Context & AppLauncher
    @Override
    public int getHeaderBottom() {
        if (FeatureFlags.ENABLE_FLOATING_SEARCH_BAR.get()) {
            return super.getHeaderBottom();
            return super.getHeaderBottom() + mHeader.getClipTop();
        }
        return super.getHeaderBottom() + mSearchContainer.getBottom();
    }
+14 −12
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import com.android.launcher3.LauncherPrefs;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.allapps.search.SearchAdapterProvider;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.keyboard.FocusedItemDecorator;
import com.android.launcher3.model.StringCache;
import com.android.launcher3.model.data.ItemInfo;
@@ -123,6 +124,7 @@ public abstract class BaseAllAppsContainerView<T extends Context & ActivityConte
    protected FloatingHeaderView mHeader;
    private View mBottomSheetBackground;
    private View mBottomSheetHandleArea;
    @Nullable private View mSearchBarProtection;

    protected boolean mUsingTabs;
    private boolean mHasWorkApps;
@@ -363,6 +365,11 @@ public abstract class BaseAllAppsContainerView<T extends Context & ActivityConte
        return mSearchRecyclerView;
    }

    @Nullable
    public View getSearchBarProtection() {
        return mSearchBarProtection;
    }

    protected boolean isPersonalTab() {
        return mViewPager == null || mViewPager.getNextPage() == 0;
    }
@@ -410,6 +417,12 @@ public abstract class BaseAllAppsContainerView<T extends Context & ActivityConte
        });

        mHeader = findViewById(R.id.all_apps_header);
        mSearchBarProtection = findViewById(R.id.search_protection);
        if (mSearchBarProtection != null) {
            mSearchBarProtection.setBackgroundColor(mScrimColor);
            mSearchBarProtection.setVisibility(
                    FeatureFlags.ENABLE_FLOATING_SEARCH_BAR.get() ? VISIBLE : GONE);
        }
        mSearchRecyclerView = findViewById(R.id.search_results_list_view);
        mAH.get(AdapterHolder.SEARCH).setup(mSearchRecyclerView,
                /* Filter out A-Z apps */ itemInfo -> false);
@@ -744,7 +757,7 @@ public abstract class BaseAllAppsContainerView<T extends Context & ActivityConte
        if (mHeaderPaint.getColor() != mScrimColor && mHeaderPaint.getColor() != 0) {
            int bottom = getHeaderBottom();
            FloatingHeaderView headerView = getFloatingHeaderView();
            if (!mUsingTabs) {
            if (!mUsingTabs && !FeatureFlags.ENABLE_FLOATING_SEARCH_BAR.get()) {
                // Add protection which is otherwise added when tabs scroll up.
                bottom += headerView.getTabsAdditionalPaddingTop();
            }
@@ -803,17 +816,6 @@ public abstract class BaseAllAppsContainerView<T extends Context & ActivityConte
        return mActivityContext.getDeviceProfile().isTablet ? mBottomSheetBackground : this;
    }

    /**
     * Sets whether the view or its children should react to the window inset.
     * Used for when exiting all apps -> workspace and determines if window inset
     * should be applied.. ex) the work mode switch.
     */
    public void setApplyWindowInset(boolean shouldApplyWindowInset) {
        if (mWorkManager.getWorkModeSwitch() != null) {
            mWorkManager.getWorkModeSwitch().setApplyWindowInset(shouldApplyWindowInset);
        }
    }

    protected void onInitializeRecyclerView(RecyclerView rv) {
        rv.addOnScrollListener(mScrollListener);
    }
+4 −0
Original line number Diff line number Diff line
@@ -364,6 +364,10 @@ public class FloatingHeaderView extends LinearLayout implements
        onHeightUpdated();
    }

    public int getClipTop() {
        return mHeaderClip.top;
    }

    public void reset(boolean animate) {
        if (mAnimator.isStarted()) {
            mAnimator.cancel();
+26 −16
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCH
import static com.android.launcher3.workprofile.PersonalWorkSlidingTabStrip.getTabWidth;

import android.content.Context;
import android.graphics.Insets;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
@@ -27,6 +26,9 @@ import android.view.ViewGroup.MarginLayoutParams;
import android.view.WindowInsets;
import android.widget.Button;

import androidx.core.graphics.Insets;
import androidx.core.view.WindowInsetsCompat;

import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Insettable;
import com.android.launcher3.R;
@@ -49,10 +51,10 @@ public class WorkModeSwitch extends Button implements Insettable, View.OnClickLi
    private static final int FLAG_PROFILE_TOGGLE_ONGOING = 1 << 3;

    private final Rect mInsets = new Rect();
    private final Rect mImeInsets = new Rect();
    private int mFlags;
    private boolean mWorkEnabled;
    private boolean mOnWorkTab;
    private boolean mApplyWindowInset;

    public WorkModeSwitch(Context context) {
        this(context, null, 0);
@@ -89,12 +91,12 @@ public class WorkModeSwitch extends Button implements Insettable, View.OnClickLi
    @Override
    public void setInsets(Rect insets) {
        mInsets.set(insets);
        updateTranslationY();
        MarginLayoutParams lp = (MarginLayoutParams) getLayoutParams();
        if (lp != null) {
            int bottomMargin = getResources().getDimensionPixelSize(R.dimen.work_fab_margin_bottom);
            DeviceProfile dp = ActivityContext.lookupContext(getContext()).getDeviceProfile();
            if (FeatureFlags.ENABLE_FLOATING_SEARCH_BAR.get()) {
                bottomMargin <<= 1;  // Double margin to add space above search bar.
                bottomMargin += dp.hotseatQsbHeight;
            }

@@ -154,7 +156,6 @@ public class WorkModeSwitch extends Button implements Insettable, View.OnClickLi

    private void updateVisibility() {
        clearAnimation();
        onApplyWindowInsets(getRootWindowInsets());
        if (mWorkEnabled && mOnWorkTab) {
            setFlag(FLAG_FADE_ONGOING);
            setVisibility(VISIBLE);
@@ -170,16 +171,29 @@ public class WorkModeSwitch extends Button implements Insettable, View.OnClickLi

    @Override
    public WindowInsets onApplyWindowInsets(WindowInsets insets) {
        if (!Utilities.ATLEAST_R || !mApplyWindowInset) {
            return insets;
        }
        if (insets.isVisible(WindowInsets.Type.ime())) {
            Insets keyboardInsets = insets.getInsets(WindowInsets.Type.ime());
            setTranslationY(mInsets.bottom - keyboardInsets.bottom);
        WindowInsetsCompat windowInsetsCompat =
                WindowInsetsCompat.toWindowInsetsCompat(insets, this);
        if (windowInsetsCompat.isVisible(WindowInsetsCompat.Type.ime())) {
            setInsets(mImeInsets, windowInsetsCompat.getInsets(WindowInsetsCompat.Type.ime()));
        } else {
            setTranslationY(0);
            mImeInsets.setEmpty();
        }
        updateTranslationY();
        return super.onApplyWindowInsets(insets);
    }
        return insets;

    private void updateTranslationY() {
        setTranslationY(-mImeInsets.bottom);
    }

    @Override
    public void setTranslationY(float translationY) {
        // Always translate at least enough for nav bar insets.
        super.setTranslationY(Math.min(translationY, -mInsets.bottom));
    }

    private void setInsets(Rect rect, Insets insets) {
        rect.set(insets.left, insets.top, insets.right, insets.bottom);
    }

    @Override
@@ -199,8 +213,4 @@ public class WorkModeSwitch extends Button implements Insettable, View.OnClickLi
    private void removeFlag(int flag) {
        mFlags &= ~flag;
    }

    public void setApplyWindowInset(boolean applyWindowInset){
        mApplyWindowInset = applyWindowInset;
    }
}
Loading