apps-android-commons: [Bug]: App crashes when you click on Author Name

Summary

The app crashes when you click on Author Name of an image

Steps to reproduce

  1. Open the app
  2. Skip the login
  3. In the featured tab, open any image
  4. Click on the author name of the image

Expected behaviour

Details about the author should open

Actual behaviour

The app crashes

Device name

POCO X2

Android version

Android 11

Commons app version

4.0.3 prodDebug

Device logs

               fr.free.nrw.commons                  E  ACRA caught a NullPointerException for fr.free.nrw.commons
                                                                            java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
                                                                            	at fr.free.nrw.commons.profile.achievements.AchievementsFragment.onCreateView(AchievementsFragment.java:184)
                                                                            	at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
                                                                            	at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:310)
                                                                            	at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185)
                                                                            	at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354)
                                                                            	at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432)
                                                                            	at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495)
                                                                            	at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
                                                                            	at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2167)
                                                                            	at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1990)
                                                                            	at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1945)
                                                                            	at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1816)
                                                                            	at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:303)
                                                                            	at androidx.fragment.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:238)
                                                                            	at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1244)
                                                                            	at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
                                                                            	at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
                                                                            	at android.view.View.measure(View.java:25931)
                                                                            	at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:735)
                                                                            	at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481)
                                                                            	at android.view.View.measure(View.java:25931)
                                                                            	at androidx.drawerlayout.widget.DrawerLayout.onMeasure(DrawerLayout.java:1119)
                                                                            	at android.view.View.measure(View.java:25931)
                                                                            	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7038)
                                                                            	at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                            	at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
                                                                            	at android.view.View.measure(View.java:25931)
                                                                            	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7038)
                                                                            	at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
                                                                            	at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
                                                                            	at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
                                                                            	at android.view.View.measure(View.java:25931)
                                                                            	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7038)
                                                                            	at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                            	at android.view.View.measure(View.java:25931)
                                                                            	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7038)
                                                                            	at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
                                                                            	at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
                                                                            	at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
                                                                            	at android.view.View.measure(View.java:25931)
                                                                            	at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7038)
                                                                            	at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
                                                                            	at com.android.internal.policy.DecorView.onMeasure(DecorView.java:767)
                                                                            	at android.view.View.measure(View.java:25931)
                                                                            	at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3524)
                                                                            	at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2344)
                                                                            	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2605)
                                                                            	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2068)
                                                                            	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8402)
                                                                            	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1058)
                                                                            	at android.view.Choreographer.doCallbacks(Choreographer.java:880)
                                                                            	at android.view.Choreographer.doFrame(Choreographer.java:813)
 7577-7577  ACRA                    fr.free.nrw.commons                  E  	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1043)
                                                                            	at android.os.Handler.handleCallback(Handler.java:938)
                                                                            	at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                            	at android.os.Looper.loop(Looper.java:236)
                                                                            	at android.app.ActivityThread.main(ActivityThread.java:7904)
                                                                            	at java.lang.reflect.Method.invoke(Native Method)
                                                                            	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
                                                                            	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)

Screen-shots

No response

Would you like to work on the issue?

None

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Comments: 22 (22 by maintainers)

Commits related to this issue

Most upvoted comments

Achievements/leaerboard/contributions all load fine on my device even when not logged in, on the master branch.

Hopefully another core developer can reproduce the crash and test+merge the pull request.

Hi @joseearias, you can try accessing the user from the image information that the application fetches from the API call. ImageInfo.java has a method to access the user (Path: data-client/src/main/java/org/wikipedia/gallery/ImageInfo.java)

@nicolas-raoul I used Pixel 6 Android 13 and I was able to reproduce the issue and was able to test the fix. Post Fix - The author’s page opened as follows -

Screenshot 2023-04-12 at 10 53 11 PM Screenshot 2023-04-12 at 10 54 35 PM

Umm, that’s weird. The master branch still crashes for me. I tested on beta and prod debug, it crashes on both.

https://user-images.githubusercontent.com/75121767/230622917-0850dff9-4fbf-4b7b-ac9c-b358c9a6fe47.mp4

Hi. So then are we agreeing on opening the user details on the device browser for non-logged-in users? I think I know how to solve the problem now.

Crashing is never a good thing.

For non-logged-in users, how about open a web browser on the user’s Commons profile page? For instance https://commons.wikimedia.org/wiki/User:Syced

Making it accessible to everyone is another idea, but may be more complex, and non-logged-in users probably do not care much about authors.

If I understand correctly, tapping works when logged in, but crashes when not logged in? Great find, thanks!