1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef UI_BASE_ANDROID_WINDOW_ANDROID_H_ 6#define UI_BASE_ANDROID_WINDOW_ANDROID_H_ 7 8#include <jni.h> 9#include <vector> 10#include "base/android/jni_weak_ref.h" 11#include "base/android/scoped_java_ref.h" 12#include "base/observer_list.h" 13#include "base/time/time.h" 14#include "ui/base/ui_base_export.h" 15#include "ui/gfx/vector2d_f.h" 16 17namespace ui { 18 19class WindowAndroidCompositor; 20class WindowAndroidObserver; 21 22// Android implementation of the activity window. 23class UI_BASE_EXPORT WindowAndroid { 24 public: 25 WindowAndroid(JNIEnv* env, jobject obj, jlong vsync_period); 26 27 void Destroy(JNIEnv* env, jobject obj); 28 29 base::android::ScopedJavaLocalRef<jobject> GetJavaObject(); 30 31 static bool RegisterWindowAndroid(JNIEnv* env); 32 33 // The content offset is used to translate snapshots to the correct part of 34 // the window. 35 void set_content_offset(const gfx::Vector2dF& content_offset) { 36 content_offset_ = content_offset; 37 } 38 39 gfx::Vector2dF content_offset() const { 40 return content_offset_; 41 } 42 43 // Compositor callback relay. 44 void OnCompositingDidCommit(); 45 46 void AttachCompositor(WindowAndroidCompositor* compositor); 47 void DetachCompositor(); 48 49 void AddObserver(WindowAndroidObserver* observer); 50 void RemoveObserver(WindowAndroidObserver* observer); 51 52 WindowAndroidCompositor* GetCompositor() { return compositor_; } 53 54 void RequestVSyncUpdate(); 55 void SetNeedsAnimate(); 56 void OnVSync(JNIEnv* env, jobject obj, jlong time_micros); 57 void Animate(base::TimeTicks begin_frame_time); 58 59 private: 60 ~WindowAndroid(); 61 62 JavaObjectWeakGlobalRef weak_java_window_; 63 gfx::Vector2dF content_offset_; 64 WindowAndroidCompositor* compositor_; 65 base::TimeDelta vsync_period_; 66 67 ObserverList<WindowAndroidObserver> observer_list_; 68 69 DISALLOW_COPY_AND_ASSIGN(WindowAndroid); 70}; 71 72} // namespace ui 73 74#endif // UI_BASE_ANDROID_WINDOW_ANDROID_H_ 75