MythTV master
mythdisplayandroid.cpp
Go to the documentation of this file.
1// Qt
2#include <QtGlobal>
3#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
4#include <QtAndroidExtras>
5#else
6#include <QCoreApplication>
7#include <QJniEnvironment>
8#include <QJniObject>
9#define QAndroidJniEnvironment QJniEnvironment
10#define QAndroidJniObject QJniObject
11#endif
12
13// MythTV
15#include "mythdisplayandroid.h"
16
17#define LOC QString("Display: ")
18
20 : MythDisplay()
21{
22 Initialise();
23}
24
26{
27}
28
30{
32#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
33 QAndroidJniObject activity = QtAndroid::androidActivity();
34#else
35 QJniObject activity = QNativeInterface::QAndroidApplication::context();
36#endif
37 QAndroidJniObject windowManager = activity.callObjectMethod("getWindowManager", "()Landroid/view/WindowManager;");
38 QAndroidJniObject display = windowManager.callObjectMethod("getDefaultDisplay", "()Landroid/view/Display;");
39 QAndroidJniObject displayMetrics("android/util/DisplayMetrics");
40 display.callMethod<void>("getRealMetrics", "(Landroid/util/DisplayMetrics;)V", displayMetrics.object());
41 // check if passed or try a different method
42 if (env->ExceptionCheck())
43 {
44 env->ExceptionClear();
45 display.callMethod<void>("getMetrics", "(Landroid/util/DisplayMetrics;)V", displayMetrics.object());
46 }
47 float xdpi = displayMetrics.getField<jfloat>("xdpi");
48 float ydpi = displayMetrics.getField<jfloat>("ydpi");
49 int height = displayMetrics.getField<jint>("heightPixels");
50 int width = displayMetrics.getField<jint>("widthPixels");
51 float rate = display.callMethod<jfloat>("getRefreshRate");
52 LOG(VB_GENERAL, LOG_INFO, LOC +
53 QString("rate:%1 h:%2 w:%3 xdpi:%4 ydpi:%5")
54 .arg(rate).arg(height).arg(width)
55 .arg(xdpi).arg(ydpi)
56 );
57
58 m_refreshRate = static_cast<double>(rate);
59 m_resolution = QSize(width, height);
60 m_physicalSize = QSize(width, height);
61 m_modeComplete = true;
62 if (xdpi > 0 && ydpi > 0)
63 {
64 m_physicalSize = QSize(static_cast<int>(width / xdpi * 25.4F),
65 static_cast<int>(height / ydpi * 25.4F));
66 }
67}
void UpdateCurrentMode(void) override
Retrieve screen details.
QSize m_resolution
Definition: mythdisplay.h:92
QSize m_physicalSize
Definition: mythdisplay.h:93
void Initialise()
double m_refreshRate
Definition: mythdisplay.h:90
bool m_modeComplete
Definition: mythdisplay.h:89
#define QAndroidJniEnvironment
#define LOC
#define QAndroidJniObject
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39