Index: ui/platform_window/android/platform_window_android.cc |
diff --git a/ui/platform_window/android/platform_window_android.cc b/ui/platform_window/android/platform_window_android.cc |
index 0cfdc6bf8504e06f67ff6fd03f1ec7e036572ff3..63eaabbff80224e6aede9ecf3b0dafc79dc1bc7c 100644 |
--- a/ui/platform_window/android/platform_window_android.cc |
+++ b/ui/platform_window/android/platform_window_android.cc |
@@ -52,6 +52,12 @@ bool PlatformWindowAndroid::Register(JNIEnv* env) { |
return RegisterNativesImpl(env); |
} |
+//static |
+PlatformWindowAndroid* PlatformWindowAndroid::From( |
+ PlatformWindow* platform_window) { |
+ return static_cast<PlatformWindowAndroid*>(platform_window); |
+} |
+ |
PlatformWindowAndroid::PlatformWindowAndroid(PlatformWindowDelegate* delegate) |
: delegate_(delegate), |
window_(NULL), |
@@ -70,6 +76,25 @@ PlatformWindowAndroid::~PlatformWindowAndroid() { |
} |
} |
+void PlatformWindowAndroid::AttachToActivity( |
+ JNIEnv* env, |
+ const base::android::JavaRef<jobject>& activity) { |
+ DCHECK(!IsAttachedToActivity()); |
+ DCHECK(!activity.is_null()); |
+ base::android::ScopedJavaLocalRef<jobject> jpwa = |
+ Java_PlatformWindowAndroid_createForActivity( |
+ env, |
+ activity.obj(), |
+ reinterpret_cast<jlong>(this), |
+ reinterpret_cast<jlong>(&platform_ime_controller_)); |
+ java_platform_window_android_ = JavaObjectWeakGlobalRef(env, jpwa.obj()); |
+} |
+ |
+bool PlatformWindowAndroid::IsAttachedToActivity() const { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ return !java_platform_window_android_.get(env).is_null(); |
+} |
+ |
void PlatformWindowAndroid::Destroy(JNIEnv* env, jobject obj) { |
delegate_->OnClosed(); |
} |
@@ -154,14 +179,7 @@ void PlatformWindowAndroid::ReleaseWindow() { |
// PlatformWindowAndroid, PlatformWindow implementation: |
void PlatformWindowAndroid::Show() { |
- if (!java_platform_window_android_.is_empty()) |
- return; |
- JNIEnv* env = base::android::AttachCurrentThread(); |
- java_platform_window_android_ = JavaObjectWeakGlobalRef( |
- env, Java_PlatformWindowAndroid_createForActivity( |
- env, base::android::GetApplicationContext(), |
- reinterpret_cast<jlong>(this), |
- reinterpret_cast<jlong>(&platform_ime_controller_)).obj()); |
+ DCHECK(IsAttachedToActivity()); |
} |
void PlatformWindowAndroid::Hide() { |