Search in sources :

Example 36 with AppTransitionAnimationSpec

use of android.view.AppTransitionAnimationSpec in project android_frameworks_base by crdroidandroid.

the class RecentsTransitionHelper method composeAnimationSpec.

/**
     * Composes a single animation spec for the given {@link TaskView}
     */
private static AppTransitionAnimationSpec composeAnimationSpec(TaskStackView stackView, TaskView taskView, TaskViewTransform transform, boolean addHeaderBitmap) {
    Bitmap b = null;
    if (addHeaderBitmap) {
        b = composeHeaderBitmap(taskView, transform);
        if (b == null) {
            return null;
        }
    }
    Rect taskRect = new Rect();
    transform.rect.round(taskRect);
    if (stackView.getStack().getStackFrontMostTask(false) != taskView.getTask()) {
        taskRect.bottom = taskRect.top + stackView.getMeasuredHeight();
    }
    return new AppTransitionAnimationSpec(taskView.getTask().key.id, b, taskRect);
}
Also used : Bitmap(android.graphics.Bitmap) Rect(android.graphics.Rect) AppTransitionAnimationSpec(android.view.AppTransitionAnimationSpec)

Example 37 with AppTransitionAnimationSpec

use of android.view.AppTransitionAnimationSpec in project android_frameworks_base by crdroidandroid.

the class RecentsTransitionHelper method launchTaskFromRecents.

/**
     * Launches the specified {@link Task}.
     */
public void launchTaskFromRecents(final TaskStack stack, @Nullable final Task task, final TaskStackView stackView, final TaskView taskView, final boolean screenPinningRequested, final Rect bounds, final int destinationStack) {
    final ActivityOptions opts = ActivityOptions.makeBasic();
    if (bounds != null) {
        opts.setLaunchBounds(bounds.isEmpty() ? null : bounds);
    }
    final ActivityOptions.OnAnimationStartedListener animStartedListener;
    final IAppTransitionAnimationSpecsFuture transitionFuture;
    if (taskView != null) {
        transitionFuture = getAppTransitionFuture(new AnimationSpecComposer() {

            @Override
            public List<AppTransitionAnimationSpec> composeSpecs() {
                return composeAnimationSpecs(task, stackView, destinationStack);
            }
        });
        animStartedListener = new ActivityOptions.OnAnimationStartedListener() {

            @Override
            public void onAnimationStarted() {
                // If we are launching into another task, cancel the previous task's
                // window transition
                EventBus.getDefault().send(new CancelEnterRecentsWindowAnimationEvent(task));
                EventBus.getDefault().send(new ExitRecentsWindowFirstAnimationFrameEvent());
                stackView.cancelAllTaskViewAnimations();
                if (screenPinningRequested) {
                    // Request screen pinning after the animation runs
                    mStartScreenPinningRunnable.taskId = task.key.id;
                    mHandler.postDelayed(mStartScreenPinningRunnable, 350);
                }
            }
        };
    } else {
        // This is only the case if the task is not on screen (scrolled offscreen for example)
        transitionFuture = null;
        animStartedListener = new ActivityOptions.OnAnimationStartedListener() {

            @Override
            public void onAnimationStarted() {
                // If we are launching into another task, cancel the previous task's
                // window transition
                EventBus.getDefault().send(new CancelEnterRecentsWindowAnimationEvent(task));
                EventBus.getDefault().send(new ExitRecentsWindowFirstAnimationFrameEvent());
                stackView.cancelAllTaskViewAnimations();
            }
        };
    }
    if (taskView == null) {
        // If there is no task view, then we do not need to worry about animating out occluding
        // task views, and we can launch immediately
        startTaskActivity(stack, task, taskView, opts, transitionFuture, animStartedListener);
    } else {
        LaunchTaskStartedEvent launchStartedEvent = new LaunchTaskStartedEvent(taskView, screenPinningRequested);
        if (task.group != null && !task.group.isFrontMostTask(task)) {
            launchStartedEvent.addPostAnimationCallback(new Runnable() {

                @Override
                public void run() {
                    startTaskActivity(stack, task, taskView, opts, transitionFuture, animStartedListener);
                }
            });
            EventBus.getDefault().send(launchStartedEvent);
        } else {
            EventBus.getDefault().send(launchStartedEvent);
            startTaskActivity(stack, task, taskView, opts, transitionFuture, animStartedListener);
        }
    }
    Recents.getSystemServices().sendCloseSystemWindows(BaseStatusBar.SYSTEM_DIALOG_REASON_HOME_KEY);
}
Also used : OnAnimationStartedListener(android.app.ActivityOptions.OnAnimationStartedListener) IAppTransitionAnimationSpecsFuture(android.view.IAppTransitionAnimationSpecsFuture) AppTransitionAnimationSpec(android.view.AppTransitionAnimationSpec) LaunchTaskStartedEvent(com.android.systemui.recents.events.activity.LaunchTaskStartedEvent) ExitRecentsWindowFirstAnimationFrameEvent(com.android.systemui.recents.events.activity.ExitRecentsWindowFirstAnimationFrameEvent) CancelEnterRecentsWindowAnimationEvent(com.android.systemui.recents.events.activity.CancelEnterRecentsWindowAnimationEvent) ActivityOptions(android.app.ActivityOptions)

