Skip to content

Commit 7abeb86

Browse files
Return a default for unknown API levels
In .NET 5, there is a single `AndroidApiInfo.xml` file: <AndroidApiInfo> <Id>30</Id> <Level>30</Level> <Name>R</Name> <Version>v11.0</Version> <Stable>True</Stable> </AndroidApiInfo> And so if you call `AndroidVersions.GetApiLevelFromId(29)` you would always get `null` returned. This is because `KnownVersions` does not have API 29 or 30 listed. To fix this and *not* update `KnownVersions`, we can make the various `GetApiLevelFromId` methods return the incoming API level as a last resort. So if 29 comes in, 29 can be returned and assumed to be a valid API level.
1 parent 3974fc3 commit 7abeb86

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/Xamarin.Android.Tools.AndroidSdk/AndroidVersions.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ static bool MatchesFrameworkVersion (AndroidVersion version, string frameworkVer
9292
public int? GetApiLevelFromId (string id)
9393
{
9494
return installedVersions.FirstOrDefault (v => MatchesId (v, id))?.ApiLevel ??
95-
KnownVersions.FirstOrDefault (v => MatchesId (v, id))?.ApiLevel;
95+
KnownVersions.FirstOrDefault (v => MatchesId (v, id))?.ApiLevel ??
96+
(int.TryParse (id, out int apiLevel) ? apiLevel : default);
9697
}
9798

9899
static bool MatchesId (AndroidVersion version, string id)
@@ -105,7 +106,8 @@ static bool MatchesId (AndroidVersion version, string id)
105106
public string? GetIdFromApiLevel (int apiLevel)
106107
{
107108
return installedVersions.FirstOrDefault (v => v.ApiLevel == apiLevel)?.Id ??
108-
KnownVersions.FirstOrDefault (v => v.ApiLevel == apiLevel)?.Id;
109+
KnownVersions.FirstOrDefault (v => v.ApiLevel == apiLevel)?.Id ??
110+
apiLevel.ToString ();
109111
}
110112

111113
// Sometimes, e.g. when new API levels are introduced, the "API level" is a letter, not a number,
@@ -115,7 +117,8 @@ static bool MatchesId (AndroidVersion version, string id)
115117
if (int.TryParse (apiLevel, out var platform))
116118
return GetIdFromApiLevel (platform);
117119
return installedVersions.FirstOrDefault (v => MatchesId (v, apiLevel))?.Id ??
118-
KnownVersions.FirstOrDefault (v => MatchesId (v, apiLevel))?.Id;
120+
KnownVersions.FirstOrDefault (v => MatchesId (v, apiLevel))?.Id ??
121+
apiLevel;
119122
}
120123

121124
public string? GetIdFromFrameworkVersion (string frameworkVersion)

0 commit comments

Comments
 (0)