mirror of
https://github.com/QuasarApp/QtAndroidTools.git
synced 2025-04-27 13:34:31 +00:00
Started code for google driver access
This commit is contained in:
parent
8be3bd206e
commit
8c20913be8
@ -62,21 +62,26 @@ QAndroidGoogleAccount* QAndroidGoogleAccount::instance()
|
||||
return m_pInstance;
|
||||
}
|
||||
|
||||
bool QAndroidGoogleAccount::signIn(int scope)
|
||||
bool QAndroidGoogleAccount::signIn(const QString &ScopeName)
|
||||
{
|
||||
if(m_JavaGoogleAccount.isValid())
|
||||
{
|
||||
return m_JavaGoogleAccount.callMethod<jboolean>("signIn", "(I)Z", scope);
|
||||
return m_JavaGoogleAccount.callMethod<jboolean>("signIn",
|
||||
"(Ljava/lang/String;)Z",
|
||||
QAndroidJniObject::fromString(ScopeName).object<jstring>()
|
||||
);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool QAndroidGoogleAccount::signInSelectAccount(int scope)
|
||||
bool QAndroidGoogleAccount::signInSelectAccount(const QString &ScopeName)
|
||||
{
|
||||
if(m_JavaGoogleAccount.isValid())
|
||||
{
|
||||
const QAndroidJniObject SignInIntent = m_JavaGoogleAccount.callObjectMethod("getSignInIntent", "(I)Landroid/content/Intent;", scope);
|
||||
|
||||
const QAndroidJniObject SignInIntent = m_JavaGoogleAccount.callObjectMethod("getSignInIntent",
|
||||
"(Ljava/lang/String;)Landroid/content/Intent;",
|
||||
QAndroidJniObject::fromString(ScopeName).object<jstring>()
|
||||
);
|
||||
if(SignInIntent.isValid())
|
||||
{
|
||||
QtAndroid::startActivity(SignInIntent, m_SignInId, this);
|
||||
|
@ -50,7 +50,6 @@ class QAndroidGoogleAccount : public QObject, public QAndroidActivityResultRecei
|
||||
{
|
||||
Q_PROPERTY(QAndroidGoogleAccountInfo signedInAccount READ getSignedInAccountInfo NOTIFY signedInAccountInfoChanged)
|
||||
Q_DISABLE_COPY(QAndroidGoogleAccount)
|
||||
Q_ENUMS(SCOPES)
|
||||
Q_OBJECT
|
||||
|
||||
class AccountPhotoImageProvider : public QQuickImageProvider
|
||||
@ -78,33 +77,11 @@ class QAndroidGoogleAccount : public QObject, public QAndroidActivityResultRecei
|
||||
QAndroidGoogleAccount();
|
||||
|
||||
public:
|
||||
|
||||
enum SCOPES
|
||||
{
|
||||
SCOPE_NULL = 0,
|
||||
SCOPE_APP_STATE,
|
||||
SCOPE_CLOUD_SAVE,
|
||||
SCOPE_DRIVE_APPFOLDER,
|
||||
SCOPE_DRIVE_FILE,
|
||||
SCOPE_EMAIL,
|
||||
SCOPE_FITNESS_ACTIVITY_READ,
|
||||
SCOPE_FITNESS_ACTIVITY_READ_WRITE,
|
||||
SCOPE_FITNESS_BODY_READ,
|
||||
SCOPE_FITNESS_BODY_READ_WRITE,
|
||||
SCOPE_FITNESS_LOCATION_READ,
|
||||
SCOPE_FITNESS_LOCATION_READ_WRITE,
|
||||
SCOPE_FITNESS_NUTRITION_READ,
|
||||
SCOPE_FITNESS_NUTRITION_READ_WRITE,
|
||||
SCOPE_GAMES,
|
||||
SCOPE_PLUS_ME,
|
||||
SCOPE_PROFILE
|
||||
};
|
||||
|
||||
static QObject* qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine);
|
||||
static QAndroidGoogleAccount* instance();
|
||||
|
||||
Q_INVOKABLE bool signIn(int scope = SCOPE_NULL);
|
||||
Q_INVOKABLE bool signInSelectAccount(int scope = SCOPE_NULL);
|
||||
Q_INVOKABLE bool signIn(const QString &ScopeName = QString());
|
||||
Q_INVOKABLE bool signInSelectAccount(const QString &ScopeName = QString());
|
||||
Q_INVOKABLE bool signOut();
|
||||
Q_INVOKABLE bool revokeAccess();
|
||||
|
||||
|
@ -30,6 +30,7 @@ QAndroidGoogleDrive::QAndroidGoogleDrive() : m_JavaGoogleDrive("com/falsinsoft/q
|
||||
QtAndroid::androidActivity().object<jobject>())
|
||||
{
|
||||
m_pInstance = this;
|
||||
LoadScopeDefinitions();
|
||||
}
|
||||
|
||||
QObject* QAndroidGoogleDrive::qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine)
|
||||
@ -45,3 +46,16 @@ QAndroidGoogleDrive* QAndroidGoogleDrive::instance()
|
||||
return m_pInstance;
|
||||
}
|
||||
|
||||
void QAndroidGoogleDrive::LoadScopeDefinitions()
|
||||
{
|
||||
const char ScopesClass[] = "com/google/api/services/drive/DriveScopes";
|
||||
|
||||
m_ScopeList[0] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE").toString();
|
||||
m_ScopeList[1] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_APPDATA").toString();
|
||||
m_ScopeList[2] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_FILE").toString();
|
||||
m_ScopeList[3] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_METADATA").toString();
|
||||
m_ScopeList[4] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_METADATA_READONLY").toString();
|
||||
m_ScopeList[5] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_PHOTOS_READONLY").toString();
|
||||
m_ScopeList[6] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_READONLY").toString();
|
||||
m_ScopeList[7] = QAndroidJniObject::getStaticObjectField<jstring>(ScopesClass, "DRIVE_SCRIPTS").toString();
|
||||
}
|
||||
|
@ -28,12 +28,28 @@
|
||||
|
||||
class QAndroidGoogleDrive : public QObject
|
||||
{
|
||||
Q_DISABLE_COPY(QAndroidGoogleDrive)
|
||||
Q_PROPERTY(QString SCOPE_DRIVE MEMBER SCOPE_DRIVE CONSTANT)
|
||||
Q_PROPERTY(QString SCOPE_DRIVE_APPDATA MEMBER SCOPE_DRIVE_APPDATA CONSTANT)
|
||||
Q_PROPERTY(QString SCOPE_DRIVE_FILE MEMBER SCOPE_DRIVE_FILE CONSTANT)
|
||||
Q_PROPERTY(QString SCOPE_DRIVE_METADATA MEMBER SCOPE_DRIVE_METADATA CONSTANT)
|
||||
Q_PROPERTY(QString SCOPE_DRIVE_METADATA_READONLY MEMBER SCOPE_DRIVE_METADATA_READONLY CONSTANT)
|
||||
Q_PROPERTY(QString SCOPE_DRIVE_PHOTOS_READONLY MEMBER SCOPE_DRIVE_PHOTOS_READONLY CONSTANT)
|
||||
Q_PROPERTY(QString SCOPE_DRIVE_READONLY MEMBER SCOPE_DRIVE_READONLY CONSTANT)
|
||||
Q_PROPERTY(QString SCOPE_DRIVE_SCRIPTS MEMBER SCOPE_DRIVE_SCRIPTS CONSTANT)
|
||||
Q_DISABLE_COPY(QAndroidGoogleDrive)
|
||||
Q_OBJECT
|
||||
|
||||
QAndroidGoogleDrive();
|
||||
|
||||
public:
|
||||
const QString &SCOPE_DRIVE = m_ScopeList[0];
|
||||
const QString &SCOPE_DRIVE_APPDATA = m_ScopeList[1];
|
||||
const QString &SCOPE_DRIVE_FILE = m_ScopeList[2];
|
||||
const QString &SCOPE_DRIVE_METADATA = m_ScopeList[3];
|
||||
const QString &SCOPE_DRIVE_METADATA_READONLY = m_ScopeList[4];
|
||||
const QString &SCOPE_DRIVE_PHOTOS_READONLY = m_ScopeList[5];
|
||||
const QString &SCOPE_DRIVE_READONLY = m_ScopeList[6];
|
||||
const QString &SCOPE_DRIVE_SCRIPTS = m_ScopeList[7];
|
||||
|
||||
static QObject* qmlInstance(QQmlEngine *engine, QJSEngine *scriptEngine);
|
||||
static QAndroidGoogleDrive* instance();
|
||||
@ -41,4 +57,7 @@ public:
|
||||
private:
|
||||
const QAndroidJniObject m_JavaGoogleDrive;
|
||||
static QAndroidGoogleDrive *m_pInstance;
|
||||
QString m_ScopeList[8];
|
||||
|
||||
void LoadScopeDefinitions();
|
||||
};
|
||||
|
@ -61,22 +61,22 @@ public class AndroidGoogleAccount
|
||||
mActivityInstance = ActivityInstance;
|
||||
}
|
||||
|
||||
private GoogleSignInClient getSignInClient(String ScopeValue)
|
||||
private GoogleSignInClient getSignInClient(String ScopeName)
|
||||
{
|
||||
GoogleSignInOptions.Builder SignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN);
|
||||
if(ScopeValue != null) SignInOptions.requestScopes(new Scope(ScopeValue));
|
||||
if(ScopeName.isEmpty() == false) SignInOptions.requestScopes(new Scope(ScopeName));
|
||||
SignInOptions.requestEmail();
|
||||
|
||||
return GoogleSignIn.getClient(mActivityInstance, SignInOptions.build());
|
||||
}
|
||||
|
||||
public Intent getSignInIntent(int ScopeId)
|
||||
public Intent getSignInIntent(String ScopeName)
|
||||
{
|
||||
Intent SignInIntent = null;
|
||||
|
||||
if(mGoogleSignInClient == null)
|
||||
{
|
||||
mGoogleSignInClient = getSignInClient(ScopeIdToValue(ScopeId));
|
||||
mGoogleSignInClient = getSignInClient(ScopeName);
|
||||
SignInIntent = mGoogleSignInClient.getSignInIntent();
|
||||
}
|
||||
|
||||
@ -86,31 +86,25 @@ public class AndroidGoogleAccount
|
||||
public void signInIntentDataResult(Intent Data)
|
||||
{
|
||||
final Task<GoogleSignInAccount> SignInTask = GoogleSignIn.getSignedInAccountFromIntent(Data);
|
||||
boolean signInSuccessfully = true;
|
||||
|
||||
try
|
||||
if(SignInTask.isSuccessful())
|
||||
{
|
||||
loadSignedInAccountInfo(SignInTask.getResult(ApiException.class));
|
||||
loadSignedInAccountInfo(SignInTask.getResult());
|
||||
signedIn(true);
|
||||
}
|
||||
catch(ApiException e)
|
||||
else
|
||||
{
|
||||
if(e.getStatusCode() == GoogleSignInStatusCodes.DEVELOPER_ERROR)
|
||||
{
|
||||
Log.d("AndroidGoogleAccount", "DEVELOPER_ERROR -> Have you signed your project on Android console?");
|
||||
}
|
||||
signInSuccessfully = false;
|
||||
SignInTask.addOnCompleteListener(mActivityInstance, new SignInAccountListener());
|
||||
}
|
||||
|
||||
signedIn(signInSuccessfully);
|
||||
}
|
||||
|
||||
public boolean signIn(int ScopeId)
|
||||
public boolean signIn(String ScopeName)
|
||||
{
|
||||
if(mGoogleSignInClient == null)
|
||||
{
|
||||
Task<GoogleSignInAccount> SignInTask;
|
||||
|
||||
mGoogleSignInClient = getSignInClient(ScopeIdToValue(ScopeId));
|
||||
mGoogleSignInClient = getSignInClient(ScopeName);
|
||||
|
||||
SignInTask = mGoogleSignInClient.silentSignIn();
|
||||
if(SignInTask.isSuccessful())
|
||||
@ -251,9 +245,14 @@ public class AndroidGoogleAccount
|
||||
}
|
||||
catch(ApiException e)
|
||||
{
|
||||
if(e.getStatusCode() == GoogleSignInStatusCodes.SIGN_IN_REQUIRED)
|
||||
switch(e.getStatusCode())
|
||||
{
|
||||
Log.d("AndroidGoogleAccount", "SIGN_IN_REQUIRED -> You have to signin by select account before use this call");
|
||||
case GoogleSignInStatusCodes.DEVELOPER_ERROR:
|
||||
Log.d("AndroidGoogleAccount", "DEVELOPER_ERROR -> Have you signed your project on Android console?");
|
||||
break;
|
||||
case GoogleSignInStatusCodes.SIGN_IN_REQUIRED:
|
||||
Log.d("AndroidGoogleAccount", "SIGN_IN_REQUIRED -> You have to signin by select account before use this call");
|
||||
break;
|
||||
}
|
||||
signInSuccessfully = false;
|
||||
mGoogleSignInClient = null;
|
||||
@ -274,65 +273,6 @@ public class AndroidGoogleAccount
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
@ -343,23 +283,6 @@ public class AndroidGoogleAccount
|
||||
public Bitmap photo;
|
||||
}
|
||||
|
||||
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();
|
||||
|
@ -34,13 +34,49 @@ import android.provider.MediaStore;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.content.ComponentName;
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignIn;
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
|
||||
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
|
||||
import com.google.android.gms.common.api.Scope;
|
||||
import com.google.api.client.extensions.android.http.AndroidHttp;
|
||||
import com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential;
|
||||
import com.google.api.client.json.gson.GsonFactory;
|
||||
import com.google.api.services.drive.Drive;
|
||||
import com.google.api.services.drive.DriveScopes;
|
||||
import com.google.api.services.drive.model.File;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public class AndroidGoogleDrive
|
||||
{
|
||||
private final Activity mActivityInstance;
|
||||
private Drive mDriveService = null;
|
||||
|
||||
public AndroidGoogleDrive(Activity ActivityInstance)
|
||||
{
|
||||
mActivityInstance = ActivityInstance;
|
||||
}
|
||||
|
||||
public boolean authenticate(String AppName, String ScopeName)
|
||||
{
|
||||
final GoogleSignInAccount SignInAccount = GoogleSignIn.getLastSignedInAccount(mActivityInstance);
|
||||
|
||||
if(SignInAccount != null)
|
||||
{
|
||||
GoogleAccountCredential AccountCredential;
|
||||
Drive.Builder DriveBuilder;
|
||||
|
||||
AccountCredential = GoogleAccountCredential.usingOAuth2(mActivityInstance, Collections.singleton(ScopeName));
|
||||
AccountCredential.setSelectedAccount(SignInAccount.getAccount());
|
||||
|
||||
DriveBuilder = new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), AccountCredential);
|
||||
DriveBuilder.setApplicationName(AppName);
|
||||
mDriveService = DriveBuilder.build();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -96,6 +96,7 @@ ApplicationWindow {
|
||||
ListElement { title: "AdMobRewardedVideo"; source: "qrc:/tools/AndroidAdMobRewardedVideo.qml" }
|
||||
ListElement { title: "PlayStore"; source: "qrc:/tools/AndroidPlayStore.qml" }
|
||||
ListElement { title: "GoogleAccount"; source: "qrc:/tools/AndroidGoogleAccount.qml" }
|
||||
ListElement { title: "GoogleDrive"; source: "qrc:/tools/AndroidGoogleDrive.qml" }
|
||||
}
|
||||
|
||||
ScrollIndicator.vertical: ScrollIndicator { }
|
||||
|
@ -15,5 +15,6 @@
|
||||
<file>tools/AndroidPlayStore.qml</file>
|
||||
<file>tools/AndroidAdMobRewardedVideo.qml</file>
|
||||
<file>tools/AndroidGoogleAccount.qml</file>
|
||||
<file>tools/AndroidGoogleDrive.qml</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
@ -21,6 +21,13 @@ dependencies {
|
||||
implementation 'com.android.support:support-v4:26.+'
|
||||
implementation 'com.google.android.gms:play-services-ads:16.+'
|
||||
implementation 'com.google.android.gms:play-services-auth:16.+'
|
||||
implementation 'com.google.http-client:google-http-client-gson:1.26.0'
|
||||
implementation('com.google.api-client:google-api-client-android:1.26.0') {
|
||||
exclude group: 'org.apache.httpcomponents'
|
||||
}
|
||||
implementation ('com.google.apis:google-api-services-drive:v3-rev173-1.25.0') {
|
||||
exclude group: 'org.apache.httpcomponents'
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
@ -57,4 +64,15 @@ android {
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude 'META-INF/DEPENDENCIES'
|
||||
exclude 'META-INF/LICENSE'
|
||||
exclude 'META-INF/LICENSE.txt'
|
||||
exclude 'META-INF/license.txt'
|
||||
exclude 'META-INF/NOTICE'
|
||||
exclude 'META-INF/NOTICE.txt'
|
||||
exclude 'META-INF/notice.txt'
|
||||
exclude 'META-INF/ASL2.0'
|
||||
}
|
||||
}
|
||||
|
15
QtAndroidToolsDemo/tools/AndroidGoogleDrive.qml
Normal file
15
QtAndroidToolsDemo/tools/AndroidGoogleDrive.qml
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Dialogs 1.3
|
||||
import QtAndroidTools 1.0
|
||||
|
||||
Page {
|
||||
id: page
|
||||
padding: 0
|
||||
|
||||
Button {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
text: "test"
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user