AndroidTaskUtils.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #if UNITY_ANDROID
  2. #pragma warning disable 0642 // Possible mistaken empty statement
  3. namespace GooglePlayGames.Android
  4. {
  5. using UnityEngine;
  6. using System;
  7. class AndroidTaskUtils
  8. {
  9. private AndroidTaskUtils()
  10. {
  11. }
  12. public static void AddOnSuccessListener<T>(AndroidJavaObject task, Action<T> callback)
  13. {
  14. using (task.Call<AndroidJavaObject>("addOnSuccessListener",
  15. new TaskOnSuccessProxy<T>(callback, /* disposeResult= */ true))) ;
  16. }
  17. public static void AddOnSuccessListener<T>(AndroidJavaObject task, bool disposeResult, Action<T> callback)
  18. {
  19. using (task.Call<AndroidJavaObject>("addOnSuccessListener",
  20. new TaskOnSuccessProxy<T>(callback, disposeResult))) ;
  21. }
  22. public static void AddOnFailureListener(AndroidJavaObject task, Action<AndroidJavaObject> callback)
  23. {
  24. using (task.Call<AndroidJavaObject>("addOnFailureListener", new TaskOnFailedProxy(callback))) ;
  25. }
  26. public static void AddOnCompleteListener<T>(AndroidJavaObject task, Action<T> callback)
  27. {
  28. using (task.Call<AndroidJavaObject>("addOnCompleteListener", new TaskOnCompleteProxy<T>(callback))) ;
  29. }
  30. private class TaskOnCompleteProxy<T> : AndroidJavaProxy
  31. {
  32. private Action<T> mCallback;
  33. public TaskOnCompleteProxy(Action<T> callback)
  34. : base("com/google/android/gms/tasks/OnCompleteListener")
  35. {
  36. mCallback = callback;
  37. }
  38. public void onComplete(T result)
  39. {
  40. if (result is IDisposable)
  41. {
  42. using ((IDisposable) result)
  43. {
  44. mCallback(result);
  45. }
  46. }
  47. else
  48. {
  49. mCallback(result);
  50. }
  51. }
  52. }
  53. private class TaskOnSuccessProxy<T> : AndroidJavaProxy
  54. {
  55. private Action<T> mCallback;
  56. private bool mDisposeResult;
  57. public TaskOnSuccessProxy(Action<T> callback, bool disposeResult)
  58. : base("com/google/android/gms/tasks/OnSuccessListener")
  59. {
  60. mCallback = callback;
  61. mDisposeResult = disposeResult;
  62. }
  63. public void onSuccess(T result)
  64. {
  65. if (result is IDisposable && mDisposeResult)
  66. {
  67. using ((IDisposable) result)
  68. {
  69. mCallback(result);
  70. }
  71. }
  72. else
  73. {
  74. mCallback(result);
  75. }
  76. }
  77. }
  78. private class TaskOnFailedProxy : AndroidJavaProxy
  79. {
  80. private Action<AndroidJavaObject> mCallback;
  81. public TaskOnFailedProxy(Action<AndroidJavaObject> callback)
  82. : base("com/google/android/gms/tasks/OnFailureListener")
  83. {
  84. mCallback = callback;
  85. }
  86. public void onFailure(AndroidJavaObject exception)
  87. {
  88. using (exception)
  89. {
  90. mCallback(exception);
  91. }
  92. }
  93. }
  94. }
  95. }
  96. #endif