From a63663c30ea90196ea53f3490a73eedf9caa58a3 Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Tue, 22 Nov 2016 04:30:29 +0100 Subject: [PATCH] implemented first version of WebDavStorage based on OkHttp implemented first version of DropboxV2Storage (based on Api v2) started to move to OneDrive SDK. duplicated MsaAuthenticator for making custom changes. --- src/java/JavaFileStorage/JavaFileStorage.iml | 2 +- src/java/JavaFileStorage/app/app.iml | 51 +- src/java/JavaFileStorage/app/build.gradle | 80 +- .../app/build/outputs/aar/app-debug.aar | Bin 2261016 -> 0 bytes .../JavaFileStorage/app/proguard-project.txt | 14 + .../app/src/main/AndroidManifest.xml | 14 +- .../microsoft/live/AccessTokenRequest.java | 77 - .../java/com/microsoft/live/ApiRequest.java | 252 --- .../com/microsoft/live/ApiRequestAsync.java | 175 -- .../microsoft/live/AuthorizationRequest.java | 508 ----- .../main/java/com/microsoft/live/Config.java | 89 - .../java/com/microsoft/live/CopyRequest.java | 55 - .../live/DefaultObservableOAuthRequest.java | 55 - .../com/microsoft/live/DeleteRequest.java | 47 - .../java/com/microsoft/live/DeviceType.java | 31 - .../com/microsoft/live/DownloadRequest.java | 37 - .../live/EntityEnclosingApiRequest.java | 184 -- .../com/microsoft/live/ErrorMessages.java | 36 - .../java/com/microsoft/live/GetRequest.java | 47 - .../java/com/microsoft/live/HttpCopy.java | 42 - .../java/com/microsoft/live/HttpMove.java | 42 - .../live/InputStreamResponseHandler.java | 42 - .../java/com/microsoft/live/JsonEntity.java | 33 - .../microsoft/live/JsonResponseHandler.java | 49 - .../com/microsoft/live/LiveAuthClient.java | 640 ------ .../com/microsoft/live/LiveAuthException.java | 63 - .../com/microsoft/live/LiveAuthListener.java | 33 - .../com/microsoft/live/LiveConnectClient.java | 1898 ----------------- .../microsoft/live/LiveConnectSession.java | 311 --- .../com/microsoft/live/LiveConnectUtils.java | 59 - .../microsoft/live/LiveDownloadOperation.java | 131 -- .../live/LiveDownloadOperationListener.java | 38 - .../com/microsoft/live/LiveOperation.java | 129 -- .../live/LiveOperationException.java | 24 - .../microsoft/live/LiveOperationListener.java | 27 - .../java/com/microsoft/live/LiveStatus.java | 21 - .../live/LiveUploadOperationListener.java | 35 - .../java/com/microsoft/live/MoveRequest.java | 55 - .../main/java/com/microsoft/live/OAuth.java | 214 -- .../microsoft/live/OAuthErrorResponse.java | 173 -- .../microsoft/live/OAuthRequestObserver.java | 26 - .../com/microsoft/live/OAuthResponse.java | 25 - .../microsoft/live/OAuthResponseVisitor.java | 27 - .../live/OAuthSuccessfulResponse.java | 302 --- .../live/ObservableOAuthRequest.java | 28 - .../com/microsoft/live/OverwriteOption.java | 47 - .../java/com/microsoft/live/PostRequest.java | 56 - .../microsoft/live/PreferencesConstants.java | 22 - .../java/com/microsoft/live/PutRequest.java | 56 - .../com/microsoft/live/QueryParameters.java | 27 - .../live/RefreshAccessTokenRequest.java | 55 - .../java/com/microsoft/live/ScreenSize.java | 73 - .../java/com/microsoft/live/TokenRequest.java | 125 -- .../com/microsoft/live/TokenRequestAsync.java | 79 - .../com/microsoft/live/UploadRequest.java | 137 -- .../java/com/microsoft/live/UriBuilder.java | 277 --- .../DropboxAppFolderFileStorage.java | 28 - .../javafilestorage/DropboxFileStorage.java | 529 ----- .../javafilestorage/DropboxV2Storage.java | 586 +++++ .../javafilestorage/JavaFileStorageBase.java | 8 +- .../javafilestorage/KitKatFileStorage.java | 10 - .../javafilestorage/OneDriveStorage.java | 320 +++ .../javafilestorage/SftpStorage.java | 7 +- .../javafilestorage/SkyDriveFileStorage.java | 844 -------- .../javafilestorage/WebDavStorage.java | 435 ++++ .../onedrive/MyMSAAccountInfo.java | 102 + .../onedrive/MyMSAAuthenticator.java | 437 ++++ .../skydrive/PrepareFileUsageListener.java | 37 - .../skydrive/SkyDriveException.java | 22 - .../skydrive/SkyDriveFile.java | 33 - .../skydrive/SkyDriveFolder.java | 15 - .../skydrive/SkyDriveObject.java | 114 - .../webdav/PropfindXmlParser.java | 230 ++ .../javafilestorage/webdav/WebDavUtil.java | 115 + .../app/src/main/res/values/strings.xml | 2 - src/java/android-filechooser-AS/.idea/.name | 2 +- .../android-filechooser-AS/.idea/gradle.xml | 9 +- .../.idea/libraries/support_v4_18_0_0.xml | 11 - .../android-filechooser-AS/.idea/misc.xml | 25 +- .../android-filechooser-AS/.idea/modules.xml | 1 - src/java/android-filechooser-AS/.idea/vcs.xml | 6 - .../.idea/workspace.xml | 1694 ++------------- .../android-filechooser-AS.iml | 10 + .../android-filechooser-AS/app/build.gradle | 8 +- src/java/android-filechooser-AS/build.gradle | 5 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../android-filechooser-AS/local.properties | 12 +- 87 files changed, 2569 insertions(+), 10267 deletions(-) delete mode 100644 src/java/JavaFileStorage/app/build/outputs/aar/app-debug.aar delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/AccessTokenRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/ApiRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/ApiRequestAsync.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/AuthorizationRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/Config.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/CopyRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/DefaultObservableOAuthRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/DeleteRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/DeviceType.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/DownloadRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/EntityEnclosingApiRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/ErrorMessages.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/GetRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/HttpCopy.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/HttpMove.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/InputStreamResponseHandler.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/JsonEntity.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/JsonResponseHandler.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/LiveAuthClient.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/LiveAuthException.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/LiveAuthListener.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/LiveConnectClient.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/LiveConnectSession.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/LiveConnectUtils.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/LiveDownloadOperation.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/LiveDownloadOperationListener.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/LiveOperation.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/LiveOperationException.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/LiveOperationListener.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/LiveStatus.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/LiveUploadOperationListener.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/MoveRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/OAuth.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/OAuthErrorResponse.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/OAuthRequestObserver.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/OAuthResponse.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/OAuthResponseVisitor.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/OAuthSuccessfulResponse.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/ObservableOAuthRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/OverwriteOption.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/PostRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/PreferencesConstants.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/PutRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/QueryParameters.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/RefreshAccessTokenRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/ScreenSize.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/TokenRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/TokenRequestAsync.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/UploadRequest.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/com/microsoft/live/UriBuilder.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/DropboxAppFolderFileStorage.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/DropboxFileStorage.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/DropboxV2Storage.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/KitKatFileStorage.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/OneDriveStorage.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/SkyDriveFileStorage.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/WebDavStorage.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/onedrive/MyMSAAccountInfo.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/onedrive/MyMSAAuthenticator.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/skydrive/PrepareFileUsageListener.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/skydrive/SkyDriveException.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/skydrive/SkyDriveFile.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/skydrive/SkyDriveFolder.java delete mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/skydrive/SkyDriveObject.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/webdav/PropfindXmlParser.java create mode 100644 src/java/JavaFileStorage/app/src/main/java/keepass2android/javafilestorage/webdav/WebDavUtil.java delete mode 100644 src/java/android-filechooser-AS/.idea/libraries/support_v4_18_0_0.xml delete mode 100644 src/java/android-filechooser-AS/.idea/vcs.xml diff --git a/src/java/JavaFileStorage/JavaFileStorage.iml b/src/java/JavaFileStorage/JavaFileStorage.iml index 3182901a..e0291e9b 100644 --- a/src/java/JavaFileStorage/JavaFileStorage.iml +++ b/src/java/JavaFileStorage/JavaFileStorage.iml @@ -8,7 +8,7 @@ - + diff --git a/src/java/JavaFileStorage/app/app.iml b/src/java/JavaFileStorage/app/app.iml index dab87834..2b187eb2 100644 --- a/src/java/JavaFileStorage/app/app.iml +++ b/src/java/JavaFileStorage/app/app.iml @@ -12,8 +12,9 @@ - + - + @@ -47,6 +48,13 @@ + + + + + + + @@ -61,31 +69,30 @@ - + + + + + + + - - - - - - + - - - - - + - + + + @@ -96,15 +103,19 @@ + + + + - - + - + + \ No newline at end of file diff --git a/src/java/JavaFileStorage/app/build.gradle b/src/java/JavaFileStorage/app/build.gradle index b6578585..0874801c 100644 --- a/src/java/JavaFileStorage/app/build.gradle +++ b/src/java/JavaFileStorage/app/build.gradle @@ -2,9 +2,9 @@ apply plugin: 'com.android.library' android { compileSdkVersion 23 - buildToolsVersion '23.0.0' + buildToolsVersion '23.0.2' defaultConfig { - minSdkVersion 14 + minSdkVersion 15 targetSdkVersion 23 } buildTypes { @@ -18,23 +18,61 @@ android { } dependencies { - compile 'com.google.http-client:google-http-client-gson:1.20.0' - compile 'com.google.code.gson:gson:2.1' - compile files('libs/commons-logging-1.1.1.jar') - compile files('libs/dropbox-android-sdk-1.6.2.jar') - compile files('libs/google-api-client-1.16.0-rc.jar') - compile files('libs/google-api-client-android-1.16.0-rc.jar') - compile files('libs/google-api-services-drive-v2-rev102-1.16.0-rc.jar') - compile files('libs/google-http-client-1.16.0-rc.jar') - compile files('libs/google-http-client-android-1.16.0-rc.jar') - compile files('libs/google-http-client-jackson-1.16.0-rc.jar') - compile files('libs/google-http-client-jackson2-1.16.0-rc.jar') - compile files('libs/google-oauth-client-1.16.0-rc.jar') - compile files('libs/httpclient-4.0.3.jar') - compile files('libs/httpcore-4.0.1.jar') - compile files('libs/httpmime-4.0.3.jar') - compile files('libs/jackson-core-2.1.3.jar') - compile files('libs/jackson-core-asl-1.9.11.jar') - compile files('libs/json_simple-1.1.jar') - compile files('libs/jsr305-1.3.9.jar') + /* + //compile files('libs/google-api-services-drive-v2-rev102-1.16.0-rc') + compile 'com.google.android.gms:play-services:6.5.+' + compile 'com.google.api-client:google-api-client-xml:1.18.0-rc' + compile 'com.google.http-client:google-http-client-gson:1.18.0-rc' + compile 'com.google.api-client:google-api-client-android:1.18.0-rc' + compile 'com.google.apis:google-api-services-drive:v2-rev155-1.19.0' +*/ + compile 'com.squareup.okhttp3:okhttp:3.4.1' + compile 'com.burgstaller:okhttp-digest:1.7' + +// compile files('libs/dropbox-android-sdk-1.6.2.jar') + + compile 'com.google.android.gms:play-services:4.0.30' + + compile('com.google.api-client:google-api-client-xml:1.17.0-rc') { + exclude group: 'com.google.android.google-play-services' + } + compile 'com.google.http-client:google-http-client-gson:1.17.0-rc' + compile('com.google.api-client:google-api-client-android:1.17.0-rc') { + exclude group: 'com.google.android.google-play-services' + } + compile 'com.google.apis:google-api-services-drive:v2-rev105-1.17.0-rc' + + //compile 'com.dropbox.core:dropbox-core-sdk:2.0.1' + //compile group: 'com.dropbox.core', name: 'dropbox-core-sdk', version: '0-SNAPSHOT', changing: true + + compile 'com.dropbox.core:dropbox-core-sdk:2.1.1' + + + //onedrive: + compile ('com.onedrive.sdk:onedrive-sdk-android:1.2+') { + transitive = false + } + // Include the gson dependency + compile ('com.google.code.gson:gson:2.3.1') + compile ('com.microsoft.services.msa:msa-auth:0.8.+') + compile ('com.microsoft.aad:adal:1.1.+') + + /* compile 'com.google.http-client:google-http-client-gson:1.20.0' + compile 'com.google.code.gson:gson:2.1' + compile files('libs/commons-logging-1.1.1.jar') + compile files('libs/dropbox-android-sdk-1.6.2.jar') + compile files('libs/google-api-client-1.16.0-rc.jar') + compile files('libs/google-api-client-android-1.16.0-rc.jar') + compile files('libs/google-http-client-1.16.0-rc.jar') + compile files('libs/google-http-client-android-1.16.0-rc.jar') + compile files('libs/google-http-client-jackson-1.16.0-rc.jar') + compile files('libs/google-http-client-jackson2-1.16.0-rc.jar') + compile files('libs/google-oauth-client-1.16.0-rc.jar') + compile files('libs/httpclient-4.0.3.jar') + compile files('libs/httpcore-4.0.1.jar') + compile files('libs/httpmime-4.0.3.jar') + compile files('libs/jackson-core-2.1.3.jar') + compile files('libs/jackson-core-asl-1.9.11.jar') + compile files('libs/json_simple-1.1.jar') + compile files('libs/jsr305-1.3.9.jar')*/ } diff --git a/src/java/JavaFileStorage/app/build/outputs/aar/app-debug.aar b/src/java/JavaFileStorage/app/build/outputs/aar/app-debug.aar deleted file mode 100644 index efb541d1e55519386e022b09ec3039d6d5023cef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2261016 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