Merge "Add server side proto-base dumping for back navigation"

This commit is contained in:
Arthur Hung
2022-11-23 02:11:17 +00:00
committed by Android (Google) Code Review
5 changed files with 52 additions and 6 deletions

View File

@@ -3306,6 +3306,18 @@ package android.widget.inline {
package android.window {
public final class BackNavigationInfo implements android.os.Parcelable {
method @NonNull public static String typeToString(int);
field @NonNull public static final android.os.Parcelable.Creator<android.window.BackNavigationInfo> CREATOR;
field public static final String KEY_TRIGGER_BACK = "TriggerBack";
field public static final int TYPE_CALLBACK = 4; // 0x4
field public static final int TYPE_CROSS_ACTIVITY = 2; // 0x2
field public static final int TYPE_CROSS_TASK = 3; // 0x3
field public static final int TYPE_DIALOG_CLOSE = 0; // 0x0
field public static final int TYPE_RETURN_TO_HOME = 1; // 0x1
field public static final int TYPE_UNDEFINED = -1; // 0xffffffff
}
public final class DisplayAreaAppearedInfo implements android.os.Parcelable {
ctor public DisplayAreaAppearedInfo(@NonNull android.window.DisplayAreaInfo, @NonNull android.view.SurfaceControl);
method public int describeContents();

View File

@@ -19,6 +19,7 @@ package android.window;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -29,6 +30,7 @@ import android.os.RemoteCallback;
*
* @hide
*/
@TestApi
public final class BackNavigationInfo implements Parcelable {
/**
@@ -71,6 +73,7 @@ public final class BackNavigationInfo implements Parcelable {
/**
* Defines the type of back destinations a back even can lead to. This is used to define the
* type of animation that need to be run on SystemUI.
* @hide
*/
@IntDef(prefix = "TYPE_", value = {
TYPE_UNDEFINED,
@@ -97,7 +100,6 @@ public final class BackNavigationInfo implements Parcelable {
* @param onBackNavigationDone The callback to be called once the client is done with the
* back preview.
* @param onBackInvokedCallback The back callback registered by the current top level window.
* @param departingWindowContainerToken The {@link WindowContainerToken} of departing window.
*/
private BackNavigationInfo(@BackTargetType int type,
@Nullable RemoteCallback onBackNavigationDone,
@@ -116,6 +118,7 @@ public final class BackNavigationInfo implements Parcelable {
mPrepareRemoteAnimation = in.readBoolean();
}
/** @hide */
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(mType);
@@ -126,7 +129,7 @@ public final class BackNavigationInfo implements Parcelable {
/**
* Returns the type of back navigation that is about to happen.
*
* @hide
* @see BackTargetType
*/
public @BackTargetType int getType() {
@@ -138,7 +141,7 @@ public final class BackNavigationInfo implements Parcelable {
* the client didn't register a callback.
* <p>
* This is never null when {@link #getType} returns {@link #TYPE_CALLBACK}.
*
* @hide
* @see OnBackInvokedCallback
* @see OnBackInvokedDispatcher
*/
@@ -149,6 +152,7 @@ public final class BackNavigationInfo implements Parcelable {
/**
* Return true if the core is preparing a back gesture nimation.
* @hide
*/
public boolean isPrepareRemoteAnimation() {
return mPrepareRemoteAnimation;
@@ -157,7 +161,7 @@ public final class BackNavigationInfo implements Parcelable {
/**
* Callback to be called when the back preview is finished in order to notify the server that
* it can clean up the resources created for the animation.
*
* @hide
* @param triggerBack Boolean indicating if back navigation has been triggered.
*/
public void onBackNavigationFinished(boolean triggerBack) {
@@ -168,11 +172,13 @@ public final class BackNavigationInfo implements Parcelable {
}
}
/** @hide */
@Override
public int describeContents() {
return 0;
}
@NonNull
public static final Creator<BackNavigationInfo> CREATOR = new Creator<BackNavigationInfo>() {
@Override
public BackNavigationInfo createFromParcel(Parcel in) {
@@ -197,6 +203,7 @@ public final class BackNavigationInfo implements Parcelable {
/**
* Translates the {@link BackNavigationInfo} integer type to its String representation
*/
@NonNull
public static String typeToString(@BackTargetType int type) {
switch (type) {
case TYPE_UNDEFINED:

View File

@@ -54,6 +54,7 @@ message WindowManagerServiceDumpProto {
optional int32 focused_display_id = 9;
optional bool hard_keyboard_available = 10;
optional bool window_frames_valid = 11;
optional BackNavigationProto back_navigation = 12;
}
/* represents RootWindowContainer object */
@@ -595,3 +596,11 @@ message ImeInsetsSourceProviderProto {
optional WindowStateProto ime_target_from_ime = 2;
optional bool is_ime_layout_drawn = 3;
}
message BackNavigationProto {
option (.android.msg_privacy).dest = DEST_AUTOMATIC;
optional bool animation_in_progress = 1;
optional int32 last_back_type = 2;
optional bool show_wallpaper = 3;
}

View File

@@ -24,6 +24,9 @@ import static android.view.WindowManager.TRANSIT_CLOSE;
import static android.view.WindowManager.TRANSIT_TO_BACK;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_BACK_PREVIEW;
import static com.android.server.wm.BackNavigationProto.ANIMATION_IN_PROGRESS;
import static com.android.server.wm.BackNavigationProto.LAST_BACK_TYPE;
import static com.android.server.wm.BackNavigationProto.SHOW_WALLPAPER;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -37,6 +40,7 @@ import android.os.RemoteException;
import android.os.SystemProperties;
import android.util.ArraySet;
import android.util.Slog;
import android.util.proto.ProtoOutputStream;
import android.view.IWindowFocusObserver;
import android.view.RemoteAnimationTarget;
import android.view.SurfaceControl;
@@ -60,6 +64,7 @@ class BackNavigationController {
private WindowManagerService mWindowManagerService;
private IWindowFocusObserver mFocusObserver;
private boolean mBackAnimationInProgress;
private @BackNavigationInfo.BackTargetType int mLastBackType;
private boolean mShowWallpaper;
private Runnable mPendingAnimation;
@@ -215,7 +220,7 @@ class BackNavigationController {
infoBuilder.setOnBackNavigationDone(new RemoteCallback(result ->
onBackNavigationDone(result, finalFocusedWindow,
BackNavigationInfo.TYPE_CALLBACK)));
mLastBackType = backType;
return infoBuilder.setType(backType).build();
}
@@ -301,7 +306,7 @@ class BackNavigationController {
result, finalFocusedWindow, finalBackType));
infoBuilder.setOnBackNavigationDone(onBackNavigationDone);
}
mLastBackType = backType;
return infoBuilder.build();
}
@@ -836,4 +841,13 @@ class BackNavigationController {
&& w.mAttrs.type == TYPE_BASE_APPLICATION && w.mActivityRecord != null
&& mAnimationTargets.isTarget(w.mActivityRecord, true /* open */);
}
// Called from WindowManagerService to write to a protocol buffer output stream.
void dumpDebug(ProtoOutputStream proto, long fieldId) {
final long token = proto.start(fieldId);
proto.write(ANIMATION_IN_PROGRESS, mBackAnimationInProgress);
proto.write(LAST_BACK_TYPE, mLastBackType);
proto.write(SHOW_WALLPAPER, mShowWallpaper);
proto.end(token);
}
}

View File

@@ -140,6 +140,7 @@ import static com.android.server.wm.WindowManagerDebugConfig.SHOW_STACK_CRAWLS;
import static com.android.server.wm.WindowManagerDebugConfig.SHOW_VERBOSE_TRANSACTIONS;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.WindowManagerServiceDumpProto.BACK_NAVIGATION;
import static com.android.server.wm.WindowManagerServiceDumpProto.DISPLAY_FROZEN;
import static com.android.server.wm.WindowManagerServiceDumpProto.FOCUSED_APP;
import static com.android.server.wm.WindowManagerServiceDumpProto.FOCUSED_DISPLAY_ID;
@@ -6554,6 +6555,9 @@ public class WindowManagerService extends IWindowManager.Stub
// Once we move the window layout to the client side, this can be false when we are waiting
// for the frames.
proto.write(WINDOW_FRAMES_VALID, true);
// Write the BackNavigationController's state into the protocol buffer
mAtmService.mBackNavigationController.dumpDebug(proto, BACK_NAVIGATION);
}
private void dumpWindowsLocked(PrintWriter pw, boolean dumpAll,