源码路径:frameworks/base/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
修改原理:android原本会先判断任务栏的数量,来决定是否显示全部清除
private static final float SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD = 0.3f;
我们只要把任务栏数量的判断去掉,就可以实现全部清除按钮始终显示
一、onStackScrollChanged
- 源码
@Override
public void onStackScrollChanged(float prevScroll, float curScroll, AnimationProps animation) {
mUIDozeTrigger.poke();
if (animation != null) {
relayoutTaskViewsOnNextFrame(animation);
}
// In grid layout, the stack action button always remains visible.
if (mEnterAnimationComplete && !useGridLayout()) {
if (Recents.getConfiguration().isLowRamDevice) {
// Show stack button when user drags down to show older tasks on low ram devices
if (mStack.getTaskCount() > 0 && !mStackActionButtonVisible
&& mTouchHandler.mIsScrolling && curScroll - prevScroll < 0) {
// Going up
EventBus.getDefault().send(
new ShowStackActionButtonEvent(true /* translate */));
}
return;
}
if (prevScroll > SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&
curScroll <= SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&*/
mStack.getTaskCount() > 0) {
EventBus.getDefault().send(new ShowStackActionButtonEvent(true /* translate */));
} else if (prevScroll < HIDE_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&
curScroll >= HIDE_STACK_ACTION_BUTTON_SCROLL_THRESHOLD) {
EventBus.getDefault().send(new HideStackActionButtonEvent());
}
}
}
- 修改
@Override
public void onStackScrollChanged(float prevScroll, float curScroll, AnimationProps animation) {
mUIDozeTrigger.poke();
if (animation != null) {
relayoutTaskViewsOnNextFrame(animation);
}
// In grid layout, the stack action button always remains visible.
if (mEnterAnimationComplete && !useGridLayout()) {
if (Recents.getConfiguration().isLowRamDevice) {
// Show stack button when user drags down to show older tasks on low ram devices
if (mStack.getTaskCount() > 0 && !mStackActionButtonVisible
&& mTouchHandler.mIsScrolling && curScroll - prevScroll < 0) {
// Going up
EventBus.getDefault().send(
new ShowStackActionButtonEvent(true /* translate */));
}
return;
}
//zjp update
if (/*prevScroll > SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&
curScroll <= SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&*/
mStack.getTaskCount() > 0) {
EventBus.getDefault().send(new ShowStackActionButtonEvent(true /* translate */));
} else /*if (prevScroll < HIDE_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&
curScroll >= HIDE_STACK_ACTION_BUTTON_SCROLL_THRESHOLD) */{
EventBus.getDefault().send(new HideStackActionButtonEvent());
}
}
}
二、updateStackActionButtonVisibility
- 源码
private void updateStackActionButtonVisibility() {
if (Recents.getConfiguration().isLowRamDevice) {
return;
}
// Always show the button in grid layout.
if (useGridLayout() ||
(mStackScroller.getStackScroll() < SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&
mStack.getTaskCount() > 0)) {
EventBus.getDefault().send(new ShowStackActionButtonEvent(false /* translate */));
} else {
EventBus.getDefault().send(new HideStackActionButtonEvent());
}
}
- 修改
private void updateStackActionButtonVisibility() {
if (Recents.getConfiguration().isLowRamDevice) {
return;
}
//zjp update
// Always show the button in grid layout.
if (useGridLayout() ||
(/*mStackScroller.getStackScroll() < SHOW_STACK_ACTION_BUTTON_SCROLL_THRESHOLD &&*/
mStack.getTaskCount() > 0)) {
EventBus.getDefault().send(new ShowStackActionButtonEvent(false /* translate */));
} else {
EventBus.getDefault().send(new HideStackActionButtonEvent());
}
}