AndroidJavaConverter.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. // <copyright file="AndroidTokenClient.cs" company="Google Inc.">
  2. // Copyright (C) 2015 Google Inc.
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. //
  8. // http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software
  11. // distributed under the License is distributed on an "AS IS" BASIS,
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. // See the License for the specific language governing permissions and
  14. // limitations under the License.
  15. // </copyright>
  16. #if UNITY_ANDROID
  17. namespace GooglePlayGames.Android
  18. {
  19. using GooglePlayGames.BasicApi;
  20. using GooglePlayGames.BasicApi.SavedGame;
  21. using OurUtils;
  22. using UnityEngine;
  23. using UnityEngine.SocialPlatforms;
  24. using System;
  25. using System.Collections.Generic;
  26. internal class AndroidJavaConverter
  27. {
  28. internal static System.DateTime ToDateTime(long milliseconds)
  29. {
  30. System.DateTime result = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
  31. return result.AddMilliseconds(milliseconds);
  32. }
  33. // Convert to LeaderboardVariant.java#TimeSpan
  34. internal static int ToLeaderboardVariantTimeSpan(LeaderboardTimeSpan span)
  35. {
  36. switch (span)
  37. {
  38. case LeaderboardTimeSpan.Daily:
  39. return 0 /* TIME_SPAN_DAILY */;
  40. case LeaderboardTimeSpan.Weekly:
  41. return 1 /* TIME_SPAN_WEEKLY */;
  42. case LeaderboardTimeSpan.AllTime:
  43. default:
  44. return 2 /* TIME_SPAN_ALL_TIME */;
  45. }
  46. }
  47. // Convert to LeaderboardVariant.java#Collection
  48. internal static int ToLeaderboardVariantCollection(LeaderboardCollection collection)
  49. {
  50. switch (collection)
  51. {
  52. case LeaderboardCollection.Social:
  53. return 3 /* COLLECTION_FRIENDS */;
  54. case LeaderboardCollection.Public:
  55. default:
  56. return 0 /* COLLECTION_PUBLIC */;
  57. }
  58. }
  59. // Convert to PageDirection.java#Direction
  60. internal static int ToPageDirection(ScorePageDirection direction)
  61. {
  62. switch (direction)
  63. {
  64. case ScorePageDirection.Forward:
  65. return 0 /* NEXT */;
  66. case ScorePageDirection.Backward:
  67. return 1 /* PREV */;
  68. default:
  69. return -1 /* NONE */;
  70. }
  71. }
  72. internal static Player ToPlayer(AndroidJavaObject player)
  73. {
  74. if (player == null)
  75. {
  76. return null;
  77. }
  78. string displayName = player.Call<String>("getDisplayName");
  79. string playerId = player.Call<String>("getPlayerId");
  80. string avatarUrl = player.Call<String>("getIconImageUrl");
  81. return new Player(displayName, playerId, avatarUrl);
  82. }
  83. internal static PlayerProfile ToPlayerProfile(AndroidJavaObject player) {
  84. if (player == null) {
  85. return null;
  86. }
  87. string displayName = player.Call<String>("getDisplayName");
  88. string playerId = player.Call<String>("getPlayerId");
  89. string avatarUrl = player.Call<String>("getIconImageUrl");
  90. bool isFriend =
  91. player.Call<AndroidJavaObject>("getRelationshipInfo").Call<int>("getFriendStatus") ==
  92. 4 /* PlayerFriendStatus.Friend*/;
  93. return new PlayerProfile(displayName, playerId, avatarUrl, isFriend);
  94. }
  95. internal static List<string> ToStringList(AndroidJavaObject stringList)
  96. {
  97. if (stringList == null)
  98. {
  99. return new List<string>();
  100. }
  101. int size = stringList.Call<int>("size");
  102. List<string> converted = new List<string>(size);
  103. for (int i = 0; i < size; i++)
  104. {
  105. converted.Add(stringList.Call<string>("get", i));
  106. }
  107. return converted;
  108. }
  109. // from C#: List<string> to Java: ArrayList<String>
  110. internal static AndroidJavaObject ToJavaStringList(List<string> list)
  111. {
  112. AndroidJavaObject converted = new AndroidJavaObject("java.util.ArrayList");
  113. for (int i = 0; i < list.Count; i++)
  114. {
  115. converted.Call<bool>("add", list[i]);
  116. }
  117. return converted;
  118. }
  119. internal static FriendsListVisibilityStatus ToFriendsListVisibilityStatus(int playerListVisibility) {
  120. switch (playerListVisibility)
  121. {
  122. case /* FriendsListVisibilityStatus.UNKNOWN */ 0:
  123. return FriendsListVisibilityStatus.Unknown;
  124. case /* FriendsListVisibilityStatus.VISIBLE */ 1:
  125. return FriendsListVisibilityStatus.Visible;
  126. case /* FriendsListVisibilityStatus.REQUEST_REQUIRED */ 2:
  127. return FriendsListVisibilityStatus.ResolutionRequired;
  128. case /* FriendsListVisibilityStatus.FEATURE_UNAVAILABLE */ 3:
  129. return FriendsListVisibilityStatus.Unavailable;
  130. default:
  131. return FriendsListVisibilityStatus.Unknown;
  132. }
  133. }
  134. internal static IUserProfile[] playersBufferToArray(AndroidJavaObject playersBuffer) {
  135. int count = playersBuffer.Call<int>("getCount");
  136. IUserProfile[] users = new IUserProfile[count];
  137. for (int i = 0; i < count; ++i) {
  138. using (var player = playersBuffer.Call<AndroidJavaObject>("get", i)) {
  139. users[i] = AndroidJavaConverter.ToPlayerProfile(player);
  140. }
  141. }
  142. playersBuffer.Call("release");
  143. return users;
  144. }
  145. }
  146. }
  147. #endif