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

Commit 782ba89e authored by Galia Peycheva's avatar Galia Peycheva
Browse files

Make DreamActivity translucent when waking up dream

The DreamService calls onWakeUp, which allows the dream application to
finish the dream itself and apply an exit animation for up to 5 seconds
(after that, the system force removes the dream window). During the time
when the dream application is performing an exit animation, the dream
activity window is opaque. This causes problems when the dream
application applies a long exit animation - turnScreenOn+noHistory
activities are put under the dream (because dream has highest z-order)
and get destroyed before they get a chance to be drawn (because they
never become visible).

This CL makes the dream activity translucent before onWakeUp is called.
This allows turnScreenOn+noHistory activities to be resumed underneath
the dream, while the dream is transitioning out.

Bug: 162880999
Bug: 198359939
Test: manual
Change-Id: I536c871dab934273b79466426d861778661156dc
parent 8bd6b0d1
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -921,6 +921,17 @@ public class DreamService extends Service implements Window.Callback {
        if (!mWaking && !mFinished) {
            mWaking = true;

            if (mActivity != null) {
                // During wake up the activity should be translucent to allow the application
                // underneath to start drawing. Normally, the WM animation system takes care of
                // this, but here we give the dream application some time to perform a custom exit
                // animation. If it uses a view animation, the WM doesn't know about it and can't
                // make the activity translucent in the normal way. Therefore, here we ensure that
                // the activity is translucent during wake up regardless of what animation is used
                // in onWakeUp().
                mActivity.convertToTranslucent(null, null);
            }

            // As a minor optimization, invoke the callback first in case it simply
            // calls finish() immediately so there wouldn't be much point in telling
            // the system that we are finishing the dream gently.