Fenix: Fennec migration: Fenix Beta crashes after changing the language and returning to the app while being in "Not yet supported section"

Created on 2 Apr 2020  ·  6Comments  ·  Source: mozilla-mobile/fenix

Preconditions:

Have Fennec Beta installed with 3-4 addons.

Steps to reproduce

  1. Replace Fennec Beta with Fenix Beta;
  2. Access settings > addons > Not yet supported section.
  3. Change the device language from the device settings.
  4. Return to Fenix Beta.

    Expected behavior

The language is correctly changed and no issues are present.

Actual behavior

Fenix Beta crashes after the language was changed when resuming it.

Notes

Only one of the two instances is usable.
This is also reproducible when sending tabs to Fennec.

Device information

  • Android device: Google Pixel 4 XL (10), Samsung Galaxy S7 (7), Samsung Galaxy Tab S6 ( 9), Huawei P9 Lite (7).
    Type a message

  • Fenix version: Beta migration 75.0.0-beta.3 build, 4/1.


Logcat(Click to expand!)

 --------- beginning of crash
2020-04-02 12:49:55.692 11311-11311/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: org.mozilla.firefox_beta, PID: 11311
    java.util.NoSuchElementException: Key en-US is missing in the map.
        at kotlin.collections.ArraysKt___ArraysKt.getValue(_Arrays.kt:3)
        at kotlin.jvm.internal.Intrinsics.translate(Intrinsics.java:2)
        at mozilla.components.feature.addons.ui.UnsupportedAddonsAdapter.onBindViewHolder(UnsupportedAddonsAdapter.kt:7)
        at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:1)
        at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:157)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:1)
        at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:8)
        at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:12)
        at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:125)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:8)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:9)
        at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:2)
        at android.view.View.layout(View.java:22455)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
        at android.view.View.layout(View.java:22455)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
        at android.view.View.layout(View.java:22455)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
        at android.view.View.layout(View.java:22455)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
        at android.view.View.layout(View.java:22455)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
        at android.view.View.layout(View.java:22455)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
        at android.view.View.layout(View.java:22455)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
        at android.view.View.layout(View.java:22455)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:779)
        at android.view.View.layout(View.java:22455)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3157)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2614)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1745)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7768)
2020-04-02 12:49:55.693 11311-11311/? E/AndroidRuntime:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:967)
        at android.view.Choreographer.doCallbacks(Choreographer.java:791)
        at android.view.Choreographer.doFrame(Choreographer.java:726)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:952)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

20200402-131305

crash triage uplift 🐞 bug

All 6 comments

This is also reproducible on the previous Beta migration build 75.0.0-beta.2 with Pixel 2 (Android 9).

Still reproducible on Migration Beta build 75.0.0-beta 4 with OnePlus 5T (Android 9).

This should be fixed :)
@abodea Would you mind taking a look?

Hi @Amejia481 , unfortunately this is still reproducible after performing a migration to the latest Fenix Beta Migration build 75.0.0-beta.5 (Build #2015734507) 37.0.4, 5288e1e91 GV: 75.0-20200403064004 AS: 0.55.2 from 4/14 using the following devices:

• Google Pixel 3a (Android 10)
• Huawei Mate 20 Lite (Android 9)
• OnePlus A3 (Android 6.0.1)

► Video
20200415-140106

► Log

 --------- beginning of crash
2020-04-15 14:05:30.012 24455-24455/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: org.mozilla.firefox_beta, PID: 24455
    java.util.NoSuchElementException: Key en-US is missing in the map.
        at kotlin.collections.ArraysKt___ArraysKt.getValue(_Arrays.kt:3)
        at kotlin.jvm.internal.Intrinsics.translate(Intrinsics.java:2)
        at mozilla.components.feature.addons.ui.UnsupportedAddonsAdapter.onBindViewHolder(UnsupportedAddonsAdapter.kt:7)
        at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:1)
        at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:157)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:1)
        at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:8)
        at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:12)
        at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:125)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:8)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:9)
        at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:2)
        at android.view.View.layout(View.java:22466)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
        at android.view.View.layout(View.java:22466)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
        at android.view.View.layout(View.java:22466)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
        at android.view.View.layout(View.java:22466)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
        at android.view.View.layout(View.java:22466)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
        at android.view.View.layout(View.java:22466)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
        at android.view.View.layout(View.java:22466)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
        at android.view.View.layout(View.java:22466)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:779)
        at android.view.View.layout(View.java:22466)
        at android.view.ViewGroup.layout(ViewGroup.java:6304)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3157)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2614)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1745)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7768)
2020-04-15 14:05:30.012 24455-24455/? E/AndroidRuntime:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:967)
        at android.view.Choreographer.doCallbacks(Choreographer.java:791)
        at android.view.Choreographer.doFrame(Choreographer.java:726)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:952)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
2020-04-15 14:05:30.013 24455-24455/? I/mozac/CrashReporter: Received crash: UncaughtExceptionCrash(throwable=java.util.NoSuchElementException: Key en-US is missing in the map., breadcrumbs=[Breadcrumb(message=Changing to fragment homeFragment, isCustomTab: false, data={}, category=DestinationChanged, level=INFO, type=DEFAULT, date=Wed Apr 15 14:04:49 GMT+03:00 2020), Breadcrumb(message=Changing to fragment settingsFragment, isCustomTab: false, data={}, category=DestinationChanged, level=INFO, type=DEFAULT, date=Wed Apr 15 14:04:51 GMT+03:00 2020), Breadcrumb(message=Changing to fragment addonsManagementFragment, isCustomTab: false, data={}, category=DestinationChanged, level=INFO, type=DEFAULT, date=Wed Apr 15 14:04:53 GMT+03:00 2020), Breadcrumb(message=Changing to fragment notYetSupportedAddonFragment, isCustomTab: false, data={}, category=DestinationChanged, level=INFO, type=DEFAULT, date=Wed Apr 15 14:04:54 GMT+03:00 2020), Breadcrumb(message=Changing to fragment notYetSupportedAddonFragment, isCustomTab: false, data={}, category=DestinationChanged, level=INFO, type=DEFAULT, date=Wed Apr 15 14:05:29 GMT+03:00 2020)])
2020-04-15 14:05:30.013 24455-24455/? I/mozac/CrashReporter: Showing notification

Sorry, my mistake this patch https://github.com/mozilla-mobile/fenix/pull/9931 needs to be added to the migration build, now it's only on nightly.

Verified as fixed on the latest Beta Migration Build 76.0.0-beta.1 with OnePlus 6T (Android 9) and Motorola Moto G6 (Android 8).
The app does not crash when accessing "Not yet available" section after changing the language.
I will close this issue and move it to Done. Thanks!

Was this page helpful?
0 / 5 - 0 ratings