Files
DeviantMobile-Rohan/Assets/Editor/AppUIActivityVibratorPatch.cs

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