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));
}