Example 38 with AppTransitionAnimationSpec

use of android.view.AppTransitionAnimationSpec in project android_frameworks_base by crdroidandroid.

the class ActivityRecord method applyOptionsLocked.

void applyOptionsLocked() {
    if (pendingOptions != null && pendingOptions.getAnimationType() != ActivityOptions.ANIM_SCENE_TRANSITION) {
        final int animationType = pendingOptions.getAnimationType();
        switch(animationType) {
            case ActivityOptions.ANIM_CUSTOM:
                service.mWindowManager.overridePendingAppTransition(pendingOptions.getPackageName(), pendingOptions.getCustomEnterResId(), pendingOptions.getCustomExitResId(), pendingOptions.getOnAnimationStartListener());
                break;
            case ActivityOptions.ANIM_CLIP_REVEAL:
                service.mWindowManager.overridePendingAppTransitionClipReveal(pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getWidth(), pendingOptions.getHeight());
                if (intent.getSourceBounds() == null) {
                    intent.setSourceBounds(new Rect(pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getStartX() + pendingOptions.getWidth(), pendingOptions.getStartY() + pendingOptions.getHeight()));
                }
                break;
            case ActivityOptions.ANIM_SCALE_UP:
                service.mWindowManager.overridePendingAppTransitionScaleUp(pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getWidth(), pendingOptions.getHeight());
                if (intent.getSourceBounds() == null) {
                    intent.setSourceBounds(new Rect(pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getStartX() + pendingOptions.getWidth(), pendingOptions.getStartY() + pendingOptions.getHeight()));
                }
                break;
            case ActivityOptions.ANIM_THUMBNAIL_SCALE_UP:
            case ActivityOptions.ANIM_THUMBNAIL_SCALE_DOWN:
                boolean scaleUp = (animationType == ActivityOptions.ANIM_THUMBNAIL_SCALE_UP);
                service.mWindowManager.overridePendingAppTransitionThumb(pendingOptions.getThumbnail(), pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getOnAnimationStartListener(), scaleUp);
                if (intent.getSourceBounds() == null) {
                    intent.setSourceBounds(new Rect(pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getStartX() + pendingOptions.getThumbnail().getWidth(), pendingOptions.getStartY() + pendingOptions.getThumbnail().getHeight()));
                }
                break;
            case ActivityOptions.ANIM_THUMBNAIL_ASPECT_SCALE_UP:
            case ActivityOptions.ANIM_THUMBNAIL_ASPECT_SCALE_DOWN:
                final AppTransitionAnimationSpec[] specs = pendingOptions.getAnimSpecs();
                if (animationType == ActivityOptions.ANIM_THUMBNAIL_ASPECT_SCALE_DOWN && specs != null) {
                    service.mWindowManager.overridePendingAppTransitionMultiThumb(specs, pendingOptions.getOnAnimationStartListener(), pendingOptions.getAnimationFinishedListener(), false);
                } else {
                    service.mWindowManager.overridePendingAppTransitionAspectScaledThumb(pendingOptions.getThumbnail(), pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getWidth(), pendingOptions.getHeight(), pendingOptions.getOnAnimationStartListener(), (animationType == ActivityOptions.ANIM_THUMBNAIL_ASPECT_SCALE_UP));
                    if (intent.getSourceBounds() == null) {
                        intent.setSourceBounds(new Rect(pendingOptions.getStartX(), pendingOptions.getStartY(), pendingOptions.getStartX() + pendingOptions.getWidth(), pendingOptions.getStartY() + pendingOptions.getHeight()));
                    }
                }
                break;
            default:
                Slog.e(TAG, "applyOptionsLocked: Unknown animationType=" + animationType);
                break;
        }
        pendingOptions = null;
    }
}
Also used : Rect(android.graphics.Rect) AppTransitionAnimationSpec(android.view.AppTransitionAnimationSpec)

Aggregations

AppTransitionAnimationSpec (android.view.AppTransitionAnimationSpec)38 Rect (android.graphics.Rect)24 Bitmap (android.graphics.Bitmap)15 Task (com.android.systemui.recents.model.Task)15 ArrayList (java.util.ArrayList)10 ActivityOptions (android.app.ActivityOptions)5 OnAnimationStartedListener (android.app.ActivityOptions.OnAnimationStartedListener)5 RectF (android.graphics.RectF)5 IAppTransitionAnimationSpecsFuture (android.view.IAppTransitionAnimationSpecsFuture)5 CancelEnterRecentsWindowAnimationEvent (com.android.systemui.recents.events.activity.CancelEnterRecentsWindowAnimationEvent)5 ExitRecentsWindowFirstAnimationFrameEvent (com.android.systemui.recents.events.activity.ExitRecentsWindowFirstAnimationFrameEvent)5 LaunchTaskStartedEvent (com.android.systemui.recents.events.activity.LaunchTaskStartedEvent)5 TaskStack (com.android.systemui.recents.model.TaskStack)5 TaskStackLayoutAlgorithm (com.android.systemui.recents.views.TaskStackLayoutAlgorithm)5 TaskStackViewScroller (com.android.systemui.recents.views.TaskStackViewScroller)5 TaskViewTransform (com.android.systemui.recents.views.TaskViewTransform)5