com.azerion.bluestack 3.1.9 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/Editor/Android/AndroidDependencyParser.cs +33 -21
  3. package/Editor/Android/Gradle/GradleConfigUtils.cs +1 -1
  4. package/Editor/BlueStackDependenciesSource.xml +38 -0
  5. package/Editor/BlueStackDependency.cs +30 -0
  6. package/Editor/{IDependencyModifier.cs.meta → BlueStackDependency.cs.meta} +1 -1
  7. package/Editor/BlueStackSettings.cs +18 -13
  8. package/Editor/BlueStackSettingsEditor.cs +101 -48
  9. package/Editor/DependencyCheckResult.cs +1 -1
  10. package/Editor/DependencyProvider.cs +87 -102
  11. package/Editor/IDependencyParser.cs +3 -3
  12. package/Editor/iOS/BlueStackBuildPostProcess.cs +85 -12
  13. package/Editor/iOS/IOSDependencyParser.cs +36 -24
  14. package/Plugins/Android/bluestack-unity-android-bridge-5.0.0.aar +0 -0
  15. package/Plugins/iOS/BSUAdSize.swift +33 -0
  16. package/Plugins/iOS/{BSUInitializtionStatus.m.meta → BSUAdSize.swift.meta} +1 -1
  17. package/Plugins/iOS/BSUBanner.h +9 -3
  18. package/Plugins/iOS/BSUBanner.swift +351 -0
  19. package/Plugins/iOS/{BSUInitializer.m.meta → BSUBanner.swift.meta} +1 -1
  20. package/Plugins/iOS/BSUInitializer.h +5 -5
  21. package/Plugins/iOS/BSUInitializer.swift +110 -0
  22. package/Plugins/iOS/{BSUAdNetworkStatus.m.meta → BSUInitializer.swift.meta} +1 -1
  23. package/Plugins/iOS/BSUInterface.h +21 -14
  24. package/Plugins/iOS/BSUInterface.m +61 -75
  25. package/Plugins/iOS/BSUInterstitialAd.h +1 -9
  26. package/Plugins/iOS/BSUInterstitialAd.swift +100 -0
  27. package/Plugins/iOS/{BSUBanner.m.meta → BSUInterstitialAd.swift.meta} +1 -1
  28. package/Plugins/iOS/BSUNativeAd.h +1 -1
  29. package/Plugins/iOS/BSUNativeAd.swift +122 -0
  30. package/Plugins/iOS/BSUNativeAd.swift.meta +37 -0
  31. package/Plugins/iOS/BSUObjectCache.swift +57 -0
  32. package/Plugins/iOS/BSUObjectCache.swift.meta +37 -0
  33. package/Plugins/iOS/BSUPluginUtil.swift +23 -0
  34. package/Plugins/iOS/BSUPluginUtil.swift.meta +37 -0
  35. package/Plugins/iOS/BSURequestOptions.h +14 -0
  36. package/Plugins/iOS/{BSUAdNetworkStatus.h.meta → BSURequestOptions.h.meta} +1 -1
  37. package/Plugins/iOS/BSURequestOptions.swift +57 -0
  38. package/Plugins/iOS/BSURequestOptions.swift.meta +37 -0
  39. package/Plugins/iOS/BSURewardedVideoAd.h +1 -5
  40. package/Plugins/iOS/BSURewardedVideoAd.h.meta +25 -1
  41. package/Plugins/iOS/BSURewardedVideoAd.swift +108 -0
  42. package/Plugins/iOS/BSURewardedVideoAd.swift.meta +37 -0
  43. package/Plugins/iOS/BSUSettings.swift +13 -0
  44. package/Plugins/iOS/BSUSettings.swift.meta +37 -0
  45. package/Plugins/iOS/BSUTypes.h +1 -44
  46. package/Plugins/iOS/BSUTypes.swift +60 -0
  47. package/Plugins/iOS/BSUTypes.swift.meta +37 -0
  48. package/Plugins/iOS/UnityFramework.modulemap +12 -0
  49. package/{Editor/BlueStackMediationNetworks.xml.meta → Plugins/iOS/UnityFramework.modulemap.meta} +2 -2
  50. package/Runtime/API/AdSize.cs +7 -7
  51. package/Runtime/API/NativeAd/NativeAd.cs +59 -12
  52. package/Runtime/API/Rewarded/Reward.cs +15 -0
  53. package/Runtime/API/Rewarded/Reward.cs.meta +3 -0
  54. package/Runtime/Common/NativeAd/AdsEventExecutor.cs +1 -0
  55. package/Runtime/Common/NativeAd/NativeUtils.cs +10 -10
  56. package/Runtime/Internal/IPreferenceClient.cs +1 -1
  57. package/Runtime/Platforms/Android/BannerAdClient.cs +7 -2
  58. package/Runtime/Platforms/Android/BlueStackClient.cs +104 -7
  59. package/Runtime/Platforms/Android/BlueStackNativeClassNames.cs +12 -7
  60. package/Runtime/Platforms/Android/NativeAdClient.cs +1 -0
  61. package/Runtime/Platforms/Android/PreferenceClient.cs +6 -6
  62. package/Runtime/Platforms/Android/RewardedVideoAdClient.cs +2 -1
  63. package/Runtime/Platforms/iOS/BannerAdClient.cs +2 -2
  64. package/Runtime/Platforms/iOS/Externs.cs +13 -14
  65. package/Runtime/Platforms/iOS/InterstitialAdClient.cs +1 -1
  66. package/Runtime/Platforms/iOS/NativeAdClient.cs +1 -1
  67. package/Runtime/Platforms/iOS/PreferenceClient.cs +11 -11
  68. package/Runtime/Platforms/iOS/RewardedVideoAdClient.cs +1 -1
  69. package/package.json +1 -1
  70. package/Editor/Android/AndroidDependencyModifier.cs +0 -125
  71. package/Editor/Android/AndroidDependencyModifier.cs.meta +0 -3
  72. package/Editor/BlueStackDependencies.xml +0 -12
  73. package/Editor/BlueStackMediationNetworks.xml +0 -31
  74. package/Editor/IDependencyModifier.cs +0 -12
  75. package/Editor/MediationNetworkDependency.cs +0 -28
  76. package/Editor/MediationNetworkDependency.cs.meta +0 -3
  77. package/Editor/iOS/DependencyProvider.cs +0 -0
  78. package/Editor/iOS/DependencyProvider.cs.meta +0 -3
  79. package/Editor/iOS/IDependencyParser.cs +0 -0
  80. package/Editor/iOS/IDependencyParser.cs.meta +0 -3
  81. package/Editor/iOS/IOSDependencyModifier.cs +0 -107
  82. package/Editor/iOS/IOSDependencyModifier.cs.meta +0 -3
  83. package/Plugins/Android/bluestack-unity-android-bridge-2.0.0.aar +0 -0
  84. package/Plugins/iOS/BSUAdNetworkStatus.h +0 -29
  85. package/Plugins/iOS/BSUAdNetworkStatus.m +0 -23
  86. package/Plugins/iOS/BSUBanner.m +0 -344
  87. package/Plugins/iOS/BSUInitializer.m +0 -63
  88. package/Plugins/iOS/BSUInitializtionStatus.h +0 -21
  89. package/Plugins/iOS/BSUInitializtionStatus.h.meta +0 -27
  90. package/Plugins/iOS/BSUInitializtionStatus.m +0 -13
  91. package/Plugins/iOS/BSUInterstitialAd.m +0 -94
  92. package/Plugins/iOS/BSUInterstitialAd.m.meta +0 -37
  93. package/Plugins/iOS/BSUNativeAd.m +0 -113
  94. package/Plugins/iOS/BSUNativeAd.m.meta +0 -37
  95. package/Plugins/iOS/BSUObjectCache.m +0 -78
  96. package/Plugins/iOS/BSUObjectCache.m.meta +0 -37
  97. package/Plugins/iOS/BSUPluginUtil.m +0 -40
  98. package/Plugins/iOS/BSUPluginUtil.m.meta +0 -37
  99. package/Plugins/iOS/BSURewardedVideoAd.m +0 -98
  100. package/Plugins/iOS/BSURewardedVideoAd.m.meta +0 -3
  101. package/Plugins/iOS/BSUSettings.m +0 -12
  102. package/Plugins/iOS/BSUSettings.m.meta +0 -37
  103. /package/Editor/{BlueStackDependencies.xml.meta → BlueStackDependenciesSource.xml.meta} +0 -0
  104. /package/Plugins/Android/{bluestack-unity-android-bridge-2.0.0.aar.meta → bluestack-unity-android-bridge-5.0.0.aar.meta} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.2.0] - 2025-06-16
