AusweisApp2/src/global/BuildHelper.cpp

92 lines
1.6 KiB
C++

/*
* \copyright Copyright (c) 2014-2017 Governikus GmbH & Co. KG, Germany
*/
#include "BuildHelper.h"
#ifdef Q_OS_ANDROID
#include "VersionNumber.h"
#include <QAndroidJniEnvironment>
#include <QAndroidJniObject>
#include <QtAndroid>
#endif
using namespace governikus;
const char* BuildHelper::mDateTime = __DATE__ " / " __TIME__;
#ifdef Q_OS_ANDROID
namespace
{
QAndroidJniObject getPackageInfo(const QString& pPackageName, int pFlags = 0)
{
QAndroidJniEnvironment env;
auto context = QtAndroid::androidContext();
auto manager = context.callObjectMethod("getPackageManager",
"()Landroid/content/pm/PackageManager;");
if (manager.isValid())
{
const auto& str = QAndroidJniObject::fromString(pPackageName);
return manager.callObjectMethod("getPackageInfo",
"(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;",
str.object<jstring>(), pFlags);
}
if (env->ExceptionCheck())
{
env->ExceptionDescribe();
env->ExceptionClear();
}
return QAndroidJniObject();
}
}
int BuildHelper::getVersionCode()
{
static int version_code = -1;
if (version_code == -1)
{
version_code = getVersionCode(getPackageName());
}
return version_code;
}
int BuildHelper::getVersionCode(const QString& pPackageName)
{
const auto info = getPackageInfo(pPackageName);
if (info.isValid())
{
return info.getField<jint>("versionCode");
}
return -1;
}
QString BuildHelper::getPackageName()
{
auto context = QtAndroid::androidContext();
auto name = context.callObjectMethod("getPackageName", "()Ljava/lang/String;");
if (name.isValid())
{
return name.toString();
}
return QString();
}
#endif