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