From 8be3bd206ed4cee4988e0084c9d652f93bccb42e Mon Sep 17 00:00:00 2001 From: FalsinSoft <falsinsoft@gmail.com> Date: Tue, 1 Oct 2019 23:13:20 +0200 Subject: [PATCH] Added signin scope param --- QtAndroidTools/QAndroidGoogleAccount.cpp | 123 ++++---- QtAndroidTools/QAndroidGoogleAccount.h | 37 +-- .../qtandroidtools/AndroidGoogleAccount.java | 263 ++++++++++++++---- .../tools/AndroidGoogleAccount.qml | 20 +- 4 files changed, 310 insertions(+), 133 deletions(-) diff --git a/QtAndroidTools/QAndroidGoogleAccount.cpp b/QtAndroidTools/QAndroidGoogleAccount.cpp index 40c7b09..449912b 100644 --- a/QtAndroidTools/QAndroidGoogleAccount.cpp +++ b/QtAndroidTools/QAndroidGoogleAccount.cpp @@ -35,7 +35,9 @@ QAndroidGoogleAccount::QAndroidGoogleAccount() : m_JavaGoogleAccount("com/falsin if(m_JavaGoogleAccount.isValid()) { const JNINativeMethod JniMethod[] = { - {"updateLastSignedInAccountInfo", "(Lcom/falsinsoft/qtandroidtools/AndroidGoogleAccount$AccountInfo;)V", reinterpret_cast<void *>(&QAndroidGoogleAccount::UpdateLastSignedInAccountInfo)} + {"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)} }; QAndroidJniEnvironment JniEnv; jclass ObjectClass; @@ -51,7 +53,7 @@ QObject* QAndroidGoogleAccount::qmlInstance(QQmlEngine *engine, QJSEngine *scrip Q_UNUSED(scriptEngine) QAndroidGoogleAccount *pAndroidGoogleAccount = new QAndroidGoogleAccount(); - engine->addImageProvider("LastSignedInAccountPhoto", new AccountPhotoImageProvider(pAndroidGoogleAccount)); + engine->addImageProvider("SignedInAccountPhoto", new AccountPhotoImageProvider(pAndroidGoogleAccount)); return pAndroidGoogleAccount; } @@ -60,124 +62,127 @@ QAndroidGoogleAccount* QAndroidGoogleAccount::instance() return m_pInstance; } -bool QAndroidGoogleAccount::signIn() +bool QAndroidGoogleAccount::signIn(int scope) { if(m_JavaGoogleAccount.isValid()) { - if(m_JavaGoogleAccount.callMethod<jboolean>("loadLastSignedInAccountInfo", "()Z") == false) + return m_JavaGoogleAccount.callMethod<jboolean>("signIn", "(I)Z", scope); + } + return false; +} + +bool QAndroidGoogleAccount::signInSelectAccount(int scope) +{ + if(m_JavaGoogleAccount.isValid()) + { + const QAndroidJniObject SignInIntent = m_JavaGoogleAccount.callObjectMethod("getSignInIntent", "(I)Landroid/content/Intent;", scope); + + if(SignInIntent.isValid()) { - return signInNewAccount(); + QtAndroid::startActivity(SignInIntent, m_SignInId, this); + return true; } - - return true; } - return false; } -bool QAndroidGoogleAccount::signInNewAccount(int scope) +bool QAndroidGoogleAccount::signOut() { if(m_JavaGoogleAccount.isValid()) { - const std::function<void (int, int, const QAndroidJniObject &)> ActivityResultFunc = std::bind(&QAndroidGoogleAccount::ActivityResult, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); - - QtAndroid::startActivity(m_JavaGoogleAccount.callObjectMethod("getSignInIntent", "()Landroid/content/Intent;"), - m_SignInId, - ActivityResultFunc - ); - return true; + return m_JavaGoogleAccount.callMethod<jboolean>("signOut", "()Z"); } - return false; } -void QAndroidGoogleAccount::signOut() +bool QAndroidGoogleAccount::revokeAccess() { if(m_JavaGoogleAccount.isValid()) { - m_JavaGoogleAccount.callMethod<void>("signOut", "()V"); + return m_JavaGoogleAccount.callMethod<jboolean>("revokeAccess", "()Z"); } + return false; } -void QAndroidGoogleAccount::revokeAccess() -{ - if(m_JavaGoogleAccount.isValid()) - { - m_JavaGoogleAccount.callMethod<void>("revokeAccess", "()V"); - } -} - -void QAndroidGoogleAccount::SetLastSignedInAccountInfo(const QAndroidJniObject &AccountInfoObj) +void QAndroidGoogleAccount::SetSignedInAccountInfo(const QAndroidJniObject &AccountInfoObj) { if(AccountInfoObj.isValid()) { const QAndroidJniObject PhotoObj = AccountInfoObj.getObjectField("photo", "Landroid/graphics/Bitmap;"); - m_LastSignedInAccountInfo.Id = AccountInfoObj.getObjectField<jstring>("id").toString(); - m_LastSignedInAccountInfo.DisplayName = AccountInfoObj.getObjectField<jstring>("displayName").toString(); - m_LastSignedInAccountInfo.Email = AccountInfoObj.getObjectField<jstring>("email").toString(); - m_LastSignedInAccountInfo.FamilyName = AccountInfoObj.getObjectField<jstring>("familyName").toString(); - m_LastSignedInAccountInfo.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(); if(PhotoObj.isValid()) - m_LastSignedInAccountPhoto = QPixmap::fromImage(AndroidBitmapToImage(PhotoObj)); + m_SignedInAccountPhoto = QPixmap::fromImage(AndroidBitmapToImage(PhotoObj)); else - m_LastSignedInAccountPhoto = QPixmap(); + m_SignedInAccountPhoto = QPixmap(); } else { - m_LastSignedInAccountInfo = QAndroidGoogleAccountInfo(); - m_LastSignedInAccountPhoto = QPixmap(); + m_SignedInAccountInfo = QAndroidGoogleAccountInfo(); + m_SignedInAccountPhoto = QPixmap(); } - emit lastSignedInAccountInfoChanged(); + emit signedInAccountInfoChanged(); } -const QAndroidGoogleAccountInfo& QAndroidGoogleAccount::getLastSignedInAccountInfo() const +const QAndroidGoogleAccountInfo& QAndroidGoogleAccount::getSignedInAccountInfo() const { - return m_LastSignedInAccountInfo; + return m_SignedInAccountInfo; } QPixmap QAndroidGoogleAccount::GetAccountPhoto() const { - return m_LastSignedInAccountPhoto; + return m_SignedInAccountPhoto; } -void QAndroidGoogleAccount::ActivityResult(int RequestCode, int ResultCode, const QAndroidJniObject &Data) +void QAndroidGoogleAccount::handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data) { - Q_UNUSED(ResultCode) + Q_UNUSED(resultCode) - if(RequestCode == m_SignInId) + if(receiverRequestCode == m_SignInId) { if(m_JavaGoogleAccount.isValid()) { - const bool SignInSuccessfully = m_JavaGoogleAccount.callMethod<jboolean>("signInIntentDataResult", - "(Landroid/content/Intent;)Z", - Data.object() - ); - if(SignInSuccessfully == false) - { - emit signedIn(false); - } + m_JavaGoogleAccount.callMethod<void>("signInIntentDataResult", "(Landroid/content/Intent;)V", data.object<jobject>()); } } } -void QAndroidGoogleAccount::UpdateLastSignedInAccountInfo(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) { - const QAndroidJniObject AccountInfoObj(accountInfo); + m_pInstance->SetSignedInAccountInfo(QAndroidJniObject(accountInfo)); + } +} - m_pInstance->SetLastSignedInAccountInfo(AccountInfoObj); +void QAndroidGoogleAccount::SignedIn(JNIEnv *env, jobject thiz, jboolean signInSuccessfully) +{ + Q_UNUSED(env) + Q_UNUSED(thiz) - if(AccountInfoObj.isValid()) - emit m_pInstance->signedIn(true); - else - emit m_pInstance->signedOut(); + if(m_pInstance != nullptr) + { + emit m_pInstance->signedIn(signInSuccessfully); + } +} + +void QAndroidGoogleAccount::SignedOut(JNIEnv *env, jobject thiz) +{ + Q_UNUSED(env) + Q_UNUSED(thiz) + + if(m_pInstance != nullptr) + { + emit m_pInstance->signedOut(); } } diff --git a/QtAndroidTools/QAndroidGoogleAccount.h b/QtAndroidTools/QAndroidGoogleAccount.h index 27bc9fe..debb3e9 100644 --- a/QtAndroidTools/QAndroidGoogleAccount.h +++ b/QtAndroidTools/QAndroidGoogleAccount.h @@ -46,9 +46,9 @@ public: }; Q_DECLARE_METATYPE(QAndroidGoogleAccountInfo) -class QAndroidGoogleAccount : public QObject +class QAndroidGoogleAccount : public QObject, public QAndroidActivityResultReceiver { - Q_PROPERTY(QAndroidGoogleAccountInfo lastSignedInAccount READ getLastSignedInAccountInfo NOTIFY lastSignedInAccountInfoChanged) + Q_PROPERTY(QAndroidGoogleAccountInfo signedInAccount READ getSignedInAccountInfo NOTIFY signedInAccountInfoChanged) Q_DISABLE_COPY(QAndroidGoogleAccount) Q_ENUMS(SCOPES) Q_OBJECT @@ -60,15 +60,15 @@ class QAndroidGoogleAccount : public QObject QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) { - const QPixmap LastSignedInAccountPhoto = m_pAccount->GetAccountPhoto(); + const QPixmap AccountPhoto = m_pAccount->GetAccountPhoto(); Q_UNUSED(id) - if(size) *size = LastSignedInAccountPhoto.size(); + if(size) *size = AccountPhoto.size(); if(requestedSize.width() > 0 && requestedSize.height() > 0) - return LastSignedInAccountPhoto.scaled(requestedSize); + return AccountPhoto.scaled(requestedSize); else - return LastSignedInAccountPhoto; + return AccountPhoto; } private: @@ -103,15 +103,15 @@ public: static QObject* qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine); static QAndroidGoogleAccount* instance(); - Q_INVOKABLE bool signIn(); - Q_INVOKABLE bool signInNewAccount(int scope = SCOPE_NULL); - Q_INVOKABLE void signOut(); - Q_INVOKABLE void revokeAccess(); + Q_INVOKABLE bool signIn(int scope = SCOPE_NULL); + Q_INVOKABLE bool signInSelectAccount(int scope = SCOPE_NULL); + Q_INVOKABLE bool signOut(); + Q_INVOKABLE bool revokeAccess(); - const QAndroidGoogleAccountInfo& getLastSignedInAccountInfo() const; + const QAndroidGoogleAccountInfo& getSignedInAccountInfo() const; signals: - void lastSignedInAccountInfoChanged(); + void signedInAccountInfoChanged(); void signedIn(bool signInSuccessfully); void signedOut(); @@ -119,13 +119,16 @@ private: const QAndroidJniObject m_JavaGoogleAccount; static QAndroidGoogleAccount *m_pInstance; const int m_SignInId = 9001; - QAndroidGoogleAccountInfo m_LastSignedInAccountInfo; - QPixmap m_LastSignedInAccountPhoto; + QAndroidGoogleAccountInfo m_SignedInAccountInfo; + QPixmap m_SignedInAccountPhoto; - static void UpdateLastSignedInAccountInfo(JNIEnv *env, jobject thiz, jobject accountInfo); + void handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data) override; - void ActivityResult(int RequestCode, int ResultCode, const QAndroidJniObject &Data); - void SetLastSignedInAccountInfo(const QAndroidJniObject &AccountInfoObj); + 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); + + void SetSignedInAccountInfo(const QAndroidJniObject &AccountInfoObj); QImage AndroidBitmapToImage(const QAndroidJniObject &JniBmp); QPixmap GetAccountPhoto() const; }; diff --git a/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AndroidGoogleAccount.java b/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AndroidGoogleAccount.java index e491ace..170ea91 100644 --- a/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AndroidGoogleAccount.java +++ b/QtAndroidTools/src/com/falsinsoft/qtandroidtools/AndroidGoogleAccount.java @@ -54,41 +54,43 @@ import java.net.URL; public class AndroidGoogleAccount { private final Activity mActivityInstance; - private GoogleSignInClient mGoogleSignInClient; + private GoogleSignInClient mGoogleSignInClient = null; public AndroidGoogleAccount(Activity ActivityInstance) { mActivityInstance = ActivityInstance; - getSignInClient(ActivityInstance); } - private void getSignInClient(Activity ActivityInstance) + private GoogleSignInClient getSignInClient(String ScopeValue) { - GoogleSignInOptions SignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) - .requestEmail() - .build(); + GoogleSignInOptions.Builder SignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN); + if(ScopeValue != null) SignInOptions.requestScopes(new Scope(ScopeValue)); + SignInOptions.requestEmail(); - mGoogleSignInClient = GoogleSignIn.getClient(ActivityInstance, SignInOptions); + return GoogleSignIn.getClient(mActivityInstance, SignInOptions.build()); } - public boolean loadLastSignedInAccountInfo() + public Intent getSignInIntent(int ScopeId) { - return loadLastSignedInAccountInfo(GoogleSignIn.getLastSignedInAccount(mActivityInstance)); + Intent SignInIntent = null; + + if(mGoogleSignInClient == null) + { + mGoogleSignInClient = getSignInClient(ScopeIdToValue(ScopeId)); + SignInIntent = mGoogleSignInClient.getSignInIntent(); + } + + return SignInIntent; } - public Intent getSignInIntent() - { - return mGoogleSignInClient.getSignInIntent(); - } - - public boolean signInIntentDataResult(Intent Data) + public void signInIntentDataResult(Intent Data) { final Task<GoogleSignInAccount> SignInTask = GoogleSignIn.getSignedInAccountFromIntent(Data); + boolean signInSuccessfully = true; try { - loadLastSignedInAccountInfo(SignInTask.getResult(ApiException.class)); - return true; + loadSignedInAccountInfo(SignInTask.getResult(ApiException.class)); } catch(ApiException e) { @@ -96,43 +98,105 @@ public class AndroidGoogleAccount { Log.d("AndroidGoogleAccount", "DEVELOPER_ERROR -> Have you signed your project on Android console?"); } + signInSuccessfully = false; + } + + signedIn(signInSuccessfully); + } + + public boolean signIn(int ScopeId) + { + if(mGoogleSignInClient == null) + { + Task<GoogleSignInAccount> SignInTask; + + mGoogleSignInClient = getSignInClient(ScopeIdToValue(ScopeId)); + + SignInTask = mGoogleSignInClient.silentSignIn(); + if(SignInTask.isSuccessful()) + { + loadSignedInAccountInfo(SignInTask.getResult()); + signedIn(true); + } + else + { + SignInTask.addOnCompleteListener(mActivityInstance, new SignInAccountListener()); + } + + return true; } return false; } - public void signOut() + public boolean signOut() { - mGoogleSignInClient.signOut().addOnCompleteListener(mActivityInstance, new SignOutAccountListener()); - } - - public void revokeAccess() - { - mGoogleSignInClient.revokeAccess().addOnCompleteListener(mActivityInstance, new SignOutAccountListener()); - } - - private boolean loadLastSignedInAccountInfo(final GoogleSignInAccount LastSignedInAccount) - { - if(LastSignedInAccount != null) + if(mGoogleSignInClient != null) { - AccountInfo LastSignedInAccountInfo = new AccountInfo(); - final Uri PhotoUrl = LastSignedInAccount.getPhotoUrl(); + final Task<Void> SignOutTask = mGoogleSignInClient.signOut(); - LastSignedInAccountInfo.id = LastSignedInAccount.getId(); - LastSignedInAccountInfo.displayName = LastSignedInAccount.getDisplayName(); - LastSignedInAccountInfo.email = LastSignedInAccount.getEmail(); - LastSignedInAccountInfo.familyName = LastSignedInAccount.getFamilyName(); - LastSignedInAccountInfo.givenName = LastSignedInAccount.getGivenName(); + if(SignOutTask.isSuccessful()) + { + updateSignedInAccountInfo(null); + mGoogleSignInClient = null; + signedOut(); + } + else + { + SignOutTask.addOnCompleteListener(mActivityInstance, new SignOutAccountListener()); + } + + return true; + } + + return false; + } + + public boolean revokeAccess() + { + if(mGoogleSignInClient != null) + { + final Task<Void> SignOutTask = mGoogleSignInClient.revokeAccess(); + + if(SignOutTask.isSuccessful()) + { + updateSignedInAccountInfo(null); + mGoogleSignInClient = null; + signedOut(); + } + else + { + SignOutTask.addOnCompleteListener(mActivityInstance, new SignOutAccountListener()); + } + + return true; + } + + return false; + } + + private boolean loadSignedInAccountInfo(final GoogleSignInAccount SignedInAccount) + { + if(SignedInAccount != null) + { + 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(); if(PhotoUrl != null) { - DownloadAccountPhotoTask DownloadAccountPhoto = new DownloadAccountPhotoTask(LastSignedInAccountInfo); + DownloadAccountPhotoTask DownloadAccountPhoto = new DownloadAccountPhotoTask(SignedInAccountInfo); DownloadAccountPhoto.execute(PhotoUrl.toString()); } else { - LastSignedInAccountInfo.photo = null; - updateLastSignedInAccountInfo(LastSignedInAccountInfo); + SignedInAccountInfo.photo = null; + updateSignedInAccountInfo(SignedInAccountInfo); } return true; @@ -143,11 +207,11 @@ public class AndroidGoogleAccount private class DownloadAccountPhotoTask extends AsyncTask<String, Void, Bitmap> { - private AccountInfo mLastSignedInAccountInfo; + private AccountInfo mSignedInAccountInfo; - DownloadAccountPhotoTask(AccountInfo LastSignedInAccountInfo) + DownloadAccountPhotoTask(AccountInfo SignedInAccountInfo) { - mLastSignedInAccountInfo = LastSignedInAccountInfo; + mSignedInAccountInfo = SignedInAccountInfo; } protected Bitmap doInBackground(String... urls) @@ -169,20 +233,106 @@ public class AndroidGoogleAccount protected void onPostExecute(Bitmap AccountPhoto) { - mLastSignedInAccountInfo.photo = AccountPhoto; - updateLastSignedInAccountInfo(mLastSignedInAccountInfo); + mSignedInAccountInfo.photo = AccountPhoto; + updateSignedInAccountInfo(mSignedInAccountInfo); + } + } + + private class SignInAccountListener implements OnCompleteListener<GoogleSignInAccount> + { + @Override + public void onComplete(@NonNull Task<GoogleSignInAccount> SignInTask) + { + boolean signInSuccessfully = true; + + try + { + loadSignedInAccountInfo(SignInTask.getResult(ApiException.class)); + } + catch(ApiException e) + { + if(e.getStatusCode() == GoogleSignInStatusCodes.SIGN_IN_REQUIRED) + { + Log.d("AndroidGoogleAccount", "SIGN_IN_REQUIRED -> You have to signin by select account before use this call"); + } + signInSuccessfully = false; + mGoogleSignInClient = null; + } + + signedIn(signInSuccessfully); } } private class SignOutAccountListener implements OnCompleteListener<Void> { @Override - public void onComplete(@NonNull Task<Void> task) + public void onComplete(@NonNull Task<Void> SignOutTask) { - updateLastSignedInAccountInfo(null); + updateSignedInAccountInfo(null); + mGoogleSignInClient = null; + signedOut(); } } + private String ScopeIdToValue(int ScopeId) + { + String ScopeValue = null; + + switch(ScopeId) + { + case SCOPE_APP_STATE: + ScopeValue = Scopes.APP_STATE; + break; + case SCOPE_CLOUD_SAVE: + ScopeValue = Scopes.CLOUD_SAVE; + break; + case SCOPE_DRIVE_APPFOLDER: + ScopeValue = Scopes.CLOUD_SAVE; + break; + case SCOPE_DRIVE_FILE: + ScopeValue = Scopes.DRIVE_FILE; + break; + case SCOPE_EMAIL: + ScopeValue = Scopes.EMAIL; + break; + case SCOPE_FITNESS_ACTIVITY_READ: + ScopeValue = Scopes.FITNESS_ACTIVITY_READ; + break; + case SCOPE_FITNESS_ACTIVITY_READ_WRITE: + ScopeValue = Scopes.FITNESS_ACTIVITY_READ_WRITE; + break; + case SCOPE_FITNESS_BODY_READ: + ScopeValue = Scopes.FITNESS_BODY_READ; + break; + case SCOPE_FITNESS_BODY_READ_WRITE: + ScopeValue = Scopes.FITNESS_BODY_READ_WRITE; + break; + case SCOPE_FITNESS_LOCATION_READ: + ScopeValue = Scopes.FITNESS_LOCATION_READ; + break; + case SCOPE_FITNESS_LOCATION_READ_WRITE: + ScopeValue = Scopes.FITNESS_LOCATION_READ_WRITE; + break; + case SCOPE_FITNESS_NUTRITION_READ: + ScopeValue = Scopes.FITNESS_NUTRITION_READ; + break; + case SCOPE_FITNESS_NUTRITION_READ_WRITE: + ScopeValue = Scopes.FITNESS_NUTRITION_READ_WRITE; + break; + case SCOPE_GAMES: + ScopeValue = Scopes.GAMES; + break; + case SCOPE_PLUS_ME: + ScopeValue = Scopes.PLUS_ME; + break; + case SCOPE_PROFILE: + ScopeValue = Scopes.PROFILE; + break; + } + + return ScopeValue; + } + public static class AccountInfo { public String id; @@ -193,5 +343,24 @@ public class AndroidGoogleAccount public Bitmap photo; } - private static native void updateLastSignedInAccountInfo(AccountInfo accountInfo); + private static final int SCOPE_APP_STATE = 1; + private static final int SCOPE_CLOUD_SAVE = 2; + private static final int SCOPE_DRIVE_APPFOLDER = 3; + private static final int SCOPE_DRIVE_FILE = 4; + private static final int SCOPE_EMAIL = 5; + private static final int SCOPE_FITNESS_ACTIVITY_READ = 6; + private static final int SCOPE_FITNESS_ACTIVITY_READ_WRITE = 7; + private static final int SCOPE_FITNESS_BODY_READ = 8; + private static final int SCOPE_FITNESS_BODY_READ_WRITE = 9; + private static final int SCOPE_FITNESS_LOCATION_READ = 10; + private static final int SCOPE_FITNESS_LOCATION_READ_WRITE = 11; + private static final int SCOPE_FITNESS_NUTRITION_READ = 12; + private static final int SCOPE_FITNESS_NUTRITION_READ_WRITE = 13; + private static final int SCOPE_GAMES = 14; + private static final int SCOPE_PLUS_ME = 15; + private static final int SCOPE_PROFILE = 16; + + private static native void updateSignedInAccountInfo(AccountInfo accountInfo); + private static native void signedIn(boolean signInSuccessfully); + private static native void signedOut(); } diff --git a/QtAndroidToolsDemo/tools/AndroidGoogleAccount.qml b/QtAndroidToolsDemo/tools/AndroidGoogleAccount.qml index e6ca345..4cf00e4 100644 --- a/QtAndroidToolsDemo/tools/AndroidGoogleAccount.qml +++ b/QtAndroidToolsDemo/tools/AndroidGoogleAccount.qml @@ -10,10 +10,10 @@ Page { Connections { target: QtAndroidGoogleAccount + onSignedInAccountChanged: accountPhoto.source = "image://SignedInAccountPhoto" onSignedIn: { if(signInSuccessfully === true) - { - accountPhoto.source = "image://LastSignedInAccountPhoto"; + { } } onSignedOut: { @@ -29,27 +29,27 @@ Page { Label { font.pixelSize: 15 - text: "<b>Id:</b> " + QtAndroidGoogleAccount.lastSignedInAccount.id + text: "<b>Id:</b> " + QtAndroidGoogleAccount.signedInAccount.id } Label { font.pixelSize: 15 - text: "<b>DisplayName:</b> " + QtAndroidGoogleAccount.lastSignedInAccount.displayName + text: "<b>DisplayName:</b> " + QtAndroidGoogleAccount.signedInAccount.displayName } Label { font.pixelSize: 15 - text: "<b>Email:</b> " + QtAndroidGoogleAccount.lastSignedInAccount.email + text: "<b>Email:</b> " + QtAndroidGoogleAccount.signedInAccount.email } Label { font.pixelSize: 15 - text: "<b>FamilyName:</b> " + QtAndroidGoogleAccount.lastSignedInAccount.familyName + text: "<b>FamilyName:</b> " + QtAndroidGoogleAccount.signedInAccount.familyName } Label { font.pixelSize: 15 - text: "<b>GivenName:</b> " + QtAndroidGoogleAccount.lastSignedInAccount.givenName + text: "<b>GivenName:</b> " + QtAndroidGoogleAccount.signedInAccount.givenName } Label { @@ -64,13 +64,13 @@ Page { Button { anchors.horizontalCenter: parent.horizontalCenter - text: "sigIn last account" + text: "sigIn" onClicked: QtAndroidGoogleAccount.signIn() } Button { anchors.horizontalCenter: parent.horizontalCenter - text: "sigIn new account" - onClicked: QtAndroidGoogleAccount.signInNewAccount() + text: "sigIn select account" + onClicked: QtAndroidGoogleAccount.signInSelectAccount() } Button { anchors.horizontalCenter: parent.horizontalCenter