Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 47cd40e

Browse files
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

Lines changed: 68 additions & 1 deletion
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

Lines changed: 20 additions & 2 deletions
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

Lines changed: 2 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /