// // Copyright (C) 2015 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #if UNITY_ANDROID namespace GooglePlayGames.Android { using GooglePlayGames.BasicApi; using GooglePlayGames.BasicApi.SavedGame; using OurUtils; using UnityEngine; using System; using System.Collections.Generic; internal class AndroidHelperFragment { private const string HelperFragmentClass = "com.google.games.bridge.HelperFragment"; public static AndroidJavaObject GetActivity() { using (var jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { return jc.GetStatic("currentActivity"); } } public static AndroidJavaObject GetDefaultPopupView() { using (var helperFragment = new AndroidJavaClass(HelperFragmentClass)) using (var activity = AndroidHelperFragment.GetActivity()) { return helperFragment.CallStatic("getDecorView", activity); } } public static void ShowAchievementsUI(Action cb) { using (var helperFragment = new AndroidJavaClass(HelperFragmentClass)) using (var task = helperFragment.CallStatic("showAchievementUi", AndroidHelperFragment.GetActivity())) { AndroidTaskUtils.AddOnSuccessListener( task, uiCode => { OurUtils.Logger.d("ShowAchievementsUI result " + uiCode); cb.Invoke((UIStatus) uiCode); }); AndroidTaskUtils.AddOnFailureListener( task, exception => { OurUtils.Logger.e("ShowAchievementsUI failed with exception"); cb.Invoke(UIStatus.InternalError); }); } } public static void ShowCaptureOverlayUI() { using (var helperFragment = new AndroidJavaClass(HelperFragmentClass)) { helperFragment.CallStatic("showCaptureOverlayUi", AndroidHelperFragment.GetActivity()); } } public static void ShowAllLeaderboardsUI(Action cb) { using (var helperFragment = new AndroidJavaClass(HelperFragmentClass)) using (var task = helperFragment.CallStatic("showAllLeaderboardsUi", AndroidHelperFragment.GetActivity())) { AndroidTaskUtils.AddOnSuccessListener( task, uiCode => { OurUtils.Logger.d("ShowAllLeaderboardsUI result " + uiCode); cb.Invoke((UIStatus) uiCode); }); AndroidTaskUtils.AddOnFailureListener( task, exception => { OurUtils.Logger.e("ShowAllLeaderboardsUI failed with exception"); cb.Invoke(UIStatus.InternalError); }); } } public static void ShowLeaderboardUI(string leaderboardId, LeaderboardTimeSpan timeSpan, Action cb) { using (var helperFragment = new AndroidJavaClass(HelperFragmentClass)) using (var task = helperFragment.CallStatic("showLeaderboardUi", AndroidHelperFragment.GetActivity(), leaderboardId, AndroidJavaConverter.ToLeaderboardVariantTimeSpan(timeSpan))) { AndroidTaskUtils.AddOnSuccessListener( task, uiCode => { OurUtils.Logger.d("ShowLeaderboardUI result " + uiCode); cb.Invoke((UIStatus) uiCode); }); AndroidTaskUtils.AddOnFailureListener( task, exception => { OurUtils.Logger.e("ShowLeaderboardUI failed with exception"); cb.Invoke(UIStatus.InternalError); }); } } public static void ShowCompareProfileWithAlternativeNameHintsUI( string playerId, string otherPlayerInGameName, string currentPlayerInGameName, Action cb) { using (var helperFragment = new AndroidJavaClass(HelperFragmentClass)) using ( var task = helperFragment.CallStatic( "showCompareProfileWithAlternativeNameHintsUI", AndroidHelperFragment.GetActivity(), playerId, otherPlayerInGameName, currentPlayerInGameName)) { AndroidTaskUtils.AddOnSuccessListener(task, uiCode => { OurUtils.Logger.d("ShowCompareProfileWithAlternativeNameHintsUI result " + uiCode); cb.Invoke((UIStatus) uiCode); }); AndroidTaskUtils.AddOnFailureListener(task, exception => { OurUtils.Logger.e("ShowCompareProfileWithAlternativeNameHintsUI failed with exception"); cb.Invoke(UIStatus.InternalError); }); } } public static void IsResolutionRequired( AndroidJavaObject friendsSharingConsentException, Action cb) { using (var helperFragment = new AndroidJavaClass(HelperFragmentClass)) { var isResolutionRequired = helperFragment.CallStatic( "isResolutionRequired", friendsSharingConsentException); cb.Invoke(isResolutionRequired); } } public static void AskForLoadFriendsResolution( AndroidJavaObject friendsSharingConsentException, Action cb) { using (var helperFragment = new AndroidJavaClass(HelperFragmentClass)) using ( var task = helperFragment.CallStatic( "askForLoadFriendsResolution", AndroidHelperFragment.GetActivity(), friendsSharingConsentException)) { AndroidTaskUtils.AddOnSuccessListener(task, uiCode => { OurUtils.Logger.d("AskForLoadFriendsResolution result " + uiCode); cb.Invoke((UIStatus) uiCode); }); AndroidTaskUtils.AddOnFailureListener(task, exception => { OurUtils.Logger.e("AskForLoadFriendsResolution failed with exception"); cb.Invoke(UIStatus.InternalError); }); } } public static void ShowSelectSnapshotUI(bool showCreateSaveUI, bool showDeleteSaveUI, int maxDisplayedSavedGames, string uiTitle, Action cb) { using (var helperFragment = new AndroidJavaClass(HelperFragmentClass)) using (var task = helperFragment.CallStatic("showSelectSnapshotUi", AndroidHelperFragment.GetActivity(), uiTitle, showCreateSaveUI, showDeleteSaveUI, maxDisplayedSavedGames)) { AndroidTaskUtils.AddOnSuccessListener( task, result => { SelectUIStatus status = (SelectUIStatus) result.Get("status"); OurUtils.Logger.d("ShowSelectSnapshotUI result " + status); AndroidJavaObject javaMetadata = result.Get("metadata"); AndroidSnapshotMetadata metadata = javaMetadata == null ? null : new AndroidSnapshotMetadata(javaMetadata, /* contents= */null); cb.Invoke(status, metadata); }); AndroidTaskUtils.AddOnFailureListener( task, exception => { OurUtils.Logger.e("ShowSelectSnapshotUI failed with exception"); cb.Invoke(SelectUIStatus.InternalError, null); }); } } } } #endif