content: /*
   * 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.server.wm;
  
  import android.annotation.ColorInt;
  import android.util.proto.ProtoOutputStream;
  import android.view.SurfaceControl;
  import android.view.SurfaceControl.Transaction;
  import android.view.animation.Animation;
  
  import com.android.server.wm.SurfaceAnimator.OnAnimationFinishedCallback;
  
  import java.io.PrintWriter;
  
  /**
   * Interface that describes an animation and bridges the animation start to the component
   * responsible for running the animation.
   */
  interface AnimationAdapter {
  
      long STATUS_BAR_TRANSITION_DURATION = 120L;
  
      /**
       * @return Whether we should show the wallpaper during the animation.
       * @see Animation#getShowWallpaper()
       */
      boolean getShowWallpaper();
  
      /**
       * @return The background color behind the animation.
       */
      @ColorInt int getBackgroundColor();
  
      /**
       * Requests to start the animation.
       *
       * @param animationLeash The surface to run the animation on. See {@link SurfaceAnimator} for an
       *                       overview of the mechanism. This surface needs to be released by the
       *                       component running the animation after {@code finishCallback} has been
       *                       invoked, or after the animation was cancelled.
       * @param t The Transaction to apply the initial frame of the animation.
       * @param finishCallback The callback to be invoked when the animation has finished.
       */
      void startAnimation(SurfaceControl animationLeash, Transaction t,
              OnAnimationFinishedCallback finishCallback);
  
      /**
       * Called when the animation that was started with {@link #startAnimation} was cancelled by the
       * window manager.
       *
       * @param animationLeash The leash passed to {@link #startAnimation}.
       */
      void onAnimationCancelled(SurfaceControl animationLeash);
  
      /**
       * @return The approximate duration of the animation, in milliseconds.
       */
      long getDurationHint();
  
      /**
       * If this animation is run as an app opening animation, this calculates the start time for all
       * status bar transitions that happen as part of the app opening animation, which will be
       * forwarded to SystemUI.
       *
       * @return the desired start time of the status bar transition, in uptime millis
       */
      long getStatusBarTransitionsStartTime();
  
      void dump(PrintWriter pw, String prefix);
  
      default void writeToProto(ProtoOutputStream proto, long fieldId) {
          final long token = proto.start(fieldId);
          writeToProto(proto);
          proto.end(token);
      }
  
      void writeToProto(ProtoOutputStream proto);
  }
  