From 9e20ab020e0358027f75128b2431276ff7a76aa1 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Wed, 21 Aug 2019 22:16:09 +0200 Subject: [PATCH 01/20] Upgrade gradle a little This is the last version which doesn't complain about 'variant.getJavaCompile()' being obsolete. This should be addressed when upgrading the gradle dependencies further. --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index f5a9444c..f49ed261 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.4' + classpath 'com.android.tools.build:gradle:3.2.1' } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 81cad747..946d06f1 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-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip From 0bcf6388e593dd82b1182c8e5c7726b947d74994 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Wed, 21 Aug 2019 22:17:19 +0200 Subject: [PATCH 02/20] Update commented out code --- stetho-js-rhino/README.md | 2 +- stetho-sample/build.gradle | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/stetho-js-rhino/README.md b/stetho-js-rhino/README.md index c2c07608..2b3ef9ab 100644 --- a/stetho-js-rhino/README.md +++ b/stetho-js-rhino/README.md @@ -7,7 +7,7 @@ This [Stetho](https://facebook.github.io/stetho) plugin adds a JavaScript consol ### Download Download [the latest JARs](https://github.com/facebook/stetho/releases/latest) or grab via Gradle: ```groovy -compile 'com.facebook.stetho:stetho-js-rhino:1.4.2' +implementation 'com.facebook.stetho:stetho-js-rhino:1.4.2' ``` or Maven: ```xml diff --git a/stetho-sample/build.gradle b/stetho-sample/build.gradle index 25a3f966..0fd33efc 100644 --- a/stetho-sample/build.gradle +++ b/stetho-sample/build.gradle @@ -43,8 +43,8 @@ dependencies { // way to express this is: // // dependencies { - // debugCompile 'com.facebook.stetho:stetho:' - // compile 'com.facebook.stetho:stetho-urlconnection:' + // debugImplementation 'com.facebook.stetho:stetho:' + // implementation 'com.facebook.stetho:stetho-urlconnection:' // } // // For Stetho developers, to verify locally that things are working @@ -54,7 +54,7 @@ dependencies { // ./gradlew installArchives // // Then uncomment the Maven style dependency and comment the project one: - //releaseCompile "com.facebook.stetho:stetho-urlconnection:${VERSION_NAME}" + //releaseImplementation "com.facebook.stetho:stetho-urlconnection:${VERSION_NAME}" releaseImplementation project(':stetho-urlconnection') implementation 'com.google.code.findbugs:jsr305:2.0.1' From 6771eba5f11cc6a5e0fac454d8067405a8714363 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Wed, 21 Aug 2019 22:21:25 +0200 Subject: [PATCH 03/20] Update minSdkVersion to 14 The new AndroidX dependencies have a minSdkVersion of 14, so Stetho's minSdkVersion has to be updated as well. --- stetho-js-rhino/build.gradle | 2 +- stetho-okhttp/build.gradle | 2 +- stetho-okhttp3/build.gradle | 2 +- stetho-sample/build.gradle | 2 +- stetho-timber/build.gradle | 2 +- stetho-urlconnection/build.gradle | 2 +- stetho/build.gradle | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/stetho-js-rhino/build.gradle b/stetho-js-rhino/build.gradle index 7a4d3c40..0ecf4e09 100644 --- a/stetho-js-rhino/build.gradle +++ b/stetho-js-rhino/build.gradle @@ -4,7 +4,7 @@ android { compileSdkVersion rootProject.ext.compileSdkVersion defaultConfig { - minSdkVersion 9 + minSdkVersion 14 targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" diff --git a/stetho-okhttp/build.gradle b/stetho-okhttp/build.gradle index 87050b99..48dc671c 100644 --- a/stetho-okhttp/build.gradle +++ b/stetho-okhttp/build.gradle @@ -4,7 +4,7 @@ android { compileSdkVersion rootProject.ext.compileSdkVersion defaultConfig { - minSdkVersion 9 + minSdkVersion 14 targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" diff --git a/stetho-okhttp3/build.gradle b/stetho-okhttp3/build.gradle index f9ab526c..9e80b93a 100644 --- a/stetho-okhttp3/build.gradle +++ b/stetho-okhttp3/build.gradle @@ -4,7 +4,7 @@ android { compileSdkVersion rootProject.ext.compileSdkVersion defaultConfig { - minSdkVersion 9 + minSdkVersion 14 targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" diff --git a/stetho-sample/build.gradle b/stetho-sample/build.gradle index 0fd33efc..1a7e3b4e 100644 --- a/stetho-sample/build.gradle +++ b/stetho-sample/build.gradle @@ -10,7 +10,7 @@ android { defaultConfig { applicationId "com.facebook.stetho.sample" - minSdkVersion 11 + minSdkVersion 14 targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" diff --git a/stetho-timber/build.gradle b/stetho-timber/build.gradle index eb43d25e..911c8940 100644 --- a/stetho-timber/build.gradle +++ b/stetho-timber/build.gradle @@ -4,7 +4,7 @@ android { compileSdkVersion rootProject.ext.compileSdkVersion defaultConfig { - minSdkVersion 11 + minSdkVersion 14 targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" diff --git a/stetho-urlconnection/build.gradle b/stetho-urlconnection/build.gradle index bc3941d4..b4963881 100644 --- a/stetho-urlconnection/build.gradle +++ b/stetho-urlconnection/build.gradle @@ -4,7 +4,7 @@ android { compileSdkVersion rootProject.ext.compileSdkVersion defaultConfig { - minSdkVersion 9 + minSdkVersion 14 targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" diff --git a/stetho/build.gradle b/stetho/build.gradle index 329ea9d8..db34217d 100644 --- a/stetho/build.gradle +++ b/stetho/build.gradle @@ -4,7 +4,7 @@ android { compileSdkVersion rootProject.ext.compileSdkVersion defaultConfig { - minSdkVersion 9 + minSdkVersion 14 targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 versionName "1.0" From 35ef0e46e147b441846c3bc4c33bd13993ec92ab Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Wed, 21 Aug 2019 22:23:04 +0200 Subject: [PATCH 04/20] Use AndroidX dependencies --- stetho/build.gradle | 4 ++-- stetho/gradle.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/stetho/build.gradle b/stetho/build.gradle index db34217d..077499d9 100644 --- a/stetho/build.gradle +++ b/stetho/build.gradle @@ -16,9 +16,9 @@ android { dependencies { implementation 'commons-cli:commons-cli:1.2' implementation 'com.google.code.findbugs:jsr305:2.0.1' - implementation 'com.android.support:support-annotations:28.0.0' + implementation 'androidx.annotation:annotation:1.1.0' - implementation 'com.android.support:appcompat-v7:23.0.1' // optional + implementation 'androidx.appcompat:appcompat:1.0.2' // optional testImplementation 'junit:junit:4.12' testImplementation('org.robolectric:robolectric:2.4') { diff --git a/stetho/gradle.properties b/stetho/gradle.properties index a181a7be..41d5493a 100644 --- a/stetho/gradle.properties +++ b/stetho/gradle.properties @@ -1,4 +1,4 @@ POM_NAME=Stetho POM_ARTIFACT_ID=stetho -POM_OPTIONAL_DEPS=com.android.support:appcompat-v7 +POM_OPTIONAL_DEPS=androidx.appcompat:appcompat POM_PACKAGING=aar From 806d12bb4861bd767e3b2464f3e5565dc5433dbd Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Wed, 21 Aug 2019 22:25:12 +0200 Subject: [PATCH 05/20] Update dependencies a little I've only updated to the latest minor version of that same release. The latest proper version of that dependency probably works just as well, but this PR is focused on AndroidX. --- stetho-js-rhino/build.gradle | 2 +- stetho-okhttp/build.gradle | 10 +++++----- stetho-okhttp3/build.gradle | 10 +++++----- stetho-sample/build.gradle | 2 +- stetho-urlconnection/build.gradle | 2 +- stetho/build.gradle | 6 +++--- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/stetho-js-rhino/build.gradle b/stetho-js-rhino/build.gradle index 0ecf4e09..9f86935d 100644 --- a/stetho-js-rhino/build.gradle +++ b/stetho-js-rhino/build.gradle @@ -19,7 +19,7 @@ android { dependencies { implementation project(':stetho') - implementation 'com.google.code.findbugs:jsr305:2.0.1' + implementation 'com.google.code.findbugs:jsr305:2.0.3' implementation 'org.mozilla:rhino:1.7.6' implementation 'com.android.support:support-annotations:28.0.0' diff --git a/stetho-okhttp/build.gradle b/stetho-okhttp/build.gradle index 48dc671c..1e635eca 100644 --- a/stetho-okhttp/build.gradle +++ b/stetho-okhttp/build.gradle @@ -21,7 +21,7 @@ android { dependencies { implementation project(':stetho') - implementation 'com.google.code.findbugs:jsr305:2.0.1' + implementation 'com.google.code.findbugs:jsr305:2.0.3' implementation 'com.squareup.okhttp:okhttp:2.7.2' testImplementation 'junit:junit:4.12' @@ -29,12 +29,12 @@ dependencies { exclude module: 'commons-logging' exclude module: 'httpclient' } - testImplementation 'org.powermock:powermock-api-mockito:1.6.1' - testImplementation 'org.powermock:powermock-module-junit4:1.6.1' + testImplementation 'org.powermock:powermock-api-mockito:1.6.6' + testImplementation 'org.powermock:powermock-module-junit4:1.6.6' // Needed for Robolectric and PowerMock to be combined in a single test. - testImplementation 'org.powermock:powermock-module-junit4-rule:1.6.1' - testImplementation 'org.powermock:powermock-classloading-xstream:1.6.1' + testImplementation 'org.powermock:powermock-module-junit4-rule:1.6.6' + testImplementation 'org.powermock:powermock-classloading-xstream:1.6.6' testImplementation 'com.squareup.okhttp:mockwebserver:2.7.2' } diff --git a/stetho-okhttp3/build.gradle b/stetho-okhttp3/build.gradle index 9e80b93a..653e073b 100644 --- a/stetho-okhttp3/build.gradle +++ b/stetho-okhttp3/build.gradle @@ -21,7 +21,7 @@ android { dependencies { implementation project(':stetho') - implementation 'com.google.code.findbugs:jsr305:2.0.1' + implementation 'com.google.code.findbugs:jsr305:2.0.3' implementation 'com.squareup.okhttp3:okhttp:3.4.2' testImplementation 'junit:junit:4.12' @@ -29,12 +29,12 @@ dependencies { exclude module: 'commons-logging' exclude module: 'httpclient' } - testImplementation 'org.powermock:powermock-api-mockito:1.6.1' - testImplementation 'org.powermock:powermock-module-junit4:1.6.1' + testImplementation 'org.powermock:powermock-api-mockito:1.6.6' + testImplementation 'org.powermock:powermock-module-junit4:1.6.6' // Needed for Robolectric and PowerMock to be combined in a single test. - testImplementation 'org.powermock:powermock-module-junit4-rule:1.6.1' - testImplementation 'org.powermock:powermock-classloading-xstream:1.6.1' + testImplementation 'org.powermock:powermock-module-junit4-rule:1.6.6' + testImplementation 'org.powermock:powermock-classloading-xstream:1.6.6' testImplementation 'com.squareup.okhttp3:mockwebserver:3.4.2' } diff --git a/stetho-sample/build.gradle b/stetho-sample/build.gradle index 1a7e3b4e..5056ae45 100644 --- a/stetho-sample/build.gradle +++ b/stetho-sample/build.gradle @@ -57,5 +57,5 @@ dependencies { //releaseImplementation "com.facebook.stetho:stetho-urlconnection:${VERSION_NAME}" releaseImplementation project(':stetho-urlconnection') - implementation 'com.google.code.findbugs:jsr305:2.0.1' + implementation 'com.google.code.findbugs:jsr305:2.0.3' } diff --git a/stetho-urlconnection/build.gradle b/stetho-urlconnection/build.gradle index b4963881..05bfdc7d 100644 --- a/stetho-urlconnection/build.gradle +++ b/stetho-urlconnection/build.gradle @@ -13,7 +13,7 @@ android { dependencies { implementation project(':stetho') - implementation 'com.google.code.findbugs:jsr305:2.0.1' + implementation 'com.google.code.findbugs:jsr305:2.0.3' } apply from: rootProject.file('release.gradle') diff --git a/stetho/build.gradle b/stetho/build.gradle index 077499d9..1159f3a4 100644 --- a/stetho/build.gradle +++ b/stetho/build.gradle @@ -15,7 +15,7 @@ android { dependencies { implementation 'commons-cli:commons-cli:1.2' - implementation 'com.google.code.findbugs:jsr305:2.0.1' + implementation 'com.google.code.findbugs:jsr305:2.0.3' implementation 'androidx.annotation:annotation:1.1.0' implementation 'androidx.appcompat:appcompat:1.0.2' // optional @@ -25,8 +25,8 @@ dependencies { exclude module: 'commons-logging' exclude module: 'httpclient' } - testImplementation 'org.powermock:powermock-api-mockito:1.6.1' - testImplementation 'org.powermock:powermock-module-junit4:1.6.1' + testImplementation 'org.powermock:powermock-api-mockito:1.6.6' + testImplementation 'org.powermock:powermock-module-junit4:1.6.6' } apply from: rootProject.file('release.gradle') From b5f43c662462af94b3c31b10e762b86e7ee5907e Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Wed, 21 Aug 2019 22:48:43 +0200 Subject: [PATCH 06/20] Use AndroidX imports --- stetho-js-rhino/build.gradle | 2 +- .../main/java/com/facebook/stetho/rhino/JsFormat.java | 6 +++--- .../java/com/facebook/stetho/rhino/JsRuntimeRepl.java | 10 +++++++--- .../stetho/rhino/JsRuntimeReplFactoryBuilder.java | 5 ++++- .../stetho/common/android/AccessibilityUtil.java | 7 ++++--- .../common/android/FragmentCompatSupportLib.java | 9 +++++---- .../facebook/stetho/common/android/ViewGroupUtil.java | 6 ------ .../inspector/database/SQLiteDatabaseCompat.java | 3 ++- .../elements/android/AccessibilityNodeInfoWrapper.java | 7 +++---- .../android/window/WindowRootViewCompactV16Impl.java | 3 ++- .../android/window/WindowRootViewCompactV18Impl.java | 3 ++- .../android/window/WindowRootViewCompactV19Impl.java | 3 ++- .../elements/android/window/WindowRootViewCompat.java | 3 ++- .../stetho/inspector/helper/IntegerFormatter.java | 3 ++- .../stetho/inspector/protocol/module/Page.java | 5 ++++- .../runtime/RhinoDetectingRuntimeReplFactory.java | 4 +++- .../facebook/stetho/server/http/HandlerRegistry.java | 4 ++-- .../facebook/stetho/server/http/LightHttpMessage.java | 4 ++-- .../facebook/stetho/server/http/LightHttpServer.java | 5 +++-- 19 files changed, 53 insertions(+), 39 deletions(-) diff --git a/stetho-js-rhino/build.gradle b/stetho-js-rhino/build.gradle index 9f86935d..f5912415 100644 --- a/stetho-js-rhino/build.gradle +++ b/stetho-js-rhino/build.gradle @@ -21,7 +21,7 @@ dependencies { implementation project(':stetho') implementation 'com.google.code.findbugs:jsr305:2.0.3' implementation 'org.mozilla:rhino:1.7.6' - implementation 'com.android.support:support-annotations:28.0.0' + implementation 'androidx.annotation:annotation:1.1.0' testImplementation 'junit:junit:4.12' } diff --git a/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsFormat.java b/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsFormat.java index 83a82ff5..70799ac7 100644 --- a/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsFormat.java +++ b/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsFormat.java @@ -7,12 +7,12 @@ package com.facebook.stetho.rhino; -import android.support.annotation.NonNull; - import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; +import androidx.annotation.NonNull; + /** *

Formatter that tries to mimic

console.log()
's format as close as possible.

* @@ -124,7 +124,7 @@ public CharSequence subSequence(int start, int end) { } // Analyze the format. We don't have named captures in android yet so we will inspect - // the groups. They are each optional but we can find out which one is whic easily. + // the groups. They are each optional but we can find out which one is which easily. // Remember that we want to parse: %[argument_index$][flags][width][.precision]conversion // // - `index` ends with '$' diff --git a/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsRuntimeRepl.java b/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsRuntimeRepl.java index 4dbe33dc..b8512ee7 100644 --- a/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsRuntimeRepl.java +++ b/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsRuntimeRepl.java @@ -7,12 +7,15 @@ package com.facebook.stetho.rhino; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; + import com.facebook.stetho.inspector.console.RuntimeRepl; + import org.mozilla.javascript.Context; import org.mozilla.javascript.ScriptableObject; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + class JsRuntimeRepl implements RuntimeRepl { private final @NonNull ScriptableObject mJsScope; @@ -22,7 +25,8 @@ class JsRuntimeRepl implements RuntimeRepl { } @Override - public @Nullable Object evaluate(@NonNull String expression) throws Throwable { + public @Nullable + Object evaluate(@NonNull String expression) throws Throwable { Object result; final Context jsContext = enterJsContext(); try { diff --git a/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsRuntimeReplFactoryBuilder.java b/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsRuntimeReplFactoryBuilder.java index 655677f6..5af647d4 100644 --- a/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsRuntimeReplFactoryBuilder.java +++ b/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsRuntimeReplFactoryBuilder.java @@ -7,13 +7,14 @@ package com.facebook.stetho.rhino; -import android.support.annotation.NonNull; import android.util.Log; + import com.facebook.stetho.common.LogUtil; import com.facebook.stetho.inspector.console.CLog; import com.facebook.stetho.inspector.console.RuntimeRepl; import com.facebook.stetho.inspector.console.RuntimeReplFactory; import com.facebook.stetho.inspector.protocol.module.Console; + import org.mozilla.javascript.Context; import org.mozilla.javascript.Function; import org.mozilla.javascript.ImporterTopLevel; @@ -26,6 +27,8 @@ import java.util.Map; import java.util.Set; +import androidx.annotation.NonNull; + /** *

Builder used to setup the javascript runtime to be used by stetho.

* diff --git a/stetho/src/main/java/com/facebook/stetho/common/android/AccessibilityUtil.java b/stetho/src/main/java/com/facebook/stetho/common/android/AccessibilityUtil.java index ef86afe2..e4989ae2 100644 --- a/stetho/src/main/java/com/facebook/stetho/common/android/AccessibilityUtil.java +++ b/stetho/src/main/java/com/facebook/stetho/common/android/AccessibilityUtil.java @@ -7,9 +7,6 @@ package com.facebook.stetho.common.android; -import android.support.annotation.Nullable; -import android.support.v4.view.ViewCompat; -import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; @@ -21,6 +18,10 @@ import java.util.List; +import androidx.annotation.Nullable; +import androidx.core.view.ViewCompat; +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; + /** * This class provides utility methods for determining certain accessibility properties of * {@link View}s and {@link AccessibilityNodeInfoCompat}s. It is porting some of the checks from diff --git a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatSupportLib.java b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatSupportLib.java index 589ddda3..979ebebc 100644 --- a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatSupportLib.java +++ b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatSupportLib.java @@ -9,14 +9,15 @@ import android.app.Dialog; import android.content.res.Resources; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentActivity; -import android.support.v4.app.FragmentManager; import android.view.View; import javax.annotation.Nullable; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; + final class FragmentCompatSupportLib extends FragmentCompat { private static final FragmentAccessorSupportLib sFragmentAccessor = diff --git a/stetho/src/main/java/com/facebook/stetho/common/android/ViewGroupUtil.java b/stetho/src/main/java/com/facebook/stetho/common/android/ViewGroupUtil.java index aeb9efd3..77f246ac 100644 --- a/stetho/src/main/java/com/facebook/stetho/common/android/ViewGroupUtil.java +++ b/stetho/src/main/java/com/facebook/stetho/common/android/ViewGroupUtil.java @@ -10,12 +10,6 @@ import android.view.View; import android.view.ViewGroup; -import com.facebook.stetho.common.ReflectionUtil; - -import java.lang.reflect.Field; - -import javax.annotation.Nullable; - public final class ViewGroupUtil { private ViewGroupUtil() { } diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/database/SQLiteDatabaseCompat.java b/stetho/src/main/java/com/facebook/stetho/inspector/database/SQLiteDatabaseCompat.java index 5634083f..9019e525 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/database/SQLiteDatabaseCompat.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/database/SQLiteDatabaseCompat.java @@ -10,7 +10,8 @@ import android.annotation.TargetApi; import android.database.sqlite.SQLiteDatabase; import android.os.Build; -import android.support.annotation.IntDef; + +import androidx.annotation.IntDef; /** * Compatibility layer which supports opening databases with WAL and foreign key support diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/AccessibilityNodeInfoWrapper.java b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/AccessibilityNodeInfoWrapper.java index 95c45aad..eac7c2a6 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/AccessibilityNodeInfoWrapper.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/AccessibilityNodeInfoWrapper.java @@ -7,10 +7,6 @@ package com.facebook.stetho.inspector.elements.android; -import android.support.annotation.Nullable; -import android.support.v4.view.ViewCompat; -import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat; -import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; @@ -19,6 +15,9 @@ import com.facebook.stetho.common.android.AccessibilityUtil; +import androidx.core.view.ViewCompat; +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; + public final class AccessibilityNodeInfoWrapper { public AccessibilityNodeInfoWrapper() { diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompactV16Impl.java b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompactV16Impl.java index 078c175f..951e8182 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompactV16Impl.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompactV16Impl.java @@ -8,7 +8,6 @@ package com.facebook.stetho.inspector.elements.android.window; import android.content.Context; -import android.support.annotation.NonNull; import android.view.View; import android.view.WindowManager; @@ -17,6 +16,8 @@ import java.util.Collections; import java.util.List; +import androidx.annotation.NonNull; + class WindowRootViewCompactV16Impl extends WindowRootViewCompat { private Context mContext; diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompactV18Impl.java b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompactV18Impl.java index ae2a830b..39e091f7 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompactV18Impl.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompactV18Impl.java @@ -7,7 +7,6 @@ package com.facebook.stetho.inspector.elements.android.window; -import android.support.annotation.NonNull; import android.view.View; import java.lang.reflect.Field; @@ -17,6 +16,8 @@ import java.util.Collections; import java.util.List; +import androidx.annotation.NonNull; + class WindowRootViewCompactV18Impl extends WindowRootViewCompat { private Field mViewsField; diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompactV19Impl.java b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompactV19Impl.java index 0b06aedd..ec1b1b4d 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompactV19Impl.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompactV19Impl.java @@ -7,7 +7,6 @@ package com.facebook.stetho.inspector.elements.android.window; -import android.support.annotation.NonNull; import android.view.View; import java.lang.reflect.Field; @@ -16,6 +15,8 @@ import java.util.Collections; import java.util.List; +import androidx.annotation.NonNull; + class WindowRootViewCompactV19Impl extends WindowRootViewCompat { private List mRootViews; diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompat.java b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompat.java index 0493e5ce..72edd500 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompat.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/window/WindowRootViewCompat.java @@ -9,13 +9,14 @@ import android.content.Context; import android.os.Build; -import android.support.annotation.NonNull; import android.view.View; import com.facebook.stetho.common.Util; import java.util.List; +import androidx.annotation.NonNull; + /** * get the root view of all windows *

diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/helper/IntegerFormatter.java b/stetho/src/main/java/com/facebook/stetho/inspector/helper/IntegerFormatter.java index 60f39867..1c20ff78 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/helper/IntegerFormatter.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/helper/IntegerFormatter.java @@ -9,9 +9,10 @@ import android.annotation.TargetApi; import android.os.Build; -import android.support.annotation.Nullable; import android.view.ViewDebug; +import androidx.annotation.Nullable; + public class IntegerFormatter { private static IntegerFormatter cachedFormatter; diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Page.java b/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Page.java index 33516bc7..17aca407 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Page.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Page.java @@ -8,7 +8,7 @@ package com.facebook.stetho.inspector.protocol.module; import android.content.Context; -import android.support.annotation.Nullable; + import com.facebook.stetho.common.ProcessUtil; import com.facebook.stetho.inspector.domstorage.SharedPreferencesHelper; import com.facebook.stetho.inspector.jsonrpc.JsonRpcPeer; @@ -19,6 +19,7 @@ import com.facebook.stetho.json.ObjectMapper; import com.facebook.stetho.json.annotation.JsonProperty; import com.facebook.stetho.json.annotation.JsonValue; + import org.json.JSONObject; import java.util.ArrayList; @@ -26,6 +27,8 @@ import java.util.Iterator; import java.util.List; +import androidx.annotation.Nullable; + public class Page implements ChromeDevtoolsDomain { public static final String BANNER = // Note: not using Android resources so we can maintain .jar distribution for now. "_____/\\\\\\\\\\\\\\\\\\\\\\_______________________________________________/\\\\\\_______________________\n" + diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/runtime/RhinoDetectingRuntimeReplFactory.java b/stetho/src/main/java/com/facebook/stetho/inspector/runtime/RhinoDetectingRuntimeReplFactory.java index 1df21dba..98564048 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/runtime/RhinoDetectingRuntimeReplFactory.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/runtime/RhinoDetectingRuntimeReplFactory.java @@ -8,7 +8,7 @@ package com.facebook.stetho.inspector.runtime; import android.content.Context; -import android.support.annotation.Nullable; + import com.facebook.stetho.common.LogUtil; import com.facebook.stetho.inspector.console.RuntimeRepl; import com.facebook.stetho.inspector.console.RuntimeReplFactory; @@ -16,6 +16,8 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import androidx.annotation.Nullable; + /** * Attempts to locate stetho-js-rhino in the classpath and use it if available. Otherwise falls * back to a no-op version which informs folks that they can include stetho-js-rhino for more diff --git a/stetho/src/main/java/com/facebook/stetho/server/http/HandlerRegistry.java b/stetho/src/main/java/com/facebook/stetho/server/http/HandlerRegistry.java index 484921af..24976b9c 100644 --- a/stetho/src/main/java/com/facebook/stetho/server/http/HandlerRegistry.java +++ b/stetho/src/main/java/com/facebook/stetho/server/http/HandlerRegistry.java @@ -7,10 +7,10 @@ package com.facebook.stetho.server.http; -import android.support.annotation.Nullable; - import java.util.ArrayList; +import androidx.annotation.Nullable; + public class HandlerRegistry { private final ArrayList mPathMatchers = new ArrayList<>(); private final ArrayList mHttpHandlers = new ArrayList<>(); diff --git a/stetho/src/main/java/com/facebook/stetho/server/http/LightHttpMessage.java b/stetho/src/main/java/com/facebook/stetho/server/http/LightHttpMessage.java index f359d89a..47450075 100644 --- a/stetho/src/main/java/com/facebook/stetho/server/http/LightHttpMessage.java +++ b/stetho/src/main/java/com/facebook/stetho/server/http/LightHttpMessage.java @@ -7,10 +7,10 @@ package com.facebook.stetho.server.http; -import android.support.annotation.Nullable; - import java.util.ArrayList; +import androidx.annotation.Nullable; + public class LightHttpMessage { public final ArrayList headerNames = new ArrayList<>(); public final ArrayList headerValues = new ArrayList<>(); diff --git a/stetho/src/main/java/com/facebook/stetho/server/http/LightHttpServer.java b/stetho/src/main/java/com/facebook/stetho/server/http/LightHttpServer.java index be02e0e2..06d91f9b 100644 --- a/stetho/src/main/java/com/facebook/stetho/server/http/LightHttpServer.java +++ b/stetho/src/main/java/com/facebook/stetho/server/http/LightHttpServer.java @@ -7,9 +7,8 @@ package com.facebook.stetho.server.http; -import android.net.LocalSocket; import android.net.Uri; -import android.support.annotation.Nullable; + import com.facebook.stetho.server.LeakyBufferedInputStream; import com.facebook.stetho.server.SocketLike; @@ -22,6 +21,8 @@ import java.io.PrintWriter; import java.io.StringWriter; +import androidx.annotation.Nullable; + /** * Somewhat crude but very fast HTTP server designed exclusively to handle the * Chrome DevTools protocol, though sufficiently general to do other very basic things. From 241a0df2983ef0d250f847cb12da01f0d396b596 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Wed, 21 Aug 2019 23:01:50 +0200 Subject: [PATCH 07/20] Add dependency to androidx.fragment:fragment It has been documented as optional, but I doubt that's actually the case. The problem is that I can't define POM_OPTIONAL_DEPS with androidx.fragment:fragment as value because it is already defined. --- stetho/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/stetho/build.gradle b/stetho/build.gradle index 1159f3a4..e54226da 100644 --- a/stetho/build.gradle +++ b/stetho/build.gradle @@ -19,6 +19,7 @@ dependencies { implementation 'androidx.annotation:annotation:1.1.0' implementation 'androidx.appcompat:appcompat:1.0.2' // optional + implementation 'androidx.fragment:fragment:1.0.0' // optional testImplementation 'junit:junit:4.12' testImplementation('org.robolectric:robolectric:2.4') { From 2adc71c5c03d692026d57ee98dcd4ffa298a3c82 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Thu, 22 Aug 2019 10:33:30 +0200 Subject: [PATCH 08/20] Add missing AndroidX import --- .../elements/android/AccessibilityNodeInfoWrapper.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/AccessibilityNodeInfoWrapper.java b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/AccessibilityNodeInfoWrapper.java index eac7c2a6..a6288cdb 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/AccessibilityNodeInfoWrapper.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/AccessibilityNodeInfoWrapper.java @@ -15,8 +15,10 @@ import com.facebook.stetho.common.android.AccessibilityUtil; +import androidx.annotation.Nullable; import androidx.core.view.ViewCompat; import androidx.core.view.accessibility.AccessibilityNodeInfoCompat; +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat; public final class AccessibilityNodeInfoWrapper { From 708a283716bd0d84db8254bc1b40c743e3ec1d5f Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Mon, 14 Oct 2019 17:04:13 +0200 Subject: [PATCH 09/20] Remove unused AppCompat dependency --- stetho/build.gradle | 1 - stetho/gradle.properties | 1 - 2 files changed, 2 deletions(-) diff --git a/stetho/build.gradle b/stetho/build.gradle index e54226da..d0489191 100644 --- a/stetho/build.gradle +++ b/stetho/build.gradle @@ -18,7 +18,6 @@ dependencies { implementation 'com.google.code.findbugs:jsr305:2.0.3' implementation 'androidx.annotation:annotation:1.1.0' - implementation 'androidx.appcompat:appcompat:1.0.2' // optional implementation 'androidx.fragment:fragment:1.0.0' // optional testImplementation 'junit:junit:4.12' diff --git a/stetho/gradle.properties b/stetho/gradle.properties index 41d5493a..19ffafd2 100644 --- a/stetho/gradle.properties +++ b/stetho/gradle.properties @@ -1,4 +1,3 @@ POM_NAME=Stetho POM_ARTIFACT_ID=stetho -POM_OPTIONAL_DEPS=androidx.appcompat:appcompat POM_PACKAGING=aar From 7c16c44a1b0777a423184e2f15f2d181311495d2 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Mon, 14 Oct 2019 17:08:51 +0200 Subject: [PATCH 10/20] Bump AndroidX Fragment version to 1.1.0 --- stetho/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stetho/build.gradle b/stetho/build.gradle index d0489191..d6750cbc 100644 --- a/stetho/build.gradle +++ b/stetho/build.gradle @@ -18,7 +18,7 @@ dependencies { implementation 'com.google.code.findbugs:jsr305:2.0.3' implementation 'androidx.annotation:annotation:1.1.0' - implementation 'androidx.fragment:fragment:1.0.0' // optional + implementation 'androidx.fragment:fragment:1.1.0' // optional testImplementation 'junit:junit:4.12' testImplementation('org.robolectric:robolectric:2.4') { From 96369b044e5fe0a24ab418976e16becc5ce6bd17 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Mon, 14 Oct 2019 22:30:02 +0200 Subject: [PATCH 11/20] Take advantage of minSdkVersion 14 --- .../main/java/com/facebook/stetho/Stetho.java | 42 +++++++++---------- .../stetho/common/android/FragmentCompat.java | 18 ++++---- .../common/android/FragmentCompatUtil.java | 16 +------ .../database/SQLiteDatabaseCompat.java | 15 +------ .../database/SqliteDatabaseDriver.java | 3 -- .../protocol/module/DatabaseConstants.java | 18 -------- 6 files changed, 32 insertions(+), 80 deletions(-) delete mode 100644 stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/DatabaseConstants.java diff --git a/stetho/src/main/java/com/facebook/stetho/Stetho.java b/stetho/src/main/java/com/facebook/stetho/Stetho.java index 4f31d203..e357e2d4 100644 --- a/stetho/src/main/java/com/facebook/stetho/Stetho.java +++ b/stetho/src/main/java/com/facebook/stetho/Stetho.java @@ -11,6 +11,7 @@ import android.content.Context; import android.content.SharedPreferences; import android.os.Build; + import com.facebook.stetho.common.LogUtil; import com.facebook.stetho.common.Util; import com.facebook.stetho.dumpapp.DumpappHttpSocketLikeHandler; @@ -41,7 +42,6 @@ import com.facebook.stetho.inspector.protocol.module.DOM; import com.facebook.stetho.inspector.protocol.module.DOMStorage; import com.facebook.stetho.inspector.protocol.module.Database; -import com.facebook.stetho.inspector.protocol.module.DatabaseConstants; import com.facebook.stetho.inspector.protocol.module.DatabaseDriver2; import com.facebook.stetho.inspector.protocol.module.Debugger; import com.facebook.stetho.inspector.protocol.module.HeapProfiler; @@ -55,19 +55,19 @@ import com.facebook.stetho.server.AddressNameHelper; import com.facebook.stetho.server.LazySocketHandler; import com.facebook.stetho.server.LocalSocketServer; -import com.facebook.stetho.server.ServerManager; import com.facebook.stetho.server.ProtocolDetectingSocketHandler; +import com.facebook.stetho.server.ServerManager; import com.facebook.stetho.server.SocketHandler; import com.facebook.stetho.server.SocketHandlerFactory; -import javax.annotation.Nullable; - import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; +import javax.annotation.Nullable; + /** * Initialization and configuration entry point for the Stetho debugging system. Simple usage with * default plugins and features enabled: @@ -386,27 +386,25 @@ public Iterable finish() { mRuntimeRepl : new RhinoDetectingRuntimeReplFactory(mContext))); provideIfDesired(new Worker()); - if (Build.VERSION.SDK_INT >= DatabaseConstants.MIN_API_LEVEL) { - Database database = new Database(); - boolean hasSqliteDatabaseDriver = false; - if (mDatabaseDrivers != null) { - for (DatabaseDriver2 databaseDriver : mDatabaseDrivers) { - database.add(databaseDriver); - if (databaseDriver instanceof SqliteDatabaseDriver) { - hasSqliteDatabaseDriver = true; - } + Database database = new Database(); + boolean hasSqliteDatabaseDriver = false; + if (mDatabaseDrivers != null) { + for (DatabaseDriver2 databaseDriver : mDatabaseDrivers) { + database.add(databaseDriver); + if (databaseDriver instanceof SqliteDatabaseDriver) { + hasSqliteDatabaseDriver = true; } } - if (!hasSqliteDatabaseDriver && !mExcludeSqliteDatabaseDriver) { - database.add( - new SqliteDatabaseDriver(mContext, - mDatabaseFilesProvider != null ? - mDatabaseFilesProvider : - new DefaultDatabaseFilesProvider(mContext), - new DefaultDatabaseConnectionProvider())); - } - provideIfDesired(database); } + if (!hasSqliteDatabaseDriver && !mExcludeSqliteDatabaseDriver) { + database.add( + new SqliteDatabaseDriver(mContext, + mDatabaseFilesProvider != null ? + mDatabaseFilesProvider : + new DefaultDatabaseFilesProvider(mContext), + new DefaultDatabaseConnectionProvider())); + } + provideIfDesired(database); return mDelegate.finish(); } diff --git a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompat.java b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompat.java index a80ac86f..ed37bd5c 100644 --- a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompat.java +++ b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompat.java @@ -8,15 +8,17 @@ package com.facebook.stetho.common.android; import android.app.Activity; -import android.os.Build; + import com.facebook.stetho.common.ReflectionUtil; -import com.facebook.stetho.common.Util; -import javax.annotation.Nullable; -import javax.annotation.concurrent.NotThreadSafe; import java.lang.reflect.Field; import java.util.List; +import javax.annotation.Nullable; +import javax.annotation.concurrent.NotThreadSafe; + +import androidx.annotation.NonNull; + /** * Compatibility abstraction which allows us to generalize access to both the * support library's fragments and the built-in framework version. Note: both versions @@ -47,10 +49,9 @@ public abstract class FragmentCompat< "android.support.v4.app.Fragment") != null; } - @Nullable + @NonNull public static FragmentCompat getFrameworkInstance() { - if (sFrameworkInstance == null && - Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + if (sFrameworkInstance == null) { sFrameworkInstance = new FragmentCompatFramework(); } return sFrameworkInstance; @@ -58,8 +59,7 @@ public static FragmentCompat getFrameworkInstance() { @Nullable public static FragmentCompat getSupportLibInstance() { - if (sSupportInstance == null && - sHasSupportFragment) { + if (sSupportInstance == null && sHasSupportFragment) { sSupportInstance = new FragmentCompatSupportLib(); } return sSupportInstance; diff --git a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatUtil.java b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatUtil.java index ea16b3af..d1707232 100644 --- a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatUtil.java +++ b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatUtil.java @@ -26,12 +26,7 @@ public static boolean isDialogFragment(Object fragment) { } FragmentCompat framework = FragmentCompat.getFrameworkInstance(); - if (framework != null && - framework.getDialogFragmentClass().isInstance(fragment)) { - return true; - } - - return false; + return framework.getDialogFragmentClass().isInstance(fragment); } @Nullable @@ -62,14 +57,7 @@ private static Object findFragmentForViewInActivity(Activity activity, View view // version in the same object instance due to FragmentActivity extending Activity (which has // fragment support in the system). FragmentCompat framework = FragmentCompat.getFrameworkInstance(); - if (framework != null) { - Object fragment = findFragmentForViewInActivity(framework, activity, view); - if (fragment != null) { - return fragment; - } - } - - return null; + return findFragmentForViewInActivity(framework, activity, view); } private static Object findFragmentForViewInActivity( diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/database/SQLiteDatabaseCompat.java b/stetho/src/main/java/com/facebook/stetho/inspector/database/SQLiteDatabaseCompat.java index 9019e525..6b80cefe 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/database/SQLiteDatabaseCompat.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/database/SQLiteDatabaseCompat.java @@ -32,10 +32,8 @@ public abstract class SQLiteDatabaseCompat { static { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { sInstance = new JellyBeanAndBeyondImpl(); - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { - sInstance = new HoneycombImpl(); } else { - sInstance = new NoopImpl(); + sInstance = new HoneycombImpl(); } } @@ -83,15 +81,4 @@ public void enableFeatures(@SQLiteOpenOptions int openOptions, SQLiteDatabase db } } } - - private static class NoopImpl extends SQLiteDatabaseCompat { - @Override - public int provideOpenFlags(@SQLiteOpenOptions int openOptions) { - return 0; - } - - @Override - public void enableFeatures(@SQLiteOpenOptions int openOptions, SQLiteDatabase db) { - } - } } diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/database/SqliteDatabaseDriver.java b/stetho/src/main/java/com/facebook/stetho/inspector/database/SqliteDatabaseDriver.java index 7dec2b8f..27638924 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/database/SqliteDatabaseDriver.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/database/SqliteDatabaseDriver.java @@ -7,7 +7,6 @@ package com.facebook.stetho.inspector.database; -import android.annotation.TargetApi; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; @@ -16,7 +15,6 @@ import com.facebook.stetho.common.Util; import com.facebook.stetho.inspector.protocol.module.Database; -import com.facebook.stetho.inspector.protocol.module.DatabaseConstants; import com.facebook.stetho.inspector.protocol.module.DatabaseDescriptor; import com.facebook.stetho.inspector.protocol.module.DatabaseDriver2; @@ -182,7 +180,6 @@ private static String getFirstWord(String s) { return firstSpace >= 0 ? s.substring(0, firstSpace) : s; } - @TargetApi(DatabaseConstants.MIN_API_LEVEL) private T executeUpdateDelete( SQLiteDatabase database, String query, diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/DatabaseConstants.java b/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/DatabaseConstants.java deleted file mode 100644 index cd7ec869..00000000 --- a/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/DatabaseConstants.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.stetho.inspector.protocol.module; - -import android.os.Build; - -public interface DatabaseConstants { - - /** - * Minimum API version required to use the {@link Database}. - */ - public static final int MIN_API_LEVEL = Build.VERSION_CODES.HONEYCOMB; -} From c1d12e79a56b31241d317bca5fd694a91a658396 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Mon, 14 Oct 2019 22:45:29 +0200 Subject: [PATCH 12/20] Take advantage of better nullability information --- .../com/facebook/stetho/common/android/AccessibilityUtil.java | 3 --- .../com/facebook/stetho/inspector/protocol/module/Runtime.java | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/stetho/src/main/java/com/facebook/stetho/common/android/AccessibilityUtil.java b/stetho/src/main/java/com/facebook/stetho/common/android/AccessibilityUtil.java index e4989ae2..35bc8eff 100644 --- a/stetho/src/main/java/com/facebook/stetho/common/android/AccessibilityUtil.java +++ b/stetho/src/main/java/com/facebook/stetho/common/android/AccessibilityUtil.java @@ -242,9 +242,6 @@ public static boolean hasFocusableAncestor( AccessibilityNodeInfoCompat parentNode = AccessibilityNodeInfoCompat.obtain(); try { ViewCompat.onInitializeAccessibilityNodeInfo((View) parentView, parentNode); - if (parentNode == null) { - return false; - } if (isAccessibilityFocusable(parentNode, (View) parentView)) { return true; diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Runtime.java b/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Runtime.java index 1d483354..a049d5e6 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Runtime.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Runtime.java @@ -170,7 +170,7 @@ public JsonRpcResult getProperties(JsonRpcPeer peer, JSONObject params) throws J private static String getPropertyClassName(Object o) { String name = o.getClass().getSimpleName(); - if (name == null || name.length() == 0) { + if (name.isEmpty()) { // Looks better for anonymous classes. name = o.getClass().getName(); } From f58146fcc6f1db52f19e3f1886619f837986cfc2 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Mon, 14 Oct 2019 23:08:14 +0200 Subject: [PATCH 13/20] Annotate nullability of newly annotated parameters/functions --- .../stetho/sample/APODContentProvider.java | 17 ++++++++++------- .../com/facebook/stetho/dumpapp/Framer.java | 11 ++++++----- .../inspector/network/CountingOutputStream.java | 6 ++++-- .../inspector/network/DecompressionHelper.java | 5 +++-- .../network/ResponseHandlingInputStream.java | 11 ++++++----- .../stetho/server/CompositeInputStream.java | 9 +++++---- 6 files changed, 34 insertions(+), 25 deletions(-) diff --git a/stetho-sample/src/main/java/com/facebook/stetho/sample/APODContentProvider.java b/stetho-sample/src/main/java/com/facebook/stetho/sample/APODContentProvider.java index 51d18b08..2b13a0f9 100644 --- a/stetho-sample/src/main/java/com/facebook/stetho/sample/APODContentProvider.java +++ b/stetho-sample/src/main/java/com/facebook/stetho/sample/APODContentProvider.java @@ -7,8 +7,6 @@ package com.facebook.stetho.sample; -import java.util.ArrayList; - import android.content.ContentProvider; import android.content.ContentProviderOperation; import android.content.ContentProviderResult; @@ -20,6 +18,10 @@ import android.database.sqlite.SQLiteOpenHelper; import android.net.Uri; +import java.util.ArrayList; + +import javax.annotation.Nonnull; + public class APODContentProvider extends ContentProvider { private APODSQLiteOpenHelper mOpenHelper; @@ -31,7 +33,7 @@ public boolean onCreate() { @Override public Cursor query( - Uri uri, + @Nonnull Uri uri, String[] projection, String selection, String[] selectionArgs, @@ -51,7 +53,7 @@ public Cursor query( } @Override - public String getType(Uri uri) { + public String getType(@Nonnull Uri uri) { return null; } @@ -64,7 +66,7 @@ public Uri insert(Uri uri, ContentValues values) { } @Override - public int delete(Uri uri, String selection, String[] selectionArgs) { + public int delete(@Nonnull Uri uri, String selection, String[] selectionArgs) { SQLiteDatabase db = mOpenHelper.getWritableDatabase(); int count = db.delete(APODContract.TABLE_NAME, selection, selectionArgs); notifyChange(); @@ -72,15 +74,16 @@ public int delete(Uri uri, String selection, String[] selectionArgs) { } @Override - public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { + public int update(@Nonnull Uri uri, ContentValues values, String selection, String[] selectionArgs) { SQLiteDatabase db = mOpenHelper.getWritableDatabase(); int count = db.update(APODContract.TABLE_NAME, values, selection, selectionArgs); notifyChange(); return count; } + @Nonnull @Override - public ContentProviderResult[] applyBatch(ArrayList operations) + public ContentProviderResult[] applyBatch(@Nonnull ArrayList operations) throws OperationApplicationException { SQLiteDatabase db = mOpenHelper.getWritableDatabase(); db.beginTransaction(); diff --git a/stetho/src/main/java/com/facebook/stetho/dumpapp/Framer.java b/stetho/src/main/java/com/facebook/stetho/dumpapp/Framer.java index d366c2ee..ca1136de 100644 --- a/stetho/src/main/java/com/facebook/stetho/dumpapp/Framer.java +++ b/stetho/src/main/java/com/facebook/stetho/dumpapp/Framer.java @@ -9,10 +9,7 @@ import com.facebook.stetho.common.LogUtil; -import javax.annotation.Nullable; - import java.io.BufferedOutputStream; -import java.io.Closeable; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; @@ -21,6 +18,10 @@ import java.io.PrintStream; import java.nio.charset.Charset; +import javax.annotation.Nullable; + +import androidx.annotation.NonNull; + /** * Implements framing protocol that allows us to implement a command-line protocol via * sockets complete with stdin/stdout/stderr, exit codes, and input arguments. @@ -145,12 +146,12 @@ public int read() throws IOException { } @Override - public int read(byte[] buffer) throws IOException { + public int read(@NonNull byte[] buffer) throws IOException { return read(buffer, 0, buffer.length); } @Override - public int read(byte[] buffer, int byteOffset, int byteCount) throws IOException { + public int read(@NonNull byte[] buffer, int byteOffset, int byteCount) throws IOException { mClosedHelper.throwIfClosed(); synchronized (Framer.this) { diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/network/CountingOutputStream.java b/stetho/src/main/java/com/facebook/stetho/inspector/network/CountingOutputStream.java index 3266bf61..32abcde4 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/network/CountingOutputStream.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/network/CountingOutputStream.java @@ -11,6 +11,8 @@ import java.io.IOException; import java.io.OutputStream; +import androidx.annotation.NonNull; + class CountingOutputStream extends FilterOutputStream { private long mCount; @@ -29,12 +31,12 @@ public void write(int oneByte) throws IOException { } @Override - public void write(byte[] buffer) throws IOException { + public void write(@NonNull byte[] buffer) throws IOException { write(buffer, 0, buffer.length); } @Override - public void write(byte[] buffer, int offset, int length) throws IOException { + public void write(@NonNull byte[] buffer, int offset, int length) throws IOException { out.write(buffer, offset, length); mCount += length; } diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/network/DecompressionHelper.java b/stetho/src/main/java/com/facebook/stetho/inspector/network/DecompressionHelper.java index 45d0a1e4..83193a32 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/network/DecompressionHelper.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/network/DecompressionHelper.java @@ -10,12 +10,13 @@ import com.facebook.stetho.inspector.console.CLog; import com.facebook.stetho.inspector.protocol.module.Console; -import javax.annotation.Nullable; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.InflaterOutputStream; +import javax.annotation.Nullable; + // @VisibleForTest public class DecompressionHelper { static final String GZIP_ENCODING = "gzip"; @@ -39,7 +40,7 @@ public static InputStream teeInputWithDecompression( decompressedCounter = new CountingOutputStream(decompressedOutput); if (gzipEncoding) { output = GunzippingOutputStream.create(decompressedCounter); - } else if (deflateEncoding) { + } else { output = new InflaterOutputStream(decompressedCounter); } } else { diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/network/ResponseHandlingInputStream.java b/stetho/src/main/java/com/facebook/stetho/inspector/network/ResponseHandlingInputStream.java index 1da3a291..7abb7880 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/network/ResponseHandlingInputStream.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/network/ResponseHandlingInputStream.java @@ -11,14 +11,15 @@ import com.facebook.stetho.inspector.helper.ChromePeerManager; import com.facebook.stetho.inspector.protocol.module.Console; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.annotation.concurrent.GuardedBy; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; + /** * {@link InputStream} that caches the data as the data is read, and writes them to the given * {@link OutputStream}. This also guarantees that we will attempt to reach EOF on the @@ -105,12 +106,12 @@ public int read() throws IOException { } @Override - public int read(byte[] b) throws IOException { + public int read(@Nonnull byte[] b) throws IOException { return this.read(b, 0, b.length); } @Override - public int read(byte[] b, int off, int len) throws IOException { + public int read(@Nonnull byte[] b, int off, int len) throws IOException { try { int result = checkEOF(in.read(b, off, len)); if (result != -1) { diff --git a/stetho/src/main/java/com/facebook/stetho/server/CompositeInputStream.java b/stetho/src/main/java/com/facebook/stetho/server/CompositeInputStream.java index 79a1e413..bf96a5a2 100644 --- a/stetho/src/main/java/com/facebook/stetho/server/CompositeInputStream.java +++ b/stetho/src/main/java/com/facebook/stetho/server/CompositeInputStream.java @@ -7,12 +7,13 @@ package com.facebook.stetho.server; -import javax.annotation.concurrent.NotThreadSafe; +import com.facebook.stetho.common.LogUtil; import java.io.IOException; import java.io.InputStream; -import com.facebook.stetho.common.LogUtil; +import javax.annotation.Nonnull; +import javax.annotation.concurrent.NotThreadSafe; @NotThreadSafe public class CompositeInputStream extends InputStream { @@ -70,12 +71,12 @@ public void reset() throws IOException { } @Override - public int read(byte[] buffer) throws IOException { + public int read(@Nonnull byte[] buffer) throws IOException { return read(buffer, 0, buffer.length); } @Override - public int read(byte[] buffer, int byteOffset, int byteCount) throws IOException { + public int read(@Nonnull byte[] buffer, int byteOffset, int byteCount) throws IOException { int n; while ((n = mStreams[mCurrentIndex].read(buffer, byteOffset, byteCount)) == -1) { if (!tryMoveToNextStream()) { From 780486d77119e582def2d55d8626ea26876bc835 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Mon, 14 Oct 2019 23:08:47 +0200 Subject: [PATCH 14/20] Use correct class names for reflection --- .../java/com/facebook/stetho/common/ReflectionUtil.java | 2 -- .../facebook/stetho/common/android/FragmentCompat.java | 2 +- .../stetho/inspector/elements/android/ViewDescriptor.java | 8 ++++---- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/stetho/src/main/java/com/facebook/stetho/common/ReflectionUtil.java b/stetho/src/main/java/com/facebook/stetho/common/ReflectionUtil.java index 75e5cfb0..61ca22ca 100644 --- a/stetho/src/main/java/com/facebook/stetho/common/ReflectionUtil.java +++ b/stetho/src/main/java/com/facebook/stetho/common/ReflectionUtil.java @@ -8,8 +8,6 @@ package com.facebook.stetho.common; import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import javax.annotation.Nullable; diff --git a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompat.java b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompat.java index ed37bd5c..be8eae38 100644 --- a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompat.java +++ b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompat.java @@ -46,7 +46,7 @@ public abstract class FragmentCompat< static { sHasSupportFragment = ReflectionUtil.tryGetClassForName( - "android.support.v4.app.Fragment") != null; + "androidx.fragment.app.Fragment") != null; } @NonNull diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ViewDescriptor.java b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ViewDescriptor.java index a2de76e0..fdd0233f 100755 --- a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ViewDescriptor.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ViewDescriptor.java @@ -23,9 +23,6 @@ import com.facebook.stetho.inspector.elements.StyleRuleNameAccumulator; import com.facebook.stetho.inspector.helper.IntegerFormatter; -import javax.annotation.Nullable; -import javax.annotation.concurrent.GuardedBy; - import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -37,6 +34,9 @@ import java.util.Map; import java.util.regex.Pattern; +import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; + final class ViewDescriptor extends AbstractChainedDescriptor implements HighlightableDescriptor { private static final String ID_NAME = "id"; @@ -51,7 +51,7 @@ final class ViewDescriptor extends AbstractChainedDescriptor static { sHasSupportNodeInfo = ReflectionUtil.tryGetClassForName( - "android.support.v4.view.accessibility.AccessibilityNodeInfoCompat") != null; + "androidx.core.view.accessibility.AccessibilityNodeInfoCompat") != null; } /** From 80dd153de0eb7d189adbc3cb0bc0f973149330a4 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Mon, 14 Oct 2019 23:37:48 +0200 Subject: [PATCH 15/20] Explain why the Fragment dependency is optional --- stetho/build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/stetho/build.gradle b/stetho/build.gradle index d6750cbc..5e356101 100644 --- a/stetho/build.gradle +++ b/stetho/build.gradle @@ -18,7 +18,9 @@ dependencies { implementation 'com.google.code.findbugs:jsr305:2.0.3' implementation 'androidx.annotation:annotation:1.1.0' - implementation 'androidx.fragment:fragment:1.1.0' // optional + // Optional: reflection is used to test whether Fragment (and the transient AndroidX Core) are actually present. + // TODO: either make the optional dependencies actually optional via `compileOnly` or remove the runtime checks + implementation 'androidx.fragment:fragment:1.1.0' testImplementation 'junit:junit:4.12' testImplementation('org.robolectric:robolectric:2.4') { From 0d4e4f8fcd9b2738cbf830c7da0b1cb3ac3cb9b2 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Mon, 14 Oct 2019 23:53:36 +0200 Subject: [PATCH 16/20] Don't use reflection to test the existence of optional dependencies --- .../com/facebook/stetho/common/ReflectionUtil.java | 9 --------- .../stetho/common/android/FragmentCompat.java | 10 ++++++++-- .../inspector/elements/android/ViewDescriptor.java | 11 ++++++++--- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/stetho/src/main/java/com/facebook/stetho/common/ReflectionUtil.java b/stetho/src/main/java/com/facebook/stetho/common/ReflectionUtil.java index 61ca22ca..cc31ba11 100644 --- a/stetho/src/main/java/com/facebook/stetho/common/ReflectionUtil.java +++ b/stetho/src/main/java/com/facebook/stetho/common/ReflectionUtil.java @@ -15,15 +15,6 @@ public final class ReflectionUtil { private ReflectionUtil() { } - @Nullable - public static Class tryGetClassForName(String className) { - try { - return Class.forName(className); - } catch (ClassNotFoundException e) { - return null; - } - } - @Nullable public static Field tryGetDeclaredField(Class theClass, String fieldName) { try { diff --git a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompat.java b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompat.java index be8eae38..8ae662bb 100644 --- a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompat.java +++ b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompat.java @@ -45,8 +45,14 @@ public abstract class FragmentCompat< private static final boolean sHasSupportFragment; static { - sHasSupportFragment = ReflectionUtil.tryGetClassForName( - "androidx.fragment.app.Fragment") != null; + boolean hasSupportFragment = false; + try { + androidx.fragment.app.Fragment.class.getClass(); + hasSupportFragment = true; + } catch (NoClassDefFoundError ignore) { + // AndroidX Fragment is not in classpath. + } + sHasSupportFragment = hasSupportFragment; } @NonNull diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ViewDescriptor.java b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ViewDescriptor.java index fdd0233f..0f39dec2 100755 --- a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ViewDescriptor.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ViewDescriptor.java @@ -13,7 +13,6 @@ import com.facebook.stetho.common.ExceptionUtil; import com.facebook.stetho.common.LogUtil; -import com.facebook.stetho.common.ReflectionUtil; import com.facebook.stetho.common.StringUtil; import com.facebook.stetho.common.android.ResourcesUtil; import com.facebook.stetho.inspector.elements.AbstractChainedDescriptor; @@ -50,8 +49,14 @@ final class ViewDescriptor extends AbstractChainedDescriptor private static final boolean sHasSupportNodeInfo; static { - sHasSupportNodeInfo = ReflectionUtil.tryGetClassForName( - "androidx.core.view.accessibility.AccessibilityNodeInfoCompat") != null; + boolean hasSupportNodeInfo = false; + try { + androidx.core.view.accessibility.AccessibilityNodeInfoCompat.class.getClass(); + hasSupportNodeInfo = true; + } catch (NoClassDefFoundError ignore) { + // AndroidX Fragment is not in classpath. + } + sHasSupportNodeInfo = hasSupportNodeInfo; } /** From 9d3d9290975d0161f92b92bffe442e342e5397be Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Wed, 16 Oct 2019 00:16:59 +0200 Subject: [PATCH 17/20] Depend on Fragment 1.0.0 We purposefully depend on version 1.0.0 because we don't want to accidentally access something that's not in v1. This way, the consumer is free to choose anything from [1.0.0, 2.0.0). --- stetho/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stetho/build.gradle b/stetho/build.gradle index 5e356101..d75550b0 100644 --- a/stetho/build.gradle +++ b/stetho/build.gradle @@ -20,7 +20,7 @@ dependencies { // Optional: reflection is used to test whether Fragment (and the transient AndroidX Core) are actually present. // TODO: either make the optional dependencies actually optional via `compileOnly` or remove the runtime checks - implementation 'androidx.fragment:fragment:1.1.0' + implementation 'androidx.fragment:fragment:1.0.0' testImplementation 'junit:junit:4.12' testImplementation('org.robolectric:robolectric:2.4') { From 1a7aaa5d4d708e21e989d23b002c9450863184c5 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Wed, 16 Oct 2019 11:06:01 +0200 Subject: [PATCH 18/20] Remove more obsolete code now we only support 14 and up --- .../stetho/sample/SampleDebugApplication.java | 4 +- .../main/java/com/facebook/stetho/Stetho.java | 27 +--- .../android/FragmentCompatFramework.java | 1 - .../common/android/FragmentCompatUtil.java | 3 +- .../SharedPreferencesDumperPlugin.java | 9 +- .../elements/android/ActivityTracker.java | 128 +++++++----------- .../android/AndroidDocumentConstants.java | 19 --- .../inspector/protocol/module/DOMStorage.java | 11 +- .../inspector/protocol/module/Database.java | 15 +- 9 files changed, 70 insertions(+), 147 deletions(-) delete mode 100644 stetho/src/main/java/com/facebook/stetho/inspector/elements/android/AndroidDocumentConstants.java diff --git a/stetho-sample/src/debug/java/com/facebook/stetho/sample/SampleDebugApplication.java b/stetho-sample/src/debug/java/com/facebook/stetho/sample/SampleDebugApplication.java index 0b7bb422..b0c8c9bc 100644 --- a/stetho-sample/src/debug/java/com/facebook/stetho/sample/SampleDebugApplication.java +++ b/stetho-sample/src/debug/java/com/facebook/stetho/sample/SampleDebugApplication.java @@ -7,12 +7,11 @@ package com.facebook.stetho.sample; -import android.annotation.TargetApi; import android.content.Context; -import android.os.Build; import android.os.SystemClock; import android.provider.CalendarContract; import android.util.Log; + import com.facebook.stetho.DumperPluginsProvider; import com.facebook.stetho.InspectorModulesProvider; import com.facebook.stetho.Stetho; @@ -66,7 +65,6 @@ public Iterable get() { .finish(); } - @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) private ContentProviderDatabaseDriver createContentProviderDatabaseDriver(Context context) { ContentProviderSchema calendarsSchema = new ContentProviderSchema.Builder() .table(new Table.Builder() diff --git a/stetho/src/main/java/com/facebook/stetho/Stetho.java b/stetho/src/main/java/com/facebook/stetho/Stetho.java index e357e2d4..a161f4bd 100644 --- a/stetho/src/main/java/com/facebook/stetho/Stetho.java +++ b/stetho/src/main/java/com/facebook/stetho/Stetho.java @@ -10,9 +10,7 @@ import android.app.Application; import android.content.Context; import android.content.SharedPreferences; -import android.os.Build; -import com.facebook.stetho.common.LogUtil; import com.facebook.stetho.common.Util; import com.facebook.stetho.dumpapp.DumpappHttpSocketLikeHandler; import com.facebook.stetho.dumpapp.DumpappSocketLikeHandler; @@ -34,7 +32,6 @@ import com.facebook.stetho.inspector.elements.Document; import com.facebook.stetho.inspector.elements.DocumentProviderFactory; import com.facebook.stetho.inspector.elements.android.ActivityTracker; -import com.facebook.stetho.inspector.elements.android.AndroidDocumentConstants; import com.facebook.stetho.inspector.elements.android.AndroidDocumentProviderFactory; import com.facebook.stetho.inspector.protocol.ChromeDevtoolsDomain; import com.facebook.stetho.inspector.protocol.module.CSS; @@ -66,6 +63,7 @@ import java.util.List; import java.util.Set; +import javax.annotation.Nonnull; import javax.annotation.Nullable; /** @@ -122,13 +120,7 @@ protected Iterable getInspectorModules() { public static void initialize(final Initializer initializer) { // Hook activity tracking so that after Stetho is attached we can figure out what // activities are present. - boolean isTrackingActivities = ActivityTracker.get().beginTrackingIfPossible( - (Application)initializer.mContext.getApplicationContext()); - if (!isTrackingActivities) { - LogUtil.w("Automatic activity tracking not available on this API level, caller must invoke " + - "ActivityTracker methods manually!"); - } - + ActivityTracker.get().beginTracking((Application)initializer.mContext.getApplicationContext()); initializer.start(); } @@ -369,11 +361,9 @@ public Iterable finish() { provideIfDesired(new Console()); provideIfDesired(new Debugger()); DocumentProviderFactory documentModel = resolveDocumentProvider(); - if (documentModel != null) { - Document document = new Document(documentModel); - provideIfDesired(new DOM(document)); - provideIfDesired(new CSS(document)); - } + Document document = new Document(documentModel); + provideIfDesired(new DOM(document)); + provideIfDesired(new CSS(document)); provideIfDesired(new DOMStorage(mContext)); provideIfDesired(new HeapProfiler()); provideIfDesired(new Inspector()); @@ -408,15 +398,12 @@ public Iterable finish() { return mDelegate.finish(); } - @Nullable + @Nonnull private DocumentProviderFactory resolveDocumentProvider() { if (mDocumentProvider != null) { return mDocumentProvider; } - if (Build.VERSION.SDK_INT >= AndroidDocumentConstants.MIN_API_LEVEL) { - return new AndroidDocumentProviderFactory(mContext, Collections.emptyList()); - } - return null; + return new AndroidDocumentProviderFactory(mContext, Collections.emptyList()); } } diff --git a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatFramework.java b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatFramework.java index 797b1cc9..b7c84c23 100644 --- a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatFramework.java +++ b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatFramework.java @@ -19,7 +19,6 @@ import javax.annotation.Nullable; -@TargetApi(Build.VERSION_CODES.HONEYCOMB) final class FragmentCompatFramework extends FragmentCompat { private static final FragmentAccessorFrameworkHoneycomb sFragmentAccessor; diff --git a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatUtil.java b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatUtil.java index d1707232..574d05ce 100644 --- a/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatUtil.java +++ b/stetho/src/main/java/com/facebook/stetho/common/android/FragmentCompatUtil.java @@ -52,8 +52,7 @@ private static Object findFragmentForViewInActivity(Activity activity, View view } } - // Try the actual Android runtime version if we are on a sufficiently high API level for it to - // exist. Note that technically we can have both the support library and the framework + // Use the actual Android runtime version. Note that technically we can have both the support library and the framework // version in the same object instance due to FragmentActivity extending Activity (which has // fragment support in the system). FragmentCompat framework = FragmentCompat.getFrameworkInstance(); diff --git a/stetho/src/main/java/com/facebook/stetho/dumpapp/plugins/SharedPreferencesDumperPlugin.java b/stetho/src/main/java/com/facebook/stetho/dumpapp/plugins/SharedPreferencesDumperPlugin.java index 791dd04d..027649aa 100644 --- a/stetho/src/main/java/com/facebook/stetho/dumpapp/plugins/SharedPreferencesDumperPlugin.java +++ b/stetho/src/main/java/com/facebook/stetho/dumpapp/plugins/SharedPreferencesDumperPlugin.java @@ -8,18 +8,15 @@ package com.facebook.stetho.dumpapp.plugins; import android.annotation.SuppressLint; -import android.annotation.TargetApi; import android.content.Context; import android.content.SharedPreferences; -import android.os.Build; import android.text.TextUtils; + import com.facebook.stetho.dumpapp.DumpUsageException; import com.facebook.stetho.dumpapp.DumperContext; import com.facebook.stetho.dumpapp.DumperPlugin; import com.facebook.stetho.inspector.domstorage.SharedPreferencesHelper; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.io.File; import java.io.PrintStream; import java.util.HashSet; @@ -27,6 +24,9 @@ import java.util.List; import java.util.Map; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + public class SharedPreferencesDumperPlugin implements DumperPlugin { private static final String XML_SUFFIX = ".xml"; @@ -118,7 +118,6 @@ private static String nextArgValue(Iterator iter) throws DumpUsageExcept return nextArg(iter, "Expected "); } - @TargetApi(Build.VERSION_CODES.HONEYCOMB) private static void putStringSet( SharedPreferences.Editor editor, String key, diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ActivityTracker.java b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ActivityTracker.java index 158b3b60..8c67fd9c 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ActivityTracker.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ActivityTracker.java @@ -7,17 +7,12 @@ package com.facebook.stetho.inspector.elements.android; -import android.annotation.TargetApi; import android.app.Activity; import android.app.Application; -import android.os.Build; import android.os.Bundle; import android.os.Looper; -import com.facebook.stetho.common.Util; -import javax.annotation.Nullable; -import javax.annotation.concurrent.GuardedBy; -import javax.annotation.concurrent.NotThreadSafe; +import com.facebook.stetho.common.Util; import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -25,15 +20,13 @@ import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; +import javax.annotation.concurrent.NotThreadSafe; + /** * Tracks which {@link Activity} instances have been created and not yet destroyed in creation - * order for use by Stetho features. Note that automatic tracking is not available for - * all versions of Android but it is possible to manually track activities using the {@link #add} - * and {@link #remove} methods exposed below. Be aware that this is an easy opportunity to - * cause serious memory leaks in your application however. Use with caution. - *

- * Most callers can and should ignore this class, though it is necessary if you are implementing - * Activity tracking pre-ICS. + * order for use by Stetho features. */ @NotThreadSafe public final class ActivityTracker { @@ -66,22 +59,14 @@ public void unregisterListener(Listener listener) { } /** - * Start automatic tracking if we are running on ICS+. - * - * @return Automatic tracking has been started. No need to manually invoke {@link #add} or - * {@link #remove} methods. + * Start automatic tracking. */ - public boolean beginTrackingIfPossible(Application application) { + public void beginTracking(Application application) { if (mAutomaticTracker == null) { - AutomaticTracker automaticTracker = - AutomaticTracker.newInstanceIfPossible(application, this /* tracker */); - if (automaticTracker != null) { - automaticTracker.register(); - mAutomaticTracker = automaticTracker; - return true; - } + AutomaticTracker automaticTracker = new AutomaticTracker(application, this /* tracker */); + automaticTracker.register(); + mAutomaticTracker = automaticTracker; } - return false; } public boolean endTracking() { @@ -146,76 +131,59 @@ public interface Listener { public void onActivityRemoved(Activity activity); } - private static abstract class AutomaticTracker { - @Nullable - public static AutomaticTracker newInstanceIfPossible( - Application application, - ActivityTracker tracker) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - return new AutomaticTrackerICSAndBeyond(application, tracker); - } else { - return null; - } + private static class AutomaticTracker { + private final Application mApplication; + private final ActivityTracker mTracker; + + public AutomaticTracker(Application application, ActivityTracker tracker) { + mApplication = application; + mTracker = tracker; } - public abstract void register(); - public abstract void unregister(); + public void register() { + mApplication.registerActivityLifecycleCallbacks(mLifecycleCallbacks); + } - @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) - private static class AutomaticTrackerICSAndBeyond extends AutomaticTracker { - private final Application mApplication; - private final ActivityTracker mTracker; + public void unregister() { + mApplication.unregisterActivityLifecycleCallbacks(mLifecycleCallbacks); + } - public AutomaticTrackerICSAndBeyond(Application application, ActivityTracker tracker) { - mApplication = application; - mTracker = tracker; + private final Application.ActivityLifecycleCallbacks mLifecycleCallbacks = + new Application.ActivityLifecycleCallbacks() { + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + mTracker.add(activity); } - public void register() { - mApplication.registerActivityLifecycleCallbacks(mLifecycleCallbacks); - } + @Override + public void onActivityStarted(Activity activity) { - public void unregister() { - mApplication.unregisterActivityLifecycleCallbacks(mLifecycleCallbacks); } - private final Application.ActivityLifecycleCallbacks mLifecycleCallbacks = - new Application.ActivityLifecycleCallbacks() { - @Override - public void onActivityCreated(Activity activity, Bundle savedInstanceState) { - mTracker.add(activity); - } - - @Override - public void onActivityStarted(Activity activity) { - - } - - @Override - public void onActivityResumed(Activity activity) { + @Override + public void onActivityResumed(Activity activity) { - } + } - @Override - public void onActivityPaused(Activity activity) { + @Override + public void onActivityPaused(Activity activity) { - } + } - @Override - public void onActivityStopped(Activity activity) { + @Override + public void onActivityStopped(Activity activity) { - } + } - @Override - public void onActivitySaveInstanceState(Activity activity, Bundle outState) { + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle outState) { - } + } - @Override - public void onActivityDestroyed(Activity activity) { - mTracker.remove(activity); - } - }; - } + @Override + public void onActivityDestroyed(Activity activity) { + mTracker.remove(activity); + } + }; } } diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/AndroidDocumentConstants.java b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/AndroidDocumentConstants.java deleted file mode 100644 index 04767157..00000000 --- a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/AndroidDocumentConstants.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -package com.facebook.stetho.inspector.elements.android; - -import android.os.Build; - -public interface AndroidDocumentConstants { - /** - * Minimum API version required to make effective use of AndroidDocumentProvider. This can be - * moved back significantly through manual APIs to discover {@link android.app.Activity} - * instances. - */ - int MIN_API_LEVEL = Build.VERSION_CODES.ICE_CREAM_SANDWICH; -} diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/DOMStorage.java b/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/DOMStorage.java index 19845c25..246d6596 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/DOMStorage.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/DOMStorage.java @@ -7,10 +7,9 @@ package com.facebook.stetho.inspector.protocol.module; -import android.annotation.TargetApi; import android.content.Context; import android.content.SharedPreferences; -import android.os.Build; + import com.facebook.stetho.inspector.console.CLog; import com.facebook.stetho.inspector.domstorage.DOMStoragePeerManager; import com.facebook.stetho.inspector.domstorage.SharedPreferencesHelper; @@ -21,6 +20,7 @@ import com.facebook.stetho.inspector.protocol.ChromeDevtoolsMethod; import com.facebook.stetho.json.ObjectMapper; import com.facebook.stetho.json.annotation.JsonProperty; + import org.json.JSONException; import org.json.JSONObject; @@ -160,17 +160,12 @@ private static void assignByType( } else if (value instanceof String) { editor.putString(key, (String)value); } else if (value instanceof Set) { - putStringSet(editor, key, (Set)value); + editor.putStringSet(key, (Set)value); } else { throw new IllegalArgumentException("Unsupported type=" + value.getClass().getName()); } } - @TargetApi(Build.VERSION_CODES.HONEYCOMB) - private static void putStringSet(SharedPreferences.Editor editor, String key, Set value) { - editor.putStringSet(key, value); - } - public static class StorageId { @JsonProperty(required = true) public String securityOrigin; diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Database.java b/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Database.java index 5c201f85..f4639ac9 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Database.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/protocol/module/Database.java @@ -7,17 +7,9 @@ package com.facebook.stetho.inspector.protocol.module; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import android.annotation.TargetApi; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteException; -import android.os.Build; import android.util.SparseArray; import com.facebook.stetho.common.LogUtil; @@ -36,10 +28,15 @@ import org.json.JSONObject; +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.ThreadSafe; -@TargetApi(Build.VERSION_CODES.HONEYCOMB) public class Database implements ChromeDevtoolsDomain { /** * The protocol doesn't offer an efficient means of pagination or anything like that so From bb3480f6a82d2d4d6d800c5c35ab5ab53187414e Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Wed, 16 Oct 2019 22:17:31 +0200 Subject: [PATCH 19/20] Bump min/targetSdkVersion to 29 and add missing non-null annotations --- build.gradle | 4 ++-- .../java/com/facebook/stetho/rhino/JsFormat.java | 1 + .../java/com/facebook/stetho/dumpapp/Framer.java | 5 +++-- .../elements/android/ActivityTracker.java | 15 ++++++++------- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index f49ed261..d4bf36e7 100644 --- a/build.gradle +++ b/build.gradle @@ -16,6 +16,6 @@ allprojects { } ext { - compileSdkVersion = 28 - targetSdkVersion = 28 + compileSdkVersion = 29 + targetSdkVersion = 29 } \ No newline at end of file diff --git a/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsFormat.java b/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsFormat.java index 70799ac7..0321efab 100644 --- a/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsFormat.java +++ b/stetho-js-rhino/src/main/java/com/facebook/stetho/rhino/JsFormat.java @@ -64,6 +64,7 @@ public char charAt(int index) { return array[start + index]; } + @NonNull @Override public CharSequence subSequence(int start, int end) { return new ArrayCharSequence(array, this.start + start, this.start + end); diff --git a/stetho/src/main/java/com/facebook/stetho/dumpapp/Framer.java b/stetho/src/main/java/com/facebook/stetho/dumpapp/Framer.java index ca1136de..921990d9 100644 --- a/stetho/src/main/java/com/facebook/stetho/dumpapp/Framer.java +++ b/stetho/src/main/java/com/facebook/stetho/dumpapp/Framer.java @@ -18,6 +18,7 @@ import java.io.PrintStream; import java.nio.charset.Charset; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import androidx.annotation.NonNull; @@ -208,7 +209,7 @@ public FramingOutputStream(byte prefix) { } @Override - public void write(byte[] buffer, int offset, int length) throws IOException { + public void write(@Nonnull byte[] buffer, int offset, int length) throws IOException { mClosedHelper.throwIfClosed(); if (length > 0) { try { @@ -232,7 +233,7 @@ public void write(int oneByte) throws IOException { } @Override - public void write(byte[] buffer) throws IOException { + public void write(@Nonnull byte[] buffer) throws IOException { write(buffer, 0, buffer.length); } diff --git a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ActivityTracker.java b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ActivityTracker.java index 8c67fd9c..057f874f 100644 --- a/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ActivityTracker.java +++ b/stetho/src/main/java/com/facebook/stetho/inspector/elements/android/ActivityTracker.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.annotation.concurrent.GuardedBy; import javax.annotation.concurrent.NotThreadSafe; @@ -151,37 +152,37 @@ public void unregister() { private final Application.ActivityLifecycleCallbacks mLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() { @Override - public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + public void onActivityCreated(@Nonnull Activity activity, Bundle savedInstanceState) { mTracker.add(activity); } @Override - public void onActivityStarted(Activity activity) { + public void onActivityStarted(@Nonnull Activity activity) { } @Override - public void onActivityResumed(Activity activity) { + public void onActivityResumed(@Nonnull Activity activity) { } @Override - public void onActivityPaused(Activity activity) { + public void onActivityPaused(@Nonnull Activity activity) { } @Override - public void onActivityStopped(Activity activity) { + public void onActivityStopped(@Nonnull Activity activity) { } @Override - public void onActivitySaveInstanceState(Activity activity, Bundle outState) { + public void onActivitySaveInstanceState(@Nonnull Activity activity, @Nonnull Bundle outState) { } @Override - public void onActivityDestroyed(Activity activity) { + public void onActivityDestroyed(@Nonnull Activity activity) { mTracker.remove(activity); } }; From 3065dde9f904dda79e28656cc36ddb9a6329bfb7 Mon Sep 17 00:00:00 2001 From: Cristan Meijer Date: Wed, 16 Oct 2019 22:24:24 +0200 Subject: [PATCH 20/20] Remove redundant casts at findViewById --- .../java/com/facebook/stetho/sample/APODActivity.java | 10 +++++----- .../com/facebook/stetho/sample/IRCChatActivity.java | 4 ++-- .../com/facebook/stetho/sample/IRCConnectActivity.java | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/stetho-sample/src/main/java/com/facebook/stetho/sample/APODActivity.java b/stetho-sample/src/main/java/com/facebook/stetho/sample/APODActivity.java index 57f6551a..23f289c9 100644 --- a/stetho-sample/src/main/java/com/facebook/stetho/sample/APODActivity.java +++ b/stetho-sample/src/main/java/com/facebook/stetho/sample/APODActivity.java @@ -7,8 +7,6 @@ package com.facebook.stetho.sample; -import java.io.IOException; - import android.app.ListActivity; import android.app.LoaderManager; import android.content.Context; @@ -29,6 +27,8 @@ import android.widget.ImageView; import android.widget.TextView; +import java.io.IOException; + /** * Simple demonstration of fetching and caching a specific RSS feed showing the * "Astronomy Picture of the Day" feed from NASA. This demonstrates both the database access @@ -164,9 +164,9 @@ private static class ViewHolder { int position; public ViewHolder(View v) { - image = (ImageView)v.findViewById(R.id.image); - title = (TextView)v.findViewById(R.id.title); - description = (TextView)v.findViewById(R.id.description); + image = v.findViewById(R.id.image); + title = v.findViewById(R.id.title); + description = v.findViewById(R.id.description); } } diff --git a/stetho-sample/src/main/java/com/facebook/stetho/sample/IRCChatActivity.java b/stetho-sample/src/main/java/com/facebook/stetho/sample/IRCChatActivity.java index 5834031b..cf1c897e 100644 --- a/stetho-sample/src/main/java/com/facebook/stetho/sample/IRCChatActivity.java +++ b/stetho-sample/src/main/java/com/facebook/stetho/sample/IRCChatActivity.java @@ -58,11 +58,11 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.irc_chat_activity); - mConsoleDisplay = (ListView) findViewById(R.id.console_display); + mConsoleDisplay = findViewById(R.id.console_display); mConsoleRowAdapter = new IRCConsoleRowAdapter(this); mConsoleDisplay.setAdapter(mConsoleRowAdapter); - mConsoleInput = (TextView) findViewById(R.id.console_input); + mConsoleInput = findViewById(R.id.console_input); mConsoleInput.setOnEditorActionListener(mOnConsoleInputEditorAction); findViewById(R.id.console_send).setOnClickListener(mConsoleSendClicked); diff --git a/stetho-sample/src/main/java/com/facebook/stetho/sample/IRCConnectActivity.java b/stetho-sample/src/main/java/com/facebook/stetho/sample/IRCConnectActivity.java index 8b209a83..342773cf 100644 --- a/stetho-sample/src/main/java/com/facebook/stetho/sample/IRCConnectActivity.java +++ b/stetho-sample/src/main/java/com/facebook/stetho/sample/IRCConnectActivity.java @@ -39,12 +39,12 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.irc_connect_activity); - mIRCPriorError = (TextView) findViewById(R.id.irc_prior_error); - mIRCServer = (EditText) findViewById(R.id.irc_server); + mIRCPriorError = findViewById(R.id.irc_prior_error); + mIRCServer = findViewById(R.id.irc_server); if (TextUtils.isEmpty(mIRCServer.getText())) { mIRCServer.setText(DEFAULT_HOST); } - mIRCNickname = (EditText) findViewById(R.id.irc_nickname); + mIRCNickname = findViewById(R.id.irc_nickname); if (TextUtils.isEmpty(mIRCNickname.getText())) { mIRCNickname.setText("stetho" + (new Random().nextInt(9999) + 1)); }