//
// 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