Status Update
Comments
jo...@adidas.com <jo...@adidas.com> #2
Branch: androidx-main
commit 57ca221882695bd6a52549f4d9ea3b812e6fe87c
Author: Simon Schiller <simonschiller@users.noreply.github.com>
Date: Mon Mar 22 16:09:30 2021
[GH] [FragmentStrictMode] Detect <fragment> tag usage
## Proposed Changes
- Detect `<fragment>` tag usage inside XML layouts
## Testing
Test: See `FragmentStrictModeTest#detectFragmentTagUsage`
## Issues Fixed
Fixes: 153738235
This is an imported pull request from
Resolves #141
Github-Pr-Head-Sha: 4ea052596e4341b9f11bcf335e2bc38045a91f19
GitOrigin-RevId: 62e7487aa4874eef6bb556490e193717cf937251
Change-Id: Iae48578e85e4e4897f806d7ade2e2a660adf9479
M fragment/fragment/api/public_plus_experimental_current.txt
M fragment/fragment/api/restricted_current.txt
M fragment/fragment/src/androidTest/java/androidx/fragment/app/strictmode/FragmentStrictModeTest.kt
M fragment/fragment/src/main/java/androidx/fragment/app/FragmentLayoutInflaterFactory.java
M fragment/fragment/src/main/java/androidx/fragment/app/strictmode/FragmentStrictMode.java
A fragment/fragment/src/main/java/androidx/fragment/app/strictmode/FragmentTagUsageViolation.java
jb...@google.com <jb...@google.com>
j....@gmail.com <j....@gmail.com> #3
Any update on this ticket?
sh...@gmail.com <sh...@gmail.com> #4
fl...@backmarket.com <fl...@backmarket.com> #5
We're having the same issue, only happening on Android 14 devices. Disabling the predictive back gesture fixes that issue, waiting for a fix on the fragment library.
<application
android:enableOnBackInvokedCallback="false"
jb...@google.com <jb...@google.com> #6
Does this still happen with Fragment 1.8.2
?
With no repro project, we can't verify on our end yet.
fl...@backmarket.com <fl...@backmarket.com> #7
I could reproduce the issue (but it's still hard to reproduce).
I got this stack trace with version 1.8.2:
java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 0
at jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
at java.util.Objects.checkIndex(Objects.java:359)
at java.util.ArrayList.get(ArrayList.java:434)
at androidx.fragment.app.FragmentManager.prepareBackStackState(FragmentManager.java:2552)
at androidx.fragment.app.FragmentManager$PrepareBackStackTransitionState.generateOps(FragmentManager.java:3800)
at androidx.fragment.app.FragmentManager.generateOpsForPendingActions(FragmentManager.java:2332)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1999)
at androidx.fragment.app.FragmentManager.handleOnBackPressed(FragmentManager.java:862)
at androidx.fragment.app.FragmentManager$1.handleOnBackPressed(FragmentManager.java:570)
at androidx.activity.OnBackPressedDispatcher.onBackPressed(OnBackPressedDispatcher.kt:279)
at androidx.activity.OnBackPressedDispatcher$3.invoke(OnBackPressedDispatcher.kt:130)
at androidx.activity.OnBackPressedDispatcher$3.invoke(OnBackPressedDispatcher.kt:127)
at androidx.activity.OnBackPressedDispatcher$Api34Impl$createOnBackAnimationCallback$1.onBackInvoked(OnBackPressedDispatcher.kt:395)
at android.view.ViewRootImpl$NativePreImeInputStage.doOnBackKeyEvent(ViewRootImpl.java:6570)
at android.view.ViewRootImpl$NativePreImeInputStage.onProcess(ViewRootImpl.java:6538)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6229)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:9211)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:9162)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:9131)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:9337)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:267)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:335)
at android.os.Looper.loopOnce(Looper.java:162)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8177)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
jb...@google.com <jb...@google.com> #8
This has been fixed internally and will be available in the Fragment 1.8.3
release.
pr...@google.com <pr...@google.com> #9
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.fragment:fragment:1.8.3
ve...@google.com <ve...@google.com> #10
ve...@google.com <ve...@google.com> #11
ve...@google.com <ve...@google.com> #12
ve...@google.com <ve...@google.com> #13
fl...@backmarket.com <fl...@backmarket.com> #14
sh...@gmail.com <sh...@gmail.com> #15
I got this issue recently after targeting my app to ANDROID V15
Exception java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 1 at jdk.internal.util.Preconditions.outOfBounds (Preconditions.java:64) at jdk.internal.util.Preconditions.outOfBoundsCheckIndex (Preconditions.java:70) at jdk.internal.util.Preconditions.checkIndex (Preconditions.java:266) at java.util.Objects.checkIndex (Objects.java:359) at java.util.ArrayList.get (ArrayList.java:434) at androidx.navigation.compose.NavHostKt$NavHost$25$1.invokeSuspend (NavHost.kt:518) at androidx.navigation.compose.NavHostKt$NavHost$25$1.invoke (Unknown Source:8) at androidx.navigation.compose.NavHostKt$NavHost$25$1.invoke (Unknown Source:4) at androidx.activity.compose.OnBackInstance$job$1.invokeSuspend (PredictiveBackHandler.kt:160) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.kt:108) at androidx.compose.ui.platform.AndroidUiDispatcher.performTrampolineDispatch (AndroidUiDispatcher.android.kt:81) at androidx.compose.ui.platform.AndroidUiDispatcher.access$performTrampolineDispatch (AndroidUiDispatcher.android.kt:41) at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.run (AndroidUiDispatcher.android.kt:57) at android.os.Handler.handleCallback (Handler.java:942) at android.os.Handler.dispatchMessage (Handler.java:99) at android.os.Looper.loopOnce (Looper.java:201) at android.os.Looper.loop (Looper.java:288) at android.app.ActivityThread.main (ActivityThread.java:8061) at java.lang.reflect.Method.invoke at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:703) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:911)
gy...@gmail.com <gy...@gmail.com> #16
We started getting crashes as well but for Google Maps Flutter plugin in lite mode
Fatal Exception: java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
at jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
at java.util.Objects.checkIndex(Objects.java:359)
at java.util.ArrayList.get(ArrayList.java:434)
at com.google.maps.api.android.lib6.lite.w.a(:com.google.android.gms.policy_maps_core_dynamite@244125205@244125202025.684868338.684868338:29)
at com.google.maps.api.android.lib6.lite.y.e(:com.google.android.gms.policy_maps_core_dynamite@244125205@244125202025.684868338.684868338:41)
at com.google.maps.api.android.lib6.lite.l.onDraw(:com.google.android.gms.policy_maps_core_dynamite@244125205@244125202025.684868338.684868338:190)
at android.view.View.draw(View.java:23975)
at android.view.View.buildDrawingCacheImpl(View.java:23239)
at android.view.View.buildDrawingCache(View.java:23099)
at android.view.View.updateDisplayListIfDirty(View.java:22819)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4552)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4525)
at android.view.View.updateDisplayListIfDirty(View.java:22798)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4552)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4525)
at android.view.View.updateDisplayListIfDirty(View.java:22798)
at android.view.View.draw(View.java:23706)
at android.view.ViewGroup.drawChild(ViewGroup.java:4568)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4329)
at android.view.View.draw(View.java:23978)
at io.flutter.plugin.platform.PlatformViewWrapper.draw(PlatformViewWrapper.java:44)
at android.view.View.updateDisplayListIfDirty(View.java:22842)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4552)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4525)
at android.view.View.updateDisplayListIfDirty(View.java:22798)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4552)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4525)
at android.view.View.updateDisplayListIfDirty(View.java:22798)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4552)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4525)
at android.view.View.updateDisplayListIfDirty(View.java:22798)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4552)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4525)
at android.view.View.updateDisplayListIfDirty(View.java:22798)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:694)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:700)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:798)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:5245)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4947)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:4112)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2690)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9779)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1343)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1352)
at android.view.Choreographer.doCallbacks(Choreographer.java:952)
at android.view.Choreographer.doFrame(Choreographer.java:882)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1326)
at android.os.Handler.handleCallback(Handler.java:1000)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loopOnce(Looper.java:242)
at android.os.Looper.loop(Looper.java:362)
at android.app.ActivityThread.main(ActivityThread.java:8407)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:992)
Description
Component used: Fragment
Version used: 1.7.0
Devices/Android versions reproduced on: Android 14 only
Here's the complete stacktrace, unfortunately I don't have any other insights on how to reproduce the issue.