// Copyright 2015 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.compositor.layouts;

import org.chromium.chrome.browser.compositor.layouts.eventfilter.EdgeSwipeHandler;
import org.chromium.chrome.browser.compositor.layouts.eventfilter.EmptyEdgeSwipeHandler;
import org.chromium.chrome.browser.compositor.layouts.eventfilter.ScrollDirection;

/**
 * A {@link EdgeSwipeHandler} that takes a {@link LayoutProvider} and delegates all swipe events
 * to {@link LayoutProvider#getActiveLayout()}.
 */
public class EdgeSwipeHandlerLayoutDelegate extends EmptyEdgeSwipeHandler {
    private final LayoutProvider mLayoutProvider;

    /**
     * Creates an instance of the {@link EdgeSwipeHandlerLayoutDelegate}.
     * @param provider A {@link LayoutProvider} instance.
     */
    public EdgeSwipeHandlerLayoutDelegate(LayoutProvider provider) {
        mLayoutProvider = provider;
    }

    @Override
    public void swipeStarted(@ScrollDirection int direction, float x, float y) {
        if (mLayoutProvider.getActiveLayout() == null) return;
        mLayoutProvider.getActiveLayout().swipeStarted(LayoutManager.time(), direction, x, y);
    }

    @Override
    public void swipeUpdated(float x, float y, float dx, float dy, float tx, float ty) {
        if (mLayoutProvider.getActiveLayout() == null) return;
        mLayoutProvider.getActiveLayout().swipeUpdated(LayoutManager.time(), x, y, dx, dy, tx, ty);
    }

    @Override
    public void swipeFinished() {
        if (mLayoutProvider.getActiveLayout() == null) return;
        mLayoutProvider.getActiveLayout().swipeFinished(LayoutManager.time());
    }

    @Override
    public void swipeFlingOccurred(float x, float y, float tx, float ty, float vx, float vy) {
        if (mLayoutProvider.getActiveLayout() == null) return;
        mLayoutProvider.getActiveLayout().swipeFlingOccurred(
                LayoutManager.time(), x, y, tx, ty, vx, vy);
    }
}