// 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.

#ifndef ASH_SYSTEM_TRAY_DRAG_CONTROLLER_H_
#define ASH_SYSTEM_TRAY_DRAG_CONTROLLER_H_

#include "ash/ash_export.h"
#include "ash/shelf/shelf.h"
#include "ui/views/view.h"

namespace ash {
class TrayBackgroundView;

// The TrayDragController helps to process the swiping events that happened on
// TrayBackgroundView or TrayBubbleView. Not all the TrayBackgroundView can be
// dragged currently. Only ImeMenuTray, SystemTray, PaletteTray,
// WebNotificationTray and their associated tray bubbles can be dragged.
class ASH_EXPORT TrayDragController {
 public:
  // The threshold of the velocity of the fling event.
  static constexpr float kFlingVelocity = 100.0f;

  explicit TrayDragController(Shelf* shelf);

  // Processes a gesture event and updates the dragging state of the bubble when
  // appropriate.
  void ProcessGestureEvent(ui::GestureEvent* event,
                           TrayBackgroundView* tray_view);

 private:
  // Gesture related functions:
  void StartGestureDrag(const ui::GestureEvent& gesture);
  void UpdateGestureDrag(const ui::GestureEvent& gesture);
  void CompleteGestureDrag(const ui::GestureEvent& gesture);

  // Update the bounds of the tray bubble according to
  // |gesture_drag_amount_|.
  void UpdateBubbleBounds();

  // Return true if the bubble should be shown (i.e., animated upward to
  // be made fully visible) after a sequence of scroll events terminated by
  // |sequence_end|. Otherwise return false, indicating that the
  // partially-visible bubble should be animated downward and made fully
  // hidden.
  bool ShouldShowBubbleAfterScrollSequence(
      const ui::GestureEvent& sequence_end);

  // The shelf containing the TrayBackgroundView.
  Shelf* shelf_;

  // The specific TrayBackgroundView that dragging happened on. e.g, SystemTray.
  TrayBackgroundView* tray_view_ = nullptr;

  // The original bounds of the tray bubble.
  gfx::Rect tray_bubble_bounds_;

  // Tracks the amount of the drag. Only valid if |is_in_drag_| is true.
  float gesture_drag_amount_ = 0.f;

  // True if the user is in the process of gesture-dragging on
  // TrayBackgroundView to open the tray bubble, or on the already-opened
  // TrayBubbleView to close it. Otherwise false.
  bool is_in_drag_ = false;

  // True if the dragging happened on the bubble view, false if it happened on
  // the tray view. Note, only valid if |is_in_drag_| is true.
  bool is_on_bubble_ = false;

  DISALLOW_COPY_AND_ASSIGN(TrayDragController);
};

}  // namespace ash

#endif  // ASH_SYSTEM_TRAY_DRAG_CONTROLLER_H_
