10f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
50f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#ifndef UI_BASE_ANDROID_WINDOW_ANDROID_H_
60f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#define UI_BASE_ANDROID_WINDOW_ANDROID_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <jni.h>
9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <vector>
100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/android/jni_weak_ref.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/scoped_java_ref.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/observer_list.h"
135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "base/time/time.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/ui_base_export.h"
15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/gfx/vector2d_f.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class WindowAndroidCompositor;
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class WindowAndroidObserver;
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Android implementation of the activity window.
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class UI_BASE_EXPORT WindowAndroid {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  WindowAndroid(JNIEnv* env, jobject obj, jlong vsync_period);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Destroy(JNIEnv* env, jobject obj);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static bool RegisterWindowAndroid(JNIEnv* env);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // The content offset is used to translate snapshots to the correct part of
34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // the window.
35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  void set_content_offset(const gfx::Vector2dF& content_offset) {
36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    content_offset_ = content_offset;
37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  gfx::Vector2dF content_offset() const {
406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    return content_offset_;
416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  }
426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Compositor callback relay.
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void OnCompositingDidCommit();
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  void AttachCompositor(WindowAndroidCompositor* compositor);
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void DetachCompositor();
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void AddObserver(WindowAndroidObserver* observer);
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void RemoveObserver(WindowAndroidObserver* observer);
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  WindowAndroidCompositor* GetCompositor() { return compositor_; }
5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void RequestVSyncUpdate();
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void SetNeedsAnimate();
565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  void OnVSync(JNIEnv* env, jobject obj, jlong time_micros);
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  void Animate(base::TimeTicks begin_frame_time);
585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~WindowAndroid();
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  JavaObjectWeakGlobalRef weak_java_window_;
63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  gfx::Vector2dF content_offset_;
6423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  WindowAndroidCompositor* compositor_;
655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  base::TimeDelta vsync_period_;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ObserverList<WindowAndroidObserver> observer_list_;
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(WindowAndroid);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ui
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif  // UI_BASE_ANDROID_WINDOW_ANDROID_H_
75