4
+
5
+ ### Changed
6
+
7
+ - BlueStack Android Core SDK version upgraded to 5.1.3
8
+ - BlueStack iOS Core SDK version upgraded to 5.1.4
9
+ - Implemented API changes of native core SDK v5
10
+ - iOS dependency management has been updated in the Unity Editor, mediation adapters are now added as separate pods in the Podfile.
11
+ - A single source of truth is now used for dependency management, removing the need for separate dependency XML files for Mediation networks.
12
+
13
+ ## [3.1.10] - 2024-11-15
14
+
15
+ ### Changed
16
+
17
+ - Updated the iOS Post Processor to include AdMob App IDs based on the inclusion of AdMob mediation adapters.
18
+ - onIOSMediationNetworksUpdateEvent will trigger after changes to Settings serializedObject properties are applied.
19
+
20
+ ### fixed
21
+
22
+ - Fixed the subspec inclusion process in the Podfile to ensure the full subspec string is removed when no adapters are selected and the subspec array is empty.
23
+ - Fixed a Null Reference issue by updating the Destroy and distractor methods for Native Ads.
24
+
3
25
  ## [3.1.9] - 2024-11-07
4
26
 
5
27
  ### fixed
@@ -16,6 +38,7 @@
16
38
 
17
39
  ### Changed
