Loading packages/SystemUI/res/values/dimens_tv.xml +2 −0 Original line number Diff line number Diff line Loading @@ -57,4 +57,6 @@ <!-- Extra space around the PIP control button icon to match with the focused circle --> <dimen name="tv_pip_button_icon_padding">5dp</dimen> <!-- Values for entering Recents and exiting Recents --> <dimen name="recents_tv_home_recents_shift">125dip</dimen> </resources> packages/SystemUI/res/values/integers_tv.xml +6 −0 Original line number Diff line number Diff line Loading @@ -17,5 +17,11 @@ <integer name="item_scale_anim_duration">150</integer> <integer name="dismiss_short_duration">200</integer> <integer name="dismiss_long_duration">400</integer> <integer name="recents_tv_pip_focus_anim_duration">200</integer> <!-- Duration for how long it takes cards to slide in or out when going to and from recents. --> <integer name="recents_home_duration">400</integer> <!-- Delay between the start of slide in animation for each card. --> <integer name="recents_home_delay">40</integer> </resources> packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java +42 −15 Original line number Diff line number Diff line Loading @@ -37,14 +37,12 @@ import com.android.systemui.recents.events.EventBus; import com.android.systemui.recents.events.activity.CancelEnterRecentsWindowAnimationEvent; import com.android.systemui.recents.events.activity.DismissRecentsToHomeAnimationStarted; import com.android.systemui.recents.events.activity.EnterRecentsWindowAnimationCompletedEvent; import com.android.systemui.recents.events.activity.EnterRecentsWindowLastAnimationFrameEvent; import com.android.systemui.recents.events.activity.HideRecentsEvent; import com.android.systemui.recents.events.activity.LaunchTaskFailedEvent; import com.android.systemui.recents.events.activity.ToggleRecentsEvent; import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent; import com.android.systemui.recents.events.ui.AllTaskViewsDismissedEvent; import com.android.systemui.recents.events.ui.DeleteTaskDataEvent; import com.android.systemui.recents.events.ui.UpdateFreeformTaskViewVisibilityEvent; import com.android.systemui.recents.events.ui.UserInteractionEvent; import com.android.systemui.recents.events.ui.focus.DismissFocusedTaskViewEvent; import com.android.systemui.recents.misc.SystemServicesProxy; Loading @@ -53,7 +51,9 @@ import com.android.systemui.recents.model.RecentsTaskLoadPlan; import com.android.systemui.recents.model.RecentsTaskLoader; import com.android.systemui.recents.model.Task; import com.android.systemui.recents.model.TaskStack; import com.android.systemui.recents.tv.animations.HomeRecentsEnterExitAnimationHolder; 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.statusbar.BaseStatusBar; import com.android.systemui.tv.pip.PipManager; Loading @@ -76,11 +76,14 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { private RecentsPackageMonitor mPackageMonitor; private long mLastTabKeyEventTime; private boolean mIgnoreAltTabRelease; private boolean mLaunchedFromHome; private RecentsTvView mRecentsView; private View mPipView; private TaskStackHorizontalViewAdapter mTaskStackViewAdapter; private TaskStackHorizontalGridView mTaskStackHorizontalGridView; private FinishRecentsRunnable mFinishLaunchHomeRunnable; private HomeRecentsEnterExitAnimationHolder mHomeRecentsEnterExitAnimationHolder; private final PipManager mPipManager = PipManager.getInstance(); private final PipManager.Listener mPipListener = new PipManager.Listener() { Loading Loading @@ -174,6 +177,7 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { if (!plan.hasTasks()) { loader.preloadTasks(plan, -1, launchState.launchedFromHome); } mLaunchedFromHome = launchState.launchedFromHome; TaskStack stack = plan.getTaskStack(); RecentsTaskLoadPlan.Options loadOpts = new RecentsTaskLoadPlan.Options(); loadOpts.runningTaskId = launchState.launchedToTaskId; Loading @@ -187,7 +191,8 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { Collections.reverse(stackTasks); if (mTaskStackViewAdapter == null) { mTaskStackViewAdapter = new TaskStackHorizontalViewAdapter(stackTasks); mRecentsView.setTaskStackViewAdapter(mTaskStackViewAdapter); mTaskStackHorizontalGridView = mRecentsView .setTaskStackViewAdapter(mTaskStackViewAdapter); } else { mTaskStackViewAdapter.setNewStackTasks(stackTasks); } Loading Loading @@ -229,17 +234,24 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { } void dismissRecentsToHome(boolean animateTaskViews) { DismissRecentsToHomeAnimationStarted dismissEvent = new DismissRecentsToHomeAnimationStarted(animateTaskViews); dismissEvent.addPostAnimationCallback(mFinishLaunchHomeRunnable); dismissEvent.addPostAnimationCallback(new Runnable() { Runnable closeSystemWindows = new Runnable() { @Override public void run() { Recents.getSystemServices().sendCloseSystemWindows( BaseStatusBar.SYSTEM_DIALOG_REASON_HOME_KEY); } }); EventBus.getDefault().send(dismissEvent); }; DismissRecentsToHomeAnimationStarted dismissEvent = new DismissRecentsToHomeAnimationStarted(animateTaskViews); dismissEvent.addPostAnimationCallback(mFinishLaunchHomeRunnable); dismissEvent.addPostAnimationCallback(closeSystemWindows); if(mTaskStackHorizontalGridView.getChildCount() > 0) { mHomeRecentsEnterExitAnimationHolder.startExitAnimation(dismissEvent); } else { closeSystemWindows.run(); mFinishLaunchHomeRunnable.run(); } } boolean dismissRecentsToHomeIfVisible(boolean animated) { Loading Loading @@ -319,6 +331,19 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { // Update the recent tasks updateRecentsTasks(); mHomeRecentsEnterExitAnimationHolder = new HomeRecentsEnterExitAnimationHolder( getApplicationContext(), mTaskStackHorizontalGridView); if(mTaskStackHorizontalGridView != null && mTaskStackHorizontalGridView.getChildCount() > 0) { if(mLaunchedFromHome) { mHomeRecentsEnterExitAnimationHolder.setEnterFromHomeStartingAnimationValues(); } else { mHomeRecentsEnterExitAnimationHolder.setEnterFromAppStartingAnimationValues(); } } else { mRecentsView.getViewTreeObserver().addOnPreDrawListener(this); } // If this is a new instance from a configuration change, then we have to manually trigger // the enter animation state, or if recents was relaunched by AM, without going through // the normal mechanisms Loading @@ -340,6 +365,9 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { @Override public void onEnterAnimationComplete() { super.onEnterAnimationComplete(); if(mLaunchedFromHome) { mHomeRecentsEnterExitAnimationHolder.startEnterAnimation(); } EventBus.getDefault().send(new EnterRecentsWindowAnimationCompletedEvent()); } Loading Loading @@ -444,12 +472,6 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { } } public final void onBusEvent(EnterRecentsWindowLastAnimationFrameEvent event) { EventBus.getDefault().send(new UpdateFreeformTaskViewVisibilityEvent(true)); mRecentsView.getViewTreeObserver().addOnPreDrawListener(this); mRecentsView.invalidate(); } public final void onBusEvent(CancelEnterRecentsWindowAnimationEvent event) { RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState(); int launchToTaskId = launchState.launchedToTaskId; Loading Loading @@ -489,6 +511,11 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { @Override public boolean onPreDraw() { mRecentsView.getViewTreeObserver().removeOnPreDrawListener(this); if(mLaunchedFromHome) { mHomeRecentsEnterExitAnimationHolder.setEnterFromHomeStartingAnimationValues(); } else { mHomeRecentsEnterExitAnimationHolder.setEnterFromAppStartingAnimationValues(); } // We post to make sure that this information is delivered after this traversals is // finished. mRecentsView.post(new Runnable() { Loading packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvImpl.java +12 −10 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.graphics.Rect; import android.os.SystemClock; import android.os.UserHandle; import com.android.systemui.SystemUIApplication; import com.android.systemui.recents.Recents; import com.android.systemui.recents.RecentsActivityLaunchState; import com.android.systemui.recents.RecentsConfiguration; Loading @@ -34,6 +35,7 @@ import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent import com.android.systemui.recents.model.RecentsTaskLoader; import com.android.systemui.recents.model.TaskStack; import com.android.systemui.recents.tv.views.TaskCardView; import com.android.systemui.statusbar.tv.TvStatusBar; public class RecentsTvImpl extends RecentsImpl{ public final static String RECENTS_TV_ACTIVITY = Loading Loading @@ -81,16 +83,7 @@ public class RecentsTvImpl extends RecentsImpl{ } if (!useThumbnailTransition) { // If there is no thumbnail transition, but is launching from home into recents, then // use a quick home transition and do the animation from home if (hasRecentTasks) { ActivityOptions opts = getHomeTransitionActivityOptions(); startRecentsActivity(topTask, opts, true /* fromHome */, false /* fromThumbnail */); } else { // Otherwise we do the normal fade from an unknown source ActivityOptions opts = getUnknownTransitionActivityOptions(); startRecentsActivity(topTask, opts, true /* fromHome */, false /* fromThumbnail */); } startRecentsActivity(topTask, null, true /* fromHome */, false /* fromThumbnail */); } mLastToggleTime = SystemClock.elapsedRealtime(); } Loading Loading @@ -134,4 +127,13 @@ public class RecentsTvImpl extends RecentsImpl{ // If both the screenshot and thumbnail fails, then just fall back to the default transition return getUnknownTransitionActivityOptions(); } @Override public void onVisibilityChanged(Context context, boolean visible) { SystemUIApplication app = (SystemUIApplication) context; TvStatusBar statusBar = app.getComponent(TvStatusBar.class); if (statusBar != null) { statusBar.updateRecentsVisibility(visible); } } } packages/SystemUI/src/com/android/systemui/recents/tv/animations/DismissAnimationsHolder.java +29 −26 Original line number Diff line number Diff line Loading @@ -18,9 +18,8 @@ package com.android.systemui.recents.tv.animations; import android.animation.Animator; import android.content.res.Resources; import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.view.View; import android.widget.LinearLayout; import com.android.systemui.Interpolators; import com.android.systemui.recents.tv.views.TaskCardView; import com.android.systemui.R; Loading @@ -28,7 +27,6 @@ import com.android.systemui.R; public class DismissAnimationsHolder { private LinearLayout mDismissArea; private LinearLayout mTaskCardView; private FastOutSlowInInterpolator mFastOutSlowIn; private int mCardYDelta; private long mShortDuration; private long mLongDuration; Loading @@ -36,7 +34,6 @@ public class DismissAnimationsHolder { public DismissAnimationsHolder(TaskCardView taskCardView) { mTaskCardView = (LinearLayout) taskCardView.findViewById(R.id.recents_tv_card); mDismissArea = (LinearLayout) taskCardView.findViewById(R.id.card_dismiss); mFastOutSlowIn = new FastOutSlowInInterpolator(); Resources res = taskCardView.getResources(); mCardYDelta = res.getDimensionPixelOffset(R.dimen.recents_tv_dismiss_shift_down); Loading @@ -45,36 +42,42 @@ public class DismissAnimationsHolder { } public void startEnterAnimation() { mDismissArea.animate().setDuration(mShortDuration); mDismissArea.animate().setInterpolator(mFastOutSlowIn); mDismissArea.animate().alpha(1.0f); mDismissArea.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .alpha(1.0f); mTaskCardView.animate().setDuration(mShortDuration); mTaskCardView.animate().setInterpolator(mFastOutSlowIn); mTaskCardView.animate().translationYBy(mCardYDelta); mTaskCardView.animate().alpha(0.5f); mTaskCardView.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .translationYBy(mCardYDelta) .alpha(0.5f); } public void startExitAnimation() { mDismissArea.animate().setDuration(mShortDuration); mDismissArea.animate().setInterpolator(mFastOutSlowIn); mDismissArea.animate().alpha(0.0f); mDismissArea.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .alpha(0.0f); mTaskCardView.animate().setDuration(mShortDuration); mTaskCardView.animate().setInterpolator(mFastOutSlowIn); mTaskCardView.animate().translationYBy(-mCardYDelta); mTaskCardView.animate().alpha(1.0f); mTaskCardView.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .translationYBy(-mCardYDelta) .alpha(1.0f); } public void startDismissAnimation(Animator.AnimatorListener listener) { mDismissArea.animate().setDuration(mShortDuration); mDismissArea.animate().setInterpolator(mFastOutSlowIn); mDismissArea.animate().alpha(0.0f); mDismissArea.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .alpha(0.0f); mTaskCardView.animate().setDuration(mLongDuration); mTaskCardView.animate().setInterpolator(mFastOutSlowIn); mTaskCardView.animate().translationYBy(mCardYDelta); mTaskCardView.animate().alpha(0.0f); mTaskCardView.animate().setListener(listener); mTaskCardView.animate() .setDuration(mLongDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .translationYBy(mCardYDelta) .alpha(0.0f) .setListener(listener); } } Loading
packages/SystemUI/res/values/dimens_tv.xml +2 −0 Original line number Diff line number Diff line Loading @@ -57,4 +57,6 @@ <!-- Extra space around the PIP control button icon to match with the focused circle --> <dimen name="tv_pip_button_icon_padding">5dp</dimen> <!-- Values for entering Recents and exiting Recents --> <dimen name="recents_tv_home_recents_shift">125dip</dimen> </resources>
packages/SystemUI/res/values/integers_tv.xml +6 −0 Original line number Diff line number Diff line Loading @@ -17,5 +17,11 @@ <integer name="item_scale_anim_duration">150</integer> <integer name="dismiss_short_duration">200</integer> <integer name="dismiss_long_duration">400</integer> <integer name="recents_tv_pip_focus_anim_duration">200</integer> <!-- Duration for how long it takes cards to slide in or out when going to and from recents. --> <integer name="recents_home_duration">400</integer> <!-- Delay between the start of slide in animation for each card. --> <integer name="recents_home_delay">40</integer> </resources>
packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java +42 −15 Original line number Diff line number Diff line Loading @@ -37,14 +37,12 @@ import com.android.systemui.recents.events.EventBus; import com.android.systemui.recents.events.activity.CancelEnterRecentsWindowAnimationEvent; import com.android.systemui.recents.events.activity.DismissRecentsToHomeAnimationStarted; import com.android.systemui.recents.events.activity.EnterRecentsWindowAnimationCompletedEvent; import com.android.systemui.recents.events.activity.EnterRecentsWindowLastAnimationFrameEvent; import com.android.systemui.recents.events.activity.HideRecentsEvent; import com.android.systemui.recents.events.activity.LaunchTaskFailedEvent; import com.android.systemui.recents.events.activity.ToggleRecentsEvent; import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent; import com.android.systemui.recents.events.ui.AllTaskViewsDismissedEvent; import com.android.systemui.recents.events.ui.DeleteTaskDataEvent; import com.android.systemui.recents.events.ui.UpdateFreeformTaskViewVisibilityEvent; import com.android.systemui.recents.events.ui.UserInteractionEvent; import com.android.systemui.recents.events.ui.focus.DismissFocusedTaskViewEvent; import com.android.systemui.recents.misc.SystemServicesProxy; Loading @@ -53,7 +51,9 @@ import com.android.systemui.recents.model.RecentsTaskLoadPlan; import com.android.systemui.recents.model.RecentsTaskLoader; import com.android.systemui.recents.model.Task; import com.android.systemui.recents.model.TaskStack; import com.android.systemui.recents.tv.animations.HomeRecentsEnterExitAnimationHolder; 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.statusbar.BaseStatusBar; import com.android.systemui.tv.pip.PipManager; Loading @@ -76,11 +76,14 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { private RecentsPackageMonitor mPackageMonitor; private long mLastTabKeyEventTime; private boolean mIgnoreAltTabRelease; private boolean mLaunchedFromHome; private RecentsTvView mRecentsView; private View mPipView; private TaskStackHorizontalViewAdapter mTaskStackViewAdapter; private TaskStackHorizontalGridView mTaskStackHorizontalGridView; private FinishRecentsRunnable mFinishLaunchHomeRunnable; private HomeRecentsEnterExitAnimationHolder mHomeRecentsEnterExitAnimationHolder; private final PipManager mPipManager = PipManager.getInstance(); private final PipManager.Listener mPipListener = new PipManager.Listener() { Loading Loading @@ -174,6 +177,7 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { if (!plan.hasTasks()) { loader.preloadTasks(plan, -1, launchState.launchedFromHome); } mLaunchedFromHome = launchState.launchedFromHome; TaskStack stack = plan.getTaskStack(); RecentsTaskLoadPlan.Options loadOpts = new RecentsTaskLoadPlan.Options(); loadOpts.runningTaskId = launchState.launchedToTaskId; Loading @@ -187,7 +191,8 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { Collections.reverse(stackTasks); if (mTaskStackViewAdapter == null) { mTaskStackViewAdapter = new TaskStackHorizontalViewAdapter(stackTasks); mRecentsView.setTaskStackViewAdapter(mTaskStackViewAdapter); mTaskStackHorizontalGridView = mRecentsView .setTaskStackViewAdapter(mTaskStackViewAdapter); } else { mTaskStackViewAdapter.setNewStackTasks(stackTasks); } Loading Loading @@ -229,17 +234,24 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { } void dismissRecentsToHome(boolean animateTaskViews) { DismissRecentsToHomeAnimationStarted dismissEvent = new DismissRecentsToHomeAnimationStarted(animateTaskViews); dismissEvent.addPostAnimationCallback(mFinishLaunchHomeRunnable); dismissEvent.addPostAnimationCallback(new Runnable() { Runnable closeSystemWindows = new Runnable() { @Override public void run() { Recents.getSystemServices().sendCloseSystemWindows( BaseStatusBar.SYSTEM_DIALOG_REASON_HOME_KEY); } }); EventBus.getDefault().send(dismissEvent); }; DismissRecentsToHomeAnimationStarted dismissEvent = new DismissRecentsToHomeAnimationStarted(animateTaskViews); dismissEvent.addPostAnimationCallback(mFinishLaunchHomeRunnable); dismissEvent.addPostAnimationCallback(closeSystemWindows); if(mTaskStackHorizontalGridView.getChildCount() > 0) { mHomeRecentsEnterExitAnimationHolder.startExitAnimation(dismissEvent); } else { closeSystemWindows.run(); mFinishLaunchHomeRunnable.run(); } } boolean dismissRecentsToHomeIfVisible(boolean animated) { Loading Loading @@ -319,6 +331,19 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { // Update the recent tasks updateRecentsTasks(); mHomeRecentsEnterExitAnimationHolder = new HomeRecentsEnterExitAnimationHolder( getApplicationContext(), mTaskStackHorizontalGridView); if(mTaskStackHorizontalGridView != null && mTaskStackHorizontalGridView.getChildCount() > 0) { if(mLaunchedFromHome) { mHomeRecentsEnterExitAnimationHolder.setEnterFromHomeStartingAnimationValues(); } else { mHomeRecentsEnterExitAnimationHolder.setEnterFromAppStartingAnimationValues(); } } else { mRecentsView.getViewTreeObserver().addOnPreDrawListener(this); } // If this is a new instance from a configuration change, then we have to manually trigger // the enter animation state, or if recents was relaunched by AM, without going through // the normal mechanisms Loading @@ -340,6 +365,9 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { @Override public void onEnterAnimationComplete() { super.onEnterAnimationComplete(); if(mLaunchedFromHome) { mHomeRecentsEnterExitAnimationHolder.startEnterAnimation(); } EventBus.getDefault().send(new EnterRecentsWindowAnimationCompletedEvent()); } Loading Loading @@ -444,12 +472,6 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { } } public final void onBusEvent(EnterRecentsWindowLastAnimationFrameEvent event) { EventBus.getDefault().send(new UpdateFreeformTaskViewVisibilityEvent(true)); mRecentsView.getViewTreeObserver().addOnPreDrawListener(this); mRecentsView.invalidate(); } public final void onBusEvent(CancelEnterRecentsWindowAnimationEvent event) { RecentsActivityLaunchState launchState = Recents.getConfiguration().getLaunchState(); int launchToTaskId = launchState.launchedToTaskId; Loading Loading @@ -489,6 +511,11 @@ public class RecentsTvActivity extends Activity implements OnPreDrawListener { @Override public boolean onPreDraw() { mRecentsView.getViewTreeObserver().removeOnPreDrawListener(this); if(mLaunchedFromHome) { mHomeRecentsEnterExitAnimationHolder.setEnterFromHomeStartingAnimationValues(); } else { mHomeRecentsEnterExitAnimationHolder.setEnterFromAppStartingAnimationValues(); } // We post to make sure that this information is delivered after this traversals is // finished. mRecentsView.post(new Runnable() { Loading
packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvImpl.java +12 −10 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.graphics.Rect; import android.os.SystemClock; import android.os.UserHandle; import com.android.systemui.SystemUIApplication; import com.android.systemui.recents.Recents; import com.android.systemui.recents.RecentsActivityLaunchState; import com.android.systemui.recents.RecentsConfiguration; Loading @@ -34,6 +35,7 @@ import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent import com.android.systemui.recents.model.RecentsTaskLoader; import com.android.systemui.recents.model.TaskStack; import com.android.systemui.recents.tv.views.TaskCardView; import com.android.systemui.statusbar.tv.TvStatusBar; public class RecentsTvImpl extends RecentsImpl{ public final static String RECENTS_TV_ACTIVITY = Loading Loading @@ -81,16 +83,7 @@ public class RecentsTvImpl extends RecentsImpl{ } if (!useThumbnailTransition) { // If there is no thumbnail transition, but is launching from home into recents, then // use a quick home transition and do the animation from home if (hasRecentTasks) { ActivityOptions opts = getHomeTransitionActivityOptions(); startRecentsActivity(topTask, opts, true /* fromHome */, false /* fromThumbnail */); } else { // Otherwise we do the normal fade from an unknown source ActivityOptions opts = getUnknownTransitionActivityOptions(); startRecentsActivity(topTask, opts, true /* fromHome */, false /* fromThumbnail */); } startRecentsActivity(topTask, null, true /* fromHome */, false /* fromThumbnail */); } mLastToggleTime = SystemClock.elapsedRealtime(); } Loading Loading @@ -134,4 +127,13 @@ public class RecentsTvImpl extends RecentsImpl{ // If both the screenshot and thumbnail fails, then just fall back to the default transition return getUnknownTransitionActivityOptions(); } @Override public void onVisibilityChanged(Context context, boolean visible) { SystemUIApplication app = (SystemUIApplication) context; TvStatusBar statusBar = app.getComponent(TvStatusBar.class); if (statusBar != null) { statusBar.updateRecentsVisibility(visible); } } }
packages/SystemUI/src/com/android/systemui/recents/tv/animations/DismissAnimationsHolder.java +29 −26 Original line number Diff line number Diff line Loading @@ -18,9 +18,8 @@ package com.android.systemui.recents.tv.animations; import android.animation.Animator; import android.content.res.Resources; import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.view.View; import android.widget.LinearLayout; import com.android.systemui.Interpolators; import com.android.systemui.recents.tv.views.TaskCardView; import com.android.systemui.R; Loading @@ -28,7 +27,6 @@ import com.android.systemui.R; public class DismissAnimationsHolder { private LinearLayout mDismissArea; private LinearLayout mTaskCardView; private FastOutSlowInInterpolator mFastOutSlowIn; private int mCardYDelta; private long mShortDuration; private long mLongDuration; Loading @@ -36,7 +34,6 @@ public class DismissAnimationsHolder { public DismissAnimationsHolder(TaskCardView taskCardView) { mTaskCardView = (LinearLayout) taskCardView.findViewById(R.id.recents_tv_card); mDismissArea = (LinearLayout) taskCardView.findViewById(R.id.card_dismiss); mFastOutSlowIn = new FastOutSlowInInterpolator(); Resources res = taskCardView.getResources(); mCardYDelta = res.getDimensionPixelOffset(R.dimen.recents_tv_dismiss_shift_down); Loading @@ -45,36 +42,42 @@ public class DismissAnimationsHolder { } public void startEnterAnimation() { mDismissArea.animate().setDuration(mShortDuration); mDismissArea.animate().setInterpolator(mFastOutSlowIn); mDismissArea.animate().alpha(1.0f); mDismissArea.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .alpha(1.0f); mTaskCardView.animate().setDuration(mShortDuration); mTaskCardView.animate().setInterpolator(mFastOutSlowIn); mTaskCardView.animate().translationYBy(mCardYDelta); mTaskCardView.animate().alpha(0.5f); mTaskCardView.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .translationYBy(mCardYDelta) .alpha(0.5f); } public void startExitAnimation() { mDismissArea.animate().setDuration(mShortDuration); mDismissArea.animate().setInterpolator(mFastOutSlowIn); mDismissArea.animate().alpha(0.0f); mDismissArea.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .alpha(0.0f); mTaskCardView.animate().setDuration(mShortDuration); mTaskCardView.animate().setInterpolator(mFastOutSlowIn); mTaskCardView.animate().translationYBy(-mCardYDelta); mTaskCardView.animate().alpha(1.0f); mTaskCardView.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .translationYBy(-mCardYDelta) .alpha(1.0f); } public void startDismissAnimation(Animator.AnimatorListener listener) { mDismissArea.animate().setDuration(mShortDuration); mDismissArea.animate().setInterpolator(mFastOutSlowIn); mDismissArea.animate().alpha(0.0f); mDismissArea.animate() .setDuration(mShortDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .alpha(0.0f); mTaskCardView.animate().setDuration(mLongDuration); mTaskCardView.animate().setInterpolator(mFastOutSlowIn); mTaskCardView.animate().translationYBy(mCardYDelta); mTaskCardView.animate().alpha(0.0f); mTaskCardView.animate().setListener(listener); mTaskCardView.animate() .setDuration(mLongDuration) .setInterpolator(Interpolators.FAST_OUT_SLOW_IN) .translationYBy(mCardYDelta) .alpha(0.0f) .setListener(listener); } }