Loading core/java/android/view/ViewRootImpl.java +2 −0 Original line number Diff line number Diff line Loading @@ -8630,6 +8630,8 @@ public final class ViewRootImpl implements ViewParent, mInsetsController.dump(prefix, writer); mOnBackInvokedDispatcher.dump(prefix, writer); writer.println(prefix + "View Hierarchy:"); dumpViewHierarchy(innerPrefix, writer, mView); } Loading core/java/android/window/ImeOnBackInvokedDispatcher.java +6 −0 Original line number Diff line number Diff line Loading @@ -211,6 +211,12 @@ public class ImeOnBackInvokedDispatcher implements OnBackInvokedDispatcher, Parc IOnBackInvokedCallback getIOnBackInvokedCallback() { return mIOnBackInvokedCallback; } @Override public String toString() { return "ImeCallback=ImeOnBackInvokedCallback@" + mId + " Callback=" + mIOnBackInvokedCallback; } } /** Loading core/java/android/window/ProxyOnBackInvokedDispatcher.java +1 −10 Original line number Diff line number Diff line Loading @@ -179,16 +179,7 @@ public class ProxyOnBackInvokedDispatcher implements OnBackInvokedDispatcher { return; } clearCallbacksOnDispatcher(); if (actualDispatcher instanceof ProxyOnBackInvokedDispatcher) { // We don't want to nest ProxyDispatchers, so if we are given on, we unwrap its // actual dispatcher. // This can happen when an Activity is recreated but the Window is preserved (e.g. // when going from split-screen back to single screen) mActualDispatcher = ((ProxyOnBackInvokedDispatcher) actualDispatcher).mActualDispatcher; } else { mActualDispatcher = actualDispatcher; } transferCallbacksToDispatcher(); } } Loading core/java/android/window/WindowOnBackInvokedDispatcher.java +21 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.util.Log; import android.view.IWindow; import android.view.IWindowSession; import java.io.PrintWriter; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; Loading Loading @@ -221,6 +222,26 @@ public class WindowOnBackInvokedDispatcher implements OnBackInvokedDispatcher { @NonNull private static final BackProgressAnimator mProgressAnimator = new BackProgressAnimator(); /** * Dump information about this WindowOnBackInvokedDispatcher * @param prefix the prefix that will be prepended to each line of the produced output * @param writer the writer that will receive the resulting text */ public void dump(String prefix, PrintWriter writer) { String innerPrefix = prefix + " "; writer.println(prefix + "WindowOnBackDispatcher:"); if (mAllCallbacks.isEmpty()) { writer.println(prefix + "<None>"); return; } writer.println(innerPrefix + "Top Callback: " + getTopCallback()); writer.println(innerPrefix + "Callbacks: "); mAllCallbacks.forEach((callback, priority) -> { writer.println(innerPrefix + " Callback: " + callback + " Priority=" + priority); }); } static class OnBackInvokedCallbackWrapper extends IOnBackInvokedCallback.Stub { private final WeakReference<OnBackInvokedCallback> mCallback; Loading core/java/com/android/internal/policy/PhoneWindow.java +6 −2 Original line number Diff line number Diff line Loading @@ -379,8 +379,12 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { // window, as we'll be skipping the addView in handleResumeActivity(), and // the token will not be updated as for a new window. getAttributes().token = preservedWindow.getAttributes().token; mProxyOnBackInvokedDispatcher.setActualDispatcher( preservedWindow.getOnBackInvokedDispatcher()); final ViewRootImpl viewRoot = mDecor.getViewRootImpl(); if (viewRoot != null) { // Clear the old callbacks and attach to the new window. viewRoot.getOnBackInvokedDispatcher().clear(); onViewRootImplSet(viewRoot); } } // Even though the device doesn't support picture-in-picture mode, // an user can force using it through developer options. Loading Loading
core/java/android/view/ViewRootImpl.java +2 −0 Original line number Diff line number Diff line Loading @@ -8630,6 +8630,8 @@ public final class ViewRootImpl implements ViewParent, mInsetsController.dump(prefix, writer); mOnBackInvokedDispatcher.dump(prefix, writer); writer.println(prefix + "View Hierarchy:"); dumpViewHierarchy(innerPrefix, writer, mView); } Loading
core/java/android/window/ImeOnBackInvokedDispatcher.java +6 −0 Original line number Diff line number Diff line Loading @@ -211,6 +211,12 @@ public class ImeOnBackInvokedDispatcher implements OnBackInvokedDispatcher, Parc IOnBackInvokedCallback getIOnBackInvokedCallback() { return mIOnBackInvokedCallback; } @Override public String toString() { return "ImeCallback=ImeOnBackInvokedCallback@" + mId + " Callback=" + mIOnBackInvokedCallback; } } /** Loading
core/java/android/window/ProxyOnBackInvokedDispatcher.java +1 −10 Original line number Diff line number Diff line Loading @@ -179,16 +179,7 @@ public class ProxyOnBackInvokedDispatcher implements OnBackInvokedDispatcher { return; } clearCallbacksOnDispatcher(); if (actualDispatcher instanceof ProxyOnBackInvokedDispatcher) { // We don't want to nest ProxyDispatchers, so if we are given on, we unwrap its // actual dispatcher. // This can happen when an Activity is recreated but the Window is preserved (e.g. // when going from split-screen back to single screen) mActualDispatcher = ((ProxyOnBackInvokedDispatcher) actualDispatcher).mActualDispatcher; } else { mActualDispatcher = actualDispatcher; } transferCallbacksToDispatcher(); } } Loading
core/java/android/window/WindowOnBackInvokedDispatcher.java +21 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.util.Log; import android.view.IWindow; import android.view.IWindowSession; import java.io.PrintWriter; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.HashMap; Loading Loading @@ -221,6 +222,26 @@ public class WindowOnBackInvokedDispatcher implements OnBackInvokedDispatcher { @NonNull private static final BackProgressAnimator mProgressAnimator = new BackProgressAnimator(); /** * Dump information about this WindowOnBackInvokedDispatcher * @param prefix the prefix that will be prepended to each line of the produced output * @param writer the writer that will receive the resulting text */ public void dump(String prefix, PrintWriter writer) { String innerPrefix = prefix + " "; writer.println(prefix + "WindowOnBackDispatcher:"); if (mAllCallbacks.isEmpty()) { writer.println(prefix + "<None>"); return; } writer.println(innerPrefix + "Top Callback: " + getTopCallback()); writer.println(innerPrefix + "Callbacks: "); mAllCallbacks.forEach((callback, priority) -> { writer.println(innerPrefix + " Callback: " + callback + " Priority=" + priority); }); } static class OnBackInvokedCallbackWrapper extends IOnBackInvokedCallback.Stub { private final WeakReference<OnBackInvokedCallback> mCallback; Loading
core/java/com/android/internal/policy/PhoneWindow.java +6 −2 Original line number Diff line number Diff line Loading @@ -379,8 +379,12 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { // window, as we'll be skipping the addView in handleResumeActivity(), and // the token will not be updated as for a new window. getAttributes().token = preservedWindow.getAttributes().token; mProxyOnBackInvokedDispatcher.setActualDispatcher( preservedWindow.getOnBackInvokedDispatcher()); final ViewRootImpl viewRoot = mDecor.getViewRootImpl(); if (viewRoot != null) { // Clear the old callbacks and attach to the new window. viewRoot.getOnBackInvokedDispatcher().clear(); onViewRootImplSet(viewRoot); } } // Even though the device doesn't support picture-in-picture mode, // an user can force using it through developer options. Loading