87 lines
3.0 KiB
C#
87 lines
3.0 KiB
C#
#if UNITY_EDITOR
|
|
using System;
|
|
using System.IO;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace DeviantMobile.Editor.Android
|
|
{
|
|
[InitializeOnLoad]
|
|
internal static class AppUIActivityVibratorPatch
|
|
{
|
|
private const string PackageName = "com.unity.dt.app-ui";
|
|
private const string RelativeJavaPath = "Runtime/Core/Platform/Android/Plugins/Android/AppUIActivity.java";
|
|
private const string PackageAssetPath = "Packages/" + PackageName + "/" + RelativeJavaPath;
|
|
|
|
static AppUIActivityVibratorPatch()
|
|
{
|
|
EditorApplication.update += ApplyOnceWhenEditorReady;
|
|
}
|
|
|
|
private static void ApplyOnceWhenEditorReady()
|
|
{
|
|
EditorApplication.update -= ApplyOnceWhenEditorReady;
|
|
TryApplyPatch();
|
|
}
|
|
|
|
[MenuItem("Tools/Android/App UI/Reapply Vibrator Compatibility Patch")]
|
|
private static void ReapplyPatchFromMenu()
|
|
{
|
|
if (TryApplyPatch(force: true))
|
|
{
|
|
Debug.Log("Reapplied App UI vibrator compatibility patch.");
|
|
}
|
|
else
|
|
{
|
|
Debug.LogWarning("App UI vibrator compatibility patch could not be applied. See console for details.");
|
|
}
|
|
}
|
|
|
|
private static bool TryApplyPatch(bool force = false)
|
|
{
|
|
try
|
|
{
|
|
var packageInfo = UnityEditor.PackageManager.PackageInfo.FindForAssetPath("Packages/" + PackageName);
|
|
if (packageInfo == null)
|
|
{
|
|
Debug.LogWarning($"Package '{PackageName}' could not be located. Skipping App UI vibrator patch.");
|
|
return false;
|
|
}
|
|
|
|
var javaFilePath = Path.Combine(packageInfo.resolvedPath, RelativeJavaPath);
|
|
if (!File.Exists(javaFilePath))
|
|
{
|
|
Debug.LogWarning($"AppUIActivity.java not found at '{javaFilePath}'.");
|
|
return false;
|
|
}
|
|
|
|
var currentSource = File.ReadAllText(javaFilePath);
|
|
if (!force && currentSource.Contains("Unable to access VibratorManager"))
|
|
{
|
|
return true; // already patched
|
|
}
|
|
|
|
var templatePath = Path.Combine(Application.dataPath, "Editor/AndroidTemplates/AppUIActivity.java.txt");
|
|
if (!File.Exists(templatePath))
|
|
{
|
|
Debug.LogWarning($"Template Java source missing at '{templatePath}'.");
|
|
return false;
|
|
}
|
|
|
|
var patchedSource = File.ReadAllText(templatePath);
|
|
File.WriteAllText(javaFilePath, patchedSource);
|
|
|
|
AssetDatabase.ImportAsset(PackageAssetPath);
|
|
Debug.Log("Applied App UI vibrator compatibility patch.");
|
|
return true;
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Debug.LogException(exception);
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endif
|