NLDClient-yudde/ProjectNLD/Assets/ThirdParty/UniWebView/Editor/UniWebViewEditorSettings.cs

219 lines
8.6 KiB
C#
Raw Normal View History

using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using System;
using System.IO;
public class UniWebViewEditorSettings: ScriptableObject
{
private const string AssetPath = "Assets/Editor/UniWebView/settings.asset";
[SerializeField]
internal bool usesCleartextTraffic = false;
[SerializeField]
internal bool writeExternalStorage = false;
[SerializeField]
internal bool accessFineLocation = false;
[SerializeField]
internal bool addsKotlin = true;
[SerializeField]
internal string kotlinVersion = null;
[SerializeField]
internal bool addsAndroidBrowser = true;
[SerializeField]
internal string androidBrowserVersion = null;
[SerializeField]
internal bool addsAndroidXCore = false;
[SerializeField]
internal string androidXCoreVersion = null;
[SerializeField]
internal bool enableJetifier = true;
[SerializeField]
internal string[] authCallbackUrls = { };
[SerializeField]
internal bool supportLINELogin = false;
internal static string defaultKotlinVersion = "1.6.21";
internal static string defaultAndroidBrowserVersion = "1.2.0";
internal static string defaultAndroidXCoreVersion = "1.5.0";
internal static UniWebViewEditorSettings GetOrCreateSettings() {
var settings = AssetDatabase.LoadAssetAtPath<UniWebViewEditorSettings>(AssetPath);
if (settings == null) {
settings = ScriptableObject.CreateInstance<UniWebViewEditorSettings>();
Directory.CreateDirectory("Assets/Editor/UniWebView/");
AssetDatabase.CreateAsset(settings, AssetPath);
AssetDatabase.SaveAssets();
}
return settings;
}
internal static SerializedObject GetSerializedSettings() {
return new SerializedObject(GetOrCreateSettings());
}
}
// UniWebViewEditorSettings is not working well with AndroidProjectFilesModifier.
// (reading it requires main thread, but the OnModifyAndroidProjectFiles is not in main thread)
[Serializable]
public class UniWebViewEditorSettingsReading {
public bool usesCleartextTraffic = false;
public bool writeExternalStorage = false;
public bool accessFineLocation = false;
public bool addsKotlin = true;
public string kotlinVersion = null;
public bool addsAndroidBrowser = true;
public string androidBrowserVersion = null;
public bool addsAndroidXCore = false;
public string androidXCoreVersion = null;
public bool enableJetifier = true;
public string[] authCallbackUrls = { };
public bool supportLINELogin = false;
}
static class UniWebViewSettingsProvider {
static SerializedObject settings;
#if UNITY_2018_3_OR_NEWER
private class Provider : SettingsProvider {
public Provider(string path, SettingsScope scope = SettingsScope.User): base(path, scope) {}
public override void OnGUI(string searchContext) {
DrawPref();
}
}
[SettingsProvider]
static SettingsProvider UniWebViewPref() {
return new Provider("Preferences/UniWebView");
}
#else
[PreferenceItem("UniWebView")]
#endif
static void DrawPref() {
EditorGUIUtility.labelWidth = 320;
EditorGUIUtility.fieldWidth = 20;
if (settings == null) {
settings = UniWebViewEditorSettings.GetSerializedSettings();
}
settings.Update();
EditorGUI.BeginChangeCheck();
// Manifest
EditorGUILayout.Space();
EditorGUILayout.BeginVertical();
EditorGUILayout.LabelField("Android Manifest", EditorStyles.boldLabel);
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(settings.FindProperty("usesCleartextTraffic"));
DrawDetailLabel("If you need to load plain HTTP content.");
EditorGUILayout.PropertyField(settings.FindProperty("writeExternalStorage"));
DrawDetailLabel("If you need to download an image from web page.");
EditorGUILayout.PropertyField(settings.FindProperty("accessFineLocation"));
DrawDetailLabel("If you need to enable location support in web view.");
EditorGUI.indentLevel--;
EditorGUILayout.EndVertical();
// Gradle
EditorGUILayout.Space();
EditorGUILayout.BeginVertical();
EditorGUILayout.LabelField("Gradle Build", EditorStyles.boldLabel);
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(settings.FindProperty("addsKotlin"));
DrawDetailLabel("Turn off this if another library is already adding Kotlin runtime.");
var addingKotlin = settings.FindProperty("addsKotlin").boolValue;
if (addingKotlin) {
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(settings.FindProperty("kotlinVersion"), GUILayout.Width(400));
DrawDetailLabel("If not specified, use the default version: " + UniWebViewEditorSettings.defaultKotlinVersion);
EditorGUI.indentLevel--;
}
EditorGUILayout.PropertyField(settings.FindProperty("addsAndroidBrowser"));
DrawDetailLabel("Turn off this if another library is already adding 'androidx.browser:browser'.");
var addingBrowser = settings.FindProperty("addsAndroidBrowser").boolValue;
if (addingBrowser) {
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(settings.FindProperty("androidBrowserVersion"), GUILayout.Width(400));
DrawDetailLabel("If not specified, use the default version: " + UniWebViewEditorSettings.defaultAndroidBrowserVersion);
EditorGUI.indentLevel--;
}
if (!addingBrowser) {
EditorGUILayout.BeginVertical("box");
EditorGUILayout.HelpBox("UniWebView at least requires `androidx.core` to run. Without it, your game will crash when launching.\nIf you do not have another `androidx.core` package in the project, enable the option below.", MessageType.Warning);
EditorGUILayout.PropertyField(settings.FindProperty("addsAndroidXCore"));
DrawDetailLabel("Turn on this if you disabled `Adds Android Browser` and there is no other library adding 'androidx.core:core'.");
var addingCore = settings.FindProperty("addsAndroidXCore").boolValue;
if (addingCore) {
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(settings.FindProperty("androidXCoreVersion"), GUILayout.Width(400));
DrawDetailLabel("If not specified, use the default version: " + UniWebViewEditorSettings.defaultAndroidXCoreVersion);
EditorGUI.indentLevel--;
}
EditorGUILayout.EndVertical();
}
EditorGUILayout.PropertyField(settings.FindProperty("enableJetifier"));
DrawDetailLabel("Turn off this if you do not need Jetifier (for converting other legacy support dependencies to Android X).");
EditorGUI.indentLevel--;
EditorGUILayout.EndVertical();
// Auth callbacks
EditorGUILayout.Space();
EditorGUILayout.BeginVertical();
EditorGUILayout.LabelField("Auth Callbacks", EditorStyles.boldLabel);
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(settings.FindProperty("authCallbackUrls"), true);
DrawDetailLabel("Adds all available auth callback URLs here to use UniWebView's auth support.");
EditorGUILayout.Space();
EditorGUILayout.PropertyField(settings.FindProperty("supportLINELogin"));
DrawDetailLabel("LINE Login is using a custom fixed scheme. If you want to support LINE Login, turn on this.");
EditorGUI.indentLevel--;
EditorGUILayout.EndVertical();
EditorGUILayout.Space();
EditorGUILayout.BeginHorizontal();
EditorGUI.indentLevel++;
EditorGUILayout.HelpBox("Read the help page to know more about all UniWebView preferences detail.", MessageType.Info);
var style = new GUIStyle(GUI.skin.label);
style.normal.textColor = Color.blue;
if (GUILayout.Button("Help Page", style)) {
Application.OpenURL("https://docs.uniwebview.com/guide/installation.html#optional-steps");
}
EditorGUILayout.Space();
EditorGUI.indentLevel--;
EditorGUILayout.EndHorizontal();
if (EditorGUI.EndChangeCheck()) {
settings.ApplyModifiedProperties();
AssetDatabase.SaveAssets();
}
EditorGUIUtility.labelWidth = 0;
}
static void DrawDetailLabel(string text) {
EditorGUI.indentLevel++;
EditorGUILayout.LabelField(text, EditorStyles.miniLabel);
EditorGUI.indentLevel--;
}
}