diff options
9 files changed, 71 insertions, 5 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index c275ed3a3b06..b1676dde3b70 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -138,6 +138,7 @@ import static com.android.window.flags.Flags.enableWindowContextResourcesUpdateO import static com.android.window.flags.Flags.predictiveBackSwipeEdgeNoneApi; import static com.android.window.flags.Flags.reduceChangedExclusionRectsMsgs; import static com.android.window.flags.Flags.setScPropertiesInClient; +import static com.android.window.flags.Flags.fixViewRootCallTrace; import android.Manifest; import android.accessibilityservice.AccessibilityService; @@ -1590,7 +1591,9 @@ public final class ViewRootImpl implements ViewParent, mAttachInfo.mPanelParentWindowToken = panelParentView.getApplicationWindowToken(); } - mAdded = true; + if (!fixViewRootCallTrace()) { + mAdded = true; + } int res; /* = WindowManagerImpl.ADD_OKAY; */ // Schedule the first layout -before- adding to the window @@ -1641,7 +1644,9 @@ public final class ViewRootImpl implements ViewParent, mTmpFrames.compatScale = compatScale[0]; mInvCompatScale = 1f / compatScale[0]; } catch (RemoteException | RuntimeException e) { - mAdded = false; + if (!fixViewRootCallTrace()) { + mAdded = false; + } mView = null; mAttachInfo.mRootView = null; mFallbackEventHandler.setView(null); @@ -1672,7 +1677,9 @@ public final class ViewRootImpl implements ViewParent, if (DEBUG_LAYOUT) Log.v(mTag, "Added window " + mWindow); if (res < WindowManagerGlobal.ADD_OKAY) { mAttachInfo.mRootView = null; - mAdded = false; + if (!fixViewRootCallTrace()) { + mAdded = false; + } mFallbackEventHandler.setView(null); unscheduleTraversals(); setAccessibilityFocus(null, null); @@ -1781,6 +1788,9 @@ public final class ViewRootImpl implements ViewParent, mFirstInputStage = nativePreImeStage; mFirstPostImeInputStage = earlyPostImeStage; mPendingInputEventQueueLengthCounterName = "aq:pending:" + counterSuffix; + if (fixViewRootCallTrace()) { + mAdded = true; + } if (!mRemoved || !mAppVisible) { AnimationHandler.requestAnimatorsEnabled(mAppVisible, this); diff --git a/core/java/android/window/flags/windowing_frontend.aconfig b/core/java/android/window/flags/windowing_frontend.aconfig index 59dd32258d8c..99f9929e1071 100644 --- a/core/java/android/window/flags/windowing_frontend.aconfig +++ b/core/java/android/window/flags/windowing_frontend.aconfig @@ -388,6 +388,17 @@ flag { } flag { + name: "remove_depart_target_from_motion" + namespace: "windowing_frontend" + description: "Remove DepartingAnimationTarget from BackMotionEvent" + bug: "395035430" + is_fixed_read_only: true + metadata { + purpose: PURPOSE_BUGFIX + } +} + +flag { name: "predictive_back_default_enable_sdk_36" namespace: "systemui" description: "Enable Predictive Back by default with targetSdk>=36" diff --git a/core/java/android/window/flags/windowing_sdk.aconfig b/core/java/android/window/flags/windowing_sdk.aconfig index 8808707961a6..f162b1f40d8e 100644 --- a/core/java/android/window/flags/windowing_sdk.aconfig +++ b/core/java/android/window/flags/windowing_sdk.aconfig @@ -174,3 +174,14 @@ flag { purpose: PURPOSE_BUGFIX } } + +flag { + namespace: "windowing_sdk" + name: "fix_view_root_call_trace" + description: "Do not set mAdded=true unless #setView finished successfully" + bug: "385705687" + is_fixed_read_only: true + metadata { + purpose: PURPOSE_BUGFIX + } +} diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java index 746632f67725..f91154c7a362 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java @@ -1050,7 +1050,8 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont () -> mShellExecutor.execute(this::onBackAnimationFinished)); if (mApps.length >= 1) { - BackMotionEvent startEvent = mCurrentTracker.createStartEvent(mApps[0]); + BackMotionEvent startEvent = mCurrentTracker.createStartEvent( + Flags.removeDepartTargetFromMotion() ? null : mApps[0]); dispatchOnBackStarted(mActiveCallback, startEvent); if (startEvent.getSwipeEdge() == EDGE_NONE) { // TODO(b/373544911): onBackStarted is dispatched here so that diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt index 2d6253b642be..8b1d3fa65ac6 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt @@ -3628,6 +3628,7 @@ class DesktopTasksController( pw.println("${prefix}DesktopTasksController") DesktopModeStatus.dump(pw, innerPrefix, context) userRepositories.dump(pw, innerPrefix) + focusTransitionObserver.dump(pw, innerPrefix) } /** The interface for calls from outside the shell, within the host process. */ diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/FocusTransitionObserver.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/FocusTransitionObserver.java index f0f1ad05008b..b91fb048dc09 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/FocusTransitionObserver.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/FocusTransitionObserver.java @@ -31,6 +31,7 @@ import android.annotation.NonNull; import android.app.ActivityManager.RunningTaskInfo; import android.os.RemoteException; import android.util.ArraySet; +import android.util.IndentingPrintWriter; import android.util.Slog; import android.util.SparseArray; import android.window.TransitionInfo; @@ -38,6 +39,7 @@ import android.window.TransitionInfo; import com.android.wm.shell.shared.FocusTransitionListener; import com.android.wm.shell.shared.IFocusTransitionListener; +import java.io.PrintWriter; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -237,4 +239,21 @@ public class FocusTransitionObserver { } return task.displayId == mFocusedDisplayId && isFocusedOnDisplay(task); } + + /** Dumps focused display and tasks. */ + public void dump(PrintWriter originalWriter, String prefix) { + final IndentingPrintWriter writer = + new IndentingPrintWriter(originalWriter, " ", prefix); + writer.println("FocusTransitionObserver:"); + writer.increaseIndent(); + writer.printf("currentFocusedDisplayId=%d\n", mFocusedDisplayId); + writer.println("currentFocusedTaskOnDisplay:"); + writer.increaseIndent(); + for (int i = 0; i < mFocusedTaskOnDisplay.size(); i++) { + writer.printf("Display #%d: taskId=%d topActivity=%s\n", + mFocusedTaskOnDisplay.keyAt(i), + mFocusedTaskOnDisplay.valueAt(i).taskId, + mFocusedTaskOnDisplay.valueAt(i).topActivity); + } + } } diff --git a/packages/SettingsLib/Metadata/Android.bp b/packages/SettingsLib/Metadata/Android.bp index 564c3985264d..8701d3d8daae 100644 --- a/packages/SettingsLib/Metadata/Android.bp +++ b/packages/SettingsLib/Metadata/Android.bp @@ -19,4 +19,7 @@ android_library { "androidx.fragment_fragment", ], kotlincflags: ["-Xjvm-default=all"], + optimize: { + proguard_flags_files: ["proguard.pgcfg"], + }, } diff --git a/packages/SettingsLib/Metadata/proguard.pgcfg b/packages/SettingsLib/Metadata/proguard.pgcfg new file mode 100644 index 000000000000..3a137732a229 --- /dev/null +++ b/packages/SettingsLib/Metadata/proguard.pgcfg @@ -0,0 +1,8 @@ +# Preserve names for IPC codec to support unmarshalling Parcelable +-keepnames class com.android.settingslib.metadata.PreferenceCoordinate { + public static final ** CREATOR; +} + +-keepnames class com.android.settingslib.metadata.PreferenceScreenCoordinate { + public static final ** CREATOR; +} diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index b1422c20e516..247a51d9fcb3 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -3203,7 +3203,9 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< mLocalInsetsSources.valueAt(i).dump(childPrefix, pw); } } - pw.println(prefix + mSafeRegionBounds + " SafeRegionBounds"); + if (mSafeRegionBounds != null) { + pw.println(prefix + "mSafeRegionBounds=" + mSafeRegionBounds); + } } final void updateSurfacePositionNonOrganized() { |