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);
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #4
0
        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");
        }
Beispiel #5
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #9
0
        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));
        }
Beispiel #10
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);
        }
Beispiel #11
0
        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"));
        }
Beispiel #12
0
        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);
 }
Beispiel #14
0
 public TemplatedAndroidAppManifestGenerator(IBuildConfiguration configuration, string[] referenceAssemblyPaths)
     : base(configuration)
 {
     AndroidVersions = new AndroidVersions(referenceAssemblyPaths);
 }
Beispiel #15
0
 public TemplatedAndroidAppManifestGenerator(IBuildConfiguration configuration)
     : base(configuration)
 {
     AndroidVersions = new AndroidVersions(AndroidVersions.KnownVersions);
 }