/*
 *  Copyright 2018 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */
#ifndef SDK_ANDROID_SRC_JNI_LOGGING_LOGSINK_H_
#define SDK_ANDROID_SRC_JNI_LOGGING_LOGSINK_H_

#include <string>

#include "rtc_base/logging.h"
#include "sdk/android/native_api/jni/java_types.h"
#include "sdk/android/src/jni/jni_helpers.h"

namespace webrtc {
namespace jni {

class JNILogSink : public rtc::LogSink {
 public:
  JNILogSink(JNIEnv* env, const JavaRef<jobject>& j_logging);
  ~JNILogSink() override;

  void OnLogMessage(const std::string& msg,
                    rtc::LoggingSeverity severity,
                    const char* tag) override;
  void OnLogMessage(const std::string& msg) override;

 private:
  const ScopedJavaGlobalRef<jobject> j_logging_;
};

}  // namespace jni
}  // namespace webrtc

#endif  // SDK_ANDROID_SRC_JNI_LOGGING_LOGSINK_H_
