Merge "Enable keyguard remote animation when WMShell is used." into sc-v2-dev
This commit is contained in:
@@ -399,6 +399,11 @@ public interface WindowManager extends ViewManager {
|
||||
* @hide
|
||||
*/
|
||||
int TRANSIT_PIP = 10;
|
||||
/**
|
||||
* The screen is turning on.
|
||||
* @hide
|
||||
*/
|
||||
int TRANSIT_WAKE = 11;
|
||||
/**
|
||||
* The first slot for custom transition types. Callers (like Shell) can make use of custom
|
||||
* transition types for dealing with special cases. These types are effectively ignored by
|
||||
@@ -408,7 +413,7 @@ public interface WindowManager extends ViewManager {
|
||||
* implementation.
|
||||
* @hide
|
||||
*/
|
||||
int TRANSIT_FIRST_CUSTOM = 11;
|
||||
int TRANSIT_FIRST_CUSTOM = 12;
|
||||
|
||||
/**
|
||||
* @hide
|
||||
@@ -425,6 +430,7 @@ public interface WindowManager extends ViewManager {
|
||||
TRANSIT_KEYGUARD_OCCLUDE,
|
||||
TRANSIT_KEYGUARD_UNOCCLUDE,
|
||||
TRANSIT_PIP,
|
||||
TRANSIT_WAKE,
|
||||
TRANSIT_FIRST_CUSTOM
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package android.window;
|
||||
|
||||
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
|
||||
import static android.view.WindowManager.TransitionType;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
@@ -52,7 +53,7 @@ public final class TransitionFilter implements Parcelable {
|
||||
* When non-null: this is a list of transition types that this filter applies to. This filter
|
||||
* will fail for transitions that aren't one of these types.
|
||||
*/
|
||||
@Nullable public int[] mTypeSet = null;
|
||||
@Nullable public @TransitionType int[] mTypeSet = null;
|
||||
|
||||
/**
|
||||
* A list of required changes. To pass, a transition must meet all requirements.
|
||||
|
||||
@@ -29,6 +29,8 @@ import static android.view.WindowManager.TRANSIT_NONE;
|
||||
import static android.view.WindowManager.TRANSIT_OPEN;
|
||||
import static android.view.WindowManager.TRANSIT_TO_BACK;
|
||||
import static android.view.WindowManager.TRANSIT_TO_FRONT;
|
||||
import static android.view.WindowManager.TransitionFlags;
|
||||
import static android.view.WindowManager.TransitionType;
|
||||
import static android.view.WindowManager.transitTypeToString;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
@@ -42,7 +44,6 @@ import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.view.Surface;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -106,8 +107,8 @@ public final class TransitionInfo implements Parcelable {
|
||||
})
|
||||
public @interface ChangeFlags {}
|
||||
|
||||
private final @WindowManager.TransitionOldType int mType;
|
||||
private final @WindowManager.TransitionFlags int mFlags;
|
||||
private final @TransitionType int mType;
|
||||
private final @TransitionFlags int mFlags;
|
||||
private final ArrayList<Change> mChanges = new ArrayList<>();
|
||||
|
||||
private SurfaceControl mRootLeash;
|
||||
@@ -116,8 +117,7 @@ public final class TransitionInfo implements Parcelable {
|
||||
private AnimationOptions mOptions;
|
||||
|
||||
/** @hide */
|
||||
public TransitionInfo(@WindowManager.TransitionOldType int type,
|
||||
@WindowManager.TransitionFlags int flags) {
|
||||
public TransitionInfo(@TransitionType int type, @TransitionFlags int flags) {
|
||||
mType = type;
|
||||
mFlags = flags;
|
||||
}
|
||||
@@ -173,7 +173,7 @@ public final class TransitionInfo implements Parcelable {
|
||||
mOptions = options;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
public @TransitionType int getType() {
|
||||
return mType;
|
||||
}
|
||||
|
||||
|
||||
@@ -59,6 +59,7 @@ import android.util.ArrayMap;
|
||||
import android.view.Choreographer;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.SurfaceSession;
|
||||
import android.view.WindowManager;
|
||||
import android.view.animation.AlphaAnimation;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.Transformation;
|
||||
@@ -132,6 +133,15 @@ public class DefaultTransitionHandler implements Transitions.TransitionHandler {
|
||||
@NonNull Transitions.TransitionFinishCallback finishCallback) {
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS,
|
||||
"start default transition animation, info = %s", info);
|
||||
|
||||
// Fallback for screen wake. This just immediately finishes since there is no
|
||||
// animation for screen-wake.
|
||||
if (info.getType() == WindowManager.TRANSIT_WAKE) {
|
||||
startTransaction.apply();
|
||||
finishCallback.onTransitionFinished(null /* wct */, null /* wctCB */);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mAnimations.containsKey(transition)) {
|
||||
throw new IllegalStateException("Got a duplicate startAnimation call for "
|
||||
+ transition);
|
||||
|
||||
@@ -107,6 +107,7 @@ public class RemoteTransitionHandler implements Transitions.TransitionHandler {
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " Checking filter %s",
|
||||
mFilters.get(i));
|
||||
if (mFilters.get(i).first.matches(info)) {
|
||||
Slog.d(TAG, "Found filter" + mFilters.get(i));
|
||||
pendingRemote = mFilters.get(i).second;
|
||||
// Add to requested list so that it can be found for merge requests.
|
||||
mRequestedRemotes.put(transition, pendingRemote);
|
||||
|
||||
@@ -18,14 +18,26 @@ package com.android.systemui.keyguard;
|
||||
|
||||
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
import static android.view.RemoteAnimationTarget.MODE_CLOSING;
|
||||
import static android.view.RemoteAnimationTarget.MODE_OPENING;
|
||||
import static android.view.WindowManager.TRANSIT_KEYGUARD_GOING_AWAY;
|
||||
import static android.view.WindowManager.TRANSIT_KEYGUARD_OCCLUDE;
|
||||
import static android.view.WindowManager.TRANSIT_KEYGUARD_UNOCCLUDE;
|
||||
import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY;
|
||||
import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER;
|
||||
import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_OCCLUDE;
|
||||
import static android.view.WindowManager.TRANSIT_OLD_KEYGUARD_UNOCCLUDE;
|
||||
import static android.view.WindowManager.TRANSIT_OLD_NONE;
|
||||
import static android.view.WindowManager.TransitionOldType;
|
||||
import static android.view.WindowManager.TransitionType;
|
||||
|
||||
import android.app.ActivityManager;
|
||||
import android.app.ActivityTaskManager;
|
||||
import android.app.Service;
|
||||
import android.app.WindowConfiguration;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Point;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Binder;
|
||||
import android.os.Bundle;
|
||||
import android.os.Debug;
|
||||
@@ -42,8 +54,13 @@ import android.view.IRemoteAnimationRunner;
|
||||
import android.view.RemoteAnimationAdapter;
|
||||
import android.view.RemoteAnimationDefinition;
|
||||
import android.view.RemoteAnimationTarget;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.WindowManager;
|
||||
import android.view.WindowManagerPolicyConstants;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.IRemoteTransitionFinishedCallback;
|
||||
import android.window.TransitionFilter;
|
||||
import android.window.TransitionInfo;
|
||||
|
||||
import com.android.internal.policy.IKeyguardDismissCallback;
|
||||
import com.android.internal.policy.IKeyguardDrawnCallback;
|
||||
@@ -51,8 +68,11 @@ import com.android.internal.policy.IKeyguardExitCallback;
|
||||
import com.android.internal.policy.IKeyguardService;
|
||||
import com.android.internal.policy.IKeyguardStateCallback;
|
||||
import com.android.systemui.SystemUIApplication;
|
||||
import com.android.wm.shell.transition.ShellTransitions;
|
||||
import com.android.wm.shell.transition.Transitions;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class KeyguardService extends Service {
|
||||
@@ -79,40 +99,163 @@ public class KeyguardService extends Service {
|
||||
* @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY
|
||||
*/
|
||||
public static boolean sEnableRemoteKeyguardGoingAwayAnimation =
|
||||
!Transitions.ENABLE_SHELL_TRANSITIONS && sEnableRemoteKeyguardAnimation >= 1;
|
||||
sEnableRemoteKeyguardAnimation >= 1;
|
||||
|
||||
/**
|
||||
* @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY
|
||||
*/
|
||||
public static boolean sEnableRemoteKeyguardOccludeAnimation =
|
||||
!Transitions.ENABLE_SHELL_TRANSITIONS && sEnableRemoteKeyguardAnimation >= 2;
|
||||
sEnableRemoteKeyguardAnimation >= 2;
|
||||
|
||||
private final KeyguardViewMediator mKeyguardViewMediator;
|
||||
private final KeyguardLifecyclesDispatcher mKeyguardLifecyclesDispatcher;
|
||||
|
||||
private static int newModeToLegacyMode(int newMode) {
|
||||
switch (newMode) {
|
||||
case WindowManager.TRANSIT_OPEN:
|
||||
case WindowManager.TRANSIT_TO_FRONT:
|
||||
return MODE_OPENING;
|
||||
case WindowManager.TRANSIT_CLOSE:
|
||||
case WindowManager.TRANSIT_TO_BACK:
|
||||
return MODE_CLOSING;
|
||||
default:
|
||||
return 2; // MODE_CHANGING
|
||||
}
|
||||
}
|
||||
|
||||
private static RemoteAnimationTarget[] wrap(TransitionInfo info, boolean wallpapers) {
|
||||
final ArrayList<RemoteAnimationTarget> out = new ArrayList<>();
|
||||
for (int i = 0; i < info.getChanges().size(); i++) {
|
||||
boolean changeIsWallpaper =
|
||||
(info.getChanges().get(i).getFlags() & TransitionInfo.FLAG_IS_WALLPAPER) != 0;
|
||||
if (wallpapers != changeIsWallpaper) continue;
|
||||
|
||||
final TransitionInfo.Change change = info.getChanges().get(i);
|
||||
final ActivityManager.RunningTaskInfo taskInfo = change.getTaskInfo();
|
||||
final int taskId = taskInfo != null ? change.getTaskInfo().taskId : -1;
|
||||
boolean isNotInRecents;
|
||||
WindowConfiguration windowConfiguration = null;
|
||||
if (taskInfo != null) {
|
||||
if (taskInfo.getConfiguration() != null) {
|
||||
windowConfiguration =
|
||||
change.getTaskInfo().getConfiguration().windowConfiguration;
|
||||
}
|
||||
isNotInRecents = !change.getTaskInfo().isRunning;
|
||||
} else {
|
||||
isNotInRecents = true;
|
||||
}
|
||||
Rect localBounds = new Rect(change.getEndAbsBounds());
|
||||
localBounds.offsetTo(change.getEndRelOffset().x, change.getEndRelOffset().y);
|
||||
|
||||
out.add(new RemoteAnimationTarget(
|
||||
taskId,
|
||||
newModeToLegacyMode(change.getMode()),
|
||||
change.getLeash(),
|
||||
(change.getFlags() & TransitionInfo.FLAG_TRANSLUCENT) != 0
|
||||
|| (change.getFlags() & TransitionInfo.FLAG_SHOW_WALLPAPER) != 0,
|
||||
null /* clipRect */,
|
||||
new Rect(0, 0, 0, 0) /* contentInsets */,
|
||||
info.getChanges().size() - i,
|
||||
new Point(), localBounds, new Rect(change.getEndAbsBounds()),
|
||||
windowConfiguration, isNotInRecents, null /* startLeash */,
|
||||
change.getStartAbsBounds(), taskInfo));
|
||||
}
|
||||
return out.toArray(new RemoteAnimationTarget[out.size()]);
|
||||
}
|
||||
|
||||
private static @TransitionOldType int getTransitionOldType(@TransitionType int type,
|
||||
RemoteAnimationTarget[] apps) {
|
||||
if (type == TRANSIT_KEYGUARD_GOING_AWAY) {
|
||||
return apps.length == 0 ? TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER
|
||||
: TRANSIT_OLD_KEYGUARD_GOING_AWAY;
|
||||
} else if (type == TRANSIT_KEYGUARD_OCCLUDE) {
|
||||
return TRANSIT_OLD_KEYGUARD_OCCLUDE;
|
||||
} else if (type == TRANSIT_KEYGUARD_UNOCCLUDE) {
|
||||
return TRANSIT_OLD_KEYGUARD_UNOCCLUDE;
|
||||
} else {
|
||||
Slog.d(TAG, "Unexpected transit type: " + type);
|
||||
return TRANSIT_OLD_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
private static IRemoteTransition wrap(IRemoteAnimationRunner runner) {
|
||||
return new IRemoteTransition.Stub() {
|
||||
@Override
|
||||
public void startAnimation(IBinder transition, TransitionInfo info,
|
||||
SurfaceControl.Transaction t, IRemoteTransitionFinishedCallback finishCallback)
|
||||
throws RemoteException {
|
||||
Slog.d(TAG, "Starts IRemoteAnimationRunner: info=" + info);
|
||||
final RemoteAnimationTarget[] apps = wrap(info, false /* wallpapers */);
|
||||
final RemoteAnimationTarget[] wallpapers = wrap(info, true /* wallpapers */);
|
||||
final RemoteAnimationTarget[] nonApps = new RemoteAnimationTarget[0];
|
||||
|
||||
// TODO: Remove this, and update alpha value in the IAnimationRunner.
|
||||
for (TransitionInfo.Change change : info.getChanges()) {
|
||||
t.setAlpha(change.getLeash(), 1.0f);
|
||||
}
|
||||
t.apply();
|
||||
runner.onAnimationStart(getTransitionOldType(info.getType(), apps),
|
||||
apps, wallpapers, nonApps,
|
||||
new IRemoteAnimationFinishedCallback.Stub() {
|
||||
@Override
|
||||
public void onAnimationFinished() throws RemoteException {
|
||||
Slog.d(TAG, "Finish IRemoteAnimationRunner.");
|
||||
finishCallback.onTransitionFinished(null /* wct */, null /* t */);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public void mergeAnimation(IBinder transition, TransitionInfo info,
|
||||
SurfaceControl.Transaction t, IBinder mergeTarget,
|
||||
IRemoteTransitionFinishedCallback finishCallback) {
|
||||
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Inject
|
||||
public KeyguardService(KeyguardViewMediator keyguardViewMediator,
|
||||
KeyguardLifecyclesDispatcher keyguardLifecyclesDispatcher) {
|
||||
KeyguardLifecyclesDispatcher keyguardLifecyclesDispatcher,
|
||||
ShellTransitions shellTransitions) {
|
||||
super();
|
||||
mKeyguardViewMediator = keyguardViewMediator;
|
||||
mKeyguardLifecyclesDispatcher = keyguardLifecyclesDispatcher;
|
||||
|
||||
RemoteAnimationDefinition definition = new RemoteAnimationDefinition();
|
||||
if (sEnableRemoteKeyguardGoingAwayAnimation) {
|
||||
final RemoteAnimationAdapter exitAnimationAdapter =
|
||||
new RemoteAnimationAdapter(mExitAnimationRunner, 0, 0);
|
||||
definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY, exitAnimationAdapter);
|
||||
definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER,
|
||||
exitAnimationAdapter);
|
||||
if (shellTransitions != null && Transitions.ENABLE_SHELL_TRANSITIONS) {
|
||||
if (sEnableRemoteKeyguardGoingAwayAnimation) {
|
||||
Slog.d(TAG, "KeyguardService registerRemote: TRANSIT_KEYGUARD_GOING_AWAY");
|
||||
TransitionFilter f = new TransitionFilter();
|
||||
f.mTypeSet = new int[]{TRANSIT_KEYGUARD_GOING_AWAY};
|
||||
shellTransitions.registerRemote(f, wrap(mExitAnimationRunner));
|
||||
}
|
||||
if (sEnableRemoteKeyguardOccludeAnimation) {
|
||||
Slog.d(TAG, "KeyguardService registerRemote: TRANSIT_KEYGUARD_(UN)OCCLUDE");
|
||||
TransitionFilter f = new TransitionFilter();
|
||||
f.mTypeSet = new int[]{TRANSIT_KEYGUARD_OCCLUDE, TRANSIT_KEYGUARD_UNOCCLUDE};
|
||||
shellTransitions.registerRemote(f, wrap(mOccludeAnimationRunner));
|
||||
}
|
||||
} else {
|
||||
RemoteAnimationDefinition definition = new RemoteAnimationDefinition();
|
||||
if (sEnableRemoteKeyguardGoingAwayAnimation) {
|
||||
final RemoteAnimationAdapter exitAnimationAdapter =
|
||||
new RemoteAnimationAdapter(mExitAnimationRunner, 0, 0);
|
||||
definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY,
|
||||
exitAnimationAdapter);
|
||||
definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_GOING_AWAY_ON_WALLPAPER,
|
||||
exitAnimationAdapter);
|
||||
}
|
||||
if (sEnableRemoteKeyguardOccludeAnimation) {
|
||||
final RemoteAnimationAdapter occludeAnimationAdapter =
|
||||
new RemoteAnimationAdapter(mOccludeAnimationRunner, 0, 0);
|
||||
definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_OCCLUDE,
|
||||
occludeAnimationAdapter);
|
||||
definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_UNOCCLUDE,
|
||||
occludeAnimationAdapter);
|
||||
}
|
||||
ActivityTaskManager.getInstance().registerRemoteAnimationsForDisplay(
|
||||
DEFAULT_DISPLAY, definition);
|
||||
}
|
||||
if (sEnableRemoteKeyguardOccludeAnimation) {
|
||||
final RemoteAnimationAdapter occludeAnimationAdapter =
|
||||
new RemoteAnimationAdapter(mOccludeAnimationRunner, 0, 0);
|
||||
definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_OCCLUDE, occludeAnimationAdapter);
|
||||
definition.addRemoteAnimation(TRANSIT_OLD_KEYGUARD_UNOCCLUDE, occludeAnimationAdapter);
|
||||
}
|
||||
ActivityTaskManager.getInstance().registerRemoteAnimationsForDisplay(
|
||||
DEFAULT_DISPLAY, definition);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -145,10 +288,10 @@ public class KeyguardService extends Service {
|
||||
RemoteAnimationTarget[] wallpapers,
|
||||
RemoteAnimationTarget[] nonApps,
|
||||
IRemoteAnimationFinishedCallback finishedCallback) {
|
||||
Trace.beginSection("KeyguardService.mBinder#startKeyguardExitAnimation");
|
||||
Trace.beginSection("mExitAnimationRunner.onAnimationStart#startKeyguardExitAnimation");
|
||||
checkPermission();
|
||||
mKeyguardViewMediator.startKeyguardExitAnimation(transit, apps, wallpapers,
|
||||
null /* nonApps */, finishedCallback);
|
||||
nonApps, finishedCallback);
|
||||
Trace.endSection();
|
||||
}
|
||||
|
||||
@@ -166,14 +309,14 @@ public class KeyguardService extends Service {
|
||||
RemoteAnimationTarget[] wallpapers,
|
||||
RemoteAnimationTarget[] nonApps,
|
||||
IRemoteAnimationFinishedCallback finishedCallback) {
|
||||
Slog.d(TAG, "mOccludeAnimationRunner.onAnimationStart: transit=" + transit);
|
||||
try {
|
||||
if (transit == TRANSIT_OLD_KEYGUARD_OCCLUDE) {
|
||||
mBinder.setOccluded(true /* isOccluded */, true /* animate */);
|
||||
} else if (transit == TRANSIT_OLD_KEYGUARD_UNOCCLUDE) {
|
||||
mBinder.setOccluded(false /* isOccluded */, true /* animate */);
|
||||
}
|
||||
// TODO(bc-unlock): Implement occlude/unocclude animation applied on apps,
|
||||
// wallpapers and nonApps.
|
||||
// TODO(bc-unlock): Implement (un)occlude animation.
|
||||
finishedCallback.onAnimationFinished();
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(TAG, "RemoteException");
|
||||
|
||||
@@ -3020,7 +3020,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
|
||||
@Override
|
||||
public void onKeyguardOccludedChangedLw(boolean occluded) {
|
||||
if (mKeyguardDelegate != null && mKeyguardDelegate.isShowing()) {
|
||||
if (mKeyguardDelegate != null && mKeyguardDelegate.isShowing()
|
||||
&& !WindowManagerService.sEnableShellTransitions) {
|
||||
mPendingKeyguardOccluded = occluded;
|
||||
mKeyguardOccludedChanged = true;
|
||||
} else {
|
||||
@@ -4246,6 +4247,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
pmWakeReason)) + ")");
|
||||
}
|
||||
|
||||
mActivityTaskManagerInternal.notifyWakingUp();
|
||||
mDefaultDisplayPolicy.setAwake(true);
|
||||
|
||||
// Since goToSleep performs these functions synchronously, we must
|
||||
|
||||
@@ -621,4 +621,7 @@ public abstract class ActivityTaskManagerInternal {
|
||||
*/
|
||||
public abstract boolean hasSystemAlertWindowPermission(int callingUid, int callingPid,
|
||||
String callingPackage);
|
||||
|
||||
/** Called when the device is waking up */
|
||||
public abstract void notifyWakingUp();
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
|
||||
import static android.view.Display.DEFAULT_DISPLAY;
|
||||
import static android.view.Display.INVALID_DISPLAY;
|
||||
import static android.view.WindowManager.TRANSIT_NONE;
|
||||
import static android.view.WindowManager.TRANSIT_WAKE;
|
||||
|
||||
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_CONFIGURATION;
|
||||
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_FOCUS;
|
||||
@@ -6506,6 +6507,13 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
||||
return ActivityTaskManagerService.this.hasSystemAlertWindowPermission(callingUid,
|
||||
callingPid, callingPackage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyWakingUp() {
|
||||
// Start a transition for waking. This is needed for showWhenLocked activities.
|
||||
getTransitionController().requestTransitionIfNeeded(TRANSIT_WAKE, 0 /* flags */,
|
||||
null /* trigger */, mRootWindowContainer.getDefaultDisplay());
|
||||
}
|
||||
}
|
||||
|
||||
final class PackageConfigurationUpdaterImpl implements
|
||||
|
||||
@@ -49,6 +49,7 @@ import android.util.Slog;
|
||||
import android.util.SparseArray;
|
||||
import android.util.proto.ProtoOutputStream;
|
||||
import android.view.Display;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import com.android.internal.policy.IKeyguardDismissCallback;
|
||||
import com.android.server.inputmethod.InputMethodManagerInternal;
|
||||
@@ -158,6 +159,7 @@ class KeyguardController {
|
||||
final boolean keyguardChanged = (keyguardShowing != mKeyguardShowing)
|
||||
|| (mKeyguardGoingAway && keyguardShowing && !aodChanged);
|
||||
if (!keyguardChanged && !aodChanged) {
|
||||
setWakeTransitionReady();
|
||||
return;
|
||||
}
|
||||
EventLogTags.writeWmSetKeyguardShown(
|
||||
@@ -203,6 +205,15 @@ class KeyguardController {
|
||||
updateKeyguardSleepToken();
|
||||
mRootWindowContainer.ensureActivitiesVisible(null, 0, !PRESERVE_WINDOWS);
|
||||
InputMethodManagerInternal.get().updateImeWindowStatus(false /* disableImeIcon */);
|
||||
setWakeTransitionReady();
|
||||
}
|
||||
|
||||
private void setWakeTransitionReady() {
|
||||
if (mWindowManager.mAtmService.getTransitionController().getCollectingTransitionType()
|
||||
== WindowManager.TRANSIT_WAKE) {
|
||||
mWindowManager.mAtmService.getTransitionController().setReady(
|
||||
mRootWindowContainer.getDefaultDisplay());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -334,6 +345,7 @@ class KeyguardController {
|
||||
for (int displayNdx = mRootWindowContainer.getChildCount() - 1;
|
||||
displayNdx >= 0; displayNdx--) {
|
||||
final DisplayContent display = mRootWindowContainer.getChildAt(displayNdx);
|
||||
if (display.isRemoving() || display.isRemoved()) continue;
|
||||
final KeyguardDisplayState state = getDisplayState(display.mDisplayId);
|
||||
state.updateVisibility(this, display);
|
||||
requestDismissKeyguard |= state.mRequestDismissKeyguard;
|
||||
|
||||
@@ -33,6 +33,8 @@ import static android.view.WindowManager.TRANSIT_NONE;
|
||||
import static android.view.WindowManager.TRANSIT_OPEN;
|
||||
import static android.view.WindowManager.TRANSIT_TO_BACK;
|
||||
import static android.view.WindowManager.TRANSIT_TO_FRONT;
|
||||
import static android.view.WindowManager.TransitionFlags;
|
||||
import static android.view.WindowManager.TransitionType;
|
||||
import static android.view.WindowManager.transitTypeToString;
|
||||
import static android.window.TransitionInfo.FLAG_IS_DISPLAY;
|
||||
import static android.window.TransitionInfo.FLAG_IS_VOICE_INTERACTION;
|
||||
@@ -59,7 +61,6 @@ import android.util.ArrayMap;
|
||||
import android.util.ArraySet;
|
||||
import android.util.Slog;
|
||||
import android.view.SurfaceControl;
|
||||
import android.view.WindowManager;
|
||||
import android.view.animation.Animation;
|
||||
import android.window.IRemoteTransition;
|
||||
import android.window.TransitionInfo;
|
||||
@@ -109,9 +110,9 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@interface TransitionState {}
|
||||
|
||||
final @WindowManager.TransitionType int mType;
|
||||
final @TransitionType int mType;
|
||||
private int mSyncId;
|
||||
private @WindowManager.TransitionFlags int mFlags;
|
||||
private @TransitionFlags int mFlags;
|
||||
private final TransitionController mController;
|
||||
private final BLASTSyncEngine mSyncEngine;
|
||||
private IRemoteTransition mRemoteTransition = null;
|
||||
@@ -146,7 +147,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
|
||||
private boolean mNavBarAttachedToApp = false;
|
||||
private int mNavBarDisplayId = INVALID_DISPLAY;
|
||||
|
||||
Transition(@WindowManager.TransitionType int type, @WindowManager.TransitionFlags int flags,
|
||||
Transition(@TransitionType int type, @TransitionFlags int flags,
|
||||
TransitionController controller, BLASTSyncEngine syncEngine) {
|
||||
mType = type;
|
||||
mFlags = flags;
|
||||
@@ -617,7 +618,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
|
||||
}
|
||||
|
||||
private void handleNonAppWindowsInTransition(int displayId,
|
||||
@WindowManager.TransitionType int transit, int flags) {
|
||||
@TransitionType int transit, int flags) {
|
||||
final DisplayContent dc =
|
||||
mController.mAtm.mRootWindowContainer.getDisplayContent(displayId);
|
||||
if (dc == null) {
|
||||
@@ -968,7 +969,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
|
||||
*/
|
||||
@VisibleForTesting
|
||||
@NonNull
|
||||
static TransitionInfo calculateTransitionInfo(int type, int flags,
|
||||
static TransitionInfo calculateTransitionInfo(@TransitionType int type, int flags,
|
||||
ArraySet<WindowContainer> targets, ArrayMap<WindowContainer, ChangeInfo> changes) {
|
||||
final TransitionInfo out = new TransitionInfo(type, flags);
|
||||
|
||||
|
||||
@@ -452,14 +452,14 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
/**
|
||||
* @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY
|
||||
*/
|
||||
public static final boolean sEnableRemoteKeyguardGoingAwayAnimation = !sEnableShellTransitions
|
||||
&& sEnableRemoteKeyguardAnimation >= 1;
|
||||
public static final boolean sEnableRemoteKeyguardGoingAwayAnimation =
|
||||
sEnableRemoteKeyguardAnimation >= 1;
|
||||
|
||||
/**
|
||||
* @see #ENABLE_REMOTE_KEYGUARD_ANIMATION_PROPERTY
|
||||
*/
|
||||
public static final boolean sEnableRemoteKeyguardOccludeAnimation = !sEnableShellTransitions
|
||||
&& sEnableRemoteKeyguardAnimation >= 2;
|
||||
public static final boolean sEnableRemoteKeyguardOccludeAnimation =
|
||||
sEnableRemoteKeyguardAnimation >= 2;
|
||||
|
||||
/**
|
||||
* Allows a fullscreen windowing mode activity to launch in its desired orientation directly
|
||||
|
||||
Reference in New Issue
Block a user