Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 327e1450 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Take snapshot when device becomes dozing and pulsing

The device supports pulsing won't turn the screen off when sleeping
(TaskSnapshotController#screenTurningOff is not called). So add
another path to take a snapshot to avoid showing inconsistent
animation when unlocking.

Bug: 182571838
Test: 1. Enable "Always show time and info".
      2. Open any app and go to home.
      3. Launch the app again and make some changes to its content.
      4. Press power key to enter dozing.
      5. Unlock and check if the animation has the latest content.
Change-Id: I97aaed519091fa6e9d8fd4862301fcb3186efe14
parent 80e87134
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -167,6 +167,11 @@ class KeyguardController {
        if (aodChanged) {
            // Ensure the new state takes effect.
            mWindowManager.mWindowPlacerLocked.performSurfacePlacement();
            // If the device can enter AOD and keyguard at the same time, the screen will not be
            // turned off, so the snapshot needs to be refreshed when these states are changed.
            if (aodShowing && keyguardShowing && keyguardChanged) {
                mWindowManager.mTaskSnapshotController.snapshotForSleeping(DEFAULT_DISPLAY);
            }
        }

        if (keyguardChanged) {
+22 −14
Original line number Diff line number Diff line
@@ -635,26 +635,34 @@ class TaskSnapshotController {
        mHandler.post(() -> {
            try {
                synchronized (mService.mGlobalLock) {
                    snapshotForSleeping(displayId);
                }
            } finally {
                listener.onScreenOff();
            }
        });
    }

    /** Called when the device is going to sleep (e.g. screen off, AOD without screen off). */
    void snapshotForSleeping(int displayId) {
        if (shouldDisableSnapshots()) {
            return;
        }
        mTmpTasks.clear();
        mService.mRoot.getDisplayContent(displayId).forAllTasks(task -> {
                        // Since RecentsAnimation will handle task snapshot while switching apps
                        // with the best capture timing (e.g. IME window capture), No need
                        // additional task capture while task is controlled by RecentsAnimation.
            // Since RecentsAnimation will handle task snapshot while switching apps with the best
            // capture timing (e.g. IME window capture), No need additional task capture while task
            // is controlled by RecentsAnimation.
            if (task.isVisible() && !task.isAnimatingByRecents()) {
                mTmpTasks.add(task);
            }
        });
                    // Allow taking snapshot of home when turning screen off to reduce the delay of
                    // waking from secure lock to home.
                    final boolean allowSnapshotHome = displayId == Display.DEFAULT_DISPLAY &&
                            mService.mPolicy.isKeyguardSecure(mService.mCurrentUserId);
        // Allow taking snapshot of home when turning screen off to reduce the delay of waking from
        // secure lock to home.
        final boolean allowSnapshotHome = displayId == Display.DEFAULT_DISPLAY
                && mService.mPolicy.isKeyguardSecure(mService.mCurrentUserId);
        snapshotTasks(mTmpTasks, allowSnapshotHome);
    }
            } finally {
                listener.onScreenOff();
            }
        });
    }

    /**
     * @return The {@link Appearance} flags for the top fullscreen opaque window in the given