Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Unified Diff: components/view_manager/native_viewport/platform_viewport_android.cc

Issue 1180573004: android: Introduce a ui::PlatformWindow implementation for android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix-win-gn Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/view_manager/native_viewport/platform_viewport_android.cc
diff --git a/components/view_manager/native_viewport/platform_viewport_android.cc b/components/view_manager/native_viewport/platform_viewport_android.cc
deleted file mode 100644
index f5d47be23d3ab45003180d295436b2b26ac290f8..0000000000000000000000000000000000000000
--- a/components/view_manager/native_viewport/platform_viewport_android.cc
+++ /dev/null
@@ -1,217 +0,0 @@
-// Copyright 2013 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.
-
-#include "components/view_manager/native_viewport/platform_viewport_android.h"
-
-#include <android/input.h>
-#include <android/native_window_jni.h>
-
-#include "base/android/jni_android.h"
-#include "components/view_manager/native_viewport/platform_viewport_headless.h"
-#include "jni/PlatformViewportAndroid_jni.h"
-#include "mojo/converters/geometry/geometry_type_converters.h"
-#include "mojo/converters/input_events/input_events_type_converters.h"
-#include "ui/events/event.h"
-#include "ui/events/keycodes/keyboard_code_conversion_android.h"
-#include "ui/gfx/geometry/point.h"
-
-namespace native_viewport {
-namespace {
-
-mojo::EventType MotionEventActionToEventType(jint action) {
- switch (action) {
- case AMOTION_EVENT_ACTION_DOWN:
- case AMOTION_EVENT_ACTION_POINTER_DOWN:
- return mojo::EVENT_TYPE_POINTER_DOWN;
- case AMOTION_EVENT_ACTION_UP:
- case AMOTION_EVENT_ACTION_POINTER_UP:
- return mojo::EVENT_TYPE_POINTER_UP;
- case AMOTION_EVENT_ACTION_MOVE:
- return mojo::EVENT_TYPE_POINTER_MOVE;
- case AMOTION_EVENT_ACTION_CANCEL:
- return mojo::EVENT_TYPE_POINTER_CANCEL;
- case AMOTION_EVENT_ACTION_OUTSIDE:
- case AMOTION_EVENT_ACTION_HOVER_MOVE:
- case AMOTION_EVENT_ACTION_SCROLL:
- case AMOTION_EVENT_ACTION_HOVER_ENTER:
- case AMOTION_EVENT_ACTION_HOVER_EXIT:
- default:
- NOTIMPLEMENTED() << "Unimplemented motion action: " << action;
- }
- return mojo::EVENT_TYPE_UNKNOWN;
-}
-
-} // namespace
-
-////////////////////////////////////////////////////////////////////////////////
-// PlatformViewportAndroid, public:
-
-// static
-bool PlatformViewportAndroid::Register(JNIEnv* env) {
- return RegisterNativesImpl(env);
-}
-
-PlatformViewportAndroid::PlatformViewportAndroid(Delegate* delegate)
- : delegate_(delegate),
- window_(NULL),
- id_generator_(0),
- weak_factory_(this) {
-}
-
-PlatformViewportAndroid::~PlatformViewportAndroid() {
- if (window_)
- ReleaseWindow();
- if (!java_platform_viewport_android_.is_empty()) {
- JNIEnv* env = base::android::AttachCurrentThread();
- Java_PlatformViewportAndroid_detach(
- env, java_platform_viewport_android_.get(env).obj());
- }
-}
-
-void PlatformViewportAndroid::Destroy(JNIEnv* env, jobject obj) {
- delegate_->OnDestroyed();
-}
-
-void PlatformViewportAndroid::SurfaceCreated(JNIEnv* env,
- jobject obj,
- jobject jsurface,
- float device_pixel_ratio) {
- base::android::ScopedJavaLocalRef<jobject> protector(env, jsurface);
- // Note: This ensures that any local references used by
- // ANativeWindow_fromSurface are released immediately. This is needed as a
- // workaround for https://code.google.com/p/android/issues/detail?id=68174
- {
- base::android::ScopedJavaLocalFrame scoped_local_reference_frame(env);
- window_ = ANativeWindow_fromSurface(env, jsurface);
- }
- delegate_->OnAcceleratedWidgetAvailable(window_, device_pixel_ratio);
-}
-
-void PlatformViewportAndroid::SurfaceDestroyed(JNIEnv* env, jobject obj) {
- DCHECK(window_);
- delegate_->OnAcceleratedWidgetDestroyed();
- ReleaseWindow();
-}
-
-void PlatformViewportAndroid::SurfaceSetSize(JNIEnv* env,
- jobject obj,
- jint width,
- jint height,
- jfloat density) {
- size_ = gfx::Size(static_cast<int>(width), static_cast<int>(height));
- delegate_->OnMetricsChanged(size_, density);
-}
-
-bool PlatformViewportAndroid::TouchEvent(JNIEnv* env,
- jobject obj,
- jlong time_ms,
- jint masked_action,
- jint pointer_id,
- jfloat x,
- jfloat y,
- jfloat pressure,
- jfloat touch_major,
- jfloat touch_minor,
- jfloat orientation,
- jfloat h_wheel,
- jfloat v_wheel) {
- mojo::EventPtr event(mojo::Event::New());
- event->time_stamp =
- (base::TimeTicks() + base::TimeDelta::FromMilliseconds(time_ms))
- .ToInternalValue();
- event->action = MotionEventActionToEventType(masked_action);
- if (event->action == mojo::EVENT_TYPE_UNKNOWN)
- return false;
-
- event->pointer_data = mojo::PointerData::New();
- event->pointer_data->pointer_id = pointer_id;
- event->pointer_data->x = x;
- event->pointer_data->y = y;
- event->pointer_data->screen_x = x;
- event->pointer_data->screen_y = y;
- event->pointer_data->pressure = pressure;
- event->pointer_data->radius_major = touch_major;
- event->pointer_data->radius_minor = touch_minor;
- event->pointer_data->orientation = orientation;
- event->pointer_data->horizontal_wheel = h_wheel;
- event->pointer_data->vertical_wheel = v_wheel;
- delegate_->OnEvent(event.Pass());
-
- return true;
-}
-
-bool PlatformViewportAndroid::KeyEvent(JNIEnv* env,
- jobject obj,
- bool pressed,
- jint key_code,
- jint unicode_character) {
- ui::KeyEvent event(pressed ? ui::ET_KEY_PRESSED : ui::ET_KEY_RELEASED,
- ui::KeyboardCodeFromAndroidKeyCode(key_code), 0);
- event.set_platform_keycode(key_code);
- delegate_->OnEvent(mojo::Event::From(event));
- if (pressed && unicode_character) {
- ui::KeyEvent char_event(unicode_character,
- ui::KeyboardCodeFromAndroidKeyCode(key_code), 0);
- char_event.set_platform_keycode(key_code);
- delegate_->OnEvent(mojo::Event::From(char_event));
- }
- return true;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// PlatformViewportAndroid, PlatformViewport implementation:
-
-void PlatformViewportAndroid::Init(const gfx::Rect& bounds) {
- JNIEnv* env = base::android::AttachCurrentThread();
- java_platform_viewport_android_ = JavaObjectWeakGlobalRef(
- env, Java_PlatformViewportAndroid_createForActivity(
- env, base::android::GetApplicationContext(),
- reinterpret_cast<jlong>(this)).obj());
-}
-
-void PlatformViewportAndroid::Show() {
- // Nothing to do. View is created visible.
-}
-
-void PlatformViewportAndroid::Hide() {
- // Nothing to do. View is always visible.
-}
-
-void PlatformViewportAndroid::Close() {
- // TODO(beng): close activity containing MojoView?
-
- // TODO(beng): perform this in response to view destruction.
- delegate_->OnDestroyed();
-}
-
-gfx::Size PlatformViewportAndroid::GetSize() {
- return size_;
-}
-
-void PlatformViewportAndroid::SetBounds(const gfx::Rect& bounds) {
- NOTIMPLEMENTED();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// PlatformViewportAndroid, private:
-
-void PlatformViewportAndroid::ReleaseWindow() {
- ANativeWindow_release(window_);
- window_ = NULL;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// PlatformViewport, public:
-
-// static
-scoped_ptr<PlatformViewport> PlatformViewport::Create(Delegate* delegate,
- bool headless) {
- if (headless)
- return PlatformViewportHeadless::Create(delegate);
-
- return scoped_ptr<PlatformViewport>(
- new PlatformViewportAndroid(delegate)).Pass();
-}
-
-} // namespace native_viewport

Powered by Google App Engine
This is Rietveld 408576698