Replace taskbar hotseat with real hotseat when folder is open

- Seamlessly show real hotseat and hide taskbar hotseat, while
  keeping rest of taskbar visible
- Update MultiValueAlpha to allow for taking max alpha instead
  of blending, and use that for Hotseat
- Fix folder open bounds on home screen when taskbar is present

Test: Open folder from taskbar on home, can drag out items
Bug: 182079330
Bug: 171917176
Change-Id: I7c1983e3219b1341cf233260f0ccac9051c4dc14
This commit is contained in:
Tony Wickham
2021-03-10 16:18:40 -08:00
parent 462384dbed
commit ae72b46b2c
9 changed files with 158 additions and 27 deletions

View File

@@ -15,6 +15,7 @@
*/
package com.android.launcher3.taskbar;
import android.animation.LayoutTransition;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
@@ -63,6 +64,7 @@ public class TaskbarView extends LinearLayout implements FolderIcon.FolderIconPa
private TaskbarController.TaskbarViewCallbacks mControllerCallbacks;
// Initialized in init().
private LayoutTransition mLayoutTransition;
private int mHotseatStartIndex;
private int mHotseatEndIndex;
private View mHotseatRecentsDivider;
@@ -76,6 +78,7 @@ public class TaskbarView extends LinearLayout implements FolderIcon.FolderIconPa
private boolean mIsDraggingItem;
// Only non-null when the corresponding Folder is open.
private @Nullable FolderIcon mLeaveBehindFolderIcon;
private boolean mIsHotseatHidden;
public TaskbarView(@NonNull Context context) {
this(context, null);
@@ -107,6 +110,9 @@ public class TaskbarView extends LinearLayout implements FolderIcon.FolderIconPa
}
protected void init(int numHotseatIcons, int numRecentIcons) {
mLayoutTransition = new LayoutTransition();
setLayoutTransitionsEnabled(true);
mHotseatStartIndex = 0;
mHotseatEndIndex = mHotseatStartIndex + numHotseatIcons - 1;
updateHotseatItems(new ItemInfo[numHotseatIcons]);
@@ -119,6 +125,10 @@ public class TaskbarView extends LinearLayout implements FolderIcon.FolderIconPa
updateRecentTasks(new Task[numRecentIcons]);
}
private void setLayoutTransitionsEnabled(boolean enabled) {
setLayoutTransition(enabled ? mLayoutTransition : null);
}
protected void cleanup() {
removeAllViews();
}
@@ -206,9 +216,19 @@ public class TaskbarView extends LinearLayout implements FolderIcon.FolderIconPa
}
}
/**
* Hides or shows the hotseat items immediately (without layout transitions).
*/
protected void setHotseatViewsHidden(boolean hidden) {
mIsHotseatHidden = hidden;
setLayoutTransitionsEnabled(false);
updateHotseatItemsVisibility();
setLayoutTransitionsEnabled(true);
}
private void updateHotseatItemVisibility(View hotseatView) {
if (hotseatView.getTag() != null) {
hotseatView.setVisibility(VISIBLE);
hotseatView.setVisibility(mIsHotseatHidden ? INVISIBLE : VISIBLE);
} else {
int oldVisibility = hotseatView.getVisibility();
int newVisibility = mControllerCallbacks.getEmptyHotseatViewVisibility();