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

Commit 247df587 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Use CounterRotator for wallpaper animation targets when unlocking" into udc-dev

parents 4af5694e 95813a49
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -185,6 +185,9 @@ public class KeyguardTransitionHandler implements Transitions.TransitionHandler
                        @Override
                        @Override
                        public void onTransitionFinished(
                        public void onTransitionFinished(
                                WindowContainerTransaction wct, SurfaceControl.Transaction sct) {
                                WindowContainerTransaction wct, SurfaceControl.Transaction sct) {
                            if (sct != null) {
                                finishTransaction.merge(sct);
                            }
                            mMainExecutor.execute(() -> {
                            mMainExecutor.execute(() -> {
                                mStartedTransitions.remove(transition);
                                mStartedTransitions.remove(transition);
                                finishCallback.onTransitionFinished(wct, null);
                                finishCallback.onTransitionFinished(wct, null);
+0 −3
Original line number Original line Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.wm.shell.flicker.splitscreen


import android.platform.test.annotations.Postsubmit
import android.platform.test.annotations.Postsubmit
import android.tools.common.NavBar
import android.tools.common.NavBar
import android.tools.common.Rotation
import android.tools.common.flicker.subject.region.RegionSubject
import android.tools.common.flicker.subject.region.RegionSubject
import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
import android.tools.device.flicker.junit.FlickerParametersRunnerFactory
import android.tools.device.flicker.legacy.FlickerBuilder
import android.tools.device.flicker.legacy.FlickerBuilder
@@ -105,8 +104,6 @@ class UnlockKeyguardToSplitScreen(override val flicker: FlickerTest) :
        @JvmStatic
        @JvmStatic
        fun getParams(): List<FlickerTest> {
        fun getParams(): List<FlickerTest> {
            return FlickerTestFactory.nonRotationTests(
            return FlickerTestFactory.nonRotationTests(
                    // TODO(b/283963801) address entireScreenCovered test faliure in landscape.
                    supportedRotations = listOf(Rotation.ROTATION_0),
                    supportedNavigationModes = listOf(NavBar.MODE_GESTURAL)
                    supportedNavigationModes = listOf(NavBar.MODE_GESTURAL)
            )
            )
        }
        }
+37 −4
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@ import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_OCCLUDE;
import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_OCCLUDE_BY_DREAM;
import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_OCCLUDE_BY_DREAM;
import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_UNOCCLUDE;
import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_UNOCCLUDE;
import static android.view.WindowManager.TRANSIT_OLD_NONE;
import static android.view.WindowManager.TRANSIT_OLD_NONE;
import static android.view.WindowManager.TRANSIT_TO_BACK;
import static android.view.WindowManager.TransitionFlags;
import static android.view.WindowManager.TransitionFlags;
import static android.view.WindowManager.TransitionOldType;
import static android.view.WindowManager.TransitionOldType;
import static android.view.WindowManager.TransitionType;
import static android.view.WindowManager.TransitionType;
@@ -49,6 +50,7 @@ import android.os.RemoteException;
import android.os.Trace;
import android.os.Trace;
import android.util.ArrayMap;
import android.util.ArrayMap;
import android.util.Log;
import android.util.Log;
import android.util.RotationUtils;
import android.util.Slog;
import android.util.Slog;
import android.view.IRemoteAnimationFinishedCallback;
import android.view.IRemoteAnimationFinishedCallback;
import android.view.IRemoteAnimationRunner;
import android.view.IRemoteAnimationRunner;
@@ -73,6 +75,7 @@ import com.android.systemui.SystemUIApplication;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.settings.DisplayTracker;
import com.android.wm.shell.transition.ShellTransitions;
import com.android.wm.shell.transition.ShellTransitions;
import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.util.CounterRotator;
import com.android.wm.shell.util.TransitionUtil;
import com.android.wm.shell.util.TransitionUtil;


import java.util.ArrayList;
import java.util.ArrayList;
@@ -103,7 +106,8 @@ public class KeyguardService extends Service {
    }
    }


    private static RemoteAnimationTarget[] wrap(TransitionInfo info, boolean wallpapers,
    private static RemoteAnimationTarget[] wrap(TransitionInfo info, boolean wallpapers,
            SurfaceControl.Transaction t, ArrayMap<SurfaceControl, SurfaceControl> leashMap) {
            SurfaceControl.Transaction t, ArrayMap<SurfaceControl, SurfaceControl> leashMap,
            CounterRotator counterWallpaper) {
        final ArrayList<RemoteAnimationTarget> out = new ArrayList<>();
        final ArrayList<RemoteAnimationTarget> out = new ArrayList<>();
        for (int i = 0; i < info.getChanges().size(); i++) {
        for (int i = 0; i < info.getChanges().size(); i++) {
            boolean changeIsWallpaper =
            boolean changeIsWallpaper =
@@ -133,6 +137,25 @@ public class KeyguardService extends Service {
                    (change.getFlags() & TransitionInfo.FLAG_SHOW_WALLPAPER) != 0,
                    (change.getFlags() & TransitionInfo.FLAG_SHOW_WALLPAPER) != 0,
                    info, t, leashMap);
                    info, t, leashMap);


            if (changeIsWallpaper) {
                int rotateDelta = RotationUtils.deltaRotation(change.getStartRotation(),
                        change.getEndRotation());
                if (rotateDelta != 0 && change.getParent() != null
                        && change.getMode() == TRANSIT_TO_BACK) {
                    final TransitionInfo.Change parent = info.getChange(change.getParent());
                    if (parent != null) {
                        float displayW = parent.getEndAbsBounds().width();
                        float displayH = parent.getEndAbsBounds().height();
                        counterWallpaper.setup(t, parent.getLeash(), rotateDelta, displayW,
                                displayH);
                    }
                    if (counterWallpaper.getSurface() != null) {
                        t.setLayer(counterWallpaper.getSurface(), -1);
                        counterWallpaper.addChild(t, leashMap.get(change.getLeash()));
                    }
                }
            }

            out.add(target);
            out.add(target);
        }
        }
        return out.toArray(new RemoteAnimationTarget[out.size()]);
        return out.toArray(new RemoteAnimationTarget[out.size()]);
@@ -163,6 +186,8 @@ public class KeyguardService extends Service {
        return new IRemoteTransition.Stub() {
        return new IRemoteTransition.Stub() {


            private final ArrayMap<SurfaceControl, SurfaceControl> mLeashMap = new ArrayMap<>();
            private final ArrayMap<SurfaceControl, SurfaceControl> mLeashMap = new ArrayMap<>();
            private final CounterRotator mCounterRotator = new CounterRotator();



            @GuardedBy("mLeashMap")
            @GuardedBy("mLeashMap")
            private IRemoteTransitionFinishedCallback mFinishCallback = null;
            private IRemoteTransitionFinishedCallback mFinishCallback = null;
@@ -175,9 +200,9 @@ public class KeyguardService extends Service {


                synchronized (mLeashMap) {
                synchronized (mLeashMap) {
                    final RemoteAnimationTarget[] apps =
                    final RemoteAnimationTarget[] apps =
                            wrap(info, false /* wallpapers */, t, mLeashMap);
                            wrap(info, false /* wallpapers */, t, mLeashMap, mCounterRotator);
                    final RemoteAnimationTarget[] wallpapers =
                    final RemoteAnimationTarget[] wallpapers =
                            wrap(info, true /* wallpapers */, t, mLeashMap);
                            wrap(info, true /* wallpapers */, t, mLeashMap, mCounterRotator);
                    final RemoteAnimationTarget[] nonApps = new RemoteAnimationTarget[0];
                    final RemoteAnimationTarget[] nonApps = new RemoteAnimationTarget[0];


                    // Set alpha back to 1 for the independent changes because we will be animating
                    // Set alpha back to 1 for the independent changes because we will be animating
@@ -231,11 +256,19 @@ public class KeyguardService extends Service {


            @GuardedBy("mLeashMap")
            @GuardedBy("mLeashMap")
            private void finish() throws RemoteException {
            private void finish() throws RemoteException {
                SurfaceControl.Transaction finishTransaction = null;
                if (mCounterRotator.getSurface() != null
                        && mCounterRotator.getSurface().isValid()) {
                    finishTransaction = new SurfaceControl.Transaction();
                    mCounterRotator.cleanUp(finishTransaction);
                }
                mLeashMap.clear();
                mLeashMap.clear();
                final IRemoteTransitionFinishedCallback finishCallback = mFinishCallback;
                final IRemoteTransitionFinishedCallback finishCallback = mFinishCallback;
                if (finishCallback != null) {
                if (finishCallback != null) {
                    mFinishCallback = null;
                    mFinishCallback = null;
                    finishCallback.onTransitionFinished(null /* wct */, null /* t */);
                    finishCallback.onTransitionFinished(null /* wct */, finishTransaction);
                } else if (finishTransaction != null) {
                    finishTransaction.apply();
                }
                }
            }
            }
        };
        };