Docile-Alligator / Infinity-For-Reddit

A Reddit client for Android
https://play.google.com/store/apps/details?id=ml.docilealligator.infinityforreddit
GNU Affero General Public License v3.0
4.16k stars 404 forks source link

Changing floating action button settings leads to app crashes #1329

Closed salaniz closed 1 year ago

salaniz commented 1 year ago

Checklist

App version

v5.4.0-beta1

Where did you get the app from

Other

Android version

Android 12 (LineageOS 19.1)

Device model

No response

First occurred

No response

Steps to reproduce

Tested on a fresh install of the latest Github release (5.4.0-beta1) and on 5.3.4 from F-Droid.

  1. Go to Settings -> Interface -> Customize Bottom Navigation Bar
  2. Change "Floating Action Button" to "Refresh" for both "Main Page" and "Other Page" settings
  3. Exit app settings (optionally restart app as suggested, but does not change behavior)
  4. Go to "Customize Bottom Navigation Bar" settings again
  5. "Floating Action Button" now reads "Change Sort Type" but functionality is "Refresh" (1st bug)
  6. Change "Floating Action Button" back to "Filter Posts" for "Main Page" (keeping "Other Page" settings as is)
  7. Exit app settings (optionally restart app)
  8. Trying to go back to "Customize Bottom Navigation Bar" settings now crashes the app (2nd bug)

I discovered the bug when trying to set the action to "Refresh", so it serves as an example. Using other actions seem to trigger the bug as well. I did not exhaustively try all actions though.

Example post, link, markdown...

No response

Expected behaviour

  1. The "Floating Action Button" settings should correctly specify what action is set.
  2. The app should not crash when trying to access a settings page.

Current behaviour

App crashes.

Logs

No response

Docile-Alligator commented 1 year ago

Cannot reproduce it. Maybe it's fixed in some commits after v5.4.0-beta1. Could you check this again after v5.4.0-beta2 is available? Thank you.

salaniz commented 1 year ago