18
40
 
41
+ - Removed `Rewarded` namespace
19
42
  - Renamed the `GetBadge` method to `GetBadgeText`
20
43
  - Renamed the `GetTitle` method to `GetTitleText`
21
44
  - Renamed the `RegisterImageGameObject` method to `RegisterCoverImageGameObject`
@@ -115,6 +138,7 @@
115
138
  ### Changed
116
139
 
117
140
  - BlueStack iOS SDK version updated to 4.3.0
141
+ - Native Ad support for iOS
118
142
  - Editor Settings: Both iOS and Android admob id fields are together
119
143
 
120
144
  ## [3.0.0] - 2023-10-13
@@ -1,4 +1,5 @@
1
1
  using System.Collections.Generic;
2
+ using System.IO;
2
3
  using System.Xml;
3
4
  using UnityEngine;
4
5
 
@@ -6,48 +7,59 @@ namespace Azerion.BlueStack.Editor.Android
6
7
  {
7
8
  public class AndroidDependencyParser : IDependencyParser
8
9
  {
9
- List<Dependency> IDependencyParser.parseDependencies(string xmlFilePath)
10
+ List<Dependency> IDependencyParser.ParseDependencies(string xmlFilePath)
10
11
  {
11
12
  var xmlDoc = new XmlDocument();
12
13
  xmlDoc.Load(xmlFilePath);
13
14
  const string xmlPathPattern = "//dependencies/androidPackages";
14
15
  var androidPackagesNode = xmlDoc.SelectSingleNode(xmlPathPattern);
15
16
  var dependencies = new List<Dependency>();
16
- if (androidPackagesNode == null) return dependencies;
17
+ if (androidPackagesNode == null)
18
+ return dependencies;
17
19
  foreach (XmlNode androidPackageNode in androidPackagesNode.ChildNodes)
18
20
  {
19
21
  var specAttribute = androidPackageNode.Attributes?["spec"];
20
- if (specAttribute == null) continue;
22
+ if (specAttribute == null)
23
+ continue;
21
24
  dependencies.Add(new AndroidDependency(specAttribute.Value, "", ""));
22
25
  }
23
26
  return dependencies;
24
27
  }
25
28
 
26
- List<MediationNetworkDependency> IDependencyParser.parseMediationNetworkDependencies(string xmlFilePath)
29
+ List<BlueStackDependency> IDependencyParser.ParseBlueStackDependencies(
30
+ string xmlFilePath,
31
+ HashSet<string> activeNames
32
+ )
27
33
  {
34
+ if (!File.Exists(xmlFilePath))
35
+ {
36
+ Debug.LogError("Dependencies file not found at: " + xmlFilePath);
37
+ return new List<BlueStackDependency>();
38
+ }
39
+
28
40
  var xmlDoc = new XmlDocument();
29
41
  xmlDoc.Load(xmlFilePath);
30
- const string xmlPathPattern = "//networkList/androidNetworks";
42
+ const string xmlPathPattern = "//dependencies/androidPackages";
31
43
  var androidPackagesNode = xmlDoc.SelectSingleNode(xmlPathPattern);
32
- var dependencies = new List<MediationNetworkDependency>();
33
- if (androidPackagesNode == null) return dependencies;
44
+ var dependencies = new List<BlueStackDependency>();
45
+ if (androidPackagesNode == null)
46
+ return dependencies;
34
47
  foreach (XmlNode androidPackageNode in androidPackagesNode.ChildNodes)
35
48
  {
36
- var nameAttribute = androidPackageNode.Attributes?["name"];
37
- var packageAttribute = androidPackageNode.Attributes?["package"];
38
- var activeAttribute = androidPackageNode.Attributes?["active"];
39
- var repositoriesNode = androidPackageNode.SelectSingleNode("repositories");
40
- if (nameAttribute == null || packageAttribute == null) continue;
41
-
42
- var name = nameAttribute.Value;
43
- var package = packageAttribute.Value;
44
- var active = activeAttribute != null && bool.Parse(activeAttribute.Value);
45
-
46
- dependencies.Add(repositoriesNode != null
47
- ? new MediationNetworkDependency(name, package, active, repositoriesNode)
48
- : new MediationNetworkDependency(name, package, active));
49
+ var aliasAttribute = androidPackageNode.Attributes?["alias"];
50
+ var specAttribute = androidPackageNode.Attributes?["spec"];
51
+ var versionAttribute = androidPackageNode.Attributes?["version"];
52
+ var alias = aliasAttribute != null ? aliasAttribute.Value : specAttribute?.Value;
53
+ var name = specAttribute?.Value;
54
+ var version = versionAttribute?.Value;
55
+ if (name == null)
56
+ continue;
57
+ bool active = activeNames != null && activeNames.Contains(name);
58
+ dependencies.Add(
59
+ new BlueStackDependency(alias, name, version, androidPackageNode, active)
60
+ );
49
61
  }
50
62
  return dependencies;
51
63
  }
52
64
  }
53
- }
65
+ }
@@ -66,7 +66,7 @@ namespace Azerion.BlueStack.Editor.Android.Gradle
66
66
  String[] gradleLines = File.ReadAllLines(gradleFilePath);
