diff --git a/.travis.yml b/.travis.yml
index aaa37d12..6b024549 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,11 +4,13 @@
language: android
android:
components:
- - build-tools-27.0.3
- - android-27
+ - build-tools-30.0.0
+ - android-230
script:
- ./gradlew check jacoco assemble
- bash <(curl -s https://codecov.io/bash)
+before_install:
+ - yes | sdkmanager "platforms;android-30"
before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
- rm -fr $HOME/.gradle/caches/*/plugin-resolution/
diff --git a/README.md b/README.md
index c6e53970..e8d767b2 100644
--- a/README.md
+++ b/README.md
@@ -51,6 +51,26 @@ either through custom URI scheme redirects, or App Links.
AS's that assume all clients are web-based or require clients to maintain
confidentiality of the client secrets may not work well.
+From Android API 30 (R) and above, set [queries](https://developer.android.com/preview/privacy/package-visibility) in the manifest,
+to enable AppAuth searching for usable installed browsers.
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ...
+
+```
+
## Demo app
A demo app is contained within this repository. For instructions on how to
diff --git a/app/AndroidManifest.xml b/app/AndroidManifest.xml
index ef6cbb5e..0a180c70 100644
--- a/app/AndroidManifest.xml
+++ b/app/AndroidManifest.xml
@@ -13,11 +13,23 @@
-->
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
@@ -86,19 +86,19 @@
android:layout_marginTop="16dp"
style="@style/Base.TextAppearance.AppCompat.Subhead" />
-
-
-
+
-
-
+
+
diff --git a/app/res/layout/activity_token.xml b/app/res/layout/activity_token.xml
index ceaff2d6..847faa61 100644
--- a/app/res/layout/activity_token.xml
+++ b/app/res/layout/activity_token.xml
@@ -1,5 +1,5 @@
-
-
+
diff --git a/build.gradle b/build.gradle
index a454d9ce..3b825b6c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,3 +1,5 @@
+import org.ajoberstar.grgit.Grgit
+
apply from: 'config/keystore.gradle'
buildscript {
@@ -6,10 +8,11 @@ buildscript {
google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.1.4'
+ classpath 'com.android.tools.build:gradle:4.0.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
- classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0'
+ classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5'
classpath 'org.ajoberstar:gradle-git:1.7.2'
+ classpath "org.jacoco:org.jacoco.core:0.8.5"
}
}
@@ -24,7 +27,7 @@ subprojects {
ext.verifyKeystore()
try {
- def grgit = org.ajoberstar.grgit.Grgit.open(dir: '.')
+ def grgit = Grgit.open(dir: '.')
def lastCommit = grgit.head()
project.ext.versionNum = grgit.log(includes:['HEAD']).size()
@@ -33,16 +36,31 @@ try {
if (project.ext.versionName == null) {
project.ext.versionName = 'DEV'
}
-} catch (Exception ex) {
+} catch (Exception ignored) {
project.ext.versionNum = 0
project.ext.versionName = 'DEV'
project.ext.versionDate = new Date()
}
-project.ext.minSdkVersion = 16
-project.ext.compileSdkVersion = 27
-project.ext.buildToolsVersion = '27.0.3'
-project.ext.supportLibVersion = '27.1.1'
+project.ext {
+ minSdkVersion = 16
+ compileSdkVersion = 30
+ buildToolsVersion = '30.0.0'
+
+ googleVersions = [
+ glide : '4.11.0',
+ material : '1.1.0',
+ ]
+
+ androidXVersions = [
+ annotation : '1.1.0',
+ appCompat : '1.1.0',
+ browser : '1.2.0',
+ ]
+
+ okioVersion = '1.17.5'
+ jodaVersion = '2.10.6'
+}
task showVersion {
doLast {
diff --git a/config/android-common.gradle b/config/android-common.gradle
index 95f96f52..c65539e6 100644
--- a/config/android-common.gradle
+++ b/config/android-common.gradle
@@ -14,8 +14,8 @@ android {
main.res.srcDir 'res'
main.assets.srcDir 'assets'
main.resources.srcDir 'java'
- test.setRoot('javatests');
- test.java.srcDir('javatests');
+ test.setRoot('javatests')
+ test.java.srcDir('javatests')
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
diff --git a/config/coverage.gradle b/config/coverage.gradle
index 17334464..fb168273 100644
--- a/config/coverage.gradle
+++ b/config/coverage.gradle
@@ -1,8 +1,4 @@
apply plugin: 'jacoco'
-jacoco {
- toolVersion = "0.8.1"
-}
-
android {
testOptions {
unitTests.all {
@@ -21,10 +17,18 @@ task jacocoTestReport(type: JacocoReport, dependsOn: "testDebugUnitTest") {
html.enabled = true
}
// Class R is used, but usage will not be covered, so ignore this class from report
- classDirectories = fileTree(
- dir: 'build/intermediates/classes/debug',
- excludes: ['**/BuildConfig.class']
- )
- sourceDirectories = files('java')
- executionData = files('build/jacoco/testDebugUnitTest.exec')
+ afterEvaluate {
+ getClassDirectories().setFrom(
+ fileTree(
+ dir: 'build/intermediates/classes/debug',
+ excludes: ['**/BuildConfig.class']
+ )
+ )
+ getSourceDirectories().setFrom(
+ files('java')
+ )
+ getExecutionData().setFrom(
+ files('build/jacoco/testDebugUnitTest.exec')
+ )
+ }
}
diff --git a/config/javadoc.gradle b/config/javadoc.gradle
index f55c4ca3..3e55b285 100644
--- a/config/javadoc.gradle
+++ b/config/javadoc.gradle
@@ -3,21 +3,23 @@ configurations {
}
dependencies {
- mdDoclet 'com.github.mnlipp.jdrupes-mdoclet:doclet:1.0.3'
+ mdDoclet 'com.github.mnlipp.jdrupes-mdoclet:doclet:1.0.10'
}
task androidJavadoc(type: Javadoc) {
- source = android.sourceSets.main.java.srcDirs
- title = "AppAuth for Android"
- classpath += files(project.android.getBootClasspath())
- options {
- doclet "org.jdrupes.mdoclet.MDoclet"
- docletpath(*configurations.mdDoclet.files.asType(List))
- links "http://docs.oracle.com/javase/7/docs/api/"
- linksOffline "http://d.android.com/reference","${android.sdkDirectory}/docs/reference"
+ afterEvaluate {
+ source = android.sourceSets.main.java.srcDirs
+ title = "AppAuth for Android"
+ classpath += files(project.android.getBootClasspath())
+ options {
+ doclet "org.jdrupes.mdoclet.MDoclet"
+ docletpath(*configurations.mdDoclet.files.asType(List))
+ links "http://docs.oracle.com/javase/7/docs/api/"
+ linksOffline "http://d.android.com/reference", "${android.sdkDirectory}/docs/reference"
+ }
+ exclude '**/BuildConfig.java'
+ exclude '**/R.java'
}
- exclude '**/BuildConfig.java'
- exclude '**/R.java'
}
task javadocJar(type: Jar, dependsOn:androidJavadoc) {
@@ -28,6 +30,6 @@ task javadocJar(type: Jar, dependsOn:androidJavadoc) {
afterEvaluate {
// fixes issue where javadoc can't find android symbols ref: http://stackoverflow.com/a/34572606
androidJavadoc.classpath += files(android.libraryVariants.collect { variant ->
- variant.javaCompile.classpath.files
+ variant.javaCompileProvider.get().classpath.files
})
}
diff --git a/config/style.gradle b/config/style.gradle
index 7ee3fd6c..c4013ef0 100644
--- a/config/style.gradle
+++ b/config/style.gradle
@@ -7,9 +7,11 @@ checkstyle {
}
task checkAllSource(type: Checkstyle) {
- source 'java'
- include '**/*.java'
- classpath = files project.configurations.compile.files
+ afterEvaluate {
+ source 'java'
+ include '**/*.java'
+ classpath = files project.configurations.compile.files
+ }
}
task failOnCheckstyleWarning {
diff --git a/gradle.properties b/gradle.properties
index 1a644c77..7f4668fd 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1 +1,3 @@
+android.enableJetifier=true
+android.useAndroidX=true
org.gradle.daemon=true
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index b65735cd..484a3543 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Fri Apr 06 13:27:13 PDT 2018
+#Sat Jun 13 20:20:21 CEST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
diff --git a/library/build.gradle b/library/build.gradle
index 10f965ee..5fcdac48 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -7,7 +7,7 @@ apply from: '../config/android-common.gradle'
group = "net.openid"
version = rootProject.versionName
-android.defaultConfig.project.archivesBaseName = 'appauth'
+project.archivesBaseName = 'appauth'
// use a separate build type for unit tests, so that we can configure the manifest placeholder
// without interfering with other builds.
@@ -23,7 +23,8 @@ android.buildTypes {
android.testBuildType "forTests"
dependencies {
- api "com.android.support:customtabs:${rootProject.supportLibVersion}"
+ api "androidx.browser:browser:${project.androidXVersions.browser}"
+ implementation "androidx.annotation:annotation:${project.androidXVersions.annotation}"
apply from: '../config/testdeps.gradle', to:it
}
diff --git a/library/java/net/openid/appauth/AdditionalParamsProcessor.java b/library/java/net/openid/appauth/AdditionalParamsProcessor.java
index 6b8a631b..566d3fd2 100644
--- a/library/java/net/openid/appauth/AdditionalParamsProcessor.java
+++ b/library/java/net/openid/appauth/AdditionalParamsProcessor.java
@@ -18,8 +18,8 @@
import static net.openid.appauth.Preconditions.checkNotNull;
import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import org.json.JSONException;
import org.json.JSONObject;
diff --git a/library/java/net/openid/appauth/AppAuthConfiguration.java b/library/java/net/openid/appauth/AppAuthConfiguration.java
index d86fb0ab..a0255cfc 100644
--- a/library/java/net/openid/appauth/AppAuthConfiguration.java
+++ b/library/java/net/openid/appauth/AppAuthConfiguration.java
@@ -14,7 +14,7 @@
package net.openid.appauth;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import net.openid.appauth.browser.AnyBrowserMatcher;
import net.openid.appauth.browser.BrowserMatcher;
diff --git a/library/java/net/openid/appauth/AsciiStringListUtil.java b/library/java/net/openid/appauth/AsciiStringListUtil.java
index 9631f6be..967c28c5 100644
--- a/library/java/net/openid/appauth/AsciiStringListUtil.java
+++ b/library/java/net/openid/appauth/AsciiStringListUtil.java
@@ -16,9 +16,10 @@
import static net.openid.appauth.Preconditions.checkArgument;
-import android.support.annotation.Nullable;
import android.text.TextUtils;
+import androidx.annotation.Nullable;
+
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
diff --git a/library/java/net/openid/appauth/AuthState.java b/library/java/net/openid/appauth/AuthState.java
index 1de1be52..ae08e3d3 100644
--- a/library/java/net/openid/appauth/AuthState.java
+++ b/library/java/net/openid/appauth/AuthState.java
@@ -19,9 +19,9 @@
import static net.openid.appauth.Preconditions.checkNotEmpty;
import static net.openid.appauth.Preconditions.checkNotNull;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
import net.openid.appauth.internal.Logger;
diff --git a/library/java/net/openid/appauth/AuthorizationException.java b/library/java/net/openid/appauth/AuthorizationException.java
index 77738e33..e2057ce7 100644
--- a/library/java/net/openid/appauth/AuthorizationException.java
+++ b/library/java/net/openid/appauth/AuthorizationException.java
@@ -19,10 +19,10 @@
import android.content.Intent;
import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
-import android.support.v4.util.ArrayMap;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+import androidx.collection.ArrayMap;
import org.json.JSONException;
import org.json.JSONObject;
diff --git a/library/java/net/openid/appauth/AuthorizationManagementActivity.java b/library/java/net/openid/appauth/AuthorizationManagementActivity.java
index 3eddac43..a1bcd1c9 100644
--- a/library/java/net/openid/appauth/AuthorizationManagementActivity.java
+++ b/library/java/net/openid/appauth/AuthorizationManagementActivity.java
@@ -21,7 +21,7 @@
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
-import android.support.annotation.VisibleForTesting;
+import androidx.annotation.VisibleForTesting;
import net.openid.appauth.AuthorizationException.AuthorizationRequestErrors;
import net.openid.appauth.internal.Logger;
diff --git a/library/java/net/openid/appauth/AuthorizationRequest.java b/library/java/net/openid/appauth/AuthorizationRequest.java
index 0f133eb8..3ed5f315 100644
--- a/library/java/net/openid/appauth/AuthorizationRequest.java
+++ b/library/java/net/openid/appauth/AuthorizationRequest.java
@@ -22,12 +22,13 @@
import static net.openid.appauth.Preconditions.checkNullOrNotEmpty;
import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Base64;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
import net.openid.appauth.internal.UriUtil;
import org.json.JSONException;
diff --git a/library/java/net/openid/appauth/AuthorizationResponse.java b/library/java/net/openid/appauth/AuthorizationResponse.java
index 84aa6bd0..cae009cd 100644
--- a/library/java/net/openid/appauth/AuthorizationResponse.java
+++ b/library/java/net/openid/appauth/AuthorizationResponse.java
@@ -21,11 +21,12 @@
import android.content.Intent;
import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
import net.openid.appauth.internal.UriUtil;
import org.json.JSONException;
diff --git a/library/java/net/openid/appauth/AuthorizationService.java b/library/java/net/openid/appauth/AuthorizationService.java
index 3fd5c054..5f380631 100644
--- a/library/java/net/openid/appauth/AuthorizationService.java
+++ b/library/java/net/openid/appauth/AuthorizationService.java
@@ -17,6 +17,7 @@
import static net.openid.appauth.Preconditions.checkNotNull;
import android.annotation.TargetApi;
+import android.app.Activity;
import android.app.PendingIntent;
import android.content.ActivityNotFoundException;
import android.content.Context;
@@ -24,12 +25,13 @@
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
-import android.support.customtabs.CustomTabsIntent;
import android.text.TextUtils;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+import androidx.browser.customtabs.CustomTabsIntent;
+
import net.openid.appauth.AuthorizationException.GeneralErrors;
import net.openid.appauth.AuthorizationException.RegistrationRequestErrors;
import net.openid.appauth.AuthorizationException.TokenRequestErrors;
diff --git a/library/java/net/openid/appauth/AuthorizationServiceConfiguration.java b/library/java/net/openid/appauth/AuthorizationServiceConfiguration.java
index 5d2b0e9a..6ad8fccb 100644
--- a/library/java/net/openid/appauth/AuthorizationServiceConfiguration.java
+++ b/library/java/net/openid/appauth/AuthorizationServiceConfiguration.java
@@ -19,8 +19,8 @@
import android.net.Uri;
import android.os.AsyncTask;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import net.openid.appauth.AuthorizationException.GeneralErrors;
diff --git a/library/java/net/openid/appauth/AuthorizationServiceDiscovery.java b/library/java/net/openid/appauth/AuthorizationServiceDiscovery.java
index f74e0927..8a56ff6c 100644
--- a/library/java/net/openid/appauth/AuthorizationServiceDiscovery.java
+++ b/library/java/net/openid/appauth/AuthorizationServiceDiscovery.java
@@ -17,9 +17,9 @@
import static net.openid.appauth.Preconditions.checkNotNull;
import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
import net.openid.appauth.JsonUtil.BooleanField;
import net.openid.appauth.JsonUtil.Field;
diff --git a/library/java/net/openid/appauth/ClientAuthentication.java b/library/java/net/openid/appauth/ClientAuthentication.java
index 0928a713..c52d1607 100644
--- a/library/java/net/openid/appauth/ClientAuthentication.java
+++ b/library/java/net/openid/appauth/ClientAuthentication.java
@@ -14,7 +14,7 @@
package net.openid.appauth;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import java.util.Map;
diff --git a/library/java/net/openid/appauth/ClientSecretBasic.java b/library/java/net/openid/appauth/ClientSecretBasic.java
index 62ef0be9..debc0320 100644
--- a/library/java/net/openid/appauth/ClientSecretBasic.java
+++ b/library/java/net/openid/appauth/ClientSecretBasic.java
@@ -16,9 +16,10 @@
import static net.openid.appauth.Preconditions.checkNotNull;
-import android.support.annotation.NonNull;
import android.util.Base64;
+import androidx.annotation.NonNull;
+
import net.openid.appauth.internal.UriUtil;
import java.util.Collections;
diff --git a/library/java/net/openid/appauth/ClientSecretPost.java b/library/java/net/openid/appauth/ClientSecretPost.java
index be93a233..1a9eca7d 100644
--- a/library/java/net/openid/appauth/ClientSecretPost.java
+++ b/library/java/net/openid/appauth/ClientSecretPost.java
@@ -16,7 +16,7 @@
import static net.openid.appauth.Preconditions.checkNotNull;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import java.util.HashMap;
import java.util.Map;
diff --git a/library/java/net/openid/appauth/IdToken.java b/library/java/net/openid/appauth/IdToken.java
index ef9740b3..216f94fa 100644
--- a/library/java/net/openid/appauth/IdToken.java
+++ b/library/java/net/openid/appauth/IdToken.java
@@ -15,11 +15,12 @@
package net.openid.appauth;
import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.util.Base64;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
import net.openid.appauth.AuthorizationException.GeneralErrors;
import org.json.JSONException;
import org.json.JSONObject;
diff --git a/library/java/net/openid/appauth/JsonUtil.java b/library/java/net/openid/appauth/JsonUtil.java
index d167dcd3..dac69204 100644
--- a/library/java/net/openid/appauth/JsonUtil.java
+++ b/library/java/net/openid/appauth/JsonUtil.java
@@ -17,8 +17,8 @@
import static net.openid.appauth.Preconditions.checkNotNull;
import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import org.json.JSONArray;
import org.json.JSONException;
diff --git a/library/java/net/openid/appauth/NoClientAuthentication.java b/library/java/net/openid/appauth/NoClientAuthentication.java
index c5222b7d..97cb8a14 100644
--- a/library/java/net/openid/appauth/NoClientAuthentication.java
+++ b/library/java/net/openid/appauth/NoClientAuthentication.java
@@ -14,7 +14,7 @@
package net.openid.appauth;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import java.util.Collections;
import java.util.Map;
diff --git a/library/java/net/openid/appauth/Preconditions.java b/library/java/net/openid/appauth/Preconditions.java
index 1a8a5e71..faa916f4 100644
--- a/library/java/net/openid/appauth/Preconditions.java
+++ b/library/java/net/openid/appauth/Preconditions.java
@@ -14,10 +14,11 @@
package net.openid.appauth;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
import android.text.TextUtils;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
import java.util.Collection;
/**
diff --git a/library/java/net/openid/appauth/RegistrationRequest.java b/library/java/net/openid/appauth/RegistrationRequest.java
index d2c577fc..b37eff0e 100644
--- a/library/java/net/openid/appauth/RegistrationRequest.java
+++ b/library/java/net/openid/appauth/RegistrationRequest.java
@@ -21,8 +21,8 @@
import static net.openid.appauth.Preconditions.checkNotNull;
import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import org.json.JSONException;
import org.json.JSONObject;
diff --git a/library/java/net/openid/appauth/RegistrationResponse.java b/library/java/net/openid/appauth/RegistrationResponse.java
index 475d7c09..e7eb04fb 100644
--- a/library/java/net/openid/appauth/RegistrationResponse.java
+++ b/library/java/net/openid/appauth/RegistrationResponse.java
@@ -20,9 +20,9 @@
import static net.openid.appauth.Preconditions.checkNotNull;
import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
import org.json.JSONException;
import org.json.JSONObject;
diff --git a/library/java/net/openid/appauth/TokenRequest.java b/library/java/net/openid/appauth/TokenRequest.java
index e86fcb0b..18e62e2c 100644
--- a/library/java/net/openid/appauth/TokenRequest.java
+++ b/library/java/net/openid/appauth/TokenRequest.java
@@ -20,11 +20,12 @@
import static net.openid.appauth.Preconditions.checkNullOrNotEmpty;
import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
import org.json.JSONException;
import org.json.JSONObject;
diff --git a/library/java/net/openid/appauth/TokenResponse.java b/library/java/net/openid/appauth/TokenResponse.java
index 72a431c0..c00ba97d 100644
--- a/library/java/net/openid/appauth/TokenResponse.java
+++ b/library/java/net/openid/appauth/TokenResponse.java
@@ -20,11 +20,12 @@
import static net.openid.appauth.Preconditions.checkNotNull;
import static net.openid.appauth.Preconditions.checkNullOrNotEmpty;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
import org.json.JSONException;
import org.json.JSONObject;
diff --git a/library/java/net/openid/appauth/browser/AnyBrowserMatcher.java b/library/java/net/openid/appauth/browser/AnyBrowserMatcher.java
index 67177767..d3d96265 100644
--- a/library/java/net/openid/appauth/browser/AnyBrowserMatcher.java
+++ b/library/java/net/openid/appauth/browser/AnyBrowserMatcher.java
@@ -14,7 +14,7 @@
package net.openid.appauth.browser;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
/**
* Matches any browser.
diff --git a/library/java/net/openid/appauth/browser/BrowserBlacklist.java b/library/java/net/openid/appauth/browser/BrowserBlacklist.java
index ad2ce094..ff71ea56 100644
--- a/library/java/net/openid/appauth/browser/BrowserBlacklist.java
+++ b/library/java/net/openid/appauth/browser/BrowserBlacklist.java
@@ -14,7 +14,7 @@
package net.openid.appauth.browser;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import java.util.Arrays;
import java.util.List;
diff --git a/library/java/net/openid/appauth/browser/BrowserDescriptor.java b/library/java/net/openid/appauth/browser/BrowserDescriptor.java
index c280c308..6ca76697 100644
--- a/library/java/net/openid/appauth/browser/BrowserDescriptor.java
+++ b/library/java/net/openid/appauth/browser/BrowserDescriptor.java
@@ -16,9 +16,10 @@
import android.content.pm.PackageInfo;
import android.content.pm.Signature;
-import android.support.annotation.NonNull;
import android.util.Base64;
+import androidx.annotation.NonNull;
+
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashSet;
diff --git a/library/java/net/openid/appauth/browser/BrowserMatcher.java b/library/java/net/openid/appauth/browser/BrowserMatcher.java
index eb5acd20..d4a6d113 100644
--- a/library/java/net/openid/appauth/browser/BrowserMatcher.java
+++ b/library/java/net/openid/appauth/browser/BrowserMatcher.java
@@ -14,7 +14,7 @@
package net.openid.appauth.browser;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
/**
* Determines whether a {@link BrowserDescriptor} matches some set of criteria.
diff --git a/library/java/net/openid/appauth/browser/BrowserSelector.java b/library/java/net/openid/appauth/browser/BrowserSelector.java
index 5f2862fb..75da1ca5 100644
--- a/library/java/net/openid/appauth/browser/BrowserSelector.java
+++ b/library/java/net/openid/appauth/browser/BrowserSelector.java
@@ -24,10 +24,10 @@
import android.net.Uri;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
-import android.support.customtabs.CustomTabsService;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+import androidx.browser.customtabs.CustomTabsService;
import java.util.ArrayList;
import java.util.Iterator;
@@ -182,7 +182,8 @@ private static boolean hasWarmupService(PackageManager pm, String packageName) {
private static boolean isFullBrowser(ResolveInfo resolveInfo) {
// The filter must match ACTION_VIEW, CATEGORY_BROWSEABLE, and at least one scheme,
if (!resolveInfo.filter.hasAction(Intent.ACTION_VIEW)
- || !resolveInfo.filter.hasCategory(Intent.CATEGORY_BROWSABLE)
+ || !(resolveInfo.filter.hasCategory(Intent.CATEGORY_BROWSABLE)
+ || (resolveInfo.filter.hasCategory(Intent.CATEGORY_APP_BROWSER)))
|| resolveInfo.filter.schemesIterator() == null) {
return false;
}
diff --git a/library/java/net/openid/appauth/browser/BrowserWhitelist.java b/library/java/net/openid/appauth/browser/BrowserWhitelist.java
index 69d41d01..e11cff0f 100644
--- a/library/java/net/openid/appauth/browser/BrowserWhitelist.java
+++ b/library/java/net/openid/appauth/browser/BrowserWhitelist.java
@@ -14,7 +14,7 @@
package net.openid.appauth.browser;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import java.util.Arrays;
import java.util.List;
diff --git a/library/java/net/openid/appauth/browser/Browsers.java b/library/java/net/openid/appauth/browser/Browsers.java
index 4e0e8953..3f70101e 100644
--- a/library/java/net/openid/appauth/browser/Browsers.java
+++ b/library/java/net/openid/appauth/browser/Browsers.java
@@ -14,7 +14,7 @@
package net.openid.appauth.browser;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import java.util.Collections;
import java.util.Set;
diff --git a/library/java/net/openid/appauth/browser/CustomTabManager.java b/library/java/net/openid/appauth/browser/CustomTabManager.java
index c0074f1d..28573c54 100644
--- a/library/java/net/openid/appauth/browser/CustomTabManager.java
+++ b/library/java/net/openid/appauth/browser/CustomTabManager.java
@@ -18,14 +18,14 @@
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.WorkerThread;
-import android.support.customtabs.CustomTabsCallback;
-import android.support.customtabs.CustomTabsClient;
-import android.support.customtabs.CustomTabsIntent;
-import android.support.customtabs.CustomTabsServiceConnection;
-import android.support.customtabs.CustomTabsSession;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.WorkerThread;
+import androidx.browser.customtabs.CustomTabsCallback;
+import androidx.browser.customtabs.CustomTabsClient;
+import androidx.browser.customtabs.CustomTabsIntent;
+import androidx.browser.customtabs.CustomTabsServiceConnection;
+import androidx.browser.customtabs.CustomTabsSession;
import net.openid.appauth.internal.Logger;
import net.openid.appauth.internal.UriUtil;
@@ -103,7 +103,7 @@ private void setClient(@Nullable CustomTabsClient client) {
}
/**
- * Creates a {@link android.support.customtabs.CustomTabsIntent.Builder custom tab builder},
+ * Creates a {@link androidx.browser.customtabs.CustomTabsIntent.Builder custom tab builder},
* with an optional list of optional URIs that may be requested. The URI list
* should be ordered such that the most likely URI to be requested is first. If the selected
* browser does not support custom tabs, then the URI list has no effect.
@@ -129,7 +129,7 @@ public synchronized void dispose() {
}
/**
- * Creates a {@link android.support.customtabs.CustomTabsSession custom tab session} for
+ * Creates a {@link androidx.browser.customtabs.CustomTabsSession custom tab session} for
* use with a custom tab intent, with optional callbacks and optional list of URIs that may
* be requested. The URI list should be ordered such that the most likely URI to be requested
* is first. If no custom tab supporting browser is available, this will return {@code null}.
diff --git a/library/java/net/openid/appauth/browser/DelimitedVersion.java b/library/java/net/openid/appauth/browser/DelimitedVersion.java
index dbec5d66..3bf9ace1 100644
--- a/library/java/net/openid/appauth/browser/DelimitedVersion.java
+++ b/library/java/net/openid/appauth/browser/DelimitedVersion.java
@@ -14,7 +14,7 @@
package net.openid.appauth.browser;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
/**
* Represents a delimited version number for an application. This can parse common version number
diff --git a/library/java/net/openid/appauth/browser/ExactBrowserMatcher.java b/library/java/net/openid/appauth/browser/ExactBrowserMatcher.java
index c3ca2605..c4c1a4e3 100644
--- a/library/java/net/openid/appauth/browser/ExactBrowserMatcher.java
+++ b/library/java/net/openid/appauth/browser/ExactBrowserMatcher.java
@@ -14,7 +14,7 @@
package net.openid.appauth.browser;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
/**
* Matches only the specified browser.
diff --git a/library/java/net/openid/appauth/browser/VersionRange.java b/library/java/net/openid/appauth/browser/VersionRange.java
index 09546433..b95015c3 100644
--- a/library/java/net/openid/appauth/browser/VersionRange.java
+++ b/library/java/net/openid/appauth/browser/VersionRange.java
@@ -14,8 +14,8 @@
package net.openid.appauth.browser;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
/**
* A browser filter which matches when a browser falls into a version range. Versions are
diff --git a/library/java/net/openid/appauth/browser/VersionedBrowserMatcher.java b/library/java/net/openid/appauth/browser/VersionedBrowserMatcher.java
index 8c8c0628..3daa7dd2 100644
--- a/library/java/net/openid/appauth/browser/VersionedBrowserMatcher.java
+++ b/library/java/net/openid/appauth/browser/VersionedBrowserMatcher.java
@@ -14,7 +14,7 @@
package net.openid.appauth.browser;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import java.util.Collections;
import java.util.Set;
diff --git a/library/java/net/openid/appauth/connectivity/ConnectionBuilder.java b/library/java/net/openid/appauth/connectivity/ConnectionBuilder.java
index 28125ca3..33ac8985 100644
--- a/library/java/net/openid/appauth/connectivity/ConnectionBuilder.java
+++ b/library/java/net/openid/appauth/connectivity/ConnectionBuilder.java
@@ -15,7 +15,7 @@
package net.openid.appauth.connectivity;
import android.net.Uri;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import java.io.IOException;
import java.net.HttpURLConnection;
diff --git a/library/java/net/openid/appauth/connectivity/DefaultConnectionBuilder.java b/library/java/net/openid/appauth/connectivity/DefaultConnectionBuilder.java
index 9dba97f9..6f8324a1 100644
--- a/library/java/net/openid/appauth/connectivity/DefaultConnectionBuilder.java
+++ b/library/java/net/openid/appauth/connectivity/DefaultConnectionBuilder.java
@@ -15,7 +15,7 @@
package net.openid.appauth.connectivity;
import android.net.Uri;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
import net.openid.appauth.Preconditions;
diff --git a/library/java/net/openid/appauth/internal/Logger.java b/library/java/net/openid/appauth/internal/Logger.java
index fc879edb..99068878 100644
--- a/library/java/net/openid/appauth/internal/Logger.java
+++ b/library/java/net/openid/appauth/internal/Logger.java
@@ -16,11 +16,12 @@
import static net.openid.appauth.Preconditions.checkNotNull;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
/**
* Convenience wrapper around {@link android.util.Log}, which evaluates the current log level of
* the logging tag once and uses this to determine whether logging should proceed. This minimizes
diff --git a/library/java/net/openid/appauth/internal/UriUtil.java b/library/java/net/openid/appauth/internal/UriUtil.java
index 84b9be65..fb7bf78d 100644
--- a/library/java/net/openid/appauth/internal/UriUtil.java
+++ b/library/java/net/openid/appauth/internal/UriUtil.java
@@ -16,12 +16,13 @@
import android.net.Uri;
import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.customtabs.CustomTabsService;
-import android.support.v4.util.Pair;
import android.text.TextUtils;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.browser.customtabs.CustomTabsService;
+import androidx.core.util.Pair;
+
import net.openid.appauth.Preconditions;
import java.io.UnsupportedEncodingException;
diff --git a/library/javatests/net/openid/appauth/AuthorizationServiceConfigurationTest.java b/library/javatests/net/openid/appauth/AuthorizationServiceConfigurationTest.java
index e3eb10de..e4e91eb2 100644
--- a/library/javatests/net/openid/appauth/AuthorizationServiceConfigurationTest.java
+++ b/library/javatests/net/openid/appauth/AuthorizationServiceConfigurationTest.java
@@ -23,7 +23,7 @@
import static org.mockito.Mockito.when;
import android.net.Uri;
-import android.support.annotation.Nullable;
+import androidx.annotation.Nullable;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
diff --git a/library/javatests/net/openid/appauth/AuthorizationServiceTest.java b/library/javatests/net/openid/appauth/AuthorizationServiceTest.java
index 078c5046..779ad541 100644
--- a/library/javatests/net/openid/appauth/AuthorizationServiceTest.java
+++ b/library/javatests/net/openid/appauth/AuthorizationServiceTest.java
@@ -19,11 +19,11 @@
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
-import android.support.annotation.ColorInt;
-import android.support.annotation.Nullable;
-import android.support.customtabs.CustomTabsClient;
-import android.support.customtabs.CustomTabsIntent;
-import android.support.customtabs.CustomTabsServiceConnection;
+import androidx.annotation.ColorInt;
+import androidx.annotation.Nullable;
+import androidx.browser.customtabs.CustomTabsClient;
+import androidx.browser.customtabs.CustomTabsIntent;
+import androidx.browser.customtabs.CustomTabsServiceConnection;
import net.openid.appauth.AppAuthConfiguration.Builder;
import net.openid.appauth.AuthorizationException.GeneralErrors;
@@ -53,8 +53,8 @@
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
-import static android.support.customtabs.CustomTabsIntent.EXTRA_TITLE_VISIBILITY_STATE;
-import static android.support.customtabs.CustomTabsIntent.EXTRA_TOOLBAR_COLOR;
+import static androidx.browser.customtabs.CustomTabsIntent.EXTRA_TITLE_VISIBILITY_STATE;
+import static androidx.browser.customtabs.CustomTabsIntent.EXTRA_TOOLBAR_COLOR;
import static net.openid.appauth.AuthorizationManagementActivity.KEY_AUTH_INTENT;
import static net.openid.appauth.AuthorizationManagementActivity.KEY_AUTH_REQUEST;
import static net.openid.appauth.AuthorizationManagementActivity.KEY_CANCEL_INTENT;
diff --git a/library/javatests/net/openid/appauth/IdTokenTest.java b/library/javatests/net/openid/appauth/IdTokenTest.java
index 3579bbb7..f19bcae6 100644
--- a/library/javatests/net/openid/appauth/IdTokenTest.java
+++ b/library/javatests/net/openid/appauth/IdTokenTest.java
@@ -1,6 +1,6 @@
package net.openid.appauth;
-import android.support.annotation.Nullable;
+import androidx.annotation.Nullable;
import android.util.Base64;
import java.util.Arrays;
diff --git a/library/javatests/net/openid/appauth/TokenResponseTest.java b/library/javatests/net/openid/appauth/TokenResponseTest.java
index fa6b7637..ec18c9d1 100644
--- a/library/javatests/net/openid/appauth/TokenResponseTest.java
+++ b/library/javatests/net/openid/appauth/TokenResponseTest.java
@@ -24,7 +24,6 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
-import java.util.Set;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
@@ -43,9 +42,6 @@
import static net.openid.appauth.TokenResponse.KEY_SCOPE;
import static net.openid.appauth.TokenResponse.KEY_TOKEN_TYPE;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.isEmptyOrNullString;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk=16)
diff --git a/library/javatests/net/openid/appauth/browser/BrowserSelectorTest.java b/library/javatests/net/openid/appauth/browser/BrowserSelectorTest.java
index 54fc9bb9..d89a5b6d 100644
--- a/library/javatests/net/openid/appauth/browser/BrowserSelectorTest.java
+++ b/library/javatests/net/openid/appauth/browser/BrowserSelectorTest.java
@@ -33,6 +33,7 @@
import android.content.pm.Signature;
import android.text.TextUtils;
import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
@@ -408,7 +409,7 @@ public TestBrowserBuilder addAuthority(String authority) {
}
public TestBrowserBuilder addSignature(String signature) {
- mSignatures.add(signature.getBytes(Charset.forName("UTF-8")));
+ mSignatures.add(signature.getBytes(StandardCharsets.UTF_8));
return this;
}
diff --git a/library/javatests/net/openid/appauth/browser/CustomTabManagerTest.java b/library/javatests/net/openid/appauth/browser/CustomTabManagerTest.java
index fbad9000..02b3ce62 100644
--- a/library/javatests/net/openid/appauth/browser/CustomTabManagerTest.java
+++ b/library/javatests/net/openid/appauth/browser/CustomTabManagerTest.java
@@ -8,11 +8,11 @@
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
-import android.support.customtabs.CustomTabsCallback;
-import android.support.customtabs.CustomTabsClient;
-import android.support.customtabs.CustomTabsService;
-import android.support.customtabs.CustomTabsServiceConnection;
-import android.support.customtabs.CustomTabsSession;
+import androidx.browser.customtabs.CustomTabsCallback;
+import androidx.browser.customtabs.CustomTabsClient;
+import androidx.browser.customtabs.CustomTabsService;
+import androidx.browser.customtabs.CustomTabsServiceConnection;
+import androidx.browser.customtabs.CustomTabsSession;
import java.util.List;
import net.openid.appauth.BuildConfig;
import org.junit.Before;
diff --git a/library/javatests/net/openid/appauth/browser/VersionedBrowserMatcherTest.java b/library/javatests/net/openid/appauth/browser/VersionedBrowserMatcherTest.java
index de14d195..29d7441f 100644
--- a/library/javatests/net/openid/appauth/browser/VersionedBrowserMatcherTest.java
+++ b/library/javatests/net/openid/appauth/browser/VersionedBrowserMatcherTest.java
@@ -18,7 +18,7 @@
import java.util.Collections;
import java.util.HashSet;
-import junit.runner.Version;
+
import net.openid.appauth.BuildConfig;
import org.junit.Before;
import org.junit.Test;
diff --git a/library/javatests/net/openid/appauth/internal/UriUtilTest.java b/library/javatests/net/openid/appauth/internal/UriUtilTest.java
index 0dfe2300..61861aeb 100644
--- a/library/javatests/net/openid/appauth/internal/UriUtilTest.java
+++ b/library/javatests/net/openid/appauth/internal/UriUtilTest.java
@@ -17,7 +17,7 @@
import android.net.Uri;
import android.net.UrlQuerySanitizer;
import android.os.Bundle;
-import android.support.customtabs.CustomTabsService;
+import androidx.browser.customtabs.CustomTabsService;
import net.openid.appauth.BuildConfig;
import net.openid.appauth.internal.UriUtil;
diff --git a/library/javatests/resources/mockito-extensions/org.mockito.plugins.MockMaker b/library/javatests/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 00000000..1f0955d4
--- /dev/null
+++ b/library/javatests/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1 @@
+mock-maker-inline