0

I'm developing an android application and face an issue with just naming the fun with "getUserId" when I change the name it's working fine!

Step to reproduce.

  1. Create a new "Empty Activity" application.

  2. Create function inside MainActivity, for example: fun getUserId() = 1

  3. Change the TextView to EditText in the activity_main.xml

  4. Run the project.

  5. Click on EditText.

  6. Enjoy the crash.

I've test it on Samsung Galaxy Tab A7 Lite, Android 11

Here is the errorLogs:

E/MessageQueue-JNI: java.lang.SecurityException: Permission Denial: checkClipboardServiceCallingUser from com.example.myapplication asks to run as user 1 but is calling from uid u0a244; this requires android.permission.INTERACT_ACROSS_USERS_FULL
at android.os.Parcel.createExceptionOrNull(Parcel.java:2385)
        at android.os.Parcel.createException(Parcel.java:2369)
        at android.os.Parcel.readException(Parcel.java:2352)
        at android.os.Parcel.readException(Parcel.java:2294)
        at android.sec.clipboard.IClipboardService$Stub$Proxy.getClipData(IClipboardService.java:1060)
        at com.samsung.android.content.clipboard.SemClipboardManager.getLatestClip(SemClipboardManager.java:613)
        at android.widget.EditText.updateClipboardFilter(EditText.java:310)
        at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:2275)
        at android.view.inputmethod.InputMethodManager$DelegateImpl.startInput(InputMethodManager.java:699)
        at android.view.ImeFocusController.checkFocus(ImeFocusController.java:192)
        at android.view.inputmethod.InputMethodManager.checkFocus(InputMethodManager.java:2431)
        at android.view.inputmethod.InputMethodManager.viewClicked(InputMethodManager.java:2615)
        at android.widget.TextView.viewClicked(TextView.java:14743)
        at android.widget.TextView.onTouchEvent(TextView.java:12279)
        at android.view.View.dispatchTouchEvent(View.java:15199)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3920)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3594)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3920)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3594)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3920)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3594)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3920)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3594)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3920)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3594)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3920)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3594)
        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:915)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1957)
        at android.app.Activity.dispatchTouchEvent(Activity.java:4182)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:873)
        at android.view.View.dispatchPointerEvent(View.java:15458)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:7457)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:7233)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6595)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6652)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6618)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:6786)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6626)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:6843)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6599)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:6652)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:6618)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:6626)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:6599)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:9880)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:9718)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:9671)

Who can explain why this fun name throws an exception?

Submersed
  • 8,810
  • 2
  • 30
  • 38
Ara Hakobyan
  • 1,682
  • 1
  • 10
  • 21

1 Answers1

0

Apparently you need to explicitly request a permission:

android.permission.INTERACT_ACROSS_USERS_FULL

You may be accidentally overriding a framework method, or something, but without more code it's hard to say - the framework is picking up your declared userId when trying to access the clipboard related to the EditText. There's a related answer surrounding this particular permission here.

Submersed
  • 8,810
  • 2
  • 30
  • 38