Updating task view style, fixing performance on enter-recents animation.
Change-Id: I42ca9296170a93a14184ae8963abbd3f0494e503
This commit is contained in:
@@ -25,36 +25,37 @@
|
||||
<com.android.systemui.recents.views.TaskBarView
|
||||
android:id="@+id/task_view_bar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="56dp"
|
||||
android:layout_gravity="top|center_horizontal"
|
||||
android:background="@color/recents_task_bar_default_background_color">
|
||||
<ImageView
|
||||
android:id="@+id/application_icon"
|
||||
android:layout_width="@dimen/recents_task_view_application_icon_size"
|
||||
android:layout_height="@dimen/recents_task_view_application_icon_size"
|
||||
android:layout_gravity="center_vertical|start"
|
||||
android:padding="8dp" />
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_gravity="center_vertical|start" />
|
||||
<TextView
|
||||
android:id="@+id/activity_description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical|left"
|
||||
android:layout_marginStart="@dimen/recents_task_view_application_icon_size"
|
||||
android:layout_marginEnd="@dimen/recents_task_view_application_icon_size"
|
||||
android:textSize="22sp"
|
||||
android:layout_gravity="center_vertical|start"
|
||||
android:layout_marginStart="64dp"
|
||||
android:layout_marginEnd="64dp"
|
||||
android:textSize="16sp"
|
||||
android:textColor="#ffffffff"
|
||||
android:text="@string/recents_empty_message"
|
||||
android:fontFamily="sans-serif-light"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:singleLine="true"
|
||||
android:maxLines="2"
|
||||
android:ellipsize="marquee"
|
||||
android:fadingEdge="horizontal" />
|
||||
<ImageView
|
||||
android:id="@+id/dismiss_task"
|
||||
android:layout_width="@dimen/recents_task_view_application_icon_size"
|
||||
android:layout_height="@dimen/recents_task_view_application_icon_size"
|
||||
android:layout_width="48dp"
|
||||
android:layout_height="48dp"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:layout_gravity="center_vertical|end"
|
||||
android:padding="23dp"
|
||||
android:padding="18dp"
|
||||
android:src="@drawable/recents_dismiss_light" />
|
||||
</com.android.systemui.recents.views.TaskBarView>
|
||||
</com.android.systemui.recents.views.TaskView>
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<!-- The recents task bar light text color to be drawn on top of dark backgrounds. -->
|
||||
<color name="recents_task_bar_light_text_color">#ffeeeeee</color>
|
||||
<!-- The recents task bar dark text color to be drawn on top of light backgrounds. -->
|
||||
<color name="recents_task_bar_dark_text_color">#ff222222</color>
|
||||
<color name="recents_task_bar_dark_text_color">#ff333333</color>
|
||||
<!-- The recents task bar light dismiss icon color to be drawn on top of dark backgrounds. -->
|
||||
<color name="recents_task_bar_light_dismiss_color">#ffeeeeee</color>
|
||||
<!-- The recents task bar dark dismiss icon color to be drawn on top of light backgrounds. -->
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
<!-- The min animation duration for animating views that are newly visible. -->
|
||||
<integer name="recents_filter_animate_new_views_min_duration">125</integer>
|
||||
<!-- The min animation duration for animating the task bar in. -->
|
||||
<integer name="recents_animate_task_bar_enter_duration">225</integer>
|
||||
<integer name="recents_animate_task_bar_enter_duration">300</integer>
|
||||
<!-- The min animation duration for animating the task bar out. -->
|
||||
<integer name="recents_animate_task_bar_exit_duration">175</integer>
|
||||
<!-- The animation duration for animating in the info pane. -->
|
||||
|
||||
@@ -212,7 +212,7 @@
|
||||
<dimen name="glowpadview_inner_radius">15dip</dimen>
|
||||
|
||||
<!-- The size of the application icon in the recents task view. -->
|
||||
<dimen name="recents_task_view_application_icon_size">60dp</dimen>
|
||||
<dimen name="recents_task_view_application_icon_size">32dp</dimen>
|
||||
|
||||
<!-- The size of the activity icon in the recents task view. -->
|
||||
<dimen name="recents_task_view_activity_icon_size">60dp</dimen>
|
||||
|
||||
@@ -35,6 +35,7 @@ import android.os.IBinder;
|
||||
import android.os.Message;
|
||||
import android.os.Messenger;
|
||||
import android.os.RemoteException;
|
||||
import android.os.SystemClock;
|
||||
import android.os.UserHandle;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.view.Display;
|
||||
@@ -49,7 +50,7 @@ import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
/** A proxy implementation for the recents component */
|
||||
public class AlternateRecentsComponent {
|
||||
public class AlternateRecentsComponent implements ActivityOptions.OnAnimationStartedListener {
|
||||
|
||||
/** A handler for messages from the recents implementation */
|
||||
class RecentsMessageHandler extends Handler {
|
||||
@@ -123,6 +124,7 @@ public class AlternateRecentsComponent {
|
||||
final public static int MSG_SHOW_RECENTS = 4;
|
||||
final public static int MSG_HIDE_RECENTS = 5;
|
||||
final public static int MSG_TOGGLE_RECENTS = 6;
|
||||
final public static int MSG_START_ENTER_ANIMATION = 7;
|
||||
|
||||
final public static String EXTRA_ANIMATING_WITH_THUMBNAIL = "recents.animatingWithThumbnail";
|
||||
final public static String EXTRA_FROM_ALT_TAB = "recents.triggeredFromAltTab";
|
||||
@@ -392,7 +394,7 @@ public class AlternateRecentsComponent {
|
||||
}
|
||||
|
||||
return ActivityOptions.makeThumbnailScaleDownAnimation(mStatusBarView, thumbnail,
|
||||
taskRect.left, taskRect.top, null);
|
||||
taskRect.left, taskRect.top, this);
|
||||
}
|
||||
|
||||
/** Returns whether the recents is currently running */
|
||||
@@ -517,4 +519,18 @@ public class AlternateRecentsComponent {
|
||||
mContext.startActivityAsUser(intent, new UserHandle(UserHandle.USER_CURRENT));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**** OnAnimationStartedListener Implementation ****/
|
||||
|
||||
@Override
|
||||
public void onAnimationStarted() {
|
||||
// Notify recents to start the enter animation
|
||||
try {
|
||||
Message msg = Message.obtain(null, MSG_START_ENTER_ANIMATION, 0, 0);
|
||||
mService.send(msg);
|
||||
} catch (RemoteException re) {
|
||||
re.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,6 +98,9 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
|
||||
// If there are no filtered stacks, dismiss recents and launch the first task
|
||||
dismissRecentsIfVisible();
|
||||
}
|
||||
} else if (action.equals(RecentsService.ACTION_START_ENTER_ANIMATION)) {
|
||||
// Try and start the enter animation
|
||||
mRecentsView.startOnEnterAnimation();
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -345,6 +348,7 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(RecentsService.ACTION_HIDE_RECENTS_ACTIVITY);
|
||||
filter.addAction(RecentsService.ACTION_TOGGLE_RECENTS_ACTIVITY);
|
||||
filter.addAction(RecentsService.ACTION_START_ENTER_ANIMATION);
|
||||
registerReceiver(mServiceBroadcastReceiver, filter);
|
||||
|
||||
// Register the broadcast receiver to handle messages when the screen is turned off
|
||||
|
||||
@@ -127,6 +127,11 @@ class SystemUIMessageHandler extends Handler {
|
||||
Constants.Log.App.TimeRecentsStartupKey, "receivedToggleRecents");
|
||||
Console.logTraceTime(Constants.Log.App.TimeRecentsLaunchTask,
|
||||
Constants.Log.App.TimeRecentsLaunchKey, "receivedToggleRecents");
|
||||
} else if (msg.what == AlternateRecentsComponent.MSG_START_ENTER_ANIMATION) {
|
||||
// Send a broadcast to start the enter animation
|
||||
Intent intent = new Intent(RecentsService.ACTION_START_ENTER_ANIMATION);
|
||||
intent.setPackage(context.getPackageName());
|
||||
context.sendBroadcast(intent);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -135,6 +140,7 @@ class SystemUIMessageHandler extends Handler {
|
||||
public class RecentsService extends Service {
|
||||
final static String ACTION_HIDE_RECENTS_ACTIVITY = "action_hide_recents_activity";
|
||||
final static String ACTION_TOGGLE_RECENTS_ACTIVITY = "action_toggle_recents_activity";
|
||||
final static String ACTION_START_ENTER_ANIMATION = "action_start_enter_animation";
|
||||
final static String EXTRA_TRIGGERED_FROM_ALT_TAB = "extra_triggered_from_alt_tab";
|
||||
|
||||
Messenger mSystemUIMessenger = new Messenger(new SystemUIMessageHandler(this));
|
||||
|
||||
@@ -158,6 +158,18 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Requests all task stacks to start their enter-recents animation */
|
||||
public void startOnEnterAnimation() {
|
||||
int childCount = getChildCount();
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
View child = getChildAt(i);
|
||||
if (child instanceof TaskStackView) {
|
||||
TaskStackView stackView = (TaskStackView) child;
|
||||
stackView.startOnEnterAnimation();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Adds the search bar */
|
||||
public void setSearchBar(View searchBar) {
|
||||
// Create the search bar (and hide it if we have no recent tasks)
|
||||
|
||||
@@ -88,6 +88,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
|
||||
int mStackViewsAnimationDuration;
|
||||
boolean mStackViewsDirty = true;
|
||||
boolean mAwaitingFirstLayout = true;
|
||||
boolean mStartEnterAnimationRequestedAfterLayout;
|
||||
int[] mTmpVisibleRange = new int[2];
|
||||
Rect mTmpRect = new Rect();
|
||||
Rect mTmpRect2 = new Rect();
|
||||
@@ -703,19 +704,6 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
|
||||
setStackScroll(mMaxScroll);
|
||||
requestSynchronizeStackViewsWithModel();
|
||||
synchronizeStackViewsWithModel();
|
||||
|
||||
// Update the focused task index to be the next item to the top task
|
||||
if (config.launchedFromAltTab) {
|
||||
focusTask(Math.max(0, mStack.getTaskCount() - 2), false);
|
||||
}
|
||||
|
||||
// Animate the task bar of the first task view
|
||||
if (config.launchedWithThumbnailAnimation) {
|
||||
TaskView tv = (TaskView) getChildAt(getChildCount() - 1);
|
||||
if (tv != null) {
|
||||
tv.animateOnEnterRecents();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Measure each of the children
|
||||
@@ -758,7 +746,47 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
|
||||
}
|
||||
|
||||
if (mAwaitingFirstLayout) {
|
||||
RecentsConfiguration config = RecentsConfiguration.getInstance();
|
||||
|
||||
// Update the focused task index to be the next item to the top task
|
||||
if (config.launchedFromAltTab) {
|
||||
focusTask(Math.max(0, mStack.getTaskCount() - 2), false);
|
||||
}
|
||||
|
||||
// Prepare the first view for its enter animation
|
||||
if (config.launchedWithThumbnailAnimation) {
|
||||
TaskView tv = (TaskView) getChildAt(getChildCount() - 1);
|
||||
if (tv != null) {
|
||||
tv.prepareAnimateOnEnterRecents();
|
||||
}
|
||||
}
|
||||
|
||||
// Mark that we have completely the first layout
|
||||
mAwaitingFirstLayout = false;
|
||||
|
||||
// If the enter animation started already and we haven't completed a layout yet, do the
|
||||
// enter animation now
|
||||
if (mStartEnterAnimationRequestedAfterLayout) {
|
||||
startOnEnterAnimation();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Requests this task stacks to start it's enter-recents animation */
|
||||
public void startOnEnterAnimation() {
|
||||
RecentsConfiguration config = RecentsConfiguration.getInstance();
|
||||
if (!config.launchedWithThumbnailAnimation) return;
|
||||
|
||||
// If we are still waiting to layout, then just defer until then
|
||||
if (mAwaitingFirstLayout) {
|
||||
mStartEnterAnimationRequestedAfterLayout = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// Animate the task bar of the first task view
|
||||
TaskView tv = (TaskView) getChildAt(getChildCount() - 1);
|
||||
if (tv != null) {
|
||||
tv.animateOnEnterRecents();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -221,13 +221,20 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, View.On
|
||||
fromTransform.alpha = 0f;
|
||||
}
|
||||
|
||||
/** Prepares this task view for the enter-recents animations. This is called earlier in the
|
||||
* first layout because the actual animation into recents may take a long time. */
|
||||
public void prepareAnimateOnEnterRecents() {
|
||||
mBarView.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
|
||||
/** Animates this task view as it enters recents */
|
||||
public void animateOnEnterRecents() {
|
||||
RecentsConfiguration config = RecentsConfiguration.getInstance();
|
||||
mBarView.setAlpha(0f);
|
||||
mBarView.setVisibility(View.VISIBLE);
|
||||
mBarView.setTranslationY(-mBarView.getMeasuredHeight());
|
||||
mBarView.animate()
|
||||
.alpha(1f)
|
||||
.setStartDelay(300)
|
||||
.translationY(0)
|
||||
.setStartDelay(200)
|
||||
.setInterpolator(config.defaultBezierInterpolator)
|
||||
.setDuration(config.taskBarEnterAnimDuration)
|
||||
.withLayer()
|
||||
@@ -238,7 +245,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, View.On
|
||||
public void animateOnLeavingRecents(final Runnable r) {
|
||||
RecentsConfiguration config = RecentsConfiguration.getInstance();
|
||||
mBarView.animate()
|
||||
.alpha(0f)
|
||||
.translationY(-mBarView.getMeasuredHeight())
|
||||
.setStartDelay(0)
|
||||
.setInterpolator(config.defaultBezierInterpolator)
|
||||
.setDuration(config.taskBarExitAnimDuration)
|
||||
|
||||
@@ -115,7 +115,7 @@ public class AppTransition implements Dump {
|
||||
private static final float RECENTS_THUMBNAIL_FADEOUT_FRACTION = 0.25f;
|
||||
|
||||
private static final int DEFAULT_APP_TRANSITION_DURATION = 250;
|
||||
private static final int THUMBNAIL_APP_TRANSITION_DURATION = 225;
|
||||
private static final int THUMBNAIL_APP_TRANSITION_DURATION = 275;
|
||||
|
||||
private final Context mContext;
|
||||
private final Handler mH;
|
||||
|
||||
Reference in New Issue
Block a user