From fb68c3a3dac5cc9b8dae001e0f34cd64452ca50a Mon Sep 17 00:00:00 2001 From: FalsinSoft Date: Thu, 13 Feb 2020 15:01:12 +0100 Subject: [PATCH] Changed the way Google account photo is showed --- QtAndroidTools/QAndroidGoogleAccount.cpp | 21 +++++++-------- QtAndroidTools/QAndroidGoogleAccount.h | 26 ++----------------- .../tools/AndroidGoogleAccount.qml | 6 ++++- 3 files changed, 16 insertions(+), 37 deletions(-) diff --git a/QtAndroidTools/QAndroidGoogleAccount.cpp b/QtAndroidTools/QAndroidGoogleAccount.cpp index 0c5cf76..0238e66 100644 --- a/QtAndroidTools/QAndroidGoogleAccount.cpp +++ b/QtAndroidTools/QAndroidGoogleAccount.cpp @@ -52,9 +52,7 @@ QObject* QAndroidGoogleAccount::qmlInstance(QQmlEngine *engine, QJSEngine *scrip { Q_UNUSED(scriptEngine) - QAndroidGoogleAccount *pAndroidGoogleAccount = new QAndroidGoogleAccount(); - engine->addImageProvider("SignedInAccountPhoto", new AccountPhotoImageProvider(pAndroidGoogleAccount)); - return pAndroidGoogleAccount; + return new QAndroidGoogleAccount(); } QAndroidGoogleAccount* QAndroidGoogleAccount::instance() @@ -121,15 +119,19 @@ void QAndroidGoogleAccount::SetSignedInAccountInfo(const QAndroidJniObject &Acco m_SignedInAccountInfo.FamilyName = AccountInfoObj.getObjectField("familyName").toString(); m_SignedInAccountInfo.GivenName = AccountInfoObj.getObjectField("givenName").toString(); + m_SignedInAccountInfo.Photo.clear(); if(PhotoObj.isValid()) - m_SignedInAccountPhoto = QPixmap::fromImage(AndroidBitmapToImage(PhotoObj)); - else - m_SignedInAccountPhoto = QPixmap(); + { + const QImage Photo = AndroidBitmapToImage(PhotoObj); + QBuffer PhotoBuffer(&m_SignedInAccountInfo.Photo); + + PhotoBuffer.open(QIODevice::WriteOnly); + Photo.save(&PhotoBuffer, "PNG"); + } } else { m_SignedInAccountInfo = QAndroidGoogleAccountInfo(); - m_SignedInAccountPhoto = QPixmap(); } emit signedInAccountInfoChanged(); @@ -140,11 +142,6 @@ const QAndroidGoogleAccountInfo& QAndroidGoogleAccount::getSignedInAccountInfo() return m_SignedInAccountInfo; } -QPixmap QAndroidGoogleAccount::GetAccountPhoto() const -{ - return m_SignedInAccountPhoto; -} - void QAndroidGoogleAccount::handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data) { Q_UNUSED(resultCode) diff --git a/QtAndroidTools/QAndroidGoogleAccount.h b/QtAndroidTools/QAndroidGoogleAccount.h index 0286b7e..e4cd0ae 100644 --- a/QtAndroidTools/QAndroidGoogleAccount.h +++ b/QtAndroidTools/QAndroidGoogleAccount.h @@ -37,12 +37,14 @@ struct QAndroidGoogleAccountInfo 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; }; Q_DECLARE_METATYPE(QAndroidGoogleAccountInfo) @@ -52,28 +54,6 @@ class QAndroidGoogleAccount : public QObject, public QAndroidActivityResultRecei Q_DISABLE_COPY(QAndroidGoogleAccount) Q_OBJECT - class AccountPhotoImageProvider : public QQuickImageProvider - { - public: - AccountPhotoImageProvider(QAndroidGoogleAccount *pAccount) : QQuickImageProvider(QQuickImageProvider::Pixmap), m_pAccount(pAccount) {} - - QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) - { - const QPixmap AccountPhoto = m_pAccount->GetAccountPhoto(); - Q_UNUSED(id) - - if(size) *size = AccountPhoto.size(); - - if(requestedSize.width() > 0 && requestedSize.height() > 0) - return AccountPhoto.scaled(requestedSize); - else - return AccountPhoto; - } - - private: - const QAndroidGoogleAccount *const m_pAccount; - }; - QAndroidGoogleAccount(); public: @@ -97,7 +77,6 @@ private: static QAndroidGoogleAccount *m_pInstance; const int m_SignInId = 9001; QAndroidGoogleAccountInfo m_SignedInAccountInfo; - QPixmap m_SignedInAccountPhoto; void handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data) override; @@ -107,5 +86,4 @@ private: void SetSignedInAccountInfo(const QAndroidJniObject &AccountInfoObj); QImage AndroidBitmapToImage(const QAndroidJniObject &JniBmp); - QPixmap GetAccountPhoto() const; }; diff --git a/QtAndroidToolsDemo/tools/AndroidGoogleAccount.qml b/QtAndroidToolsDemo/tools/AndroidGoogleAccount.qml index 5693634..ce009ce 100644 --- a/QtAndroidToolsDemo/tools/AndroidGoogleAccount.qml +++ b/QtAndroidToolsDemo/tools/AndroidGoogleAccount.qml @@ -10,13 +10,17 @@ Page { Connections { target: QtAndroidGoogleAccount - onSignedInAccountChanged: accountPhoto.source = "image://SignedInAccountPhoto" + onSignedInAccountChanged: { + QtAndroidTools.insertImage("AccountPhoto", QtAndroidGoogleAccount.signedInAccount.photo); + accountPhoto.source = "image://QtAndroidTools/AccountPhoto"; + } onSignedIn: { if(signInSuccessfully === true) { } } onSignedOut: { + QtAndroidTools.removeImage("AccountPhoto"); accountPhoto.source = ""; } }