diff options
6 files changed, 80 insertions, 37 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java b/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java index 13e1a14ead63..e7e81d62340f 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java @@ -55,6 +55,7 @@ import com.android.systemui.recents.tv.animations.HomeRecentsEnterExitAnimationH import com.android.systemui.recents.tv.views.RecentsTvView; import com.android.systemui.recents.tv.views.TaskStackHorizontalGridView; import com.android.systemui.recents.tv.views.TaskStackHorizontalViewAdapter; +import com.android.systemui.recents.views.AnimationProps; import com.android.systemui.statusbar.BaseStatusBar; import com.android.systemui.tv.pip.PipManager; import com.android.systemui.tv.pip.PipRecentsOverlayManager; @@ -246,7 +247,7 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { dismissEvent.addPostAnimationCallback(mFinishLaunchHomeRunnable); dismissEvent.addPostAnimationCallback(closeSystemWindows); - if(mTaskStackHorizontalGridView.getChildCount() > 0) { + if(mTaskStackHorizontalGridView.getChildCount() > 0 && animateTaskViews) { mHomeRecentsEnterExitAnimationHolder.startExitAnimation(dismissEvent); } else { closeSystemWindows.run(); @@ -494,12 +495,10 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { } public final void onBusEvent(AllTaskViewsDismissedEvent event) { - SystemServicesProxy ssp = Recents.getSystemServices(); - if (ssp.hasDockedTask()) { + if (mPipManager.isPipShown()) { mRecentsView.showEmptyView(); } else { - // Just go straight home (no animation necessary because there are no more task views) - dismissRecentsToHome(false /* animateTaskViews */); + dismissRecentsToHome(false); } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/animations/DismissAnimationsHolder.java b/packages/SystemUI/src/com/android/systemui/recents/tv/animations/DismissAnimationsHolder.java index fbcfa9779682..3e668afbb47e 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/animations/DismissAnimationsHolder.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/animations/DismissAnimationsHolder.java @@ -26,13 +26,13 @@ import com.android.systemui.R; public class DismissAnimationsHolder { private LinearLayout mDismissArea; - private LinearLayout mTaskCardView; + private LinearLayout mRecentsTvCard; private int mCardYDelta; private long mShortDuration; private long mLongDuration; public DismissAnimationsHolder(TaskCardView taskCardView) { - mTaskCardView = (LinearLayout) taskCardView.findViewById(R.id.recents_tv_card); + mRecentsTvCard = (LinearLayout) taskCardView.findViewById(R.id.recents_tv_card); mDismissArea = (LinearLayout) taskCardView.findViewById(R.id.card_dismiss); Resources res = taskCardView.getResources(); @@ -47,7 +47,7 @@ public class DismissAnimationsHolder { .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .alpha(1.0f); - mTaskCardView.animate() + mRecentsTvCard.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .translationYBy(mCardYDelta) @@ -60,7 +60,7 @@ public class DismissAnimationsHolder { .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .alpha(0.0f); - mTaskCardView.animate() + mRecentsTvCard.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .translationYBy(-mCardYDelta) @@ -73,11 +73,17 @@ public class DismissAnimationsHolder { .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .alpha(0.0f); - mTaskCardView.animate() + mRecentsTvCard.animate() .setDuration(mLongDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .translationYBy(mCardYDelta) .alpha(0.0f) .setListener(listener); } + + public void reset() { + mRecentsTvCard.setAlpha(1.0f); + mRecentsTvCard.setTranslationY(0); + mRecentsTvCard.animate().setListener(null); + } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/views/RecentsTvView.java b/packages/SystemUI/src/com/android/systemui/recents/tv/views/RecentsTvView.java index 53fdf62c6620..b876fc701372 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/views/RecentsTvView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/views/RecentsTvView.java @@ -250,8 +250,9 @@ public class RecentsTvView extends FrameLayout { public TaskStackHorizontalGridView setTaskStackViewAdapter( TaskStackHorizontalViewAdapter taskStackViewAdapter) { - if(mTaskStackHorizontalView != null) { + if (mTaskStackHorizontalView != null) { mTaskStackHorizontalView.setAdapter(taskStackViewAdapter); + taskStackViewAdapter.setTaskStackHorizontalGridView(mTaskStackHorizontalView); } return mTaskStackHorizontalView; } diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskCardView.java b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskCardView.java index 99d478b2e8d1..46e77802ceb1 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskCardView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskCardView.java @@ -189,6 +189,7 @@ public class TaskCardView extends LinearLayout { } public void startDismissTaskAnimation(Animator.AnimatorListener listener) { + mDismissState = false; mDismissAnimationsHolder.startDismissAnimation(listener); } @@ -201,4 +202,10 @@ public class TaskCardView extends LinearLayout { super.onDetachedFromWindow(); setDismissState(false); } + + public void reset() { + mDismissState = false; + mRecentsRowFocusAnimationHolder.reset(); + mDismissAnimationsHolder.reset(); + } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalGridView.java b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalGridView.java index 603721a56eca..77ab8c1c1f8c 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalGridView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalGridView.java @@ -179,13 +179,14 @@ public class TaskStackHorizontalGridView extends HorizontalGridView implements T @Override public void onStackTaskAdded(TaskStack stack, Task newTask) { - getAdapter().notifyItemInserted(stack.getStackTasks().indexOf(newTask)); + ((TaskStackHorizontalViewAdapter) getAdapter()).addTaskAt(newTask, + stack.indexOfStackTask(newTask)); } @Override public void onStackTaskRemoved(TaskStack stack, Task removedTask, boolean wasFrontMostTask, Task newFrontMostTask, AnimationProps animation, boolean fromDockGesture) { - getAdapter().notifyItemRemoved(stack.getStackTasks().indexOf(removedTask)); + ((TaskStackHorizontalViewAdapter) getAdapter()).removeTask(removedTask); if (mFocusedTask == removedTask) { resetFocusedTask(removedTask); } diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalViewAdapter.java b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalViewAdapter.java index 97712ea9ce86..eff184507740 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalViewAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/recents/tv/views/TaskStackHorizontalViewAdapter.java @@ -27,7 +27,9 @@ import com.android.systemui.R; import com.android.systemui.recents.events.EventBus; import com.android.systemui.recents.events.activity.LaunchTvTaskEvent; import com.android.systemui.recents.events.ui.DeleteTaskDataEvent; +import com.android.systemui.recents.events.ui.TaskViewDismissedEvent; import com.android.systemui.recents.model.Task; +import com.android.systemui.recents.views.AnimationProps; import java.util.ArrayList; import java.util.List; @@ -40,6 +42,7 @@ public class TaskStackHorizontalViewAdapter extends //Full class name is 30 characters private static final String TAG = "TaskStackViewAdapter"; private List<Task> mTaskList; + private TaskStackHorizontalGridView mGridView; public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ private TaskCardView mTaskCardView; @@ -62,7 +65,7 @@ public class TaskStackHorizontalViewAdapter extends try { if (mTaskCardView.isInDismissState()) { mTaskCardView.startDismissTaskAnimation( - getRemoveAtListener(getAdapterPosition(), mTaskCardView)); + getRemoveAtListener(getAdapterPosition(), mTaskCardView.getTask())); } else { EventBus.getDefault().send(new LaunchTvTaskEvent(mTaskCardView, mTask, null, INVALID_STACK_ID)); @@ -74,6 +77,28 @@ public class TaskStackHorizontalViewAdapter extends } } + + private Animator.AnimatorListener getRemoveAtListener(final int position, + final Task task) { + return new Animator.AnimatorListener() { + + @Override + public void onAnimationStart(Animator animation) { } + + @Override + public void onAnimationEnd(Animator animation) { + removeAt(position); + EventBus.getDefault().send(new DeleteTaskDataEvent(task)); + } + + @Override + public void onAnimationCancel(Animator animation) { } + + @Override + public void onAnimationRepeat(Animator animation) { } + }; + + } } public TaskStackHorizontalViewAdapter(List tasks) { @@ -101,39 +126,43 @@ public class TaskStackHorizontalViewAdapter extends } @Override - public int getItemCount() { - return mTaskList.size(); + public void onViewDetachedFromWindow(ViewHolder holder) { + holder.mTaskCardView.reset(); } - private Animator.AnimatorListener getRemoveAtListener(final int position, - final TaskCardView taskCardView) { - return new Animator.AnimatorListener() { - - @Override - public void onAnimationStart(Animator animation) { } - - @Override - public void onAnimationEnd(Animator animation) { - removeAt(position); - EventBus.getDefault().send(new DeleteTaskDataEvent(taskCardView.getTask())); - } - - @Override - public void onAnimationCancel(Animator animation) { } - - @Override - public void onAnimationRepeat(Animator animation) { } - }; - + @Override + public int getItemCount() { + return mTaskList.size(); } private void removeAt(int position) { - mTaskList.remove(position); + Task removedTask = mTaskList.remove(position); + if (mGridView != null) { + mGridView.getStack().removeTask(removedTask, AnimationProps.IMMEDIATE, + false); + } notifyItemRemoved(position); } + public void removeTask(Task task) { + int position = mTaskList.indexOf(task); + if (position >= 0) { + mTaskList.remove(position); + notifyItemRemoved(position); + } + } + public int getPositionOfTask(Task task) { int position = mTaskList.indexOf(task); return (position >= 0) ? position : 0; } + + public void setTaskStackHorizontalGridView(TaskStackHorizontalGridView gridView) { + mGridView = gridView; + } + + public void addTaskAt(Task task, int position) { + mTaskList.add(position, task); + notifyItemInserted(position); + } } |