1 /*
2  *  Copyright (C) 2005-2018 Team Kodi
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 "AndroidUtils.h"
12 #include "rendering/gles/RenderSystemGLES.h"
13 #include "system_egl.h"
14 #include "threads/CriticalSection.h"
15 #include "threads/Timer.h"
16 #include "windowing/WinSystem.h"
17 
18 class CDecoderFilterManager;
19 class IDispResource;
20 
21 class CWinSystemAndroid : public CWinSystemBase, public ITimerCallback
22 {
23 public:
24   CWinSystemAndroid();
25   ~CWinSystemAndroid() override;
26 
27   bool InitWindowSystem() override;
28   bool DestroyWindowSystem() override;
29 
30   bool CreateNewWindow(const std::string& name,
31                        bool fullScreen,
32                        RESOLUTION_INFO& res) override;
33 
34   bool DestroyWindow() override;
35   void UpdateResolutions() override;
36 
37   void InitiateModeChange();
IsHdmiModeTriggered()38   bool IsHdmiModeTriggered() const { return m_HdmiModeTriggered; };
39   void SetHdmiState(bool connected);
40 
41   void UpdateDisplayModes();
42 
HasCursor()43   bool HasCursor() override { return false; };
44 
45   bool Hide() override;
46   bool Show(bool raise = true) override;
47   void Register(IDispResource *resource) override;
48   void Unregister(IDispResource *resource) override;
49 
50   void MessagePush(XBMC_Event *newEvent);
51 
52   // winevents override
53   bool MessagePump() override;
54   bool IsHDRDisplay() override;
55 
56 protected:
57   std::unique_ptr<KODI::WINDOWING::IOSScreenSaver> GetOSScreenSaverImpl() override;
58   void OnTimeout() override;
59 
60   CAndroidUtils *m_android;
61 
62   EGLDisplay m_nativeDisplay;
63   EGLNativeWindowType m_nativeWindow;
64 
65   int m_displayWidth;
66   int m_displayHeight;
67 
68   RENDER_STEREO_MODE m_stereo_mode;
69 
70   CTimer *m_dispResetTimer;
71 
72   CCriticalSection m_resourceSection;
73   std::vector<IDispResource*> m_resources;
74   CDecoderFilterManager *m_decoderFilterManager;
75 
76 private:
77   bool m_HdmiModeTriggered = false;
78   void UpdateResolutions(bool bUpdateDesktopRes);
79 };
80