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

Commit bd114c22 authored by Brian Isganitis's avatar Brian Isganitis
Browse files

Add header protection for Taskbar All Apps search bar.

Works similar to ActivityAllAppsContainerView<->ScrimView
implementation, except utilizes AbstractSlideInView's builtin scrim.

Test: Manual
Flag: ENABLE_ALL_APPS_SEARCH_IN_TASKBAR=false
Bug: 216683257
Change-Id: Ide41ac47ecffc232fffac34c6bfdda67c1da549d
parent 5c18fa35
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -19,15 +19,21 @@ import android.content.Context;
import android.util.AttributeSet;
import android.view.View;

import androidx.annotation.Nullable;

import com.android.launcher3.R;
import com.android.launcher3.allapps.ActivityAllAppsContainerView;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.taskbar.overlay.TaskbarOverlayContext;

import java.util.Optional;

/** All apps container accessible from taskbar. */
public class TaskbarAllAppsContainerView extends
        ActivityAllAppsContainerView<TaskbarOverlayContext> {

    private @Nullable OnInvalidateHeaderListener mOnInvalidateHeaderListener;

    public TaskbarAllAppsContainerView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
@@ -36,6 +42,10 @@ public class TaskbarAllAppsContainerView extends
        super(context, attrs, defStyleAttr);
    }

    void setOnInvalidateHeaderListener(OnInvalidateHeaderListener onInvalidateHeaderListener) {
        mOnInvalidateHeaderListener = onInvalidateHeaderListener;
    }

    @Override
    protected View inflateSearchBox() {
        if (isSearchSupported()) {
@@ -53,6 +63,13 @@ public class TaskbarAllAppsContainerView extends
        return searchView;
    }

    @Override
    public void invalidateHeader() {
        super.invalidateHeader();
        Optional.ofNullable(mOnInvalidateHeaderListener).ifPresent(
                OnInvalidateHeaderListener::onInvalidateHeader);
    }

    @Override
    protected boolean isSearchSupported() {
        return FeatureFlags.ENABLE_ALL_APPS_SEARCH_IN_TASKBAR.get();
@@ -63,4 +80,8 @@ public class TaskbarAllAppsContainerView extends
        // All apps is always open
        return true;
    }

    interface OnInvalidateHeaderListener {
        void onInvalidateHeader();
    }
}
+12 −4
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import static com.android.launcher3.anim.Interpolators.EMPHASIZED;

import android.animation.PropertyValuesHolder;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
@@ -109,12 +110,13 @@ public class TaskbarAllAppsSlideInView extends AbstractSlideInView<TaskbarOverla
        mAppsView = findViewById(R.id.apps_view);
        mContent = mAppsView;

        // Setup header protection for search bar, if enabled.
        if (FeatureFlags.ENABLE_ALL_APPS_SEARCH_IN_TASKBAR.get()) {
            mAppsView.setOnInvalidateHeaderListener(this::invalidate);
        }

        DeviceProfile dp = mActivityContext.getDeviceProfile();
        setShiftRange(dp.allAppsShiftRange);

        setContentBackgroundWithParent(
                getContext().getDrawable(R.drawable.bg_rounded_corner_bottom_sheet),
                mAppsView.getBottomSheetBackground());
    }

    @Override
@@ -129,6 +131,12 @@ public class TaskbarAllAppsSlideInView extends AbstractSlideInView<TaskbarOverla
        mActivityContext.removeOnDeviceProfileChangeListener(this);
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        mAppsView.drawOnScrimWithScale(canvas, mSlideInViewScale.value);
        super.dispatchDraw(canvas);
    }

    @Override
    protected void onScaleProgressChanged() {
        super.onScaleProgressChanged();
+2 −2
Original line number Diff line number Diff line
@@ -842,8 +842,8 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
    protected void updateBackground(DeviceProfile deviceProfile) {
        mBottomSheetBackground.setVisibility(deviceProfile.isTablet ? View.VISIBLE : View.GONE);
        // Note: For tablets, the opaque background and header protection are added in drawOnScrim.
        // For the taskbar entrypoint, the scrim is drawn differently, so a static background is
        // added in TaskbarAllAppsContainerView and header protection is not yet supported.
        // For the taskbar entrypoint, the scrim is drawn by its abstract slide in view container,
        // so its header protection is derived from this scrim instead.
    }

    private void onAppsUpdated() {
+1 −1
Original line number Diff line number Diff line
@@ -99,7 +99,7 @@ public abstract class AbstractSlideInView<T extends Context & ActivityContext>
    protected @Nullable OnCloseListener mOnCloseBeginListener;
    protected List<OnCloseListener> mOnCloseListeners = new ArrayList<>();

    private final AnimatedFloat mSlideInViewScale =
    protected final AnimatedFloat mSlideInViewScale =
            new AnimatedFloat(this::onScaleProgressChanged, VIEW_NO_SCALE);
    protected boolean mIsBackProgressing;
    @Nullable private Drawable mContentBackground;