diff --git a/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs b/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs index 5738fb1..5674024 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/AndroidSdkInfo.cs @@ -155,12 +155,12 @@ internal static void DefaultConsoleLogger (TraceLevel level, string message) } } - public static void SetPreferredAndroidSdkPath (string path, Action logger = null) + public static bool SetPreferredAndroidSdkPath (string path, Action logger = null) { logger = logger ?? DefaultConsoleLogger; - var sdk = CreateSdk (logger); - sdk.SetPreferredAndroidSdkPath (path); + var sdk = CreateSdk(logger); + return sdk.SetPreferredAndroidSdkPath(path); } public static void SetPreferredJavaSdkPath (string path, Action logger = null) diff --git a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkBase.cs b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkBase.cs index 12892b9..45a7aa4 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkBase.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkBase.cs @@ -109,7 +109,7 @@ public virtual void Initialize (string androidSdkPath = null, string androidNdkP protected abstract string GetJavaSdkPath (); protected abstract string GetShortFormPath (string path); - public abstract void SetPreferredAndroidSdkPath (string path); + public abstract bool SetPreferredAndroidSdkPath (string path); public abstract void SetPreferredJavaSdkPath (string path); public abstract void SetPreferredAndroidNdkPath (string path); diff --git a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkUnix.cs b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkUnix.cs index 0d18f7b..d4e4f7f 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkUnix.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkUnix.cs @@ -133,7 +133,7 @@ protected override string GetShortFormPath (string path) return path; } - public override void SetPreferredAndroidSdkPath (string path) + public override bool SetPreferredAndroidSdkPath (string path) { path = NullIfEmpty (path); @@ -145,8 +145,9 @@ public override void SetPreferredAndroidSdkPath (string path) doc.Root.Add (androidEl); } - androidEl.SetAttributeValue ("path", path); - SaveConfig (doc); + androidEl.SetAttributeValue("path", path); + bool setConfig = SaveConfig(doc, Logger); + return setConfig; } public override void SetPreferredJavaSdkPath (string path) @@ -162,7 +163,7 @@ public override void SetPreferredJavaSdkPath (string path) } javaEl.SetAttributeValue ("path", path); - SaveConfig (doc); + SaveConfig (doc, Logger); } public override void SetPreferredAndroidNdkPath (string path) @@ -178,10 +179,10 @@ public override void SetPreferredAndroidNdkPath (string path) } androidEl.SetAttributeValue ("path", path); - SaveConfig (doc); + SaveConfig (doc, Logger); } - void SaveConfig (XDocument doc) + bool SaveConfig (XDocument doc, Action logger) { string cfg = UnixConfigPath; List created = null; @@ -189,11 +190,19 @@ void SaveConfig (XDocument doc) if (!File.Exists (cfg)) { string dir = Path.GetDirectoryName (cfg); if (!Directory.Exists (dir)) { - Directory.CreateDirectory (dir); - AddToList (dir); - } - AddToList (cfg); - } + try + { + Directory.CreateDirectory(dir); + } + catch (Exception ex) + { + logger(TraceLevel.Error, $"Unable to create directory {dir}, user do not have the right permissions, {ex.Message}."); + return false; + } + AddToList(dir); + } + AddToList (cfg); + } doc.Save (cfg); FixOwnership (created); @@ -203,6 +212,7 @@ void AddToList (string path) created = new List (); created.Add (path); } + return true; } static readonly string GetUnixConfigDirOverrideName = $"UnixConfigPath directory override! {typeof (AndroidSdkInfo).AssemblyQualifiedName}"; diff --git a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs index 04a3371..d7fda9d 100644 --- a/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs +++ b/src/Xamarin.Android.Tools.AndroidSdk/Sdks/AndroidSdkWindows.cs @@ -236,10 +236,11 @@ protected override string GetShortFormPath (string path) return KernelEx.GetShortPathName (path); } - public override void SetPreferredAndroidSdkPath (string path) - { - var regKey = GetMDRegistryKey (); - RegistryEx.SetValueString (RegistryEx.CurrentUser, regKey, MDREG_ANDROID_SDK, path ?? "", RegistryEx.Wow64.Key32); + public override bool SetPreferredAndroidSdkPath (string path) + { + var regKey = GetMDRegistryKey(); + RegistryEx.SetValueString(RegistryEx.CurrentUser, regKey, MDREG_ANDROID_SDK, path ?? "", RegistryEx.Wow64.Key32); + return true; } public override void SetPreferredJavaSdkPath (string path)