diff --git a/runner/monitor/java/androidx/test/BUILD b/runner/monitor/java/androidx/test/BUILD index 5c84af3e6..da5e9d60b 100644 --- a/runner/monitor/java/androidx/test/BUILD +++ b/runner/monitor/java/androidx/test/BUILD @@ -35,6 +35,7 @@ kt_android_library( "internal/runner/runtime/ExposedInstrumentationApi.java", "internal/runner/hidden/ExposedInstrumentationApi.java", "internal/platform/app/ActivityInvoker$$CC.java", + "internal/platform/app/ActivityInvokerDesugar.java", ], ), tags = ["alt_dep=//runner/monitor"], @@ -81,6 +82,7 @@ android_library( srcs = [ # only needed for external release backwards compatibility "internal/platform/app/ActivityInvoker$$CC.java", + "internal/platform/app/ActivityInvokerDesugar.java", ], custom_package = "androidx.test.monitor", manifest = "AndroidManifest.xml", @@ -107,6 +109,7 @@ axt_android_aar( "androidx.test.platform", "androidx.test.runner", ], + jarjar_rule = ":jarjar.txt", included_dep = ":monitor_release_lib", ) diff --git a/runner/monitor/java/androidx/test/internal/platform/app/ActivityInvokerDesugar.java b/runner/monitor/java/androidx/test/internal/platform/app/ActivityInvokerDesugar.java new file mode 100644 index 000000000..c29714aa4 --- /dev/null +++ b/runner/monitor/java/androidx/test/internal/platform/app/ActivityInvokerDesugar.java @@ -0,0 +1,40 @@ +package androidx.test.internal.platform.app; + +import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; + +import android.app.Activity; +import android.content.ComponentName; +import android.content.Intent; +import androidx.annotation.RestrictTo; +import androidx.annotation.RestrictTo.Scope; + +/** + * Handles default implementation for ActivityInvoker#getIntentForActivity + * + *

See the {@link ActivityInvoker$$CC} javadoc for prior history. + * + *

Starting in androidx.test:monitor:1.6.X, a new version of the desugar tooling was used + * that generated a ActivityInvoker$-CC class. Class names with hyphens are rejected by javac, + * so we cannot directly declare a ActivityInvoker$-CC class here. So instead we use a + * placeholder name, and use jarjar to rename the class after the javac step. + * + * @hide + */ +@RestrictTo(Scope.LIBRARY_GROUP) +public final class ActivityInvokerDesugar { + + private ActivityInvokerDesugar() {} + + public static Intent $default$getIntentForActivity(ActivityInvoker invoker, + Class activityClass) { + Intent intent = + Intent.makeMainActivity( + new ComponentName(getInstrumentation().getTargetContext(), activityClass)); + if (getInstrumentation().getTargetContext().getPackageManager().resolveActivity(intent, 0) + != null) { + return intent; + } + return Intent.makeMainActivity( + new ComponentName(getInstrumentation().getContext(), activityClass)); + } +} diff --git a/runner/monitor/java/androidx/test/jarjar.txt b/runner/monitor/java/androidx/test/jarjar.txt new file mode 100644 index 000000000..6ebfe8a76 --- /dev/null +++ b/runner/monitor/java/androidx/test/jarjar.txt @@ -0,0 +1 @@ +rule androidx.test.internal.platform.app.ActivityInvokerDesugar androidx.test.internal.platform.app.ActivityInvoker$-CC