blob: d0b0ffc15607a607d7697c3355456c90f1c982e8 [file] [log] [blame]
/*
* Copyright (C) 2009 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 android.view.animation.cts;
import android.app.Instrumentation;
import android.os.SystemClock;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.LayoutAnimationController;
import androidx.test.rule.ActivityTestRule;
import com.android.compatibility.common.util.PollingCheck;
/**
* The utility methods for animation test.
*/
public final class AnimationTestUtils {
/** timeout delta when wait in case the system is sluggish */
private static final long TIMEOUT_DELTA = 1000;
/**
* no public constructor since this is a utility class
*/
private AnimationTestUtils() {
}
/**
* Assert run an animation successfully. Timeout is duration of animation.
*
* @param instrumentation to run animation.
* @param activityTestRule to run animation.
* @param view view window to run animation.
* @param animation will be run.
* @throws Throwable
*/
public static void assertRunAnimation(final Instrumentation instrumentation,
final ActivityTestRule activityTestRule, final View view, final Animation animation)
throws Throwable {
assertRunAnimation(instrumentation, activityTestRule, view, animation,
animation.getDuration());
}
/**
* Assert run an animation successfully.
*
* @param instrumentation to run animation.
* @param activityTestRule to run animation.
* @param view window to run animation.
* @param animation will be run.
* @param duration in milliseconds.
* @throws Throwable
*/
public static void assertRunAnimation(final Instrumentation instrumentation,
final ActivityTestRule activityTestRule, final View view, final Animation animation,
final long duration) throws Throwable {
activityTestRule.runOnUiThread(() -> view.startAnimation(animation));
// check whether it has started
PollingCheck.waitFor(animation::hasStarted);
// check whether it has ended after duration
PollingCheck.waitFor(duration + TIMEOUT_DELTA, animation::hasEnded);
instrumentation.waitForIdleSync();
}
/**
* Assert run an view with LayoutAnimationController successfully.
* @throws Throwable
*/
public static void assertRunController(final ActivityTestRule activityTestRule,
final ViewGroup view, final LayoutAnimationController controller,
final long duration) throws Throwable {
activityTestRule.runOnUiThread(() -> {
view.setLayoutAnimation(controller);
view.requestLayout();
});
// LayoutAnimationController.isDone() always returns true, it's no use for stopping
// the running, so just using sleeping fixed time instead. we reported issue 1799434 for it.
SystemClock.sleep(duration + TIMEOUT_DELTA);
}
}