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{
21 Initialise();
22}
23
25{
27#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
28 QAndroidJniObject activity = QtAndroid::androidActivity();
29#else
30 QJniObject activity = QNativeInterface::QAndroidApplication::context();
31#endif
32 QAndroidJniObject windowManager = activity.callObjectMethod("getWindowManager", "()Landroid/view/WindowManager;");
33 QAndroidJniObject display = windowManager.callObjectMethod("getDefaultDisplay", "()Landroid/view/Display;");
34 QAndroidJniObject displayMetrics("android/util/DisplayMetrics");
35 display.callMethod<void>("getRealMetrics", "(Landroid/util/DisplayMetrics;)V", displayMetrics.object());
36 // check if passed or try a different method
37 if (env->ExceptionCheck())
38 {
39 env->ExceptionClear();
40 display.callMethod<void>("getMetrics", "(Landroid/util/DisplayMetrics;)V", displayMetrics.object());
41 }
42 auto xdpi = displayMetrics.getField<jfloat>("xdpi");
43 auto ydpi = displayMetrics.getField<jfloat>("ydpi");
44 int height = displayMetrics.getField<jint>("heightPixels");
45 int width = displayMetrics.getField<jint>("widthPixels");
46 auto rate = display.callMethod<jfloat>("getRefreshRate");
47 LOG(VB_GENERAL, LOG_INFO, LOC +
48 QString("rate:%1 h:%2 w:%3 xdpi:%4 ydpi:%5")
49 .arg(rate).arg(height).arg(width)
50 .arg(xdpi).arg(ydpi)
51 );
52
53 m_refreshRate = static_cast<double>(rate);
54 m_resolution = QSize(width, height);
55 m_physicalSize = QSize(width, height);
56 m_modeComplete = true;
57 if (xdpi > 0 && ydpi > 0)
58 {
59 m_physicalSize = QSize(static_cast<int>(width / xdpi * 25.4F),
60 static_cast<int>(height / ydpi * 25.4F));
61 }
62}
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