1 /*
2  *  Copyright (C) 2017 Christian Browet
3  *  This file is part of Kodi - https://kodi.tv
4  *
5  *  SPDX-License-Identifier: GPL-2.0-or-later
6  *  See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "threads/Event.h"
12 #include "utils/Geometry.h"
13 
14 #include <androidjni/Context.h>
15 #include <androidjni/JNIBase.h>
16 #include <androidjni/Surface.h>
17 #include <androidjni/SurfaceHolder.h>
18 
19 class CJNIXBMCMainView : virtual public CJNIBase, public CJNISurfaceHolderCallback, public CJNIInterfaceImplem<CJNIXBMCMainView>
20 {
21 public:
22   CJNIXBMCMainView(CJNISurfaceHolderCallback* callback);
23   ~CJNIXBMCMainView() override = default;
24 
25   static void RegisterNatives(JNIEnv* env);
26 
27   // CJNISurfaceHolderCallback interface
28   void surfaceChanged(CJNISurfaceHolder holder, int format, int width, int height) override;
29   void surfaceCreated(CJNISurfaceHolder holder) override;
30   void surfaceDestroyed(CJNISurfaceHolder holder) override;
31 
32   void attach(const jobject& thiz);
33   bool waitForSurface(unsigned int millis);
isActive()34   bool isActive() { return m_surfaceCreated.Signaled(); }
35   CJNISurface getSurface();
36   bool isCreated() const;
37 
38 protected:
39   static CJNIXBMCMainView* m_instance;
40   CJNISurfaceHolderCallback* m_callback;
41   static CEvent m_surfaceCreated;
42 
43   static void _attach(JNIEnv* env, jobject thiz);
44   static void _surfaceChanged(JNIEnv* env, jobject thiz, jobject holder, jint format, jint width, jint height);
45   static void _surfaceCreated(JNIEnv* env, jobject thiz, jobject holder);
46   static void _surfaceDestroyed(JNIEnv* env, jobject thiz, jobject holder);
47 };
48