10f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 50f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "ui/base/android/view_android.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/android/jni_android.h" 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/android/jni_weak_ref.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/android/scoped_java_ref.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "jni/ViewAndroid_jni.h" 110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "ui/base/android/window_android.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace ui { 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::android::AttachCurrentThread; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using base::android::ScopedJavaLocalRef; 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ViewAndroid::ViewAndroid(JNIEnv* env, jobject obj, WindowAndroid* window) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : weak_java_view_(env, obj), 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) window_android_(window) {} 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void ViewAndroid::Destroy(JNIEnv* env, jobject obj) { 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(obj && env->IsSameObject(weak_java_view_.get(env).obj(), obj)); 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) delete this; 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ScopedJavaLocalRef<jobject> ViewAndroid::GetJavaObject() { 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // It is mandatory to explicitly call destroy() before releasing the java 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // side object. This could be changed in future by adding CleanupReference 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // based destruct path; 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return weak_java_view_.get(AttachCurrentThread()); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WindowAndroid* ViewAndroid::GetWindowAndroid() { 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return window_android_; 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool ViewAndroid::RegisterViewAndroid(JNIEnv* env) { 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return RegisterNativesImpl(env); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ViewAndroid::~ViewAndroid() { 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)jlong Init(JNIEnv* env, jobject obj, jlong window) { 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ViewAndroid* view = new ViewAndroid( 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) env, obj, reinterpret_cast<ui::WindowAndroid*>(window)); 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return reinterpret_cast<intptr_t>(view); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace ui 52