Skip to content

Robolectric 4.15

Choose a tag to compare

@hoisie hoisie released this 19 Jun 17:46
· 974 commits to master since this release

Robolectric 4.15 contains a lot of minor improvements, fidelity improvements, bug fixes, and shadow API enhancements. It also introduces the Robolectric Simulator, which makes it possible to launch an interactive preview of Android UI in a Robolectric environment.

NOTE Robolectric 4.15 does NOT support Android Baklava (SDK 36). Baklava will be supported in Robolectric 4.16.

If you encounter any issues, please file them on the GitHub issues page.

A huge thanks to @MGaetan89 and @utzcoz for all of their hard work that went into this release.

What's Changed

The following symbols have been removed in Robolectric 4.15.

Removed symbol Replacement
AndroidManifest#supportsLegacyResourcesMode() N/A
AndroidManifest#supportsBinaryResourcesMode() N/A
ConfigMerger Provider<Config>
DependencyResolver#getLocalArtifactUrls(DependencyJar) DependencyResolver#getLocalArtifactUrl(DependencyJar)
Fs#fileFromPath(String path) Fs#fromUrl(path)
Fs#newFile(File file) file.toPath()Β 
FsFile#getPath() Fs#externalize(this)
FsFile#join(String name) this.resolve(name)
InvokeDynamicClassInstrumentor ClassInstrumentor
ManifestIdentifier(Path, Path, Path, String, List<Path>) ManifestIdentifier(String, Path, Path, Path, List<ManifestIdentifier>)
MavenManifestFactory N/A
PackageItemData#getClassName() PackageItemData#getName()
Provider<T> javax.inject.Provider<T>
Qualifiers#addScreenWidth(String, int) Configuration#screenWidthDp
Qualifiers#addSmallestScreenWidth(String, int) Configuration#smallestScreenWidthDp
Qualifiers#getOrientation(String) Configuration#orientation
Qualifiers#getPlatformVersion(String) Build.VERSION#SDK_INT
Qualifiers#getScreenWidth(String) Configuration#screenWidthDp
Qualifiers#getSmallestScreenWidth(String) Configuration#smallestScreenWidthDp
RoboSettings Set the specific system property directly
Scheduler#idleConstantly(boolean) Scheduler#setIdleState(IdleState)
SdkPicker DefaultSdkPicker
ShadowApplication#addWakeLock(PowerManager.WakeLock wl) ShadowPowerManager.addWakeLock(wl)
ShadowApplication#clearWakeLocks() ShadowPowerManager.clearWakeLocks()
ShadowApplication#getAppWidgetManager() Context#getSystemService(Context.APPWIDGET_SERVICE)
ShadowApplication#getBluetoothAdapter() BluetoothManager#getAdapter()
ShadowApplication#getForegroundThreadScheduler() Robolectric.getForegroundThreadScheduler()
ShadowApplication#getInstance() shadowOf(RuntimeEnvironment.getApplication())
ShadowApplication#getLatestWakeLock() ShadowPowerManager.getLatestWakeLock()
ShadowMap#convertToShadowName(String) N/A
XmlResourceParserImpl(Document, String, String, String, ResourceTable) XmlResourceParserImpl(Document, Path, String, String, ResourceTable)

