// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef UI_ANDROID_MODAL_DIALOG_MANAGER_BRIDGE_H_
#define UI_ANDROID_MODAL_DIALOG_MANAGER_BRIDGE_H_

#include "base/android/scoped_java_ref.h"
#include "ui/android/ui_android_export.h"

namespace ui {

// The JNI bridge for the Java's `ModalDialogManager`. This bridge's lifetime is
// managed by the Java's `ModalDialogManager`.
class UI_ANDROID_EXPORT ModalDialogManagerBridge {
 public:
  // Java's `TokenHolder#INVALID_TOKEN`.
  constexpr static int kInvalidDialogToken = -1;

  // Mirrors Java's `ModalDialogManager#ModalDialogType`.
  // TODO(crbug.com/365081468): IntDef that enum in C++.
  enum class ModalDialogType {
    kTab = 0,
    kApp,
  };

  explicit ModalDialogManagerBridge(const jni_zero::JavaRef<jobject>& manager);
  ~ModalDialogManagerBridge();

  // Suspend / resume all dialogs of `dialog_type`, for the current Window.
  int SuspendModalDialog(ModalDialogType dialog_type);
  void ResumeModalDialog(ModalDialogType dialog_type, int token);

  void ShowDialog(
      base::android::ScopedJavaGlobalRef<jobject> j_modal_dialog_wrapper,
      ModalDialogType dialog_type);
  void DismissDialog(
      base::android::ScopedJavaGlobalRef<jobject> j_modal_dialog_wrapper);

 private:
  // The java's `ModalDialogManagerBridge`.
  base::android::ScopedJavaGlobalRef<jobject> j_modal_dialog_manager_bridge_;
};
}  // namespace ui

#endif  // UI_ANDROID_MODAL_DIALOG_MANAGER_BRIDGE_H_
