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 }
MythDisplay::m_physicalSize
QSize m_physicalSize
Definition: mythdisplay.h:93
MythDisplayAndroid::MythDisplayAndroid
MythDisplayAndroid()
Definition: mythdisplayandroid.cpp:19
MythDisplayAndroid::~MythDisplayAndroid
~MythDisplayAndroid() override
Definition: mythdisplayandroid.cpp:25
MythDisplay::m_resolution
QSize m_resolution
Definition: mythdisplay.h:92
QAndroidJniObject
#define QAndroidJniObject
Definition: mythdisplayandroid.cpp:10
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
LOC
#define LOC
Definition: mythdisplayandroid.cpp:17
MythDisplayAndroid::UpdateCurrentMode
void UpdateCurrentMode(void) override
Retrieve screen details.
Definition: mythdisplayandroid.cpp:29
MythDisplay::m_modeComplete
bool m_modeComplete
Definition: mythdisplay.h:89
mythlogging.h
QAndroidJniEnvironment
#define QAndroidJniEnvironment
Definition: mythdisplayandroid.cpp:9
MythDisplay
Definition: mythdisplay.h:22
MythDisplay::m_refreshRate
double m_refreshRate
Definition: mythdisplay.h:90
MythDisplay::Initialise
void Initialise()
Definition: mythdisplay.cpp:533
mythdisplayandroid.h