nextcloud/news-android

App crashes on Android 14 when long pressing images inside article

cemrich opened this issue · 3 comments

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.

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

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 😆

@Ionshard Thank you for the input! Haha.. no, not dropping the popup entirely - just the download part (replace it with a share feature) -> #1302