Skip to content

Commit 47cd40e

Browse files
authored
Add logic to automatically enable gradle templates in new projects (#670)
* Add logic to automatically enable gradle templates * Update PlayServicesResolver.cs
1 parent ecae23d commit 47cd40e

File tree

3 files changed

+90
-3
lines changed

3 files changed

+90
-3
lines changed

source/AndroidResolver/src/PlayServicesResolver.cs

+68-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ namespace GooglePlayServices {
1818
using System;
1919
using System.Collections.Generic;
2020
using System.IO;
21+
using System.Linq;
2122
using System.Text.RegularExpressions;
2223
using System.Threading;
2324
using System.Xml;
@@ -1747,7 +1748,7 @@ private static void ScheduleResolve(bool forceResolution, bool closeWindowOnComp
17471748
new ResolutionJob(
17481749
isAutoResolveJob,
17491750
() => {
1750-
ResolveUnsafeAfterJetifierCheck(
1751+
ResolveUnsafeAfterMainTemplateCheck(
17511752
(success) => {
17521753
SignalResolveJobComplete(() => {
17531754
if (resolutionCompleteWithResult != null) {
@@ -1763,6 +1764,72 @@ private static void ScheduleResolve(bool forceResolution, bool closeWindowOnComp
17631764
if (firstJob) ExecuteNextResolveJob();
17641765
}
17651766

1767+
/// <summary>
1768+
/// Ensures that the mainTemplate.gradle and gradle.properties files are present in the project,
1769+
/// creating them via the Unity Editor's template files if needed.
1770+
/// </summary>
1771+
/// <returns>True if both files are present.</returns>
1772+
private static bool EnableGradleTemplates() {
1773+
return GradleTemplateResolver.EnsureGradleTemplateEnabled(GradleTemplateResolver.GradleTemplateFilename) &&
1774+
GradleTemplateResolver.EnsureGradleTemplateEnabled(GradleTemplateResolver.GradlePropertiesTemplateFilename);
1775+
}
1776+
1777+
/// <summary>
1778+
/// Resolve dependencies after checking if mainTemplate.gradle is enabled (or previously disabled).
1779+
/// </summary>
1780+
/// <param name="resolutionComplete">Delegate called when resolution is complete
1781+
/// with a parameter that indicates whether it succeeded or failed.</param>
1782+
/// <param name="forceResolution">Whether resolution should be executed when no dependencies
1783+
/// have changed. This is useful if a dependency specifies a wildcard in the version
1784+
/// expression.</param>
1785+
/// <param name="isAutoResolveJob">Whether this is an auto-resolution job.</param>
1786+
/// <param name="closeWindowOnCompletion">Whether to unconditionally close the resolution
1787+
/// window when complete.</param>
1788+
private static void ResolveUnsafeAfterMainTemplateCheck(Action<bool> resolutionComplete,
1789+
bool forceResolution,
1790+
bool isAutoResolveJob,
1791+
bool closeWindowOnCompletion) {
1792+
// If mainTemplate.gradle is already enabled, or if the user has rejected the switch,
1793+
// move to the next step.
1794+
if (GradleTemplateEnabled ||
1795+
SettingsDialogObj.UserRejectedGradleUpgrade) {
1796+
ResolveUnsafeAfterJetifierCheck(resolutionComplete, forceResolution, isAutoResolveJob, closeWindowOnCompletion);
1797+
return;
1798+
}
1799+
1800+
// Else, if there are no resolved files tracked by this (aka, it hasn't been run before),
1801+
// turn on mainTemplate, and log a message to the user.
1802+
// Or, if using Batch mode, we want to enable the templates as well, since that is now the
1803+
// desired default behavior. If Users want to preserve the old method, they can save their
1804+
// SettingsObject with the UserRejectedGradleUpgrade option enabled.
1805+
if (ExecutionEnvironment.InBatchMode || !PlayServicesResolver.FindLabeledAssets().Any()) {
1806+
EnableGradleTemplates();
1807+
ResolveUnsafeAfterJetifierCheck(resolutionComplete, forceResolution, isAutoResolveJob, closeWindowOnCompletion);
1808+
return;
1809+
}
1810+
1811+
// Else, prompt the user to turn it on for them.
1812+
DialogWindow.Display(
1813+
"Enable Android Gradle templates?",
1814+
"Android Resolver recommends using Gradle templates " +
1815+
"for managing Android dependencies. The old method of downloading " +
1816+
"the dependencies into Plugins/Android is no longer recommended.",
1817+
DialogWindow.Option.Selected0, "Enable", "Disable",
1818+
complete: (selectedOption) => {
1819+
switch (selectedOption) {
1820+
case DialogWindow.Option.Selected0: // Enable
1821+
EnableGradleTemplates();
1822+
break;
1823+
case DialogWindow.Option.Selected1: // Disable
1824+
SettingsDialogObj.UserRejectedGradleUpgrade = true;
1825+
break;
1826+
}
1827+
1828+
// Either way, proceed with the resolution.
1829+
ResolveUnsafeAfterJetifierCheck(resolutionComplete, forceResolution, isAutoResolveJob, closeWindowOnCompletion);
1830+
});
1831+
}
1832+
17661833
/// <summary>
17671834
/// Resolve dependencies after checking the configuration is compatible with the Jetifier
17681835
/// settings.

source/AndroidResolver/src/SettingsDialog.cs

+20-2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ private class Settings {
4848
internal bool autoResolutionDisabledWarning;
4949
internal bool promptBeforeAutoResolution;
5050
internal bool useProjectSettings;
51+
internal bool userRejectedGradleUpgrade;
5152
internal EditorMeasurement.Settings analyticsSettings;
5253

5354
/// <summary>
@@ -72,6 +73,7 @@ internal Settings() {
7273
autoResolutionDisabledWarning = SettingsDialog.AutoResolutionDisabledWarning;
7374
promptBeforeAutoResolution = SettingsDialog.PromptBeforeAutoResolution;
7475
useProjectSettings = SettingsDialog.UseProjectSettings;
76+
userRejectedGradleUpgrade = SettingsDialog.UserRejectedGradleUpgrade;
7577
analyticsSettings = new EditorMeasurement.Settings(PlayServicesResolver.analytics);
7678
}
7779

@@ -97,6 +99,7 @@ internal void Save() {
9799
SettingsDialog.AutoResolutionDisabledWarning = autoResolutionDisabledWarning;
98100
SettingsDialog.PromptBeforeAutoResolution = promptBeforeAutoResolution;
99101
SettingsDialog.UseProjectSettings = useProjectSettings;
102+
SettingsDialog.UserRejectedGradleUpgrade = userRejectedGradleUpgrade;
100103
analyticsSettings.Save();
101104
}
102105
}
@@ -121,6 +124,7 @@ internal void Save() {
121124
private const string PromptBeforeAutoResolutionKey =
122125
Namespace + "PromptBeforeAutoResolution";
123126
private const string UseGradleDaemonKey = Namespace + "UseGradleDaemon";
127+
private const string UserRejectedGradleUpgradeKey = Namespace + "UserRejectedGradleUpgrade";
124128

125129
// List of preference keys, used to restore default settings.
126130
private static string[] PreferenceKeys = new[] {
@@ -140,7 +144,8 @@ internal void Save() {
140144
VerboseLoggingKey,
141145
AutoResolutionDisabledWarningKey,
142146
PromptBeforeAutoResolutionKey,
143-
UseGradleDaemonKey
147+
UseGradleDaemonKey,
148+
UserRejectedGradleUpgradeKey
144149
};
145150

146151
internal const string AndroidPluginsDir = "Assets/Plugins/Android";
@@ -293,6 +298,11 @@ internal static bool VerboseLogging {
293298
get { return projectSettings.GetBool(VerboseLoggingKey, false); }
294299
}
295300

301+
internal static bool UserRejectedGradleUpgrade {
302+
set { projectSettings.SetBool(UserRejectedGradleUpgradeKey, value); }
303+
get { return projectSettings.GetBool(UserRejectedGradleUpgradeKey, false); }
304+
}
305+
296306
internal static string ValidatePackageDir(string directory) {
297307
// Make sure the package directory starts with the same name.
298308
// This is case insensitive to handle cases where developers rename Unity
@@ -507,6 +517,12 @@ public void OnGUI() {
507517
"builds when mixing legacy Android support libraries and Jetpack libraries.");
508518
}
509519

520+
GUILayout.BeginHorizontal();
521+
GUILayout.Label("Disable MainTemplate Gradle prompt", EditorStyles.boldLabel);
522+
settings.userRejectedGradleUpgrade =
523+
EditorGUILayout.Toggle(settings.userRejectedGradleUpgrade);
524+
GUILayout.EndHorizontal();
525+
510526
GUILayout.BeginHorizontal();
511527
GUILayout.Label("Patch mainTemplate.gradle", EditorStyles.boldLabel);
512528
settings.patchMainTemplateGradle =
@@ -697,7 +713,9 @@ public void OnGUI() {
697713
new KeyValuePair<string, string>(
698714
"patchSettingsTemplateGradle",
699715
SettingsDialog.PatchSettingsTemplateGradle.ToString()),
700-
716+
new KeyValuePair<string, string>(
717+
"userRejectedGradleUpgrade",
718+
SettingsDialog.UserRejectedGradleUpgrade.ToString()),
701719
},
702720
"Settings Save");
703721

source/AndroidResolver/test/src/AndroidResolverIntegrationTests.cs

+2
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,8 @@ private static void ClearAllDependencies() {
642642
GooglePlayServices.SettingsDialog.PatchPropertiesTemplateGradle = false;
643643
GooglePlayServices.SettingsDialog.PatchSettingsTemplateGradle = false;
644644

645+
GooglePlayServices.SettingsDialog.UserRejectedGradleUpgrade = true;
646+
645647
PlayServicesSupport.ResetDependencies();
646648
UpdateAdditionalDependenciesFile(false, ADDITIONAL_DEPENDENCIES_FILENAME);
647649
UpdateAdditionalDependenciesFile(false, ADDITIONAL_DUPLICATE_DEPENDENCIES_FILENAME);

0 commit comments

Comments
 (0)