Loading core/java/android/view/flags/view_flags.aconfig +8 −1 Original line number Diff line number Diff line Loading @@ -42,3 +42,10 @@ flag { # Referenced in WM where WM starts before DeviceConfig is_fixed_read_only: true } flag { name: "enable_arrow_icon_on_hover_when_clickable" namespace: "toolkit" description: "Enable default arrow icon when hovering on buttons or clickable widgets." bug: "299269803" } core/java/android/widget/Button.java +12 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package android.widget; import static android.view.flags.Flags.enableArrowIconOnHoverWhenClickable; import static android.view.flags.Flags.FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE; import android.annotation.FlaggedApi; import android.content.Context; import android.util.AttributeSet; import android.view.InputDevice; Loading @@ -24,7 +28,6 @@ import android.view.MotionEvent; import android.view.PointerIcon; import android.widget.RemoteViews.RemoteView; /** * A user interface element the user can tap or click to perform an action. * Loading Loading @@ -172,10 +175,16 @@ public class Button extends TextView { return Button.class.getName(); } @FlaggedApi(FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE) @Override public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) { if (getPointerIcon() == null && isClickable() && isEnabled() && event.isFromSource(InputDevice.SOURCE_MOUSE)) { // By default the pointer icon is an arrow. More specifically, when the pointer icon is set // to null, it will be an arrow. Therefore, we don't need to change the icon when // enableArrowIconOnHoverWhenClickable() and the pointer icon is a null. We only need to do // that when we want the hand icon for hover. if (!enableArrowIconOnHoverWhenClickable() && getPointerIcon() == null && isClickable() && isEnabled() && event.isFromSource(InputDevice.SOURCE_MOUSE) ) { return PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_HAND); } return super.onResolvePointerIcon(event, pointerIndex); Loading core/java/android/widget/ImageButton.java +10 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package android.widget; import static android.view.flags.Flags.enableArrowIconOnHoverWhenClickable; import static android.view.flags.Flags.FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE; import android.annotation.FlaggedApi; import android.content.Context; import android.util.AttributeSet; import android.view.InputDevice; Loading Loading @@ -98,11 +102,16 @@ public class ImageButton extends ImageView { return ImageButton.class.getName(); } @FlaggedApi(FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE) @Override public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) { if (getPointerIcon() == null && isClickable() && isEnabled() && event.isFromSource(InputDevice.SOURCE_MOUSE)) { return PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_HAND); int pointerIcon = enableArrowIconOnHoverWhenClickable() ? PointerIcon.TYPE_ARROW : PointerIcon.TYPE_HAND; return PointerIcon.getSystemIcon(getContext(), pointerIcon); } return super.onResolvePointerIcon(event, pointerIndex); } Loading core/java/android/widget/RadialTimePickerView.java +9 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,11 @@ package android.widget; import static android.view.flags.Flags.enableArrowIconOnHoverWhenClickable; import static android.view.flags.Flags.FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE; import android.animation.ObjectAnimator; import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.content.Context; import android.content.res.ColorStateList; Loading Loading @@ -1056,6 +1060,7 @@ public class RadialTimePickerView extends View { invalidate(); } @FlaggedApi(FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE) @Override public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) { if (!isEnabled()) { Loading @@ -1064,7 +1069,10 @@ public class RadialTimePickerView extends View { if (event.isFromSource(InputDevice.SOURCE_MOUSE)) { final int degrees = getDegreesFromXY(event.getX(), event.getY(), false); if (degrees != -1) { return PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_HAND); int pointerIcon = enableArrowIconOnHoverWhenClickable() ? PointerIcon.TYPE_ARROW : PointerIcon.TYPE_HAND; return PointerIcon.getSystemIcon(getContext(), pointerIcon); } } return super.onResolvePointerIcon(event, pointerIndex); Loading core/java/android/widget/SimpleMonthView.java +9 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package android.widget; import static android.view.flags.Flags.enableArrowIconOnHoverWhenClickable; import static android.view.flags.Flags.FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE; import android.annotation.FlaggedApi; import android.annotation.Nullable; import android.content.Context; import android.content.res.ColorStateList; Loading Loading @@ -1037,6 +1041,7 @@ class SimpleMonthView extends View { return true; } @FlaggedApi(FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE) @Override public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) { if (!isEnabled()) { Loading @@ -1049,7 +1054,10 @@ class SimpleMonthView extends View { final int y = (int) (event.getY() + 0.5f); final int dayUnderPointer = getDayAtLocation(x, y); if (dayUnderPointer >= 0) { return PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_HAND); int pointerIcon = enableArrowIconOnHoverWhenClickable() ? PointerIcon.TYPE_ARROW : PointerIcon.TYPE_HAND; return PointerIcon.getSystemIcon(getContext(), pointerIcon); } } return super.onResolvePointerIcon(event, pointerIndex); Loading Loading
core/java/android/view/flags/view_flags.aconfig +8 −1 Original line number Diff line number Diff line Loading @@ -42,3 +42,10 @@ flag { # Referenced in WM where WM starts before DeviceConfig is_fixed_read_only: true } flag { name: "enable_arrow_icon_on_hover_when_clickable" namespace: "toolkit" description: "Enable default arrow icon when hovering on buttons or clickable widgets." bug: "299269803" }
core/java/android/widget/Button.java +12 −3 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package android.widget; import static android.view.flags.Flags.enableArrowIconOnHoverWhenClickable; import static android.view.flags.Flags.FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE; import android.annotation.FlaggedApi; import android.content.Context; import android.util.AttributeSet; import android.view.InputDevice; Loading @@ -24,7 +28,6 @@ import android.view.MotionEvent; import android.view.PointerIcon; import android.widget.RemoteViews.RemoteView; /** * A user interface element the user can tap or click to perform an action. * Loading Loading @@ -172,10 +175,16 @@ public class Button extends TextView { return Button.class.getName(); } @FlaggedApi(FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE) @Override public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) { if (getPointerIcon() == null && isClickable() && isEnabled() && event.isFromSource(InputDevice.SOURCE_MOUSE)) { // By default the pointer icon is an arrow. More specifically, when the pointer icon is set // to null, it will be an arrow. Therefore, we don't need to change the icon when // enableArrowIconOnHoverWhenClickable() and the pointer icon is a null. We only need to do // that when we want the hand icon for hover. if (!enableArrowIconOnHoverWhenClickable() && getPointerIcon() == null && isClickable() && isEnabled() && event.isFromSource(InputDevice.SOURCE_MOUSE) ) { return PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_HAND); } return super.onResolvePointerIcon(event, pointerIndex); Loading
core/java/android/widget/ImageButton.java +10 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package android.widget; import static android.view.flags.Flags.enableArrowIconOnHoverWhenClickable; import static android.view.flags.Flags.FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE; import android.annotation.FlaggedApi; import android.content.Context; import android.util.AttributeSet; import android.view.InputDevice; Loading Loading @@ -98,11 +102,16 @@ public class ImageButton extends ImageView { return ImageButton.class.getName(); } @FlaggedApi(FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE) @Override public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) { if (getPointerIcon() == null && isClickable() && isEnabled() && event.isFromSource(InputDevice.SOURCE_MOUSE)) { return PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_HAND); int pointerIcon = enableArrowIconOnHoverWhenClickable() ? PointerIcon.TYPE_ARROW : PointerIcon.TYPE_HAND; return PointerIcon.getSystemIcon(getContext(), pointerIcon); } return super.onResolvePointerIcon(event, pointerIndex); } Loading
core/java/android/widget/RadialTimePickerView.java +9 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,11 @@ package android.widget; import static android.view.flags.Flags.enableArrowIconOnHoverWhenClickable; import static android.view.flags.Flags.FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE; import android.animation.ObjectAnimator; import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.content.Context; import android.content.res.ColorStateList; Loading Loading @@ -1056,6 +1060,7 @@ public class RadialTimePickerView extends View { invalidate(); } @FlaggedApi(FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE) @Override public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) { if (!isEnabled()) { Loading @@ -1064,7 +1069,10 @@ public class RadialTimePickerView extends View { if (event.isFromSource(InputDevice.SOURCE_MOUSE)) { final int degrees = getDegreesFromXY(event.getX(), event.getY(), false); if (degrees != -1) { return PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_HAND); int pointerIcon = enableArrowIconOnHoverWhenClickable() ? PointerIcon.TYPE_ARROW : PointerIcon.TYPE_HAND; return PointerIcon.getSystemIcon(getContext(), pointerIcon); } } return super.onResolvePointerIcon(event, pointerIndex); Loading
core/java/android/widget/SimpleMonthView.java +9 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ package android.widget; import static android.view.flags.Flags.enableArrowIconOnHoverWhenClickable; import static android.view.flags.Flags.FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE; import android.annotation.FlaggedApi; import android.annotation.Nullable; import android.content.Context; import android.content.res.ColorStateList; Loading Loading @@ -1037,6 +1041,7 @@ class SimpleMonthView extends View { return true; } @FlaggedApi(FLAG_ENABLE_ARROW_ICON_ON_HOVER_WHEN_CLICKABLE) @Override public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) { if (!isEnabled()) { Loading @@ -1049,7 +1054,10 @@ class SimpleMonthView extends View { final int y = (int) (event.getY() + 0.5f); final int dayUnderPointer = getDayAtLocation(x, y); if (dayUnderPointer >= 0) { return PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_HAND); int pointerIcon = enableArrowIconOnHoverWhenClickable() ? PointerIcon.TYPE_ARROW : PointerIcon.TYPE_HAND; return PointerIcon.getSystemIcon(getContext(), pointerIcon); } } return super.onResolvePointerIcon(event, pointerIndex); Loading