I tried the steps again for v5.4.0-beta4, this time on a different phone with LineageOS 18.1 (Android 11) (I would like to not mess with my main phone's installation).

The bug still persists. I am attaching a video to make it easier to reproduce (~2.1 MB). Alternatively, please give me some pointers how to create a properly reproducible environment as I am not familiar with Android development.

https://user-images.githubusercontent.com/4443693/216769035-75ceb1b2-e0b6-47d1-9a96-076f83a96d61.mp4

Wladefant commented 1 year ago

Alright, I am now able to reproduce it. Worth mentioning: the bug only occurs in anonymous mode. After the crash (in my case restart or crash) the action button is set on refresh (followed your specific use case).

Device Info

Android 12
Galaxy Note 9
Noble ROM
restart logs with scoop

``` FATAL EXCEPTION: main Process: ml.docilealligator.infinityforreddit, PID: 25599 java.lang.ArrayIndexOutOfBoundsException: length=9; index=9 at ml.docilealligator.infinityforreddit.settings.CustomizeBottomAppBarFragment.onCreateView(CustomizeBottomAppBarFragment.java:188) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002) at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:226) at android.os.Looper.loop(Looper.java:313) at android.app.ActivityThread.main(ActivityThread.java:8663) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135) ```

restart logs with infinity

``` `` Stacktrace `` java.lang.ArrayIndexOutOfBoundsException: length=9; index=9 at ml.docilealligator.infinityforreddit.settings.CustomizeBottomAppBarFragment.onCreateView(CustomizeBottomAppBarFragment.java:188) at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963) at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518) at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282) at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189) at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100) at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002) at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:226) at android.os.Looper.loop(Looper.java:313) at android.app.ActivityThread.main(ActivityThread.java:8663) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135) `` END of stacktrace `` `` Thread info `` Name: main ID: 2 State: RUNNABLE Priority: 5 Thread group name: main Thread group parent: system Thread group active count: 39 Thread time: 0 hr 0 min, 3 sec `` END of thread info `` `` Device info `` Report ID: e665e720-9de3-4eb5-ba6c-a9ec866f6724 Device ID: 4920dfbf6936f770 Application version: 113 Default launcher: com.sec.android.app.launcher Timezone name: Central European Standard Time Timezone ID: Europe/Sarajevo Version release: 12 Version incremental : N975FXXS8HVF3 Version SDK: 31 Board: exynos9810 Bootloader: N960FXXS9FVB1 Brand: samsung CPU ABIS 32: armeabi-v7a, armeabi CPU ABIS 64: arm64-v8a Supported ABIS: arm64-v8a, armeabi-v7a, armeabi Device: d2s Display: NOBLE2.5_N975FXXS8HVF3 Fingerprint: samsung/d2seea/d2s:12/SP1A.210812.016/N975FXXS8HVF3:user/release-keys Hardware: samsungexynos9810 Host: 21DJ6614 ID: SP1A.210812.016 Manufacturer: samsung Product: d2seea Build time: 1655879692000 Build time formatted: 22-06-2022 08:34:52 Type: user Radio: N960FXXS9FVB3,N960FXXS9FVB3 Tags: release-keys User: dpi User IDs: N/A Is sustained performance mode supported: No Is in power save mode: No Is in interactive state: Yes Is ignoring battery optimizations: Yes Thermal status: STATUS_NONE Location power save mode: MODE_NO_CHANGE Is device idle: No Battery percentage: 36 Battery remaining time: N/A Is battery charging: No Is device rooted: Yes CPU Model: N/A Number of CPU cores: 8 Up time with sleep: 104 hr 49 min, 19 sec Up time without sleep: 36 hr 54 min, 48 sec `` END of Device info `` `` Exit reasons `` `` Exit reason #1 `` Description: crash Importance: FOREGROUND Reason: CRASH Timestamp: 04-02-2023 17:58:46 `` END of exit reason #1 `` `` Exit reason #2 `` Description: crash Importance: FOREGROUND Reason: CRASH Timestamp: 04-02-2023 17:58:31 `` END of exit reason #2 `` `` Exit reason #3 `` Description: crash Importance: FOREGROUND Reason: CRASH Timestamp: 04-02-2023 17:57:21 `` END of exit reason #3 `` `` END of exit reasons `` `` Application info `` App name: Infinity Version code: 113 Version name: 5.4.0-beta4 Package name: ml.docilealligator.infinityforreddit Short package name: infinityforreddit Flavor: N/A Signatures: XFN80TR5rgSMbsH+WZ5oyxarmIU= Is debuggable: No First installed: 19-08-2022 01:27:05 Last updated: 01-02-2023 15:57:08 Requested permissions: android.permission.ACCESS_NETWORK_STATE, android.permission.INTERNET, android.permission.SET_WALLPAPER, android.permission.SET_WALLPAPER_HINTS, android.permission.FOREGROUND_SERVICE, android.permission.WAKE_LOCK, android.permission.POST_NOTIFICATIONS, android.permission.USE_BIOMETRIC, android.permission.USE_FINGERPRINT, android.permission.RECEIVE_BOOT_COMPLETED, ml.docilealligator.infinityforreddit.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION Default prefs: swipe_up_to_hide_jump_to_next_top_level_comments_button = false, video_autoplay = 1, pinch_to_zoom_video = true, save_sort_type = true, swipe_vertically_to_go_back_from_media = true, disable_swiping_between_tabs = false, show_top_level_comments_first = true, hide_comment_awards = false, save_nsfw_media_in_different_folder = false, click_to_show_media_in_gallery_layout = false, time_format = MMM d, yyyy, HH:mm, pull_notification_time = 1675375578048, show_comment_divider = false, video_player_ignore_nav_bar = false, show_author_avatar = false, respect_subreddit_recommended_comment_sort_type = false, default_search_result_tab = 0, title_font_family = Default, font_family = Default, lock_bottom_app_bar = false, start_autoplay_visible_area_offset_portrait = 75, separate_folder_for_each_subreddit = false, comment_toolbar_hidden = false, disable_image_preview = true, user_default_sort_type = NEW, remember_muting_option_in_post_feed = false, volume_keys_navigate_comments = true, hide_subreddit_and_user_prefix = false, long_press_to_hide_toolbar_in_compact_layout = false, post_compact_layout_toolbar_hidden_by_default = false, enable_search_history = true, reddit_video_default_resolution = 360, theme = 1, comment_toolbar_hide_on_click = true, video_download_location = content://com.android.externalstorage.documents/tree/primary%3ADownload%20, content_font_family = Default, image_download_location = content://com.android.externalstorage.documents/tree/primary%3ADownload%20, post_feed_max_resolution = 5000000, enable_notification = true, subreddit_default_sort_time = ALL, hide_the_number_of_votes = false, show_elapsed_time = false, show_fewer_toolbar_options_threshold = 5, hide_subreddit_description = false, swipe_between_posts = true, hide_the_number_of_comments = false, data_saving_mode = 1, enable_swipe_action = false, easier_to_watch_in_full_screen = false, content_font_size = Normal, swipe_action_threshold = 0.3, show_only_one_comment_level_indicator = false, immersive_interface_ignore_nav_bar = false, mute_autoplaying_videos = true, default_post_layout = 0, language = auto, notificaiton_interval = 15, hide_the_number_of_awards = false, start_autoplay_visible_area_offset_landscape = 50, automatically_try_redgifs = true, amoled_dark = true, swipe_to_go_back_from_post_detail = true, lazy_mode_interval = 2.5, hide_text_post_content = false, only_disable_preview_in_video_and_gif_posts = false, hide_post_type = false, autoplay_nsfw_videos = false, main_page_back_button_action = 2, title_font_size = Normal, disable_immersive_interface_in_landscape_mode = false, vote_buttons_on_the_right = false, show_thumbnail_on_the_left_in_compact_layout ```

crash logs with scoop

``` FATAL EXCEPTION: pool-5-thread-3 Process: ml.docilealligator.infinityforreddit, PID: 7878 java.lang.IllegalArgumentException: Path parameter "subredditName" value must not be null. (parameter #1) for method RedditAPI.getSubredditBestPosts at retrofit2.Utils.methodError(Utils.java:54) at retrofit2.Utils.methodError(Utils.java:43) at retrofit2.Utils.parameterError(Utils.java:64) at retrofit2.ParameterHandler$Path.apply(ParameterHandler.java:113) at retrofit2.RequestFactory.create(RequestFactory.java:129) at retrofit2.OkHttpCall.createRawCall(OkHttpCall.java:208) at retrofit2.OkHttpCall.getRawCall(OkHttpCall.java:107) at retrofit2.OkHttpCall.execute(OkHttpCall.java:197) at retrofit2.DefaultCallAdapterFactory$ExecutorCallbackCall.execute(DefaultCallAdapterFactory.java:108) at ml.docilealligator.infinityforreddit.activities.ViewPostDetailActivity.lambda$fetchMorePosts$11$ml-docilealligator-infinityforreddit-activities-ViewPostDetailActivity(ViewPostDetailActivity.java:590) at ml.docilealligator.infinityforreddit.activities.ViewPostDetailActivity$$ExternalSyntheticLambda4.run(Unknown Source:6) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:920) ```

I am not even able to change the settings after that so very important to fix

Wladefant commented 1 year ago

@Docile-Alligator @RSBat please take a look. Not really deep in the game right now 😒 to do it myself

Docile-Alligator commented 1 year ago

Cool. Thank you. I will fix this.

salaniz commented 1 year ago

Works like a charm. Thanks for fixing this!