Merge "Add header protection for Taskbar All Apps search bar." into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
64ee67c6b5
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -99,12 +100,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
|
||||
@@ -136,6 +138,12 @@ public class TaskbarAllAppsSlideInView extends AbstractSlideInView<TaskbarOverla
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void dispatchDraw(Canvas canvas) {
|
||||
mAppsView.drawOnScrimWithScale(canvas, mSlideInViewScale.value);
|
||||
super.dispatchDraw(canvas);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onScaleProgressChanged() {
|
||||
super.onScaleProgressChanged();
|
||||
|
||||
@@ -871,8 +871,8 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
|
||||
boolean visible = deviceProfile.isTablet || mForceBottomSheetVisible;
|
||||
mBottomSheetBackground.setVisibility(visible ? 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 setBottomSheetAlpha(float alpha) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user