Loading go/quickstep/src/com/android/quickstep/TaskAdapter.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -146,7 +146,7 @@ public final class TaskAdapter extends Adapter<ViewHolder> { }); }); mLoader.loadTaskThumbnail(task, () -> { mLoader.loadTaskThumbnail(task, () -> { if (Objects.equals(Optional.of(task), taskHolder.getTask())) { if (Objects.equals(Optional.of(task), taskHolder.getTask())) { taskHolder.getTaskItemView().setThumbnail(task.thumbnail.thumbnail); taskHolder.getTaskItemView().setThumbnail(task.thumbnail); } } }); }); break; break; Loading go/quickstep/src/com/android/quickstep/TaskHolder.java +2 −5 Original line number Original line Diff line number Diff line Loading @@ -15,8 +15,6 @@ */ */ package com.android.quickstep; package com.android.quickstep; import android.graphics.Bitmap; import androidx.annotation.NonNull; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView.ViewHolder; import androidx.recyclerview.widget.RecyclerView.ViewHolder; Loading Loading @@ -58,12 +56,11 @@ public final class TaskHolder extends ViewHolder { */ */ public void bindTask(@NonNull Task task, boolean willAnimate) { public void bindTask(@NonNull Task task, boolean willAnimate) { mTask = task; mTask = task; Bitmap thumbnail = (task.thumbnail != null) ? task.thumbnail.thumbnail : null; if (willAnimate) { if (willAnimate) { mTaskItemView.startContentAnimation(task.icon, thumbnail, task.titleDescription); mTaskItemView.startContentAnimation(task.icon, task.thumbnail, task.titleDescription); } else { } else { mTaskItemView.setIcon(task.icon); mTaskItemView.setIcon(task.icon); mTaskItemView.setThumbnail(thumbnail); mTaskItemView.setThumbnail(task.thumbnail); mTaskItemView.setLabel(task.titleDescription); mTaskItemView.setLabel(task.titleDescription); } } } } Loading go/quickstep/src/com/android/quickstep/views/IconRecentsView.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -125,7 +125,7 @@ public final class IconRecentsView extends FrameLayout { Task task = optTask.get(); Task task = optTask.get(); // Update thumbnail on the task. // Update thumbnail on the task. task.thumbnail = thumbnailData; task.thumbnail = thumbnailData; taskView.setThumbnail(thumbnailData.thumbnail); taskView.setThumbnail(thumbnailData); return task; return task; } } } } Loading go/quickstep/src/com/android/quickstep/views/TaskItemView.java +26 −10 Original line number Original line Diff line number Diff line Loading @@ -18,9 +18,8 @@ package com.android.quickstep.views; import static com.android.quickstep.views.TaskLayoutUtils.getTaskHeight; import static com.android.quickstep.views.TaskLayoutUtils.getTaskHeight; import android.content.Context; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.AttributeSet; import android.util.FloatProperty; import android.util.FloatProperty; Loading @@ -33,6 +32,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.Nullable; import com.android.launcher3.R; import com.android.launcher3.R; import com.android.quickstep.ThumbnailDrawable; import com.android.systemui.shared.recents.model.ThumbnailData; /** /** * View representing an individual task item with the icon + thumbnail adjacent to the task label. * View representing an individual task item with the icon + thumbnail adjacent to the task label. Loading Loading @@ -132,10 +133,10 @@ public final class TaskItemView extends LinearLayout { /** /** * Set the task thumbnail for the task. Sets to a default thumbnail if null. * Set the task thumbnail for the task. Sets to a default thumbnail if null. * * * @param thumbnail task thumbnail for the task * @param thumbnailData task thumbnail data for the task */ */ public void setThumbnail(@Nullable Bitmap thumbnail) { public void setThumbnail(@Nullable ThumbnailData thumbnailData) { mThumbnailDrawable.setCurrentDrawable(getSafeThumbnail(thumbnail)); mThumbnailDrawable.setCurrentDrawable(getSafeThumbnail(thumbnailData)); } } public View getThumbnailView() { public View getThumbnailView() { Loading @@ -151,8 +152,8 @@ public final class TaskItemView extends LinearLayout { * @param endThumbnail the thumbnail to animate to * @param endThumbnail the thumbnail to animate to * @param endLabel the label to animate to * @param endLabel the label to animate to */ */ public void startContentAnimation(@Nullable Drawable endIcon, @Nullable Bitmap endThumbnail, public void startContentAnimation(@Nullable Drawable endIcon, @Nullable String endLabel) { @Nullable ThumbnailData endThumbnail, @Nullable String endLabel) { mIconDrawable.startNewTransition(getSafeIcon(endIcon)); mIconDrawable.startNewTransition(getSafeIcon(endIcon)); mThumbnailDrawable.startNewTransition(getSafeThumbnail(endThumbnail)); mThumbnailDrawable.startNewTransition(getSafeThumbnail(endThumbnail)); // TODO: Animation for label // TODO: Animation for label Loading @@ -171,12 +172,27 @@ public final class TaskItemView extends LinearLayout { return (icon != null) ? icon : mDefaultIcon; return (icon != null) ? icon : mDefaultIcon; } } private @NonNull Drawable getSafeThumbnail(@Nullable Bitmap thumbnail) { private @NonNull Drawable getSafeThumbnail(@Nullable ThumbnailData thumbnailData) { return (thumbnail != null) ? new BitmapDrawable(getResources(), thumbnail) if (thumbnailData == null || thumbnailData.thumbnail == null) { : mDefaultThumbnail; return mDefaultThumbnail; } int orientation = getResources().getConfiguration().orientation; return new ThumbnailDrawable(thumbnailData, orientation /* requestedOrientation */); } } private @NonNull String getSafeLabel(@Nullable String label) { private @NonNull String getSafeLabel(@Nullable String label) { return (label != null) ? label : DEFAULT_LABEL; return (label != null) ? label : DEFAULT_LABEL; } } @Override protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); int layerCount = mThumbnailDrawable.getNumberOfLayers(); for (int i = 0; i < layerCount; i++) { Drawable drawable = mThumbnailDrawable.getDrawable(i); if (drawable instanceof ThumbnailDrawable) { ((ThumbnailDrawable) drawable).setRequestedOrientation(newConfig.orientation); } } } } } Loading
go/quickstep/src/com/android/quickstep/TaskAdapter.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -146,7 +146,7 @@ public final class TaskAdapter extends Adapter<ViewHolder> { }); }); mLoader.loadTaskThumbnail(task, () -> { mLoader.loadTaskThumbnail(task, () -> { if (Objects.equals(Optional.of(task), taskHolder.getTask())) { if (Objects.equals(Optional.of(task), taskHolder.getTask())) { taskHolder.getTaskItemView().setThumbnail(task.thumbnail.thumbnail); taskHolder.getTaskItemView().setThumbnail(task.thumbnail); } } }); }); break; break; Loading
go/quickstep/src/com/android/quickstep/TaskHolder.java +2 −5 Original line number Original line Diff line number Diff line Loading @@ -15,8 +15,6 @@ */ */ package com.android.quickstep; package com.android.quickstep; import android.graphics.Bitmap; import androidx.annotation.NonNull; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView.ViewHolder; import androidx.recyclerview.widget.RecyclerView.ViewHolder; Loading Loading @@ -58,12 +56,11 @@ public final class TaskHolder extends ViewHolder { */ */ public void bindTask(@NonNull Task task, boolean willAnimate) { public void bindTask(@NonNull Task task, boolean willAnimate) { mTask = task; mTask = task; Bitmap thumbnail = (task.thumbnail != null) ? task.thumbnail.thumbnail : null; if (willAnimate) { if (willAnimate) { mTaskItemView.startContentAnimation(task.icon, thumbnail, task.titleDescription); mTaskItemView.startContentAnimation(task.icon, task.thumbnail, task.titleDescription); } else { } else { mTaskItemView.setIcon(task.icon); mTaskItemView.setIcon(task.icon); mTaskItemView.setThumbnail(thumbnail); mTaskItemView.setThumbnail(task.thumbnail); mTaskItemView.setLabel(task.titleDescription); mTaskItemView.setLabel(task.titleDescription); } } } } Loading
go/quickstep/src/com/android/quickstep/views/IconRecentsView.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -125,7 +125,7 @@ public final class IconRecentsView extends FrameLayout { Task task = optTask.get(); Task task = optTask.get(); // Update thumbnail on the task. // Update thumbnail on the task. task.thumbnail = thumbnailData; task.thumbnail = thumbnailData; taskView.setThumbnail(thumbnailData.thumbnail); taskView.setThumbnail(thumbnailData); return task; return task; } } } } Loading
go/quickstep/src/com/android/quickstep/views/TaskItemView.java +26 −10 Original line number Original line Diff line number Diff line Loading @@ -18,9 +18,8 @@ package com.android.quickstep.views; import static com.android.quickstep.views.TaskLayoutUtils.getTaskHeight; import static com.android.quickstep.views.TaskLayoutUtils.getTaskHeight; import android.content.Context; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.AttributeSet; import android.util.FloatProperty; import android.util.FloatProperty; Loading @@ -33,6 +32,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.Nullable; import com.android.launcher3.R; import com.android.launcher3.R; import com.android.quickstep.ThumbnailDrawable; import com.android.systemui.shared.recents.model.ThumbnailData; /** /** * View representing an individual task item with the icon + thumbnail adjacent to the task label. * View representing an individual task item with the icon + thumbnail adjacent to the task label. Loading Loading @@ -132,10 +133,10 @@ public final class TaskItemView extends LinearLayout { /** /** * Set the task thumbnail for the task. Sets to a default thumbnail if null. * Set the task thumbnail for the task. Sets to a default thumbnail if null. * * * @param thumbnail task thumbnail for the task * @param thumbnailData task thumbnail data for the task */ */ public void setThumbnail(@Nullable Bitmap thumbnail) { public void setThumbnail(@Nullable ThumbnailData thumbnailData) { mThumbnailDrawable.setCurrentDrawable(getSafeThumbnail(thumbnail)); mThumbnailDrawable.setCurrentDrawable(getSafeThumbnail(thumbnailData)); } } public View getThumbnailView() { public View getThumbnailView() { Loading @@ -151,8 +152,8 @@ public final class TaskItemView extends LinearLayout { * @param endThumbnail the thumbnail to animate to * @param endThumbnail the thumbnail to animate to * @param endLabel the label to animate to * @param endLabel the label to animate to */ */ public void startContentAnimation(@Nullable Drawable endIcon, @Nullable Bitmap endThumbnail, public void startContentAnimation(@Nullable Drawable endIcon, @Nullable String endLabel) { @Nullable ThumbnailData endThumbnail, @Nullable String endLabel) { mIconDrawable.startNewTransition(getSafeIcon(endIcon)); mIconDrawable.startNewTransition(getSafeIcon(endIcon)); mThumbnailDrawable.startNewTransition(getSafeThumbnail(endThumbnail)); mThumbnailDrawable.startNewTransition(getSafeThumbnail(endThumbnail)); // TODO: Animation for label // TODO: Animation for label Loading @@ -171,12 +172,27 @@ public final class TaskItemView extends LinearLayout { return (icon != null) ? icon : mDefaultIcon; return (icon != null) ? icon : mDefaultIcon; } } private @NonNull Drawable getSafeThumbnail(@Nullable Bitmap thumbnail) { private @NonNull Drawable getSafeThumbnail(@Nullable ThumbnailData thumbnailData) { return (thumbnail != null) ? new BitmapDrawable(getResources(), thumbnail) if (thumbnailData == null || thumbnailData.thumbnail == null) { : mDefaultThumbnail; return mDefaultThumbnail; } int orientation = getResources().getConfiguration().orientation; return new ThumbnailDrawable(thumbnailData, orientation /* requestedOrientation */); } } private @NonNull String getSafeLabel(@Nullable String label) { private @NonNull String getSafeLabel(@Nullable String label) { return (label != null) ? label : DEFAULT_LABEL; return (label != null) ? label : DEFAULT_LABEL; } } @Override protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); int layerCount = mThumbnailDrawable.getNumberOfLayers(); for (int i = 0; i < layerCount; i++) { Drawable drawable = mThumbnailDrawable.getDrawable(i); if (drawable instanceof ThumbnailDrawable) { ((ThumbnailDrawable) drawable).setRequestedOrientation(newConfig.orientation); } } } } }