Merge "Fix issue with All Tasks Dismissed" into nyc-dev

This commit is contained in:
Sid Soundararajan
2016-04-12 20:46:14 +00:00
committed by Android (Google) Code Review
6 changed files with 80 additions and 37 deletions

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}

View File

@@ -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();
}
}

View File

@@ -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);
}

View File

@@ -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) {
@@ -100,40 +125,44 @@ public class TaskStackHorizontalViewAdapter extends
holder.init(mTaskList.get(position));
}
@Override
public void onViewDetachedFromWindow(ViewHolder holder) {
holder.mTaskCardView.reset();
}
@Override
public int getItemCount() {
return mTaskList.size();
}
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) { }
};
private void removeAt(int position) {
Task removedTask = mTaskList.remove(position);
if (mGridView != null) {
mGridView.getStack().removeTask(removedTask, AnimationProps.IMMEDIATE,
false);
}
notifyItemRemoved(position);
}
private void removeAt(int position) {
mTaskList.remove(position);
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);
}
}