From f31d5089c4dd41e6003e9d1cdac3ca557b4a32c6 Mon Sep 17 00:00:00 2001 From: FalsinSoft Date: Mon, 28 Jan 2019 22:50:58 +0100 Subject: [PATCH] Calculate the right size of admob smart banner --- QtAndroidTools/QAndroidAdMobBanner.cpp | 24 ++++--- QtAndroidTools/QAndroidAdMobBanner.h | 4 +- .../qtandroidtools/AdMobBanner.java | 10 +-- .../tools/AndroidAdMobBanner.qml | 72 +++++++++++++++---- 4 files changed, 81 insertions(+), 29 deletions(-) diff --git a/QtAndroidTools/QAndroidAdMobBanner.cpp b/QtAndroidTools/QAndroidAdMobBanner.cpp index af5c8dc..c657fa1 100644 --- a/QtAndroidTools/QAndroidAdMobBanner.cpp +++ b/QtAndroidTools/QAndroidAdMobBanner.cpp @@ -50,6 +50,8 @@ QAndroidAdMobBanner::QAndroidAdMobBanner(QQuickItem *parent) : QQuickItem(parent JniEnv->DeleteLocalRef(ObjectClass); } connect(qGuiApp, &QGuiApplication::applicationStateChanged, this, &QAndroidAdMobBanner::ApplicationStateChanged); + connect(this, &QQuickItem::xChanged, this, &QAndroidAdMobBanner::ItemPosChanged); + connect(this, &QQuickItem::yChanged, this, &QAndroidAdMobBanner::ItemPosChanged); SetNewAppState(APP_STATE_CREATE); } @@ -68,7 +70,7 @@ bool QAndroidAdMobBanner::show() { if(m_JavaAdMobBanner.isValid() && m_BannerType != TYPE_NO_BANNER && m_UnitId.isEmpty() == false) { - UpdateBannerPos(); + ItemPosChanged(); m_JavaAdMobBanner.callMethod("show"); return true; } @@ -76,12 +78,15 @@ bool QAndroidAdMobBanner::show() return false; } -void QAndroidAdMobBanner::hide() +bool QAndroidAdMobBanner::hide() { if(m_JavaAdMobBanner.isValid()) { m_JavaAdMobBanner.callMethod("hide"); + return true; } + + return false; } const QString& QAndroidAdMobBanner::getUnitId() const @@ -110,7 +115,8 @@ void QAndroidAdMobBanner::setType(BANNER_TYPE Type) { if(m_JavaAdMobBanner.isValid() && Type != TYPE_NO_BANNER) { - QAndroidJniObject BannerSizeObj; + const qreal PixelRatio = qApp->primaryScreen()->devicePixelRatio(); + QAndroidJniObject BannerPixelsSizeObj; m_JavaAdMobBanner.callMethod("setType", "(I)V", @@ -118,15 +124,15 @@ void QAndroidAdMobBanner::setType(BANNER_TYPE Type) ); m_BannerType = Type; - BannerSizeObj = m_JavaAdMobBanner.callObjectMethod("getSize", - "()Lcom/falsinsoft/qtandroidtools/AdMobBanner$BannerSize;" - ); - setWidth(BannerSizeObj.getField("width")); - setHeight(BannerSizeObj.getField("height")); + BannerPixelsSizeObj = m_JavaAdMobBanner.callObjectMethod("getPixelsSize", + "()Lcom/falsinsoft/qtandroidtools/AdMobBanner$BannerSize;" + ); + setWidth(BannerPixelsSizeObj.getField("width") / PixelRatio); + setHeight(BannerPixelsSizeObj.getField("height") / PixelRatio); } } -void QAndroidAdMobBanner::UpdateBannerPos() +void QAndroidAdMobBanner::ItemPosChanged() { if(m_JavaAdMobBanner.isValid()) { diff --git a/QtAndroidTools/QAndroidAdMobBanner.h b/QtAndroidTools/QAndroidAdMobBanner.h index d1afd8e..fd19334 100644 --- a/QtAndroidTools/QAndroidAdMobBanner.h +++ b/QtAndroidTools/QAndroidAdMobBanner.h @@ -58,7 +58,7 @@ public: }; Q_INVOKABLE bool show(); - Q_INVOKABLE void hide(); + Q_INVOKABLE bool hide(); const QString& getUnitId() const; void setUnitId(const QString &UnitId); @@ -76,6 +76,7 @@ signals: private slots: void ApplicationStateChanged(Qt::ApplicationState State); + void ItemPosChanged(); private: const QAndroidJniObject m_JavaAdMobBanner; @@ -104,5 +105,4 @@ private: APP_STATE_DESTROY }; void SetNewAppState(APP_STATE NewState); - void UpdateBannerPos(); }; diff --git a/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AdMobBanner.java b/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AdMobBanner.java index 9c28436..53ca24b 100644 --- a/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AdMobBanner.java +++ b/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AdMobBanner.java @@ -47,7 +47,7 @@ public class AdMobBanner private AdView mBannerView = null; private boolean mBannerLoaded = false; - private BannerSize mBannerSize = new BannerSize(); + private BannerSize mBannerPixelsSize = new BannerSize(); public AdMobBanner(Activity ActivityInstance) { @@ -56,9 +56,9 @@ public class AdMobBanner mActivityInstance = ActivityInstance; } - public BannerSize getSize() + public BannerSize getPixelsSize() { - return mBannerSize; + return mBannerPixelsSize; } public void setType(final int type) @@ -97,8 +97,8 @@ public class AdMobBanner } mBannerView.setAdSize(BannerSize); - mBannerSize.width = BannerSize.getWidth(); - mBannerSize.height = BannerSize.getHeight(); + mBannerPixelsSize.width = BannerSize.getWidthInPixels(mActivityInstance); + mBannerPixelsSize.height = BannerSize.getHeightInPixels(mActivityInstance); } }); UiThread.exec(); diff --git a/QtAndroidToolsDemo/tools/AndroidAdMobBanner.qml b/QtAndroidToolsDemo/tools/AndroidAdMobBanner.qml index 8d239ab..78b4a51 100644 --- a/QtAndroidToolsDemo/tools/AndroidAdMobBanner.qml +++ b/QtAndroidToolsDemo/tools/AndroidAdMobBanner.qml @@ -6,32 +6,70 @@ import QtAndroidTools 1.0 Page { id: page - padding: 20 + padding: 0 Column { - anchors.fill: parent - spacing: 30 + width: parent.wdith + height: parent.height * 0.8 + anchors.centerIn: parent + spacing: 20 Label { + anchors.horizontalCenter: parent.horizontalCenter font.bold: true font.pixelSize: 15 - text: "Banner 1" + text: "Banner" } - QtAndroidAdMobBanner { - id: banner1 - unitId: "ca-app-pub-3940256099942544/6300978111" - type: QtAndroidAdMobBanner.TYPE_BANNER + Rectangle { + anchors.horizontalCenter: parent.horizontalCenter + border.width: 1 + border.color: "black" + width: banner1.width + height: banner1.height + + QtAndroidAdMobBanner { + id: banner1 + unitId: "ca-app-pub-3940256099942544/6300978111" + type: QtAndroidAdMobBanner.TYPE_BANNER + onLoading: banner1state.text = "Loading" + onLoaded: banner1state.text = "Loaded" + onLoadError: banner1state.text = "Error " + errorId + } + } + Label { + id: banner1state + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: 13 + text: "Banner not loaded" } Label { + anchors.horizontalCenter: parent.horizontalCenter font.bold: true font.pixelSize: 15 - text: "Banner 2" + text: "Smart Banner" } - QtAndroidAdMobBanner { - id: banner2 - unitId: "ca-app-pub-3940256099942544/6300978111" - type: QtAndroidAdMobBanner.TYPE_BANNER + Rectangle { + anchors.horizontalCenter: parent.horizontalCenter + border.width: 1 + border.color: "black" + width: banner2.width + height: banner2.height + + QtAndroidAdMobBanner { + id: banner2 + unitId: "ca-app-pub-3940256099942544/6300978111" + type: QtAndroidAdMobBanner.TYPE_SMART_BANNER + onLoading: banner2state.text = "Loading" + onLoaded: banner2state.text = "Loaded" + onLoadError: banner2state.text = "Error " + errorId + } + } + Label { + id: banner2state + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: 13 + text: "Banner not loaded" } Button { @@ -42,5 +80,13 @@ Page { banner2.show(); } } + Button { + anchors.horizontalCenter: parent.horizontalCenter + text: "Hide banners" + onClicked: { + banner1.hide(); + banner2.hide(); + } + } } }