aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/app/src/main/java/com/wireguard/android/widget/fab/TouchDelegateGroup.java
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-05-29 18:37:14 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2018-05-29 19:03:47 +0200
commit09833a1ba51ca01680b9929410bc70218d985eb4 (patch)
tree1b204c71a221bfa9a3aa1b5ec2a0a4518d2e87e3 /app/src/main/java/com/wireguard/android/widget/fab/TouchDelegateGroup.java
parentSharedLibraryLoader: introduce to work around Samsung PackageManager bugs (diff)
downloadwireguard-android-09833a1ba51ca01680b9929410bc70218d985eb4.tar.xz
wireguard-android-09833a1ba51ca01680b9929410bc70218d985eb4.zip
FloatingActionButton: import cleaned up getbase code
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'app/src/main/java/com/wireguard/android/widget/fab/TouchDelegateGroup.java')
-rw-r--r--app/src/main/java/com/wireguard/android/widget/fab/TouchDelegateGroup.java78
1 files changed, 78 insertions, 0 deletions
diff --git a/app/src/main/java/com/wireguard/android/widget/fab/TouchDelegateGroup.java b/app/src/main/java/com/wireguard/android/widget/fab/TouchDelegateGroup.java
new file mode 100644
index 00000000..9aa221ed
--- /dev/null
+++ b/app/src/main/java/com/wireguard/android/widget/fab/TouchDelegateGroup.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright © 2014 Jerzy Chalupski
+ * Copyright © 2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+package com.wireguard.android.widget.fab;
+
+import android.graphics.Rect;
+import android.support.annotation.NonNull;
+import android.view.MotionEvent;
+import android.view.TouchDelegate;
+import android.view.View;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TouchDelegateGroup extends TouchDelegate {
+ private static final Rect USELESS_HACKY_RECT = new Rect();
+ private final List<TouchDelegate> mTouchDelegates = new ArrayList<>();
+ private TouchDelegate mCurrentTouchDelegate;
+ private boolean mEnabled;
+
+ public TouchDelegateGroup(final View uselessHackyView) {
+ super(USELESS_HACKY_RECT, uselessHackyView);
+ }
+
+ public void addTouchDelegate(@NonNull final TouchDelegate touchDelegate) {
+ mTouchDelegates.add(touchDelegate);
+ }
+
+ public void removeTouchDelegate(final TouchDelegate touchDelegate) {
+ mTouchDelegates.remove(touchDelegate);
+ if (mCurrentTouchDelegate == touchDelegate) {
+ mCurrentTouchDelegate = null;
+ }
+ }
+
+ public void clearTouchDelegates() {
+ mTouchDelegates.clear();
+ mCurrentTouchDelegate = null;
+ }
+
+ @Override
+ public boolean onTouchEvent(@NonNull final MotionEvent event) {
+ if (!mEnabled) return false;
+
+ TouchDelegate delegate = null;
+
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ for (int i = 0; i < mTouchDelegates.size(); i++) {
+ final TouchDelegate touchDelegate = mTouchDelegates.get(i);
+ if (touchDelegate.onTouchEvent(event)) {
+ mCurrentTouchDelegate = touchDelegate;
+ return true;
+ }
+ }
+ break;
+
+ case MotionEvent.ACTION_MOVE:
+ delegate = mCurrentTouchDelegate;
+ break;
+
+ case MotionEvent.ACTION_CANCEL:
+ case MotionEvent.ACTION_UP:
+ delegate = mCurrentTouchDelegate;
+ mCurrentTouchDelegate = null;
+ break;
+ }
+
+ return delegate != null && delegate.onTouchEvent(event);
+ }
+
+ public void setEnabled(final boolean enabled) {
+ mEnabled = enabled;
+ }
+}