List of changes

  • Properly disable API 35 on Windows in graphics_tests.yml by @MGaetan89 in #9720
  • Add @inDevelopment annotation to ShadowInputMethodManager#hideSoftInputFromWindow #9721
  • Run tests against API 35 by @MGaetan89 in #9719
  • Update Ubuntu runners to use ubuntu-latest by @MGaetan89 in #9725
  • Make ContextTest euicc tests work on device that doesn't support it by @utzcoz in #9726
  • Bump targetSdk to 35 as much as possible for integration_tests by @utzcoz in #9727
  • Bump error-prone from 2.34.0 to 2.35.1 by @dependabot in #9730
  • Bump com.diffplug.spotless:spotless-plugin-gradle from 7.0.0.BETA3 to 7.0.0.BETA4 by @dependabot in #9731
  • Bump com.ibm.icu:icu4j from 75.1 to 76.1 by @dependabot in #9729
  • Run more tests with api 35 by @utzcoz in #9724
  • Deprecate shadows-multidex by @MGaetan89 in #9728
  • Remove unused dependency and TODO in errorprone by @MGaetan89 in #9736
  • Add basic support for DirectAccessibilityConnection behind a flag #9739
  • Invoke real Android code when AccessibilityNodeInfo.setSource is called #9741
  • Remove unnecessary shadow methods in ShadowAccessibilityWindowInfo #9742
  • Update shadows to adapt to in development Android changes. #9743
  • Concat an ellipsis character when ellipsizing by @utzcoz in #9672
  • Add MotionEventTest#testNoLocationOffsetForNonPointerSource by @utzcoz in #7216
  • Fix ShadowPendingIntent.send() to forward the options passed in when starting activity. #9745
  • Invoke the real AccessibilityWindowInfo.obtain(AccessibilityWindowInfo) #9748
  • Bump roborazzi from 1.29.0 to 1.30.1 by @dependabot in #9753
  • Bump the android-gradle-plugin group with 3 updates by @dependabot in #9749
  • Bump com.googlecode.libphonenumber:libphonenumber from 8.13.48 to 8.13.49 by @dependabot in #9751
  • Bump org.bouncycastle:bcprov-jdk18on from 1.78.1 to 1.79 by @dependabot in #9752
  • Remove deepEquals and hashCode from ShadowAccessibilityWindowInfo #9754
  • Make resources to keep to a command line arg in JarInstrumentor #9755
  • Call AccessibilityNodeInfo.setSource when ShadowAccessibilityNodeInfo.obtain(View) is called #9756
  • Disable native graphics test on Windows in SDK 35 by @hoisie in #9757
  • Turn off fail-fast for the native graphics tests #9760
  • Use real AccessibilityNodeInfo code for AccessibilityNodeInfo.obtain(AccessibilityNodeInfo) #9762
  • Label shadow tests that require LEGACY graphics mode. #9763
  • Add back missing useRealAni check in AccessibilityNodeInfo.obtain(AccessibilityNodeInfo) #9765
  • Remove StrictEqualityWindowWrapper from ShadowAccessibilityWindowInfo #9767
  • Bump the androidx group with 5 updates by @dependabot in #9750
  • Add additional check for AccessibilityNodeInfo.setQueryFromProcessEnabled #9769
  • Remove boundsInScreen logic in ShadowAccessibilityNodeInfo #9770
  • Remove unused and incorrect APIs in ShadowAccessibilityNodeInfo #9771
  • Stop opening an AssetInputStream twice. #9772
  • Improve error reporting with AttributeSetBuilder + native resources. #9773
  • Support LEGACY graphics + NATIVE resources intersection. #9774
  • Native resources mode cleanup. #9764
  • Disable AccessibililityNodeInfo shadow APIs for direct connections #9775
  • Use applyConfigurationToResources to update resources #9776
  • Sort Gradle modules by @MGaetan89 in #9780
  • Remove the --info flag from Gradle tasks by @MGaetan89 in #9782
  • Globally enable Gradle's parallel execution by @MGaetan89 in #9783
  • ctesque: Wait display rotation with timeout before checking rotation by @utzcoz in #9781
  • Remove unused and incorrect APIs in ShadowAccessibilityNodeInfo #9784
  • Clear ShadowAccessibilityWindowInfo fields during recycle #9785
  • Revert "ci: Bump latest API level to 35 for Emulator testing" by @MGaetan89 in #9787
  • Enable Gradle's File System Watching on CI by @MGaetan89 in #9786
  • Merge :integration_tests:agp:testsupport into :integration_tests:agp by @MGaetan89 in #9778
  • Bump roborazzi from 1.30.1 to 1.32.2 by @dependabot in #9789
  • Defer to real framework code for AccessibilityWindowInfo.getWindowId #9791
  • Update to Gradle 8.11 by @MGaetan89 in #9790
  • Fix ShadowDisplayEventReceiver for Android Baklava. #9794
  • Update the Android V SDK to build 12650502 by @hoisie in #9796
  • Remove :integration_tests:agp module by @MGaetan89 in #9788
  • Add missing :integration_tests:testparameterinjector by @MGaetan89 in #9737
  • Test merge by @hoisie in #9797
  • Document support for V in readme by @yschimke in #9801
  • Use ClassName annotation for ShadowPackageInstaller.requestUserPreapp… by @hoisie in #9798
  • Fix SelfAssertion ErrorProne error in ShadowingTest by @hoisie in #9799
  • Mark AndroidVersions.V as released by @MGaetan89 in #9800
  • Only checking getWindowId for Robolectric's AccessibilityNodeInfoTest by @utzcoz in #9805
  • Cleanup integration_tests/androidx module by @MGaetan89 in #9803
  • Add tests to BuildCompatTest by @MGaetan89 in #9804
  • Reset static state in ShadowLegacyChoreographer between tests #9806
  • Add shadow implementation of SubscriptionManager's APIs to convert from a slot ID -> subscription ID. #9807
  • test: Add compat test for retrieving PackageInstaller by @utzcoz in #9808
  • test: Simply Robolectric checking for AccessibilityNodeInfoTest by @utzcoz in #9810
  • Bump com.googlecode.libphonenumber:libphonenumber from 8.13.49 to 8.13.50 by @dependabot in #9813
  • Fix warnings in the junit module by @MGaetan89 in #9814
  • Fix warnings in the nativeruntime module by @MGaetan89 in #9815
  • Remove unused ShadowAccessibilityNodeInfo.areThereUnrecycledNodes #9817
  • Remove TODOs in Roborazzi tests by @MGaetan89 in #9816
  • Fix regression in loading typefaces in legacy graphics by @hoisie in #9819
  • test: Add composeui integration testing module by @utzcoz in #9811
  • Replace use of ReflectionHelpers with reflector in ShadowPausedMessageQueue. #9820
  • Remove Multidex modules by @MGaetan89 in #9809
  • Use the real WakeLock constructor in PowerManager.newWakeLock #9828
  • Remove unnecessary throws declarations in RoboMenuItemTest by @MGaetan89 in #9827
  • Update google-java-format to 1.25.0 by @MGaetan89 in #9829
  • Add get/setShape() support to ShadowGradientDrawable + ctesque by @MGaetan89 in #9818
  • test: Update ComposeUI FontTest with custom font by @utzcoz in #9830
  • Add missing implementation in RoboMenuItem by @MGaetan89 in #9822
  • Migrate nullability annotations to javax.annotation by @MGaetan89 in #9832
  • Revert ellipsis supporting by @utzcoz in #9834
  • Fix NullPointerException in RoboMenuItem by @MGaetan89 in #9837
  • Fix warnings in some integration_tests module by @MGaetan89 in #9833
  • Bump androidx.compose:compose-bom from 2024.10.01 to 2024.11.00 in the androidx group by @dependabot in #9838
  • Bump roborazzi from 1.32.2 to 1.34.0 by @dependabot in #9840
  • Bump error-prone from 2.35.1 to 2.36.0 by @dependabot in #9839
  • Default robolectric.configurationChangeFix to true #9845
  • Add Compose test to check that FocusRequester is initialized by @MGaetan89 in #9847
  • Invoke real framework code in ShadowCountDownTimer by @MGaetan89 in #9848
  • Fix warnings in integration_tests:nativegraphics by @MGaetan89 in #9849
  • Add tests for ShadowDisplayManager static fields by @Devashishbasu in #9359
  • Fix warnings in some integration_tests modules by @MGaetan89 in #9850
  • Fix null checking warnings for ShadowFileIntegrityManagerTest by @utzcoz in #9851
  • Bump com.googlecode.libphonenumber:libphonenumber from 8.13.50 to 8.13.51 by @dependabot in #9853
  • Bump kotlin from 2.0.21 to 2.1.0 by @dependabot in #9854
  • Fix CatchFail warning for ShadowWifiP2pManagerTest by @utzcoz in #9852
  • Add a way to use the real TextUtils.ellipsize #9861
  • Add DeathRecipient methods to ShadowBinder #9862
  • Use nano second precision in PAUSED SystemClock. #9864
  • Fix warnings in integration_tests:androidx_test by @MGaetan89 in #9867
  • Fix warnings in some modules by @MGaetan89 in #9870
  • Migrate to Java8 APIs from the javax.lang.model package by @MGaetan89 in #9871
  • Bump roborazzi from 1.34.0 to 1.36.0 by @dependabot in #9874
  • Bump the android-gradle-plugin group with 3 updates by @dependabot in #9873
  • Add setBroadcastSubscriber and getBroadcastSubscriberMap in ShadowStatsManager. #9869
  • Update google-java-format to 1.25.1 by @MGaetan89 in #9881
  • Remove reflection calls in ShadowUsageStatsManager #9883
  • Make BroadcastSubscriberKey class public. #9885
  • Update google-java-format to 1.25.2 by @MGaetan89 in #9886
  • Add a test case for scrolling a RecyclerView #9888
  • Disable ShadowTextUtils.ellipsize when RNG is enabled #9889
  • Migrate deprecated initMocks to openMocks by @utzcoz in #9891
  • Include trailing dots in packages to never acquire #9892
  • Allow shadow to function in aosp/main as well as goog/main. #9894
  • Add a hasMethod to ReflectionHelper for use in AssociationInfoBuilder. #9895
  • Bump roborazzi from 1.36.0 to 1.37.0 by @dependabot in #9897
  • Bump com.googlecode.libphonenumber:libphonenumber from 8.13.51 to 8.13.52 by @dependabot in #9898
  • Bump androidx.compose:compose-bom from 2024.11.00 to 2024.12.01 in the androidx group by @dependabot in #9896
  • aosp/main requires @inDevelopment openCameraDeviceUserAsyncPostV #9899
  • Use reflection to call AssociationInfo.Builder#setTag. #9900
  • Update to Gradle 8.12 by @MGaetan89 in #9902
  • Fix small warnings in the resources module by @MGaetan89 in #9903
  • Bump org.jetbrains.kotlinx:kotlinx-coroutines-android from 1.9.0 to 1.10.1 by @dependabot in #9905
  • Bump guava-jre from 33.3.1-jre to 33.4.0-jre by @dependabot in #9904
  • Fix small warnings in the resources module by @MGaetan89 in #9906
  • Fix typo in ActivityData#isClearTaskOnLaungh() by @MGaetan89 in #9907
  • Use standard library methods and collection APIs by @MGaetan89 in #9908
  • Bump roborazzi from 1.37.0 to 1.38.0 by @dependabot in #9910
  • Fix typo in ResourceIds by @MGaetan89 in #9909
  • Remove unnecessary variables by @MGaetan89 in #9911
  • Fix warnings in resources by @MGaetan89 in #9872
  • Fix warnings in the shadowapi module by @MGaetan89 in #9912
  • Fix warnings in the sandbox module by @MGaetan89 in #9914
  • Fix warnings in the utils module by @MGaetan89 in #9915
  • Fix typo in ShadowRangingResult. #9916
  • Fix warnings in :shadows:httpclient by @MGaetan89 in #9918
  • Remove unused dependencies by @MGaetan89 in #9919
  • Fix warnings in :shadows:playservices by @MGaetan89 in #9920
  • Bump roborazzi from 1.38.0 to 1.39.0 by @dependabot in #9921
  • Update shadow TimeManager for Baklava. #9923
  • Update ShadowSecureElementService Channel implementation to throw IllegalStateException when closed. #9925
  • Sync with ag/main #9926
  • Adds support for shadowing ActivityManager.setDeviceLocales() #9927
  • Update parsing of res table for shared library entries #9922
  • Use WebSettings.getDefaultUserAgent() from RoboWebSetting if no custom User Agent is set. #9929
  • Return PERMISSION_GRANTED to IPermissionManager#getPermissionRequestState calls. #9931
  • Remove unnecessary throws declarations in robolectric by @MGaetan89 in #9930
  • Adapt to DisplayManagerGlobal.EVENT_DISPLAY_CHANGED rename. #9936
  • Upstreaming of aosp/3436440 #9937
  • Switch to use java-version-file for action/setup-java by @utzcoz in #9932
  • Remove unused ResourceTestUtil by @MGaetan89 in #9934
  • Fix typos in the :robolectric module by @MGaetan89 in #9933
  • Add nullability annotation to the :robolectric module by @MGaetan89 in #9935
  • Fix targetSdkVersion from Config/manifest override by @utzcoz in #9938
  • Update assertions in the :robolectric module by @MGaetan89 in #9939
  • Remove unnecessary casts in the :robolectric module by @MGaetan89 in #9941
  • Add/remove final/static modifiers in the :robolectric module by @MGaetan89 in #9942
  • Fix various warnings in the :robolectric module by @MGaetan89 in #9943
  • ci: Remove JDK version from step name by @utzcoz in #9946
  • Use ApplicationProvider.getApplicationContext() instead of buildActivity() by @MGaetan89 in #9944
  • Bump the android-gradle-plugin group with 3 updates by @dependabot in #9947
  • Bump com.diffplug.spotless:spotless-plugin-gradle from 7.0.0.BETA4 to 7.0.1 by @dependabot in #9948
  • Temporaily define ro.vendor.api_level and register corresponding system features. #9951
  • Support getLatency() for ShadowAudioTrack #9954
  • Add ShadowSettings.ShadowSecure.remove #9955
  • Adds support for the set, get and remove widget preview methods. #9956
  • Add badly needed Javadoc for HelperTestRunner #9960
  • Clean up Truth assertions when using isTrue #9962
  • Add migration info to ShadowContentResolver deprecated methods by @MGaetan89 in #9964
  • Use org.junit.Assert instead of junit.framework.Assert by @MGaetan89 in #9963
  • Use lambdas and method references in :robolectric by @MGaetan89 in #9957
  • Add ShadowArrayAdapter#getDropDownViewResourceId() by @MGaetan89 in #9961
  • Use Truth's hasSize() to check iterable size by @MGaetan89 in #9967
  • Enable native SQLite on Windows by @MGaetan89 in #9924
  • Bump androidx.compose:compose-bom from 2024.12.01 to 2025.01.00 in the androidx group by @dependabot in #9971
  • Bump com.diffplug.spotless:spotless-plugin-gradle from 7.0.1 to 7.0.2 by @dependabot in #9973
  • Bump com.googlecode.libphonenumber:libphonenumber from 8.13.52 to 8.13.53 by @dependabot in #9974
  • Bump org.bouncycastle:bcprov-jdk18on from 1.79 to 1.80 by @dependabot in #9972
  • Fix various typos by @MGaetan89 in #9970
  • Remove redundant @TextLayoutMode annotation by @MGaetan89 in #9975
  • Avoid updating the SQLite mode in SandboxManager.getAndroidSandbox #9977
  • Add getWallpaperId(int witch) in ShadowWallpaperManager #9978
  • Bump Truth to 1.4.4 by @MGaetan89 in #9981
  • Bump Jacoco to 0.8.12 by @MGaetan89 in #9982
  • Upgrade Hamcrest to 3.0 by @MGaetan89 in #9980
  • Update Mockk to 1.13.16 by @MGaetan89 in #9985
  • Add basic @ClassRule support for Robolectric tests #9986
  • Lazily initialize member variables in RobolectricTestParameterInjector.DelegateHelperTestRunner #9987
  • Make Choreographer frame data more accurate. #9991
  • Support copies of bytes as well. #9992
  • Add missing final modifier in :shadows:framework by @MGaetan89 in #9993
  • Remove redundant casts in :shadows:framework by @MGaetan89 in #9994
  • Replace C-style array declaration with Java style in :shadows:framework by @MGaetan89 in #9995
  • Remove explicit type declaration in :shadows:framework by @MGaetan89 in #9996
  • Bump Gradle to 8.12.1 by @MGaetan89 in #9997
  • Replace anonymous classes with lambdas in :shadows:framework by @MGaetan89 in #9998
  • Update links to reference implementation in AOSP by @MGaetan89 in #10005
  • Fix broken references in Javadoc in :shadows:framework by @MGaetan89 in #10003
  • Add setMagnificationConfig and getMagnificationConfig in ShadowMagnificationController #10006
  • Fix task name in ShadowAlwaysOnHotwordDetector by @MGaetan89 in #10000
  • Bump roborazzi from 1.39.0 to 1.40.1 by @dependabot in #10007
  • Bump kotlin from 2.1.0 to 2.1.10 by @dependabot in #10008
  • Add missing nullability annotations to :shadows:framework by @MGaetan89 in #9999
  • Update outdated minSdk parameters by @MGaetan89 in #10009
  • Bump mockito from 4.11.0 to 5.15.2 by @MGaetan89 in #9984
  • ctesque: Extract application context to test class' initialization by @utzcoz in #10010
  • Remove redundant variable initialization in :shadows:framework by @MGaetan89 in #10002
  • Add getIdleConnectionTimeout and getOpenParams to ShadowSQLiteOpenHelper #10004
  • Replace JavaX Annotation jsr250-api with javax.annotation-api by @MGaetan89 in #9983
  • Update ShadowNativeColorSpaceTest from AOSP by @MGaetan89 in #10011
  • Update generation of Shadows.java by @MGaetan89 in #9917
  • Don't access static fields via instance in :shadows:framework by @MGaetan89 in #10018
  • Use @RequiresApi instead of @TargetApi in :shadows:framework by @MGaetan89 in #10019
  • Bump androidx.compose:compose-bom from 2025.01.00 to 2025.01.01 in the androidx group by @dependabot in #10020
  • Bump com.google.code.gson:gson from 2.11.0 to 2.12.1 by @dependabot in #10021
  • Bump com.googlecode.libphonenumber:libphonenumber from 8.13.53 to 8.13.54 by @dependabot in #10022
  • Add ContentResolver#notifyChange(Collection<Uri>, ContentObserver, int) by @MGaetan89 in #9966
  • Remove highly obsolete org.robolectric.util.Join #10026
  • [:shadows:framework] Update collections/arrays usages by @MGaetan89 in #10023
  • Delete the obsolete org.robolectric.util.Consumer #10030
  • [:shadows:framework] Remove redundant variable usages by @MGaetan89 in #10027
  • Remove Robolectric Util.parseInt #10033
  • Ignore error logs from FeatureFlagsImpl. #10034
  • Added some missing listeners notification when tests are not passing. #10039
  • Add a temporary way to trigger the back button via a right-click popup menu #10040
  • chore: Configure Renovate by @renovate in #10038
  • Set the default Choreographer frame delay in Robolectric to 15 ms (60 fps) #10042
  • Throws Exceptions when registerReceiver has unexpected exported flags by @utzcoz in #9940
  • Fix generic usage on AsyncTask shadows by @MGaetan89 in #10043
  • Fix various warnings in :shadows:framework by @MGaetan89 in #10028
  • Deprecate AsyncTask and AsyncTaskLoader shadows by @MGaetan89 in #10044
  • Address a couple of warnings in :robolectric by @MGaetan89 in #10045
  • Restrict snapshot release to the main repo by @MGaetan89 in #10046
  • Update validate_commit_message.yml to use renovate[bot] by @MGaetan89 in #10053
  • Update dependency com.googlecode.libphonenumber:libphonenumber to v8.13.55 by @renovate in #10049
  • Update Android Gradle Plugin by @renovate in #10048
  • Update roborazzi to v1.42.0 by @renovate in #10052
  • Update dependency org.yaml:snakeyaml to v2.4 by @renovate in #10051
  • Add FeatureFlagsImplExport to the list of unpreventable log tags. #10054
  • Ignore Play Services in Renovate by @MGaetan89 in #10056
  • Update AndroidX by @renovate in #10050
  • ShadowMediaCodec must reset state in native_start #10059
  • Replace usages of ImmutableMap#build() with ImmutableMap#buildOrThrow() by @MGaetan89 in #10064
  • Update dependency io.gitlab.arturbosch.detekt to v1.23.8 by @renovate in #10066
  • Remove dead code in Reflector and UnsafeAccess #10071
  • Fix ShadowUsageStatsManager in gradle environments #10073
  • Add test case to ShadowHandlerTest by @MGaetan89 in #10076
  • Avoid using SetSystemPropertyRule in ctesque tests #10077
  • Add some small changes to AndroidConfigurer #10078
  • Add custom instrumentation configuration for the Simulator #10079
  • Install a fake MediaProvider in Robolectric for APIs >= Q. #10072
  • Use DisplayManager to get the default display in ShadowDisplay.getDefaultDisplay #10081
  • Update Renovate to not update Apache HttpComponents by @MGaetan89 in #10082
  • Add ShadowTelephonyManager#getIccAuthentication() and ShadowTelephonyManager#setIccAuthentication() by @MGaetan89 in #10065
  • Remove FsFile from :resources by @MGaetan89 in #10047
  • Update Android Gradle Plugin by @renovate in #10084
  • Update dependency io.mockk:mockk to v1.13.17 by @renovate in #10086
  • Update roborazzi to v1.43.0 by @renovate in #10089
  • Update AndroidX by @renovate in #10087
  • Configure Renovate to ignore androidx.fragment:fragment in :shadows:playservices by @MGaetan89 in #10091
  • Update dependency com.googlecode.libphonenumber:libphonenumber to v9 by @renovate in #10090
  • Update dependency gradle to v8.13 by @renovate in #10088
  • Add ShadowAudioTrack support for AudioTrack.getBufferSizeInFrames() #10093
  • Add support for CardEmulation pollingLoopPatternFilter methods #10092
  • Add a extension mechanism to the simulator to let you customize the popup menu #10097
  • Remove InvokeDynamicClassInstrumentor by @MGaetan89 in #10083
  • Update mockito monorepo to v5.16.0 by @renovate in #10101
  • Update Android Gradle Plugin by @renovate in #10100
  • Update AGP group in Renovate configuration by @MGaetan89 in #10102
  • Remove the deprecated ShadowMap.convertToShadowName(String) method by @MGaetan89 in #10095
  • Remove deprecated DependencyResolver#getLocalArtifactUrls(DependencyJar) by @MGaetan89 in #10099
  • Update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.1 by @renovate in #10107
  • Update mockito monorepo to v5.16.1 by @renovate in #10108
  • Remove deprecated methods in AndroidManifest by @MGaetan89 in #10098
  • Support Comment and Whitespace Stripping in Robolectric's PluginFinder for META-INF/services/* file reading #10110
  • Remove unused robolectric.disableInitialAwakenScrollBars flag #10111
  • Remove the SdkPicker class by @MGaetan89 in #10105
  • Add isBackupServiceActive to ShadowBackupManager #10109
  • Remove the RemoteAnimationTarget parameter from BackMotionEvent's call. #10112
  • Add an API to disable Robolectric's ShadowView.AnimationRunner #10113
  • Update PackageManager shadows to correctly perform getApplicationInfo() contract when th package is not present. #10114
  • Remove deprecated methods in Fs by @MGaetan89 in #10106
  • Update deprecation message for Robolectric.AttributeSetBuilder by @MGaetan89 in #10115
  • Enable realistic View animations in the simulator #10117
  • Inject a Motion event at simulator startup #10118
  • Update kotlin monorepo to v2.1.20 by @renovate in #10127
  • Update roborazzi to v1.43.1 by @renovate in #10129
  • Update dependency androidx.compose:compose-bom to v2025.03.00 by @renovate in #10130
  • Update dependency com.ibm.icu:icu4j to v77 by @renovate in #10131
  • Update error.prone to v2.37.0 by @renovate in #10132
  • Update Dockerfile for devcontainer by @MGaetan89 in #10133
  • CellIdentityNrBuilder's default NCI should be UNAVAILABLE_LONG #10134
  • Fix function signature of BackMotionEvent for B and the Parcel of StorageStats #10135
  • Fixes pulled from Android Google. #10136
  • Simplify jar arguments to SimulatorMain #10139
  • Add support to ShadowSurfaceView to emit onSurfaceChanged() calls #10137
  • Add support for CellInfo construction for GSM and WCDMA #10142
  • Update test case in FocusRequesterTest by @MGaetan89 in #10144
  • Remove deprecated ManifestIdentifier constructor by @MGaetan89 in #10121
  • Update guava monorepo to v33.4.6-jre by @renovate in #10126
  • ShadowParcelFileDescriptor: Improve dup() for CreatePipe by reopening the file #10145
  • Update to google-java-format 1.26.0 by @MGaetan89 in #10146
  • Update Android Gradle Plugin by @renovate in #10147
  • Update dependency androidx.compose:compose-bom to v2025.03.01 by @renovate in #10148
  • Update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.2 by @renovate in #10150
  • Update asm to v9.8 by @renovate in #10151
  • Add a unit test for CollectionInfo.obtain() by @MGaetan89 in #10152
  • Replace deprecated usages of ExpectedException.none() by @MGaetan89 in #10149
  • ShadowServiceManager gets Bluetooth service name from BluetoothAdapter if needed #10153
  • Fix order of for processing ShadowMediaCodec buffer queues #10155
  • Remove unnecessary Lollipop references by @MGaetan89 in #10157
  • Deprecate the :shadows:playservices module by @MGaetan89 in #10124
  • Remove TestUtil.resetSystemProperty #10161
  • Add receiver export flag validation behind a flag by @hoisie in #10160
  • Use fully-qualified RuntimeEnvironment class name in ShadowProviderGenerator by @hoisie in #10159
  • Fix shadows for AlwaysOnHotwordDetector.RefreshAvailabil{,i}tyTask by @hoisie in #10162
  • Shadow of TelephonyManager: Add isDeviceVoiceCapable, getVoiceActivationState, and getDataActivationState methods. #10140
  • Update dependency org.jacoco:org.jacoco.agent to v0.8.13 by @renovate in #10163
  • Update mockito monorepo to v5.17.0 by @renovate in #10165
  • Update dependency androidx.recyclerview:recyclerview to v1.4.0 by @renovate in #10164
  • Update ShadowSatelliteManager for new Android B function changes. #10170
  • Add a builder function to set the SDK instead of always taking latest. #10172
  • Update ShadowCameraDeviceImpl constructor to apply to baklava+. #10177
  • Extend support of ShadowRoleManager to additional API #10178
  • Add test to PersistableBundle by @MGaetan89 in #10180
  • Fix RobolectricTestRunnerMultiApiTest by @MGaetan89 in #10167
  • Remove deprecated methods in Qualifiers by @MGaetan89 in #10179
  • Use Objects.requireNonNull() instead of Preconditions.checkNotNull() from Guava by @MGaetan89 in #10175
  • Update error on AttributeSetBuilderImpl to point users towards API level. #10181
  • Remove the deprecated XmlResourceParserImpl constructor. by @MGaetan89 in #10182
  • Remove some deprecated methods in ShadowApplication by @MGaetan89 in #10183
  • Update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.3 by @renovate in #10186
  • Update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.3 by @renovate in #10185
  • Remove deprecated ShadowApplication#getAppWidgetManager() method by @MGaetan89 in #10184
  • Migrate to Objects#requireNonNull() by @MGaetan89 in #10188
  • Get advertisement data from ShadowBluetoothAdvertiser. #10189
  • Remove deprecated RoboSettings by @MGaetan89 in #10187
  • fixed negative ids that which cause ArrayOutOfBounds by @alphapaca in #10104
  • Remove deprecated PackageItemData#getClassName() method by @MGaetan89 in #10190
  • Remove deprecated ShadowApplication#getBluetoothAdapter() method by @MGaetan89 in #10191
  • Fix two potential ConcurrentModificationExceptions in ShadowLauncherApps #10194
  • Use CopyOnWriteArrayList for ShadowDisplayManagerGlobal.callbacks #10195
  • Remove ShadowApplication.getSingleton #10196
  • Update RoboSettings to check system property at method invocation #10197
  • Mark Android 14 as released by @MGaetan89 in #10198
  • Add Robolectric ShadowUserManager#isAdminUser #10200
  • Remove the deprecated ConfigMerger class by @MGaetan89 in #10199
  • Restore the intent of a RobolectricTestRunnerMultiApiTest test by @hoisie in #10203
  • Remove custom Provider class by @MGaetan89 in #10204
  • Add basic build file for the simulator by @hoisie in #10205
  • Migrate simulator/build.gradle to Kotlin DSL by @MGaetan89 in #10207
  • Un-deprecate ShadowBluetoothAdapter.setEnabled #10210
  • Add new nativeSetConfiguration native method #10214
  • Remove deprecated Scheduler#idleConstantly() by @MGaetan89 in #10213
  • Update dependency io.mockk:mockk to v1.14.0 by @renovate in #10217
  • Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-android to v1.10.2 by @renovate in #10215
  • Update guava monorepo to v33.4.8-jre by @renovate in #10216
  • Update error.prone to v2.38.0 by @renovate in #10219
  • Update dependency net.ltgt.errorprone to v4.2.0 by @renovate in #10218
  • Update dependency com.google.code.gson:gson to v2.13.0 by @renovate in #10221
  • Ensure the native runtime is loaded when HardwareRenderer.preload is called #10222
  • Remove deprecated ShadowApplication#getForegroundThreadScheduler() by @MGaetan89 in #10212
  • Update AndroidX by @renovate in #10220
  • Remove deprecated ShadowApplication#getInstance() by @MGaetan89 in #10206
  • Add support for createBond for Le bond mechanism in Roboelectric Shadows. #10223
  • Deprecate various Scheduler-related public APIs in Robolectric #10224
  • Deprecate ShadowApplication.runBackgroundTasks #10225
  • Avoid the use of ImmutableMap.buildOrThrow in ShadowSettings.ShadowGlobal #10227
  • Add method to set SKU in ShadowBuild #10228
  • Remove unused resources from integration_tests:nativegraphics by @MGaetan89 in #9835
  • Add tests for ShadowContextImpl#setSystemService() by @MGaetan89 in #10193
  • Support @empty/@null in XmlResourceParserImpl by @MGaetan89 in #10211
  • Update Android Gradle Plugin by @renovate in #10232
  • Update AndroidX by @renovate in #10233
  • Update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.4 by @renovate in #10234
  • Update dependency com.google.code.gson:gson to v2.13.1 by @renovate in #10235
  • Remove deprecated Config#packageName() by @MGaetan89 in #10238
  • Handle short name version when the SDK is not finalized #10241
  • Use a valid PackageManager.getApplicationIcon by default #10242
  • Split out TestAccessibilityService class which is used in multiple Shadow tests. #10243
  • Update dependency gradle to v8.14 by @renovate in #10236
  • Remove unused ThrowingManifest from tests by @MGaetan89 in #10240
  • Remove deprecated Config#resourceDir() by @MGaetan89 in #10239
  • ShadowNsdManager testability enhancements. #10247
  • Add sim capabilities and activation state related shadows functions #10245
  • Make it possible for ShadowContentResolver to return FileNotFound in tests. #10249
  • Remove unnecessary config block in DeployedRoboJavaModulePlugin by @hoisie in #10248
  • Remove deprecated Config#libraries() by @MGaetan89 in #10250
  • Remove deprecated Config#assetDir() by @MGaetan89 in #10246
  • Fix CheckReturnValue lint error in ShadowAudioEffectTest #10251
  • Update ShadowBluetoothAdatper.setScanMode to be public #10252
  • Adds robolectric shadow classes for AccessibilityInputConnection and InputMethod #10230
  • Add a highly experimental gradle plugin to run the Robolectric simulator #10258
  • Update dependency io.mockk:mockk to v1.14.2 by @renovate in #10259
  • Remove deprecated MavenManifestFactory by @MGaetan89 in #10254
  • Migrate manual system properties to SetSystemPropertyRule by @MGaetan89 in #10257
  • gradle: Migrate deprecated device to allDevices for GMD by @utzcoz in #10261
  • Use Gradle API to select AAR dependencies by @MGaetan89 in #10264
  • Close the SQLiteDatabase associated with FakeMediaProvider after tests #10265
  • Remove unnecessary @Config(manifest) usages by @MGaetan89 in #10231
  • Update google-java-format to 1.27.0 by @MGaetan89 in #10267
  • Add a simple repro case for the MoveTo Path issue. #9989
  • Support API format using WindowRelayoutResult to pass parameters #10272
  • Simplify MouseHandler #10273
  • Simulator misc improvements by @utzcoz in #10277
  • Reland SDK35 for Android Emulator testing on CI by @utzcoz in #9945
  • fix(deps): update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.5 by @renovate in #10280
  • chore(deps): update dependency com.android.library to v8.10.0 by @renovate in #10281
  • fix(deps): update dependency com.android.tools:common to v31.10.0 by @renovate in #10283
  • fix(deps): update dependency androidx.compose:compose-bom to v2025.05.00 by @renovate in #10282
  • Increase PR limit for Renovate by @MGaetan89 in #10284
  • integration_tests: Exclude androidTest for modules that not required by @utzcoz in #10279
  • Add getDefaultSensor(int type, boolean wakeUpSensor) and corresponding tests. #10276
  • Define a builder for telephony.SignalStrength #10286
  • Use Gradle Kotlin DSL in Simulator Gradle Plugin by @MGaetan89 in #10278
  • Remove nonsensical helper method from ShadowAlertDialog #10290
  • Synchronize RenderNodeAnimator with Robolectric's Choreographer #10289
  • Adjust to post-Baklava indevelopment Android framework changes. #10293
  • Remove SoftThreadLocal #10296
  • Support upcoming resized signature #10297
  • Replace provider created in ShadowWebView with a deep proxy. #10298
  • Remove the deploy-snapshot.sh script by @MGaetan89 in #10300
  • fix(deps): update kotlin monorepo to v2.1.21 by @renovate in #10301
  • Add ShadowRemoteViewsAdapter #9965
  • Remove the release-notes-template.md template by @MGaetan89 in #10304
  • Remove the update-cpp.sh script by @MGaetan89 in #10303
  • Remove useRealScrolling check in ShadowAbsListView #10306
  • Change ShadowSensorManager.getDefaultSensor to retrieve the sensor based on wakeUpSensor flag instead of setting. #10307
  • Add functionality to block shadow BluetoothSocket connections until other events. #10308
  • Fix failing test on master by @MGaetan89 in #10305
  • Add method for injecting custom IOExceptions. #10309
  • Add property to allow tests to declare platform permissions #10312
  • Add configuration for Gemini Code Assist by @MGaetan89 in #10311
  • Add a top-level Choreographer frame callback while the simulator is running #10313
  • Update dependency com.googlecode.libphonenumber:libphonenumber to v9.0.6 by @renovate in #10317
  • Update dependency gradle to v8.14.1 by @renovate in #10318
  • Add write descriptor function for API 33 in ShadowBluetoothGatt by @KeithYokoma in #10310
  • Update mockito monorepo to v5.18.0 by @renovate in #10319
  • Update AndroidX by @renovate in #10316
  • Update @Config's minSdk in some tests by @MGaetan89 in #10321
  • Remove obsolete InDevelopment annotation from shadow methods. #10322
  • Merge branch 'google' into 'master' by @hoisie in #10323
  • Make Robolectric simulator background white and clear the screen. #10274
  • Update technique to locate the local resource apk by @hoisie in #10326
  • Add some additional JVM flags for the simulator by @hoisie in #10327
  • Fix Java code style by @MGaetan89 in #10328
  • Add implementation for removeBond to ShadowCompanionDeviceManager. #10325
  • Use Config.OLDEST_SDK in tests instead of hardcoded value by @MGaetan89 in #10331
  • Add more meaningful comments for ShadowUIModeManagerTest by @utzcoz in #10332
  • Reduce public fields for ShadowUIModeManager by @utzcoz in #10333
  • Update Android Gradle Plugin by @renovate in #10334
  • Update mcr.microsoft.com/devcontainers/base Docker tag to v2 by @renovate in #10338
  • Update roborazzi to v1.44.0 by @renovate in #10337
  • Update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.4 by @renovate in #10336
  • Enable SpannedString assertion in ResourcesTest by @MGaetan89 in #10341
  • Remove v14 qualifier by @MGaetan89 in #10345
  • Replace PowerMock's Xstream module with Objenesis by @MGaetan89 in #10346
  • Fix variable name in GetInstallerPackageNameModeConfigurer#valueFrom() by @MGaetan89 in #10344
  • Update ActivityData#getTargetAttr() to use its xmlns argument by @MGaetan89 in #10343
  • Add missing SCM metadata when generating POM files by @hoisie in #10348
  • Rename ShadowUIModeManager to ShadowUiModeManager by @utzcoz in #10340
  • Update the SimulatorPlugin for publishing in the Gradle Plugin Portal by @hoisie in #10349
  • Allow for a gradual migration from ShadowUIModeManager to ShadowUiModeManager by @hoisie in #10352
  • Refactor test configuration into a shared function by @MGaetan89 in #10351
  • Reuse ShadowUiModeManager in ShadowUiModeManagerTest by @MGaetan89 in #10356
  • Deduplicate MetaData#getColor() and ResourceHelper#getColor() by @MGaetan89 in #10355
  • Provide an initial value for DeprecatedTestRunnerDefaultConfigProvider.globalConfig #10357
  • Wire up the VirtualDevice#getDisplayIds() in the ShadowVirtualDeviceManager. #10358
  • Remove unused field in Sandbox by @MGaetan89 in #10354
  • Remove the call to setAlwaysConsumeSystemBars in ShadowWindowManagerImpl #10363
  • Revert recent ShadowUIManager rename changes by @utzcoz in #10362
  • Temporarily make ShadowUIModeManager.currentModeType public by @hoisie in #10364
  • Set the simulator-gradle-plugin version to 1.0-SNAPSHOT by @hoisie in #10366

New Contributors

Full Changelog: robolectric-4.14.1...robolectric-4.15