2023-04-03 11:04:31 +08:00

239 lines
7.9 KiB
C#

/**
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
*
* You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
* copy, modify, and distribute this software in source code or binary form for use
* in connection with the web services and APIs provided by Facebook.
*
* As with any software that integrates with the Facebook platform, your use of
* this software is subject to the Facebook Developer Principles and Policies
* [http://developers.facebook.com/policy/]. This copyright notice shall be
* included in all copies or substantial portions of the software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
namespace Facebook.Unity.Example
{
using System;
using System.Linq;
using UnityEngine;
internal abstract class MenuBase : ConsoleBase
{
private static ShareDialogMode shareDialogMode;
protected abstract void GetGui();
protected virtual bool ShowDialogModeSelector()
{
return false;
}
protected virtual bool ShowBackButton()
{
return true;
}
protected void HandleResult(IResult result)
{
if (result == null)
{
this.LastResponse = "Null Response\n";
LogView.AddLog(this.LastResponse);
return;
}
this.LastResponseTexture = null;
// Some platforms return the empty string instead of null.
if (!string.IsNullOrEmpty(result.Error))
{
this.Status = "Error - Check log for details";
this.LastResponse = "Error Response:\n" + result.Error;
}
else if (result.Cancelled)
{
this.Status = "Cancelled - Check log for details";
this.LastResponse = "Cancelled Response:\n" + result.RawResult;
}
else if (!string.IsNullOrEmpty(result.RawResult))
{
this.Status = "Success - Check log for details";
this.LastResponse = "Success Response:\n" + result.RawResult;
}
else
{
this.LastResponse = "Empty Response\n";
}
LogView.AddLog(result.ToString());
}
protected void HandleLimitedLoginResult(IResult result)
{
if (result == null)
{
this.LastResponse = "Null Response\n";
LogView.AddLog(this.LastResponse);
return;
}
this.LastResponseTexture = null;
// Some platforms return the empty string instead of null.
if (!string.IsNullOrEmpty(result.Error))
{
this.Status = "Error - Check log for details";
this.LastResponse = "Error Response:\n" + result.Error;
}
else if (result.Cancelled)
{
this.Status = "Cancelled - Check log for details";
this.LastResponse = "Cancelled Response:\n" + result.RawResult;
}
else if (!string.IsNullOrEmpty(result.RawResult))
{
this.Status = "Success - Check log for details";
this.LastResponse = "Success Response:\n" + result.RawResult;
}
else
{
this.LastResponse = "Empty Response\n";
}
String resultSummary = "Limited login results\n\n";
var profile = FB.Mobile.CurrentProfile();
resultSummary += "name: " + profile.Name + "\n";
resultSummary += "id: " + profile.UserID + "\n";
resultSummary += "email: " + profile.Email + "\n";
resultSummary += "pic URL: " + profile.ImageURL + "\n";
resultSummary += "birthday: " + profile.Birthday + "\n";
resultSummary += "age range: " + profile.AgeRange + "\n";
resultSummary += "first name: " + profile.FirstName + "\n";
resultSummary += "middle name: " + profile.MiddleName + "\n";
resultSummary += "last name: " + profile.LastName + "\n";
resultSummary += "friends: " + String.Join(",", profile.FriendIDs) + "\n";
if (profile.Hometown!=null){
resultSummary += "hometown: " + profile.Hometown.Name + "\n";
}
if (profile.Location!=null){
resultSummary += "location: " + profile.Location.Name + "\n";
}
resultSummary += "gender: " + profile.Gender + "\n";
LogView.AddLog(resultSummary);
}
protected void OnGUI()
{
if (this.IsHorizontalLayout())
{
GUILayout.BeginHorizontal();
GUILayout.BeginVertical();
}
GUILayout.Space(Screen.safeArea.yMin + 10);
GUILayout.Label(this.GetType().Name, this.LabelStyle);
this.AddStatus();
#if UNITY_IOS || UNITY_ANDROID || UNITY_WP8
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved)
{
Vector2 scrollPosition = this.ScrollPosition;
scrollPosition.y += Input.GetTouch(0).deltaPosition.y;
this.ScrollPosition = scrollPosition;
}
#endif
this.ScrollPosition = GUILayout.BeginScrollView(
this.ScrollPosition,
GUILayout.MinWidth(ConsoleBase.MainWindowFullWidth));
GUILayout.BeginHorizontal();
if (this.ShowBackButton())
{
this.AddBackButton();
}
this.AddLogButton();
if (this.ShowBackButton())
{
// Fix GUILayout margin issues
GUILayout.Label(GUIContent.none, GUILayout.MinWidth(ConsoleBase.MarginFix));
}
GUILayout.EndHorizontal();
if (this.ShowDialogModeSelector())
{
this.AddDialogModeButtons();
}
GUILayout.BeginVertical();
// Add the ui from decendants
this.GetGui();
GUILayout.Space(10);
GUILayout.EndVertical();
GUILayout.EndScrollView();
}
private void AddStatus()
{
GUILayout.Space(5);
GUILayout.Box("Status: " + this.Status, this.TextStyle, GUILayout.MinWidth(ConsoleBase.MainWindowWidth));
}
private void AddBackButton()
{
GUI.enabled = ConsoleBase.MenuStack.Any();
if (this.Button("Back"))
{
this.GoBack();
}
GUI.enabled = true;
}
private void AddLogButton()
{
if (this.Button("Log"))
{
this.SwitchMenu(typeof(LogView));
}
}
private void AddDialogModeButtons()
{
GUILayout.BeginHorizontal();
foreach (var value in Enum.GetValues(typeof(ShareDialogMode)))
{
this.AddDialogModeButton((ShareDialogMode)value);
}
GUILayout.EndHorizontal();
}
private void AddDialogModeButton(ShareDialogMode mode)
{
bool enabled = GUI.enabled;
GUI.enabled = enabled && (mode != shareDialogMode);
if (this.Button(mode.ToString()))
{
shareDialogMode = mode;
FB.Mobile.ShareDialogMode = mode;
}
GUI.enabled = enabled;
}
}
}