849c6a2b18
(This cl reverts change-Id: I455edcd17bda83ab51c2c04fa40e66097a4d6975) Various animations were marked for cancellation when launcher activity is destroyed. This this does not work with multiple activities (Launcher, fallback recents, shortcut confirmation). Also since launcher activity handles configuration changes, the activity is not destroyed often. Instead associating a target with various animations which automatically cancels the animations when that target goes away. Change-Id: I64cd095a28075561a9e20c9dcdeb9f90c18e1047
111 lines
3.9 KiB
Java
111 lines
3.9 KiB
Java
/*
|
|
* Copyright (C) 2017 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
package com.android.launcher3.folder;
|
|
|
|
import android.animation.Animator;
|
|
import android.animation.AnimatorListenerAdapter;
|
|
import android.animation.FloatArrayEvaluator;
|
|
import android.animation.ObjectAnimator;
|
|
import android.util.Property;
|
|
|
|
import java.util.Arrays;
|
|
|
|
/**
|
|
* Animates a Folder preview item.
|
|
*/
|
|
class FolderPreviewItemAnim {
|
|
|
|
private static final Property<FolderPreviewItemAnim, float[]> PARAMS =
|
|
new Property<FolderPreviewItemAnim, float[]>(float[].class, "params") {
|
|
@Override
|
|
public float[] get(FolderPreviewItemAnim anim) {
|
|
sTempParamsArray[0] = anim.mParams.scale;
|
|
sTempParamsArray[1] = anim.mParams.transX;
|
|
sTempParamsArray[2] = anim.mParams.transY;
|
|
return sTempParamsArray;
|
|
}
|
|
|
|
@Override
|
|
public void set(FolderPreviewItemAnim anim, float[] value) {
|
|
anim.setParams(value);
|
|
}
|
|
};
|
|
|
|
private static PreviewItemDrawingParams sTmpParams = new PreviewItemDrawingParams(0, 0, 0, 0);
|
|
private static final float[] sTempParamsArray = new float[3];
|
|
|
|
private final ObjectAnimator mAnimator;
|
|
private final PreviewItemManager mItemManager;
|
|
private final PreviewItemDrawingParams mParams;
|
|
|
|
public final float[] finalState;
|
|
|
|
/**
|
|
* @param params layout params to animate
|
|
* @param index0 original index of the item to be animated
|
|
* @param items0 original number of items in the preview
|
|
* @param index1 new index of the item to be animated
|
|
* @param items1 new number of items in the preview
|
|
* @param duration duration in ms of the animation
|
|
* @param onCompleteRunnable runnable to execute upon animation completion
|
|
*/
|
|
FolderPreviewItemAnim(PreviewItemManager itemManager,
|
|
PreviewItemDrawingParams params, int index0, int items0, int index1, int items1,
|
|
int duration, final Runnable onCompleteRunnable) {
|
|
mItemManager = itemManager;
|
|
mParams = params;
|
|
|
|
mItemManager.computePreviewItemDrawingParams(index1, items1, sTmpParams);
|
|
finalState = new float[] {sTmpParams.scale, sTmpParams.transX, sTmpParams.transY};
|
|
|
|
mItemManager.computePreviewItemDrawingParams(index0, items0, sTmpParams);
|
|
float[] startState = new float[] {sTmpParams.scale, sTmpParams.transX, sTmpParams.transY};
|
|
|
|
mAnimator = ObjectAnimator.ofObject(this, PARAMS, new FloatArrayEvaluator(),
|
|
startState, finalState);
|
|
mAnimator.addListener(new AnimatorListenerAdapter() {
|
|
@Override
|
|
public void onAnimationEnd(Animator animation) {
|
|
if (onCompleteRunnable != null) {
|
|
onCompleteRunnable.run();
|
|
}
|
|
params.anim = null;
|
|
}
|
|
});
|
|
mAnimator.setDuration(duration);
|
|
}
|
|
|
|
private void setParams(float[] values) {
|
|
mParams.scale = values[0];
|
|
mParams.transX = values[1];
|
|
mParams.transY = values[2];
|
|
mItemManager.onParamsChanged();
|
|
}
|
|
|
|
public void start() {
|
|
mAnimator.start();
|
|
}
|
|
|
|
public void cancel() {
|
|
mAnimator.cancel();
|
|
}
|
|
|
|
public boolean hasEqualFinalState(FolderPreviewItemAnim anim) {
|
|
return Arrays.equals(finalState, anim.finalState);
|
|
|
|
}
|
|
}
|