// Path: app/src/main/java/com/bedrock/padder/helper/OnSwipeTouchListener.java
// public class OnSwipeTouchListener implements View.OnTouchListener {
// 
//     private GestureDetector gestureDetector;
// 
//     public OnSwipeTouchListener(Context c) {
//         gestureDetector = new GestureDetector(c, new GestureListener());
//     }
// 
//     public boolean onTouch(final View view, final MotionEvent motionEvent) {
//         return gestureDetector.onTouchEvent(motionEvent);
//     }
// 
//     private final class GestureListener extends GestureDetector.SimpleOnGestureListener {
// 
//         private static final int SWIPE_THRESHOLD = 100;
//         private static final int SWIPE_VELOCITY_THRESHOLD = 100;
// 
//         @Override
//         public boolean onDown(MotionEvent e) {
//             onTouch();
//             return true;
//         }
// 
//         @Override
//         public boolean onSingleTapUp(MotionEvent e) {
//             onClick();
//             return super.onSingleTapUp(e);
//         }
// 
//         @Override
//         public boolean onSingleTapConfirmed(MotionEvent e) {
//             onSingleClickConfirmed();
//             return super.onSingleTapConfirmed(e);
//         }
// 
//         @Override
//         public boolean onDoubleTap(MotionEvent e) {
//             onDoubleClick();
//             return super.onDoubleTap(e);
//         }
// 
//         @Override
//         public void onLongPress(MotionEvent e) {
//             onLongClick();
//             super.onLongPress(e);
//         }
// 
//         // Determines the fling velocity and then fires the appropriate swipe event accordingly
//         @Override
//         public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//             boolean result = false;
//             try {
//                 float diffY = e2.getY() - e1.getY();
//                 float diffX = e2.getX() - e1.getX();
//                 if (Math.abs(diffX) > Math.abs(diffY)) {
//                     if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
//                         if (diffX > 0) {
//                             onSwipeRight();
//                         } else {
//                             onSwipeLeft();
//                         }
//                     }
//                 } else {
//                     if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
//                         if (diffY > 0) {
//                             onSwipeDown();
//                         } else {
//                             onSwipeUp();
//                         }
//                     }
//                 }
//             } catch (Exception exception) {
//                 exception.printStackTrace();
//             }
//             return result;
//         }
//     }
// 
//     public void onTouch() {
//     }
// 
//     public void onSwipeRight() {
//     }
// 
//     public void onSwipeLeft() {
//     }
// 
//     public void onSwipeUp() {
//     }
// 
//     public void onSwipeDown() {
//     }
// 
//     public void onClick() {
//     }
// 
//     public void onDoubleClick() {
//     }
// 
//     public void onLongClick() {
//     }
// 
//     public void onSingleClickConfirmed() {
//     }
// }
// 
// Path: app/src/main/java/com/bedrock/padder/activity/MainActivity.java
// public static boolean isStopLoopOnSingle = false;
// 
// Path: app/src/main/java/com/bedrock/padder/model/tutorial/TimingListener.java
// public static boolean broadcast(Timing timing) {
//     int index = timings.indexOf(timing);
//     if (index >= 0) {
//         Timing listening = timings.get(index);
//         // timing configuration
//         int delay = (int) (timing.listenTime - listening.listenTime
//                 - (TUTORIAL_ANIMATION_DURATION + 100));
// 
//         if (listening.listener != null) {
//             listening.listener.onBroadcast(timing, delay);
//         }
//         timings.remove(index);
//         Log.w("broadcast", "Listener removed for " + timing.toString());
//         return true;
//     } else {
//         Log.w("broadcast", "No listener found for " + timing.toString());
//         return false;
//     }
// }


