Merge "bootanimation: ensure that if a percent is shown, we'll get to 100." am: 87c254de0e am: 10e844df41 am: 55b2ba298c

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1681127

Change-Id: I1ee402945af4207affb77d61eb76a21c175ac1fc
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index be82b22..3109c5c 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -1210,9 +1210,12 @@
     return false;
 }
 
-bool BootAnimation::shouldStopPlayingPart(const Animation::Part& part, const int fadedFramesCount) {
+bool BootAnimation::shouldStopPlayingPart(const Animation::Part& part,
+                                          const int fadedFramesCount,
+                                          const int lastDisplayedProgress) {
     // stop playing only if it is time to exit and it's a partial part which has been faded out
-    return exitPending() && !part.playUntilComplete && fadedFramesCount >= part.framesToFadeCount;
+    return exitPending() && !part.playUntilComplete && fadedFramesCount >= part.framesToFadeCount &&
+        (lastDisplayedProgress == 0 || lastDisplayedProgress == 100);
 }
 
 bool BootAnimation::playAnimation(const Animation& animation) {
@@ -1239,7 +1242,7 @@
 
         // process the part not only while the count allows but also if already fading
         for (int r=0 ; !part.count || r<part.count || fadedFramesCount > 0 ; r++) {
-            if (shouldStopPlayingPart(part, fadedFramesCount)) break;
+            if (shouldStopPlayingPart(part, fadedFramesCount, lastDisplayedProgress)) break;
 
             mCallbacks->playPart(i, part, r);
 
@@ -1256,7 +1259,7 @@
                 (i == (pcount -1)) && currentProgress != 0;
 
             for (size_t j=0 ; j<fcount ; j++) {
-                if (shouldStopPlayingPart(part, fadedFramesCount)) break;
+                if (shouldStopPlayingPart(part, fadedFramesCount, lastDisplayedProgress)) break;
 
                 processDisplayEvents();
 
@@ -1355,6 +1358,10 @@
 
             if (exitPending() && !part.count && mCurrentInset >= mTargetInset &&
                 !part.hasFadingPhase()) {
+                if (lastDisplayedProgress != 0 && lastDisplayedProgress != 100) {
+                    android::base::SetProperty(PROGRESS_PROP_NAME, "100");
+                    continue;
+                }
                 break; // exit the infinite non-fading part when it has been played at least once
             }
         }
diff --git a/cmds/bootanimation/BootAnimation.h b/cmds/bootanimation/BootAnimation.h
index 07432a2..f8a31c6 100644
--- a/cmds/bootanimation/BootAnimation.h
+++ b/cmds/bootanimation/BootAnimation.h
@@ -187,7 +187,8 @@
     void resizeSurface(int newWidth, int newHeight);
     void projectSceneToWindow();
 
-    bool shouldStopPlayingPart(const Animation::Part& part, int fadedFramesCount);
+    bool shouldStopPlayingPart(const Animation::Part& part, int fadedFramesCount,
+                               int lastDisplayedProgress);
     void checkExit();
 
     void handleViewport(nsecs_t timestep);