Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 1 addition & 7 deletions unity/NativeDialogPlugin/.gitignore → .gitignore
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
Library
Temp
*.csproj
*.sln
*.pidb
*.userprefs
*.unityproj### https://raw.github.com/github/gitignore/cdd9e946da421758c6f42c427c7bc65c8326155d/Unity.gitignore
### https://raw.github.com/github/gitignore/cdd9e946da421758c6f42c427c7bc65c8326155d/Unity.gitignore

# This .gitignore file should be placed at the root of your Unity project directory
#
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ public class NativeDialogSample : MonoBehaviour

private void Start()
{
DialogManager.Instance.SetLabel(decideLabel, cancelLabel, closeLabel);
DialogManager.SetLabel(decideLabel, cancelLabel, closeLabel);
}

#region Invoked from Unity GUI

public void ShowSelectDialog()
{
const string message = "A simple select dialog";
DialogManager.Instance.ShowSelectDialog(message, (bool result) =>
DialogManager.ShowSelect(message, (bool result) =>
{
Debug.Log($"{result}: {message}");
});
Expand All @@ -28,7 +28,7 @@ public void ShowSelectDialogWithTitle()
{
const string title = "A title";
const string message = "A message for select dialog";
DialogManager.Instance.ShowSelectDialog(title, message, (bool result) =>
DialogManager.ShowSelect(title, message, (bool result) =>
{
Debug.Log($"{result}: {title} / {message}");
});
Expand All @@ -37,7 +37,7 @@ public void ShowSelectDialogWithTitle()
public void ShowSubmitDialog()
{
const string message = "A simple submit dialog";
DialogManager.Instance.ShowSubmitDialog(message, (bool result) =>
DialogManager.ShowSubmit(message, (bool result) =>
{
Debug.Log($"{result}: {message}");
});
Expand All @@ -47,7 +47,7 @@ public void ShowSubmitDialogWithTitle()
{
const string title = "A title";
const string message = "A message for submit dialog";
DialogManager.Instance.ShowSubmitDialog(title, message, (bool result) =>
DialogManager.ShowSubmit(title, message, (bool result) =>
{
Debug.Log($"{result}: {title} / {message}");
});
Expand All @@ -56,7 +56,7 @@ public void ShowSubmitDialogWithTitle()
public void ShowDialogWithAutoDissmiss()
{
const string message = "A dialog with auto dismiss";
int id = DialogManager.Instance.ShowSelectDialog(message, (bool result) =>
int id = DialogManager.ShowSelect(message, (bool result) =>
{
Debug.Log($"{result}: {message}");
});
Expand All @@ -68,6 +68,6 @@ public void ShowDialogWithAutoDissmiss()
private IEnumerator Dissmiss(int id, float time)
{
yield return new WaitForSeconds(time);
DialogManager.Instance.DissmissDialog(id);
DialogManager.Dissmiss(id);
}
}
Binary file removed NativeDialogPlugin.unitypackage
Binary file not shown.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

175 changes: 175 additions & 0 deletions Packages/com.github.asus4.nativedialog/Runtime/DialogManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
using System;
using System.Collections.Generic;
using UnityEngine;

namespace NativeDialog
{
/// <summary>
/// Popup Native Dialog
/// </summary>
public sealed class DialogManager : MonoBehaviour, IDialogReceiver
{

#region Singleton
private static DialogManager instance;
public static DialogManager Instance
{
get
{
if (instance == null)
{
// Find if there is already DialogManager in the scene
instance = FindObjectOfType<DialogManager>();
if (instance == null)
{
instance = new GameObject("DialogManager").AddComponent<DialogManager>();
}
DontDestroyOnLoad(instance.gameObject);
}
return instance;
}
}
#endregion

#region Members
private Dictionary<int, Action<bool>> callbacks;
private IDialog dialog;
#endregion

#region Lyfecycles
private void Awake()
{
if (instance == null)
{
// If I am the first instance, make me the Singleton
instance = this;
DontDestroyOnLoad(this);

callbacks = new Dictionary<int, Action<bool>>();
dialog = CreateDialog();

// Set default label
SetLabel("YES", "NO", "CLOSE");
}
else
{
// If s singleton already exists and you find
// another reference in scene, destroy it!
if (this != instance)
{
Destroy(gameObject);
}
}
}

private IDialog CreateDialog()
{
#if UNITY_EDITOR
var mock = gameObject.AddComponent<DialogMock>();
mock.Initialize(this, true);
return mock;
#elif UNITY_ANDROID
return new DialogAndroid();
#elif UNITY_IOS
return new DialogIOS();
#else
Debug.LogWarning($"{Application.platform} is not supported.");
var mock = gameObject.AddComponent<DialogMock>();
mock.Initialize(this, true);
return mock;
#endif
}

private void OnDestroy()
{
if (callbacks != null)
{
callbacks.Clear();
callbacks = null;
}

dialog.Dispose();
}
#endregion

public static void SetLabel(string decide, string cancel, string close)
{
Instance.dialog.SetLabel(decide, cancel, close);
}

public static int ShowSelect(string message, Action<bool> callback)
{
int id = Instance.dialog.ShowSelect(message);
Instance.callbacks.Add(id, callback);
return id;
}

public static int ShowSelect(string title, string message, Action<bool> callback)
{
int id = Instance.dialog.ShowSelect(title, message);
Instance.callbacks.Add(id, callback);
return id;
}

public static int ShowSubmit(string message, Action<bool> callback)
{
int id = Instance.dialog.ShowSubmit(message);
Instance.callbacks.Add(id, callback);
return id;
}

public static int ShowSubmit(string title, string message, Action<bool> del)
{
int id = Instance.dialog.ShowSubmit(title, message);
Instance.callbacks.Add(id, del);
return id;
}

public static void Dissmiss(int id)
{
Instance.dialog.Dissmiss(id);

var callbacks = Instance.callbacks;
if (callbacks.ContainsKey(id))
{
Instance.callbacks[id](false);
callbacks.Remove(id);
}
else
{
Debug.LogWarning("undefined id:" + id);
}
}


#region Invoked from Native Plugin
public void OnSubmit(string idStr)
{
int id = int.Parse(idStr);
if (callbacks.ContainsKey(id))
{
callbacks[id](true);
callbacks.Remove(id);
}
else
{
Debug.LogWarning("Undefined id:" + idStr);
}
}

public void OnCancel(string idStr)
{
int id = int.Parse(idStr);
if (callbacks.ContainsKey(id))
{
callbacks[id](false);
callbacks.Remove(id);
}
else
{
Debug.LogWarning("Undefined id:" + idStr);
}
}
#endregion
}
}
8 changes: 8 additions & 0 deletions Packages/com.github.asus4.nativedialog/Runtime/Internal.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#if UNITY_ANDROID

using UnityEngine;

namespace NativeDialog
{
internal sealed class DialogAndroid : IDialog
{
private readonly AndroidJavaClass cls;

public DialogAndroid()
{
cls = new AndroidJavaClass("unity.plugins.dialog.DialogManager");
}

public void Dispose()
{
cls.Dispose();
}

public void SetLabel(string decide, string cancel, string close)
{
cls.CallStatic("SetLabel", decide, cancel, close);
}

public int ShowSelect(string message)
{
return cls.CallStatic<int>("ShowSelectDialog", message);
}

public int ShowSelect(string title, string message)
{
return cls.CallStatic<int>("ShowSelectTitleDialog", title, message);
}

public int ShowSubmit(string message)
{
return cls.CallStatic<int>("ShowSubmitDialog", message);
}

public int ShowSubmit(string title, string message)
{
return cls.CallStatic<int>("ShowSubmitTitleDialog", title, message);
}

public void Dissmiss(int id)
{
cls.CallStatic("DissmissDialog", id);
}
}
}

#endif // UNITY_ANDROID

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading