4
0
mirror of https://github.com/QuasarApp/QtAndroidTools.git synced 2025-04-30 23:04:32 +00:00

Changed code syntax to Qt style

This commit is contained in:
FalsinSoft 2020-08-21 09:04:21 +02:00
parent d41a19f247
commit 1e67ad06b2
49 changed files with 1355 additions and 1355 deletions

@ -90,7 +90,7 @@
QTAT_SHARING</pre>
</li>
<li>In the <i>main()</i> body insert the call for initialize the library<br />
<pre class="prettyprint">QtAndroidTools::InitializeQmlTools();</pre>
<pre class="prettyprint">QtAndroidTools::initializeQmlTools();</pre>
</li>
</ul>

@ -26,55 +26,55 @@
#include "QAndroidAdMobBanner.h"
QMap<int, QAndroidAdMobBanner*> QAndroidAdMobBanner::m_pInstancesMap;
int QAndroidAdMobBanner::m_InstancesCounter = 0;
int QAndroidAdMobBanner::m_instancesCounter = 0;
QAndroidAdMobBanner::QAndroidAdMobBanner(QQuickItem *parent) : QQuickItem(parent),
m_JavaAdMobBanner("com/falsinsoft/qtandroidtools/AndroidAdMobBanner",
m_javaAdMobBanner("com/falsinsoft/qtandroidtools/AndroidAdMobBanner",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>()),
m_InstanceIndex(m_InstancesCounter++),
m_BannerType(TYPE_NO_BANNER),
m_BannerShowed(false)
m_instanceIndex(m_instancesCounter++),
m_bannerType(TYPE_NO_BANNER),
m_bannerShowed(false)
{
m_pInstancesMap[m_InstanceIndex] = this;
m_pInstancesMap[m_instanceIndex] = this;
if(m_InstanceIndex == 0 && m_JavaAdMobBanner.isValid())
if(m_instanceIndex == 0 && m_javaAdMobBanner.isValid())
{
const JNINativeMethod JniMethod[] = {
{"bannerEvent", "(I)V", reinterpret_cast<void *>(&QAndroidAdMobBanner::BannerEvent)},
{"bannerError", "(I)V", reinterpret_cast<void *>(&QAndroidAdMobBanner::BannerError)}
const JNINativeMethod jniMethod[] = {
{"bannerEvent", "(I)V", reinterpret_cast<void *>(&QAndroidAdMobBanner::bannerEvent)},
{"bannerError", "(I)V", reinterpret_cast<void *>(&QAndroidAdMobBanner::bannerError)}
};
QAndroidJniEnvironment JniEnv;
jclass ObjectClass;
QAndroidJniEnvironment jniEnv;
jclass objectClass;
ObjectClass = JniEnv->GetObjectClass(m_JavaAdMobBanner.object<jobject>());
JniEnv->RegisterNatives(ObjectClass, JniMethod, sizeof(JniMethod)/sizeof(JNINativeMethod));
JniEnv->DeleteLocalRef(ObjectClass);
objectClass = jniEnv->GetObjectClass(m_javaAdMobBanner.object<jobject>());
jniEnv->RegisterNatives(objectClass, jniMethod, sizeof(jniMethod)/sizeof(JNINativeMethod));
jniEnv->DeleteLocalRef(objectClass);
}
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QAndroidAdMobBanner::ApplicationStateChanged);
connect(qGuiApp->primaryScreen(), &QScreen::geometryChanged, this, &QAndroidAdMobBanner::ScreenGeometryChanged);
SetNewAppState(APP_STATE_CREATE);
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QAndroidAdMobBanner::applicationStateChanged);
connect(qGuiApp->primaryScreen(), &QScreen::geometryChanged, this, &QAndroidAdMobBanner::screenGeometryChanged);
setNewAppState(APP_STATE_CREATE);
}
QAndroidAdMobBanner::~QAndroidAdMobBanner()
{
m_pInstancesMap.remove(m_InstanceIndex);
SetNewAppState(APP_STATE_DESTROY);
m_pInstancesMap.remove(m_instanceIndex);
setNewAppState(APP_STATE_DESTROY);
}
const QMap<int, QAndroidAdMobBanner*>& QAndroidAdMobBanner::Instances()
const QMap<int, QAndroidAdMobBanner*>& QAndroidAdMobBanner::instances()
{
return m_pInstancesMap;
}
bool QAndroidAdMobBanner::show()
{
if(m_JavaAdMobBanner.isValid() && m_BannerType != TYPE_NO_BANNER && m_UnitId.isEmpty() == false)
if(m_javaAdMobBanner.isValid() && m_bannerType != TYPE_NO_BANNER && m_unitId.isEmpty() == false)
{
UpdatePosition();
m_JavaAdMobBanner.callMethod<void>("show");
m_BannerShowed = true;
updatePosition();
m_javaAdMobBanner.callMethod<void>("show");
m_bannerShowed = true;
return true;
}
@ -83,10 +83,10 @@ bool QAndroidAdMobBanner::show()
bool QAndroidAdMobBanner::hide()
{
if(m_JavaAdMobBanner.isValid())
if(m_javaAdMobBanner.isValid())
{
m_JavaAdMobBanner.callMethod<void>("hide");
m_BannerShowed = false;
m_javaAdMobBanner.callMethod<void>("hide");
m_bannerShowed = false;
return true;
}
@ -95,15 +95,15 @@ bool QAndroidAdMobBanner::hide()
bool QAndroidAdMobBanner::reload()
{
if(m_JavaAdMobBanner.isValid() && m_BannerType != TYPE_NO_BANNER && m_UnitId.isEmpty() == false)
if(m_javaAdMobBanner.isValid() && m_bannerType != TYPE_NO_BANNER && m_unitId.isEmpty() == false)
{
const bool BannerShowed = m_BannerShowed;
const bool bannerShowed = m_bannerShowed;
if(BannerShowed) hide();
m_JavaAdMobBanner.callMethod<void>("reload");
setType(m_BannerType);
setUnitId(m_UnitId);
if(BannerShowed) show();
if(bannerShowed) hide();
m_javaAdMobBanner.callMethod<void>("reload");
setType(m_bannerType);
setUnitId(m_unitId);
if(bannerShowed) show();
return true;
}
@ -113,154 +113,154 @@ bool QAndroidAdMobBanner::reload()
const QString& QAndroidAdMobBanner::getUnitId() const
{
return m_UnitId;
return m_unitId;
}
void QAndroidAdMobBanner::setUnitId(const QString &UnitId)
void QAndroidAdMobBanner::setUnitId(const QString &unitId)
{
if(m_JavaAdMobBanner.isValid())
if(m_javaAdMobBanner.isValid())
{
m_JavaAdMobBanner.callMethod<void>("setUnitId",
m_javaAdMobBanner.callMethod<void>("setUnitId",
"(Ljava/lang/String;)V",
QAndroidJniObject::fromString(UnitId).object<jstring>()
QAndroidJniObject::fromString(unitId).object<jstring>()
);
m_UnitId = UnitId;
m_unitId = unitId;
}
}
const QStringList& QAndroidAdMobBanner::getKeywords() const
{
return m_KeywordsList;
return m_keywordsList;
}
void QAndroidAdMobBanner::setKeywords(const QStringList &KeywordsList)
void QAndroidAdMobBanner::setKeywords(const QStringList &keywordsList)
{
if(m_JavaAdMobBanner.isValid())
if(m_javaAdMobBanner.isValid())
{
const QAndroidJniObject StringObj("java/lang/String");
QAndroidJniObject StringArrayObj;
QAndroidJniEnvironment qJniEnv;
const QAndroidJniObject stringObj("java/lang/String");
QAndroidJniObject stringArrayObj;
QAndroidJniEnvironment jniEnv;
StringArrayObj = QAndroidJniObject::fromLocalRef(qJniEnv->NewObjectArray(KeywordsList.count(), qJniEnv->GetObjectClass(StringObj.object()), NULL));
stringArrayObj = QAndroidJniObject::fromLocalRef(jniEnv->NewObjectArray(keywordsList.count(), jniEnv->GetObjectClass(stringObj.object()), NULL));
for(int i = 0; i < KeywordsList.count(); i++)
for(int i = 0; i < keywordsList.count(); i++)
{
qJniEnv->SetObjectArrayElement(StringArrayObj.object<jobjectArray>(), i, QAndroidJniObject::fromString(KeywordsList[i]).object<jstring>());
jniEnv->SetObjectArrayElement(stringArrayObj.object<jobjectArray>(), i, QAndroidJniObject::fromString(keywordsList[i]).object<jstring>());
}
m_JavaAdMobBanner.callMethod<void>("setKeywords",
m_javaAdMobBanner.callMethod<void>("setKeywords",
"([Ljava/lang/String;)V",
StringArrayObj.object<jobjectArray>()
stringArrayObj.object<jobjectArray>()
);
m_KeywordsList = KeywordsList;
m_keywordsList = keywordsList;
}
}
QAndroidAdMobBanner::BANNER_TYPE QAndroidAdMobBanner::getType() const
{
return m_BannerType;
return m_bannerType;
}
void QAndroidAdMobBanner::setType(BANNER_TYPE Type)
void QAndroidAdMobBanner::setType(BANNER_TYPE type)
{
if(m_JavaAdMobBanner.isValid() && Type != TYPE_NO_BANNER)
if(m_javaAdMobBanner.isValid() && type != TYPE_NO_BANNER)
{
const qreal PixelRatio = qApp->primaryScreen()->devicePixelRatio();
QAndroidJniObject BannerPixelsSizeObj;
const qreal pixelRatio = qApp->primaryScreen()->devicePixelRatio();
QAndroidJniObject bannerPixelsSizeObj;
m_JavaAdMobBanner.callMethod<void>("setType",
m_javaAdMobBanner.callMethod<void>("setType",
"(I)V",
Type
type
);
m_BannerType = Type;
m_bannerType = type;
BannerPixelsSizeObj = m_JavaAdMobBanner.callObjectMethod("getPixelsSize",
bannerPixelsSizeObj = m_javaAdMobBanner.callObjectMethod("getPixelsSize",
"()Lcom/falsinsoft/qtandroidtools/AndroidAdMobBanner$BannerSize;"
);
setWidth(BannerPixelsSizeObj.getField<jint>("width") / PixelRatio);
setHeight(BannerPixelsSizeObj.getField<jint>("height") / PixelRatio);
setWidth(bannerPixelsSizeObj.getField<jint>("width") / pixelRatio);
setHeight(bannerPixelsSizeObj.getField<jint>("height") / pixelRatio);
}
}
void QAndroidAdMobBanner::ScreenGeometryChanged(const QRect &Geometry)
void QAndroidAdMobBanner::screenGeometryChanged(const QRect &geometry)
{
Q_UNUSED(Geometry)
Q_UNUSED(geometry)
if(m_BannerShowed == true)
if(m_bannerShowed == true)
{
reload();
}
}
void QAndroidAdMobBanner::UpdatePosition()
void QAndroidAdMobBanner::updatePosition()
{
if(m_JavaAdMobBanner.isValid())
if(m_javaAdMobBanner.isValid())
{
const qreal PixelRatio = qApp->primaryScreen()->devicePixelRatio();
const QPointF ScreenPos = mapToGlobal(QPointF(0,0));
const qreal pixelRatio = qApp->primaryScreen()->devicePixelRatio();
const QPointF screenPos = mapToGlobal(QPointF(0,0));
m_JavaAdMobBanner.callMethod<void>("setPos",
m_javaAdMobBanner.callMethod<void>("setPos",
"(II)V",
static_cast<int>(ScreenPos.x() * PixelRatio),
static_cast<int>(ScreenPos.y() * PixelRatio)
static_cast<int>(screenPos.x() * pixelRatio),
static_cast<int>(screenPos.y() * pixelRatio)
);
}
}
void QAndroidAdMobBanner::BannerEvent(JNIEnv *env, jobject thiz, jint eventId)
void QAndroidAdMobBanner::bannerEvent(JNIEnv *env, jobject thiz, jint eventId)
{
QMapIterator<int, QAndroidAdMobBanner*> Instance(m_pInstancesMap);
QMapIterator<int, QAndroidAdMobBanner*> instance(m_pInstancesMap);
Q_UNUSED(env)
Q_UNUSED(thiz)
while(Instance.hasNext())
while(instance.hasNext())
{
Instance.next();
instance.next();
switch(eventId)
{
case EVENT_LOADING:
emit Instance.value()->loading();
Q_EMIT instance.value()->loading();
break;
case EVENT_LOADED:
emit Instance.value()->loaded();
Q_EMIT instance.value()->loaded();
break;
case EVENT_CLOSED:
emit Instance.value()->closed();
Q_EMIT instance.value()->closed();
break;
case EVENT_CLICKED:
emit Instance.value()->clicked();
Q_EMIT instance.value()->clicked();
break;
}
}
}
void QAndroidAdMobBanner::BannerError(JNIEnv *env, jobject thiz, jint errorId)
void QAndroidAdMobBanner::bannerError(JNIEnv *env, jobject thiz, jint errorId)
{
QMapIterator<int, QAndroidAdMobBanner*> Instance(m_pInstancesMap);
QMapIterator<int, QAndroidAdMobBanner*> instance(m_pInstancesMap);
Q_UNUSED(env)
Q_UNUSED(thiz)
while(Instance.hasNext())
while(instance.hasNext())
{
Instance.next();
emit Instance.value()->loadError(errorId);
instance.next();
Q_EMIT instance.value()->loadError(errorId);
}
}
void QAndroidAdMobBanner::ApplicationStateChanged(Qt::ApplicationState State)
void QAndroidAdMobBanner::applicationStateChanged(Qt::ApplicationState state)
{
SetNewAppState((State == Qt::ApplicationActive) ? APP_STATE_START : APP_STATE_STOP);
setNewAppState((state == Qt::ApplicationActive) ? APP_STATE_START : APP_STATE_STOP);
}
void QAndroidAdMobBanner::SetNewAppState(APP_STATE NewState)
void QAndroidAdMobBanner::setNewAppState(APP_STATE newState)
{
if(m_JavaAdMobBanner.isValid())
if(m_javaAdMobBanner.isValid())
{
m_JavaAdMobBanner.callMethod<void>("appStateChanged",
m_javaAdMobBanner.callMethod<void>("appStateChanged",
"(I)V",
NewState
newState
);
}
}

@ -63,34 +63,34 @@ public:
Q_INVOKABLE bool reload();
const QString& getUnitId() const;
void setUnitId(const QString &UnitId);
void setUnitId(const QString &unitId);
BANNER_TYPE getType() const;
void setType(BANNER_TYPE Type);
void setType(BANNER_TYPE type);
const QStringList& getKeywords() const;
void setKeywords(const QStringList &KeywordsList);
void setKeywords(const QStringList &keywordsList);
static const QMap<int, QAndroidAdMobBanner*>& Instances();
static const QMap<int, QAndroidAdMobBanner*>& instances();
signals:
Q_SIGNALS:
void loadError(int errorId);
void loading();
void loaded();
void closed();
void clicked();
private slots:
void ApplicationStateChanged(Qt::ApplicationState State);
void ScreenGeometryChanged(const QRect &Geometry);
private Q_SLOTS:
void applicationStateChanged(Qt::ApplicationState state);
void screenGeometryChanged(const QRect &geometry);
private:
const QAndroidJniObject m_JavaAdMobBanner;
const QAndroidJniObject m_javaAdMobBanner;
static QMap<int, QAndroidAdMobBanner*> m_pInstancesMap;
static int m_InstancesCounter;
const int m_InstanceIndex;
BANNER_TYPE m_BannerType;
bool m_BannerShowed;
QString m_UnitId;
QStringList m_KeywordsList;
static int m_instancesCounter;
const int m_instanceIndex;
BANNER_TYPE m_bannerType;
bool m_bannerShowed;
QString m_unitId;
QStringList m_keywordsList;
enum EVENT_TYPE
{
@ -100,8 +100,8 @@ private:
EVENT_CLICKED
};
static void BannerEvent(JNIEnv *env, jobject thiz, jint eventId);
static void BannerError(JNIEnv *env, jobject thiz, jint errorId);
static void bannerEvent(JNIEnv *env, jobject thiz, jint eventId);
static void bannerError(JNIEnv *env, jobject thiz, jint errorId);
enum APP_STATE
{
@ -110,6 +110,6 @@ private:
APP_STATE_STOP,
APP_STATE_DESTROY
};
void SetNewAppState(APP_STATE NewState);
void UpdatePosition();
void setNewAppState(APP_STATE newState);
void updatePosition();
};

@ -25,48 +25,48 @@
#include "QAndroidAdMobInterstitial.h"
QMap<int, QAndroidAdMobInterstitial*> QAndroidAdMobInterstitial::m_pInstancesMap;
int QAndroidAdMobInterstitial::m_InstancesCounter = 0;
int QAndroidAdMobInterstitial::m_instancesCounter = 0;
QAndroidAdMobInterstitial::QAndroidAdMobInterstitial(QQuickItem *parent) : QQuickItem(parent),
m_JavaAdMobInterstitial("com/falsinsoft/qtandroidtools/AndroidAdMobInterstitial",
m_javaAdMobInterstitial("com/falsinsoft/qtandroidtools/AndroidAdMobInterstitial",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>()),
m_InstanceIndex(m_InstancesCounter++)
m_instanceIndex(m_instancesCounter++)
{
m_pInstancesMap[m_InstanceIndex] = this;
m_pInstancesMap[m_instanceIndex] = this;
if(m_InstanceIndex == 0 && m_JavaAdMobInterstitial.isValid())
if(m_instanceIndex == 0 && m_javaAdMobInterstitial.isValid())
{
const JNINativeMethod JniMethod[] = {
{"interstitialEvent", "(I)V", reinterpret_cast<void *>(&QAndroidAdMobInterstitial::InterstitialEvent)},
{"interstitialError", "(I)V", reinterpret_cast<void *>(&QAndroidAdMobInterstitial::InterstitialError)}
const JNINativeMethod jniMethod[] = {
{"interstitialEvent", "(I)V", reinterpret_cast<void *>(&QAndroidAdMobInterstitial::interstitialEvent)},
{"interstitialError", "(I)V", reinterpret_cast<void *>(&QAndroidAdMobInterstitial::interstitialError)}
};
QAndroidJniEnvironment JniEnv;
jclass ObjectClass;
QAndroidJniEnvironment jniEnv;
jclass objectClass;
ObjectClass = JniEnv->GetObjectClass(m_JavaAdMobInterstitial.object<jobject>());
JniEnv->RegisterNatives(ObjectClass, JniMethod, sizeof(JniMethod)/sizeof(JNINativeMethod));
JniEnv->DeleteLocalRef(ObjectClass);
objectClass = jniEnv->GetObjectClass(m_javaAdMobInterstitial.object<jobject>());
jniEnv->RegisterNatives(objectClass, jniMethod, sizeof(jniMethod)/sizeof(JNINativeMethod));
jniEnv->DeleteLocalRef(objectClass);
}
SetNewAppState(APP_STATE_CREATE);
setNewAppState(APP_STATE_CREATE);
}
QAndroidAdMobInterstitial::~QAndroidAdMobInterstitial()
{
m_pInstancesMap.remove(m_InstanceIndex);
SetNewAppState(APP_STATE_DESTROY);
m_pInstancesMap.remove(m_instanceIndex);
setNewAppState(APP_STATE_DESTROY);
}
const QMap<int, QAndroidAdMobInterstitial*>& QAndroidAdMobInterstitial::Instances()
const QMap<int, QAndroidAdMobInterstitial*>& QAndroidAdMobInterstitial::instances()
{
return m_pInstancesMap;
}
bool QAndroidAdMobInterstitial::show()
{
if(m_JavaAdMobInterstitial.isValid() && m_UnitId.isEmpty() == false)
if(m_javaAdMobInterstitial.isValid() && m_unitId.isEmpty() == false)
{
m_JavaAdMobInterstitial.callMethod<void>("show");
m_javaAdMobInterstitial.callMethod<void>("show");
return true;
}
@ -75,9 +75,9 @@ bool QAndroidAdMobInterstitial::show()
bool QAndroidAdMobInterstitial::load()
{
if(m_JavaAdMobInterstitial.isValid() && m_UnitId.isEmpty() == false)
if(m_javaAdMobInterstitial.isValid() && m_unitId.isEmpty() == false)
{
m_JavaAdMobInterstitial.callMethod<void>("load");
m_javaAdMobInterstitial.callMethod<void>("load");
return true;
}
@ -86,70 +86,70 @@ bool QAndroidAdMobInterstitial::load()
const QString& QAndroidAdMobInterstitial::getUnitId() const
{
return m_UnitId;
return m_unitId;
}
void QAndroidAdMobInterstitial::setUnitId(const QString &UnitId)
void QAndroidAdMobInterstitial::setUnitId(const QString &unitId)
{
if(m_JavaAdMobInterstitial.isValid())
if(m_javaAdMobInterstitial.isValid())
{
m_JavaAdMobInterstitial.callMethod<void>("setUnitId",
m_javaAdMobInterstitial.callMethod<void>("setUnitId",
"(Ljava/lang/String;)V",
QAndroidJniObject::fromString(UnitId).object<jstring>()
QAndroidJniObject::fromString(unitId).object<jstring>()
);
m_UnitId = UnitId;
m_unitId = unitId;
}
}
void QAndroidAdMobInterstitial::InterstitialEvent(JNIEnv *env, jobject thiz, jint eventId)
void QAndroidAdMobInterstitial::interstitialEvent(JNIEnv *env, jobject thiz, jint eventId)
{
QMapIterator<int, QAndroidAdMobInterstitial*> Instance(m_pInstancesMap);
QMapIterator<int, QAndroidAdMobInterstitial*> instance(m_pInstancesMap);
Q_UNUSED(env)
Q_UNUSED(thiz)
while(Instance.hasNext())
while(instance.hasNext())
{
Instance.next();
instance.next();
switch(eventId)
{
case EVENT_LOADING:
emit Instance.value()->loading();
Q_EMIT instance.value()->loading();
break;
case EVENT_LOADED:
emit Instance.value()->loaded();
Q_EMIT instance.value()->loaded();
break;
case EVENT_CLOSED:
emit Instance.value()->closed();
Q_EMIT instance.value()->closed();
break;
case EVENT_CLICKED:
emit Instance.value()->clicked();
Q_EMIT instance.value()->clicked();
break;
}
}
}
void QAndroidAdMobInterstitial::InterstitialError(JNIEnv *env, jobject thiz, jint errorId)
void QAndroidAdMobInterstitial::interstitialError(JNIEnv *env, jobject thiz, jint errorId)
{
QMapIterator<int, QAndroidAdMobInterstitial*> Instance(m_pInstancesMap);
QMapIterator<int, QAndroidAdMobInterstitial*> instance(m_pInstancesMap);
Q_UNUSED(env)
Q_UNUSED(thiz)
while(Instance.hasNext())
while(instance.hasNext())
{
Instance.next();
emit Instance.value()->loadError(errorId);
instance.next();
Q_EMIT instance.value()->loadError(errorId);
}
}
void QAndroidAdMobInterstitial::SetNewAppState(APP_STATE NewState)
void QAndroidAdMobInterstitial::setNewAppState(APP_STATE newState)
{
if(m_JavaAdMobInterstitial.isValid())
if(m_javaAdMobInterstitial.isValid())
{
m_JavaAdMobInterstitial.callMethod<void>("appStateChanged",
m_javaAdMobInterstitial.callMethod<void>("appStateChanged",
"(I)V",
NewState
newState
);
}
}

@ -49,11 +49,11 @@ public:
Q_INVOKABLE bool load();
const QString& getUnitId() const;
void setUnitId(const QString &UnitId);
void setUnitId(const QString &unitId);
static const QMap<int, QAndroidAdMobInterstitial*>& Instances();
static const QMap<int, QAndroidAdMobInterstitial*>& instances();
signals:
Q_SIGNALS:
void loadError(int errorId);
void loading();
void loaded();
@ -61,11 +61,11 @@ signals:
void clicked();
private:
const QAndroidJniObject m_JavaAdMobInterstitial;
const QAndroidJniObject m_javaAdMobInterstitial;
static QMap<int, QAndroidAdMobInterstitial*> m_pInstancesMap;
static int m_InstancesCounter;
const int m_InstanceIndex;
QString m_UnitId;
static int m_instancesCounter;
const int m_instanceIndex;
QString m_unitId;
enum EVENT_TYPE
{
@ -75,8 +75,8 @@ private:
EVENT_CLICKED
};
static void InterstitialEvent(JNIEnv *env, jobject thiz, jint eventId);
static void InterstitialError(JNIEnv *env, jobject thiz, jint errorId);
static void interstitialEvent(JNIEnv *env, jobject thiz, jint eventId);
static void interstitialError(JNIEnv *env, jobject thiz, jint errorId);
enum APP_STATE
{
@ -85,5 +85,5 @@ private:
APP_STATE_STOP,
APP_STATE_DESTROY
};
void SetNewAppState(APP_STATE NewState);
void setNewAppState(APP_STATE newState);
};

@ -25,49 +25,49 @@
#include "QAndroidAdMobRewardedVideo.h"
QMap<int, QAndroidAdMobRewardedVideo*> QAndroidAdMobRewardedVideo::m_pInstancesMap;
int QAndroidAdMobRewardedVideo::m_InstancesCounter = 0;
int QAndroidAdMobRewardedVideo::m_instancesCounter = 0;
QAndroidAdMobRewardedVideo::QAndroidAdMobRewardedVideo(QQuickItem *parent) : QQuickItem(parent),
m_JavaAdMobRewardedVideo("com/falsinsoft/qtandroidtools/AndroidAdMobRewardedVideo",
m_javaAdMobRewardedVideo("com/falsinsoft/qtandroidtools/AndroidAdMobRewardedVideo",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>()),
m_InstanceIndex(m_InstancesCounter++)
m_instanceIndex(m_instancesCounter++)
{
m_pInstancesMap[m_InstanceIndex] = this;
m_pInstancesMap[m_instanceIndex] = this;
if(m_InstanceIndex == 0 && m_JavaAdMobRewardedVideo.isValid())
if(m_instanceIndex == 0 && m_javaAdMobRewardedVideo.isValid())
{
const JNINativeMethod JniMethod[] = {
{"rewardedVideoReward", "(Ljava/lang/String;I)V", reinterpret_cast<void *>(&QAndroidAdMobRewardedVideo::RewardedVideoReward)},
{"rewardedVideoEvent", "(I)V", reinterpret_cast<void *>(&QAndroidAdMobRewardedVideo::RewardedVideoEvent)},
{"rewardedVideoError", "(I)V", reinterpret_cast<void *>(&QAndroidAdMobRewardedVideo::RewardedVideoError)}
const JNINativeMethod jniMethod[] = {
{"rewardedVideoReward", "(Ljava/lang/String;I)V", reinterpret_cast<void *>(&QAndroidAdMobRewardedVideo::rewardedVideoReward)},
{"rewardedVideoEvent", "(I)V", reinterpret_cast<void *>(&QAndroidAdMobRewardedVideo::rewardedVideoEvent)},
{"rewardedVideoError", "(I)V", reinterpret_cast<void *>(&QAndroidAdMobRewardedVideo::rewardedVideoError)}
};
QAndroidJniEnvironment JniEnv;
jclass ObjectClass;
QAndroidJniEnvironment jniEnv;
jclass objectClass;
ObjectClass = JniEnv->GetObjectClass(m_JavaAdMobRewardedVideo.object<jobject>());
JniEnv->RegisterNatives(ObjectClass, JniMethod, sizeof(JniMethod)/sizeof(JNINativeMethod));
JniEnv->DeleteLocalRef(ObjectClass);
objectClass = jniEnv->GetObjectClass(m_javaAdMobRewardedVideo.object<jobject>());
jniEnv->RegisterNatives(objectClass, jniMethod, sizeof(jniMethod)/sizeof(JNINativeMethod));
jniEnv->DeleteLocalRef(objectClass);
}
SetNewAppState(APP_STATE_CREATE);
setNewAppState(APP_STATE_CREATE);
}
QAndroidAdMobRewardedVideo::~QAndroidAdMobRewardedVideo()
{
m_pInstancesMap.remove(m_InstanceIndex);
SetNewAppState(APP_STATE_DESTROY);
m_pInstancesMap.remove(m_instanceIndex);
setNewAppState(APP_STATE_DESTROY);
}
const QMap<int, QAndroidAdMobRewardedVideo*>& QAndroidAdMobRewardedVideo::Instances()
const QMap<int, QAndroidAdMobRewardedVideo*>& QAndroidAdMobRewardedVideo::instances()
{
return m_pInstancesMap;
}
bool QAndroidAdMobRewardedVideo::show()
{
if(m_JavaAdMobRewardedVideo.isValid() && m_UnitId.isEmpty() == false)
if(m_javaAdMobRewardedVideo.isValid() && m_unitId.isEmpty() == false)
{
m_JavaAdMobRewardedVideo.callMethod<void>("show");
m_javaAdMobRewardedVideo.callMethod<void>("show");
return true;
}
@ -76,11 +76,11 @@ bool QAndroidAdMobRewardedVideo::show()
bool QAndroidAdMobRewardedVideo::load()
{
if(m_JavaAdMobRewardedVideo.isValid() && m_UnitId.isEmpty() == false)
if(m_javaAdMobRewardedVideo.isValid() && m_unitId.isEmpty() == false)
{
m_JavaAdMobRewardedVideo.callMethod<void>("load",
m_javaAdMobRewardedVideo.callMethod<void>("load",
"(Ljava/lang/String;)V",
QAndroidJniObject::fromString(m_UnitId).object<jstring>()
QAndroidJniObject::fromString(m_unitId).object<jstring>()
);
return true;
}
@ -90,87 +90,87 @@ bool QAndroidAdMobRewardedVideo::load()
const QString& QAndroidAdMobRewardedVideo::getUnitId() const
{
return m_UnitId;
return m_unitId;
}
void QAndroidAdMobRewardedVideo::setUnitId(const QString &UnitId)
void QAndroidAdMobRewardedVideo::setUnitId(const QString &unitId)
{
m_UnitId = UnitId;
m_unitId = unitId;
}
void QAndroidAdMobRewardedVideo::RewardedVideoReward(JNIEnv *env, jobject thiz, jstring type, jint amount)
void QAndroidAdMobRewardedVideo::rewardedVideoReward(JNIEnv *env, jobject thiz, jstring type, jint amount)
{
QMapIterator<int, QAndroidAdMobRewardedVideo*> Instance(m_pInstancesMap);
QAndroidJniEnvironment JniEnv;
QMapIterator<int, QAndroidAdMobRewardedVideo*> instance(m_pInstancesMap);
QAndroidJniEnvironment jniEnv;
Q_UNUSED(env)
Q_UNUSED(thiz)
while(Instance.hasNext())
while(instance.hasNext())
{
Instance.next();
emit Instance.value()->rewarded(QString(JniEnv->GetStringUTFChars(type, NULL)), amount);
instance.next();
Q_EMIT instance.value()->rewarded(QString(jniEnv->GetStringUTFChars(type, NULL)), amount);
}
}
void QAndroidAdMobRewardedVideo::RewardedVideoEvent(JNIEnv *env, jobject thiz, jint eventId)
void QAndroidAdMobRewardedVideo::rewardedVideoEvent(JNIEnv *env, jobject thiz, jint eventId)
{
QMapIterator<int, QAndroidAdMobRewardedVideo*> Instance(m_pInstancesMap);
QMapIterator<int, QAndroidAdMobRewardedVideo*> instance(m_pInstancesMap);
Q_UNUSED(env)
Q_UNUSED(thiz)
while(Instance.hasNext())
while(instance.hasNext())
{
Instance.next();
instance.next();
switch(eventId)
{
case EVENT_LOADING:
emit Instance.value()->loading();
Q_EMIT instance.value()->loading();
break;
case EVENT_LOADED:
emit Instance.value()->loaded();
Q_EMIT instance.value()->loaded();
break;
case EVENT_OPENED:
emit Instance.value()->opened();
Q_EMIT instance.value()->opened();
break;
case EVENT_CLOSED:
emit Instance.value()->closed();
Q_EMIT instance.value()->closed();
break;
case EVENT_STARTED:
emit Instance.value()->started();
Q_EMIT instance.value()->started();
break;
case EVENT_COMPLETED:
emit Instance.value()->completed();
Q_EMIT instance.value()->completed();
break;
case EVENT_LEFT_APPLICATION:
emit Instance.value()->leftApplication();
Q_EMIT instance.value()->leftApplication();
break;
}
}
}
void QAndroidAdMobRewardedVideo::RewardedVideoError(JNIEnv *env, jobject thiz, jint errorId)
void QAndroidAdMobRewardedVideo::rewardedVideoError(JNIEnv *env, jobject thiz, jint errorId)
{
QMapIterator<int, QAndroidAdMobRewardedVideo*> Instance(m_pInstancesMap);
QMapIterator<int, QAndroidAdMobRewardedVideo*> instance(m_pInstancesMap);
Q_UNUSED(env)
Q_UNUSED(thiz)
while(Instance.hasNext())
while(instance.hasNext())
{
Instance.next();
emit Instance.value()->loadError(errorId);
instance.next();
Q_EMIT instance.value()->loadError(errorId);
}
}
void QAndroidAdMobRewardedVideo::SetNewAppState(APP_STATE NewState)
void QAndroidAdMobRewardedVideo::setNewAppState(APP_STATE newState)
{
if(m_JavaAdMobRewardedVideo.isValid())
if(m_javaAdMobRewardedVideo.isValid())
{
m_JavaAdMobRewardedVideo.callMethod<void>("appStateChanged",
m_javaAdMobRewardedVideo.callMethod<void>("appStateChanged",
"(I)V",
NewState
newState
);
}
}

@ -49,11 +49,11 @@ public:
Q_INVOKABLE bool load();
const QString& getUnitId() const;
void setUnitId(const QString &UnitId);
void setUnitId(const QString &unitId);
static const QMap<int, QAndroidAdMobRewardedVideo*>& Instances();
static const QMap<int, QAndroidAdMobRewardedVideo*>& instances();
signals:
Q_SIGNALS:
void rewarded(const QString &type, int amount);
void loadError(int errorId);
void loading();
@ -65,11 +65,11 @@ signals:
void leftApplication();
private:
const QAndroidJniObject m_JavaAdMobRewardedVideo;
const QAndroidJniObject m_javaAdMobRewardedVideo;
static QMap<int, QAndroidAdMobRewardedVideo*> m_pInstancesMap;
static int m_InstancesCounter;
const int m_InstanceIndex;
QString m_UnitId;
static int m_instancesCounter;
const int m_instanceIndex;
QString m_unitId;
enum EVENT_TYPE
{
@ -82,9 +82,9 @@ private:
EVENT_LEFT_APPLICATION
};
static void RewardedVideoReward(JNIEnv *env, jobject thiz, jstring type, jint amount);
static void RewardedVideoEvent(JNIEnv *env, jobject thiz, jint eventId);
static void RewardedVideoError(JNIEnv *env, jobject thiz, jint errorId);
static void rewardedVideoReward(JNIEnv *env, jobject thiz, jstring type, jint amount);
static void rewardedVideoEvent(JNIEnv *env, jobject thiz, jint eventId);
static void rewardedVideoError(JNIEnv *env, jobject thiz, jint errorId);
enum APP_STATE
{
@ -93,5 +93,5 @@ private:
APP_STATE_STOP,
APP_STATE_DESTROY
};
void SetNewAppState(APP_STATE NewState);
void setNewAppState(APP_STATE newState);
};

@ -26,33 +26,33 @@
QAndroidApkExpansionFiles *QAndroidApkExpansionFiles::m_pInstance = nullptr;
QAndroidApkExpansionFiles::QAndroidApkExpansionFiles() : m_JavaApkExpansionFiles("com/falsinsoft/qtandroidtools/AndroidApkExpansionFiles",
QAndroidApkExpansionFiles::QAndroidApkExpansionFiles() : m_javaApkExpansionFiles("com/falsinsoft/qtandroidtools/AndroidApkExpansionFiles",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>())
{
m_pInstance = this;
if(m_JavaApkExpansionFiles.isValid())
if(m_javaApkExpansionFiles.isValid())
{
const JNINativeMethod JniMethod[] = {
{"getString", "(I)Ljava/lang/String;", reinterpret_cast<void *>(&QAndroidApkExpansionFiles::DownloaderGetString)},
{"downloadStateChanged", "(I)V", reinterpret_cast<void *>(&QAndroidApkExpansionFiles::DownloadStateChanged)},
{"downloadProgress", "(JJJF)V", reinterpret_cast<void *>(&QAndroidApkExpansionFiles::DownloadProgress)}
const JNINativeMethod jniMethod[] = {
{"getString", "(I)Ljava/lang/String;", reinterpret_cast<void *>(&QAndroidApkExpansionFiles::downloaderGetString)},
{"downloadStateChanged", "(I)V", reinterpret_cast<void *>(&QAndroidApkExpansionFiles::downloaderStateChanged)},
{"downloadProgress", "(JJJF)V", reinterpret_cast<void *>(&QAndroidApkExpansionFiles::downloaderProgress)}
};
QAndroidJniEnvironment JniEnv;
jclass ObjectClass;
QAndroidJniEnvironment jniEnv;
jclass objectClass;
ObjectClass = JniEnv->GetObjectClass(m_JavaApkExpansionFiles.object<jobject>());
JniEnv->RegisterNatives(ObjectClass, JniMethod, sizeof(JniMethod)/sizeof(JNINativeMethod));
JniEnv->DeleteLocalRef(ObjectClass);
objectClass = jniEnv->GetObjectClass(m_javaApkExpansionFiles.object<jobject>());
jniEnv->RegisterNatives(objectClass, jniMethod, sizeof(jniMethod)/sizeof(JNINativeMethod));
jniEnv->DeleteLocalRef(objectClass);
}
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QAndroidApkExpansionFiles::ApplicationStateChanged);
SetNewAppState(APP_STATE_CREATE);
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QAndroidApkExpansionFiles::applicationStateChanged);
setNewAppState(APP_STATE_CREATE);
}
QAndroidApkExpansionFiles::~QAndroidApkExpansionFiles()
{
SetNewAppState(APP_STATE_DESTROY);
setNewAppState(APP_STATE_DESTROY);
}
QObject* QAndroidApkExpansionFiles::qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine)
@ -68,26 +68,26 @@ QAndroidApkExpansionFiles* QAndroidApkExpansionFiles::instance()
return m_pInstance;
}
void QAndroidApkExpansionFiles::ApplicationStateChanged(Qt::ApplicationState State)
void QAndroidApkExpansionFiles::applicationStateChanged(Qt::ApplicationState state)
{
SetNewAppState((State == Qt::ApplicationActive) ? APP_STATE_START : APP_STATE_STOP);
setNewAppState((state == Qt::ApplicationActive) ? APP_STATE_START : APP_STATE_STOP);
}
void QAndroidApkExpansionFiles::SetNewAppState(APP_STATE NewState)
void QAndroidApkExpansionFiles::setNewAppState(APP_STATE newState)
{
if(m_JavaApkExpansionFiles.isValid())
if(m_javaApkExpansionFiles.isValid())
{
m_JavaApkExpansionFiles.callMethod<void>("appStateChanged",
m_javaApkExpansionFiles.callMethod<void>("appStateChanged",
"(I)V",
NewState
newState
);
}
}
QAndroidApkExpansionFiles::APKEF_STATE QAndroidApkExpansionFiles::startDownloadFiles()
{
if(m_JavaApkExpansionFiles.isValid() == false) return APKEF_INVALID_JAVA_CLASS;
if(m_Base64PublicKey.count() == 0) return APKEF_INVALID_BASE64_PUBLIC_KEY;
if(m_javaApkExpansionFiles.isValid() == false) return APKEF_INVALID_JAVA_CLASS;
if(m_base64PublicKey.count() == 0) return APKEF_INVALID_BASE64_PUBLIC_KEY;
if(m_SALT.count() != 20) return APKEF_INVALID_SALT;
if(QtAndroid::androidSdkVersion() >= 23)
{
@ -97,33 +97,33 @@ QAndroidApkExpansionFiles::APKEF_STATE QAndroidApkExpansionFiles::startDownloadF
for(int i = 0; i < 2; i++)
{
if(m_ExpansionsFileInfo[i].Version > 0 && m_ExpansionsFileInfo[i].Size > 0)
if(m_expansionsFileInfo[i].Version > 0 && m_expansionsFileInfo[i].Size > 0)
{
if(!m_JavaApkExpansionFiles.callMethod<jboolean>("isAPKFileDelivered",
if(!m_javaApkExpansionFiles.callMethod<jboolean>("isAPKFileDelivered",
"(ZII)Z",
(i == 0) ? true : false,
m_ExpansionsFileInfo[i].Version,
m_ExpansionsFileInfo[i].Size))
m_expansionsFileInfo[i].Version,
m_expansionsFileInfo[i].Size))
{
enum { NO_DOWNLOAD_REQUIRED = 0, LVL_CHECK_REQUIRED = 1, DOWNLOAD_REQUIRED = 2 };
QAndroidJniEnvironment JniEnv;
int DownloadResult;
jbyte Buffer[20];
QAndroidJniEnvironment jniEnv;
int downloadResult;
jbyte buffer[20];
jbyteArray SALT;
for(int i = 0; i < 20; i++) Buffer[i] = static_cast<jbyte>(m_SALT[i]);
for(int i = 0; i < 20; i++) buffer[i] = static_cast<jbyte>(m_SALT[i]);
SALT = JniEnv->NewByteArray(20);
JniEnv->SetByteArrayRegion(SALT, 0, 20, Buffer);
SALT = jniEnv->NewByteArray(20);
jniEnv->SetByteArrayRegion(SALT, 0, 20, buffer);
DownloadResult = m_JavaApkExpansionFiles.callMethod<jint>("startDownloader",
downloadResult = m_javaApkExpansionFiles.callMethod<jint>("startDownloader",
"(Ljava/lang/String;[B)I",
QAndroidJniObject::fromString(m_Base64PublicKey).object<jstring>(),
QAndroidJniObject::fromString(m_base64PublicKey).object<jstring>(),
SALT
);
JniEnv->DeleteLocalRef(SALT);
jniEnv->DeleteLocalRef(SALT);
switch(DownloadResult)
switch(downloadResult)
{
case NO_DOWNLOAD_REQUIRED:
return APKEF_NO_DOWNLOAD_REQUIRED;
@ -143,58 +143,58 @@ QAndroidApkExpansionFiles::APKEF_STATE QAndroidApkExpansionFiles::startDownloadF
QString QAndroidApkExpansionFiles::mainFileName()
{
QString FileName;
QString fileName;
if(m_JavaApkExpansionFiles.isValid() && m_ExpansionsFileInfo[0].Version > 0)
if(m_javaApkExpansionFiles.isValid() && m_expansionsFileInfo[0].Version > 0)
{
const QAndroidJniObject JavaFileName = m_JavaApkExpansionFiles.callObjectMethod("getExpansionAPKFileName",
const QAndroidJniObject JavaFileName = m_javaApkExpansionFiles.callObjectMethod("getExpansionAPKFileName",
"(ZI)Ljava/lang/String;",
true,
m_ExpansionsFileInfo[0].Version
m_expansionsFileInfo[0].Version
);
FileName = JavaFileName.toString();
fileName = JavaFileName.toString();
}
return FileName;
return fileName;
}
QString QAndroidApkExpansionFiles::patchFileName()
{
QString FileName;
QString fileName;
if(m_JavaApkExpansionFiles.isValid() && m_ExpansionsFileInfo[1].Version > 0)
if(m_javaApkExpansionFiles.isValid() && m_expansionsFileInfo[1].Version > 0)
{
const QAndroidJniObject JavaFileName = m_JavaApkExpansionFiles.callObjectMethod("getExpansionAPKFileName",
const QAndroidJniObject JavaFileName = m_javaApkExpansionFiles.callObjectMethod("getExpansionAPKFileName",
"(ZI)Ljava/lang/String;",
false,
m_ExpansionsFileInfo[1].Version
m_expansionsFileInfo[1].Version
);
FileName = JavaFileName.toString();
fileName = JavaFileName.toString();
}
return FileName;
return fileName;
}
void QAndroidApkExpansionFiles::abortDownload()
{
SendRequest(REQUEST_ABORT_DOWNLOAD);
sendRequest(REQUEST_ABORT_DOWNLOAD);
}
void QAndroidApkExpansionFiles::pauseDownload()
{
SendRequest(REQUEST_PAUSE_DOWNLOAD);
sendRequest(REQUEST_PAUSE_DOWNLOAD);
}
void QAndroidApkExpansionFiles::continueDownload()
{
SendRequest(REQUEST_CONTINUE_DOWNLOAD);
sendRequest(REQUEST_CONTINUE_DOWNLOAD);
}
void QAndroidApkExpansionFiles::SendRequest(REQUEST_ID requestID)
void QAndroidApkExpansionFiles::sendRequest(REQUEST_ID requestID)
{
if(m_JavaApkExpansionFiles.isValid())
if(m_javaApkExpansionFiles.isValid())
{
m_JavaApkExpansionFiles.callMethod<void>("sendRequest",
m_javaApkExpansionFiles.callMethod<void>("sendRequest",
"(I)V",
requestID
);
@ -203,12 +203,12 @@ void QAndroidApkExpansionFiles::SendRequest(REQUEST_ID requestID)
const QString& QAndroidApkExpansionFiles::getBase64PublicKey() const
{
return m_Base64PublicKey;
return m_base64PublicKey;
}
void QAndroidApkExpansionFiles::setBase64PublicKey(const QString &Base64PublicKey)
void QAndroidApkExpansionFiles::setBase64PublicKey(const QString &base64PublicKey)
{
m_Base64PublicKey = Base64PublicKey;
m_base64PublicKey = base64PublicKey;
}
const QVector<int>& QAndroidApkExpansionFiles::getSALT() const
@ -223,131 +223,131 @@ void QAndroidApkExpansionFiles::setSALT(const QVector<int> &SALT)
const QAndroidApkExpansionFileInfo& QAndroidApkExpansionFiles::getMainExpansionFileInfo() const
{
return m_ExpansionsFileInfo[0];
return m_expansionsFileInfo[0];
}
void QAndroidApkExpansionFiles::setMainExpansionFileInfo(const QAndroidApkExpansionFileInfo &MainExpansionFileInfo)
void QAndroidApkExpansionFiles::setMainExpansionFileInfo(const QAndroidApkExpansionFileInfo &mainExpansionFileInfo)
{
m_ExpansionsFileInfo[0] = MainExpansionFileInfo;
m_expansionsFileInfo[0] = mainExpansionFileInfo;
}
const QAndroidApkExpansionFileInfo& QAndroidApkExpansionFiles::getPatchExpansionFileInfo() const
{
return m_ExpansionsFileInfo[1];
return m_expansionsFileInfo[1];
}
void QAndroidApkExpansionFiles::setPatchExpansionFileInfo(const QAndroidApkExpansionFileInfo &PatchExpansionFileInfo)
void QAndroidApkExpansionFiles::setPatchExpansionFileInfo(const QAndroidApkExpansionFileInfo &patchExpansionFileInfo)
{
m_ExpansionsFileInfo[1] = PatchExpansionFileInfo;
m_expansionsFileInfo[1] = patchExpansionFileInfo;
}
jstring QAndroidApkExpansionFiles::DownloaderGetString(JNIEnv *env, jobject thiz, jint StringID)
jstring QAndroidApkExpansionFiles::downloaderGetString(JNIEnv *env, jobject thiz, jint stringID)
{
QString TextString;
QString textString;
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
TextString = m_pInstance->getString(StringID);
textString = m_pInstance->getString(stringID);
}
return env->NewString(TextString.utf16(), TextString.length());
return env->NewString(textString.utf16(), textString.length());
}
void QAndroidApkExpansionFiles::DownloadStateChanged(JNIEnv *env, jobject thiz, jint NewState)
void QAndroidApkExpansionFiles::downloaderStateChanged(JNIEnv *env, jobject thiz, jint newState)
{
Q_UNUSED(env)
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
emit m_pInstance->downloadStateChanged(NewState);
Q_EMIT m_pInstance->downloadStateChanged(newState);
}
}
void QAndroidApkExpansionFiles::DownloadProgress(JNIEnv *env, jobject thiz, jlong OverallTotal, jlong OverallProgress, jlong TimeRemaining, jfloat CurrentSpeed)
void QAndroidApkExpansionFiles::downloaderProgress(JNIEnv *env, jobject thiz, jlong overallTotal, jlong overallProgress, jlong timeRemaining, jfloat currentSpeed)
{
Q_UNUSED(env)
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
emit m_pInstance->downloadProgress(OverallTotal, OverallProgress, TimeRemaining, CurrentSpeed);
Q_EMIT m_pInstance->downloadProgress(overallTotal, overallProgress, timeRemaining, currentSpeed);
}
}
QString QAndroidApkExpansionFiles::getString(int stringID)
{
QString TextString;
QString textString;
switch(stringID)
{
case STRING_IDLE:
TextString = tr("Waiting for download to start");
textString = tr("Waiting for download to start");
break;
case STRING_FETCHING_URL:
TextString = tr("Looking for resources to download");
textString = tr("Looking for resources to download");
break;
case STRING_CONNECTING:
TextString = tr("Connecting to the download server");
textString = tr("Connecting to the download server");
break;
case STRING_DOWNLOADING:
TextString = tr("Downloading resources");
textString = tr("Downloading resources");
break;
case STRING_COMPLETED:
TextString = tr("Download finished");
textString = tr("Download finished");
break;
case STRING_PAUSED_NETWORK_UNAVAILABLE:
TextString = tr("Download paused because no network is available");
textString = tr("Download paused because no network is available");
break;
case STRING_PAUSED_BY_REQUEST:
TextString = tr("Download paused");
textString = tr("Download paused");
break;
case STRING_PAUSED_WIFI_DISABLED_NEED_CELLULAR_PERMISSION:
TextString = tr("Download paused because wifi is disabled");
textString = tr("Download paused because wifi is disabled");
break;
case STRING_PAUSED_NEED_CELLULAR_PERMISSION:
case STRING_PAUSED_NEED_WIFI:
TextString = tr("Download paused because wifi is unavailable");
textString = tr("Download paused because wifi is unavailable");
break;
case STRING_PAUSED_WIFI_DISABLED:
TextString = tr("Download paused because wifi is disabled");
textString = tr("Download paused because wifi is disabled");
break;
case STRING_PAUSED_ROAMING:
TextString = tr("Download paused because you are roaming");
textString = tr("Download paused because you are roaming");
break;
case STRING_PAUSED_NETWORK_SETUP_FAILURE:
TextString = tr("Download paused. Test a website in browser");
textString = tr("Download paused. Test a website in browser");
break;
case STRING_PAUSED_SDCARD_UNAVAILABLE:
TextString = tr("Download paused because the external storage is unavailable");
textString = tr("Download paused because the external storage is unavailable");
break;
case STRING_FAILED_UNLICENSED:
TextString = tr("Download failed because you may not have purchased this app");
textString = tr("Download failed because you may not have purchased this app");
break;
case STRING_FAILED_FETCHING_URL:
TextString = tr("Download failed because the resources could not be found");
textString = tr("Download failed because the resources could not be found");
break;
case STRING_FAILED_SDCARD_FULL:
TextString = tr("Download failed because the external storage is full");
textString = tr("Download failed because the external storage is full");
break;
case STRING_FAILED_CANCELED:
TextString = tr("Download cancelled");
textString = tr("Download cancelled");
break;
case STRING_FAILED:
TextString = tr("Download failed");
textString = tr("Download failed");
break;
case STRING_UNKNOWN:
TextString = tr("Unknown error");
textString = tr("Unknown error");
break;
case STRING_TIME_LEFT:
TextString = tr("Time left");
textString = tr("Time left");
break;
case STRING_NOTIFICATION_CHANNEL_NAME:
TextString = tr("App data download");
textString = tr("App data download");
break;
}
return TextString;
return textString;
}

@ -126,31 +126,31 @@ public:
Q_INVOKABLE void continueDownload();
const QString& getBase64PublicKey() const;
void setBase64PublicKey(const QString &Base64PublicKey);
void setBase64PublicKey(const QString &base64PublicKey);
const QVector<int>& getSALT() const;
void setSALT(const QVector<int> &SALT);
const QAndroidApkExpansionFileInfo& getMainExpansionFileInfo() const;
void setMainExpansionFileInfo(const QAndroidApkExpansionFileInfo &MainExpansionFileInfo);
void setMainExpansionFileInfo(const QAndroidApkExpansionFileInfo &mainExpansionFileInfo);
const QAndroidApkExpansionFileInfo& getPatchExpansionFileInfo() const;
void setPatchExpansionFileInfo(const QAndroidApkExpansionFileInfo &PatchExpansionFileInfo);
void setPatchExpansionFileInfo(const QAndroidApkExpansionFileInfo &patchExpansionFileInfo);
signals:
Q_SIGNALS:
void downloadStateChanged(int newState);
void downloadProgress(qlonglong overallTotal, qlonglong overallProgress, qlonglong timeRemaining, float currentSpeed);
private slots:
void ApplicationStateChanged(Qt::ApplicationState State);
private Q_SLOTS:
void applicationStateChanged(Qt::ApplicationState state);
private:
const QAndroidJniObject m_JavaApkExpansionFiles;
const QAndroidJniObject m_javaApkExpansionFiles;
static QAndroidApkExpansionFiles *m_pInstance;
QAndroidApkExpansionFileInfo m_ExpansionsFileInfo[2];
QString m_Base64PublicKey;
QAndroidApkExpansionFileInfo m_expansionsFileInfo[2];
QString m_base64PublicKey;
QVector<int> m_SALT;
static jstring DownloaderGetString(JNIEnv *env, jobject thiz, jint StringID);
static void DownloadStateChanged(JNIEnv *env, jobject thiz, jint NewState);
static void DownloadProgress(JNIEnv *env, jobject thiz, jlong OverallTotal, jlong OverallProgress, jlong TimeRemaining, jfloat CurrentSpeed);
static jstring downloaderGetString(JNIEnv *env, jobject thiz, jint stringID);
static void downloaderStateChanged(JNIEnv *env, jobject thiz, jint newState);
static void downloaderProgress(JNIEnv *env, jobject thiz, jlong overallTotal, jlong overallProgress, jlong timeRemaining, jfloat currentSpeed);
enum APP_STATE
{
@ -159,7 +159,7 @@ private:
APP_STATE_STOP,
APP_STATE_DESTROY
};
void SetNewAppState(APP_STATE NewState);
void setNewAppState(APP_STATE newState);
enum REQUEST_ID
{
REQUEST_ABORT_DOWNLOAD = 0,
@ -167,5 +167,5 @@ private:
REQUEST_CONTINUE_DOWNLOAD,
REQUEST_DOWNLOAD_STATUS
};
void SendRequest(REQUEST_ID requestID);
void sendRequest(REQUEST_ID requestID);
};

@ -28,7 +28,7 @@ QAndroidApkInfo *QAndroidApkInfo::m_pInstance = nullptr;
QAndroidApkInfo::QAndroidApkInfo()
{
m_pInstance = this;
LoadApkPackageInfo();
loadApkPackageInfo();
}
QObject* QAndroidApkInfo::qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine)
@ -46,80 +46,80 @@ QAndroidApkInfo* QAndroidApkInfo::instance()
qlonglong QAndroidApkInfo::getFirstInstallTime() const
{
return m_ApkInfo.FirstInstallTime;
return m_apkInfo.firstInstallTime;
}
qlonglong QAndroidApkInfo::getLastUpdateTime() const
{
return m_ApkInfo.LastUpdateTime;
return m_apkInfo.lastUpdateTime;
}
const QString& QAndroidApkInfo::getPackageName() const
{
return m_ApkInfo.PackageName;
return m_apkInfo.packageName;
}
const QStringList& QAndroidApkInfo::getRequestedPermissions() const
{
return m_ApkInfo.RequestedPermissions;
return m_apkInfo.requestedPermissions;
}
int QAndroidApkInfo::getVersionCode() const
{
return m_ApkInfo.VersionCode;
return m_apkInfo.versionCode;
}
const QString& QAndroidApkInfo::getVersionName() const
{
return m_ApkInfo.VersionName;
return m_apkInfo.versionName;
}
void QAndroidApkInfo::LoadApkPackageInfo()
void QAndroidApkInfo::loadApkPackageInfo()
{
const int InfoFlags = QAndroidJniObject::getStaticField<jint>("android/content/pm/PackageManager", "GET_PERMISSIONS");
const QAndroidJniObject Activity = QtAndroid::androidActivity();
QAndroidJniObject PackageName, PackageManager, PackageInfo;
QAndroidJniEnvironment JniEnv;
const int infoFlags = QAndroidJniObject::getStaticField<jint>("android/content/pm/PackageManager", "GET_PERMISSIONS");
const QAndroidJniObject activity = QtAndroid::androidActivity();
QAndroidJniObject packageName, packageManager, packageInfo;
QAndroidJniEnvironment jniEnv;
PackageManager = Activity.callObjectMethod("getPackageManager", "()Landroid/content/pm/PackageManager;");
PackageName = Activity.callObjectMethod("getPackageName", "()Ljava/lang/String;");
packageManager = activity.callObjectMethod("getPackageManager", "()Landroid/content/pm/PackageManager;");
packageName = activity.callObjectMethod("getPackageName", "()Ljava/lang/String;");
PackageInfo = PackageManager.callObjectMethod("getPackageInfo",
packageInfo = packageManager.callObjectMethod("getPackageInfo",
"(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;",
PackageName.object<jstring>(),
InfoFlags
packageName.object<jstring>(),
infoFlags
);
if(!JniEnv->ExceptionCheck())
if(!jniEnv->ExceptionCheck())
{
m_ApkInfo.FirstInstallTime = PackageInfo.getField<jlong>("firstInstallTime");
m_ApkInfo.LastUpdateTime = PackageInfo.getField<jlong>("lastUpdateTime");
m_ApkInfo.PackageName = PackageInfo.getObjectField<jstring>("packageName").toString();
m_ApkInfo.RequestedPermissions = GetStringListField(PackageInfo, "requestedPermissions");
m_ApkInfo.VersionCode = PackageInfo.getField<jint>("versionCode");
m_ApkInfo.VersionName = PackageInfo.getObjectField<jstring>("versionName").toString();
m_apkInfo.firstInstallTime = packageInfo.getField<jlong>("firstInstallTime");
m_apkInfo.lastUpdateTime = packageInfo.getField<jlong>("lastUpdateTime");
m_apkInfo.packageName = packageInfo.getObjectField<jstring>("packageName").toString();
m_apkInfo.requestedPermissions = getStringListField(packageInfo, "requestedPermissions");
m_apkInfo.versionCode = packageInfo.getField<jint>("versionCode");
m_apkInfo.versionName = packageInfo.getObjectField<jstring>("versionName").toString();
}
else
{
JniEnv->ExceptionClear();
jniEnv->ExceptionClear();
}
}
QStringList QAndroidApkInfo::GetStringListField(const QAndroidJniObject &JniObject, const QString &FieldName) const
QStringList QAndroidApkInfo::getStringListField(const QAndroidJniObject &jniObject, const QString &fieldName) const
{
const QAndroidJniObject StringArrayObj = JniObject.getObjectField(FieldName.toStdString().c_str(), "[Ljava/lang/String;");
QAndroidJniEnvironment JniEnv;
QStringList StringList;
const QAndroidJniObject stringArrayObj = jniObject.getObjectField(fieldName.toStdString().c_str(), "[Ljava/lang/String;");
QAndroidJniEnvironment jniEnv;
QStringList stringList;
if(StringArrayObj.isValid())
if(stringArrayObj.isValid())
{
const jobjectArray StringJObjArray = StringArrayObj.object<jobjectArray>();
const int StringsNum = JniEnv->GetArrayLength(StringJObjArray);
const jobjectArray stringJObjArray = stringArrayObj.object<jobjectArray>();
const int StringsNum = jniEnv->GetArrayLength(stringJObjArray);
for(int i = 0; i < StringsNum; i++)
{
StringList << QAndroidJniObject::fromLocalRef(JniEnv->GetObjectArrayElement(StringJObjArray, i)).toString();
stringList << QAndroidJniObject::fromLocalRef(jniEnv->GetObjectArrayElement(stringJObjArray, i)).toString();
}
}
return StringList;
return stringList;
}

@ -54,14 +54,14 @@ private:
static QAndroidApkInfo *m_pInstance;
struct {
qlonglong FirstInstallTime;
qlonglong LastUpdateTime;
QString PackageName;
QStringList RequestedPermissions;
int VersionCode;
QString VersionName;
} m_ApkInfo;
qlonglong firstInstallTime;
qlonglong lastUpdateTime;
QString packageName;
QStringList requestedPermissions;
int versionCode;
QString versionName;
} m_apkInfo;
void LoadApkPackageInfo();
QStringList GetStringListField(const QAndroidJniObject &JniObject, const QString &FieldName) const;
void loadApkPackageInfo();
QStringList getStringListField(const QAndroidJniObject &jniObject, const QString &fieldName) const;
};

@ -45,40 +45,40 @@ QAndroidAppPermissions* QAndroidAppPermissions::instance()
void QAndroidAppPermissions::requestPermissions(const QStringList &permissionsNameList)
{
QtAndroid::PermissionResultMap ResultMap;
QtAndroid::PermissionResultMap resultMap;
if(QtAndroid::androidSdkVersion() >= 23)
{
QStringList PermissionsNotGrantedList;
QStringList permissionsNotGrantedList;
for(int i = 0; i < permissionsNameList.count(); i++)
{
if(QtAndroid::checkPermission(permissionsNameList[i]) != QtAndroid::PermissionResult::Granted)
{
PermissionsNotGrantedList << permissionsNameList[i];
permissionsNotGrantedList << permissionsNameList[i];
}
else
{
ResultMap[permissionsNameList[i]] = QtAndroid::PermissionResult::Granted;
resultMap[permissionsNameList[i]] = QtAndroid::PermissionResult::Granted;
}
}
if(PermissionsNotGrantedList.count() > 0)
if(permissionsNotGrantedList.count() > 0)
{
QtAndroid::requestPermissions(PermissionsNotGrantedList, std::bind(&QAndroidAppPermissions::RequestPermissionResults, this, std::placeholders::_1));
QtAndroid::requestPermissions(permissionsNotGrantedList, std::bind(&QAndroidAppPermissions::requestPermissionResults, this, std::placeholders::_1));
}
}
else
{
for(int i = 0; i < permissionsNameList.count(); i++)
{
ResultMap[permissionsNameList[i]] = QtAndroid::PermissionResult::Granted;
resultMap[permissionsNameList[i]] = QtAndroid::PermissionResult::Granted;
}
}
if(ResultMap.size() > 0)
if(resultMap.size() > 0)
{
emit requestPermissionsResults(ConvertToVariantList(ResultMap));
Q_EMIT requestPermissionsResults(convertToVariantList(resultMap));
}
}
@ -86,13 +86,13 @@ void QAndroidAppPermissions::requestPermission(const QString &permissionName)
{
if(QtAndroid::androidSdkVersion() >= 23 && QtAndroid::checkPermission(permissionName) != QtAndroid::PermissionResult::Granted)
{
QtAndroid::requestPermissions(QStringList() << permissionName, std::bind(&QAndroidAppPermissions::RequestPermissionResults, this, std::placeholders::_1));
QtAndroid::requestPermissions(QStringList() << permissionName, std::bind(&QAndroidAppPermissions::requestPermissionResults, this, std::placeholders::_1));
}
else
{
QtAndroid::PermissionResultMap ResultMap;
ResultMap[permissionName] = QtAndroid::PermissionResult::Granted;
emit requestPermissionsResults(ConvertToVariantList(ResultMap));
QtAndroid::PermissionResultMap resultMap;
resultMap[permissionName] = QtAndroid::PermissionResult::Granted;
Q_EMIT requestPermissionsResults(convertToVariantList(resultMap));
}
}
@ -111,26 +111,26 @@ bool QAndroidAppPermissions::isPermissionGranted(const QString &permissionName)
return (QtAndroid::checkPermission(permissionName) == QtAndroid::PermissionResult::Granted) ? true : false;
}
void QAndroidAppPermissions::RequestPermissionResults(const QtAndroid::PermissionResultMap &ResultMap)
void QAndroidAppPermissions::requestPermissionResults(const QtAndroid::PermissionResultMap &resultMap)
{
emit requestPermissionsResults(ConvertToVariantList(ResultMap));
Q_EMIT requestPermissionsResults(convertToVariantList(resultMap));
}
QVariantList QAndroidAppPermissions::ConvertToVariantList(const QtAndroid::PermissionResultMap &ResultMap)
QVariantList QAndroidAppPermissions::convertToVariantList(const QtAndroid::PermissionResultMap &resultMap)
{
QtAndroid::PermissionResultMap::const_iterator PermissionItem = ResultMap.constBegin();
QVariantList PermissionsList;
QtAndroid::PermissionResultMap::const_iterator permissionItem = resultMap.constBegin();
QVariantList permissionsList;
while(PermissionItem != ResultMap.constEnd())
while(permissionItem != resultMap.constEnd())
{
QVariantMap PermissionResult;
QVariantMap permissionResult;
PermissionResult["name"] = PermissionItem.key();
PermissionResult["granted"] = (PermissionItem.value() == QtAndroid::PermissionResult::Granted) ? true : false;
PermissionsList << PermissionResult;
permissionResult["name"] = permissionItem.key();
permissionResult["granted"] = (permissionItem.value() == QtAndroid::PermissionResult::Granted) ? true : false;
permissionsList << permissionResult;
++PermissionItem;
++permissionItem;
}
return PermissionsList;
return permissionsList;
}

@ -43,12 +43,12 @@ public:
Q_INVOKABLE bool shouldShowRequestPermissionInfo(const QString &permissionName);
Q_INVOKABLE bool isPermissionGranted(const QString &permissionName);
signals:
Q_SIGNALS:
void requestPermissionsResults(const QVariantList &results);
private:
static QAndroidAppPermissions *m_pInstance;
void RequestPermissionResults(const QtAndroid::PermissionResultMap &ResultMap);
QVariantList ConvertToVariantList(const QtAndroid::PermissionResultMap &ResultMap);
void requestPermissionResults(const QtAndroid::PermissionResultMap &resultMap);
QVariantList convertToVariantList(const QtAndroid::PermissionResultMap &resultMap);
};

@ -26,32 +26,32 @@
QAndroidBatteryState *QAndroidBatteryState::m_pInstance = nullptr;
QAndroidBatteryState::QAndroidBatteryState() : m_JavaBatteryState("com/falsinsoft/qtandroidtools/AndroidBatteryState",
QAndroidBatteryState::QAndroidBatteryState() : m_javaBatteryState("com/falsinsoft/qtandroidtools/AndroidBatteryState",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>())
{
m_pInstance = this;
if(m_JavaBatteryState.isValid())
if(m_javaBatteryState.isValid())
{
const JNINativeMethod JniMethod[] = {
{"batteryLevelChanged", "()V", reinterpret_cast<void *>(&QAndroidBatteryState::BatteryLevelChanged)},
{"batteryOnChargeChanged", "()V", reinterpret_cast<void *>(&QAndroidBatteryState::BatteryOnChargeChanged)}
const JNINativeMethod jniMethod[] = {
{"batteryLevelChanged", "()V", reinterpret_cast<void *>(&QAndroidBatteryState::batteryLevelChanged)},
{"batteryOnChargeChanged", "()V", reinterpret_cast<void *>(&QAndroidBatteryState::batteryOnChargeChanged)}
};
QAndroidJniEnvironment JniEnv;
jclass ObjectClass;
QAndroidJniEnvironment jniEnv;
jclass objectClass;
ObjectClass = JniEnv->GetObjectClass(m_JavaBatteryState.object<jobject>());
JniEnv->RegisterNatives(ObjectClass, JniMethod, sizeof(JniMethod)/sizeof(JNINativeMethod));
JniEnv->DeleteLocalRef(ObjectClass);
objectClass = jniEnv->GetObjectClass(m_javaBatteryState.object<jobject>());
jniEnv->RegisterNatives(objectClass, jniMethod, sizeof(jniMethod)/sizeof(JNINativeMethod));
jniEnv->DeleteLocalRef(objectClass);
}
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QAndroidBatteryState::ApplicationStateChanged);
SetNewAppState(APP_STATE_CREATE);
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QAndroidBatteryState::applicationStateChanged);
setNewAppState(APP_STATE_CREATE);
}
QAndroidBatteryState::~QAndroidBatteryState()
{
SetNewAppState(APP_STATE_DESTROY);
setNewAppState(APP_STATE_DESTROY);
}
QObject* QAndroidBatteryState::qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine)
@ -67,58 +67,58 @@ QAndroidBatteryState* QAndroidBatteryState::instance()
return m_pInstance;
}
void QAndroidBatteryState::BatteryLevelChanged(JNIEnv *env, jobject thiz)
void QAndroidBatteryState::batteryLevelChanged(JNIEnv *env, jobject thiz)
{
Q_UNUSED(env)
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
emit m_pInstance->levelChanged();
Q_EMIT m_pInstance->levelChanged();
}
}
void QAndroidBatteryState::BatteryOnChargeChanged(JNIEnv *env, jobject thiz)
void QAndroidBatteryState::batteryOnChargeChanged(JNIEnv *env, jobject thiz)
{
Q_UNUSED(env)
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
emit m_pInstance->onChargeChanged();
Q_EMIT m_pInstance->onChargeChanged();
}
}
int QAndroidBatteryState::getLevel()
{
if(m_JavaBatteryState.isValid())
if(m_javaBatteryState.isValid())
{
return m_JavaBatteryState.callMethod<jint>("getLevel");
return m_javaBatteryState.callMethod<jint>("getLevel");
}
return 0;
}
bool QAndroidBatteryState::isOnCharge()
{
if(m_JavaBatteryState.isValid())
if(m_javaBatteryState.isValid())
{
return m_JavaBatteryState.callMethod<jboolean>("isOnCharge");
return m_javaBatteryState.callMethod<jboolean>("isOnCharge");
}
return false;
}
void QAndroidBatteryState::ApplicationStateChanged(Qt::ApplicationState State)
void QAndroidBatteryState::applicationStateChanged(Qt::ApplicationState state)
{
SetNewAppState((State == Qt::ApplicationActive) ? APP_STATE_START : APP_STATE_STOP);
setNewAppState((state == Qt::ApplicationActive) ? APP_STATE_START : APP_STATE_STOP);
}
void QAndroidBatteryState::SetNewAppState(APP_STATE NewState)
void QAndroidBatteryState::setNewAppState(APP_STATE newState)
{
if(m_JavaBatteryState.isValid())
if(m_javaBatteryState.isValid())
{
m_JavaBatteryState.callMethod<void>("appStateChanged",
m_javaBatteryState.callMethod<void>("appStateChanged",
"(I)V",
NewState
newState
);
}
}

@ -44,19 +44,19 @@ public:
int getLevel();
bool isOnCharge();
signals:
Q_SIGNALS:
void levelChanged();
void onChargeChanged();
private slots:
void ApplicationStateChanged(Qt::ApplicationState State);
private Q_SLOTS:
void applicationStateChanged(Qt::ApplicationState state);
private:
const QAndroidJniObject m_JavaBatteryState;
const QAndroidJniObject m_javaBatteryState;
static QAndroidBatteryState *m_pInstance;
static void BatteryLevelChanged(JNIEnv *env, jobject thiz);
static void BatteryOnChargeChanged(JNIEnv *env, jobject thiz);
static void batteryLevelChanged(JNIEnv *env, jobject thiz);
static void batteryOnChargeChanged(JNIEnv *env, jobject thiz);
enum APP_STATE
{
@ -65,5 +65,5 @@ private:
APP_STATE_STOP,
APP_STATE_DESTROY
};
void SetNewAppState(APP_STATE NewState);
void setNewAppState(APP_STATE newState);
};

@ -26,25 +26,25 @@
QAndroidGoogleAccount *QAndroidGoogleAccount::m_pInstance = nullptr;
QAndroidGoogleAccount::QAndroidGoogleAccount() : m_JavaGoogleAccount("com/falsinsoft/qtandroidtools/AndroidGoogleAccount",
QAndroidGoogleAccount::QAndroidGoogleAccount() : m_javaGoogleAccount("com/falsinsoft/qtandroidtools/AndroidGoogleAccount",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>())
{
m_pInstance = this;
if(m_JavaGoogleAccount.isValid())
if(m_javaGoogleAccount.isValid())
{
const JNINativeMethod JniMethod[] = {
{"updateSignedInAccountInfo", "(Lcom/falsinsoft/qtandroidtools/AndroidGoogleAccount$AccountInfo;)V", reinterpret_cast<void*>(&QAndroidGoogleAccount::UpdateSignedInAccountInfo)},
{"signedIn", "(Z)V", reinterpret_cast<void*>(&QAndroidGoogleAccount::SignedIn)},
{"signedOut", "()V", reinterpret_cast<void*>(&QAndroidGoogleAccount::SignedOut)}
const JNINativeMethod jniMethod[] = {
{"updateSignedInAccountInfo", "(Lcom/falsinsoft/qtandroidtools/AndroidGoogleAccount$AccountInfo;)V", reinterpret_cast<void*>(&QAndroidGoogleAccount::updateSignedInAccountInfo)},
{"signedIn", "(Z)V", reinterpret_cast<void*>(&QAndroidGoogleAccount::signedInAccount)},
{"signedOut", "()V", reinterpret_cast<void*>(&QAndroidGoogleAccount::signedOutAccount)}
};
QAndroidJniEnvironment JniEnv;
jclass ObjectClass;
jclass objectClass;
ObjectClass = JniEnv->GetObjectClass(m_JavaGoogleAccount.object<jobject>());
JniEnv->RegisterNatives(ObjectClass, JniMethod, sizeof(JniMethod)/sizeof(JNINativeMethod));
JniEnv->DeleteLocalRef(ObjectClass);
objectClass = JniEnv->GetObjectClass(m_javaGoogleAccount.object<jobject>());
JniEnv->RegisterNatives(objectClass, jniMethod, sizeof(jniMethod)/sizeof(JNINativeMethod));
JniEnv->DeleteLocalRef(objectClass);
}
}
@ -61,29 +61,29 @@ QAndroidGoogleAccount* QAndroidGoogleAccount::instance()
return m_pInstance;
}
bool QAndroidGoogleAccount::signIn(const QString &ScopeName)
bool QAndroidGoogleAccount::signIn(const QString &scopeName)
{
if(m_JavaGoogleAccount.isValid())
if(m_javaGoogleAccount.isValid())
{
return m_JavaGoogleAccount.callMethod<jboolean>("signIn",
return m_javaGoogleAccount.callMethod<jboolean>("signIn",
"(Ljava/lang/String;)Z",
QAndroidJniObject::fromString(ScopeName).object<jstring>()
QAndroidJniObject::fromString(scopeName).object<jstring>()
);
}
return false;
}
bool QAndroidGoogleAccount::signInSelectAccount(const QString &ScopeName)
bool QAndroidGoogleAccount::signInSelectAccount(const QString &scopeName)
{
if(m_JavaGoogleAccount.isValid())
if(m_javaGoogleAccount.isValid())
{
const QAndroidJniObject SignInIntent = m_JavaGoogleAccount.callObjectMethod("getSignInIntent",
const QAndroidJniObject signInIntent = m_javaGoogleAccount.callObjectMethod("getSignInIntent",
"(Ljava/lang/String;)Landroid/content/Intent;",
QAndroidJniObject::fromString(ScopeName).object<jstring>()
QAndroidJniObject::fromString(scopeName).object<jstring>()
);
if(SignInIntent.isValid())
if(signInIntent.isValid())
{
QtAndroid::startActivity(SignInIntent, m_SignInId, this);
QtAndroid::startActivity(signInIntent, m_signInId, this);
return true;
}
}
@ -92,110 +92,110 @@ bool QAndroidGoogleAccount::signInSelectAccount(const QString &ScopeName)
bool QAndroidGoogleAccount::signOut()
{
if(m_JavaGoogleAccount.isValid())
if(m_javaGoogleAccount.isValid())
{
return m_JavaGoogleAccount.callMethod<jboolean>("signOut", "()Z");
return m_javaGoogleAccount.callMethod<jboolean>("signOut", "()Z");
}
return false;
}
bool QAndroidGoogleAccount::revokeAccess()
{
if(m_JavaGoogleAccount.isValid())
if(m_javaGoogleAccount.isValid())
{
return m_JavaGoogleAccount.callMethod<jboolean>("revokeAccess", "()Z");
return m_javaGoogleAccount.callMethod<jboolean>("revokeAccess", "()Z");
}
return false;
}
void QAndroidGoogleAccount::SetSignedInAccountInfo(const QAndroidJniObject &AccountInfoObj)
void QAndroidGoogleAccount::setSignedInAccountInfo(const QAndroidJniObject &accountInfoObj)
{
if(AccountInfoObj.isValid())
if(accountInfoObj.isValid())
{
const QAndroidJniObject PhotoObj = AccountInfoObj.getObjectField("photo", "Landroid/graphics/Bitmap;");
const QAndroidJniObject photoObj = accountInfoObj.getObjectField("photo", "Landroid/graphics/Bitmap;");
m_SignedInAccountInfo.Id = AccountInfoObj.getObjectField<jstring>("id").toString();
m_SignedInAccountInfo.DisplayName = AccountInfoObj.getObjectField<jstring>("displayName").toString();
m_SignedInAccountInfo.Email = AccountInfoObj.getObjectField<jstring>("email").toString();
m_SignedInAccountInfo.FamilyName = AccountInfoObj.getObjectField<jstring>("familyName").toString();
m_SignedInAccountInfo.GivenName = AccountInfoObj.getObjectField<jstring>("givenName").toString();
m_signedInAccountInfo.id = accountInfoObj.getObjectField<jstring>("id").toString();
m_signedInAccountInfo.displayName = accountInfoObj.getObjectField<jstring>("displayName").toString();
m_signedInAccountInfo.email = accountInfoObj.getObjectField<jstring>("email").toString();
m_signedInAccountInfo.familyName = accountInfoObj.getObjectField<jstring>("familyName").toString();
m_signedInAccountInfo.givenName = accountInfoObj.getObjectField<jstring>("givenName").toString();
m_SignedInAccountInfo.Photo.clear();
if(PhotoObj.isValid())
m_signedInAccountInfo.photo.clear();
if(photoObj.isValid())
{
const QImage Photo = AndroidBitmapToImage(PhotoObj);
QBuffer PhotoBuffer(&m_SignedInAccountInfo.Photo);
const QImage photo = androidBitmapToImage(photoObj);
QBuffer photoBuffer(&m_signedInAccountInfo.photo);
PhotoBuffer.open(QIODevice::WriteOnly);
Photo.save(&PhotoBuffer, "PNG");
photoBuffer.open(QIODevice::WriteOnly);
photo.save(&photoBuffer, "PNG");
}
}
else
{
m_SignedInAccountInfo = QAndroidGoogleAccountInfo();
m_signedInAccountInfo = QAndroidGoogleAccountInfo();
}
emit signedInAccountInfoChanged();
Q_EMIT signedInAccountInfoChanged();
}
const QAndroidGoogleAccountInfo& QAndroidGoogleAccount::getSignedInAccountInfo() const
{
return m_SignedInAccountInfo;
return m_signedInAccountInfo;
}
void QAndroidGoogleAccount::handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data)
{
Q_UNUSED(resultCode)
if(receiverRequestCode == m_SignInId)
if(receiverRequestCode == m_signInId)
{
if(m_JavaGoogleAccount.isValid())
if(m_javaGoogleAccount.isValid())
{
m_JavaGoogleAccount.callMethod<void>("signInIntentDataResult", "(Landroid/content/Intent;)V", data.object<jobject>());
m_javaGoogleAccount.callMethod<void>("signInIntentDataResult", "(Landroid/content/Intent;)V", data.object<jobject>());
}
}
}
void QAndroidGoogleAccount::UpdateSignedInAccountInfo(JNIEnv *env, jobject thiz, jobject accountInfo)
void QAndroidGoogleAccount::updateSignedInAccountInfo(JNIEnv *env, jobject thiz, jobject accountInfo)
{
Q_UNUSED(env)
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
m_pInstance->SetSignedInAccountInfo(QAndroidJniObject(accountInfo));
m_pInstance->setSignedInAccountInfo(QAndroidJniObject(accountInfo));
}
}
void QAndroidGoogleAccount::SignedIn(JNIEnv *env, jobject thiz, jboolean signInSuccessfully)
void QAndroidGoogleAccount::signedInAccount(JNIEnv *env, jobject thiz, jboolean signInSuccessfully)
{
Q_UNUSED(env)
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
emit m_pInstance->signedIn(signInSuccessfully);
Q_EMIT m_pInstance->signedIn(signInSuccessfully);
}
}
void QAndroidGoogleAccount::SignedOut(JNIEnv *env, jobject thiz)
void QAndroidGoogleAccount::signedOutAccount(JNIEnv *env, jobject thiz)
{
Q_UNUSED(env)
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
emit m_pInstance->signedOut();
Q_EMIT m_pInstance->signedOut();
}
}
// Copyright KDAB (BogDan Vatra)
// https://www.kdab.com/qt-on-android-how-to-convert-qt-images-to-android-images-and-vice-versa-2/
QImage QAndroidGoogleAccount::AndroidBitmapToImage(const QAndroidJniObject &JniBmp)
QImage QAndroidGoogleAccount::androidBitmapToImage(const QAndroidJniObject &jniBmp)
{
QAndroidJniEnvironment env;
AndroidBitmapInfo info;
if (AndroidBitmap_getInfo(env, JniBmp.object(), &info) != ANDROID_BITMAP_RESULT_SUCCESS)
if (AndroidBitmap_getInfo(env, jniBmp.object(), &info) != ANDROID_BITMAP_RESULT_SUCCESS)
return QImage();
QImage::Format format;
@ -217,7 +217,7 @@ QImage QAndroidGoogleAccount::AndroidBitmapToImage(const QAndroidJniObject &JniB
}
void *pixels;
if (AndroidBitmap_lockPixels(env, JniBmp.object(), &pixels) != ANDROID_BITMAP_RESULT_SUCCESS)
if (AndroidBitmap_lockPixels(env, jniBmp.object(), &pixels) != ANDROID_BITMAP_RESULT_SUCCESS)
return QImage();
QImage image(info.width, info.height, format);
@ -232,7 +232,7 @@ QImage QAndroidGoogleAccount::AndroidBitmapToImage(const QAndroidJniObject &JniB
memcpy((void*)image.constScanLine(y), bmpPtr, width);
}
if (AndroidBitmap_unlockPixels(env, JniBmp.object()) != ANDROID_BITMAP_RESULT_SUCCESS)
if (AndroidBitmap_unlockPixels(env, jniBmp.object()) != ANDROID_BITMAP_RESULT_SUCCESS)
return QImage();
return image;

@ -32,19 +32,19 @@
struct QAndroidGoogleAccountInfo
{
Q_GADGET
Q_PROPERTY(QString id MEMBER Id)
Q_PROPERTY(QString displayName MEMBER DisplayName)
Q_PROPERTY(QString email MEMBER Email)
Q_PROPERTY(QString familyName MEMBER FamilyName)
Q_PROPERTY(QString givenName MEMBER GivenName)
Q_PROPERTY(QByteArray photo MEMBER Photo)
Q_PROPERTY(QString id MEMBER id)
Q_PROPERTY(QString displayName MEMBER displayName)
Q_PROPERTY(QString email MEMBER email)
Q_PROPERTY(QString familyName MEMBER familyName)
Q_PROPERTY(QString givenName MEMBER givenName)
Q_PROPERTY(QByteArray photo MEMBER photo)
public:
QString Id;
QString DisplayName;
QString Email;
QString FamilyName;
QString GivenName;
QByteArray Photo;
QString id;
QString displayName;
QString email;
QString familyName;
QString givenName;
QByteArray photo;
};
Q_DECLARE_METATYPE(QAndroidGoogleAccountInfo)
@ -60,30 +60,30 @@ public:
static QObject* qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine);
static QAndroidGoogleAccount* instance();
Q_INVOKABLE bool signIn(const QString &ScopeName = QString());
Q_INVOKABLE bool signInSelectAccount(const QString &ScopeName = QString());
Q_INVOKABLE bool signIn(const QString &scopeName = QString());
Q_INVOKABLE bool signInSelectAccount(const QString &scopeName = QString());
Q_INVOKABLE bool signOut();
Q_INVOKABLE bool revokeAccess();
const QAndroidGoogleAccountInfo& getSignedInAccountInfo() const;
signals:
Q_SIGNALS:
void signedInAccountInfoChanged();
void signedIn(bool signInSuccessfully);
void signedOut();
private:
const QAndroidJniObject m_JavaGoogleAccount;
const QAndroidJniObject m_javaGoogleAccount;
static QAndroidGoogleAccount *m_pInstance;
const int m_SignInId = 9001;
QAndroidGoogleAccountInfo m_SignedInAccountInfo;
const int m_signInId = 9001;
QAndroidGoogleAccountInfo m_signedInAccountInfo;
void handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data) override;
static void UpdateSignedInAccountInfo(JNIEnv *env, jobject thiz, jobject accountInfo);
static void SignedIn(JNIEnv *env, jobject thiz, jboolean signInSuccessfully);
static void SignedOut(JNIEnv *env, jobject thiz);
static void updateSignedInAccountInfo(JNIEnv *env, jobject thiz, jobject accountInfo);
static void signedInAccount(JNIEnv *env, jobject thiz, jboolean signInSuccessfully);
static void signedOutAccount(JNIEnv *env, jobject thiz);
void SetSignedInAccountInfo(const QAndroidJniObject &AccountInfoObj);
QImage AndroidBitmapToImage(const QAndroidJniObject &JniBmp);
void setSignedInAccountInfo(const QAndroidJniObject &accountInfoObj);
QImage androidBitmapToImage(const QAndroidJniObject &jniBmp);
};

@ -25,26 +25,26 @@
QAndroidGoogleDrive *QAndroidGoogleDrive::m_pInstance = nullptr;
QAndroidGoogleDrive::QAndroidGoogleDrive() : m_JavaGoogleDrive("com/falsinsoft/qtandroidtools/AndroidGoogleDrive",
QAndroidGoogleDrive::QAndroidGoogleDrive() : m_javaGoogleDrive("com/falsinsoft/qtandroidtools/AndroidGoogleDrive",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>())
{
m_pInstance = this;
if(m_JavaGoogleDrive.isValid())
if(m_javaGoogleDrive.isValid())
{
const JNINativeMethod JniMethod[] = {
{"downloadProgressChanged", "(ID)V", reinterpret_cast<void *>(&QAndroidGoogleDrive::DownloadProgressChanged)},
{"uploadProgressChanged", "(ID)V", reinterpret_cast<void *>(&QAndroidGoogleDrive::UploadProgressChanged)}
const JNINativeMethod jniMethod[] = {
{"downloadProgressChanged", "(ID)V", reinterpret_cast<void *>(&QAndroidGoogleDrive::downloadDriveProgressChanged)},
{"uploadProgressChanged", "(ID)V", reinterpret_cast<void *>(&QAndroidGoogleDrive::uploadDriveProgressChanged)}
};
QAndroidJniEnvironment JniEnv;
jclass ObjectClass;
QAndroidJniEnvironment jniEnv;
jclass objectClass;
ObjectClass = JniEnv->GetObjectClass(m_JavaGoogleDrive.object<jobject>());
JniEnv->RegisterNatives(ObjectClass, JniMethod, sizeof(JniMethod)/sizeof(JNINativeMethod));
JniEnv->DeleteLocalRef(ObjectClass);
objectClass = jniEnv->GetObjectClass(m_javaGoogleDrive.object<jobject>());
jniEnv->RegisterNatives(objectClass, jniMethod, sizeof(jniMethod)/sizeof(JNINativeMethod));
jniEnv->DeleteLocalRef(objectClass);
}
LoadScopeDefinitions();
loadScopeDefinitions();
}
QObject* QAndroidGoogleDrive::qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine)
@ -60,220 +60,220 @@ QAndroidGoogleDrive* QAndroidGoogleDrive::instance()
return m_pInstance;
}
bool QAndroidGoogleDrive::authenticate(const QString &AppName, const QString &ScopeName)
bool QAndroidGoogleDrive::authenticate(const QString &appName, const QString &scopeName)
{
if(m_JavaGoogleDrive.isValid())
if(m_javaGoogleDrive.isValid())
{
m_isAuthenticated = m_JavaGoogleDrive.callMethod<jboolean>("authenticate",
m_isAuthenticated = m_javaGoogleDrive.callMethod<jboolean>("authenticate",
"(Ljava/lang/String;Ljava/lang/String;)Z",
QAndroidJniObject::fromString(AppName).object<jstring>(),
QAndroidJniObject::fromString(ScopeName).object<jstring>()
QAndroidJniObject::fromString(appName).object<jstring>(),
QAndroidJniObject::fromString(scopeName).object<jstring>()
);
emit isAuthenticatedChanged();
Q_EMIT isAuthenticatedChanged();
return m_isAuthenticated;
}
return false;
}
QVariantList QAndroidGoogleDrive::getFilesList(const QString &Query)
QVariantList QAndroidGoogleDrive::getFilesList(const QString &query)
{
QAndroidJniEnvironment JniEnv;
QVariantList FilesList;
QAndroidJniEnvironment jniEnv;
QVariantList filesList;
if(m_JavaGoogleDrive.isValid())
if(m_javaGoogleDrive.isValid())
{
const QAndroidJniObject FilesListObj = m_JavaGoogleDrive.callObjectMethod("listFiles",
const QAndroidJniObject filesListObj = m_javaGoogleDrive.callObjectMethod("listFiles",
"(Ljava/lang/String;)[Lcom/falsinsoft/qtandroidtools/AndroidGoogleDrive$DriveFile;",
QAndroidJniObject::fromString(Query).object<jstring>()
QAndroidJniObject::fromString(query).object<jstring>()
);
if(FilesListObj.isValid())
if(filesListObj.isValid())
{
const jobjectArray FilesListJObjArray = FilesListObj.object<jobjectArray>();
const int FilesNum = JniEnv->GetArrayLength(FilesListJObjArray);
const jobjectArray filesListJObjArray = filesListObj.object<jobjectArray>();
const int filesNum = jniEnv->GetArrayLength(filesListJObjArray);
for(int i = 0; i < FilesNum; i++)
for(int i = 0; i < filesNum; i++)
{
const QAndroidJniObject JniObject = JniEnv->GetObjectArrayElement(FilesListJObjArray, i);
QAndroidJniObject ParentsListObj;
QVariantList FileParents;
QVariantMap FileInfo;
const QAndroidJniObject jniObject = jniEnv->GetObjectArrayElement(filesListJObjArray, i);
QAndroidJniObject parentsListObj;
QVariantList fileParents;
QVariantMap fileInfo;
FileInfo["id"] = JniObject.getObjectField<jstring>("id").toString();
FileInfo["name"] = JniObject.getObjectField<jstring>("name").toString();
FileInfo["mimeType"] = JniObject.getObjectField<jstring>("mimeType").toString();
ParentsListObj = JniObject.getObjectField("parents", "[Ljava/lang/String;");
if(ParentsListObj.isValid())
fileInfo["id"] = jniObject.getObjectField<jstring>("id").toString();
fileInfo["name"] = jniObject.getObjectField<jstring>("name").toString();
fileInfo["mimeType"] = jniObject.getObjectField<jstring>("mimeType").toString();
parentsListObj = jniObject.getObjectField("parents", "[Ljava/lang/String;");
if(parentsListObj.isValid())
{
const jobjectArray ParentsListJObjArray = ParentsListObj.object<jobjectArray>();
const int ParentsNum = JniEnv->GetArrayLength(ParentsListJObjArray);
const jobjectArray parentsListJObjArray = parentsListObj.object<jobjectArray>();
const int parentsNum = jniEnv->GetArrayLength(parentsListJObjArray);
for(int p = 0; p < ParentsNum; p++)
for(int p = 0; p < parentsNum; p++)
{
FileParents << QAndroidJniObject(JniEnv->GetObjectArrayElement(ParentsListJObjArray, p)).toString();
fileParents << QAndroidJniObject(jniEnv->GetObjectArrayElement(parentsListJObjArray, p)).toString();
}
}
FileInfo["parents"] = FileParents;
fileInfo["parents"] = fileParents;
FilesList << FileInfo;
filesList << fileInfo;
}
}
}
return FilesList;
return filesList;
}
QString QAndroidGoogleDrive::getRootId()
{
QString RootId;
QString rootId;
if(m_JavaGoogleDrive.isValid())
if(m_javaGoogleDrive.isValid())
{
const QAndroidJniObject RootIdObj = m_JavaGoogleDrive.callObjectMethod("getRootId",
const QAndroidJniObject rootIdObj = m_javaGoogleDrive.callObjectMethod("getRootId",
"()Ljava/lang/String;"
);
if(RootIdObj.isValid())
if(rootIdObj.isValid())
{
RootId = RootIdObj.toString();
rootId = rootIdObj.toString();
}
}
return RootId;
return rootId;
}
bool QAndroidGoogleDrive::createFolder(const QString &Name, const QString &ParentFolderId)
bool QAndroidGoogleDrive::createFolder(const QString &name, const QString &parentFolderId)
{
if(m_JavaGoogleDrive.isValid())
if(m_javaGoogleDrive.isValid())
{
return m_JavaGoogleDrive.callMethod<jboolean>("createFolder",
return m_javaGoogleDrive.callMethod<jboolean>("createFolder",
"(Ljava/lang/String;Ljava/lang/String;)Z",
QAndroidJniObject::fromString(Name).object<jstring>(),
QAndroidJniObject::fromString(ParentFolderId).object<jstring>()
QAndroidJniObject::fromString(name).object<jstring>(),
QAndroidJniObject::fromString(parentFolderId).object<jstring>()
);
}
return false;
}
bool QAndroidGoogleDrive::isFolder(const QString &FileId)
bool QAndroidGoogleDrive::isFolder(const QString &fileId)
{
const FILE_METADATA FileMetadata = GetFileMetadata(FileId);
return (FileMetadata.Id.isEmpty() == false && FileMetadata.MimeType == "application/vnd.google-apps.folder") ? true : false;
const FILE_METADATA fileMetadata = getFileMetadata(fileId);
return (fileMetadata.id.isEmpty() == false && fileMetadata.mimeType == "application/vnd.google-apps.folder") ? true : false;
}
bool QAndroidGoogleDrive::downloadFile(const QString &FileId, const QString &LocalFilePath)
bool QAndroidGoogleDrive::downloadFile(const QString &fileId, const QString &localFilePath)
{
if(m_JavaGoogleDrive.isValid())
if(m_javaGoogleDrive.isValid())
{
return m_JavaGoogleDrive.callMethod<jboolean>("downloadFile",
return m_javaGoogleDrive.callMethod<jboolean>("downloadFile",
"(Ljava/lang/String;Ljava/lang/String;)Z",
QAndroidJniObject::fromString(FileId).object<jstring>(),
QAndroidJniObject::fromString(LocalFilePath).object<jstring>()
QAndroidJniObject::fromString(fileId).object<jstring>(),
QAndroidJniObject::fromString(localFilePath).object<jstring>()
);
}
return false;
}
QString QAndroidGoogleDrive::uploadFile(const QString &LocalFilePath, const QString &MimeType, const QString &ParentFolderId)
QString QAndroidGoogleDrive::uploadFile(const QString &localFilePath, const QString &mimeType, const QString &parentFolderId)
{
const QFileInfo FileInfo(LocalFilePath);
QString UploadedFileId;
const QFileInfo fileInfo(localFilePath);
QString uploadedFileId;
if(m_JavaGoogleDrive.isValid())
if(m_javaGoogleDrive.isValid())
{
const QAndroidJniObject UploadedFileIdObj = m_JavaGoogleDrive.callObjectMethod("uploadFile",
const QAndroidJniObject uploadedFileIdObj = m_javaGoogleDrive.callObjectMethod("uploadFile",
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
QAndroidJniObject::fromString(LocalFilePath).object<jstring>(),
QAndroidJniObject::fromString(FileInfo.fileName()).object<jstring>(),
QAndroidJniObject::fromString(MimeType).object<jstring>(),
QAndroidJniObject::fromString(ParentFolderId).object<jstring>()
QAndroidJniObject::fromString(localFilePath).object<jstring>(),
QAndroidJniObject::fromString(fileInfo.fileName()).object<jstring>(),
QAndroidJniObject::fromString(mimeType).object<jstring>(),
QAndroidJniObject::fromString(parentFolderId).object<jstring>()
);
if(UploadedFileIdObj.isValid())
if(uploadedFileIdObj.isValid())
{
UploadedFileId = UploadedFileIdObj.toString();
uploadedFileId = uploadedFileIdObj.toString();
}
}
return UploadedFileId;
return uploadedFileId;
}
bool QAndroidGoogleDrive::moveFile(const QString &FileId, const QString &FolderId)
bool QAndroidGoogleDrive::moveFile(const QString &fileId, const QString &folderId)
{
if(m_JavaGoogleDrive.isValid())
if(m_javaGoogleDrive.isValid())
{
return m_JavaGoogleDrive.callMethod<jboolean>("moveFile",
return m_javaGoogleDrive.callMethod<jboolean>("moveFile",
"(Ljava/lang/String;Ljava/lang/String;)Z",
QAndroidJniObject::fromString(FileId).object<jstring>(),
QAndroidJniObject::fromString(FolderId).object<jstring>()
QAndroidJniObject::fromString(fileId).object<jstring>(),
QAndroidJniObject::fromString(folderId).object<jstring>()
);
}
return false;
}
bool QAndroidGoogleDrive::deleteFile(const QString &FileId)
bool QAndroidGoogleDrive::deleteFile(const QString &fileId)
{
if(m_JavaGoogleDrive.isValid())
if(m_javaGoogleDrive.isValid())
{
return m_JavaGoogleDrive.callMethod<jboolean>("deleteFile",
return m_javaGoogleDrive.callMethod<jboolean>("deleteFile",
"(Ljava/lang/String;)Z",
QAndroidJniObject::fromString(FileId).object<jstring>()
QAndroidJniObject::fromString(fileId).object<jstring>()
);
}
return false;
}
QAndroidGoogleDrive::FILE_METADATA QAndroidGoogleDrive::GetFileMetadata(const QString &FileId)
QAndroidGoogleDrive::FILE_METADATA QAndroidGoogleDrive::getFileMetadata(const QString &fileId)
{
const QString Fields("id, mimeType");
FILE_METADATA FileMetadata;
const QString fields("id, mimeType");
FILE_METADATA fileMetadata;
if(m_JavaGoogleDrive.isValid())
if(m_javaGoogleDrive.isValid())
{
const QAndroidJniObject FileMetadataObj = m_JavaGoogleDrive.callObjectMethod("getFileMetadata",
const QAndroidJniObject fileMetadataObj = m_javaGoogleDrive.callObjectMethod("getFileMetadata",
"(Ljava/lang/String;Ljava/lang/String;)Lcom/google/api/services/drive/model/File;",
QAndroidJniObject::fromString(FileId).object<jstring>(),
QAndroidJniObject::fromString(Fields).object<jstring>()
QAndroidJniObject::fromString(fileId).object<jstring>(),
QAndroidJniObject::fromString(fields).object<jstring>()
);
if(FileMetadataObj.isValid())
if(fileMetadataObj.isValid())
{
FileMetadata.Id = FileMetadataObj.callObjectMethod<jstring>("getId").toString();
FileMetadata.MimeType = FileMetadataObj.callObjectMethod<jstring>("getMimeType").toString();
fileMetadata.id = fileMetadataObj.callObjectMethod<jstring>("getId").toString();
fileMetadata.mimeType = fileMetadataObj.callObjectMethod<jstring>("getMimeType").toString();
}
}
return FileMetadata;
return fileMetadata;
}
void QAndroidGoogleDrive::DownloadProgressChanged(JNIEnv *env, jobject thiz, jint State, jdouble Progress)
void QAndroidGoogleDrive::downloadDriveProgressChanged(JNIEnv *env, jobject thiz, jint state, jdouble progress)
{
Q_UNUSED(env)
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
emit m_pInstance->downloadProgressChanged(State, Progress);
Q_EMIT m_pInstance->downloadProgressChanged(state, progress);
}
}
void QAndroidGoogleDrive::UploadProgressChanged(JNIEnv *env, jobject thiz, jint State, jdouble Progress)
void QAndroidGoogleDrive::uploadDriveProgressChanged(JNIEnv *env, jobject thiz, jint state, jdouble progress)
{
Q_UNUSED(env)
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
emit m_pInstance->uploadProgressChanged(State, Progress);
Q_EMIT m_pInstance->uploadProgressChanged(state, progress);
}
}
void QAndroidGoogleDrive::LoadScopeDefinitions()
void QAndroidGoogleDrive::loadScopeDefinitions()
{
const char ScopesClass[] = "com/google/api/services/drive/DriveScopes";
const char scopesClass[] = "com/google/api/services/drive/DriveScopes";
m_ScopeList[0] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE").toString();
m_ScopeList[1] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_APPDATA").toString();
m_ScopeList[2] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_FILE").toString();
m_ScopeList[3] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_METADATA").toString();
m_ScopeList[4] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_METADATA_READONLY").toString();
m_ScopeList[5] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_PHOTOS_READONLY").toString();
m_ScopeList[6] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_READONLY").toString();
m_ScopeList[7] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_SCRIPTS").toString();
m_scopeList[0] = QAndroidJniObject::getStaticObjectField<jstring>(scopesClass, "DRIVE").toString();
m_scopeList[1] = QAndroidJniObject::getStaticObjectField<jstring>(scopesClass, "DRIVE_APPDATA").toString();
m_scopeList[2] = QAndroidJniObject::getStaticObjectField<jstring>(scopesClass, "DRIVE_FILE").toString();
m_scopeList[3] = QAndroidJniObject::getStaticObjectField<jstring>(scopesClass, "DRIVE_METADATA").toString();
m_scopeList[4] = QAndroidJniObject::getStaticObjectField<jstring>(scopesClass, "DRIVE_METADATA_READONLY").toString();
m_scopeList[5] = QAndroidJniObject::getStaticObjectField<jstring>(scopesClass, "DRIVE_PHOTOS_READONLY").toString();
m_scopeList[6] = QAndroidJniObject::getStaticObjectField<jstring>(scopesClass, "DRIVE_READONLY").toString();
m_scopeList[7] = QAndroidJniObject::getStaticObjectField<jstring>(scopesClass, "DRIVE_SCRIPTS").toString();
}

@ -43,21 +43,21 @@ class QAndroidGoogleDrive : public QObject
struct FILE_METADATA
{
QString Id;
QString MimeType;
QString id;
QString mimeType;
};
QAndroidGoogleDrive();
public:
const QString &SCOPE_DRIVE = m_ScopeList[0];
const QString &SCOPE_DRIVE_APPDATA = m_ScopeList[1];
const QString &SCOPE_DRIVE_FILE = m_ScopeList[2];
const QString &SCOPE_DRIVE_METADATA = m_ScopeList[3];
const QString &SCOPE_DRIVE_METADATA_READONLY = m_ScopeList[4];
const QString &SCOPE_DRIVE_PHOTOS_READONLY = m_ScopeList[5];
const QString &SCOPE_DRIVE_READONLY = m_ScopeList[6];
const QString &SCOPE_DRIVE_SCRIPTS = m_ScopeList[7];
const QString &SCOPE_DRIVE = m_scopeList[0];
const QString &SCOPE_DRIVE_APPDATA = m_scopeList[1];
const QString &SCOPE_DRIVE_FILE = m_scopeList[2];
const QString &SCOPE_DRIVE_METADATA = m_scopeList[3];
const QString &SCOPE_DRIVE_METADATA_READONLY = m_scopeList[4];
const QString &SCOPE_DRIVE_PHOTOS_READONLY = m_scopeList[5];
const QString &SCOPE_DRIVE_READONLY = m_scopeList[6];
const QString &SCOPE_DRIVE_SCRIPTS = m_scopeList[7];
enum PROGRESS_STATE
{
@ -70,32 +70,32 @@ public:
static QObject* qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine);
static QAndroidGoogleDrive* instance();
Q_INVOKABLE bool authenticate(const QString &AppName, const QString &ScopeName);
Q_INVOKABLE QVariantList getFilesList(const QString &Query = QString());
Q_INVOKABLE bool authenticate(const QString &appName, const QString &scopeName);
Q_INVOKABLE QVariantList getFilesList(const QString &query = QString());
Q_INVOKABLE QString getRootId();
Q_INVOKABLE bool downloadFile(const QString &FileId, const QString &LocalFilePath);
Q_INVOKABLE QString uploadFile(const QString &LocalFilePath, const QString &MimeType, const QString &ParentFolderId = QString());
Q_INVOKABLE bool createFolder(const QString &Name, const QString &ParentFolderId = QString());
Q_INVOKABLE bool isFolder(const QString &FileId);
Q_INVOKABLE bool moveFile(const QString &FileId, const QString &FolderId);
Q_INVOKABLE bool deleteFile(const QString &FileId);
Q_INVOKABLE bool downloadFile(const QString &fileId, const QString &localFilePath);
Q_INVOKABLE QString uploadFile(const QString &localFilePath, const QString &mimeType, const QString &parentFolderId = QString());
Q_INVOKABLE bool createFolder(const QString &name, const QString &parentFolderId = QString());
Q_INVOKABLE bool isFolder(const QString &fileId);
Q_INVOKABLE bool moveFile(const QString &fileId, const QString &folderId);
Q_INVOKABLE bool deleteFile(const QString &fileId);
bool isAuthenticated() { return m_isAuthenticated; }
signals:
Q_SIGNALS:
void isAuthenticatedChanged();
void downloadProgressChanged(int state, double progress);
void uploadProgressChanged(int state, double progress);
private:
const QAndroidJniObject m_JavaGoogleDrive;
const QAndroidJniObject m_javaGoogleDrive;
static QAndroidGoogleDrive *m_pInstance;
bool m_isAuthenticated = false;
QString m_ScopeList[8];
QString m_scopeList[8];
static void DownloadProgressChanged(JNIEnv *env, jobject thiz, jint State, jdouble Progress);
static void UploadProgressChanged(JNIEnv *env, jobject thiz, jint State, jdouble Progress);
static void downloadDriveProgressChanged(JNIEnv *env, jobject thiz, jint state, jdouble progress);
static void uploadDriveProgressChanged(JNIEnv *env, jobject thiz, jint state, jdouble progress);
FILE_METADATA GetFileMetadata(const QString &FileId);
void LoadScopeDefinitions();
FILE_METADATA getFileMetadata(const QString &fileId);
void loadScopeDefinitions();
};

@ -25,7 +25,7 @@
QAndroidImages *QAndroidImages::m_pInstance = nullptr;
QAndroidImages::QAndroidImages() : m_JavaImages("com/falsinsoft/qtandroidtools/AndroidImages",
QAndroidImages::QAndroidImages() : m_javaImages("com/falsinsoft/qtandroidtools/AndroidImages",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>())
{
@ -47,68 +47,68 @@ QAndroidImages* QAndroidImages::instance()
QVariantList QAndroidImages::getAlbumsList()
{
QAndroidJniEnvironment qJniEnv;
QVariantList AlbumsList;
QAndroidJniEnvironment jniEnv;
QVariantList albumsList;
if(QtAndroid::androidSdkVersion() >= 23)
{
if(QtAndroid::checkPermission("android.permission.READ_EXTERNAL_STORAGE") != QtAndroid::PermissionResult::Granted) return AlbumsList;
if(QtAndroid::checkPermission("android.permission.READ_EXTERNAL_STORAGE") != QtAndroid::PermissionResult::Granted) return albumsList;
}
if(m_JavaImages.isValid())
if(m_javaImages.isValid())
{
const QAndroidJniObject AlbumsListObj = m_JavaImages.callObjectMethod("getAlbumsList",
const QAndroidJniObject albumsListObj = m_javaImages.callObjectMethod("getAlbumsList",
"()[Lcom/falsinsoft/qtandroidtools/AndroidImages$AlbumInfo;"
);
if(AlbumsListObj.isValid())
if(albumsListObj.isValid())
{
const jobjectArray AlbumsListObjArray = AlbumsListObj.object<jobjectArray>();
const int AlbumsNum = qJniEnv->GetArrayLength(AlbumsListObjArray);
const jobjectArray albumsListObjArray = albumsListObj.object<jobjectArray>();
const int albumsNum = jniEnv->GetArrayLength(albumsListObjArray);
for(int i = 0; i < AlbumsNum; i++)
for(int i = 0; i < albumsNum; i++)
{
const QAndroidJniObject AlbumInfoObj = QAndroidJniObject::fromLocalRef(qJniEnv->GetObjectArrayElement(AlbumsListObjArray, i));
QVariantMap AlbumInfo;
const QAndroidJniObject albumInfoObj = QAndroidJniObject::fromLocalRef(jniEnv->GetObjectArrayElement(albumsListObjArray, i));
QVariantMap albumInfo;
AlbumInfo["id"] = AlbumInfoObj.getField<jint>("id");
AlbumInfo["name"] = AlbumInfoObj.getObjectField<jstring>("name").toString();
albumInfo["id"] = albumInfoObj.getField<jint>("id");
albumInfo["name"] = albumInfoObj.getObjectField<jstring>("name").toString();
AlbumsList << AlbumInfo;
albumsList << albumInfo;
}
}
}
return AlbumsList;
return albumsList;
}
QStringList QAndroidImages::getAlbumImagesList(int albumId)
{
QAndroidJniEnvironment qJniEnv;
QStringList ImagesList;
QAndroidJniEnvironment jniEnv;
QStringList imagesList;
if(QtAndroid::androidSdkVersion() >= 23)
{
if(QtAndroid::checkPermission("android.permission.READ_EXTERNAL_STORAGE") != QtAndroid::PermissionResult::Granted) return ImagesList;
if(QtAndroid::checkPermission("android.permission.READ_EXTERNAL_STORAGE") != QtAndroid::PermissionResult::Granted) return imagesList;
}
if(m_JavaImages.isValid())
if(m_javaImages.isValid())
{
const QAndroidJniObject ImagesListObj = m_JavaImages.callObjectMethod("getAlbumImagesList",
const QAndroidJniObject imagesListObj = m_javaImages.callObjectMethod("getAlbumImagesList",
"(I)[Ljava/lang/String;",
albumId
);
if(ImagesListObj.isValid())
if(imagesListObj.isValid())
{
const jobjectArray ImagesListObjArray = ImagesListObj.object<jobjectArray>();
const int ImagesNum = qJniEnv->GetArrayLength(ImagesListObjArray);
const jobjectArray imagesListObjArray = imagesListObj.object<jobjectArray>();
const int imagesNum = jniEnv->GetArrayLength(imagesListObjArray);
for(int i = 0; i < ImagesNum; i++)
for(int i = 0; i < imagesNum; i++)
{
const QAndroidJniObject ImagePathObj = QAndroidJniObject::fromLocalRef(qJniEnv->GetObjectArrayElement(ImagesListObjArray, i));
ImagesList << ImagePathObj.toString();
const QAndroidJniObject imagePathObj = QAndroidJniObject::fromLocalRef(jniEnv->GetObjectArrayElement(imagesListObjArray, i));
imagesList << imagePathObj.toString();
}
}
}
return ImagesList;
return imagesList;
}

@ -42,6 +42,6 @@ public:
Q_INVOKABLE QStringList getAlbumImagesList(int albumId);
private:
const QAndroidJniObject m_JavaImages;
const QAndroidJniObject m_javaImages;
static QAndroidImages *m_pInstance;
};

@ -27,188 +27,188 @@
#include "QAndroidNotification.h"
QMap<int, QAndroidNotification*> QAndroidNotification::m_pInstancesMap;
int QAndroidNotification::m_InstancesCounter = 0;
int QAndroidNotification::m_instancesCounter = 0;
QAndroidNotification::QAndroidNotification(QQuickItem *parent) : QQuickItem(parent),
m_JavaNotification("com/falsinsoft/qtandroidtools/AndroidNotification",
m_javaNotification("com/falsinsoft/qtandroidtools/AndroidNotification",
"(Landroid/app/Activity;I)V",
QtAndroid::androidActivity().object<jobject>(),
m_InstancesCounter),
m_InstanceIndex(m_InstancesCounter++)
m_instancesCounter),
m_instanceIndex(m_instancesCounter++)
{
m_pInstancesMap[m_InstanceIndex] = this;
m_pInstancesMap[m_instanceIndex] = this;
}
QAndroidNotification::~QAndroidNotification()
{
m_pInstancesMap.remove(m_InstanceIndex);
m_pInstancesMap.remove(m_instanceIndex);
}
const QMap<int, QAndroidNotification*>& QAndroidNotification::Instances()
const QMap<int, QAndroidNotification*>& QAndroidNotification::instances()
{
return m_pInstancesMap;
}
void QAndroidNotification::show()
{
if(m_JavaNotification.isValid() && m_SmallIconName.isEmpty() == false && m_Text.isEmpty() == false)
if(m_javaNotification.isValid() && m_smallIconName.isEmpty() == false && m_text.isEmpty() == false)
{
m_JavaNotification.callMethod<void>("show");
m_javaNotification.callMethod<void>("show");
}
}
void QAndroidNotification::cancel()
{
if(m_JavaNotification.isValid())
if(m_javaNotification.isValid())
{
m_JavaNotification.callMethod<void>("cancel");
m_javaNotification.callMethod<void>("cancel");
}
}
const QString& QAndroidNotification::getTitle() const
{
return m_Title;
return m_title;
}
void QAndroidNotification::setTitle(const QString &Title)
void QAndroidNotification::setTitle(const QString &title)
{
if(m_JavaNotification.isValid())
if(m_javaNotification.isValid())
{
m_JavaNotification.callMethod<void>("setTitle",
m_javaNotification.callMethod<void>("setTitle",
"(Ljava/lang/String;)V",
QAndroidJniObject::fromString(Title).object<jstring>()
QAndroidJniObject::fromString(title).object<jstring>()
);
m_Title = Title;
m_title = title;
}
}
const QString& QAndroidNotification::getText() const
{
return m_Text;
return m_text;
}
void QAndroidNotification::setText(const QString &Text)
void QAndroidNotification::setText(const QString &text)
{
if(m_JavaNotification.isValid())
if(m_javaNotification.isValid())
{
m_JavaNotification.callMethod<void>("setContent",
m_javaNotification.callMethod<void>("setContent",
"(Ljava/lang/String;)V",
QAndroidJniObject::fromString(Text).object<jstring>()
QAndroidJniObject::fromString(text).object<jstring>()
);
m_Text = Text;
m_text = text;
}
}
const QString& QAndroidNotification::getExpandableText() const
{
return m_ExpandableText;
return m_expandableText;
}
void QAndroidNotification::setExpandableText(const QString &ExpandableText)
void QAndroidNotification::setExpandableText(const QString &expandableText)
{
if(m_JavaNotification.isValid())
if(m_javaNotification.isValid())
{
m_JavaNotification.callMethod<void>("setExpandableContent",
m_javaNotification.callMethod<void>("setExpandableContent",
"(Ljava/lang/String;)V",
QAndroidJniObject::fromString(ExpandableText).object<jstring>()
QAndroidJniObject::fromString(expandableText).object<jstring>()
);
m_ExpandableText = ExpandableText;
m_expandableText = expandableText;
}
}
const QString& QAndroidNotification::getChannelName() const
{
return m_ChannelName;
return m_channelName;
}
void QAndroidNotification::setChannelName(const QString &ChannelName)
void QAndroidNotification::setChannelName(const QString &channelName)
{
if(m_JavaNotification.isValid() && m_ChannelName.isEmpty())
if(m_javaNotification.isValid() && m_channelName.isEmpty())
{
m_JavaNotification.callMethod<void>("createNotificationChannel",
m_javaNotification.callMethod<void>("createNotificationChannel",
"(Ljava/lang/String;)V",
QAndroidJniObject::fromString(ChannelName).object<jstring>()
QAndroidJniObject::fromString(channelName).object<jstring>()
);
m_ChannelName = ChannelName;
m_channelName = channelName;
}
}
const QString& QAndroidNotification::getLargeIconSource() const
{
return m_LargeIconSource;
return m_largeIconSource;
}
void QAndroidNotification::setLargeIconSource(const QString &LargeIconSource)
void QAndroidNotification::setLargeIconSource(const QString &largeIconSource)
{
const QImage LargeIcon((LargeIconSource.length() > 5 && LargeIconSource.left(5) == "qrc:/") ? LargeIconSource.right(LargeIconSource.length() - 3) : LargeIconSource);
const QImage largeIcon((largeIconSource.length() > 5 && largeIconSource.left(5) == "qrc:/") ? largeIconSource.right(largeIconSource.length() - 3) : largeIconSource);
if(m_JavaNotification.isValid() && LargeIcon.isNull() == false)
if(m_javaNotification.isValid() && largeIcon.isNull() == false)
{
const QAndroidJniObject AndroidBitmap = ImageToAndroidBitmap(LargeIcon);
const QAndroidJniObject androidBitmap = imageToAndroidBitmap(largeIcon);
m_JavaNotification.callMethod<void>("setLargeIcon",
m_javaNotification.callMethod<void>("setLargeIcon",
"(Landroid/graphics/Bitmap;)V",
AndroidBitmap.object()
androidBitmap.object()
);
m_LargeIconSource = LargeIconSource;
m_largeIconSource = largeIconSource;
}
}
const QString& QAndroidNotification::getSmallIconName() const
{
return m_SmallIconName;
return m_smallIconName;
}
void QAndroidNotification::setSmallIconName(const QString &SmallIconName)
void QAndroidNotification::setSmallIconName(const QString &smallIconName)
{
const QAndroidJniObject Activity = QtAndroid::androidActivity();
QAndroidJniObject PackageName, PackageManager, Resources;
int SmallIconResourceId;
const QAndroidJniObject activity = QtAndroid::androidActivity();
QAndroidJniObject packageName, packageManager, resources;
int smallIconResourceId;
PackageManager = Activity.callObjectMethod("getPackageManager", "()Landroid/content/pm/PackageManager;");
PackageName = Activity.callObjectMethod("getPackageName", "()Ljava/lang/String;");
Resources = Activity.callObjectMethod("getResources", "()Landroid/content/res/Resources;");
packageManager = activity.callObjectMethod("getPackageManager", "()Landroid/content/pm/PackageManager;");
packageName = activity.callObjectMethod("getPackageName", "()Ljava/lang/String;");
resources = activity.callObjectMethod("getResources", "()Landroid/content/res/Resources;");
SmallIconResourceId = Resources.callMethod<jint>("getIdentifier",
smallIconResourceId = resources.callMethod<jint>("getIdentifier",
"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I",
QAndroidJniObject::fromString(SmallIconName).object<jstring>(),
QAndroidJniObject::fromString(smallIconName).object<jstring>(),
QAndroidJniObject::fromString("drawable").object<jstring>(),
PackageName.object<jstring>()
packageName.object<jstring>()
);
if(m_JavaNotification.isValid() && SmallIconResourceId != 0)
if(m_javaNotification.isValid() && smallIconResourceId != 0)
{
m_JavaNotification.callMethod<void>("setSmallIcon",
m_javaNotification.callMethod<void>("setSmallIcon",
"(I)V",
SmallIconResourceId
smallIconResourceId
);
m_SmallIconName = SmallIconName;
m_smallIconName = smallIconName;
}
}
const QAndroidNotificationProgressBar& QAndroidNotification::getProgressBar()
{
return m_ProgressBar;
return m_progressBar;
}
void QAndroidNotification::setProgressBar(const QAndroidNotificationProgressBar &ProgressBar)
void QAndroidNotification::setProgressBar(const QAndroidNotificationProgressBar &progressBar)
{
if(m_JavaNotification.isValid())
if(m_javaNotification.isValid())
{
m_JavaNotification.callMethod<void>("setProgressBar",
m_javaNotification.callMethod<void>("setProgressBar",
"(IIZ)V",
ProgressBar.Max,
ProgressBar.Current,
ProgressBar.Indeterminate
progressBar.max,
progressBar.current,
progressBar.indeterminate
);
m_ProgressBar = ProgressBar;
m_progressBar = progressBar;
}
}
// Function to convert Qt image to Android images is credits of KDAB
// https://www.kdab.com/qt-on-android-how-to-convert-qt-images-to-android-images-and-vice-versa-2/
QAndroidJniObject QAndroidNotification::ImageToAndroidBitmap(const QImage &img)
QAndroidJniObject QAndroidNotification::imageToAndroidBitmap(const QImage &img)
{
QImage image = img.format() == QImage::Format_RGBA8888 ? img : img.convertToFormat(QImage::Format_RGBA8888);
QAndroidJniObject bitmap, config;

@ -30,13 +30,13 @@
struct QAndroidNotificationProgressBar
{
Q_GADGET
Q_PROPERTY(uint max MEMBER Max)
Q_PROPERTY(uint current MEMBER Current)
Q_PROPERTY(bool indeterminate MEMBER Indeterminate)
Q_PROPERTY(uint max MEMBER max)
Q_PROPERTY(uint current MEMBER current)
Q_PROPERTY(bool indeterminate MEMBER indeterminate)
public:
uint Max = 0;
uint Current = 0;
bool Indeterminate = false;
uint max = 0;
uint current = 0;
bool indeterminate = false;
};
Q_DECLARE_METATYPE(QAndroidNotificationProgressBar)
@ -56,34 +56,34 @@ public:
~QAndroidNotification();
const QString& getChannelName() const;
void setChannelName(const QString &ChannelName);
void setChannelName(const QString &channelName);
const QString& getLargeIconSource() const;
void setLargeIconSource(const QString &LargeIconSource);
void setLargeIconSource(const QString &largeIconSource);
const QString& getSmallIconName() const;
void setSmallIconName(const QString &SmallIconName);
void setSmallIconName(const QString &smallIconName);
const QString& getTitle() const;
void setTitle(const QString &Title);
void setTitle(const QString &title);
const QString& getText() const;
void setText(const QString &Text);
void setText(const QString &text);
const QString& getExpandableText() const;
void setExpandableText(const QString &ExpandableText);
void setExpandableText(const QString &expandableText);
const QAndroidNotificationProgressBar& getProgressBar();
void setProgressBar(const QAndroidNotificationProgressBar &ProgressBar);
void setProgressBar(const QAndroidNotificationProgressBar &progressBar);
Q_INVOKABLE void show();
Q_INVOKABLE void cancel();
static const QMap<int, QAndroidNotification*>& Instances();
static const QMap<int, QAndroidNotification*>& instances();
private:
const QAndroidJniObject m_JavaNotification;
const QAndroidJniObject m_javaNotification;
static QMap<int, QAndroidNotification*> m_pInstancesMap;
static int m_InstancesCounter;
const int m_InstanceIndex;
QString m_ChannelName;
QString m_LargeIconSource, m_SmallIconName;
QString m_Title, m_Text, m_ExpandableText;
QAndroidNotificationProgressBar m_ProgressBar;
static int m_instancesCounter;
const int m_instanceIndex;
QString m_channelName;
QString m_largeIconSource, m_smallIconName;
QString m_title, m_text, m_expandableText;
QAndroidNotificationProgressBar m_progressBar;
QAndroidJniObject ImageToAndroidBitmap(const QImage &img);
QAndroidJniObject imageToAndroidBitmap(const QImage &img);
};

@ -25,7 +25,7 @@
QAndroidPlayStore *QAndroidPlayStore::m_pInstance = nullptr;
QAndroidPlayStore::QAndroidPlayStore() : m_JavaPlayStore("com/falsinsoft/qtandroidtools/AndroidPlayStore",
QAndroidPlayStore::QAndroidPlayStore() : m_javaPlayStore("com/falsinsoft/qtandroidtools/AndroidPlayStore",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>())
{
@ -47,32 +47,32 @@ QAndroidPlayStore* QAndroidPlayStore::instance()
void QAndroidPlayStore::openAppDetails(const QString &packageName)
{
QString DetailsParam("details?id=");
QString detailsParam("details?id=");
if(packageName.isEmpty())
{
const QAndroidJniObject Activity = QtAndroid::androidActivity();
DetailsParam += Activity.callObjectMethod("getPackageName", "()Ljava/lang/String;").toString();
const QAndroidJniObject activity = QtAndroid::androidActivity();
detailsParam += activity.callObjectMethod("getPackageName", "()Ljava/lang/String;").toString();
}
else
{
DetailsParam += packageName;
detailsParam += packageName;
}
if(m_JavaPlayStore.isValid())
if(m_javaPlayStore.isValid())
{
m_JavaPlayStore.callMethod<void>("open",
m_javaPlayStore.callMethod<void>("open",
"(Ljava/lang/String;)V",
QAndroidJniObject::fromString(DetailsParam).object<jstring>()
QAndroidJniObject::fromString(detailsParam).object<jstring>()
);
}
}
void QAndroidPlayStore::openDeveloperAppList(const QString &developerName)
{
if(m_JavaPlayStore.isValid())
if(m_javaPlayStore.isValid())
{
m_JavaPlayStore.callMethod<void>("open",
m_javaPlayStore.callMethod<void>("open",
"(Ljava/lang/String;)V",
QAndroidJniObject::fromString("developer?id=" + developerName).object<jstring>()
);

@ -41,6 +41,6 @@ public:
Q_INVOKABLE void openDeveloperAppList(const QString &developerName);
private:
const QAndroidJniObject m_JavaPlayStore;
const QAndroidJniObject m_javaPlayStore;
static QAndroidPlayStore *m_pInstance;
};

@ -45,14 +45,14 @@ QAndroidScreen* QAndroidScreen::instance()
bool QAndroidScreen::setOrientation(SCREEN_ORIENTATION orientation)
{
const QAndroidJniObject Activity = QtAndroid::androidActivity();
QAndroidJniEnvironment JniEnv;
const QAndroidJniObject activity = QtAndroid::androidActivity();
QAndroidJniEnvironment jniEnv;
Activity.callMethod<void>("setRequestedOrientation", "(I)V", orientation);
activity.callMethod<void>("setRequestedOrientation", "(I)V", orientation);
if(JniEnv->ExceptionCheck())
if(jniEnv->ExceptionCheck())
{
JniEnv->ExceptionClear();
jniEnv->ExceptionClear();
return false;
}
return true;

@ -25,23 +25,23 @@
QAndroidSharing *QAndroidSharing::m_pInstance = nullptr;
QAndroidSharing::QAndroidSharing() : m_JavaSharing("com/falsinsoft/qtandroidtools/AndroidSharing",
QAndroidSharing::QAndroidSharing() : m_javaSharing("com/falsinsoft/qtandroidtools/AndroidSharing",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>())
{
m_pInstance = this;
if(m_JavaSharing.isValid())
if(m_javaSharing.isValid())
{
const JNINativeMethod JniMethod[] = {
{"requestedSharedFileInfo", "(Ljava/lang/String;Ljava/lang/String;J)V", reinterpret_cast<void*>(&QAndroidSharing::RequestedSharedFileInfo)}
const JNINativeMethod jniMethod[] = {
{"requestedSharedFileInfo", "(Ljava/lang/String;Ljava/lang/String;J)V", reinterpret_cast<void*>(&QAndroidSharing::requestedSharedFileInfo)}
};
QAndroidJniEnvironment JniEnv;
jclass ObjectClass;
QAndroidJniEnvironment jniEnv;
jclass objectClass;
ObjectClass = JniEnv->GetObjectClass(m_JavaSharing.object<jobject>());
JniEnv->RegisterNatives(ObjectClass, JniMethod, sizeof(JniMethod)/sizeof(JNINativeMethod));
JniEnv->DeleteLocalRef(ObjectClass);
objectClass = jniEnv->GetObjectClass(m_javaSharing.object<jobject>());
jniEnv->RegisterNatives(objectClass, jniMethod, sizeof(jniMethod)/sizeof(JNINativeMethod));
jniEnv->DeleteLocalRef(objectClass);
}
}
@ -58,27 +58,27 @@ QAndroidSharing* QAndroidSharing::instance()
return m_pInstance;
}
bool QAndroidSharing::shareText(const QString &Text)
bool QAndroidSharing::shareText(const QString &text)
{
if(m_JavaSharing.isValid())
if(m_javaSharing.isValid())
{
return m_JavaSharing.callMethod<jboolean>("shareText",
return m_javaSharing.callMethod<jboolean>("shareText",
"(Ljava/lang/String;)Z",
QAndroidJniObject::fromString(Text).object<jstring>()
QAndroidJniObject::fromString(text).object<jstring>()
);
}
return false;
}
bool QAndroidSharing::shareBinaryData(const QString &MimeType, const QString &DataFilePath)
bool QAndroidSharing::shareBinaryData(const QString &mimeType, const QString &dataFilePath)
{
if(m_JavaSharing.isValid())
if(m_javaSharing.isValid())
{
return m_JavaSharing.callMethod<jboolean>("shareBinaryData",
return m_javaSharing.callMethod<jboolean>("shareBinaryData",
"(Ljava/lang/String;Ljava/lang/String;)Z",
QAndroidJniObject::fromString(MimeType).object<jstring>(),
QAndroidJniObject::fromString(DataFilePath).object<jstring>()
QAndroidJniObject::fromString(mimeType).object<jstring>(),
QAndroidJniObject::fromString(dataFilePath).object<jstring>()
);
}
@ -87,74 +87,74 @@ bool QAndroidSharing::shareBinaryData(const QString &MimeType, const QString &Da
QString QAndroidSharing::getReceivedSharedText()
{
QString SharedText;
QString sharedText;
if(m_JavaSharing.isValid())
if(m_javaSharing.isValid())
{
const QAndroidJniObject SharedTextObj = m_JavaSharing.callObjectMethod("getReceivedSharedText", "()Ljava/lang/String;");
const QAndroidJniObject sharedTextObj = m_javaSharing.callObjectMethod("getReceivedSharedText", "()Ljava/lang/String;");
if(SharedTextObj.isValid())
if(sharedTextObj.isValid())
{
SharedText = SharedTextObj.toString();
sharedText = sharedTextObj.toString();
}
}
return SharedText;
return sharedText;
}
QByteArray QAndroidSharing::getReceivedSharedBinaryData()
{
QByteArray SharedData;
QByteArray sharedData;
if(m_JavaSharing.isValid())
if(m_javaSharing.isValid())
{
const QAndroidJniObject SharedDataObj = m_JavaSharing.callObjectMethod("getReceivedSharedBinaryData", "()[B");
const QAndroidJniObject sharedDataObj = m_javaSharing.callObjectMethod("getReceivedSharedBinaryData", "()[B");
if(SharedDataObj.isValid())
if(sharedDataObj.isValid())
{
SharedData = ConvertByteArray(SharedDataObj);
sharedData = convertByteArray(sharedDataObj);
}
}
return SharedData;
return sharedData;
}
QVariantList QAndroidSharing::getReceivedMultipleSharedBinaryData()
{
QVariantList MultipleSharedData;
QVariantList multipleSharedData;
if(m_JavaSharing.isValid())
if(m_javaSharing.isValid())
{
const QAndroidJniObject MultipleSharedDataObj = m_JavaSharing.callObjectMethod("getReceivedMultipleSharedBinaryData", "()[[B");
const QAndroidJniObject multipleSharedDataObj = m_javaSharing.callObjectMethod("getReceivedMultipleSharedBinaryData", "()[[B");
if(MultipleSharedDataObj.isValid())
if(multipleSharedDataObj.isValid())
{
const jobjectArray DataArray = MultipleSharedDataObj.object<jobjectArray>();
QAndroidJniEnvironment pEnv;
int ArraySize;
const jobjectArray dataArray = multipleSharedDataObj.object<jobjectArray>();
QAndroidJniEnvironment jniEnv;
int arraySize;
ArraySize = pEnv->GetArrayLength(DataArray);
for(int i = 0; i < ArraySize; i++)
arraySize = jniEnv->GetArrayLength(dataArray);
for(int i = 0; i < arraySize; i++)
{
MultipleSharedData << ConvertByteArray(QAndroidJniObject(pEnv->GetObjectArrayElement(DataArray, i)));
multipleSharedData << convertByteArray(QAndroidJniObject(jniEnv->GetObjectArrayElement(dataArray, i)));
}
}
}
return MultipleSharedData;
return multipleSharedData;
}
bool QAndroidSharing::requestSharedFile(const QString &MimeType)
bool QAndroidSharing::requestSharedFile(const QString &mimeType)
{
if(m_JavaSharing.isValid())
if(m_javaSharing.isValid())
{
const QAndroidJniObject RequestSharedFileIntent = m_JavaSharing.callObjectMethod("getRequestSharedFileIntent",
const QAndroidJniObject requestSharedFileIntent = m_javaSharing.callObjectMethod("getRequestSharedFileIntent",
"(Ljava/lang/String;)Landroid/content/Intent;",
QAndroidJniObject::fromString(MimeType).object<jstring>()
QAndroidJniObject::fromString(mimeType).object<jstring>()
);
if(RequestSharedFileIntent.isValid())
if(requestSharedFileIntent.isValid())
{
QtAndroid::startActivity(RequestSharedFileIntent, m_SharedFileRequestId, this);
QtAndroid::startActivity(requestSharedFileIntent, m_sharedFileRequestId, this);
return true;
}
}
@ -162,24 +162,24 @@ bool QAndroidSharing::requestSharedFile(const QString &MimeType)
return false;
}
bool QAndroidSharing::saveRequestedSharedFile(const QString &FilePath)
bool QAndroidSharing::saveRequestedSharedFile(const QString &filePath)
{
if(m_JavaSharing.isValid())
if(m_javaSharing.isValid())
{
const QAndroidJniObject SharedFileDataObj = m_JavaSharing.callObjectMethod("getRequestedSharedFile", "()[B");
const QAndroidJniObject sharedFileDataObj = m_javaSharing.callObjectMethod("getRequestedSharedFile", "()[B");
if(SharedFileDataObj.isValid())
if(sharedFileDataObj.isValid())
{
const QByteArray SharedFileData = ConvertByteArray(SharedFileDataObj);
QFile SharedFile(FilePath);
const QByteArray sharedFileData = convertByteArray(sharedFileDataObj);
QFile sharedFile(filePath);
if(SharedFile.open(QIODevice::WriteOnly) == true)
if(sharedFile.open(QIODevice::WriteOnly) == true)
{
if(SharedFile.write(SharedFileData) == SharedFileData.size())
if(sharedFile.write(sharedFileData) == sharedFileData.size())
{
return true;
}
SharedFile.remove();
sharedFile.remove();
}
}
}
@ -189,21 +189,21 @@ bool QAndroidSharing::saveRequestedSharedFile(const QString &FilePath)
void QAndroidSharing::closeRequestedSharedFile()
{
if(m_JavaSharing.isValid())
if(m_javaSharing.isValid())
{
m_JavaSharing.callMethod<void>("closeRequestedSharedFile");
m_javaSharing.callMethod<void>("closeRequestedSharedFile");
}
}
bool QAndroidSharing::shareFile(bool FileAvailable, const QString &MimeType, const QString &FilePath)
bool QAndroidSharing::shareFile(bool fileAvailable, const QString &mimeType, const QString &filePath)
{
if(m_JavaSharing.isValid())
if(m_javaSharing.isValid())
{
return m_JavaSharing.callMethod<jboolean>("shareFile",
return m_javaSharing.callMethod<jboolean>("shareFile",
"(ZLjava/lang/String;Ljava/lang/String;)Z",
FileAvailable,
QAndroidJniObject::fromString(MimeType).object<jstring>(),
QAndroidJniObject::fromString(FilePath).object<jstring>()
fileAvailable,
QAndroidJniObject::fromString(mimeType).object<jstring>(),
QAndroidJniObject::fromString(filePath).object<jstring>()
);
}
@ -214,51 +214,51 @@ void QAndroidSharing::handleActivityResult(int receiverRequestCode, int resultCo
{
Q_UNUSED(resultCode)
if(receiverRequestCode == m_SharedFileRequestId)
if(receiverRequestCode == m_sharedFileRequestId)
{
const int RESULT_OK = QAndroidJniObject::getStaticField<jint>("android/app/Activity", "RESULT_OK");
bool SharedFileAvailable = false;
bool sharedFileAvailable = false;
if(resultCode == RESULT_OK)
{
if(m_JavaSharing.isValid())
if(m_javaSharing.isValid())
{
SharedFileAvailable = m_JavaSharing.callMethod<jboolean>("requestSharedFileIntentDataResult",
sharedFileAvailable = m_javaSharing.callMethod<jboolean>("requestSharedFileIntentDataResult",
"(Landroid/content/Intent;)Z",
data.object<jobject>()
);
}
}
if(SharedFileAvailable == false)
if(sharedFileAvailable == false)
{
emit requestedSharedFileNotAvailable();
Q_EMIT requestedSharedFileNotAvailable();
}
}
}
void QAndroidSharing::RequestedSharedFileInfo(JNIEnv *env, jobject thiz, jstring mimeType, jstring name, jlong size)
void QAndroidSharing::requestedSharedFileInfo(JNIEnv *env, jobject thiz, jstring mimeType, jstring name, jlong size)
{
Q_UNUSED(env)
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
emit m_pInstance->requestedSharedFileReadyToSave(QAndroidJniObject(mimeType).toString(), QAndroidJniObject(name).toString(), size);
Q_EMIT m_pInstance->requestedSharedFileReadyToSave(QAndroidJniObject(mimeType).toString(), QAndroidJniObject(name).toString(), size);
}
}
QByteArray QAndroidSharing::ConvertByteArray(const QAndroidJniObject &JavaByteArray)
QByteArray QAndroidSharing::convertByteArray(const QAndroidJniObject &javaByteArray)
{
const jbyteArray DataArray = JavaByteArray.object<jbyteArray>();
QAndroidJniEnvironment pEnv;
QByteArray ByteArray;
int ArraySize;
const jbyteArray dataArray = javaByteArray.object<jbyteArray>();
QAndroidJniEnvironment jniEnv;
QByteArray byteArray;
int arraySize;
jbyte *pData;
ArraySize = pEnv->GetArrayLength(DataArray);
pData = pEnv->GetByteArrayElements(DataArray, NULL);
ByteArray = QByteArray(reinterpret_cast<const char*>(pData), ArraySize);
pEnv->ReleaseByteArrayElements(DataArray, pData, JNI_ABORT);
arraySize = jniEnv->GetArrayLength(dataArray);
pData = jniEnv->GetByteArrayElements(dataArray, NULL);
byteArray = QByteArray(reinterpret_cast<const char*>(pData), arraySize);
jniEnv->ReleaseByteArrayElements(dataArray, pData, JNI_ABORT);
return ByteArray;
return byteArray;
}

@ -37,28 +37,28 @@ public:
static QObject* qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine);
static QAndroidSharing* instance();
Q_INVOKABLE bool shareText(const QString &Text);
Q_INVOKABLE bool shareBinaryData(const QString &MimeType, const QString &DataFilePath);
Q_INVOKABLE bool shareText(const QString &text);
Q_INVOKABLE bool shareBinaryData(const QString &mimeType, const QString &dataFilePath);
Q_INVOKABLE QString getReceivedSharedText();
Q_INVOKABLE QByteArray getReceivedSharedBinaryData();
Q_INVOKABLE QVariantList getReceivedMultipleSharedBinaryData();
Q_INVOKABLE bool requestSharedFile(const QString &MimeType);
Q_INVOKABLE bool saveRequestedSharedFile(const QString &FilePath);
Q_INVOKABLE bool requestSharedFile(const QString &mimeType);
Q_INVOKABLE bool saveRequestedSharedFile(const QString &filePath);
Q_INVOKABLE void closeRequestedSharedFile();
Q_INVOKABLE bool shareFile(bool FileAvailable, const QString &MimeType = QString(), const QString &FilePath = QString());
Q_INVOKABLE bool shareFile(bool fileAvailable, const QString &mimeType = QString(), const QString &filePath = QString());
signals:
Q_SIGNALS:
void requestedSharedFileReadyToSave(const QString &mimeType, const QString &name, long size);
void requestedSharedFileNotAvailable();
private:
const QAndroidJniObject m_JavaSharing;
const QAndroidJniObject m_javaSharing;
static QAndroidSharing *m_pInstance;
const int m_SharedFileRequestId = 9002;
const int m_sharedFileRequestId = 9002;
void handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data) override;
static void RequestedSharedFileInfo(JNIEnv *env, jobject thiz, jstring mimeType, jstring name, jlong size);
static void requestedSharedFileInfo(JNIEnv *env, jobject thiz, jstring mimeType, jstring name, jlong size);
inline QByteArray ConvertByteArray(const QAndroidJniObject &JavaByteArray);
inline QByteArray convertByteArray(const QAndroidJniObject &javaByteArray);
};

@ -26,31 +26,31 @@
QAndroidSignalStrength *QAndroidSignalStrength::m_pInstance = nullptr;
QAndroidSignalStrength::QAndroidSignalStrength() : m_JavaSignalStrength("com/falsinsoft/qtandroidtools/AndroidSignalStrength",
QAndroidSignalStrength::QAndroidSignalStrength() : m_javaSignalStrength("com/falsinsoft/qtandroidtools/AndroidSignalStrength",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>())
{
m_pInstance = this;
if(m_JavaSignalStrength.isValid())
if(m_javaSignalStrength.isValid())
{
const JNINativeMethod JniMethod[] = {
{"signalStrengthChanged", "()V", reinterpret_cast<void *>(&QAndroidSignalStrength::SignalStrengthChanged)},
const JNINativeMethod jniMethod[] = {
{"signalStrengthChanged", "()V", reinterpret_cast<void *>(&QAndroidSignalStrength::deviceSignalStrengthChanged)},
};
QAndroidJniEnvironment JniEnv;
jclass ObjectClass;
QAndroidJniEnvironment jniEnv;
jclass objectClass;
ObjectClass = JniEnv->GetObjectClass(m_JavaSignalStrength.object<jobject>());
JniEnv->RegisterNatives(ObjectClass, JniMethod, sizeof(JniMethod)/sizeof(JNINativeMethod));
JniEnv->DeleteLocalRef(ObjectClass);
objectClass = jniEnv->GetObjectClass(m_javaSignalStrength.object<jobject>());
jniEnv->RegisterNatives(objectClass, jniMethod, sizeof(jniMethod)/sizeof(JNINativeMethod));
jniEnv->DeleteLocalRef(objectClass);
}
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QAndroidSignalStrength::ApplicationStateChanged);
SetNewAppState(APP_STATE_CREATE);
connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QAndroidSignalStrength::applicationStateChanged);
setNewAppState(APP_STATE_CREATE);
}
QAndroidSignalStrength::~QAndroidSignalStrength()
{
SetNewAppState(APP_STATE_DESTROY);
setNewAppState(APP_STATE_DESTROY);
}
QObject* QAndroidSignalStrength::qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine)
@ -66,58 +66,58 @@ QAndroidSignalStrength* QAndroidSignalStrength::instance()
return m_pInstance;
}
void QAndroidSignalStrength::SignalStrengthChanged(JNIEnv *env, jobject thiz)
void QAndroidSignalStrength::deviceSignalStrengthChanged(JNIEnv *env, jobject thiz)
{
Q_UNUSED(env)
Q_UNUSED(thiz)
if(m_pInstance != nullptr)
{
emit m_pInstance->signalStrengthChanged();
emit m_pInstance->signalLevelChanged();
Q_EMIT m_pInstance->signalStrengthChanged();
Q_EMIT m_pInstance->signalLevelChanged();
}
}
int QAndroidSignalStrength::getSignalStrength()
{
if(m_JavaSignalStrength.isValid())
if(m_javaSignalStrength.isValid())
{
return m_JavaSignalStrength.callMethod<jint>("getSignalStrength");
return m_javaSignalStrength.callMethod<jint>("getSignalStrength");
}
return 0;
}
QAndroidSignalStrength::SIGNAL_LEVEL QAndroidSignalStrength::getSignalLevel()
{
const int SignalStrength = getSignalStrength();
SIGNAL_LEVEL SignalLevel;
const int signalStrength = getSignalStrength();
SIGNAL_LEVEL signalLevel;
if(SignalStrength >= 30)
SignalLevel = LEVEL_GREAT;
else if(SignalStrength >= 20)
SignalLevel = LEVEL_GOOD;
else if(SignalStrength >= 12)
SignalLevel = LEVEL_MODERATE;
else if(SignalStrength >= 5)
SignalLevel = LEVEL_POOR;
if(signalStrength >= 30)
signalLevel = LEVEL_GREAT;
else if(signalStrength >= 20)
signalLevel = LEVEL_GOOD;
else if(signalStrength >= 12)
signalLevel = LEVEL_MODERATE;
else if(signalStrength >= 5)
signalLevel = LEVEL_POOR;
else
SignalLevel = LEVEL_NONE;
signalLevel = LEVEL_NONE;
return SignalLevel;
return signalLevel;
}
void QAndroidSignalStrength::ApplicationStateChanged(Qt::ApplicationState State)
void QAndroidSignalStrength::applicationStateChanged(Qt::ApplicationState state)
{
SetNewAppState((State == Qt::ApplicationActive) ? APP_STATE_START : APP_STATE_STOP);
setNewAppState((state == Qt::ApplicationActive) ? APP_STATE_START : APP_STATE_STOP);
}
void QAndroidSignalStrength::SetNewAppState(APP_STATE NewState)
void QAndroidSignalStrength::setNewAppState(APP_STATE newState)
{
if(m_JavaSignalStrength.isValid())
if(m_javaSignalStrength.isValid())
{
m_JavaSignalStrength.callMethod<void>("appStateChanged",
m_javaSignalStrength.callMethod<void>("appStateChanged",
"(I)V",
NewState
newState
);
}
}

@ -54,18 +54,18 @@ public:
int getSignalStrength();
SIGNAL_LEVEL getSignalLevel();
signals:
Q_SIGNALS:
void signalStrengthChanged();
void signalLevelChanged();
private slots:
void ApplicationStateChanged(Qt::ApplicationState State);
private Q_SLOTS:
void applicationStateChanged(Qt::ApplicationState state);
private:
const QAndroidJniObject m_JavaSignalStrength;
const QAndroidJniObject m_javaSignalStrength;
static QAndroidSignalStrength *m_pInstance;
static void SignalStrengthChanged(JNIEnv *env, jobject thiz);
static void deviceSignalStrengthChanged(JNIEnv *env, jobject thiz);
enum APP_STATE
{
@ -74,5 +74,5 @@ private:
APP_STATE_STOP,
APP_STATE_DESTROY
};
void SetNewAppState(APP_STATE NewState);
void setNewAppState(APP_STATE newState);
};

@ -28,7 +28,7 @@ QAndroidSystem *QAndroidSystem::m_pInstance = nullptr;
QAndroidSystem::QAndroidSystem()
{
m_pInstance = this;
LoadStandardPaths();
loadStandardPaths();
}
QObject* QAndroidSystem::qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine)
@ -46,40 +46,40 @@ QAndroidSystem* QAndroidSystem::instance()
const QString& QAndroidSystem::getDataLocation() const
{
return m_StandardPaths.DataLocation;
return m_standardPaths.dataLocation;
}
const QString& QAndroidSystem::getConfigLocation() const
{
return m_StandardPaths.ConfigLocation;
return m_standardPaths.configLocation;
}
const QString& QAndroidSystem::getDownloadLocation() const
{
return m_StandardPaths.DownloadLocation;
return m_standardPaths.downloadLocation;
}
const QString& QAndroidSystem::getMusicLocation() const
{
return m_StandardPaths.MusicLocation;
return m_standardPaths.musicLocation;
}
const QString& QAndroidSystem::getMoviesLocation() const
{
return m_StandardPaths.MoviesLocation;
return m_standardPaths.moviesLocation;
}
const QString& QAndroidSystem::getPicturesLocation() const
{
return m_StandardPaths.PicturesLocation;
return m_standardPaths.picturesLocation;
}
void QAndroidSystem::LoadStandardPaths()
void QAndroidSystem::loadStandardPaths()
{
m_StandardPaths.DataLocation = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
m_StandardPaths.ConfigLocation = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
m_StandardPaths.DownloadLocation = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
m_StandardPaths.MusicLocation = QStandardPaths::writableLocation(QStandardPaths::MusicLocation);
m_StandardPaths.MoviesLocation = QStandardPaths::writableLocation(QStandardPaths::MoviesLocation);
m_StandardPaths.PicturesLocation = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation);
m_standardPaths.dataLocation = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
m_standardPaths.configLocation = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
m_standardPaths.downloadLocation = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation);
m_standardPaths.musicLocation = QStandardPaths::writableLocation(QStandardPaths::MusicLocation);
m_standardPaths.moviesLocation = QStandardPaths::writableLocation(QStandardPaths::MoviesLocation);
m_standardPaths.picturesLocation = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation);
}

@ -55,13 +55,13 @@ private:
static QAndroidSystem *m_pInstance;
struct {
QString DataLocation;
QString ConfigLocation;
QString DownloadLocation;
QString MusicLocation;
QString MoviesLocation;
QString PicturesLocation;
} m_StandardPaths;
QString dataLocation;
QString configLocation;
QString downloadLocation;
QString musicLocation;
QString moviesLocation;
QString picturesLocation;
} m_standardPaths;
void LoadStandardPaths();
void loadStandardPaths();
};

@ -74,12 +74,12 @@
QtAndroidTools *QtAndroidTools::m_pInstance = nullptr;
QtAndroidTools::QtAndroidTools() : m_JavaTools("com/falsinsoft/qtandroidtools/AndroidTools",
QtAndroidTools::QtAndroidTools() : m_javaTools("com/falsinsoft/qtandroidtools/AndroidTools",
"(Landroid/app/Activity;)V",
QtAndroid::androidActivity().object<jobject>())
{
m_pInstance = this;
GetActivityData();
getActivityData();
}
QObject* QtAndroidTools::qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine)
@ -88,7 +88,7 @@ QObject* QtAndroidTools::qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine
Q_UNUSED(scriptEngine);
QtAndroidTools *pAndroidTools = new QtAndroidTools();
engine->addImageProvider("QtAndroidTools", new PhotoImageProvider(&pAndroidTools->m_PhotoMap));
engine->addImageProvider("QtAndroidTools", new PhotoImageProvider(&pAndroidTools->m_photoMap));
return pAndroidTools;
}
@ -99,78 +99,78 @@ QtAndroidTools* QtAndroidTools::instance()
QtAndroidTools::ACTION_ID QtAndroidTools::getActivityAction() const
{
return m_ActivityAction;
return m_activityAction;
}
QString QtAndroidTools::getActivityMimeType() const
{
return m_ActivityMimeType;
return m_activityMimeType;
}
void QtAndroidTools::GetActivityData()
void QtAndroidTools::getActivityData()
{
if(m_JavaTools.isValid())
if(m_javaTools.isValid())
{
QAndroidJniObject MimeTypeObj;
QAndroidJniObject mimeTypeObj;
m_ActivityAction = static_cast<ACTION_ID>(m_JavaTools.callMethod<jint>("getActivityAction", "()I"));
m_activityAction = static_cast<ACTION_ID>(m_javaTools.callMethod<jint>("getActivityAction", "()I"));
MimeTypeObj = m_JavaTools.callObjectMethod("getActivityMimeType", "()Ljava/lang/String;");
if(MimeTypeObj.isValid())
mimeTypeObj = m_javaTools.callObjectMethod("getActivityMimeType", "()Ljava/lang/String;");
if(mimeTypeObj.isValid())
{
m_ActivityMimeType = MimeTypeObj.toString();
m_activityMimeType = mimeTypeObj.toString();
}
}
}
bool QtAndroidTools::insertImage(const QString &Name, const QByteArray &Data)
bool QtAndroidTools::insertImage(const QString &name, const QByteArray &data)
{
QPixmap DataImage;
QPixmap dataImage;
if(DataImage.loadFromData(Data) == true)
if(dataImage.loadFromData(data) == true)
{
m_PhotoMap.insert(Name, DataImage);
m_photoMap.insert(name, dataImage);
return true;
}
return false;
}
bool QtAndroidTools::removeImage(const QString &Name)
bool QtAndroidTools::removeImage(const QString &name)
{
return (m_PhotoMap.remove(Name) > 0) ? true : false;
return (m_photoMap.remove(name) > 0) ? true : false;
}
bool QtAndroidTools::binaryDataToFile(const QByteArray &BinaryData, const QString &FilePath)
bool QtAndroidTools::binaryDataToFile(const QByteArray &binaryData, const QString &filePath)
{
QFile BinaryFile(FilePath);
QFile binaryFile(filePath);
if(BinaryFile.open(QIODevice::WriteOnly) == true)
if(binaryFile.open(QIODevice::WriteOnly) == true)
{
if(BinaryFile.write(BinaryData) == BinaryData.size())
if(binaryFile.write(binaryData) == binaryData.size())
{
return true;
}
BinaryFile.remove();
binaryFile.remove();
}
return false;
}
QByteArray QtAndroidTools::fileToBinaryData(const QString &FilePath)
QByteArray QtAndroidTools::fileToBinaryData(const QString &filePath)
{
QFile BinaryFile(FilePath);
QByteArray BinaryData;
QFile binaryFile(filePath);
QByteArray binaryData;
if(BinaryFile.open(QIODevice::ReadOnly) == true)
if(binaryFile.open(QIODevice::ReadOnly) == true)
{
BinaryData = BinaryFile.readAll();
binaryData = binaryFile.readAll();
}
return BinaryData;
return binaryData;
}
void QtAndroidTools::InitializeQmlTools()
void QtAndroidTools::initializeQmlTools()
{
qmlRegisterSingletonType<QtAndroidTools>("QtAndroidTools", 1, 0, "QtAndroidTools", &QtAndroidTools::qmlInstance);
#ifdef QTAT_APP_PERMISSIONS

@ -44,18 +44,18 @@ class QtAndroidTools : public QObject
QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
{
QMap<QString, QPixmap>::const_iterator PhotoIterator = m_pPhotoMap->find(id);
QMap<QString, QPixmap>::const_iterator photoIterator = m_pPhotoMap->find(id);
if(PhotoIterator != m_pPhotoMap->constEnd())
if(photoIterator != m_pPhotoMap->constEnd())
{
const QPixmap Photo = PhotoIterator.value();
const QPixmap photo = photoIterator.value();
if(size) *size = Photo.size();
if(size) *size = photo.size();
if(requestedSize.width() > 0 && requestedSize.height() > 0)
return Photo.scaled(requestedSize);
return photo.scaled(requestedSize);
else
return Photo;
return photo;
}
return QPixmap();
@ -79,22 +79,22 @@ public:
static QObject* qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine);
static QtAndroidTools* instance();
static void InitializeQmlTools();
static void initializeQmlTools();
Q_INVOKABLE bool insertImage(const QString &Name, const QByteArray &Data);
Q_INVOKABLE bool removeImage(const QString &Name);
Q_INVOKABLE bool binaryDataToFile(const QByteArray &BinaryData, const QString &FilePath);
Q_INVOKABLE QByteArray fileToBinaryData(const QString &FilePath);
Q_INVOKABLE bool insertImage(const QString &name, const QByteArray &data);
Q_INVOKABLE bool removeImage(const QString &name);
Q_INVOKABLE bool binaryDataToFile(const QByteArray &binaryData, const QString &filePath);
Q_INVOKABLE QByteArray fileToBinaryData(const QString &filePath);
ACTION_ID getActivityAction() const;
QString getActivityMimeType() const;
private:
const QAndroidJniObject m_JavaTools;
const QAndroidJniObject m_javaTools;
static QtAndroidTools *m_pInstance;
QMap<QString, QPixmap> m_PhotoMap;
ACTION_ID m_ActivityAction = ACTION_NONE;
QString m_ActivityMimeType;
QMap<QString, QPixmap> m_photoMap;
ACTION_ID m_activityAction = ACTION_NONE;
QString m_activityMimeType;
void GetActivityData();
void getActivityData();
};

@ -50,11 +50,11 @@ public class AndroidAdMobBanner
private BannerSize mBannerPixelsSize = new BannerSize();
private String[] mKeywordsList = null;
public AndroidAdMobBanner(Activity ActivityInstance)
public AndroidAdMobBanner(Activity activityInstance)
{
mViewGroup = (ViewGroup)ActivityInstance.getWindow().getDecorView().findViewById(android.R.id.content);
mViewGroup = (ViewGroup)activityInstance.getWindow().getDecorView().findViewById(android.R.id.content);
mBannerListener = new BannerListener();
mActivityInstance = ActivityInstance;
mActivityInstance = activityInstance;
}
public BannerSize getPixelsSize()
@ -62,9 +62,9 @@ public class AndroidAdMobBanner
return mBannerPixelsSize;
}
public void setKeywords(String[] KeywordsList)
public void setKeywords(String[] keywordsList)
{
mKeywordsList = KeywordsList;
mKeywordsList = keywordsList;
}
public void setType(final int type)
@ -74,40 +74,40 @@ public class AndroidAdMobBanner
return;
}
SyncRunOnUiThread UiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
SyncRunOnUiThread uiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
{
public void runOnUIThread()
{
AdSize BannerSize = AdSize.BANNER;
AdSize bannerSize = AdSize.BANNER;
switch(type)
{
case TYPE_BANNER:
BannerSize = AdSize.BANNER;
bannerSize = AdSize.BANNER;
break;
case TYPE_FULL_BANNER:
BannerSize = AdSize.FULL_BANNER;
bannerSize = AdSize.FULL_BANNER;
break;
case TYPE_LARGE_BANNER:
BannerSize = AdSize.LARGE_BANNER;
bannerSize = AdSize.LARGE_BANNER;
break;
case TYPE_MEDIUM_RECTANGLE:
BannerSize = AdSize.MEDIUM_RECTANGLE;
bannerSize = AdSize.MEDIUM_RECTANGLE;
break;
case TYPE_SMART_BANNER:
BannerSize = AdSize.SMART_BANNER;
bannerSize = AdSize.SMART_BANNER;
break;
case TYPE_WIDE_SKYSCRAPER:
BannerSize = AdSize.WIDE_SKYSCRAPER;
bannerSize = AdSize.WIDE_SKYSCRAPER;
break;
}
mBannerView.setAdSize(BannerSize);
mBannerView.setAdSize(bannerSize);
mBannerPixelsSize.width = BannerSize.getWidthInPixels(mActivityInstance);
mBannerPixelsSize.height = BannerSize.getHeightInPixels(mActivityInstance);
mBannerPixelsSize.width = bannerSize.getWidthInPixels(mActivityInstance);
mBannerPixelsSize.height = bannerSize.getHeightInPixels(mActivityInstance);
}
});
UiThread.exec();
uiThread.exec();
}
public void setPos(final int posX, final int posY)
@ -117,7 +117,7 @@ public class AndroidAdMobBanner
return;
}
SyncRunOnUiThread UiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
SyncRunOnUiThread uiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
{
public void runOnUIThread()
{
@ -125,7 +125,7 @@ public class AndroidAdMobBanner
mBannerView.setY(posY);
}
});
UiThread.exec();
uiThread.exec();
}
public void setUnitId(final String unitId)
@ -135,14 +135,14 @@ public class AndroidAdMobBanner
return;
}
SyncRunOnUiThread UiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
SyncRunOnUiThread uiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
{
public void runOnUIThread()
{
mBannerView.setAdUnitId(unitId);
}
});
UiThread.exec();
uiThread.exec();
}
public void show()
@ -159,16 +159,16 @@ public class AndroidAdMobBanner
{
if(mBannerLoaded == false)
{
AdRequest.Builder BannerRequest = new AdRequest.Builder();
AdRequest.Builder bannerRequest = new AdRequest.Builder();
if(mKeywordsList != null)
{
for(String Keyword : mKeywordsList)
for(String keyword : mKeywordsList)
{
BannerRequest.addKeyword(Keyword);
bannerRequest.addKeyword(keyword);
}
}
mBannerView.loadAd(BannerRequest.build());
mBannerView.loadAd(bannerRequest.build());
bannerEvent(EVENT_LOADING);
}
@ -246,21 +246,21 @@ public class AndroidAdMobBanner
return;
}
SyncRunOnUiThread UiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
SyncRunOnUiThread uiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
{
public void runOnUIThread()
{
final FrameLayout.LayoutParams LayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
final FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
mBannerView = new AdView(mActivityInstance);
mBannerView.setLayoutParams(LayoutParams);
mBannerView.setLayoutParams(layoutParams);
mBannerView.setBackgroundColor(Color.BLACK);
mBannerView.setAdListener(mBannerListener);
mBannerView.setVisibility(View.GONE);
mViewGroup.addView(mBannerView);
}
});
UiThread.exec();
uiThread.exec();
}
private void destroyBanner()
@ -270,7 +270,7 @@ public class AndroidAdMobBanner
return;
}
SyncRunOnUiThread UiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
SyncRunOnUiThread uiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
{
public void runOnUIThread()
{
@ -280,7 +280,7 @@ public class AndroidAdMobBanner
mBannerLoaded = false;
}
});
UiThread.exec();
uiThread.exec();
}
private class BannerListener extends AdListener

@ -46,10 +46,10 @@ public class AndroidAdMobInterstitial
private InterstitialAd mInterstitialAd = null;
private boolean mInterstitialAdLoaded = false;
public AndroidAdMobInterstitial(Activity ActivityInstance)
public AndroidAdMobInterstitial(Activity activityInstance)
{
mInterstitialListener = new InterstitialListener();
mActivityInstance = ActivityInstance;
mActivityInstance = activityInstance;
}
public void setUnitId(final String unitId)
@ -59,14 +59,14 @@ public class AndroidAdMobInterstitial
return;
}
SyncRunOnUiThread UiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
SyncRunOnUiThread uiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
{
public void runOnUIThread()
{
mInterstitialAd.setAdUnitId(unitId);
}
});
UiThread.exec();
uiThread.exec();
}
public void load()
@ -81,8 +81,8 @@ public class AndroidAdMobInterstitial
@Override
public void run()
{
AdRequest.Builder InterstitialRequest = new AdRequest.Builder();
mInterstitialAd.loadAd(InterstitialRequest.build());
AdRequest.Builder interstitialRequest = new AdRequest.Builder();
mInterstitialAd.loadAd(interstitialRequest.build());
interstitialEvent(EVENT_LOADING);
mInterstitialAdLoaded = false;
}
@ -129,7 +129,7 @@ public class AndroidAdMobInterstitial
return;
}
SyncRunOnUiThread UiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
SyncRunOnUiThread uiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
{
public void runOnUIThread()
{
@ -137,7 +137,7 @@ public class AndroidAdMobInterstitial
mInterstitialAd.setAdListener(mInterstitialListener);
}
});
UiThread.exec();
uiThread.exec();
}
private void destroyInterstitial()
@ -147,7 +147,7 @@ public class AndroidAdMobInterstitial
return;
}
SyncRunOnUiThread UiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
SyncRunOnUiThread uiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
{
public void runOnUIThread()
{
@ -155,7 +155,7 @@ public class AndroidAdMobInterstitial
mInterstitialAd = null;
}
});
UiThread.exec();
uiThread.exec();
}
private class InterstitialListener extends AdListener

@ -41,11 +41,11 @@ public class AndroidAdMobRewardedVideo
private RewardedVideoAd mRewardedVideoAd = null;
public AndroidAdMobRewardedVideo(Activity ActivityInstance)
public AndroidAdMobRewardedVideo(Activity activityInstance)
{
mRewardedVideoListener = new RewardedVideoListener();
MobileAds.initialize(ActivityInstance);
mActivityInstance = ActivityInstance;
MobileAds.initialize(activityInstance);
mActivityInstance = activityInstance;
}
public void load(String unitId)
@ -111,7 +111,7 @@ public class AndroidAdMobRewardedVideo
return;
}
SyncRunOnUiThread UiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
SyncRunOnUiThread uiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
{
public void runOnUIThread()
{
@ -119,7 +119,7 @@ public class AndroidAdMobRewardedVideo
mRewardedVideoAd.setRewardedVideoAdListener(mRewardedVideoListener);
}
});
UiThread.exec();
uiThread.exec();
}
private void destroyRewardedVideoAd()
@ -129,7 +129,7 @@ public class AndroidAdMobRewardedVideo
return;
}
SyncRunOnUiThread UiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
SyncRunOnUiThread uiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
{
public void runOnUIThread()
{
@ -137,7 +137,7 @@ public class AndroidAdMobRewardedVideo
mRewardedVideoAd = null;
}
});
UiThread.exec();
uiThread.exec();
}
private class RewardedVideoListener implements RewardedVideoAdListener

@ -50,24 +50,24 @@ public class AndroidApkExpansionFiles
private final DownloaderProxy mDownloaderProxy;
private final Activity mActivityInstance;
public AndroidApkExpansionFiles(Activity ActivityInstance)
public AndroidApkExpansionFiles(Activity activityInstance)
{
NOTIFICATION_CHANNEL_ID = ActivityInstance.getClass().getName();
NOTIFICATION_CHANNEL_ID = activityInstance.getClass().getName();
mDownloaderClient = new DownloaderClient();
mDownloaderProxy = new DownloaderProxy(ActivityInstance);
mActivityInstance = ActivityInstance;
mDownloaderProxy = new DownloaderProxy(activityInstance);
mActivityInstance = activityInstance;
}
public boolean isAPKFileDelivered(boolean IsMain, int FileVersion, int FileSize)
public boolean isAPKFileDelivered(boolean isMain, int fileVersion, int fileSize)
{
final String FileName = Helpers.getExpansionAPKFileName(mActivityInstance, IsMain, FileVersion);
return Helpers.doesFileExist(mActivityInstance, FileName, FileSize, false);
final String fileName = Helpers.getExpansionAPKFileName(mActivityInstance, isMain, fileVersion);
return Helpers.doesFileExist(mActivityInstance, fileName, fileSize, false);
}
public String getExpansionAPKFileName(boolean IsMain, int FileVersion)
public String getExpansionAPKFileName(boolean isMain, int fileVersion)
{
final String FileName = Helpers.getExpansionAPKFileName(mActivityInstance, IsMain, FileVersion);
return Helpers.generateSaveFileName(mActivityInstance, FileName);
final String fileName = Helpers.getExpansionAPKFileName(mActivityInstance, isMain, fileVersion);
return Helpers.generateSaveFileName(mActivityInstance, fileName);
}
public void sendRequest(int requestID)
@ -100,15 +100,15 @@ public class AndroidApkExpansionFiles
case APP_STATE_CREATE:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
NotificationManager Manager = mActivityInstance.getSystemService(NotificationManager.class);
NotificationChannel Channel;
NotificationManager manager = mActivityInstance.getSystemService(NotificationManager.class);
NotificationChannel channel;
Channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID,
channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID,
getString(STRING_NOTIFICATION_CHANNEL_NAME),
NotificationManager.IMPORTANCE_DEFAULT
);
Manager.createNotificationChannel(Channel);
manager.createNotificationChannel(channel);
}
mDownloaderClient.register(mActivityInstance);
break;
@ -122,8 +122,8 @@ public class AndroidApkExpansionFiles
/*
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
NotificationManager Manager = mActivityInstance.getSystemService(NotificationManager.class);
Manager.deleteNotificationChannel(NOTIFICATION_CHANNEL_ID);
NotificationManager manager = mActivityInstance.getSystemService(NotificationManager.class);
manager.deleteNotificationChannel(NOTIFICATION_CHANNEL_ID);
}
*/
mDownloaderClient.unregister(mActivityInstance);
@ -133,25 +133,25 @@ public class AndroidApkExpansionFiles
public int startDownloader(String BASE64_PUBLIC_KEY, byte[] SALT)
{
int DownloadResult = -1;
int downloadResult = -1;
try
{
Intent IntentToLaunchThisActivityFromNotification;
PendingIntent PendingActivity;
Intent intentToLaunchThisActivityFromNotification;
PendingIntent pendingActivity;
IntentToLaunchThisActivityFromNotification = new Intent(mActivityInstance, mActivityInstance.getClass());
IntentToLaunchThisActivityFromNotification.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
intentToLaunchThisActivityFromNotification = new Intent(mActivityInstance, mActivityInstance.getClass());
intentToLaunchThisActivityFromNotification.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingActivity = PendingIntent.getActivity(mActivityInstance,
pendingActivity = PendingIntent.getActivity(mActivityInstance,
0,
IntentToLaunchThisActivityFromNotification,
intentToLaunchThisActivityFromNotification,
PendingIntent.FLAG_UPDATE_CURRENT
);
DownloadResult = DownloaderService.startDownloadServiceIfRequired(mActivityInstance,
downloadResult = DownloaderService.startDownloadServiceIfRequired(mActivityInstance,
NOTIFICATION_CHANNEL_ID,
PendingActivity,
pendingActivity,
SALT,
BASE64_PUBLIC_KEY
);
@ -161,7 +161,7 @@ public class AndroidApkExpansionFiles
e.printStackTrace();
}
return DownloadResult;
return downloadResult;
}
private class DownloaderClient extends BroadcastDownloaderClient

@ -41,11 +41,11 @@ public class AndroidBatteryState
private int mLevel = 0;
private boolean mOnCharge = false;
public AndroidBatteryState(Activity ActivityInstance)
public AndroidBatteryState(Activity activityInstance)
{
mBatteryStateChangeReceiver = new BatteryStateChangeReceiver();
mBatteryStateFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
mActivityInstance = ActivityInstance;
mActivityInstance = activityInstance;
}
public int getLevel()
@ -88,22 +88,22 @@ public class AndroidBatteryState
@Override
public void onReceive(Context context, Intent intent)
{
final boolean CurrentOnCharge = (intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) == 0) ? false : true;
final int Level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
final int Scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
final boolean currentOnCharge = (intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) == 0) ? false : true;
final int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
final int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
if(Level >= 0 && Scale > 0)
if(level >= 0 && scale > 0)
{
final int CurrentLevel = ((Level * 100) / Scale);
if(CurrentLevel != mLevel)
final int currentLevel = ((level * 100) / scale);
if(currentLevel != mLevel)
{
mLevel = CurrentLevel;
mLevel = currentLevel;
batteryLevelChanged();
}
}
if(CurrentOnCharge != mOnCharge)
if(currentOnCharge != mOnCharge)
{
mOnCharge = CurrentOnCharge;
mOnCharge = currentOnCharge;
batteryOnChargeChanged();
}
}

@ -57,65 +57,65 @@ public class AndroidGoogleAccount
private final Activity mActivityInstance;
private GoogleSignInClient mGoogleSignInClient = null;
public AndroidGoogleAccount(Activity ActivityInstance)
public AndroidGoogleAccount(Activity activityInstance)
{
mActivityInstance = ActivityInstance;
mActivityInstance = activityInstance;
}
private GoogleSignInClient getSignInClient(String ScopeName)
private GoogleSignInClient getSignInClient(String scopeName)
{
GoogleSignInOptions.Builder SignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN);
if(ScopeName.isEmpty() == false) SignInOptions.requestScopes(new Scope(ScopeName));
SignInOptions.requestEmail();
GoogleSignInOptions.Builder signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN);
if(scopeName.isEmpty() == false) signInOptions.requestScopes(new Scope(scopeName));
signInOptions.requestEmail();
return GoogleSignIn.getClient(mActivityInstance, SignInOptions.build());
return GoogleSignIn.getClient(mActivityInstance, signInOptions.build());
}
public Intent getSignInIntent(String ScopeName)
public Intent getSignInIntent(String scopeName)
{
Intent SignInIntent = null;
Intent signInIntent = null;
if(mGoogleSignInClient == null)
{
mGoogleSignInClient = getSignInClient(ScopeName);
SignInIntent = mGoogleSignInClient.getSignInIntent();
mGoogleSignInClient = getSignInClient(scopeName);
signInIntent = mGoogleSignInClient.getSignInIntent();
}
return SignInIntent;
return signInIntent;
}
public void signInIntentDataResult(Intent Data)
public void signInIntentDataResult(Intent data)
{
final Task<GoogleSignInAccount> SignInTask = GoogleSignIn.getSignedInAccountFromIntent(Data);
final Task<GoogleSignInAccount> signInTask = GoogleSignIn.getSignedInAccountFromIntent(data);
if(SignInTask.isSuccessful())
if(signInTask.isSuccessful())
{
loadSignedInAccountInfo(SignInTask.getResult());
loadSignedInAccountInfo(signInTask.getResult());
signedIn(true);
}
else
{
SignInTask.addOnCompleteListener(mActivityInstance, new SignInAccountListener());
signInTask.addOnCompleteListener(mActivityInstance, new SignInAccountListener());
}
}
public boolean signIn(String ScopeName)
public boolean signIn(String scopeName)
{
if(mGoogleSignInClient == null)
{
Task<GoogleSignInAccount> SignInTask;
Task<GoogleSignInAccount> signInTask;
mGoogleSignInClient = getSignInClient(ScopeName);
mGoogleSignInClient = getSignInClient(scopeName);
SignInTask = mGoogleSignInClient.silentSignIn();
if(SignInTask.isSuccessful())
signInTask = mGoogleSignInClient.silentSignIn();
if(signInTask.isSuccessful())
{
loadSignedInAccountInfo(SignInTask.getResult());
loadSignedInAccountInfo(signInTask.getResult());
signedIn(true);
}
else
{
SignInTask.addOnCompleteListener(mActivityInstance, new SignInAccountListener());
signInTask.addOnCompleteListener(mActivityInstance, new SignInAccountListener());
}
return true;
@ -128,9 +128,9 @@ public class AndroidGoogleAccount
{
if(mGoogleSignInClient != null)
{
final Task<Void> SignOutTask = mGoogleSignInClient.signOut();
final Task<Void> signOutTask = mGoogleSignInClient.signOut();
if(SignOutTask.isSuccessful())
if(signOutTask.isSuccessful())
{
updateSignedInAccountInfo(null);
mGoogleSignInClient = null;
@ -138,7 +138,7 @@ public class AndroidGoogleAccount
}
else
{
SignOutTask.addOnCompleteListener(mActivityInstance, new SignOutAccountListener());
signOutTask.addOnCompleteListener(mActivityInstance, new SignOutAccountListener());
}
return true;
@ -151,9 +151,9 @@ public class AndroidGoogleAccount
{
if(mGoogleSignInClient != null)
{
final Task<Void> SignOutTask = mGoogleSignInClient.revokeAccess();
final Task<Void> signOutTask = mGoogleSignInClient.revokeAccess();
if(SignOutTask.isSuccessful())
if(signOutTask.isSuccessful())
{
updateSignedInAccountInfo(null);
mGoogleSignInClient = null;
@ -161,7 +161,7 @@ public class AndroidGoogleAccount
}
else
{
SignOutTask.addOnCompleteListener(mActivityInstance, new SignOutAccountListener());
signOutTask.addOnCompleteListener(mActivityInstance, new SignOutAccountListener());
}
return true;
@ -170,28 +170,28 @@ public class AndroidGoogleAccount
return false;
}
private boolean loadSignedInAccountInfo(final GoogleSignInAccount SignedInAccount)
private boolean loadSignedInAccountInfo(final GoogleSignInAccount signedInAccount)
{
if(SignedInAccount != null)
if(signedInAccount != null)
{
AccountInfo SignedInAccountInfo = new AccountInfo();
final Uri PhotoUrl = SignedInAccount.getPhotoUrl();
AccountInfo signedInAccountInfo = new AccountInfo();
final Uri photoUrl = signedInAccount.getPhotoUrl();
SignedInAccountInfo.id = SignedInAccount.getId();
SignedInAccountInfo.displayName = SignedInAccount.getDisplayName();
SignedInAccountInfo.email = SignedInAccount.getEmail();
SignedInAccountInfo.familyName = SignedInAccount.getFamilyName();
SignedInAccountInfo.givenName = SignedInAccount.getGivenName();
signedInAccountInfo.id = signedInAccount.getId();
signedInAccountInfo.displayName = signedInAccount.getDisplayName();
signedInAccountInfo.email = signedInAccount.getEmail();
signedInAccountInfo.familyName = signedInAccount.getFamilyName();
signedInAccountInfo.givenName = signedInAccount.getGivenName();
if(PhotoUrl != null)
if(photoUrl != null)
{
DownloadAccountPhotoTask DownloadAccountPhoto = new DownloadAccountPhotoTask(SignedInAccountInfo);
DownloadAccountPhoto.execute(PhotoUrl.toString());
DownloadAccountPhotoTask downloadAccountPhoto = new DownloadAccountPhotoTask(signedInAccountInfo);
downloadAccountPhoto.execute(photoUrl.toString());
}
else
{
SignedInAccountInfo.photo = null;
updateSignedInAccountInfo(SignedInAccountInfo);
signedInAccountInfo.photo = null;
updateSignedInAccountInfo(signedInAccountInfo);
}
return true;
@ -204,31 +204,31 @@ public class AndroidGoogleAccount
{
private AccountInfo mSignedInAccountInfo;
DownloadAccountPhotoTask(AccountInfo SignedInAccountInfo)
DownloadAccountPhotoTask(AccountInfo signedInAccountInfo)
{
mSignedInAccountInfo = SignedInAccountInfo;
mSignedInAccountInfo = signedInAccountInfo;
}
protected Bitmap doInBackground(String... urls)
{
final String PhotoUrl = urls[0];
Bitmap AccountPhoto = null;
final String photoUrl = urls[0];
Bitmap accountPhoto = null;
try
{
InputStream PhotoStream = new java.net.URL(PhotoUrl).openStream();
AccountPhoto = BitmapFactory.decodeStream(PhotoStream);
InputStream photoStream = new java.net.URL(photoUrl).openStream();
accountPhoto = BitmapFactory.decodeStream(photoStream);
}
catch(Exception e)
{
}
return AccountPhoto;
return accountPhoto;
}
protected void onPostExecute(Bitmap AccountPhoto)
protected void onPostExecute(Bitmap accountPhoto)
{
mSignedInAccountInfo.photo = AccountPhoto;
mSignedInAccountInfo.photo = accountPhoto;
updateSignedInAccountInfo(mSignedInAccountInfo);
}
}
@ -236,13 +236,13 @@ public class AndroidGoogleAccount
private class SignInAccountListener implements OnCompleteListener<GoogleSignInAccount>
{
@Override
public void onComplete(@NonNull Task<GoogleSignInAccount> SignInTask)
public void onComplete(@NonNull Task<GoogleSignInAccount> signInTask)
{
boolean signInSuccessfully = true;
try
{
loadSignedInAccountInfo(SignInTask.getResult(ApiException.class));
loadSignedInAccountInfo(signInTask.getResult(ApiException.class));
}
catch(ApiException e)
{
@ -266,7 +266,7 @@ public class AndroidGoogleAccount
private class SignOutAccountListener implements OnCompleteListener<Void>
{
@Override
public void onComplete(@NonNull Task<Void> SignOutTask)
public void onComplete(@NonNull Task<Void> signOutTask)
{
updateSignedInAccountInfo(null);
mGoogleSignInClient = null;

@ -66,26 +66,26 @@ public class AndroidGoogleDrive
private final Activity mActivityInstance;
private Drive mDriveService = null;
public AndroidGoogleDrive(Activity ActivityInstance)
public AndroidGoogleDrive(Activity activityInstance)
{
mActivityInstance = ActivityInstance;
mActivityInstance = activityInstance;
}
public boolean authenticate(String AppName, String ScopeName)
public boolean authenticate(String appName, String scopeName)
{
final GoogleSignInAccount SignInAccount = GoogleSignIn.getLastSignedInAccount(mActivityInstance);
final GoogleSignInAccount signInAccount = GoogleSignIn.getLastSignedInAccount(mActivityInstance);
if(SignInAccount != null)
if(signInAccount != null)
{
GoogleAccountCredential AccountCredential;
Drive.Builder DriveBuilder;
GoogleAccountCredential accountCredential;
Drive.Builder driveBuilder;
AccountCredential = GoogleAccountCredential.usingOAuth2(mActivityInstance, Collections.singleton(ScopeName));
AccountCredential.setSelectedAccount(SignInAccount.getAccount());
accountCredential = GoogleAccountCredential.usingOAuth2(mActivityInstance, Collections.singleton(scopeName));
accountCredential.setSelectedAccount(signInAccount.getAccount());
DriveBuilder = new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), AccountCredential);
DriveBuilder.setApplicationName(AppName);
mDriveService = DriveBuilder.build();
driveBuilder = new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), accountCredential);
driveBuilder.setApplicationName(appName);
mDriveService = driveBuilder.build();
return true;
}
@ -103,12 +103,12 @@ public class AndroidGoogleDrive
{
if(mDriveService != null)
{
DriveFile[] DriveFileList;
File[] FileList;
DriveFile[] driveFileList;
File[] fileList;
try
{
FileList = mDriveService.files()
fileList = mDriveService.files()
.list()
.setQ(Query)
.setSpaces("drive")
@ -128,21 +128,21 @@ public class AndroidGoogleDrive
return null;
}
DriveFileList = new DriveFile[FileList.length];
for(int i = 0; i < FileList.length; i++)
driveFileList = new DriveFile[fileList.length];
for(int i = 0; i < fileList.length; i++)
{
DriveFile FileData = new DriveFile();
final File FileInfo = FileList[i];
DriveFile fileData = new DriveFile();
final File fileInfo = fileList[i];
FileData.id = FileInfo.getId();
FileData.name = FileInfo.getName();
FileData.mimeType = FileInfo.getMimeType();
FileData.parents = (FileInfo.getParents() != null) ? FileInfo.getParents().toArray(new String[0]) : null;
fileData.id = fileInfo.getId();
fileData.name = fileInfo.getName();
fileData.mimeType = fileInfo.getMimeType();
fileData.parents = (fileInfo.getParents() != null) ? fileInfo.getParents().toArray(new String[0]) : null;
DriveFileList[i] = FileData;
driveFileList[i] = fileData;
}
return DriveFileList;
return driveFileList;
}
return null;
@ -152,11 +152,11 @@ public class AndroidGoogleDrive
{
if(mDriveService != null)
{
File FileInfo;
File fileInfo;
try
{
FileInfo = mDriveService.files()
fileInfo = mDriveService.files()
.get("root")
.execute();
}
@ -166,27 +166,27 @@ public class AndroidGoogleDrive
return null;
}
return FileInfo.getId();
return fileInfo.getId();
}
return null;
}
public String createFolder(String Name, String ParentFolderId)
public String createFolder(String name, String parentFolderId)
{
if(mDriveService != null)
{
File FolderMetadata = new File();
File FolderData;
File folderMetadata = new File();
File folderData;
FolderMetadata.setName(Name);
FolderMetadata.setMimeType("application/vnd.google-apps.folder");
if(!ParentFolderId.isEmpty()) FolderMetadata.setParents(Collections.singletonList(ParentFolderId));
folderMetadata.setName(name);
folderMetadata.setMimeType("application/vnd.google-apps.folder");
if(!parentFolderId.isEmpty()) folderMetadata.setParents(Collections.singletonList(parentFolderId));
try
{
FolderData = mDriveService.files()
.create(FolderMetadata)
folderData = mDriveService.files()
.create(folderMetadata)
.setFields("id")
.execute();
}
@ -196,23 +196,23 @@ public class AndroidGoogleDrive
return null;
}
return FolderData.getId();
return folderData.getId();
}
return null;
}
public File getFileMetadata(String FileId, String Fields)
public File getFileMetadata(String fileId, String fields)
{
if(mDriveService != null)
{
File FileInfo;
File fileInfo;
try
{
FileInfo = mDriveService.files()
.get(FileId)
.setFields(Fields)
fileInfo = mDriveService.files()
.get(fileId)
.setFields(fields)
.execute();
}
catch(IOException e)
@ -221,23 +221,23 @@ public class AndroidGoogleDrive
return null;
}
return FileInfo;
return fileInfo;
}
return null;
}
public boolean moveFile(String FileId, String FolderId)
public boolean moveFile(String fileId, String folderId)
{
if(mDriveService != null)
{
StringBuilder PreviousParents = new StringBuilder();
File ParentData, FileData;
StringBuilder previousParents = new StringBuilder();
File parentData, fileData;
try
{
ParentData = mDriveService.files()
.get(FileId)
parentData = mDriveService.files()
.get(fileId)
.setFields("parents")
.execute();
}
@ -247,18 +247,18 @@ public class AndroidGoogleDrive
return false;
}
for(String ParentId : ParentData.getParents())
for(String parentId : parentData.getParents())
{
PreviousParents.append(ParentId);
PreviousParents.append(',');
previousParents.append(parentId);
previousParents.append(',');
}
try
{
FileData = mDriveService.files()
.update(FileId, null)
.setAddParents(FolderId)
.setRemoveParents(PreviousParents.toString())
fileData = mDriveService.files()
.update(fileId, null)
.setAddParents(folderId)
.setRemoveParents(previousParents.toString())
.setFields("id, parents")
.execute();
}
@ -274,14 +274,14 @@ public class AndroidGoogleDrive
return false;
}
public boolean deleteFile(String FileId)
public boolean deleteFile(String fileId)
{
if(mDriveService != null)
{
try
{
mDriveService.files()
.delete(FileId)
.delete(fileId)
.execute();
}
catch(IOException e)
@ -296,15 +296,15 @@ public class AndroidGoogleDrive
return false;
}
public boolean downloadFile(String FileId, String LocalFilePath)
public boolean downloadFile(String fileId, String localFilePath)
{
if(mDriveService != null)
{
try
{
Drive.Files.Get FileDownloadRequest = mDriveService.files().get(FileId);
FileDownloadRequest.getMediaHttpDownloader().setProgressListener(new FileDownloadProgressListener());
FileDownloadRequest.executeMediaAndDownloadTo(new FileOutputStream(LocalFilePath));
Drive.Files.Get fileDownloadRequest = mDriveService.files().get(fileId);
fileDownloadRequest.getMediaHttpDownloader().setProgressListener(new FileDownloadProgressListener());
fileDownloadRequest.executeMediaAndDownloadTo(new FileOutputStream(localFilePath));
}
catch(IOException e)
{
@ -318,22 +318,22 @@ public class AndroidGoogleDrive
return false;
}
public String uploadFile(String LocalFilePath, String Name, String MimeType, String ParentFolderId)
public String uploadFile(String localFilePath, String name, String mimeType, String parentFolderId)
{
if(mDriveService != null)
{
java.io.File MediaFile = new java.io.File(LocalFilePath);
File FileMetadata = new File();
File UploadedFileData;
java.io.File mediaFile = new java.io.File(localFilePath);
File fileMetadata = new File();
File uploadedFileData;
FileMetadata.setName(Name);
if(!ParentFolderId.isEmpty()) FileMetadata.setParents(Collections.singletonList(ParentFolderId));
fileMetadata.setName(name);
if(!parentFolderId.isEmpty()) fileMetadata.setParents(Collections.singletonList(parentFolderId));
try
{
Drive.Files.Create FileUploadRequest = mDriveService.files().create(FileMetadata, new FileContent(MimeType, MediaFile));
FileUploadRequest.getMediaHttpUploader().setProgressListener(new FileUploadProgressListener());
UploadedFileData = FileUploadRequest.setFields("id").execute();
Drive.Files.Create fileUploadRequest = mDriveService.files().create(fileMetadata, new FileContent(mimeType, mediaFile));
fileUploadRequest.getMediaHttpUploader().setProgressListener(new FileUploadProgressListener());
uploadedFileData = fileUploadRequest.setFields("id").execute();
}
catch(FileNotFoundException e)
{
@ -346,7 +346,7 @@ public class AndroidGoogleDrive
return null;
}
return UploadedFileData.getId();
return uploadedFileData.getId();
}
return null;

@ -37,18 +37,18 @@ public class AndroidImages
{
private final Activity mActivityInstance;
public AndroidImages(Activity ActivityInstance)
public AndroidImages(Activity activityInstance)
{
mActivityInstance = ActivityInstance;
mActivityInstance = activityInstance;
}
public AlbumInfo[] getAlbumsList()
{
final ContentResolver Resolver = mActivityInstance.getContentResolver();
AlbumInfo[] AlbumsList = null;
final ContentResolver resolver = mActivityInstance.getContentResolver();
AlbumInfo[] albumsList = null;
Cursor cur;
cur = Resolver.query(MediaStore.Files.getContentUri("external"),
cur = resolver.query(MediaStore.Files.getContentUri("external"),
new String[]{ MediaStore.Files.FileColumns.PARENT, MediaStore.Images.Media.BUCKET_DISPLAY_NAME },
MediaStore.Files.FileColumns.MEDIA_TYPE + "=? ) GROUP BY ( " + MediaStore.Files.FileColumns.PARENT + " ",
new String[] { String.valueOf(MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE) },
@ -58,17 +58,17 @@ public class AndroidImages
{
if(cur.moveToFirst())
{
final int IdColumnIdx = cur.getColumnIndex(MediaStore.Files.FileColumns.PARENT);
final int NameColumnIdx = cur.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
AlbumsList = new AlbumInfo[cur.getCount()];
final int idColumnIdx = cur.getColumnIndex(MediaStore.Files.FileColumns.PARENT);
final int nameColumnIdx = cur.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
albumsList = new AlbumInfo[cur.getCount()];
for(int i = 0; i < AlbumsList.length; i++)
for(int i = 0; i < albumsList.length; i++)
{
AlbumInfo Album = new AlbumInfo();
AlbumInfo album = new AlbumInfo();
Album.id = cur.getInt(IdColumnIdx);
Album.name = cur.getString(NameColumnIdx);
AlbumsList[i] = Album;
album.id = cur.getInt(idColumnIdx);
album.name = cur.getString(nameColumnIdx);
albumsList[i] = album;
cur.moveToNext();
}
@ -76,16 +76,16 @@ public class AndroidImages
cur.close();
}
return AlbumsList;
return albumsList;
}
public String[] getAlbumImagesList(int albumId)
{
final ContentResolver Resolver = mActivityInstance.getContentResolver();
String[] ImagesList = null;
final ContentResolver resolver = mActivityInstance.getContentResolver();
String[] imagesList = null;
Cursor cur;
cur = Resolver.query(MediaStore.Files.getContentUri("external"),
cur = resolver.query(MediaStore.Files.getContentUri("external"),
new String[]{ MediaStore.Images.Media.DATA },
MediaStore.Files.FileColumns.MEDIA_TYPE + "=? and " + MediaStore.Files.FileColumns.PARENT + "=?",
new String[] { String.valueOf(MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE), String.valueOf(albumId) },
@ -95,19 +95,19 @@ public class AndroidImages
{
if(cur.moveToFirst())
{
final int NameColumnIdx = cur.getColumnIndex(MediaStore.Images.Media.DATA);
ImagesList = new String[cur.getCount()];
final int nameColumnIdx = cur.getColumnIndex(MediaStore.Images.Media.DATA);
imagesList = new String[cur.getCount()];
for(int i = 0; i < ImagesList.length; i++)
for(int i = 0; i < imagesList.length; i++)
{
ImagesList[i] = cur.getString(NameColumnIdx);
imagesList[i] = cur.getString(nameColumnIdx);
cur.moveToNext();
}
}
cur.close();
}
return ImagesList;
return imagesList;
}
public static class AlbumInfo

@ -43,12 +43,12 @@ public class AndroidNotification
private final Activity mActivityInstance;
private final int mNotificationId;
public AndroidNotification(Activity ActivityInstance, int InstanceId)
public AndroidNotification(Activity activityInstance, int instanceId)
{
NOTIFICATION_CHANNEL_ID = (ActivityInstance.getClass().getName() + Integer.toString(InstanceId));
mAppNotification = new NotificationCompat.Builder(ActivityInstance, NOTIFICATION_CHANNEL_ID);
mActivityInstance = ActivityInstance;
mNotificationId = (InstanceId + 1);
NOTIFICATION_CHANNEL_ID = (activityInstance.getClass().getName() + Integer.toString(instanceId));
mAppNotification = new NotificationCompat.Builder(activityInstance, NOTIFICATION_CHANNEL_ID);
mActivityInstance = activityInstance;
mNotificationId = (instanceId + 1);
configure();
}
@ -66,15 +66,15 @@ public class AndroidNotification
public void show()
{
NotificationManagerCompat Manager = NotificationManagerCompat.from(mActivityInstance);
NotificationManagerCompat manager = NotificationManagerCompat.from(mActivityInstance);
mAppNotification.setPriority(NotificationCompat.PRIORITY_DEFAULT);
Manager.notify(mNotificationId, mAppNotification.build());
manager.notify(mNotificationId, mAppNotification.build());
}
public void cancel()
{
NotificationManagerCompat Manager = NotificationManagerCompat.from(mActivityInstance);
Manager.cancel(mNotificationId);
NotificationManagerCompat manager = NotificationManagerCompat.from(mActivityInstance);
manager.cancel(mNotificationId);
}
public void setTitle(String title)
@ -111,15 +111,15 @@ public class AndroidNotification
{
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
NotificationManager Manager = mActivityInstance.getSystemService(NotificationManager.class);
NotificationChannel Channel;
NotificationManager manager = mActivityInstance.getSystemService(NotificationManager.class);
NotificationChannel channel;
Channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID,
channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID,
channelName,
NotificationManager.IMPORTANCE_DEFAULT
);
Manager.createNotificationChannel(Channel);
manager.createNotificationChannel(channel);
}
}
@ -127,8 +127,8 @@ public class AndroidNotification
{
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
NotificationManager Manager = mActivityInstance.getSystemService(NotificationManager.class);
Manager.deleteNotificationChannel(NOTIFICATION_CHANNEL_ID);
NotificationManager manager = mActivityInstance.getSystemService(NotificationManager.class);
manager.deleteNotificationChannel(NOTIFICATION_CHANNEL_ID);
}
}
}

@ -38,35 +38,35 @@ public class AndroidPlayStore
{
private final Activity mActivityInstance;
public AndroidPlayStore(Activity ActivityInstance)
public AndroidPlayStore(Activity activityInstance)
{
mActivityInstance = ActivityInstance;
mActivityInstance = activityInstance;
}
public void open(String params)
{
Intent PlayStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://" + params));
final List<ResolveInfo> AppInfoList = mActivityInstance.getPackageManager().queryIntentActivities(PlayStoreIntent, 0);
boolean PlayStoreFound = false;
Intent playStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://" + params));
final List<ResolveInfo> appInfoList = mActivityInstance.getPackageManager().queryIntentActivities(playStoreIntent, 0);
boolean playStoreFound = false;
for(ResolveInfo AppInfo: AppInfoList)
for(ResolveInfo appInfo : appInfoList)
{
if(AppInfo.activityInfo.applicationInfo.packageName.equals("com.android.vending"))
if(appInfo.activityInfo.applicationInfo.packageName.equals("com.android.vending"))
{
PlayStoreFound = true;
playStoreFound = true;
PlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_CLEAR_TOP);
PlayStoreIntent.setComponent(new ComponentName(AppInfo.activityInfo.applicationInfo.packageName, AppInfo.activityInfo.name));
playStoreIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_CLEAR_TOP);
playStoreIntent.setComponent(new ComponentName(appInfo.activityInfo.applicationInfo.packageName, appInfo.activityInfo.name));
mActivityInstance.startActivity(PlayStoreIntent);
mActivityInstance.startActivity(playStoreIntent);
break;
}
}
if(PlayStoreFound == false)
if(playStoreFound == false)
{
Intent WebPlayStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/" + params));
mActivityInstance.startActivity(WebPlayStoreIntent);
Intent webPlayStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/" + params));
mActivityInstance.startActivity(webPlayStoreIntent);
}
}
}

@ -53,9 +53,9 @@ public class AndroidSharing
private final Activity mActivityInstance;
private ParcelFileDescriptor mRequestedSharedFile = null;
public AndroidSharing(Activity ActivityInstance)
public AndroidSharing(Activity activityInstance)
{
mActivityInstance = ActivityInstance;
mActivityInstance = activityInstance;
}
public String getReceivedSharedText()
@ -65,16 +65,16 @@ public class AndroidSharing
public byte[] getReceivedSharedBinaryData()
{
final Uri DataUri = (Uri) mActivityInstance.getIntent().getParcelableExtra(Intent.EXTRA_STREAM);
byte[] ByteArray = null;
final Uri dataUri = (Uri) mActivityInstance.getIntent().getParcelableExtra(Intent.EXTRA_STREAM);
byte[] binaryData = null;
if(DataUri != null)
if(dataUri != null)
{
try
{
final InputStream DataStream = mActivityInstance.getContentResolver().openInputStream(DataUri);
ByteArray = new byte[DataStream.available()];
DataStream.read(ByteArray);
final InputStream dataStream = mActivityInstance.getContentResolver().openInputStream(dataUri);
binaryData = new byte[dataStream.available()];
dataStream.read(binaryData);
}
catch(FileNotFoundException e)
{
@ -86,27 +86,27 @@ public class AndroidSharing
}
}
return ByteArray;
return binaryData;
}
public byte[][] getReceivedMultipleSharedBinaryData()
{
final ArrayList<Uri> UriArray = mActivityInstance.getIntent().getParcelableArrayListExtra(Intent.EXTRA_STREAM);
byte[][] MultipleByteArray = null;
final ArrayList<Uri> uriArray = mActivityInstance.getIntent().getParcelableArrayListExtra(Intent.EXTRA_STREAM);
byte[][] multipleBinaryData = null;
if(UriArray != null)
if(uriArray != null)
{
final int UriNum = UriArray.size();
final int uriNum = uriArray.size();
MultipleByteArray = new byte[UriNum][];
multipleBinaryData = new byte[uriNum][];
for(int i = 0; i < UriNum; i++)
for(int i = 0; i < uriNum; i++)
{
try
{
final InputStream DataStream = mActivityInstance.getContentResolver().openInputStream(UriArray.get(i));
MultipleByteArray[i] = new byte[DataStream.available()];
DataStream.read(MultipleByteArray[i]);
final InputStream dataStream = mActivityInstance.getContentResolver().openInputStream(uriArray.get(i));
multipleBinaryData[i] = new byte[dataStream.available()];
dataStream.read(multipleBinaryData[i]);
}
catch(FileNotFoundException e)
{
@ -119,79 +119,79 @@ public class AndroidSharing
}
}
return MultipleByteArray;
return multipleBinaryData;
}
public boolean shareText(String Text)
public boolean shareText(String text)
{
final Intent SendIntent = new Intent();
final Intent sendIntent = new Intent();
SendIntent.setAction(Intent.ACTION_SEND);
SendIntent.putExtra(Intent.EXTRA_TEXT, Text);
SendIntent.setType("text/plain");
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, text);
sendIntent.setType("text/plain");
mActivityInstance.startActivity(Intent.createChooser(SendIntent, null));
mActivityInstance.startActivity(Intent.createChooser(sendIntent, null));
return true;
}
public boolean shareBinaryData(String MimeType, String DataFilePath)
public boolean shareBinaryData(String mimeType, String dataFilePath)
{
final String PackageName = mActivityInstance.getApplicationContext().getPackageName();
final Intent SendIntent = new Intent();
Uri FileUri;
final String packageName = mActivityInstance.getApplicationContext().getPackageName();
final Intent sendIntent = new Intent();
Uri fileUri;
try
{
FileUri = FileProvider.getUriForFile(mActivityInstance,
PackageName + ".qtandroidtoolsfileprovider",
new File(DataFilePath)
fileUri = FileProvider.getUriForFile(mActivityInstance,
packageName + ".qtandroidtoolsfileprovider",
new File(dataFilePath)
);
}
catch(IllegalArgumentException e)
{
Log.e(TAG, "The selected file can't be shared: " + DataFilePath);
Log.e(TAG, "The selected file can't be shared: " + dataFilePath);
return false;
}
SendIntent.setAction(Intent.ACTION_SEND);
SendIntent.putExtra(Intent.EXTRA_STREAM, FileUri);
SendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
SendIntent.setType(MimeType);
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, fileUri);
sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
sendIntent.setType(mimeType);
mActivityInstance.startActivity(Intent.createChooser(SendIntent, null));
mActivityInstance.startActivity(Intent.createChooser(sendIntent, null));
return true;
}
public boolean shareFile(boolean FileAvailable, String MimeType, String FilePath)
public boolean shareFile(boolean fileAvailable, String mimeType, String filePath)
{
final String PackageName = mActivityInstance.getApplicationContext().getPackageName();
final Intent ReturnFileIntent = new Intent(PackageName + ".ACTION_RETURN_FILE");
final String packageName = mActivityInstance.getApplicationContext().getPackageName();
final Intent returnFileIntent = new Intent(packageName + ".ACTION_RETURN_FILE");
if(FileAvailable == true)
if(fileAvailable == true)
{
Uri FileUri;
Uri fileUri;
try
{
FileUri = FileProvider.getUriForFile(mActivityInstance,
PackageName + ".qtandroidtoolsfileprovider",
new File(FilePath)
fileUri = FileProvider.getUriForFile(mActivityInstance,
packageName + ".qtandroidtoolsfileprovider",
new File(filePath)
);
}
catch(IllegalArgumentException e)
{
Log.e(TAG, "The selected file can't be shared: " + FilePath);
Log.e(TAG, "The selected file can't be shared: " + filePath);
return false;
}
ReturnFileIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
ReturnFileIntent.setDataAndType(FileUri, MimeType);
mActivityInstance.setResult(Activity.RESULT_OK, ReturnFileIntent);
returnFileIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
returnFileIntent.setDataAndType(fileUri, mimeType);
mActivityInstance.setResult(Activity.RESULT_OK, returnFileIntent);
}
else
{
ReturnFileIntent.setDataAndType(null, "");
mActivityInstance.setResult(Activity.RESULT_CANCELED, ReturnFileIntent);
returnFileIntent.setDataAndType(null, "");
mActivityInstance.setResult(Activity.RESULT_CANCELED, returnFileIntent);
}
return true;
@ -199,15 +199,15 @@ public class AndroidSharing
public byte[] getRequestedSharedFile()
{
byte[] ByteArray = null;
byte[] fileData = null;
if(mRequestedSharedFile != null)
{
try
{
final FileInputStream DataStream = new FileInputStream(mRequestedSharedFile.getFileDescriptor());
ByteArray = new byte[DataStream.available()];
DataStream.read(ByteArray);
final FileInputStream dataStream = new FileInputStream(mRequestedSharedFile.getFileDescriptor());
fileData = new byte[dataStream.available()];
dataStream.read(fileData);
}
catch(IOException e)
{
@ -217,29 +217,29 @@ public class AndroidSharing
closeRequestedSharedFile();
}
return ByteArray;
return fileData;
}
public Intent getRequestSharedFileIntent(String MimeType)
public Intent getRequestSharedFileIntent(String mimeType)
{
final Intent RequestFileIntent = new Intent(Intent.ACTION_PICK);
RequestFileIntent.setType(MimeType);
return RequestFileIntent;
final Intent requestFileIntent = new Intent(Intent.ACTION_PICK);
requestFileIntent.setType(mimeType);
return requestFileIntent;
}
public boolean requestSharedFileIntentDataResult(Intent Data)
public boolean requestSharedFileIntentDataResult(Intent data)
{
final ContentResolver Resolver = mActivityInstance.getContentResolver();
final Uri SharedFileUri = Data.getData();
String FileName, MimeType;
Cursor DataCursor;
long FileSize;
final ContentResolver resolver = mActivityInstance.getContentResolver();
final Uri sharedFileUri = data.getData();
String fileName, mimeType;
Cursor dataCursor;
long fileSize;
closeRequestedSharedFile();
try
{
mRequestedSharedFile = Resolver.openFileDescriptor(SharedFileUri, "r");
mRequestedSharedFile = resolver.openFileDescriptor(sharedFileUri, "r");
}
catch(FileNotFoundException e)
{
@ -247,13 +247,13 @@ public class AndroidSharing
return false;
}
DataCursor = Resolver.query(SharedFileUri, null, null, null, null);
DataCursor.moveToFirst();
FileName = DataCursor.getString(DataCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
FileSize = DataCursor.getLong(DataCursor.getColumnIndex(OpenableColumns.SIZE));
MimeType = Resolver.getType(SharedFileUri);
dataCursor = resolver.query(sharedFileUri, null, null, null, null);
dataCursor.moveToFirst();
fileName = dataCursor.getString(dataCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
fileSize = dataCursor.getLong(dataCursor.getColumnIndex(OpenableColumns.SIZE));
mimeType = resolver.getType(sharedFileUri);
requestedSharedFileInfo(MimeType, FileName, FileSize);
requestedSharedFileInfo(mimeType, fileName, fileSize);
return true;
}

@ -38,9 +38,9 @@ public class AndroidSignalStrength
private int mSignalStrength = 0;
public AndroidSignalStrength(Activity ActivityInstance)
public AndroidSignalStrength(Activity activityInstance)
{
ActivityInstance.runOnUiThread(new Runnable()
activityInstance.runOnUiThread(new Runnable()
{
@Override
public void run()
@ -48,7 +48,7 @@ public class AndroidSignalStrength
mSignalStateListener = new SignalStateListener();
}
});
mActivityInstance = ActivityInstance;
mActivityInstance = activityInstance;
}
public int getSignalStrength()
@ -58,29 +58,29 @@ public class AndroidSignalStrength
public void appStateChanged(int newState)
{
final TelephonyManager TelephonyMngr = (TelephonyManager)mActivityInstance.getSystemService(Context.TELEPHONY_SERVICE);
final SignalStateListener Listener = mSignalStateListener;
int ListenEvent = PhoneStateListener.LISTEN_NONE;
final TelephonyManager telephonyManager = (TelephonyManager)mActivityInstance.getSystemService(Context.TELEPHONY_SERVICE);
final SignalStateListener listener = mSignalStateListener;
int listenEvent = PhoneStateListener.LISTEN_NONE;
switch(newState)
{
case APP_STATE_CREATE:
case APP_STATE_START:
ListenEvent = PhoneStateListener.LISTEN_SIGNAL_STRENGTHS;
listenEvent = PhoneStateListener.LISTEN_SIGNAL_STRENGTHS;
break;
case APP_STATE_STOP:
case APP_STATE_DESTROY:
ListenEvent = PhoneStateListener.LISTEN_NONE;
listenEvent = PhoneStateListener.LISTEN_NONE;
break;
}
final int Event = ListenEvent;
final int event = listenEvent;
mActivityInstance.runOnUiThread(new Runnable()
{
@Override
public void run()
{
TelephonyMngr.listen(Listener, Event);
telephonyManager.listen(listener, event);
}
});
}

@ -35,33 +35,33 @@
private static final String TAG = "AndroidTools";
private final Activity mActivityInstance;
public AndroidTools(Activity ActivityInstance)
public AndroidTools(Activity activityInstance)
{
mActivityInstance = ActivityInstance;
mActivityInstance = activityInstance;
}
public int getActivityAction()
{
final String ActionValue = mActivityInstance.getIntent().getAction();
int ActionId = ACTION_NONE;
final String actionValue = mActivityInstance.getIntent().getAction();
int actionId = ACTION_NONE;
if(ActionValue != null)
if(actionValue != null)
{
switch(ActionValue)
switch(actionValue)
{
case Intent.ACTION_SEND:
ActionId = ACTION_SEND;
actionId = ACTION_SEND;
break;
case Intent.ACTION_SEND_MULTIPLE:
ActionId = ACTION_SEND_MULTIPLE;
actionId = ACTION_SEND_MULTIPLE;
break;
case Intent.ACTION_PICK:
ActionId = ACTION_PICK;
actionId = ACTION_PICK;
break;
}
}
return ActionId;
return actionId;
}
public String getActivityMimeType()

@ -38,10 +38,10 @@ public class SyncRunOnUiThread
public void runOnUIThread();
}
public SyncRunOnUiThread(Activity ActivityInstance, SyncRunOnUiThreadListener CodeListener)
public SyncRunOnUiThread(Activity activityInstance, SyncRunOnUiThreadListener codeListener)
{
mActivityInstance = ActivityInstance;
mCodeListener = CodeListener;
mActivityInstance = activityInstance;
mCodeListener = codeListener;
mRunnableCode = new Runnable()
{

@ -4,15 +4,15 @@
#include <QIcon>
#include "QtAndroidTools.h"
void PrepareSharedFiles(const QString &SharedFolderName)
void prepareSharedFiles(const QString &sharedFolderName)
{
const QDir SharedFilesFolder(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation));
const QDir sharedFilesFolder(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation));
if(SharedFilesFolder.mkdir(SharedFolderName) == true)
if(sharedFilesFolder.mkdir(sharedFolderName) == true)
{
const QString SharedFilesPath = (SharedFilesFolder.path() + "/" + SharedFolderName);
const QString sharedFilesPath = (sharedFilesFolder.path() + "/" + sharedFolderName);
QFile::copy(":/images/logo_falsinsoft.jpg", SharedFilesPath + "/logo_falsinsoft.jpg");
QFile::copy(":/images/logo_falsinsoft.jpg", sharedFilesPath + "/logo_falsinsoft.jpg");
}
}
@ -24,12 +24,12 @@ int main(int argc, char *argv[])
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
QtAndroidTools::InitializeQmlTools();
QtAndroidTools::initializeQmlTools();
QObject::connect(&engine, SIGNAL(quit()), &app, SLOT(quit()));
engine.load(QUrl(QStringLiteral("qrc:/Main.qml")));
if(engine.rootObjects().isEmpty()) return -1;
PrepareSharedFiles("sharedfiles");
prepareSharedFiles("sharedfiles");
QtAndroid::hideSplashScreen();