diff --git a/.travis.yml b/.travis.yml index 8897580..29d3c5b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,33 +1,40 @@ language: android - +sudo: required jdk: oraclejdk8 env: global: - - MALLOC_ARENA_MAX=2 - - ADB_INSTALL_TIMEOUT=10 - matrix: - - ANDROID_TARGET=android-22 ANDROID_ABI=armeabi-v7a + - ANDROID_API_LEVEL=28 + - ANDROID_BUILD_TOOLS_VERSION=28.0.3 + - ANDROID_ABI=armeabi-v7a android: components: - tools - - build-tools-25.0.3 - - android-25 - - android-24 - - android-22 - - android-23 - - sys-img-armeabi-v7a-android-22 - - extra-google-m2repository + - platform-tools - extra-android-m2repository - - extra-android-support + licenses: + - 'android-sdk-preview-license-52d11cd2' + - 'android-sdk-license-.+' + - 'google-gdk-license-.+' -sudo: required +before_install: + - touch $HOME/.android/repositories.cfg + - yes | sdkmanager "platforms;android-28" + - yes | sdkmanager "build-tools;28.0.3" + +before_cache: + - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock + - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ + +cache: + directories: + - $HOME/.gradle/caches/ + - $HOME/.gradle/wrapper/ + - $HOME/.android/build-cache before_script: - - echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI - - emulator -avd test -no-skin -no-audio -no-window & - - android-wait-for-emulator - - adb shell input keyevent 82 & + - chmod +x gradlew -script: ./gradlew library:test \ No newline at end of file +script: + - ./gradlew library:test diff --git a/build.gradle b/build.gradle index 5966013..277ddc3 100644 --- a/build.gradle +++ b/build.gradle @@ -2,10 +2,11 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.3.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files @@ -14,6 +15,7 @@ buildscript { allprojects { repositories { + google() jcenter() } } diff --git a/gradle.properties b/gradle.properties index 1d3591c..acf164f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,4 +15,6 @@ # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true \ No newline at end of file +# org.gradle.parallel=true +android.enableJetifier=true +android.useAndroidX=true diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2778cb3..a82e409 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip diff --git a/library/build.gradle b/library/build.gradle index c5beafc..7b6cfc9 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -1,12 +1,7 @@ apply plugin: 'groovy' apply plugin: 'maven' -apply plugin: 'me.tatarka.retrolambda' buildscript { - dependencies { - classpath 'me.tatarka:gradle-retrolambda:3.6.1' - } - repositories { mavenCentral() } @@ -24,15 +19,15 @@ repositories { dependencies { // Rx - compile 'io.reactivex:rxjava:1.1.1' + implementation 'io.reactivex.rxjava2:rxjava:2.2.7' // GSON - compile 'com.google.code.gson:gson:2.8.0' + implementation 'com.google.code.gson:gson:2.8.5' // Testing - testCompile "cglib:cglib:2.2" - testCompile 'junit:junit:4.12' - testCompile('org.spockframework:spock-core:1.0-groovy-2.4') { + testImplementation "cglib:cglib:2.2" + testImplementation 'junit:junit:4.12' + testImplementation('org.spockframework:spock-core:1.0-groovy-2.4') { exclude group: 'junit' } -} \ No newline at end of file +} diff --git a/library/src/main/java/de/rheinfabrik/heimdall/OAuth2AccessToken.java b/library/src/main/java/de/rheinfabrik/heimdall2/OAuth2AccessToken.java similarity index 98% rename from library/src/main/java/de/rheinfabrik/heimdall/OAuth2AccessToken.java rename to library/src/main/java/de/rheinfabrik/heimdall2/OAuth2AccessToken.java index 7b3f6ba..cfa9ec2 100644 --- a/library/src/main/java/de/rheinfabrik/heimdall/OAuth2AccessToken.java +++ b/library/src/main/java/de/rheinfabrik/heimdall2/OAuth2AccessToken.java @@ -1,7 +1,6 @@ -package de.rheinfabrik.heimdall; +package de.rheinfabrik.heimdall2; import com.google.gson.annotations.SerializedName; - import java.io.Serializable; import java.util.Calendar; diff --git a/library/src/main/java/de/rheinfabrik/heimdall/OAuth2AccessTokenManager.java b/library/src/main/java/de/rheinfabrik/heimdall2/OAuth2AccessTokenManager.java similarity index 91% rename from library/src/main/java/de/rheinfabrik/heimdall/OAuth2AccessTokenManager.java rename to library/src/main/java/de/rheinfabrik/heimdall2/OAuth2AccessTokenManager.java index b8c214b..144da0a 100644 --- a/library/src/main/java/de/rheinfabrik/heimdall/OAuth2AccessTokenManager.java +++ b/library/src/main/java/de/rheinfabrik/heimdall2/OAuth2AccessTokenManager.java @@ -1,13 +1,10 @@ -package de.rheinfabrik.heimdall; +package de.rheinfabrik.heimdall2; +import de.rheinfabrik.heimdall2.grants.OAuth2Grant; +import de.rheinfabrik.heimdall2.grants.OAuth2RefreshAccessTokenGrant; +import io.reactivex.Single; import java.util.Calendar; -import de.rheinfabrik.heimdall.grants.OAuth2Grant; -import de.rheinfabrik.heimdall.grants.OAuth2RefreshAccessTokenGrant; -import rx.Single; - -import static rx.Single.error; - /** * The all-seeing and all-hearing guardian sentry of your application who * stands on the rainbow bridge to handle all your access tokens needs! @@ -78,7 +75,7 @@ public Single grantNewAccessToken(OAuth2Grant grant, accessToken.expirationDate = expirationDate; } mStorage.storeAccessToken(accessToken); - }).toObservable().cache().toSingle(); + }).cache(); } /** @@ -97,7 +94,7 @@ public Single getValidAccessToken(final OAuth2RefreshAccessTokenGr return mStorage.getStoredAccessToken() .flatMap(accessToken -> { if (accessToken == null) { - return error(new IllegalStateException("No access token found.")); + return Single.error(new IllegalStateException("No access token found.")); } else if (accessToken.isExpired()) { refreshAccessTokenGrant.refreshToken = accessToken.refreshToken; diff --git a/library/src/main/java/de/rheinfabrik/heimdall/OAuth2AccessTokenStorage.java b/library/src/main/java/de/rheinfabrik/heimdall2/OAuth2AccessTokenStorage.java similarity index 93% rename from library/src/main/java/de/rheinfabrik/heimdall/OAuth2AccessTokenStorage.java rename to library/src/main/java/de/rheinfabrik/heimdall2/OAuth2AccessTokenStorage.java index 3b531da..670d149 100644 --- a/library/src/main/java/de/rheinfabrik/heimdall/OAuth2AccessTokenStorage.java +++ b/library/src/main/java/de/rheinfabrik/heimdall2/OAuth2AccessTokenStorage.java @@ -1,6 +1,7 @@ -package de.rheinfabrik.heimdall; +package de.rheinfabrik.heimdall2; -import rx.Single; + +import io.reactivex.Single; /** * Interface used to define how to store and retrieve a stored access token. diff --git a/library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2AuthorizationCodeGrant.java b/library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2AuthorizationCodeGrant.java similarity index 92% rename from library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2AuthorizationCodeGrant.java rename to library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2AuthorizationCodeGrant.java index a7b38b9..0df0196 100644 --- a/library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2AuthorizationCodeGrant.java +++ b/library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2AuthorizationCodeGrant.java @@ -1,6 +1,10 @@ -package de.rheinfabrik.heimdall.grants; +package de.rheinfabrik.heimdall2.grants; -import java.io.UnsupportedEncodingException; +import de.rheinfabrik.heimdall2.OAuth2AccessToken; +import io.reactivex.Observable; +import io.reactivex.Single; +import io.reactivex.subjects.BehaviorSubject; +import io.reactivex.subjects.PublishSubject; import java.net.URL; import java.net.URLDecoder; import java.util.LinkedHashMap; @@ -8,12 +12,6 @@ import java.util.List; import java.util.Map; -import de.rheinfabrik.heimdall.OAuth2AccessToken; -import rx.Observable; -import rx.Single; -import rx.subjects.BehaviorSubject; -import rx.subjects.PublishSubject; - /** * Class representing the Authorization Code Grant as described in https://tools.ietf.org/html/rfc6749#section-4.1. * @@ -71,7 +69,7 @@ public abstract class OAuth2AuthorizationCodeGrant authorizationUri() { - return mAuthorizationUrlSubject.asObservable(); + return mAuthorizationUrlSubject; } /** @@ -114,7 +112,7 @@ public Single grantNewAccessToken() { .take(1) .retry() .concatMap(this::exchangeTokenUsingCode) - .toSingle(); + .singleOrError(); } // Private diff --git a/library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2ClientCredentialsGrant.java b/library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2ClientCredentialsGrant.java similarity index 87% rename from library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2ClientCredentialsGrant.java rename to library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2ClientCredentialsGrant.java index 3089806..d0a0a6c 100644 --- a/library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2ClientCredentialsGrant.java +++ b/library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2ClientCredentialsGrant.java @@ -1,6 +1,6 @@ -package de.rheinfabrik.heimdall.grants; +package de.rheinfabrik.heimdall2.grants; -import de.rheinfabrik.heimdall.OAuth2AccessToken; +import de.rheinfabrik.heimdall2.OAuth2AccessToken; /** * Class representing the Client Credentials Grant as described in https://tools.ietf.org/html/rfc6749#section-4.4. diff --git a/library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2Grant.java b/library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2Grant.java similarity index 79% rename from library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2Grant.java rename to library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2Grant.java index 4c6f8b8..62a3a7b 100644 --- a/library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2Grant.java +++ b/library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2Grant.java @@ -1,7 +1,7 @@ -package de.rheinfabrik.heimdall.grants; +package de.rheinfabrik.heimdall2.grants; -import de.rheinfabrik.heimdall.OAuth2AccessToken; -import rx.Single; +import de.rheinfabrik.heimdall2.OAuth2AccessToken; +import io.reactivex.Single; /** * Interface describing an OAuth2 Grant as described in https://tools.ietf.org/html/rfc6749#page-23. diff --git a/library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2ImplicitGrant.java b/library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2ImplicitGrant.java similarity index 93% rename from library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2ImplicitGrant.java rename to library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2ImplicitGrant.java index 748a4f6..b3fc6b4 100644 --- a/library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2ImplicitGrant.java +++ b/library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2ImplicitGrant.java @@ -1,6 +1,6 @@ -package de.rheinfabrik.heimdall.grants; +package de.rheinfabrik.heimdall2.grants; -import de.rheinfabrik.heimdall.OAuth2AccessToken; +import de.rheinfabrik.heimdall2.OAuth2AccessToken; /** * Class representing the Implicit Grant as described in https://tools.ietf.org/html/rfc6749#section-4.2. diff --git a/library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2RefreshAccessTokenGrant.java b/library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2RefreshAccessTokenGrant.java similarity index 89% rename from library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2RefreshAccessTokenGrant.java rename to library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2RefreshAccessTokenGrant.java index a3b030a..4b1d9db 100644 --- a/library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2RefreshAccessTokenGrant.java +++ b/library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2RefreshAccessTokenGrant.java @@ -1,6 +1,6 @@ -package de.rheinfabrik.heimdall.grants; +package de.rheinfabrik.heimdall2.grants; -import de.rheinfabrik.heimdall.OAuth2AccessToken; +import de.rheinfabrik.heimdall2.OAuth2AccessToken; /** * Class representing the Refreshing Access Token Grant as described in https://tools.ietf.org/html/rfc6749#section-6. diff --git a/library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2ResourceOwnerPasswordCredentialsGrant.java b/library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2ResourceOwnerPasswordCredentialsGrant.java similarity index 90% rename from library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2ResourceOwnerPasswordCredentialsGrant.java rename to library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2ResourceOwnerPasswordCredentialsGrant.java index 43c8015..bd293d1 100644 --- a/library/src/main/java/de/rheinfabrik/heimdall/grants/OAuth2ResourceOwnerPasswordCredentialsGrant.java +++ b/library/src/main/java/de/rheinfabrik/heimdall2/grants/OAuth2ResourceOwnerPasswordCredentialsGrant.java @@ -1,6 +1,6 @@ -package de.rheinfabrik.heimdall.grants; +package de.rheinfabrik.heimdall2.grants; -import de.rheinfabrik.heimdall.OAuth2AccessToken; +import de.rheinfabrik.heimdall2.OAuth2AccessToken; /** * Class representing the Resource Owner Password Credentials Grant as described in https://tools.ietf.org/html/rfc6749#section-4.3. diff --git a/library/src/test/groovy/de/rheinfabrik/heimdall/OAuth2AccessTokenManagerSpecs.groovy b/library/src/test/groovy/de/rheinfabrik/heimdall2/OAuth2AccessTokenManagerSpecs.groovy similarity index 95% rename from library/src/test/groovy/de/rheinfabrik/heimdall/OAuth2AccessTokenManagerSpecs.groovy rename to library/src/test/groovy/de/rheinfabrik/heimdall2/OAuth2AccessTokenManagerSpecs.groovy index 43111c1..069ffd7 100644 --- a/library/src/test/groovy/de/rheinfabrik/heimdall/OAuth2AccessTokenManagerSpecs.groovy +++ b/library/src/test/groovy/de/rheinfabrik/heimdall2/OAuth2AccessTokenManagerSpecs.groovy @@ -1,8 +1,8 @@ -package de.rheinfabrik.heimdall +package de.rheinfabrik.heimdall2 -import de.rheinfabrik.heimdall.grants.OAuth2Grant -import de.rheinfabrik.heimdall.grants.OAuth2RefreshAccessTokenGrant -import rx.Single +import de.rheinfabrik.heimdall2.grants.OAuth2Grant +import de.rheinfabrik.heimdall2.grants.OAuth2RefreshAccessTokenGrant +import io.reactivex.Single import spock.lang.Specification import spock.lang.Title @@ -62,7 +62,7 @@ class OAuth2AccessTokenManagerGrantNewAccessTokenSpecs extends Specification { Calendar calendar = Calendar.getInstance() when: "I ask for a new access token" - OAuth2AccessToken newToken = tokenManager.grantNewAccessToken(grant, calendar).toBlocking().value() + OAuth2AccessToken newToken = tokenManager.grantNewAccessToken(grant, calendar).blockingGet() then: "The access token should have the correct expiration date" newToken.expirationDate.timeInMillis == calendar.getTimeInMillis() + 3000 @@ -82,7 +82,7 @@ class OAuth2AccessTokenManagerGrantNewAccessTokenSpecs extends Specification { OAuth2AccessTokenManager tokenManager = new OAuth2AccessTokenManager(Mock(OAuth2AccessTokenStorage)) when: "I ask for a new access token" - OAuth2AccessToken newToken = tokenManager.grantNewAccessToken(grant).toBlocking().value() + OAuth2AccessToken newToken = tokenManager.grantNewAccessToken(grant).blockingGet() then: "The access token should have the NO expiration date" newToken.expirationDate == null @@ -104,7 +104,7 @@ class OAuth2AccessTokenManagerGrantNewAccessTokenSpecs extends Specification { OAuth2AccessTokenManager tokenManager = new OAuth2AccessTokenManager(storage) when: "I ask for a new access token" - tokenManager.grantNewAccessToken(grant).toBlocking().value() + tokenManager.grantNewAccessToken(grant).blockingGet() then: "The storage is asked to save the token" 1 * storage.storeAccessToken(accessToken) @@ -170,7 +170,7 @@ class OAuth2AccessTokenManagerGetValidAccessTokenSpecs extends Specification { OAuth2AccessTokenManager tokenManager = new OAuth2AccessTokenManager(storage) when: "I ask for a valid access token" - OAuth2AccessToken validToken = tokenManager.getValidAccessToken(grant).toBlocking().value() + OAuth2AccessToken validToken = tokenManager.getValidAccessToken(grant).blockingGet() then: "The I receive the non-expired token" validToken == accessToken diff --git a/library/src/test/groovy/de/rheinfabrik/heimdall/OAuth2AccessTokenSpecs.groovy b/library/src/test/groovy/de/rheinfabrik/heimdall2/OAuth2AccessTokenSpecs.groovy similarity index 99% rename from library/src/test/groovy/de/rheinfabrik/heimdall/OAuth2AccessTokenSpecs.groovy rename to library/src/test/groovy/de/rheinfabrik/heimdall2/OAuth2AccessTokenSpecs.groovy index 952ef01..2120717 100644 --- a/library/src/test/groovy/de/rheinfabrik/heimdall/OAuth2AccessTokenSpecs.groovy +++ b/library/src/test/groovy/de/rheinfabrik/heimdall2/OAuth2AccessTokenSpecs.groovy @@ -1,4 +1,4 @@ -package de.rheinfabrik.heimdall +package de.rheinfabrik.heimdall2 import com.google.gson.Gson import spock.lang.Specification diff --git a/library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2AuthorizationCodeGrantSpecs.groovy b/library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2AuthorizationCodeGrantSpecs.groovy similarity index 94% rename from library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2AuthorizationCodeGrantSpecs.groovy rename to library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2AuthorizationCodeGrantSpecs.groovy index b9cfdd1..f2effea 100644 --- a/library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2AuthorizationCodeGrantSpecs.groovy +++ b/library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2AuthorizationCodeGrantSpecs.groovy @@ -1,4 +1,4 @@ -package de.rheinfabrik.heimdall.grants +package de.rheinfabrik.heimdall2.grants import spock.lang.Specification import spock.lang.Title diff --git a/library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2ClientCredentialsGrantSpecs.groovy b/library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2ClientCredentialsGrantSpecs.groovy similarity index 91% rename from library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2ClientCredentialsGrantSpecs.groovy rename to library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2ClientCredentialsGrantSpecs.groovy index 82ff1a8..7cf782d 100644 --- a/library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2ClientCredentialsGrantSpecs.groovy +++ b/library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2ClientCredentialsGrantSpecs.groovy @@ -1,4 +1,4 @@ -package de.rheinfabrik.heimdall.grants +package de.rheinfabrik.heimdall2.grants import spock.lang.Specification import spock.lang.Title diff --git a/library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2ImplicitGrantSpecs.groovy b/library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2ImplicitGrantSpecs.groovy similarity index 91% rename from library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2ImplicitGrantSpecs.groovy rename to library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2ImplicitGrantSpecs.groovy index 1949fd3..bdea92e 100644 --- a/library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2ImplicitGrantSpecs.groovy +++ b/library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2ImplicitGrantSpecs.groovy @@ -1,4 +1,4 @@ -package de.rheinfabrik.heimdall.grants +package de.rheinfabrik.heimdall2.grants import spock.lang.Specification import spock.lang.Title diff --git a/library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2RefreshAccessTokenGrantSpecs.groovy b/library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2RefreshAccessTokenGrantSpecs.groovy similarity index 91% rename from library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2RefreshAccessTokenGrantSpecs.groovy rename to library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2RefreshAccessTokenGrantSpecs.groovy index 0a45c4a..40ccad9 100644 --- a/library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2RefreshAccessTokenGrantSpecs.groovy +++ b/library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2RefreshAccessTokenGrantSpecs.groovy @@ -1,4 +1,4 @@ -package de.rheinfabrik.heimdall.grants +package de.rheinfabrik.heimdall2.grants import spock.lang.Specification import spock.lang.Title diff --git a/library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2ResourceOwnerPasswordCredentialsGrantSpecs.groovy b/library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2ResourceOwnerPasswordCredentialsGrantSpecs.groovy similarity index 92% rename from library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2ResourceOwnerPasswordCredentialsGrantSpecs.groovy rename to library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2ResourceOwnerPasswordCredentialsGrantSpecs.groovy index ee77302..426c7bd 100644 --- a/library/src/test/groovy/de/rheinfabrik/heimdall/grants/OAuth2ResourceOwnerPasswordCredentialsGrantSpecs.groovy +++ b/library/src/test/groovy/de/rheinfabrik/heimdall2/grants/OAuth2ResourceOwnerPasswordCredentialsGrantSpecs.groovy @@ -1,4 +1,4 @@ -package de.rheinfabrik.heimdall.grants +package de.rheinfabrik.heimdall2.grants import spock.lang.Specification import spock.lang.Title diff --git a/library/src/test/java/de/rheinfabrik/heimdall/EmptyTestClass.java b/library/src/test/java/de/rheinfabrik/heimdall2/EmptyTestClass.java similarity index 88% rename from library/src/test/java/de/rheinfabrik/heimdall/EmptyTestClass.java rename to library/src/test/java/de/rheinfabrik/heimdall2/EmptyTestClass.java index 961a39f..eb4ca9c 100644 --- a/library/src/test/java/de/rheinfabrik/heimdall/EmptyTestClass.java +++ b/library/src/test/java/de/rheinfabrik/heimdall2/EmptyTestClass.java @@ -1,4 +1,4 @@ -package de.rheinfabrik.heimdall; +package de.rheinfabrik.heimdall2; public class EmptyTestClass { // This is an empty class. It exists only because the gradle compileTestGroovy diff --git a/sample/build.gradle b/sample/build.gradle index bb539d7..4c9bd51 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,24 +1,19 @@ apply plugin: 'com.android.application' -apply plugin: 'me.tatarka.retrolambda' buildscript { repositories { mavenCentral() } - - dependencies { - classpath 'me.tatarka:gradle-retrolambda:3.6.1' - } } android { - compileSdkVersion 25 - buildToolsVersion "25.0.3" + compileSdkVersion 28 + buildToolsVersion "28.0.3" defaultConfig { applicationId "de.rheinfabrik.heimdall" minSdkVersion 15 - targetSdkVersion 25 + targetSdkVersion 28 versionCode 1 versionName "1.0" } @@ -33,27 +28,26 @@ android { dependencies { // Android - compile 'com.android.support:appcompat-v7:23.1.1' - compile 'com.android.support:recyclerview-v7:23.1.1' - compile 'com.android.support:cardview-v7:23.1.1' + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'androidx.recyclerview:recyclerview:1.0.0' + implementation 'androidx.cardview:cardview:1.0.0' // Heimdall - compile project(':library') + implementation project(':library') // Rx - compile 'io.reactivex:rxandroid:1.1.0' - compile 'io.reactivex:rxjava:1.1.0' - compile 'com.trello:rxlifecycle:0.4.0' - compile 'com.trello:rxlifecycle-components:0.4.0' + implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' + implementation 'io.reactivex.rxjava2:rxjava:2.2.7' + implementation 'com.trello.rxlifecycle3:rxlifecycle-components:3.0.0' // Serialization - compile 'com.google.code.gson:gson:2.4' - compile 'org.parceler:parceler-api:0.2.16' + implementation 'com.google.code.gson:gson:2.8.5' + implementation 'org.parceler:parceler-api:0.2.16' // Network - compile files('libs/Heimdall.jar') - compile 'com.squareup.retrofit:retrofit:1.9.0' + implementation 'com.squareup.retrofit:retrofit:1.9.0' // Butterknife - compile 'com.jakewharton:butterknife:6.1.0' -} \ No newline at end of file + annotationProcessor 'com.jakewharton:butterknife-compiler:8.2.1' + implementation 'com.jakewharton:butterknife:8.2.1' +} diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index 9805f60..cffae6e 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -1,30 +1,36 @@ - + - + - + - + - - + + - + diff --git a/sample/src/main/java/de/rheinfabrik/heimdalldroid/actvities/LoginActivity.java b/sample/src/main/java/de/rheinfabrik/heimdalldroid/actvities/LoginActivity.java index a27c06e..4f613eb 100644 --- a/sample/src/main/java/de/rheinfabrik/heimdalldroid/actvities/LoginActivity.java +++ b/sample/src/main/java/de/rheinfabrik/heimdalldroid/actvities/LoginActivity.java @@ -1,24 +1,23 @@ package de.rheinfabrik.heimdalldroid.actvities; import android.graphics.Bitmap; -import android.net.Uri; import android.os.Bundle; import android.view.View; import android.webkit.WebView; import android.webkit.WebViewClient; -import com.trello.rxlifecycle.components.support.RxAppCompatActivity; +import butterknife.BindView; +import com.trello.rxlifecycle3.components.support.RxAppCompatActivity; +import io.reactivex.android.schedulers.AndroidSchedulers; import java.net.MalformedURLException; import java.net.URL; import butterknife.ButterKnife; -import butterknife.InjectView; import de.rheinfabrik.heimdalldroid.R; import de.rheinfabrik.heimdalldroid.network.oauth2.TraktTvAuthorizationCodeGrant; import de.rheinfabrik.heimdalldroid.network.oauth2.TraktTvOauth2AccessTokenManager; import de.rheinfabrik.heimdalldroid.utils.AlertDialogFactory; -import rx.android.schedulers.AndroidSchedulers; /** * Activity used to let the user login with his GitHub credentials. @@ -29,7 +28,7 @@ public class LoginActivity extends RxAppCompatActivity { // Members - @InjectView(R.id.webView) + @BindView(R.id.webView) protected WebView mWebView; // Activity lifecycle @@ -42,7 +41,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_login); // Inject views - ButterKnife.inject(this); + ButterKnife.bind(this); // Start authorization authorize(); diff --git a/sample/src/main/java/de/rheinfabrik/heimdalldroid/actvities/MainActivity.java b/sample/src/main/java/de/rheinfabrik/heimdalldroid/actvities/MainActivity.java index 4e4cc5f..dfef0f3 100644 --- a/sample/src/main/java/de/rheinfabrik/heimdalldroid/actvities/MainActivity.java +++ b/sample/src/main/java/de/rheinfabrik/heimdalldroid/actvities/MainActivity.java @@ -4,21 +4,22 @@ import android.content.Intent; import android.os.Build; import android.os.Bundle; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.webkit.CookieManager; -import com.trello.rxlifecycle.components.support.RxAppCompatActivity; - +import android.widget.Toolbar; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import com.trello.rxlifecycle3.components.support.RxAppCompatActivity; +import io.reactivex.Observable; +import io.reactivex.android.schedulers.AndroidSchedulers; import java.util.List; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.BindView; import de.rheinfabrik.heimdalldroid.R; import de.rheinfabrik.heimdalldroid.adapter.TraktTvListsRecyclerViewAdapter; import de.rheinfabrik.heimdalldroid.network.TraktTvApiFactory; @@ -27,8 +28,6 @@ import de.rheinfabrik.heimdalldroid.utils.AlertDialogFactory; import de.rheinfabrik.heimdalldroid.utils.IntentFactory; import retrofit.RetrofitError; -import rx.Observable; -import rx.android.schedulers.AndroidSchedulers; /** * Activity showing either the list of the user's repositories or the login screen. @@ -43,13 +42,13 @@ public class MainActivity extends RxAppCompatActivity { // Members - @InjectView(R.id.recyclerView) + @BindView(R.id.recyclerView) protected RecyclerView mRecyclerView; - @InjectView(R.id.toolbar) + @BindView(R.id.toolbar) protected Toolbar mToolbar; - @InjectView(R.id.swipeRefreshLayout) + @BindView(R.id.swipeRefreshLayout) protected SwipeRefreshLayout mSwipeRefreshLayout; private TraktTvOauth2AccessTokenManager mTokenManager; @@ -64,10 +63,10 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); // Inject views - ButterKnife.inject(this); + ButterKnife.bind(this); // Setup toolbar - setSupportActionBar(mToolbar); + setActionBar(mToolbar); // Setup swipe refresh layout mSwipeRefreshLayout.setOnRefreshListener(MainActivity.this::refresh); @@ -108,10 +107,8 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.logout: { - logout(); - } + if (item.getItemId() == R.id.logout) { + logout(); } return super.onOptionsItemSelected(item); diff --git a/sample/src/main/java/de/rheinfabrik/heimdalldroid/adapter/TraktTvListsRecyclerViewAdapter.java b/sample/src/main/java/de/rheinfabrik/heimdalldroid/adapter/TraktTvListsRecyclerViewAdapter.java index d8295b7..b8f02ea 100644 --- a/sample/src/main/java/de/rheinfabrik/heimdalldroid/adapter/TraktTvListsRecyclerViewAdapter.java +++ b/sample/src/main/java/de/rheinfabrik/heimdalldroid/adapter/TraktTvListsRecyclerViewAdapter.java @@ -1,10 +1,10 @@ package de.rheinfabrik.heimdalldroid.adapter; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import androidx.recyclerview.widget.RecyclerView; import java.util.List; import de.rheinfabrik.heimdalldroid.R; diff --git a/sample/src/main/java/de/rheinfabrik/heimdalldroid/adapter/viewholder/TraktTvListViewHolder.java b/sample/src/main/java/de/rheinfabrik/heimdalldroid/adapter/viewholder/TraktTvListViewHolder.java index 3d8da30..fa8139f 100644 --- a/sample/src/main/java/de/rheinfabrik/heimdalldroid/adapter/viewholder/TraktTvListViewHolder.java +++ b/sample/src/main/java/de/rheinfabrik/heimdalldroid/adapter/viewholder/TraktTvListViewHolder.java @@ -1,11 +1,11 @@ package de.rheinfabrik.heimdalldroid.adapter.viewholder; -import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.TextView; +import androidx.recyclerview.widget.RecyclerView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.BindView; import de.rheinfabrik.heimdalldroid.R; import de.rheinfabrik.heimdalldroid.network.models.TraktTvList; @@ -16,13 +16,13 @@ public class TraktTvListViewHolder extends RecyclerView.ViewHolder { // Members - @InjectView(R.id.titleTextView) + @BindView(R.id.titleTextView) protected TextView mTitleTextView; - @InjectView(R.id.descriptionTextView) + @BindView(R.id.descriptionTextView) protected TextView mDescriptionTextView; - @InjectView(R.id.likeCountTextView) + @BindView(R.id.likeCountTextView) protected TextView mLikeCountTextView; // Constructor @@ -31,7 +31,7 @@ public TraktTvListViewHolder(View itemView) { super(itemView); // Inject views - ButterKnife.inject(this, itemView); + ButterKnife.bind(this, itemView); } // Public Api @@ -45,6 +45,6 @@ public void bind(TraktTvList traktTvList) { mDescriptionTextView.setText(traktTvList.description); // Set like count - mLikeCountTextView.setText(String.valueOf(traktTvList.numberOfLikes) + itemView.getContext().getString(R.string.likes_postfix)); + mLikeCountTextView.setText(traktTvList.numberOfLikes + itemView.getContext().getString(R.string.likes_postfix)); } } diff --git a/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/TraktTvApiService.java b/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/TraktTvApiService.java index bdd5c02..9fb4809 100644 --- a/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/TraktTvApiService.java +++ b/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/TraktTvApiService.java @@ -1,8 +1,9 @@ package de.rheinfabrik.heimdalldroid.network; +import io.reactivex.Observable; import java.util.List; -import de.rheinfabrik.heimdall.OAuth2AccessToken; +import de.rheinfabrik.heimdall2.OAuth2AccessToken; import de.rheinfabrik.heimdalldroid.network.models.AccessTokenRequestBody; import de.rheinfabrik.heimdalldroid.network.models.RefreshTokenRequestBody; import de.rheinfabrik.heimdalldroid.network.models.RevokeAccessTokenBody; @@ -11,7 +12,6 @@ import retrofit.http.GET; import retrofit.http.Header; import retrofit.http.POST; -import rx.Observable; /** * Interface for communicating to the TraktTv API (http://docs.trakt.apiary.io/#). diff --git a/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/oauth2/TraktTvAuthorizationCodeGrant.java b/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/oauth2/TraktTvAuthorizationCodeGrant.java index 7e9fd3d..f9e02de 100644 --- a/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/oauth2/TraktTvAuthorizationCodeGrant.java +++ b/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/oauth2/TraktTvAuthorizationCodeGrant.java @@ -2,13 +2,13 @@ import android.net.Uri; +import io.reactivex.Observable; import java.net.URL; -import de.rheinfabrik.heimdall.OAuth2AccessToken; -import de.rheinfabrik.heimdall.grants.OAuth2AuthorizationCodeGrant; +import de.rheinfabrik.heimdall2.OAuth2AccessToken; +import de.rheinfabrik.heimdall2.grants.OAuth2AuthorizationCodeGrant; import de.rheinfabrik.heimdalldroid.network.TraktTvApiFactory; import de.rheinfabrik.heimdalldroid.network.models.AccessTokenRequestBody; -import rx.Observable; /** * TraktTv authorization code grant as described in http://docs.trakt.apiary.io/#reference/authentication-oauth. diff --git a/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/oauth2/TraktTvOauth2AccessTokenManager.java b/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/oauth2/TraktTvOauth2AccessTokenManager.java index e479ad4..9cf95a9 100644 --- a/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/oauth2/TraktTvOauth2AccessTokenManager.java +++ b/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/oauth2/TraktTvOauth2AccessTokenManager.java @@ -3,14 +3,14 @@ import android.content.Context; import android.content.SharedPreferences; -import de.rheinfabrik.heimdall.OAuth2AccessToken; -import de.rheinfabrik.heimdall.OAuth2AccessTokenManager; -import de.rheinfabrik.heimdall.OAuth2AccessTokenStorage; +import de.rheinfabrik.heimdall2.OAuth2AccessToken; +import de.rheinfabrik.heimdall2.OAuth2AccessTokenManager; +import de.rheinfabrik.heimdall2.OAuth2AccessTokenStorage; import de.rheinfabrik.heimdalldroid.TraktTvAPIConfiguration; import de.rheinfabrik.heimdalldroid.network.TraktTvApiFactory; import de.rheinfabrik.heimdalldroid.network.models.RevokeAccessTokenBody; import de.rheinfabrik.heimdalldroid.utils.SharedPreferencesOAuth2AccessTokenStorage; -import rx.Single; +import io.reactivex.Single; /** * Token manger used to handle all your access token needs with the TraktTv API (http://docs.trakt.apiary.io/#). @@ -77,7 +77,6 @@ public Single logout() { RevokeAccessTokenBody body = new RevokeAccessTokenBody(accessToken.accessToken); return TraktTvApiFactory.newApiService().revokeAccessToken(body); }) - .doOnNext(x -> getStorage().removeAccessToken()) - .toSingle(); + .doOnNext(x -> getStorage().removeAccessToken()).singleOrError(); } } diff --git a/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/oauth2/TraktTvRefreshAccessTokenGrant.java b/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/oauth2/TraktTvRefreshAccessTokenGrant.java index 8d07eb8..7359c99 100644 --- a/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/oauth2/TraktTvRefreshAccessTokenGrant.java +++ b/sample/src/main/java/de/rheinfabrik/heimdalldroid/network/oauth2/TraktTvRefreshAccessTokenGrant.java @@ -1,10 +1,10 @@ package de.rheinfabrik.heimdalldroid.network.oauth2; -import de.rheinfabrik.heimdall.OAuth2AccessToken; -import de.rheinfabrik.heimdall.grants.OAuth2RefreshAccessTokenGrant; +import de.rheinfabrik.heimdall2.OAuth2AccessToken; +import de.rheinfabrik.heimdall2.grants.OAuth2RefreshAccessTokenGrant; import de.rheinfabrik.heimdalldroid.network.TraktTvApiFactory; import de.rheinfabrik.heimdalldroid.network.models.RefreshTokenRequestBody; -import rx.Single; +import io.reactivex.Single; /** * TraktTv refresh token grant as described in http://docs.trakt.apiary.io/#reference/authentication-oauth/token/exchange-refresh_token-for-access_token. @@ -22,6 +22,6 @@ public class TraktTvRefreshAccessTokenGrant extends OAuth2RefreshAccessTokenGran @Override public Single grantNewAccessToken() { RefreshTokenRequestBody body = new RefreshTokenRequestBody(refreshToken, clientId, clientSecret, redirectUri, GRANT_TYPE); - return TraktTvApiFactory.newApiService().refreshAccessToken(body).toSingle(); + return TraktTvApiFactory.newApiService().refreshAccessToken(body).singleOrError(); } } diff --git a/sample/src/main/java/de/rheinfabrik/heimdalldroid/utils/SharedPreferencesOAuth2AccessTokenStorage.java b/sample/src/main/java/de/rheinfabrik/heimdalldroid/utils/SharedPreferencesOAuth2AccessTokenStorage.java index a5d8e19..d0f6148 100755 --- a/sample/src/main/java/de/rheinfabrik/heimdalldroid/utils/SharedPreferencesOAuth2AccessTokenStorage.java +++ b/sample/src/main/java/de/rheinfabrik/heimdalldroid/utils/SharedPreferencesOAuth2AccessTokenStorage.java @@ -4,9 +4,9 @@ import com.google.gson.Gson; -import de.rheinfabrik.heimdall.OAuth2AccessToken; -import de.rheinfabrik.heimdall.OAuth2AccessTokenStorage; -import rx.Single; +import de.rheinfabrik.heimdall2.OAuth2AccessToken; +import de.rheinfabrik.heimdall2.OAuth2AccessTokenStorage; +import io.reactivex.Single; /** * A simple storage that saves the access token as plain text in the passed shared preferences. diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index 038a26d..c406818 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -1,33 +1,32 @@ - - + android:theme="@style/AppThemeNoActionBar" /> - - + android:background="@color/hint_of_red" /> - +