diff --git a/core/api/test-current.txt b/core/api/test-current.txt index fe99c71d9a9a3..48277fb3b488c 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -2923,7 +2923,7 @@ package android.view { method public static int getHoverTooltipHideTimeout(); method public static int getHoverTooltipShowTimeout(); method public static int getLongPressTooltipHideTimeout(); - method public int getPreferKeepClearForFocusDelay(); + method public boolean isPreferKeepClearForFocusEnabled(); } public class ViewDebug { diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 38ca2481726bd..90497e7adbf73 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -4781,9 +4781,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, @UnsupportedAppUsage ListenerInfo mListenerInfo; - private boolean mPreferKeepClearForFocus; - private Runnable mMarkPreferKeepClearForFocus; - private static class TooltipInfo { /** * Text to be displayed in a tooltip popup. @@ -11962,8 +11959,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, @NonNull List collectPreferKeepClearRects() { ListenerInfo info = mListenerInfo; - boolean keepBoundsClear = - (info != null && info.mPreferKeepClear) || mPreferKeepClearForFocus; + boolean keepClearForFocus = isFocused() + && ViewConfiguration.get(mContext).isPreferKeepClearForFocusEnabled(); + boolean keepBoundsClear = (info != null && info.mPreferKeepClear) || keepClearForFocus; boolean hasCustomKeepClearRects = info != null && info.mKeepClearRects != null; if (!keepBoundsClear && !hasCustomKeepClearRects) { @@ -11985,31 +11983,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } private void updatePreferKeepClearForFocus() { - if (mMarkPreferKeepClearForFocus != null) { - removeCallbacks(mMarkPreferKeepClearForFocus); - mMarkPreferKeepClearForFocus = null; + if (ViewConfiguration.get(mContext).isPreferKeepClearForFocusEnabled()) { + updatePositionUpdateListener(); + post(this::updateKeepClearRects); } - - final ViewConfiguration configuration = ViewConfiguration.get(mContext); - final int delay = configuration.getPreferKeepClearForFocusDelay(); - if (delay >= 0) { - mMarkPreferKeepClearForFocus = () -> { - mPreferKeepClearForFocus = isFocused(); - mMarkPreferKeepClearForFocus = null; - - updatePositionUpdateListener(); - post(this::updateKeepClearRects); - }; - postDelayed(mMarkPreferKeepClearForFocus, delay); - } - } - - private void cancelMarkPreferKeepClearForFocus() { - if (mMarkPreferKeepClearForFocus != null) { - removeCallbacks(mMarkPreferKeepClearForFocus); - mMarkPreferKeepClearForFocus = null; - } - mPreferKeepClearForFocus = false; } /** @@ -13754,7 +13731,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } invalidate(); sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED); - updatePreferKeepClearForFocus(); return true; } return false; @@ -21154,7 +21130,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, removePerformClickCallback(); clearAccessibilityThrottles(); stopNestedScroll(); - cancelMarkPreferKeepClearForFocus(); // Anything that started animating right before detach should already // be in its final state when re-attached. diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java index ebc409e470e90..638b8f9f9b404 100644 --- a/core/java/android/view/ViewConfiguration.java +++ b/core/java/android/view/ViewConfiguration.java @@ -347,7 +347,7 @@ public class ViewConfiguration { private final long mScreenshotChordKeyTimeout; private final int mSmartSelectionInitializedTimeout; private final int mSmartSelectionInitializingTimeout; - private final int mPreferKeepClearForFocusDelay; + private final boolean mPreferKeepClearForFocusEnabled; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 123768915) private boolean sHasPermanentMenuKey; @@ -393,7 +393,7 @@ public class ViewConfiguration { mMinScalingSpan = 0; mSmartSelectionInitializedTimeout = SMART_SELECTION_INITIALIZED_TIMEOUT_IN_MILLISECOND; mSmartSelectionInitializingTimeout = SMART_SELECTION_INITIALIZING_TIMEOUT_IN_MILLISECOND; - mPreferKeepClearForFocusDelay = -1; + mPreferKeepClearForFocusEnabled = false; } /** @@ -508,8 +508,8 @@ public class ViewConfiguration { com.android.internal.R.integer.config_smartSelectionInitializedTimeoutMillis); mSmartSelectionInitializingTimeout = res.getInteger( com.android.internal.R.integer.config_smartSelectionInitializingTimeoutMillis); - mPreferKeepClearForFocusDelay = res.getInteger( - com.android.internal.R.integer.config_preferKeepClearForFocusDelayMillis); + mPreferKeepClearForFocusEnabled = res.getBoolean( + com.android.internal.R.bool.config_preferKeepClearForFocus); } /** @@ -1100,13 +1100,13 @@ public class ViewConfiguration { } /** - * @return The delay in milliseconds before focused Views set themselves as preferred to keep - * clear, or -1 if Views should not set themselves as preferred to keep clear. + * @return {@code true} if Views should set themselves as preferred to keep clear when focused, + * {@code false} otherwise. * @hide */ @TestApi - public int getPreferKeepClearForFocusDelay() { - return mPreferKeepClearForFocusDelay; + public boolean isPreferKeepClearForFocusEnabled() { + return mPreferKeepClearForFocusEnabled; } /** diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 054695ef8f939..70766cc79eb42 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -5163,9 +5163,8 @@ when TextClassifier has not been initialized. --> 500 - - -1 + + false false diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 5bfc568887891..e111ee184be15 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -479,7 +479,7 @@ - +