Search Unity

Tiny amendments to UnityPlayerActivity to simplify plugin developer life

Discussion in 'Android' started by stopiccot, Feb 15, 2017.

  1. stopiccot

    stopiccot

    Joined:
    May 2, 2013
    Posts:
    26
    It is very common for native plugin to start some activities and wait for their result. Right now you need to subclass from UnityPlayerActivity and change activity class in AndroidManifest.xml. That's completely ok for one plugin but start's to be complicated when two plugins try to override acitivty class. So I suggest to amend UnityPlayerActivity class so we don't need class override for such routine tasks.

    Code (csharp):
    1. private final CopyOnWriteArraySet<ActivityResultListener> mActivityResultListeners = new CopyOnWriteArraySet<>();
    2.  
    3. public void addActivityResultListener(ActivityResultListener listener) {
    4.     mActivityResultListeners.add(listener);
    5. }
    6.  
    7. public void removeActivityResultListener(ActivityResultListener listener) {
    8.     mActivityResultListeners.remove(listener);
    9. }
    10.  
    11. @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    12.     for (ActivityResultListener listener : mActivityResultListeners) {
    13.         listener.onActivityResult(requestCode, resultCode, data);
    14.     }
    15. }
    ActivityResultListener inteface is dead simple:
    Code (csharp):
    1. public interface ActivityResultListener {
    2.  
    3.   /**
    4.    * Called when host (activity/service) receives an {@link Activity#onActivityResult} call.
    5.    */
    6.   void onActivityResult(int requestCode, int resultCode, Intent data);
    7. }
     
  2. bdovaz

    bdovaz

    Joined:
    Dec 10, 2011
    Posts:
    1,051
    This is something discussed multiple times and they don't listen to us...
     
  3. stopiccot

    stopiccot

    Joined:
    May 2, 2013
    Posts:
    26