@@ -33,6 +33,7 @@ class ScreenRotationAnimation {
3333 static final String TAG = "ScreenRotationAnimation" ;
3434 static final boolean DEBUG_STATE = false ;
3535 static final boolean DEBUG_TRANSFORMS = false ;
36+ static final boolean TWO_PHASE_ANIMATION = false ;
3637 static final boolean USE_CUSTOM_BLACK_FRAME = false ;
3738
3839 static final int FREEZE_LAYER = WindowManagerService .TYPE_LAYER_MULTIPLIER * 200 ;
@@ -44,7 +45,6 @@ class ScreenRotationAnimation {
4445 BlackFrame mEnteringBlackFrame ;
4546 int mWidth , mHeight ;
4647
47- int mSnapshotDeltaRotation ;
4848 int mOriginalRotation ;
4949 int mOriginalWidth , mOriginalHeight ;
5050 int mCurRotation ;
@@ -138,10 +138,9 @@ public void printTo(String prefix, PrintWriter pw) {
138138 if (mEnteringBlackFrame != null ) {
139139 mEnteringBlackFrame .printTo (prefix + " " , pw );
140140 }
141- pw .print (prefix ); pw .print (" mSnapshotDeltaRotation=" ); pw .print (mSnapshotDeltaRotation );
142- pw .print (" mCurRotation=" ); pw .println (mCurRotation );
143- pw .print (prefix ); pw .print ("mOriginalRotation=" ); pw .print (mOriginalRotation );
144- pw .print (" mOriginalWidth=" ); pw .print (mOriginalWidth );
141+ pw .print (prefix ); pw .print ("mCurRotation=" ); pw .print (mCurRotation );
142+ pw .print (" mOriginalRotation=" ); pw .println (mOriginalRotation );
143+ pw .print (prefix ); pw .print ("mOriginalWidth=" ); pw .print (mOriginalWidth );
145144 pw .print (" mOriginalHeight=" ); pw .println (mOriginalHeight );
146145 pw .print (prefix ); pw .print ("mStarted=" ); pw .print (mStarted );
147146 pw .print (" mAnimRunning=" ); pw .print (mAnimRunning );
@@ -306,8 +305,13 @@ private void setRotation(int rotation) {
306305 public boolean setRotation (int rotation , SurfaceSession session ,
307306 long maxAnimationDuration , float animationScale , int finalWidth , int finalHeight ) {
308307 setRotation (rotation );
309- return startAnimation (session , maxAnimationDuration , animationScale ,
310- finalWidth , finalHeight , false );
308+ if (TWO_PHASE_ANIMATION ) {
309+ return startAnimation (session , maxAnimationDuration , animationScale ,
310+ finalWidth , finalHeight , false );
311+ } else {
312+ // Don't start animation yet.
313+ return false ;
314+ }
311315 }
312316
313317 /**
@@ -330,7 +334,8 @@ private boolean startAnimation(SurfaceSession session, long maxAnimationDuration
330334 // Figure out how the screen has moved from the original rotation.
331335 int delta = deltaRotation (mCurRotation , mOriginalRotation );
332336
333- if (mFinishExitAnimation == null && (!dismissing || delta != Surface .ROTATION_0 )) {
337+ if (TWO_PHASE_ANIMATION && mFinishExitAnimation == null
338+ && (!dismissing || delta != Surface .ROTATION_0 )) {
334339 if (DEBUG_STATE ) Slog .v (TAG , "Creating start and finish animations" );
335340 firstStart = true ;
336341 mStartExitAnimation = AnimationUtils .loadAnimation (mContext ,
@@ -406,7 +411,7 @@ private boolean startAnimation(SurfaceSession session, long maxAnimationDuration
406411 // means to allow supplying the last and next size. In this definition
407412 // "%p" is the original (let's call it "previous") size, and "%" is the
408413 // screen's current/new size.
409- if (firstStart ) {
414+ if (TWO_PHASE_ANIMATION && firstStart ) {
410415 if (DEBUG_STATE ) Slog .v (TAG , "Initializing start and finish animations" );
411416 mStartEnterAnimation .initialize (finalWidth , finalHeight ,
412417 halfWidth , halfHeight );
@@ -433,7 +438,7 @@ private boolean startAnimation(SurfaceSession session, long maxAnimationDuration
433438 mFinishAnimReady = false ;
434439 mFinishAnimStartTime = -1 ;
435440
436- if (firstStart ) {
441+ if (TWO_PHASE_ANIMATION && firstStart ) {
437442 mStartExitAnimation .restrictDuration (maxAnimationDuration );
438443 mStartExitAnimation .scaleCurrentDuration (animationScale );
439444 mStartEnterAnimation .restrictDuration (maxAnimationDuration );
@@ -624,6 +629,14 @@ public void kill() {
624629 }
625630
626631 public boolean isAnimating () {
632+ if (TWO_PHASE_ANIMATION ) {
633+ return hasAnimations () || mFinishAnimReady ;
634+ } else {
635+ return hasAnimations ();
636+ }
637+ }
638+
639+ private boolean hasAnimations () {
627640 return mStartEnterAnimation != null || mStartExitAnimation != null
628641 || mStartFrameAnimation != null
629642 || mFinishEnterAnimation != null || mFinishExitAnimation != null
@@ -633,7 +646,6 @@ public boolean isAnimating() {
633646 }
634647
635648 private boolean stepAnimation (long now ) {
636-
637649 if (mFinishAnimReady && mFinishAnimStartTime < 0 ) {
638650 if (DEBUG_STATE ) Slog .v (TAG , "Step: finish anim now ready" );
639651 mFinishAnimStartTime = now ;
@@ -794,6 +806,10 @@ private boolean stepAnimation(long now) {
794806 }
795807
796808 void updateSurfaces () {
809+ if (!mStarted ) {
810+ return ;
811+ }
812+
797813 if (mSurface != null ) {
798814 if (!mMoreStartExit && !mMoreFinishExit && !mMoreRotateExit ) {
799815 if (DEBUG_STATE ) Slog .v (TAG , "Exit animations done, hiding screenshot surface" );
@@ -834,7 +850,7 @@ void updateSurfaces() {
834850 }
835851
836852 public boolean stepAnimationLocked (long now ) {
837- if (!isAnimating ()) {
853+ if (!hasAnimations ()) {
838854 if (DEBUG_STATE ) Slog .v (TAG , "Step: no animations running" );
839855 mFinishAnimReady = false ;
840856 return false ;
0 commit comments