67
67
  var isFound = false;
68
68
  var androidMavenDependency = "";
69
- var dependencies = DependencyProvider.GetAllDependencies(new AndroidDependencyParser());
69
+ var dependencies = DependencyProvider.GetDependencies(new AndroidDependencyParser());
70
70
  foreach (var dependency in dependencies)
71
71
  {
72
72
  var androidDependency = (AndroidDependency)dependency;
@@ -0,0 +1,38 @@
1
+ <dependencies version="3.1.10">
2
+ <androidPackages>
3
+ <androidPackage alias="BlueStack" spec="com.azerion:bluestack-sdk-core:5.1.3">
4
+ <repositories>
5
+ <repository>https://packagecloud.io/smartadserver/android/maven2</repository>
6
+ <repository>https://s01.oss.sonatype.org/content/repositories/snapshots/</repository>
7
+ </repositories>
8
+ </androidPackage>
9
+ <androidPackage alias="Criteo In-App Bidding" spec="com.azerion:bluestack-mediation-criteo:4.4.0.0"/>
10
+ <androidPackage alias="AdColony" spec="com.azerion:bluestack-mediation-adcolony:4.4.0.0"/>
11
+ <androidPackage alias="Huawei" spec="com.azerion:bluestack-mediation-huawei:4.4.0.0">
12
+ <repositories>
13
+ <repository>https://developer.huawei.com/repo/</repository>
14
+ </repositories>
15
+ </androidPackage>
16
+ <androidPackage alias="GAM / AdMob" spec="com.azerion:bluestack-mediation-gma:4.4.0.0"/>
17
+ <androidPackage alias="In-App Bidding" spec="com.azerion:bluestack-mediation-bidding:4.4.0.0">
18
+ <repositories>
19
+ <repository>https://packagecloud.io/smartadserver/android/maven2</repository>
20
+ </repositories>
21
+ </androidPackage>
22
+ <androidPackage alias="Smart Display / Equativ" spec="com.azerion:bluestack-mediation-smartadserver:4.4.0.0">
23
+ <repositories>
24
+ <repository>https://packagecloud.io/smartadserver/android/maven2</repository>
25
+ </repositories>
26
+ </androidPackage>
27
+ <androidPackage alias="Ogury" spec="com.azerion:bluestack-mediation-ogury:4.4.0.0">
28
+ <repositories>
29
+ <repository>https://maven.ogury.co/</repository>
30
+ </repositories>
31
+ </androidPackage>
32
+ </androidPackages>
33
+ <iosPods>
34
+ <iosPod alias="BlueStack" name="BlueStack-SDK" version="5.1.4" bitcodeEnabled="false" addToAllTargets="false"/>
35
+ <iosPod alias="AdMob" name="BlueStackGoogleAdapter" version="5.1.4.0" bitcodeEnabled="false" addToAllTargets="false"/>
36
+ <iosPod alias="Equativ" name="BlueStackEquativAdapter" version="5.1.4.0" bitcodeEnabled="false" addToAllTargets="false"/>
37
+ </iosPods>
38
+ </dependencies>
@@ -0,0 +1,30 @@
1
+ using System;
2
+ using System.Xml;
3
+
4
+ namespace Azerion.BlueStack.Editor
5
+ {
6
+ [Serializable]
7
+ public class BlueStackDependency
8
+ {
9
+ public BlueStackDependency(
10
+ string alias,
11
+ string name,
12
+ string version,
13
+ XmlNode packageNode,
14
+ bool active = false
15
+ )
16
+ {
17
+ Alias = alias;
18
+ Name = name;
19
+ Version = version;
20
+ PackageNode = packageNode;
21
+ Active = active;
22
+ }
23
+
24
+ public string Alias { get; set; }
25
+ public string Name { get; set; }
26
+ public string Version { get; set; }
27
+ public XmlNode PackageNode { get; set; }
28
+ public bool Active { get; set; }
29
+ }
30
+ }
@@ -1,5 +1,5 @@
1
1
  fileFormatVersion: 2
2
- guid: acea3014ea80241cfbaf2292132e1d25
2
+ guid: b0ac74131b4294e2bb835f1ab9019d05
3
3
  MonoImporter:
4
4
  externalObjects: {}
5
5
  serializedVersion: 2
@@ -8,32 +8,36 @@ namespace Azerion.BlueStack.Editor
8
8
  private static BlueStackSettings instance;
9
9
  private const string BlueStackSettingsFile = "BlueStackSettings";
10
10
 
11
- [SerializeField] private string admobAppIdAndroid;
11
+ [SerializeField]
12
+ private string admobAppIdAndroid;
12
13
  public string AdmobAppIdAndroid
13
14
  {
14
15
  get => Instance.admobAppIdAndroid;
15
16
  set => Instance.admobAppIdAndroid = value;
16
17
  }
17
18
 
18
- [SerializeField] private string admobAppIdIOS;
19
+ [SerializeField]
20
+ private string admobAppIdIOS;
19
21
  public string AdmobAppIdIOS
20
22
  {
21
23
  get => Instance.admobAppIdIOS;
22
24
  set => Instance.admobAppIdIOS = value;
23
25
  }
24
26
 
25
- [SerializeField] private List<MediationNetworkDependency> iOSMediationNetworks;
26
- public List<MediationNetworkDependency> IOSMediationNetworks
27
+ [SerializeField]
28
+ private List<BlueStackDependency> iOSDependencies;
29
+ public List<BlueStackDependency> IOSDependencies
27
30
  {
28
- get => Instance.iOSMediationNetworks ?? new List<MediationNetworkDependency>();
29
- set => Instance.iOSMediationNetworks = value;
31
+ get => Instance.iOSDependencies ?? new List<BlueStackDependency>();
32
+ set => Instance.iOSDependencies = value;
30
33
  }
31
-
32
- [SerializeField] private List<MediationNetworkDependency> androidMediationNetworks;
33
- public List<MediationNetworkDependency> AndroidMediationNetworks
34
+
35
+ [SerializeField]
36
+ private List<BlueStackDependency> androidDependencies;
37
+ public List<BlueStackDependency> AndroidDependencies
34
38
  {
35
- get => Instance.androidMediationNetworks ?? new List<MediationNetworkDependency>();
36
- set => Instance.androidMediationNetworks = value;
39
+ get => Instance.androidDependencies ?? new List<BlueStackDependency>();
40
+ set => Instance.androidDependencies = value;
37
41
  }
38
42
 
39
43
  public static BlueStackSettings Instance
@@ -54,11 +58,12 @@ namespace Azerion.BlueStack.Editor
54
58
  else
55
59
  {
56
60
  Debug.LogWarning(
57
- "BlueStackSettings asset not found! Create new via Azerion/BlueStack/Settings menu");
61
+ "BlueStackSettings asset not found! Create new via Azerion/BlueStack/Settings menu"
62
+ );
58
63
  return null;
59
64
  }
