Skip to content

Commit 569b7c0

Browse files
authored
[Mono.Android] Add PackageInfoFlagsLong (#8182)
Fixes: #7729 We do not currently enumify [`PackageManager.PackageInfoFlags.of(long)`][0] because it is a `long` and our tooling is built around enumifying `int` values. However, it seems to be a frequently used API, so we should try to make it nicer. Create a new `PackageInfoFlagsLong` enum which has `long` as the underlying type, which can be used as a parameter to a new `PackageManager.PackageInfoFlags.Of(PackageInfoFlagsLong)` overload: var flags = PackageManager.PackageInfoFlags.Of( PackageInfoFlagsLong.GetActivities | PackageInfoFlagsLong.GetSignatures ); // vs previous var old_flags = PackageManager.PackageInfoFlags.Of( (long)(PackageInfoFlags.Activities | PackageInfoFlags.Signatures) ); Note that the enumeration member naming convention changed, e.g. from `PackageInfoFlags.Activities` to `PackageInfoFlagsLong.GetActivities`. This was done because the verbs used by `PackageInfoFlags` members were not consistent; some members had an "implicit `Get`" e.g. `PackageInfoFlags.Activities` (which came from `PackageManager.GET_ACTIVITIES`), while others had an "explicit" verb, e.g. `PackageInfoFlags.MatchUninstalledPackages` (which came from `PackageManager.MATCH_UNINSTALLED_PACKAGES`). The new `PackageInfoFlagsLong` convention is to consistently require the verb. [0]: https://developer.android.com/reference/android/content/pm/PackageManager.PackageInfoFlags#of(long)
1 parent a058d32 commit 569b7c0

File tree

3 files changed

+117
-0
lines changed

3 files changed

+117
-0
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
namespace Android.Content.PM;
2+
3+
#if ANDROID_34
4+
public abstract partial class PackageManager
5+
{
6+
public sealed partial class PackageInfoFlags
7+
{
8+
// Create overloads that accept PackageInfoFlagsLong
9+
[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android33.0")]
10+
public static Android.Content.PM.PackageManager.PackageInfoFlags Of (PackageInfoFlagsLong value)
11+
=> Of ((long) value);
12+
13+
[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android33.0")]
14+
public PackageInfoFlagsLong ValueAsFlags
15+
=> (PackageInfoFlagsLong) Value;
16+
}
17+
}
18+
19+
// Manually created "long" version of "PackageInfoFlags" enum, created from documentation:
20+
// https://developer.android.com/reference/android/content/pm/PackageManager.PackageInfoFlags#of(long)
21+
[System.Flags]
22+
public enum PackageInfoFlagsLong : long
23+
{
24+
None = 0,
25+
26+
GetActivities = PackageInfoFlags.Activities,
27+
28+
GetReceivers = PackageInfoFlags.Receivers,
29+
30+
GetServices = PackageInfoFlags.Services,
31+
32+
GetProviders = PackageInfoFlags.Providers,
33+
34+
GetInstrumentation = PackageInfoFlags.Instrumentation,
35+
36+
[global::System.Runtime.Versioning.ObsoletedOSPlatformAttribute ("android31.0", "The platform does not support getting IntentFilters for the package.")]
37+
GetIntentFilters = PackageInfoFlags.IntentFilters,
38+
39+
[global::System.Runtime.Versioning.ObsoletedOSPlatformAttribute ("android28.0", "Use GetSigningCertificates instead.")]
40+
GetSignatures = PackageInfoFlags.Signatures,
41+
42+
GetMetaData = PackageInfoFlags.MetaData,
43+
44+
GetGids = PackageInfoFlags.Gids,
45+
46+
[global::System.Runtime.Versioning.ObsoletedOSPlatformAttribute ("android24.0", "Replaced with MatchDisabledComponents.")]
47+
GetDisabledComponents = PackageInfoFlags.DisabledComponents,
48+
49+
[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android24.0")]
50+
MatchDisabledComponents = PackageInfoFlags.MatchDisabledComponents,
51+
52+
GetSharedLibraryFiles = PackageInfoFlags.SharedLibraryFiles,
53+
54+
GetUriPermissionPatterns = PackageInfoFlags.UriPermissionPatterns,
55+
56+
GetPermissions = PackageInfoFlags.Permissions,
57+
58+
[global::System.Runtime.Versioning.ObsoletedOSPlatformAttribute ("android24.0", "Replaced with MatchUninstalledPackages.")]
59+
GetUninstalledPackages = PackageInfoFlags.UninstalledPackages,
60+
61+
[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android24.0")]
62+
MatchUninstalledPackages = PackageInfoFlags.MatchUninstalledPackages,
63+
64+
GetConfigurations = PackageInfoFlags.Configurations,
65+
66+
[global::System.Runtime.Versioning.ObsoletedOSPlatformAttribute ("android24.0", "Replaced with MatchDisabledUntilUsedComponents.")]
67+
GetDisabledUntilUsedComponents = PackageInfoFlags.DisabledUntilUsedComponents,
68+
69+
[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android24.0")]
70+
MatchDisabledUntilUsedComponents = PackageInfoFlags.MatchDisabledUntilUsedComponents,
71+
72+
[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android24.0")]
73+
MatchSystemOnly = PackageInfoFlags.MatchSystemOnly,
74+
75+
[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android28.0")]
76+
GetSigningCertificates = PackageInfoFlags.SigningCertificates,
77+
78+
[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android29.0")]
79+
MatchApex = 1073741824,
80+
81+
[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android31.0")]
82+
[global::System.Runtime.Versioning.ObsoletedOSPlatformAttribute ("android34.0", "Use GetAttributionsLong to avoid unintended sign extension.")]
83+
GetAttributions = PackageInfoFlags.Attributions,
84+
85+
[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android34.0")]
86+
GetAttributionsLong = 2147483648,
87+
}
88+
#endif // ANDROID_34

src/Mono.Android/Mono.Android.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
<Compile Include="..\..\external\Java.Interop\src\Java.Interop.Tools.JavaCallableWrappers\Java.Interop.Tools.JavaCallableWrappers\Crc64.Table.cs">
8282
<Link>Crc64.Table.cs</Link>
8383
</Compile>
84+
<Compile Include="Android.Content.PM\PackageManager.cs" />
8485
<Compile Include="Android.Graphics\PathIterator.cs" />
8586
<Compile Include="Android.Icu\ListFormatter.cs" />
8687
<Compile Include="Android.Icu\RelativeDateTimeFormatter.cs" />

src/Mono.Android/PublicAPI/API-34/PublicAPI.Unshipped.txt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9367,6 +9367,32 @@ Android.Content.PM.PackageInfoFlags.Signatures = 64 -> Android.Content.PM.Packag
93679367
Android.Content.PM.PackageInfoFlags.SigningCertificates = 134217728 -> Android.Content.PM.PackageInfoFlags
93689368
Android.Content.PM.PackageInfoFlags.UninstalledPackages = 8192 -> Android.Content.PM.PackageInfoFlags
93699369
Android.Content.PM.PackageInfoFlags.UriPermissionPatterns = 2048 -> Android.Content.PM.PackageInfoFlags
9370+
Android.Content.PM.PackageInfoFlagsLong
9371+
Android.Content.PM.PackageInfoFlagsLong.GetActivities = 1 -> Android.Content.PM.PackageInfoFlagsLong
9372+
Android.Content.PM.PackageInfoFlagsLong.GetAttributions = -2147483648 -> Android.Content.PM.PackageInfoFlagsLong
9373+
Android.Content.PM.PackageInfoFlagsLong.GetAttributionsLong = 2147483648 -> Android.Content.PM.PackageInfoFlagsLong
9374+
Android.Content.PM.PackageInfoFlagsLong.GetConfigurations = 16384 -> Android.Content.PM.PackageInfoFlagsLong
9375+
Android.Content.PM.PackageInfoFlagsLong.GetDisabledComponents = 512 -> Android.Content.PM.PackageInfoFlagsLong
9376+
Android.Content.PM.PackageInfoFlagsLong.GetDisabledUntilUsedComponents = 32768 -> Android.Content.PM.PackageInfoFlagsLong
9377+
Android.Content.PM.PackageInfoFlagsLong.GetGids = 256 -> Android.Content.PM.PackageInfoFlagsLong
9378+
Android.Content.PM.PackageInfoFlagsLong.GetInstrumentation = 16 -> Android.Content.PM.PackageInfoFlagsLong
9379+
Android.Content.PM.PackageInfoFlagsLong.GetIntentFilters = 32 -> Android.Content.PM.PackageInfoFlagsLong
9380+
Android.Content.PM.PackageInfoFlagsLong.GetMetaData = 128 -> Android.Content.PM.PackageInfoFlagsLong
9381+
Android.Content.PM.PackageInfoFlagsLong.GetPermissions = 4096 -> Android.Content.PM.PackageInfoFlagsLong
9382+
Android.Content.PM.PackageInfoFlagsLong.GetProviders = 8 -> Android.Content.PM.PackageInfoFlagsLong
9383+
Android.Content.PM.PackageInfoFlagsLong.GetReceivers = 2 -> Android.Content.PM.PackageInfoFlagsLong
9384+
Android.Content.PM.PackageInfoFlagsLong.GetServices = 4 -> Android.Content.PM.PackageInfoFlagsLong
9385+
Android.Content.PM.PackageInfoFlagsLong.GetSharedLibraryFiles = 1024 -> Android.Content.PM.PackageInfoFlagsLong
9386+
Android.Content.PM.PackageInfoFlagsLong.GetSignatures = 64 -> Android.Content.PM.PackageInfoFlagsLong
9387+
Android.Content.PM.PackageInfoFlagsLong.GetSigningCertificates = 134217728 -> Android.Content.PM.PackageInfoFlagsLong
9388+
Android.Content.PM.PackageInfoFlagsLong.GetUninstalledPackages = 8192 -> Android.Content.PM.PackageInfoFlagsLong
9389+
Android.Content.PM.PackageInfoFlagsLong.GetUriPermissionPatterns = 2048 -> Android.Content.PM.PackageInfoFlagsLong
9390+
Android.Content.PM.PackageInfoFlagsLong.MatchApex = 1073741824 -> Android.Content.PM.PackageInfoFlagsLong
9391+
Android.Content.PM.PackageInfoFlagsLong.MatchDisabledComponents = 512 -> Android.Content.PM.PackageInfoFlagsLong
9392+
Android.Content.PM.PackageInfoFlagsLong.MatchDisabledUntilUsedComponents = 32768 -> Android.Content.PM.PackageInfoFlagsLong
9393+
Android.Content.PM.PackageInfoFlagsLong.MatchSystemOnly = 1048576 -> Android.Content.PM.PackageInfoFlagsLong
9394+
Android.Content.PM.PackageInfoFlagsLong.MatchUninstalledPackages = 8192 -> Android.Content.PM.PackageInfoFlagsLong
9395+
Android.Content.PM.PackageInfoFlagsLong.None = 0 -> Android.Content.PM.PackageInfoFlagsLong
93709396
Android.Content.PM.PackageInstaller
93719397
Android.Content.PM.PackageInstaller.InstallConstraints
93729398
Android.Content.PM.PackageInstaller.InstallConstraints.Builder
@@ -9517,6 +9543,7 @@ Android.Content.PM.PackageManager.NameNotFoundException.NameNotFoundException(ni
95179543
Android.Content.PM.PackageManager.NameNotFoundException.NameNotFoundException(string? name) -> void
95189544
Android.Content.PM.PackageManager.PackageInfoFlags
95199545
Android.Content.PM.PackageManager.PackageInfoFlags.Value.get -> long
9546+
Android.Content.PM.PackageManager.PackageInfoFlags.ValueAsFlags.get -> Android.Content.PM.PackageInfoFlagsLong
95209547
Android.Content.PM.PackageManager.PackageManager() -> void
95219548
Android.Content.PM.PackageManager.PackageManager(nint javaReference, Android.Runtime.JniHandleOwnership transfer) -> void
95229549
Android.Content.PM.PackageManager.Property
@@ -94765,6 +94792,7 @@ static Android.Content.PM.PackageInstaller.SessionParams.RestrictedPermissionsAl
9476594792
static Android.Content.PM.PackageManager.ApplicationInfoFlags.Of(long value) -> Android.Content.PM.PackageManager.ApplicationInfoFlags!
9476694793
static Android.Content.PM.PackageManager.ComponentEnabledSetting.Creator.get -> Android.OS.IParcelableCreator!
9476794794
static Android.Content.PM.PackageManager.ComponentInfoFlags.Of(long value) -> Android.Content.PM.PackageManager.ComponentInfoFlags!
94795+
static Android.Content.PM.PackageManager.PackageInfoFlags.Of(Android.Content.PM.PackageInfoFlagsLong value) -> Android.Content.PM.PackageManager.PackageInfoFlags!
9476894796
static Android.Content.PM.PackageManager.PackageInfoFlags.Of(long value) -> Android.Content.PM.PackageManager.PackageInfoFlags!
9476994797
static Android.Content.PM.PackageManager.Property.Creator.get -> Android.OS.IParcelableCreator!
9477094798
static Android.Content.PM.PackageManager.ResolveInfoFlags.Of(long value) -> Android.Content.PM.PackageManager.ResolveInfoFlags!

0 commit comments

Comments
 (0)