chromium/ui/events/android/drag_event_android.cc

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

#include "ui/events/android/drag_event_android.h"

#include <memory>

#include "base/android/jni_android.h"

using base::android::ScopedJavaLocalRef;
using base::android::AttachCurrentThread;

namespace ui {

DragEventAndroid::DragEventAndroid(
    JNIEnv* env,
    int action,
    const gfx::PointF& location,
    const gfx::PointF& screen_location,
    const std::vector<std::u16string>& mime_types,
    jstring content,
    jobjectArray filenames,
    jstring text,
    jstring html,
    jstring url)
    : action_(action),
      location_(location),
      screen_location_(screen_location),
      mime_types_(mime_types) {
  content_.Reset(env, content);
  filenames_.Reset(env, filenames);
  text_.Reset(env, text);
  html_.Reset(env, html);
  url_.Reset(env, url);
}

DragEventAndroid::~DragEventAndroid() {}

ScopedJavaLocalRef<jstring> DragEventAndroid::GetJavaContent() const {
  return ScopedJavaLocalRef<jstring>(content_);
}

ScopedJavaLocalRef<jobjectArray> DragEventAndroid::GetJavaFilenames() const {
  return ScopedJavaLocalRef<jobjectArray>(filenames_);
}

ScopedJavaLocalRef<jstring> DragEventAndroid::GetJavaText() const {
  return ScopedJavaLocalRef<jstring>(text_);
}

ScopedJavaLocalRef<jstring> DragEventAndroid::GetJavaHtml() const {
  return ScopedJavaLocalRef<jstring>(html_);
}

ScopedJavaLocalRef<jstring> DragEventAndroid::GetJavaUrl() const {
  return ScopedJavaLocalRef<jstring>(url_);
}

std::unique_ptr<DragEventAndroid> DragEventAndroid::CreateFor(
    const gfx::PointF& new_location) const {
  gfx::PointF new_screen_location =
      new_location + (screen_location() - location());
  JNIEnv* env = AttachCurrentThread();
  return std::make_unique<DragEventAndroid>(
      env, action_, new_location, new_screen_location, *mime_types_,
      content_.obj(), filenames_.obj(), text_.obj(), html_.obj(), url_.obj());
}

}  // namespace ui