| // Copyright (c) 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 "chrome/browser/ui/android/validation_message_bubble_android.h" |
| |
| #include "base/android/jni_string.h" |
| #include "content/public/browser/android/content_view_core.h" |
| #include "content/public/browser/render_view_host.h" |
| #include "content/public/browser/web_contents.h" |
| #include "jni/ValidationMessageBubble_jni.h" |
| #include "ui/gfx/rect.h" |
| |
| using base::android::ConvertUTF16ToJavaString; |
| using content::ContentViewCore; |
| using content::RenderWidgetHost; |
| |
| namespace { |
| |
| inline ContentViewCore* GetContentViewCoreFrom(RenderWidgetHost* widget_host) { |
| return ContentViewCore::FromWebContents( |
| content::WebContents::FromRenderViewHost( |
| content::RenderViewHost::From(widget_host))); |
| } |
| |
| } |
| |
| ValidationMessageBubbleAndroid::ValidationMessageBubbleAndroid( |
| RenderWidgetHost* widget_host, |
| const gfx::Rect& anchor_in_root_view, |
| const string16& main_text, |
| const string16& sub_text) { |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| java_validation_message_bubble_.Reset( |
| Java_ValidationMessageBubble_createAndShow( |
| env, |
| GetContentViewCoreFrom(widget_host)->GetJavaObject().obj(), |
| anchor_in_root_view.x(), |
| anchor_in_root_view.y(), |
| anchor_in_root_view.width(), |
| anchor_in_root_view.height(), |
| ConvertUTF16ToJavaString(env, main_text).obj(), |
| ConvertUTF16ToJavaString(env, sub_text).obj())); |
| } |
| |
| ValidationMessageBubbleAndroid::~ValidationMessageBubbleAndroid() { |
| Java_ValidationMessageBubble_close(base::android::AttachCurrentThread(), |
| java_validation_message_bubble_.obj()); |
| } |
| |
| void ValidationMessageBubbleAndroid::SetPositionRelativeToAnchor( |
| RenderWidgetHost* widget_host, const gfx::Rect& anchor_in_root_view) { |
| Java_ValidationMessageBubble_setPositionRelativeToAnchor( |
| base::android::AttachCurrentThread(), |
| java_validation_message_bubble_.obj(), |
| GetContentViewCoreFrom(widget_host)->GetJavaObject().obj(), |
| anchor_in_root_view.x(), |
| anchor_in_root_view.y(), |
| anchor_in_root_view.width(), |
| anchor_in_root_view.height()); |
| } |
| |
| // static |
| bool ValidationMessageBubbleAndroid::Register(JNIEnv* env) { |
| return RegisterNativesImpl(env); |
| } |
| |
| namespace chrome { |
| |
| scoped_ptr<ValidationMessageBubble> ValidationMessageBubble::CreateAndShow( |
| RenderWidgetHost* widget_host, |
| const gfx::Rect& anchor_in_root_view, |
| const string16& main_text, |
| const string16& sub_text) { |
| return scoped_ptr<ValidationMessageBubble>(new ValidationMessageBubbleAndroid( |
| widget_host, anchor_in_root_view, main_text, sub_text)).Pass(); |
| } |
| |
| } // namespace chrome |