[Bug]: App crashes when denying storage permission and pressing back
Summary
The app crashes when I try to download a media file, deny the storage permission by pressing the back button, and return to the app.
Steps to reproduce
- Install and launch the Commons app.
- Tap on any media item to view its details.
- Tap the download icon at the top right corner.
- When the storage permission dialog appears, press the back button instead of granting permission.
- The app crashes immediately.
Expected behaviour
App should gracefully exit or return to a safe screen without crashing.
Actual behaviour
The app crashes immediately
Device name
OPPO A11s
Android version
Android 11
Commons app version
5.5.0
Device logs
08-04 01:05:25.328 24927 24927 E AndroidRuntime: FATAL EXCEPTION: main 08-04 01:05:25.328 24927 24927 E AndroidRuntime: Process: fr.free.nrw.commons, PID: 24927 08-04 01:05:25.328 24927 24927 E AndroidRuntime: java.lang.RuntimeException: Unable to resume activity {fr.free.nrw.commons/fr.free.nrw.commons.contributions.MainActivity}: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4774) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4816) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:187) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:102) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2316) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at android.os.Looper.loop(Looper.java:263) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:8288) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:612) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1006) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at java.util.ArrayList.get(ArrayList.java:437) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at fr.free.nrw.commons.category.GridViewAdapter.getItem(GridViewAdapter.kt:91) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at fr.free.nrw.commons.category.GridViewAdapter.getItem(GridViewAdapter.kt:18) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at fr.free.nrw.commons.bookmarks.BookmarkListRootFragment.getMediaAtPosition(BookmarkListRootFragment.java:159) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at fr.free.nrw.commons.media.MediaDetailFragment.onResume(MediaDetailFragment.kt:506) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.Fragment.performResume(Fragment.java:3039) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentStateManager.resume(FragmentStateManager.java:607) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:306) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentManager.dispatchResume(FragmentManager.java:3086) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.Fragment.performResume(Fragment.java:3048) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentStateManager.resume(FragmentStateManager.java:607) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:306) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentManager.dispatchResume(FragmentManager.java:3086) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.Fragment.performResume(Fragment.java:3048) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentStateManager.resume(FragmentStateManager.java:607) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:306) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentManager.dispatchResume(FragmentManager.java:3086) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.Fragment.performResume(Fragment.java:3048) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentStateManager.resume(FragmentStateManager.java:607) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:306) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentManager.dispatchResume(FragmentManager.java:3086) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentController.dispatchResume(FragmentController.java:273) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentActivity.onResumeFragments(FragmentActivity.java:458) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.fragment.app.FragmentActivity.onPostResume(FragmentActivity.java:447) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at androidx.appcompat.app.AppCompatActivity.onPostResume(AppCompatActivity.java:245) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at android.app.Activity.performResume(Activity.java:8314) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4764) 08-04 01:05:25.328 24927 24927 E AndroidRuntime: ... 11 more
Screen-shots
No response
Would you like to work on the issue?
None
@sjl872964789 Please share screenshots. It would help us to reproduce the bug.
Hey
Can my team and I work on this issue for a university project.
Thanks
- The app crashes immediately.
@sjl872964789 I am not able to reproduce this issue on the main branch, when i press the back button instead of granting permission , it showed me a popup which takes me to the settings - but, the app doesn't crash !!
- Would you mind sharing the video clip of the issue, if the issue still persists ?
I tested this on my device and was not able to reproduce the crash. Device: Vivo T2x 5G Android version: 15 Build variant: prodDebug
Steps tested: Opened Explore Section and select a media item Tapped the download icon When the storage permission dialog appeared, pressed the back button instead of granting permission
Observed behavior: The app shows a permission-related popup that redirects to settings The app does not crash and remains stable
This matches the expected behavior on my device. Let me know if there are specific devices / Android versions where this is still reproducible, and I can try to test further.