public void Constructor_NoVersions() { var versions = new AndroidVersions(new AndroidVersion [0]); Assert.AreEqual(null, versions.MaxStableVersion); Assert.IsNotNull(versions.FrameworkDirectories); Assert.AreEqual(0, versions.FrameworkDirectories.Count); }
public void Contructor_UnstableVersions() { var versions = new AndroidVersions( new [] { new AndroidVersion(apiLevel: 100, osVersion: "100.0", codeName: "Test", id: "Z", stable: false) } ); Assert.IsNull(versions.MaxStableVersion); Assert.IsNull(versions.MinStableVersion); }
public void Constructor_FrameworkDirectories() { var frameworkDir = Path.GetTempFileName(); File.Delete(frameworkDir); Directory.CreateDirectory(frameworkDir); try { Directory.CreateDirectory(Path.Combine(frameworkDir, "MonoAndroid")); Directory.CreateDirectory(Path.Combine(frameworkDir, "MonoAndroid", "v5.1")); File.WriteAllLines(Path.Combine(frameworkDir, "MonoAndroid", "v5.1", "AndroidApiInfo.xml"), new [] { "<AndroidApiInfo>", " <Id>22</Id>", " <Level>22</Level>", " <Name>Marshmallow</Name>", " <Version>v5.1</Version>", " <Stable>True</Stable>", "</AndroidApiInfo>", }); Directory.CreateDirectory(Path.Combine(frameworkDir, "MonoAndroid", "v6.0")); File.WriteAllLines(Path.Combine(frameworkDir, "MonoAndroid", "v6.0", "AndroidApiInfo.xml"), new [] { "<AndroidApiInfo>", " <Id>23</Id>", " <Level>23</Level>", " <Name>Marshmallow</Name>", " <Version>v6.0</Version>", " <Stable>True</Stable>", "</AndroidApiInfo>", }); Directory.CreateDirectory(Path.Combine(frameworkDir, "MonoAndroid", "v8.0")); File.WriteAllLines(Path.Combine(frameworkDir, "MonoAndroid", "v8.0", "AndroidApiInfo.xml"), new [] { "<AndroidApiInfo>", " <Id>O</Id>", " <Level>26</Level>", " <Name>Oreo</Name>", " <Version>v8.0</Version>", " <Stable>False</Stable>", "</AndroidApiInfo>", }); var versions = new AndroidVersions(new [] { Path.Combine(frameworkDir, "MonoAndroid", "v5.1"), Path.Combine(frameworkDir, "MonoAndroid", "v6.0") }); Assert.IsNotNull(versions.FrameworkDirectories); Assert.AreEqual(1, versions.FrameworkDirectories.Count); Assert.AreEqual(Path.Combine(frameworkDir, "MonoAndroid"), versions.FrameworkDirectories [0]); Assert.IsNotNull(versions.MaxStableVersion); Assert.AreEqual(23, versions.MaxStableVersion.ApiLevel); Assert.IsNotNull(versions.MinStableVersion); Assert.AreEqual(22, versions.MinStableVersion.ApiLevel); } finally { Directory.Delete(frameworkDir, recursive: true); } }
public void ParsePermissions() { var versions = new AndroidVersions(new AndroidVersion [0]); var manifest = AndroidAppManifest.Load(GetTestAppManifest(), versions); var permissions = manifest.AndroidPermissions.ToArray(); Assert.AreEqual(3, permissions.Length, "#1"); Assert.IsTrue(permissions.Contains("INTERNET"), "#2"); Assert.IsTrue(permissions.Contains("READ_CONTACTS"), "#3"); Assert.IsTrue(permissions.Contains("WRITE_CONTACTS"), "#4"); }
public void Load() { var versions = new AndroidVersions(new AndroidVersion [0]); Assert.Throws <ArgumentNullException> (() => AndroidAppManifest.Load((string)null, versions)); Assert.Throws <ArgumentNullException> (() => AndroidAppManifest.Load("filename", null)); Assert.Throws <ArgumentNullException> (() => AndroidAppManifest.Load((XDocument)null, versions)); Assert.Throws <ArgumentNullException> (() => AndroidAppManifest.Load(GetTestAppManifest(), null)); Assert.Throws <ArgumentException> (() => AndroidAppManifest.Load(XDocument.Parse("<invalid-root/>"), versions)); }
public override bool Execute() { if (AndroidApiInfo.Length == 0) { Log.LogError("This task requires at least one AndroidApiInfo.xml file!"); return(false); } var versions = new AndroidVersions( AndroidApiInfo.Select(d => Path.GetDirectoryName(d))); var settings = new XmlWriterSettings { OmitXmlDeclaration = true, Indent = true, }; using (var writer = XmlWriter.Create(OutputFile, settings)) { writer.WriteComment($@" *********************************************************************************************** {Path.GetFileName (OutputFile)} Specifies the supported Android platform versions for this SDK. *********************************************************************************************** "); writer.WriteStartElement("Project"); writer.WriteStartElement("PropertyGroup"); writer.WriteStartElement("TargetPlatformSupported"); writer.WriteString("true"); writer.WriteEndElement(); // </TargetPlatformSupported> writer.WriteStartElement("TargetPlatformVersion"); writer.WriteAttributeString("Condition", " '$(TargetPlatformVersion)' == '' "); writer.WriteString(versions.MaxStableVersion.ApiLevel.ToString()); writer.WriteEndElement(); // </TargetPlatformVersion> writer.WriteEndElement(); // </PropertyGroup> writer.WriteStartElement("ItemGroup"); foreach (AndroidVersion version in versions.InstalledBindingVersions .Where(v => v.ApiLevel >= MinimumApiLevel) .OrderBy(v => v.ApiLevel)) { writer.WriteStartElement("AndroidSdkSupportedTargetPlatformVersion"); writer.WriteAttributeString("Include", version.ApiLevel.ToString()); writer.WriteEndElement(); // </AndroidSdkSupportedTargetPlatformVersion> } writer.WriteStartElement("SdkSupportedTargetPlatformVersion"); writer.WriteAttributeString("Include", "@(AndroidSdkSupportedTargetPlatformVersion)"); writer.WriteEndDocument(); // </Project> } return(!Log.HasLoggedErrors); }
public void CanGetAppTheme() { var versions = new AndroidVersions(new AndroidVersion [0]); var doc = XDocument.Parse(@" <manifest xmlns:android=""http://schemas.android.com/apk/res/android"" android:versionCode=""1"" android:versionName=""1.0"" package=""com.xamarin.Foo""> <uses-sdk android:minSdkVersion=""8"" android:targetSdkVersion=""12"" /> <application android:label=""Foo"" android:icon=""@drawable/ic_icon"" android:theme=""@android:style/Theme.Material.Light""> </application> </manifest>" ); var manifest = AndroidAppManifest.Load(doc, versions); Assert.AreEqual("@android:style/Theme.Material.Light", manifest.ApplicationTheme); }
public void Constructor_Versions() { var versions = new AndroidVersions(new [] { new AndroidVersion(apiLevel: 1, osVersion: "1.0", codeName: "One", id: "A", stable: true), new AndroidVersion(apiLevel: 2, osVersion: "1.1", codeName: "One.One", id: "B", stable: true), }); Assert.IsNotNull(versions.FrameworkDirectories); Assert.AreEqual(0, versions.FrameworkDirectories.Count); Assert.IsNotNull(versions.MaxStableVersion); Assert.AreEqual(2, versions.MaxStableVersion.ApiLevel); Assert.IsNotNull(versions.MinStableVersion); Assert.AreEqual(1, versions.MinStableVersion.ApiLevel); }
public void SetNewPermissions() { var versions = new AndroidVersions(new AndroidVersion [0]); var manifest = AndroidAppManifest.Load(GetTestAppManifest(), versions); manifest.SetAndroidPermissions(new [] { "FOO" }); var sb = new StringBuilder(); using (var writer = XmlWriter.Create(sb)) { manifest.Write(writer); } manifest = AndroidAppManifest.Load(XDocument.Parse(sb.ToString()), versions); Assert.AreEqual(1, manifest.AndroidPermissions.Count(), "#1"); Assert.AreEqual("FOO", manifest.AndroidPermissions.ElementAt(0)); }
public void CanParseNonNumericSdkVersion() { var versions = new AndroidVersions(new AndroidVersion [0]); var doc = XDocument.Parse(@" <manifest xmlns:android=""http://schemas.android.com/apk/res/android"" android:versionCode=""1"" android:versionName=""1.0"" package=""com.xamarin.Foo""> <uses-sdk android:minSdkVersion=""L"" android:targetSdkVersion=""L"" /> <application android:label=""Foo"" android:icon=""@drawable/ic_icon""> </application> </manifest>" ); var manifest = AndroidAppManifest.Load(doc, versions); var mininum = manifest.MinSdkVersion; var target = manifest.TargetSdkVersion; Assert.IsTrue(mininum.HasValue); Assert.IsTrue(target.HasValue); Assert.AreEqual(21, mininum.Value); Assert.AreEqual(21, target.Value); }
public void EnsureUsesPermissionElementOrder() { var versions = new AndroidVersions(new AndroidVersion [0]); var manifest = AndroidAppManifest.Create("com.xamarin.test", "Xamarin Test", versions); manifest.SetAndroidPermissions(new string[] { "FOO" }); var sb = new StringBuilder(); using (var writer = XmlWriter.Create(sb)) { manifest.Write(writer); } var doc = XDocument.Parse(sb.ToString()); var app = doc.Element("manifest").Element("application"); Assert.IsNotNull(app, "Application element should exist"); Assert.IsFalse(app.ElementsAfterSelf().Any(x => x.Name == "uses-permission")); Assert.IsTrue(app.ElementsBeforeSelf().Any(x => x.Name == "uses-permission")); }
public void EnsureMinAndTargetSdkVersionsAreReadIndependently() { // Regression test for https://bugzilla.xamarin.com/show_bug.cgi?id=21296 var versions = new AndroidVersions(new AndroidVersion [0]); var doc = XDocument.Parse(@" <manifest xmlns:android=""http://schemas.android.com/apk/res/android"" android:versionCode=""1"" android:versionName=""1.0"" package=""com.xamarin.Foo""> <uses-sdk android:minSdkVersion=""8"" android:targetSdkVersion=""12"" /> <application android:label=""Foo"" android:icon=""@drawable/ic_icon""> </application> </manifest>" ); var manifest = AndroidAppManifest.Load(doc, versions); var mininum = manifest.MinSdkVersion; var target = manifest.TargetSdkVersion; Assert.IsTrue(mininum.HasValue); Assert.IsTrue(target.HasValue); Assert.AreEqual(8, mininum.Value); Assert.AreEqual(12, target.Value); }
public static void RefreshSupportedVersions(string[] referenceAssemblyPaths) { SupportedVersions = new AndroidVersions(referenceAssemblyPaths); }
public TemplatedAndroidAppManifestGenerator(IBuildConfiguration configuration, string[] referenceAssemblyPaths) : base(configuration) { AndroidVersions = new AndroidVersions(referenceAssemblyPaths); }
public TemplatedAndroidAppManifestGenerator(IBuildConfiguration configuration) : base(configuration) { AndroidVersions = new AndroidVersions(AndroidVersions.KnownVersions); }