Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3821)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/coordinator/CoordinatorLayoutForPointer.java

Issue 2878403002: Support setting mouse cursor icon in Android N. (Closed)
Patch Set: Support setting mouse cursor icon in Android N Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/coordinator/CoordinatorLayoutForPointer.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/coordinator/CoordinatorLayoutForPointer.java b/chrome/android/java/src/org/chromium/chrome/browser/coordinator/CoordinatorLayoutForPointer.java
new file mode 100644
index 0000000000000000000000000000000000000000..14b0de411fce7678456fa583dbeaa3c1783241f4
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/coordinator/CoordinatorLayoutForPointer.java
@@ -0,0 +1,45 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.coordinator;
+
+import android.content.Context;
+import android.os.Build;
+import android.support.design.widget.CoordinatorLayout;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.PointerIcon;
+import android.view.View;
+
+/**
+ * This class overrides {@link onResolvePointerIcon} method to correctly determine the pointer icon
+ * from a mouse motion event. This is needed because the default android impl does not consider
+ * view visibility.
+ */
+public class CoordinatorLayoutForPointer extends CoordinatorLayout {
+ public CoordinatorLayoutForPointer(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ private boolean isWithinBoundOfView(int x, int y, View view) {
+ return ((x >= view.getLeft() && x <= view.getRight())
+ && (y >= view.getTop() && y <= view.getBottom()));
+ }
+
+ @Override
+ public PointerIcon onResolvePointerIcon(MotionEvent event, int pointerIndex) {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) return null;
+
+ final int x = (int) event.getX(pointerIndex);
+ final int y = (int) event.getY(pointerIndex);
+ final int childrenCount = getChildCount();
+ for (int i = childrenCount - 1; i >= 0; --i) {
+ if (getChildAt(i).getVisibility() != VISIBLE) continue;
+ if (isWithinBoundOfView(x, y, getChildAt(i))) {
+ return getChildAt(i).onResolvePointerIcon(event, pointerIndex);
+ }
+ }
+ return super.onResolvePointerIcon(event, pointerIndex);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698