EditorTool3D/Assets/TriLib/TriLibStandaloneFileBrowser/StandaloneFileBrowser/StandaloneFileBrowserAndroi...

81 lines
3.0 KiB
C#
Raw Normal View History

2024-12-17 23:11:00 +08:00
#if UNITY_ANDROID && !UNITY_EDITOR
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
namespace TriLibCore.SFB
{
public class StandaloneFileBrowserAndroidListener : AndroidJavaProxy
{
private Action<IList<ItemWithStream>> _multipleFilesCallback;
public StandaloneFileBrowserAndroidListener(Action<IList<ItemWithStream>> onMultipleFilesSelected) : base("com.sfb.standalonefilebrowser.StandaloneFileBrowserAndroidListener")
{
_multipleFilesCallback = onMultipleFilesSelected;
}
public void onFilesSelected(string filenames)
{
if (_multipleFilesCallback != null) {
var files = filenames.Split('|');
var itemsWithStream = new ItemWithStream[files.Length];
for (var i = 0; i < itemsWithStream.Length; i++) {
itemsWithStream[i] = new ItemWithStream() {
Name = files[i]
};
}
_multipleFilesCallback(itemsWithStream);
}
}
}
public class StandaloneFileBrowserAndroid : IStandaloneFileBrowser<ItemWithStream>
{
private AndroidJavaClass _standaloneFileBrowser;
private AndroidJavaObject _activity;
public StandaloneFileBrowserAndroid()
{
using (AndroidJavaObject unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
_activity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
_standaloneFileBrowser = new AndroidJavaClass("com.sfb.standalonefilebrowser.StandaloneFileBrowser");
}
}
public IList<ItemWithStream> OpenFilePanel(string title, string directory, ExtensionFilter[] extensions, bool multiselect)
{
throw new NotSupportedException();
}
public void OpenFilePanelAsync(string title, string directory, ExtensionFilter[] extensions, bool multiselect, Action<IList<ItemWithStream>> cb)
{
var listener = new StandaloneFileBrowserAndroidListener(cb);
var args = new object[] {_activity, title, multiselect, listener};
_standaloneFileBrowser.CallStatic("showOpenFileDialog", args);
}
public IList<ItemWithStream> OpenFolderPanel(string title, string directory, bool multiselect)
{
throw new NotSupportedException();
}
public void OpenFolderPanelAsync(string title, string directory, bool multiselect, Action<IList<ItemWithStream>> cb)
{
throw new NotSupportedException();
}
public ItemWithStream SaveFilePanel(string title, string directory, string defaultName, ExtensionFilter[] extensions)
{
throw new NotSupportedException();
}
public void SaveFilePanelAsync(string title, string directory, string defaultName, ExtensionFilter[] extensions, Action<ItemWithStream> cb)
{
throw new NotSupportedException();
}
}
}
#endif