| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | #if UNITY_EDITOR || UNITY_IOSusing UnityEngine;namespace NativeGalleryNamespace{	public class NGMediaReceiveCallbackiOS : MonoBehaviour	{		private static NGMediaReceiveCallbackiOS instance;		private NativeGallery.MediaPickCallback callback;		private NativeGallery.MediaPickMultipleCallback callbackMultiple;		private float nextBusyCheckTime;		public static bool IsBusy { get; private set; }		[System.Runtime.InteropServices.DllImport( "__Internal" )]		private static extern int _NativeGallery_IsMediaPickerBusy();		public static void Initialize( NativeGallery.MediaPickCallback callback, NativeGallery.MediaPickMultipleCallback callbackMultiple )		{			if( IsBusy )				return;			if( instance == null )			{				instance = new GameObject( "NGMediaReceiveCallbackiOS" ).AddComponent<NGMediaReceiveCallbackiOS>();				DontDestroyOnLoad( instance.gameObject );			}			instance.callback = callback;			instance.callbackMultiple = callbackMultiple;			instance.nextBusyCheckTime = Time.realtimeSinceStartup + 1f;			IsBusy = true;		}		private void Update()		{			if( IsBusy )			{				if( Time.realtimeSinceStartup >= nextBusyCheckTime )				{					nextBusyCheckTime = Time.realtimeSinceStartup + 1f;					if( _NativeGallery_IsMediaPickerBusy() == 0 )					{						IsBusy = false;						NativeGallery.MediaPickCallback _callback = callback;						callback = null;						NativeGallery.MediaPickMultipleCallback _callbackMultiple = callbackMultiple;						callbackMultiple = null;						if( _callback != null )							_callback( null );						if( _callbackMultiple != null )							_callbackMultiple( null );					}				}			}		}		public void OnMediaReceived( string path )		{			IsBusy = false;			if( string.IsNullOrEmpty( path ) )				path = null;			NativeGallery.MediaPickCallback _callback = callback;			callback = null;			if( _callback != null )				_callback( path );		}		public void OnMultipleMediaReceived( string paths )		{			IsBusy = false;			string[] _paths = SplitPaths( paths );			if( _paths != null && _paths.Length == 0 )				_paths = null;			NativeGallery.MediaPickMultipleCallback _callbackMultiple = callbackMultiple;			callbackMultiple = null;			if( _callbackMultiple != null )				_callbackMultiple( _paths );		}		private string[] SplitPaths( string paths )		{			string[] result = null;			if( !string.IsNullOrEmpty( paths ) )			{				string[] pathsSplit = paths.Split( '>' );				int validPathCount = 0;				for( int i = 0; i < pathsSplit.Length; i++ )				{					if( !string.IsNullOrEmpty( pathsSplit[i] ) )						validPathCount++;				}				if( validPathCount == 0 )					pathsSplit = new string[0];				else if( validPathCount != pathsSplit.Length )				{					string[] validPaths = new string[validPathCount];					for( int i = 0, j = 0; i < pathsSplit.Length; i++ )					{						if( !string.IsNullOrEmpty( pathsSplit[i] ) )							validPaths[j++] = pathsSplit[i];					}					pathsSplit = validPaths;				}				result = pathsSplit;			}			return result;		}	}}#endif
 |