nextcloud / news-android

📱🗞️ Android client for the Nextcloud news/feed reader app
https://play.google.com/store/apps/details?id=de.luhmer.owncloudnewsreader
GNU Affero General Public License v3.0
694 stars 257 forks source link

App crashes on Android 14 when long pressing images inside article #1301

Closed cemrich closed 12 months ago

cemrich commented 1 year ago

Steps to Reproduce:

  1. Open an article with any image on Android 14
  2. Long press the image

Expected:

A dialog with the images alt text should pop up.

Actual:

The app crashes with following message:

java.lang.SecurityException: de.luhmer.owncloudnewsreader.dev: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts
                                                                                                        at android.os.Parcel.createExceptionOrNull(Parcel.java:3057)
                                                                                                        at android.os.Parcel.createException(Parcel.java:3041)
                                                                                                        at android.os.Parcel.readException(Parcel.java:3024)
                                                                                                        at android.os.Parcel.readException(Parcel.java:2966)
                                                                                                        at android.app.IActivityManager$Stub$Proxy.registerReceiverWithFeature(IActivityManager.java:5684)
                                                                                                        at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1852)
                                                                                                        at android.app.ContextImpl.registerReceiver(ContextImpl.java:1792)
                                                                                                        at android.app.ContextImpl.registerReceiver(ContextImpl.java:1780)
                                                                                                        at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:755)
                                                                                                        at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:755)
                                                                                                        at de.luhmer.owncloudnewsreader.NewsDetailImageDialogFragment.registerImageDownloadReceiver(NewsDetailImageDialogFragment.java:486)
                                                                                                        at de.luhmer.owncloudnewsreader.NewsDetailImageDialogFragment.onCreateView(NewsDetailImageDialogFragment.java:206)
                                                                                                        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:3114)
                                                                                                        at androidx.fragment.app.DialogFragment.performCreateView(DialogFragment.java:775)
                                                                                                        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:557)
                                                                                                        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:272)
                                                                                                        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1943)
                                                                                                        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1839)
                                                                                                        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1782)
                                                                                                        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:565)
                                                                                                        at android.os.Handler.handleCallback(Handler.java:958)
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                                        at android.os.Looper.loopOnce(Looper.java:205)
                                                                                                        at android.os.Looper.loop(Looper.java:294)
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:8177)
                                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)
                                                                                                    Caused by: android.os.RemoteException: Remote stack trace:
                                                                                                        at com.android.server.am.ActivityManagerService.registerReceiverWithFeature(ActivityManagerService.java:13908)
                                                                                                        at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2570)
                                                                                                        at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2720)
                                                                                                        at android.os.Binder.execTransactInternal(Binder.java:1339)
                                                                                                        at android.os.Binder.execTransact(Binder.java:1275)

Fix

The offending line can be replaced with

ActivityCompat.registerReceiver(
        requireContext(),
        downloadCompleteReceiver,
        intentFilter,
        ActivityCompat.RECEIVER_NOT_EXPORTED
);

(documenation) which will make the popup work again. However, the download button remains broken on newer versions of Android.

David-Development commented 12 months ago

Just fixed the crash for now - but I agree that we should consider dropping it entirely.

Ionshard commented 12 months ago

Dropping the alt text pop-up entirely? That's a pretty important feature to me. I'm here to check on this exact issue (thanks for fixing it) because I absolutely NEED to see the XKCD alt text 😆

David-Development commented 12 months ago

@Ionshard Thank you for the input! Haha.. no, not dropping the popup entirely - just the download part (replace it with a share feature) -> https://github.com/nextcloud/news-android/issues/1302