import android.app.Activity;
import android.util.Log;
import android.view.View;
import com.bedrock.padder.helper.OnSwipeTouchListener;
import static com.bedrock.padder.activity.MainActivity.isStopLoopOnSingle;
import static com.bedrock.padder.model.tutorial.TimingListener.broadcast;
            return normal;
        }
    }

    public Sound getLeft() {
        if (left.getDuration() > 0) {
            return left;
        } else {
            return normal;
        }
    }

    @Override
    public Sound getNormal() {
        return super.getNormal();
    }

    @Override
    void setPad() {
        if (normal != null && view != null && color != 0 && colorDef != 0 && activity != null) {
            // initialized check, normal should be not null
            view.setOnTouchListener(new OnSwipeTouchListener(activity) {
                @Override
                public void onTouch() {
                    setPadColor();
                    Log.d("Pad [Gesture]", "onTouch");
                }

                @Override
                public void onClick() {
// Path: app/src/main/java/com/bedrock/padder/helper/OnSwipeTouchListener.java
// public class OnSwipeTouchListener implements View.OnTouchListener {
// 
//     private GestureDetector gestureDetector;
// 
//     public OnSwipeTouchListener(Context c) {
//         gestureDetector = new GestureDetector(c, new GestureListener());
//     }
// 
//     public boolean onTouch(final View view, final MotionEvent motionEvent) {
//         return gestureDetector.onTouchEvent(motionEvent);
//     }
// 
//     private final class GestureListener extends GestureDetector.SimpleOnGestureListener {
// 
//         private static final int SWIPE_THRESHOLD = 100;
//         private static final int SWIPE_VELOCITY_THRESHOLD = 100;
// 
//         @Override
//         public boolean onDown(MotionEvent e) {
//             onTouch();
//             return true;
//         }
// 
//         @Override
//         public boolean onSingleTapUp(MotionEvent e) {
//             onClick();
//             return super.onSingleTapUp(e);
//         }
// 
//         @Override
//         public boolean onSingleTapConfirmed(MotionEvent e) {
//             onSingleClickConfirmed();
//             return super.onSingleTapConfirmed(e);
//         }
// 
//         @Override
//         public boolean onDoubleTap(MotionEvent e) {
//             onDoubleClick();
//             return super.onDoubleTap(e);
//         }
// 
//         @Override
//         public void onLongPress(MotionEvent e) {
//             onLongClick();
//             super.onLongPress(e);
//         }
// 
//         // Determines the fling velocity and then fires the appropriate swipe event accordingly
//         @Override
//         public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//             boolean result = false;
//             try {
//                 float diffY = e2.getY() - e1.getY();
//                 float diffX = e2.getX() - e1.getX();
//                 if (Math.abs(diffX) > Math.abs(diffY)) {
//                     if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
//                         if (diffX > 0) {
//                             onSwipeRight();
//                         } else {
//                             onSwipeLeft();
//                         }
//                     }
//                 } else {
//                     if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
//                         if (diffY > 0) {
//                             onSwipeDown();
//                         } else {
//                             onSwipeUp();
//                         }
//                     }
//                 }
//             } catch (Exception exception) {
//                 exception.printStackTrace();
//             }
//             return result;
//         }
//     }
// 
//     public void onTouch() {
//     }
// 
//     public void onSwipeRight() {
//     }
// 
//     public void onSwipeLeft() {
//     }
// 
//     public void onSwipeUp() {
//     }
// 
//     public void onSwipeDown() {
//     }
// 
//     public void onClick() {
//     }
// 
//     public void onDoubleClick() {
//     }
// 
//     public void onLongClick() {
//     }
// 
//     public void onSingleClickConfirmed() {
//     }
// }
// 
// Path: app/src/main/java/com/bedrock/padder/activity/MainActivity.java
// public static boolean isStopLoopOnSingle = false;
// 
// Path: app/src/main/java/com/bedrock/padder/model/tutorial/TimingListener.java
// public static boolean broadcast(Timing timing) {
//     int index = timings.indexOf(timing);
//     if (index >= 0) {
//         Timing listening = timings.get(index);
//         // timing configuration
//         int delay = (int) (timing.listenTime - listening.listenTime
//                 - (TUTORIAL_ANIMATION_DURATION + 100));
// 
//         if (listening.listener != null) {
//             listening.listener.onBroadcast(timing, delay);
//         }
//         timings.remove(index);
//         Log.w("broadcast", "Listener removed for " + timing.toString());
//         return true;
//     } else {
//         Log.w("broadcast", "No listener found for " + timing.toString());
//         return false;
//     }
// }


// Path: app/src/main/java/com/bedrock/padder/model/sound/GesturePad.java
import android.app.Activity;
import android.util.Log;
import android.view.View;
import com.bedrock.padder.helper.OnSwipeTouchListener;
import static com.bedrock.padder.activity.MainActivity.isStopLoopOnSingle;
import static com.bedrock.padder.model.tutorial.TimingListener.broadcast;

            return normal;
        }
    }

    public Sound getLeft() {
        if (left.getDuration() > 0) {
            return left;
        } else {
            return normal;
        }
    }

    @Override
    public Sound getNormal() {
        return super.getNormal();
    }

    @Override
    void setPad() {
        if (normal != null && view != null && color != 0 && colorDef != 0 && activity != null) {
            // initialized check, normal should be not null
            view.setOnTouchListener(new OnSwipeTouchListener(activity) {
                @Override
                public void onTouch() {
                    setPadColor();
                    Log.d("Pad [Gesture]", "onTouch");
                }

                @Override
                public void onClick() {
                    if (getNormal().isLooping && isStopLoopOnSingle) {