60
65
  }
61
66
  set => instance = value;
62
67
  }
63
68
  }
64
- }
69
+ }
@@ -5,6 +5,8 @@ using UnityEditor;
5
5
  using UnityEngine;
6
6
  using Azerion.BlueStack.Editor.Android;
7
7
  using Azerion.BlueStack.Editor.iOS;
8
+ using System.Linq;
9
+ using System.Xml;
8
10
 
9
11
  namespace Azerion.BlueStack.Editor
10
12
  {
@@ -14,15 +16,15 @@ namespace Azerion.BlueStack.Editor
14
16
  private const string BlueStackSettingsResDir = "Assets/Resources";
15
17
  private const string BlueStackSettingsFile = "BlueStackSettings";
16
18
  private const string BlueStackSettingsFileExtension = ".asset";
17
-
19
+
18
20
  SerializedProperty iOSMediationNetworkListProperty;
19
21
  SerializedProperty androidMediationNetworkListProperty;
20
22
 
21
23
  SerializedProperty iOSAdmobAppIdProperty;
22
24
  SerializedProperty androidAdmobAppIdProperty;
23
25
 
24
- public static event EventHandler<List<MediationNetworkDependency>> onIOSMediationNetworksUpdateEvent;
25
- public static event EventHandler<List<MediationNetworkDependency>> onAndroidMediationNetworksUpdateEvent;
26
+ public static event EventHandler<List<BlueStackDependency>> OnIOSDependenciesUpdateEvent;
27
+ public static event EventHandler<List<BlueStackDependency>> OnAndroidDependenciesUpdateEvent;
26
28
 
27
29
  [MenuItem("Azerion/BlueStack/Settings")]
28
30
  public static void OpenInspector()
@@ -42,10 +44,14 @@ namespace Azerion.BlueStack.Editor
42
44
  try
43
45
  {
44
46
  Directory.CreateDirectory(BlueStackSettingsResDir);
45
- BlueStackSettings.Instance = ScriptableObject.CreateInstance<BlueStackSettings>();
47
+ BlueStackSettings.Instance =
48
+ ScriptableObject.CreateInstance<BlueStackSettings>();
46
49
 
47
50
  string assetPath = Path.Combine(BlueStackSettingsResDir, BlueStackSettingsFile);
48
- string assetPathWithExtension = Path.ChangeExtension(assetPath, BlueStackSettingsFileExtension);
51
+ string assetPathWithExtension = Path.ChangeExtension(
52
+ assetPath,
53
+ BlueStackSettingsFileExtension
54
+ );
49
55
  AssetDatabase.CreateAsset(BlueStackSettings.Instance, assetPathWithExtension);
50
56
  AssetDatabase.SaveAssets();
51
57
 
@@ -82,25 +88,19 @@ namespace Azerion.BlueStack.Editor
82
88
 
83
89
  public static void Initialize()
84
90
  {
85
- if (!DoesBlueStackSettingsExist()) return;
86
-
87
- BlueStackSettings.Instance.IOSMediationNetworks.Clear();
88
- BlueStackSettings.Instance.AndroidMediationNetworks.Clear();
89
-
90
- // Sync/Copy base mediation dependency xml file from Package to Assets directory
91
- DependencyProvider.SyncDependenciesXMLs();
91
+ if (!DoesBlueStackSettingsExist())
92
+ return;
92
93
 
93
- var iOSMediationNetworkDependencies = DependencyProvider.GetMediationNetworkDependenciesFromAsset(new IOSDependencyParser());
94
- var androidMediationNetworkDependencies = DependencyProvider.GetMediationNetworkDependenciesFromAsset(new AndroidDependencyParser());
94
+ BlueStackSettings.Instance.IOSDependencies.Clear();
95
+ BlueStackSettings.Instance.AndroidDependencies.Clear();
95
96
 
96
- BlueStackSettings.Instance.AndroidMediationNetworks = androidMediationNetworkDependencies;
97
- BlueStackSettings.Instance.IOSMediationNetworks = iOSMediationNetworkDependencies;
97
+ DependencyProvider.SyncDependenciesXMLs();
98
98
 
99
- DependencyProvider.UpdateMediationNetworkDependencies(new AndroidDependencyModifier(),
100
- BlueStackSettings.Instance.AndroidMediationNetworks);
101
- DependencyProvider.UpdateMediationNetworkDependencies(new IOSDependencyModifier(),
102
- BlueStackSettings.Instance.IOSMediationNetworks);
99
+ var androidDependencies = DependencyProvider.GetBlueStackDependencies(new AndroidDependencyParser());
100
+ var iOSDependencies = DependencyProvider.GetBlueStackDependencies(new IOSDependencyParser());
103
101
 
102
+ BlueStackSettings.Instance.AndroidDependencies = androidDependencies;
103
+ BlueStackSettings.Instance.IOSDependencies = iOSDependencies;
104
104
  }
105
105
 
106
106
  public override void OnInspectorGUI()
@@ -111,51 +111,104 @@ namespace Azerion.BlueStack.Editor
111
111
  androidAdmobAppIdProperty = serializedObject.FindProperty("admobAppIdAndroid");
112
112
  iOSAdmobAppIdProperty = serializedObject.FindProperty("admobAppIdIOS");
113
113
 
114
- EditorGUILayout.PropertyField(androidAdmobAppIdProperty, new GUIContent("Admob AppId Android: "));
115
- EditorGUILayout.PropertyField(iOSAdmobAppIdProperty, new GUIContent("Admob AppId IOS: "));
114
+ EditorGUILayout.PropertyField(
115
+ androidAdmobAppIdProperty,
116
+ new GUIContent("Admob AppId Android: ")
117
+ );
118
+ EditorGUILayout.PropertyField(
119
+ iOSAdmobAppIdProperty,
120
+ new GUIContent("Admob AppId IOS: ")
121
+ );
116
122
 
117
- // Android Mediation Networks
123
+ // Android Dependencies
118
124
  EditorGUILayout.Separator();
119
- EditorGUILayout.LabelField("Android Mediation Networks: ", EditorStyles.boldLabel);
120
-
121
- foreach (var dependency in BlueStackSettings.Instance.AndroidMediationNetworks)
125
+ EditorGUILayout.LabelField("Android Dependencies:", EditorStyles.boldLabel);
126
+ var androidToggles = new List<(BlueStackDependency dep, bool newActive)>();
127
+ foreach (var dep in BlueStackSettings.Instance.AndroidDependencies)
122
128
  {
123
- // dependency.Print();
124
- bool newAutomaticConfigurationFilesUpdate = GUILayout.Toggle(dependency.IsActive, dependency.Name);
125
- if (newAutomaticConfigurationFilesUpdate != dependency.IsActive)
129
+ bool newActive = GUILayout.Toggle(dep.Active, dep.Alias ?? dep.Name);
130
+ if (newActive != dep.Active)
126
131
  {
127
- dependency.IsActive = newAutomaticConfigurationFilesUpdate;
132
+ androidToggles.Add((dep, newActive));
128
133
  }
129
134
  }
130
-
131
- // iOS Mediation Networks
132
- EditorGUILayout.Separator();
133
- EditorGUILayout.LabelField("iOS Mediation Networks: ", EditorStyles.boldLabel);
135
+ foreach (var (dep, newActive) in androidToggles)
136
+ {
137
+ UpdateDependencyActiveState(dep, newActive, isIOS: false);
138
+ }
134
139
 
135
- foreach (var dependency in BlueStackSettings.Instance.IOSMediationNetworks)
140
+ // iOS Dependencies
141
+ EditorGUILayout.Separator();
142
+ EditorGUILayout.LabelField("iOS Dependencies:", EditorStyles.boldLabel);
143
+ var iosToggles = new List<(BlueStackDependency dep, bool newActive)>();
144
+ foreach (var dep in BlueStackSettings.Instance.IOSDependencies)
136
145
  {
137
- // dependency.Print();
138
- bool newAutomaticConfigurationFilesUpdate = GUILayout.Toggle(dependency.IsActive, dependency.Name);
139
- if (newAutomaticConfigurationFilesUpdate != dependency.IsActive)
146
+ bool newActive = GUILayout.Toggle(dep.Active, dep.Alias ?? dep.Name);
147
+ if (newActive != dep.Active)
140
148
  {
141
- dependency.IsActive = newAutomaticConfigurationFilesUpdate;
149
+ iosToggles.Add((dep, newActive));
142
150
  }
143
151
  }
152
+ foreach (var (dep, newActive) in iosToggles)
153
+ {
154
+ UpdateDependencyActiveState(dep, newActive, isIOS: true);
155
+ }
156
+
157
+ bool anyAndroidChanged = androidToggles.Count > 0;
158
+ bool anyIOSChanged = iosToggles.Count > 0;
144
159
 
145
160
  if (EditorGUI.EndChangeCheck())
146
161
  {
147
- // TODO: Before triggering the event check if any change occured in the list
148
- onIOSMediationNetworksUpdateEvent?.Invoke(this, BlueStackSettings.Instance.IOSMediationNetworks);
149
- onAndroidMediationNetworksUpdateEvent?.Invoke(this, BlueStackSettings.Instance.AndroidMediationNetworks);
162
+ serializedObject.ApplyModifiedProperties();
163
+ if (anyAndroidChanged && OnAndroidDependenciesUpdateEvent != null)
164
+ {
165
+ OnAndroidDependenciesUpdateEvent.Invoke(this,BlueStackSettings.Instance.AndroidDependencies);
166
+ }
167
+ if (anyIOSChanged && OnIOSDependenciesUpdateEvent != null)
168
+ {
169
+ OnIOSDependenciesUpdateEvent.Invoke(this,BlueStackSettings.Instance.IOSDependencies);
170
+ }
171
+ }
172
+ }
150
173
 
151
- DependencyProvider.UpdateMediationNetworkDependencies(new AndroidDependencyModifier(),
152
- BlueStackSettings.Instance.AndroidMediationNetworks);
153
- DependencyProvider.UpdateMediationNetworkDependencies(new IOSDependencyModifier(),
154
- BlueStackSettings.Instance.IOSMediationNetworks);
174
+ private void UpdateDependencyActiveState(BlueStackDependency dep, bool isActive, bool isIOS)
175
+ {
176
+ // Load the asset XML
177
+ var xmlDoc = new XmlDocument();
178
+ xmlDoc.Load("Assets/Editor/BlueStackDependencies.xml");
179
+ string nodePath = isIOS ? "//dependencies/iosPods" : "//dependencies/androidPackages";
180
+ var parentNode = xmlDoc.SelectSingleNode(nodePath);
181
+ if (parentNode == null)
182
+ return;
183
+
184
+ // Find the node by name
185
+ XmlNode found = null;
186
+ foreach (XmlNode node in parentNode.ChildNodes)
187
+ {
188
+ var nameAttr = isIOS ? node.Attributes?["name"] : node.Attributes?["spec"];
189
+ if (nameAttr != null && nameAttr.Value == dep.Name)
190
+ {
191
+ found = node;
192
+ break;
193
+ }
194
+ }
155
195
 
156
- serializedObject.ApplyModifiedProperties();
196
+ if (isActive && found == null)
197
+ {
198
+ // Add node
199
+ var imported = xmlDoc.ImportNode(dep.PackageNode, true);
200
+ parentNode.AppendChild(imported);
201
+ }
202
+ else if (!isActive && found != null)
203
+ {
204
+ // Remove node
205
+ parentNode.RemoveChild(found);
157
206
  }
158
207
 
208
+ // Save changes
209
+ DependencyProvider.SaveDependenciesXMLFile(xmlDoc.OuterXml);
210
+ // Update the in-memory state
211
+ dep.Active = isActive;
159
212
  }
160
213
  }
161
- }
214
+ }
@@ -11,4 +11,4 @@ namespace Azerion.BlueStack.Editor
11
11
  public bool HasMissingDependency { get; }
12
12
  public string ErrorMessage { get; }
13
13
  }
14
- }
14
+ }