2using System.Collections.Generic;
13 internal static class FullscreenAdAudioController
17 private static readonly HashSet<AudioMuteLease> activeLeases =
new();
18 private static float previousVolume;
19 private static bool muteApplied;
25 static FullscreenAdAudioController()
27 SpaceAdMobileBase.ApplicationQuit -= Cleanup;
28 SpaceAdMobileBase.ApplicationQuit += Cleanup;
43 internal static IDisposable Acquire(AdUnitBase adUnit)
45 if (adUnit ==
null || !Application.isPlaying || !ShouldMute(adUnit))
48 var lease =
new AudioMuteLease();
49 activeLeases.Add(lease);
51 if (activeLeases.Count != 1)
return lease;
52 previousVolume = AudioListener.volume;
53 AudioListener.volume = 0f;
63 internal static void Cleanup()
66 RestoreAudioIfUnused();
71 #region Private Helpers
73 private static bool ShouldMute(AdUnitBase adUnit)
75 var autoMuteAdType = adUnit.AdType.ToAutoMuteAdType();
76 var options = SpaceAdMobileBase.Options;
77 return options !=
null &&
81 private static void Release(AudioMuteLease lease)
83 if (!activeLeases.Remove(lease))
86 RestoreAudioIfUnused();
89 private static void RestoreAudioIfUnused()
91 if (activeLeases.Count != 0 || !muteApplied)
94 AudioListener.volume = previousVolume;
105 private sealed class AudioMuteLease : IDisposable
107 private bool disposed;
112 public void Dispose()
AutoMuteAdTypes
Specifies fullscreen ad formats that mute Unity audio while the ad is displayed.