mirror of
https://github.com/QuasarApp/QtAndroidTools.git
synced 2025-05-02 23:49:34 +00:00
Fixed position of admob banner based to the QML item
This commit is contained in:
parent
7fba3c7742
commit
103bb8bfb0
@ -22,17 +22,18 @@
|
|||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
#include <QGuiApplication>
|
#include <QGuiApplication>
|
||||||
|
#include <QScreen>
|
||||||
#include "QAndroidAdMobBanner.h"
|
#include "QAndroidAdMobBanner.h"
|
||||||
|
|
||||||
QMap<int, QAndroidAdMobBanner*> QAndroidAdMobBanner::m_pInstancesMap;
|
QMap<int, QAndroidAdMobBanner*> QAndroidAdMobBanner::m_pInstancesMap;
|
||||||
int QAndroidAdMobBanner::m_InstancesCounter = 0;
|
int QAndroidAdMobBanner::m_InstancesCounter = 0;
|
||||||
|
|
||||||
QAndroidAdMobBanner::QAndroidAdMobBanner() : m_JavaAdMobBanner("com/falsinsoft/qtandroidtools/AdMobBanner",
|
QAndroidAdMobBanner::QAndroidAdMobBanner(QQuickItem *parent) : QQuickItem(parent),
|
||||||
|
m_JavaAdMobBanner("com/falsinsoft/qtandroidtools/AdMobBanner",
|
||||||
"(Landroid/app/Activity;)V",
|
"(Landroid/app/Activity;)V",
|
||||||
QtAndroid::androidActivity().object<jobject>()),
|
QtAndroid::androidActivity().object<jobject>()),
|
||||||
m_InstanceIndex(m_InstancesCounter++),
|
m_InstanceIndex(m_InstancesCounter++),
|
||||||
m_BannerType(TYPE_NO_BANNER),
|
m_BannerType(TYPE_NO_BANNER)
|
||||||
m_BannerPos(0,0)
|
|
||||||
{
|
{
|
||||||
m_pInstancesMap[m_InstanceIndex] = this;
|
m_pInstancesMap[m_InstanceIndex] = this;
|
||||||
|
|
||||||
@ -67,6 +68,7 @@ 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)
|
||||||
{
|
{
|
||||||
|
UpdateBannerPos();
|
||||||
m_JavaAdMobBanner.callMethod<void>("show");
|
m_JavaAdMobBanner.callMethod<void>("show");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -108,45 +110,37 @@ void QAndroidAdMobBanner::setType(BANNER_TYPE Type)
|
|||||||
{
|
{
|
||||||
if(m_JavaAdMobBanner.isValid() && Type != TYPE_NO_BANNER)
|
if(m_JavaAdMobBanner.isValid() && Type != TYPE_NO_BANNER)
|
||||||
{
|
{
|
||||||
|
QAndroidJniObject BannerSizeObj;
|
||||||
|
|
||||||
m_JavaAdMobBanner.callMethod<void>("setType",
|
m_JavaAdMobBanner.callMethod<void>("setType",
|
||||||
"(I)V",
|
"(I)V",
|
||||||
Type
|
Type
|
||||||
);
|
);
|
||||||
m_BannerType = Type;
|
m_BannerType = Type;
|
||||||
|
|
||||||
|
BannerSizeObj = m_JavaAdMobBanner.callObjectMethod("getSize",
|
||||||
|
"()Lcom/falsinsoft/qtandroidtools/AdMobBanner$BannerSize;"
|
||||||
|
);
|
||||||
|
setWidth(BannerSizeObj.getField<jint>("width"));
|
||||||
|
setHeight(BannerSizeObj.getField<jint>("height"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int QAndroidAdMobBanner::getXPos() const
|
void QAndroidAdMobBanner::UpdateBannerPos()
|
||||||
{
|
|
||||||
return m_BannerPos.x();
|
|
||||||
}
|
|
||||||
|
|
||||||
void QAndroidAdMobBanner::setXPos(int XPos)
|
|
||||||
{
|
{
|
||||||
if(m_JavaAdMobBanner.isValid())
|
if(m_JavaAdMobBanner.isValid())
|
||||||
{
|
{
|
||||||
m_JavaAdMobBanner.callMethod<void>("setXPos",
|
QAndroidJniObject BannerPosObj("com/falsinsoft/qtandroidtools/AdMobBanner$BannerPos");
|
||||||
"(I)V",
|
const qreal PixelRatio = qApp->primaryScreen()->devicePixelRatio();
|
||||||
XPos
|
const QPointF ScreenPos = mapToGlobal(QPointF(0,0));
|
||||||
);
|
|
||||||
m_BannerPos.setX(XPos);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int QAndroidAdMobBanner::getYPos() const
|
BannerPosObj.setField<jint>("x", static_cast<int>(ScreenPos.x() * PixelRatio));
|
||||||
{
|
BannerPosObj.setField<jint>("y", static_cast<int>(ScreenPos.y() * PixelRatio));
|
||||||
return m_BannerPos.y();
|
|
||||||
}
|
|
||||||
|
|
||||||
void QAndroidAdMobBanner::setYPos(int YPos)
|
m_JavaAdMobBanner.callMethod<void>("setPos",
|
||||||
{
|
"(Lcom/falsinsoft/qtandroidtools/AdMobBanner$BannerPos;)V",
|
||||||
if(m_JavaAdMobBanner.isValid())
|
BannerPosObj.object()
|
||||||
{
|
|
||||||
m_JavaAdMobBanner.callMethod<void>("setYPos",
|
|
||||||
"(I)V",
|
|
||||||
YPos
|
|
||||||
);
|
);
|
||||||
m_BannerPos.setY(YPos);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,19 +25,18 @@
|
|||||||
|
|
||||||
#include <QtAndroidExtras>
|
#include <QtAndroidExtras>
|
||||||
#include <QQmlEngine>
|
#include <QQmlEngine>
|
||||||
|
#include <QQuickItem>
|
||||||
|
|
||||||
class QAndroidAdMobBanner : public QObject
|
class QAndroidAdMobBanner : public QQuickItem
|
||||||
{
|
{
|
||||||
Q_PROPERTY(QString unitId READ getUnitId WRITE setUnitId)
|
Q_PROPERTY(QString unitId READ getUnitId WRITE setUnitId)
|
||||||
Q_PROPERTY(BANNER_TYPE type READ getType WRITE setType)
|
Q_PROPERTY(BANNER_TYPE type READ getType WRITE setType)
|
||||||
Q_PROPERTY(int x READ getXPos WRITE setXPos)
|
|
||||||
Q_PROPERTY(int y READ getYPos WRITE setYPos)
|
|
||||||
Q_ENUMS(BANNER_TYPE)
|
Q_ENUMS(BANNER_TYPE)
|
||||||
Q_ENUMS(ERROR_TYPE)
|
Q_ENUMS(ERROR_TYPE)
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QAndroidAdMobBanner();
|
QAndroidAdMobBanner(QQuickItem *parent = nullptr);
|
||||||
~QAndroidAdMobBanner();
|
~QAndroidAdMobBanner();
|
||||||
|
|
||||||
enum BANNER_TYPE
|
enum BANNER_TYPE
|
||||||
@ -65,10 +64,6 @@ public:
|
|||||||
void setUnitId(const QString &UnitId);
|
void setUnitId(const QString &UnitId);
|
||||||
BANNER_TYPE getType() const;
|
BANNER_TYPE getType() const;
|
||||||
void setType(BANNER_TYPE Type);
|
void setType(BANNER_TYPE Type);
|
||||||
int getXPos() const;
|
|
||||||
void setXPos(int XPos);
|
|
||||||
int getYPos() const;
|
|
||||||
void setYPos(int YPos);
|
|
||||||
|
|
||||||
static const QMap<int, QAndroidAdMobBanner*>& Instances();
|
static const QMap<int, QAndroidAdMobBanner*>& Instances();
|
||||||
|
|
||||||
@ -88,7 +83,6 @@ private:
|
|||||||
static int m_InstancesCounter;
|
static int m_InstancesCounter;
|
||||||
const int m_InstanceIndex;
|
const int m_InstanceIndex;
|
||||||
BANNER_TYPE m_BannerType;
|
BANNER_TYPE m_BannerType;
|
||||||
QPoint m_BannerPos;
|
|
||||||
QString m_UnitId;
|
QString m_UnitId;
|
||||||
|
|
||||||
enum EVENT_TYPE
|
enum EVENT_TYPE
|
||||||
@ -110,4 +104,5 @@ private:
|
|||||||
APP_STATE_DESTROY
|
APP_STATE_DESTROY
|
||||||
};
|
};
|
||||||
void SetNewAppState(APP_STATE NewState);
|
void SetNewAppState(APP_STATE NewState);
|
||||||
|
void UpdateBannerPos();
|
||||||
};
|
};
|
||||||
|
@ -47,8 +47,7 @@ public class AdMobBanner
|
|||||||
|
|
||||||
private AdView mBannerView = null;
|
private AdView mBannerView = null;
|
||||||
private boolean mBannerLoaded = false;
|
private boolean mBannerLoaded = false;
|
||||||
private int mBannerWidth = 0;
|
private BannerSize mBannerSize = new BannerSize();
|
||||||
private int mBannerHeight = 0;
|
|
||||||
|
|
||||||
public AdMobBanner(Activity ActivityInstance)
|
public AdMobBanner(Activity ActivityInstance)
|
||||||
{
|
{
|
||||||
@ -59,7 +58,7 @@ public class AdMobBanner
|
|||||||
|
|
||||||
public BannerSize getSize()
|
public BannerSize getSize()
|
||||||
{
|
{
|
||||||
return new BannerSize(mBannerWidth, mBannerHeight);
|
return mBannerSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setType(final int type)
|
public void setType(final int type)
|
||||||
@ -98,31 +97,14 @@ public class AdMobBanner
|
|||||||
}
|
}
|
||||||
mBannerView.setAdSize(BannerSize);
|
mBannerView.setAdSize(BannerSize);
|
||||||
|
|
||||||
mBannerWidth = BannerSize.getWidthInPixels(mActivityInstance);
|
mBannerSize.width = BannerSize.getWidth();
|
||||||
mBannerHeight = BannerSize.getHeightInPixels(mActivityInstance);
|
mBannerSize.height = BannerSize.getHeight();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
UiThread.exec();
|
UiThread.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setXPos(final int x)
|
public void setPos(final BannerPos pos)
|
||||||
{
|
|
||||||
if(mBannerView == null)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
SyncRunOnUiThread UiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
|
|
||||||
{
|
|
||||||
public void runOnUIThread()
|
|
||||||
{
|
|
||||||
mBannerView.setX(x);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
UiThread.exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setYPos(final int y)
|
|
||||||
{
|
{
|
||||||
if(mBannerView == null)
|
if(mBannerView == null)
|
||||||
{
|
{
|
||||||
@ -134,8 +116,11 @@ public class AdMobBanner
|
|||||||
public void runOnUIThread()
|
public void runOnUIThread()
|
||||||
{
|
{
|
||||||
Rect VisibleFrame = new Rect();
|
Rect VisibleFrame = new Rect();
|
||||||
|
|
||||||
mActivityInstance.getWindow().getDecorView().getWindowVisibleDisplayFrame(VisibleFrame);
|
mActivityInstance.getWindow().getDecorView().getWindowVisibleDisplayFrame(VisibleFrame);
|
||||||
mBannerView.setY(VisibleFrame.top + y); // Add the height of the system status bar on top
|
|
||||||
|
mBannerView.setX(pos.x);
|
||||||
|
mBannerView.setY(VisibleFrame.top + pos.y); // Add the height of the system status bar on top
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
UiThread.exec();
|
UiThread.exec();
|
||||||
@ -248,10 +233,9 @@ public class AdMobBanner
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mActivityInstance.runOnUiThread(new Runnable()
|
SyncRunOnUiThread UiThread = new SyncRunOnUiThread(mActivityInstance, new SyncRunOnUiThread.SyncRunOnUiThreadListener()
|
||||||
{
|
{
|
||||||
@Override
|
public void runOnUIThread()
|
||||||
public void run()
|
|
||||||
{
|
{
|
||||||
mViewGroup.removeView(mBannerView);
|
mViewGroup.removeView(mBannerView);
|
||||||
mBannerView.destroy();
|
mBannerView.destroy();
|
||||||
@ -259,6 +243,7 @@ public class AdMobBanner
|
|||||||
mBannerLoaded = false;
|
mBannerLoaded = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
UiThread.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
private class BannerListener extends AdListener
|
private class BannerListener extends AdListener
|
||||||
@ -303,15 +288,16 @@ public class AdMobBanner
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BannerSize
|
public static class BannerPos
|
||||||
{
|
{
|
||||||
final public int width;
|
public int x = 0;
|
||||||
final public int height;
|
public int y = 0;
|
||||||
public BannerSize(int width, int height)
|
|
||||||
{
|
|
||||||
this.width = width;
|
|
||||||
this.height = height;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class BannerSize
|
||||||
|
{
|
||||||
|
public int width = 0;
|
||||||
|
public int height = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final int ERROR_INTERNAL = 0;
|
private static final int ERROR_INTERNAL = 0;
|
||||||
|
@ -36,8 +36,11 @@ Page {
|
|||||||
|
|
||||||
Button {
|
Button {
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
text: "Request permissions"
|
text: "Show banners"
|
||||||
onClicked: banner1.show()
|
onClicked: {
|
||||||
|
banner1.show();
|
||||||
|
banner2.show();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user