219 lines
8.6 KiB
C#
219 lines
8.6 KiB
C#
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--;
|
|
}
|
|
} |