apps-android-commons icon indicating copy to clipboard operation
apps-android-commons copied to clipboard

[Bug]: App crashes when denying storage permission and pressing back

Open sjl872964789 opened this issue 4 months ago • 4 comments

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

  1. Install and launch the Commons app.
  2. Tap on any media item to view its details.
  3. Tap the download icon at the top right corner.
  4. When the storage permission dialog appears, press the back button instead of granting permission.
  5. 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 avatar Aug 04 '25 03:08 sjl872964789

@sjl872964789 Please share screenshots. It would help us to reproduce the bug.

gopalakrishnaa avatar Aug 06 '25 08:08 gopalakrishnaa

Hey

Can my team and I work on this issue for a university project.

Thanks

TeeleTitan avatar Oct 16 '25 02:10 TeeleTitan

  1. 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 ?

Kota-Jagadeesh avatar Oct 17 '25 15:10 Kota-Jagadeesh

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.

CodeWithSangeeta avatar Dec 13 '25 19:12 CodeWithSangeeta