diff --git a/packages/SystemUI/res/drawable/recents_dismiss_dark.xml b/packages/SystemUI/res/drawable/recents_dismiss_dark.xml new file mode 100644 index 0000000000000..c015cc84a910a --- /dev/null +++ b/packages/SystemUI/res/drawable/recents_dismiss_dark.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/drawable/recents_dismiss_light.xml b/packages/SystemUI/res/drawable/recents_dismiss_light.xml new file mode 100644 index 0000000000000..9c93db95e5c50 --- /dev/null +++ b/packages/SystemUI/res/drawable/recents_dismiss_light.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/layout/recents_task_view.xml b/packages/SystemUI/res/layout/recents_task_view.xml index f7df18eb322f3..bda6431fc7a96 100644 --- a/packages/SystemUI/res/layout/recents_task_view.xml +++ b/packages/SystemUI/res/layout/recents_task_view.xml @@ -63,6 +63,13 @@ android:maxLines="2" android:ellipsize="marquee" android:fadingEdge="horizontal" /> + diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml index c78ff8eec550a..d23a3dc7168fd 100644 --- a/packages/SystemUI/res/values/colors.xml +++ b/packages/SystemUI/res/values/colors.xml @@ -52,10 +52,14 @@ #e6444444 - #ffffffff + #ffeeeeee - #ffffffff + #ffeeeeee #ff222222 + + #ffeeeeee + + #ff333333 diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index c0376f00ccd69..21eb41c6867f5 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -119,7 +119,7 @@ 150 - 150 + 250 96 diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 7c6860049f959..f330b8e977807 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -227,7 +227,7 @@ 5dp - 75dp + 100dp 50dp diff --git a/packages/SystemUI/src/com/android/systemui/recents/Constants.java b/packages/SystemUI/src/com/android/systemui/recents/Constants.java index 1d6a76c47d3ca..90998da264592 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/Constants.java +++ b/packages/SystemUI/src/com/android/systemui/recents/Constants.java @@ -32,7 +32,7 @@ public class Constants { // Enables the use of theme colors as the task bar background public static final boolean EnableTaskBarThemeColors = true; // Enables the info pane on long-press - public static final boolean EnableInfoPane = true; + public static final boolean EnableInfoPane = false; // Enables the search bar layout public static final boolean EnableSearchLayout = true; // Enables the dynamic shadows behind each task diff --git a/packages/SystemUI/src/com/android/systemui/recents/Utilities.java b/packages/SystemUI/src/com/android/systemui/recents/Utilities.java index b602f84acdb53..46e6ee9c8ece7 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/Utilities.java +++ b/packages/SystemUI/src/com/android/systemui/recents/Utilities.java @@ -18,6 +18,7 @@ package com.android.systemui.recents; import android.graphics.Color; import android.graphics.Rect; +import android.graphics.drawable.Drawable; /* Common code */ public class Utilities { @@ -54,12 +55,15 @@ public class Utilities { 0.0722f * Color.blue(color)); } - /** Returns the ideal text color to draw on top of a specified background color. */ - public static int getIdealTextColorForBackgroundColor(int color) { - RecentsConfiguration configuration = RecentsConfiguration.getInstance(); + /** Returns the ideal color to draw on top of a specified background color. */ + public static int getIdealColorForBackgroundColor(int color, int lightRes, int darkRes) { int greyscale = colorToGreyscale(color); - return (greyscale < 128) ? configuration.taskBarViewLightTextColor : - configuration.taskBarViewDarkTextColor; - + return (greyscale < 128) ? lightRes : darkRes; + } + /** Returns the ideal drawable to draw on top of a specified background color. */ + public static Drawable getIdealResourceForBackgroundColor(int color, Drawable lightRes, + Drawable darkRes) { + int greyscale = colorToGreyscale(color); + return (greyscale < 128) ? lightRes : darkRes; } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskBarView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskBarView.java index c6cb81269dec4..07caa1b57ad89 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskBarView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskBarView.java @@ -16,7 +16,10 @@ package com.android.systemui.recents.views; +import android.animation.ValueAnimator; import android.content.Context; +import android.content.res.Resources; +import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.FrameLayout; import android.widget.ImageView; @@ -32,9 +35,13 @@ import com.android.systemui.recents.model.Task; class TaskBarView extends FrameLayout { Task mTask; + ImageView mDismissButton; ImageView mApplicationIcon; TextView mActivityDescription; + Drawable mLightDismissDrawable; + Drawable mDarkDismissDrawable; + public TaskBarView(Context context) { this(context, null); } @@ -49,6 +56,9 @@ class TaskBarView extends FrameLayout { public TaskBarView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); + Resources res = context.getResources(); + mLightDismissDrawable = res.getDrawable(R.drawable.recents_dismiss_light); + mDarkDismissDrawable = res.getDrawable(R.drawable.recents_dismiss_dark); } @Override @@ -56,6 +66,28 @@ class TaskBarView extends FrameLayout { // Initialize the icon and description views mApplicationIcon = (ImageView) findViewById(R.id.application_icon); mActivityDescription = (TextView) findViewById(R.id.activity_description); + mDismissButton = (ImageView) findViewById(R.id.dismiss_task); + } + + /** Synchronizes this bar view's properties with the task's transform */ + void updateViewPropertiesToTaskTransform(TaskViewTransform animateFromTransform, + TaskViewTransform toTransform, int duration) { + RecentsConfiguration config = RecentsConfiguration.getInstance(); + if (duration > 0) { + if (animateFromTransform != null) { + mDismissButton.setAlpha(animateFromTransform.dismissAlpha); + } + mDismissButton.animate() + .alpha(toTransform.dismissAlpha) + .setStartDelay(0) + .setDuration(duration) + .setInterpolator(config.defaultBezierInterpolator) + .withLayer() + .start(); + } else { + mDismissButton.setAlpha(toTransform.dismissAlpha); + } + mDismissButton.invalidate(); } /** Binds the bar view to the task */ @@ -74,7 +106,10 @@ class TaskBarView extends FrameLayout { int tint = t.colorPrimary; if (Constants.DebugFlags.App.EnableTaskBarThemeColors && tint != 0) { setBackgroundColor(tint); - mActivityDescription.setTextColor(Utilities.getIdealTextColorForBackgroundColor(tint)); + mActivityDescription.setTextColor(Utilities.getIdealColorForBackgroundColor(tint, + configuration.taskBarViewLightTextColor, configuration.taskBarViewDarkTextColor)); + mDismissButton.setImageDrawable(Utilities.getIdealResourceForBackgroundColor(tint, + mLightDismissDrawable, mDarkDismissDrawable)); } else { setBackgroundColor(configuration.taskBarViewDefaultBackgroundColor); mActivityDescription.setTextColor(configuration.taskBarViewDefaultTextColor); diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java index e0e51e3bc8b96..b64225e883a88 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java @@ -169,6 +169,9 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal transform.translationY = (int) (boundedT * overlapHeight - scaleYOffset); } + // Set the alphas + transform.dismissAlpha = Math.max(-1f, Math.min(0f, t)) + 1f; + // Update the rect and visibility transform.rect.set(mTaskRect); if (t < -(numPeekCards + 1)) { @@ -1035,6 +1038,15 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal } } + @Override + public void onTaskDismissed(TaskView tv) { + Task task = tv.getTask(); + // Remove the task from the view + mStack.removeTask(task); + // Notify the callback that we've removed the task and it can clean up after it + mCb.onTaskRemoved(task); + } + /**** View.OnClickListener Implementation ****/ @Override @@ -1094,6 +1106,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal @Override public void onComponentRemoved(Set cns) { + RecentsConfiguration config = RecentsConfiguration.getInstance(); // For other tasks, just remove them directly if they no longer exist ArrayList tasks = mStack.getTasks(); for (int i = tasks.size() - 1; i >= 0; i--) { @@ -1476,13 +1489,7 @@ class TaskStackViewTouchHandler implements SwipeHelper.Callback { @Override public void onChildDismissed(View v) { TaskView tv = (TaskView) v; - Task task = tv.getTask(); - - // Remove the task from the view - mSv.mStack.removeTask(task); - - // Notify the callback that we've removed the task and it can clean up after it - mSv.mCb.onTaskRemoved(task); + mSv.onTaskDismissed(tv); // Disable HW layers mSv.decHwLayersRefCount("swipeComplete"); diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java index 403c81e5b4cad..5fad6298640bd 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java @@ -45,6 +45,7 @@ public class TaskView extends FrameLayout implements View.OnClickListener, public void onTaskInfoPanelShown(TaskView tv); public void onTaskInfoPanelHidden(TaskView tv); public void onTaskAppInfoClicked(TaskView tv); + public void onTaskDismissed(TaskView tv); // public void onTaskViewReboundToTask(TaskView tv, Task t); } @@ -142,6 +143,10 @@ public class TaskView extends FrameLayout implements View.OnClickListener, int minZ = config.taskViewTranslationZMinPx; int incZ = config.taskViewTranslationZIncrementPx; + // Update the bar view + mBarView.updateViewPropertiesToTaskTransform(animateFromTransform, toTransform, duration); + + // Update this task view if (duration > 0) { if (animateFromTransform != null) { setTranslationY(animateFromTransform.translationY); @@ -379,6 +384,7 @@ public class TaskView extends FrameLayout implements View.OnClickListener, mInfoView.rebindToTask(mTask, reloadingTaskData); // Rebind any listeners mBarView.mApplicationIcon.setOnClickListener(this); + mBarView.mDismissButton.setOnClickListener(this); mInfoView.mAppInfoButton.setOnClickListener(this); } mTaskDataLoaded = true; @@ -404,6 +410,15 @@ public class TaskView extends FrameLayout implements View.OnClickListener, hideInfoPane(); } else if (v == mBarView.mApplicationIcon) { mCb.onTaskIconClicked(this); + } else if (v == mBarView.mDismissButton) { + // Animate out the view and call the callback + final TaskView tv = this; + animateRemoval(new Runnable() { + @Override + public void run() { + mCb.onTaskDismissed(tv); + } + }); } else if (v == mInfoView.mAppInfoButton) { mCb.onTaskAppInfoClicked(this); } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java index 0748bbb681dc1..e6391a8cd1b81 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java @@ -24,6 +24,7 @@ public class TaskViewTransform { public int translationY = 0; public float scale = 1f; public float alpha = 1f; + public float dismissAlpha = 1f; public boolean visible = false; public Rect rect = new Rect(); float t; @@ -36,6 +37,7 @@ public class TaskViewTransform { translationY = o.translationY; scale = o.scale; alpha = o.alpha; + dismissAlpha = o.dismissAlpha; visible = o.visible; rect.set(o.rect); t = o.t; @@ -44,6 +46,6 @@ public class TaskViewTransform { @Override public String toString() { return "TaskViewTransform y: " + translationY + " scale: " + scale + " alpha: " + alpha + - " visible: " + visible + " rect: " + rect; + " visible: " + visible + " rect: " + rect + " dismissAlpha: " + dismissAlpha; } }