From 93be7632d69b8e60bc1f7a71ff2e82b5a64e6672 Mon Sep 17 00:00:00 2001 From: Yifei Zhang Date: Tue, 11 Jul 2023 11:40:08 -0700 Subject: [PATCH] swipe-dismiss: reintroduce windowSwipeToDismiss for compatibility - We need to revive this feature for compatibility support for Wear OS devices. Test: build / flash Bug: 290801678 Change-Id: I096fb31824288fb578fa334ed452a652c739c814 --- .../window/WindowOnBackInvokedDispatcher.java | 30 +++++++++++++++++++ core/res/res/values-watch/config_material.xml | 3 -- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/core/java/android/window/WindowOnBackInvokedDispatcher.java b/core/java/android/window/WindowOnBackInvokedDispatcher.java index 632208cdb97c4..849e0b32591ac 100644 --- a/core/java/android/window/WindowOnBackInvokedDispatcher.java +++ b/core/java/android/window/WindowOnBackInvokedDispatcher.java @@ -23,6 +23,7 @@ import android.content.Context; import android.content.ContextWrapper; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; +import android.content.res.TypedArray; import android.os.Handler; import android.os.RemoteException; import android.os.SystemProperties; @@ -33,6 +34,7 @@ import android.view.IWindowSession; import androidx.annotation.VisibleForTesting; + import java.io.PrintWriter; import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -62,6 +64,9 @@ public class WindowOnBackInvokedDispatcher implements OnBackInvokedDispatcher { .getInt("persist.wm.debug.predictive_back", 1) != 0; private static final boolean ALWAYS_ENFORCE_PREDICTIVE_BACK = SystemProperties .getInt("persist.wm.debug.predictive_back_always_enforce", 0) != 0; + private static final boolean PREDICTIVE_BACK_FALLBACK_WINDOW_ATTRIBUTE = + SystemProperties.getInt("persist.wm.debug.predictive_back_fallback_window_attribute", 0) + != 0; @Nullable private ImeOnBackInvokedDispatcher mImeDispatcher; @@ -500,6 +505,31 @@ public class WindowOnBackInvokedDispatcher implements OnBackInvokedDispatcher { applicationInfo.packageName, requestsPredictiveBack)); } + + if (PREDICTIVE_BACK_FALLBACK_WINDOW_ATTRIBUTE && !requestsPredictiveBack) { + // Compatibility check for legacy window style flag used by Wear OS. + // Note on compatibility behavior: + // 1. windowSwipeToDismiss should be respected for all apps not opted in. + // 2. windowSwipeToDismiss should be true for all apps not opted in, which + // enables the PB animation for them. + // 3. windowSwipeToDismiss=false should be respected for apps not opted in, + // which disables PB & onBackPressed caused by BackAnimController's + // setTrigger(true) + TypedArray windowAttr = + context.obtainStyledAttributes( + new int[] {android.R.attr.windowSwipeToDismiss}); + boolean windowSwipeToDismiss = true; + if (windowAttr.getIndexCount() > 0) { + windowSwipeToDismiss = windowAttr.getBoolean(0, true); + } + windowAttr.recycle(); + + if (DEBUG) { + Log.i(TAG, "falling back to windowSwipeToDismiss: " + windowSwipeToDismiss); + } + + requestsPredictiveBack = windowSwipeToDismiss; + } } return requestsPredictiveBack; diff --git a/core/res/res/values-watch/config_material.xml b/core/res/res/values-watch/config_material.xml index 03d3637b150db..529f18b78e4dd 100644 --- a/core/res/res/values-watch/config_material.xml +++ b/core/res/res/values-watch/config_material.xml @@ -30,9 +30,6 @@ true - - true - @drawable/scrollbar_vertical_thumb @drawable/scrollbar_vertical_track