diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-05-26 07:24:58 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-05-26 07:24:58 +0000 |
commit | fd7007fb5c5df8b3b88cd1662cc4918dda47b4a1 (patch) | |
tree | 0e7c69674483c9d63e21513e60fca4a397a71a63 | |
parent | 0b441899940cf091c68891951b317475438e6152 (diff) | |
parent | fb7def90d3846c911e337e62b13b6001501951ad (diff) | |
download | robolectric-busytown-mac-infra-release.tar.gz |
Merge "Snap for 11878398 from 7f68f06545907590e2ff394f658782def4368e42 to busytown-mac-infra-release" into busytown-mac-infra-releasebusytown-mac-infra-release
12 files changed, 123 insertions, 18 deletions
diff --git a/Android.bp b/Android.bp index 4e5cb23b2..2f607a56d 100644 --- a/Android.bp +++ b/Android.bp @@ -67,7 +67,7 @@ java_genrule { srcs: [":robolectric_build_props"], out: ["robolectric_props.jar"], cmd: "cp $(location :robolectric_build_props) . && $(location soong_zip) " + - "-o $(location robolectric_props.jar) " + + "-o $(location robolectric_props.jar) " + "-f ./build.prop ", } @@ -205,8 +205,8 @@ java_host_for_device { "//frameworks/base/packages/CredentialManager:__subpackages__", "//frameworks/base/packages/SettingsLib:__subpackages__", "//frameworks/base/packages/SystemUI:__pkg__", - "//frameworks/libs/systemui/animationlib:__pkg__", - "//frameworks/libs/systemui/tracinglib:__pkg__", + "//frameworks/libs/systemui:__subpackages__", + "//packages/apps/Launcher3/tests:__pkg__", "//frameworks/base/tests/InputScreenshotTest:__subpackages__", "//frameworks/opt/car/setupwizard/library/main/tests/robotests:__pkg__", "//frameworks/opt/localepicker/tests:__pkg__", @@ -232,6 +232,7 @@ java_host_for_device { "//packages/apps/Settings/tests/robotests:__pkg__", "//packages/apps/ThemePicker/tests/robotests:__pkg__", "//packages/apps/WallpaperPicker2/tests/robotests:__pkg__", + "//packages/apps/WallpaperPicker2/tests/robotests/common:__pkg__", "//packages/apps/TvSettings/Settings/tests/robotests:__pkg__", "//packages/apps/KeyChain/robotests:__pkg__", "//packages/apps/CertInstaller/robotests:__pkg__", diff --git a/annotations/src/main/java/org/robolectric/versioning/AndroidVersions.java b/annotations/src/main/java/org/robolectric/versioning/AndroidVersions.java index 71cc48042..19ebef9a1 100644 --- a/annotations/src/main/java/org/robolectric/versioning/AndroidVersions.java +++ b/annotations/src/main/java/org/robolectric/versioning/AndroidVersions.java @@ -53,6 +53,8 @@ import javax.annotation.Nullable; */ public final class AndroidVersions { + private static boolean WARN_ONLY = true; + private AndroidVersions() {} /** Representation of an android release, one that has occurred, or is expected. */ @@ -825,7 +827,7 @@ public final class AndroidVersions { } } - private void throwStaticErrors() { + private void handleStaticErrors() { StringBuilder errors = new StringBuilder(); if (!this.classesWithIllegalNames.isEmpty()) { errors @@ -858,14 +860,14 @@ public final class AndroidVersions { } } if (errors.length() > 0) { - throw new IllegalStateException( + errorMessage( errors .append("Please check the AndroidReleases defined ") .append("in ") .append(AndroidVersions.class.getName()) .append("and ensure they are aligned with the versions of") .append(" Android.") - .toString()); + .toString(), null); } } @@ -877,14 +879,14 @@ public final class AndroidVersions { // the first letter of the code name equal to the release number. current = sdkIntToAllReleases.get(reportedVersion); if (current != null && !current.isReleased()) { - throw new IllegalStateException( + errorMessage( "The current sdk " + current.getShortCode() + " has been released. Please update the contents of " + AndroidVersions.class.getName() + " to mark sdk " + current.getShortCode() - + " as released."); + + " as released.", null); } } else { // Get known active code name letters @@ -936,10 +938,30 @@ public final class AndroidVersions { .append("contents of current sdk jar to the released version.\n"); } if (detectedProblems.length() > 0) { - throw new IllegalStateException(detectedProblems.toString()); + errorMessage(detectedProblems.toString(), null); + } + + if (current == null) { //only possible in warning mode + current = new AndroidUnreleased() { + @Override + public int getSdkInt() { + return 10000; // the super large unknown sdk value. + } + + @Override + public String getShortCode() { + return codename.toUpperCase(Locale.getDefault()).substring(0, 1); + } + + @Override + public String getVersion() { + return ""; + } + }; } } } + return current; } } @@ -971,7 +993,7 @@ public final class AndroidVersions { | IllegalArgumentException | IllegalAccessException | InvocationTargetException ex) { - throw new IllegalStateException( + errorMessage( "Classes " + clazz.getName() + "should be accessible via " @@ -984,7 +1006,7 @@ public final class AndroidVersions { Collections.sort(allReleases, AndroidRelease::compareTo); SdkInformation sdkInformation = new SdkInformation(allReleases, classesWithIllegalNames); - sdkInformation.throwStaticErrors(); + sdkInformation.handleStaticErrors(); return sdkInformation; } @@ -1007,13 +1029,32 @@ public final class AndroidVersions { String codenames = buildProps.getProperty("ro.build.version.all_codenames"); String[] allCodeNames = codenames == null ? new String[0] : codenames.split(","); String[] activeCodeNames = - allCodeNames.length > 0 && allCodeNames[0].equals("REL") ? new String[0] : allCodeNames; + allCodeNames.length > 0 && allCodeNames[0].equals("REL") ? new String[0] : allCodeNames; return information.computeCurrentSdk(sdk, release, codename, asList(activeCodeNames)); } private static final SdkInformation information; + private static final void errorMessage(String errorMessage, @Nullable Exception ex){ + if (WARN_ONLY) { + System.err.println(errorMessage); + } else { + throw new IllegalStateException(errorMessage, ex); + } + } + + static { + // We shouldn't break in annotation processors, only test runs. + String cmd = System.getProperty("sun.java.command"); + // We appear to be in an annotation processor, so only warn users. + if (cmd.indexOf("-Aorg.robolectric.annotation.processing.") != -1) { + System.err.println("Robolectric's AndroidVersions is running in warning mode," + + " no errors will be thrown."); + WARN_ONLY = true; + } else { + WARN_ONLY = false; + } AndroidRelease currentRelease = null; information = gatherStaticSdkInformationFromThisClass(); try { diff --git a/annotations/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java b/annotations/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java index 95b2c4266..334ca05f3 100644 --- a/annotations/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java +++ b/annotations/src/test/java/org/robolectric/versioning/AndroidVersionsEdgeCaseTest.java @@ -3,6 +3,7 @@ package org.robolectric.versioning; import static com.google.common.truth.Truth.assertThat; import java.util.Arrays; +import java.lang.reflect.Field; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -13,6 +14,16 @@ import org.robolectric.versioning.AndroidVersions.SdkInformation; @RunWith(JUnit4.class) public final class AndroidVersionsEdgeCaseTest { + private void forceWarningMode(boolean warnMode) { + try { + Field f = AndroidVersions.class.getDeclaredField("WARN_ONLY"); + f.setAccessible(true); + f.set(null, warnMode); + } catch (NoSuchFieldException | IllegalAccessException ex) { + throw new RuntimeException("Could not update WARN_ONLY field", ex); + } + } + /** * sdkInt higher than any known release, claims it's released. Expects an error message to update * to update the AndroidVersions.class @@ -21,6 +32,7 @@ public final class AndroidVersionsEdgeCaseTest { public void sdkIntHigherThanKnownReleasesClaimsIsReleased_throwsException() { AndroidRelease earliestUnrelease = null; try { + forceWarningMode(false); SdkInformation information = AndroidVersions.gatherStaticSdkInformationFromThisClass(); earliestUnrelease = information.earliestUnreleased; information.computeCurrentSdk( @@ -49,6 +61,7 @@ public final class AndroidVersionsEdgeCaseTest { public void sdkIntReleasedButStillReportsCodeName_throwsException() { AndroidRelease latestRelease = null; try { + forceWarningMode(false); SdkInformation information = AndroidVersions.gatherStaticSdkInformationFromThisClass(); latestRelease = information.latestRelease; information.computeCurrentSdk( @@ -68,4 +81,38 @@ public final class AndroidVersionsEdgeCaseTest { assertThat(e).isInstanceOf(RuntimeException.class); } } + + @Test + public void sdkIntReleasedButStillReportsCodeName_warningMode() { + AndroidRelease latestRelease = null; + try { + forceWarningMode(true); + SdkInformation information = AndroidVersions.gatherStaticSdkInformationFromThisClass(); + latestRelease = information.latestRelease; + information.computeCurrentSdk( + latestRelease.getSdkInt(), + null, + information.latestRelease.getShortCode(), + Arrays.asList(latestRelease.getShortCode())); + } catch (Throwable t) { + assertThat(t).isNull(); + } + } + + @Test + public void unknownSdkInt_warningMode() { + AndroidRelease latestRelease = null; + try { + forceWarningMode(true); + SdkInformation information = AndroidVersions.gatherStaticSdkInformationFromThisClass(); + latestRelease = information.latestRelease; + AndroidRelease found = + information.computeCurrentSdk( + 35, "zzzz", "Z", Arrays.asList("wwww", "xxxx", "yyyy", "zzzz")); + assertThat(found.getSdkInt()).isEqualTo(10000); + } catch (Throwable t) { + assertThat(t).isNull(); + } + } } + diff --git a/nativeruntime/src/main/resources/arsc/font_resources/values/public.xml b/nativeruntime/src/main/resources/arsc/font_resources/values/public.xml index 1b0763909..c93e4e04b 100644 --- a/nativeruntime/src/main/resources/arsc/font_resources/values/public.xml +++ b/nativeruntime/src/main/resources/arsc/font_resources/values/public.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <resources> <!--TODO(b/332407470): We need a more stable method for the configuration.--> - <public type="string" name="config_bodyFontFamily" id="0x010401f7" /> - <public type="string" name="config_headlineFontFamily" id="0x0104026a" /> + <public type="string" name="config_bodyFontFamily" id="0x010401f9" /> + <public type="string" name="config_headlineFontFamily" id="0x0104026d" /> </resources> diff --git a/processor/src/main/java/org/robolectric/annotation/processing/validator/SdkStore.java b/processor/src/main/java/org/robolectric/annotation/processing/validator/SdkStore.java index 06008a57b..feea4d062 100644 --- a/processor/src/main/java/org/robolectric/annotation/processing/validator/SdkStore.java +++ b/processor/src/main/java/org/robolectric/annotation/processing/validator/SdkStore.java @@ -157,7 +157,8 @@ public class SdkStore { * Returns a list of sdks to process, either the compilation's classpaths sdk in a list of size * one, or the list of sdks in a sdkFile. * - * @param localSdk validate sdk found in compile time classpath, takes precedence over sdkFile + * @param localSdk validate sdk found in compile time classpath, takes precedence over sdkFile, + * only applies to unreleased versions of Android. * @param sdkFileName the sdkFile name, may be null, or empty * @param overrideSdkLocation if provided overrides the default lookup of the localSdk, iff * localSdk is on. @@ -169,13 +170,15 @@ public class SdkStore { Sdk sdk = null; if (overrideSdkLocation != null) { sdk = new Sdk(overrideSdkLocation, overrideSdkInt); + return sdk == null ? ImmutableList.of() : ImmutableList.of(sdk); } else { String target = compilationSdkTarget(); if (target != null) { sdk = new Sdk(target); + return sdk == null || sdk.sdkRelease.isReleased() + ? ImmutableList.of() : ImmutableList.of(sdk); } } - return sdk == null ? ImmutableList.of() : ImmutableList.of(sdk); } if (sdkFileName == null || Files.notExists(Paths.get(sdkFileName))) { return ImmutableList.of(); diff --git a/shadows/framework/Android.bp b/shadows/framework/Android.bp index 3d487fbff..493b84870 100644 --- a/shadows/framework/Android.bp +++ b/shadows/framework/Android.bp @@ -22,8 +22,8 @@ java_library { java_resource_dirs: ["src/main/resources"], javacflags: [ "-Aorg.robolectric.annotation.processing.shadowPackage=org.robolectric", - //"-Aorg.robolectric.annotation.processing.sdkCheckMode=ERROR", - //"-Aorg.robolectric.annotation.processing.validateCompileSdk=true", + "-Aorg.robolectric.annotation.processing.sdkCheckMode=ERROR", + "-Aorg.robolectric.annotation.processing.validateCompileSdk=true", // Uncomment the below to debug annotation processors not firing. //"-verbose", //"-XprintRounds", diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowCameraManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowCameraManager.java index be1e29713..deea97e5a 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowCameraManager.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowCameraManager.java @@ -26,6 +26,7 @@ import javax.annotation.Nullable; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; +import org.robolectric.annotation.InDevelopment; import org.robolectric.annotation.RealObject; import org.robolectric.annotation.Resetter; import org.robolectric.util.ReflectionHelpers; @@ -84,6 +85,7 @@ public class ShadowCameraManager { } @Implementation(minSdk = U.SDK_INT) + @InDevelopment protected CameraDevice openCameraDeviceUserAsync( String cameraId, CameraDevice.StateCallback callback, diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowMotionEvent.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowMotionEvent.java index ba220ffe0..4c1ecd3c9 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowMotionEvent.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowMotionEvent.java @@ -25,6 +25,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.List; import org.robolectric.annotation.HiddenApi; +import org.robolectric.annotation.InDevelopment; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.annotation.InDevelopment; @@ -635,12 +636,14 @@ public class ShadowMotionEvent extends ShadowInputEvent { @Implementation(minSdk = V.SDK_INT) @HiddenApi + @InDevelopment protected static float nativeGetRawXOffset(long nativePtr) { return getNativeMotionEvent(nativePtr).getXOffset(); } @Implementation(minSdk = V.SDK_INT) @HiddenApi + @InDevelopment protected static float nativeGetRawYOffset(long nativePtr) { return getNativeMotionEvent(nativePtr).getYOffset(); } diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeFont.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeFont.java index 23f5b7f86..c643f6782 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeFont.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeFont.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import org.robolectric.annotation.InDevelopment; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.annotation.RealObject; @@ -46,6 +47,7 @@ public class ShadowNativeFont { * This must be deferred starting in Android V. */ @Implementation(minSdk = V.SDK_INT) + @InDevelopment protected static void __staticInitializer__() {} @Implementation(minSdk = S, maxSdk = U.SDK_INT) diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeFontsFontFamily.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeFontsFontFamily.java index d2174f977..b2548db47 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeFontsFontFamily.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeFontsFontFamily.java @@ -5,6 +5,7 @@ import static android.os.Build.VERSION_CODES.S; import static android.os.Build.VERSION_CODES.TIRAMISU; import android.graphics.fonts.FontFamily; +import org.robolectric.annotation.InDevelopment; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.nativeruntime.DefaultNativeRuntimeLoader; @@ -53,6 +54,7 @@ public class ShadowNativeFontsFontFamily { public static class ShadowNativeFontFamilyBuilder { @Implementation(minSdk = V.SDK_INT) + @InDevelopment protected static void __staticInitializer__() {} @Implementation(maxSdk = U.SDK_INT) diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeLineBreaker.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeLineBreaker.java index ce0b92f7e..365f694f7 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeLineBreaker.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeLineBreaker.java @@ -5,6 +5,7 @@ import static android.os.Build.VERSION_CODES.Q; import android.annotation.FloatRange; import android.annotation.IntRange; import android.graphics.text.LineBreaker; +import org.robolectric.annotation.InDevelopment; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.nativeruntime.DefaultNativeRuntimeLoader; @@ -22,6 +23,7 @@ import org.robolectric.versioning.AndroidVersions.V; public class ShadowNativeLineBreaker { @Implementation(minSdk = V.SDK_INT) + @InDevelopment protected static void __staticInitializer__() {} @Implementation(maxSdk = U.SDK_INT) diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePositionedGlyphs.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePositionedGlyphs.java index 5b65023af..15a8c2a11 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePositionedGlyphs.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePositionedGlyphs.java @@ -1,6 +1,7 @@ package org.robolectric.shadows; import android.graphics.text.PositionedGlyphs; +import org.robolectric.annotation.InDevelopment; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.nativeruntime.DefaultNativeRuntimeLoader; @@ -22,6 +23,7 @@ public class ShadowNativePositionedGlyphs { * deferred starting in Android V. */ @Implementation(minSdk = V.SDK_INT) + @InDevelopment protected static void __staticInitializer__() { // deferred } |