diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-05-29 18:37:14 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-05-29 19:03:47 +0200 |
commit | 09833a1ba51ca01680b9929410bc70218d985eb4 (patch) | |
tree | 1b204c71a221bfa9a3aa1b5ec2a0a4518d2e87e3 /app/src/main/java/com/wireguard/android/widget/fab/TouchDelegateGroup.java | |
parent | SharedLibraryLoader: introduce to work around Samsung PackageManager bugs (diff) | |
download | wireguard-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.java | 78 |
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; + } +} |