Skip to content

Commit

Permalink
[Mono.Android] Add PackageInfoFlagsLong (#8182)
Browse files Browse the repository at this point in the history
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)
  • Loading branch information
jpobst authored Aug 7, 2023
1 parent a058d32 commit 569b7c0
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 0 deletions.
88 changes: 88 additions & 0 deletions src/Mono.Android/Android.Content.PM/PackageManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
namespace Android.Content.PM;

#if ANDROID_34
public abstract partial class PackageManager
{
public sealed partial class PackageInfoFlags
{
// Create overloads that accept PackageInfoFlagsLong
[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android33.0")]
public static Android.Content.PM.PackageManager.PackageInfoFlags Of (PackageInfoFlagsLong value)
=> Of ((long) value);

[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android33.0")]
public PackageInfoFlagsLong ValueAsFlags
=> (PackageInfoFlagsLong) Value;
}
}

// Manually created "long" version of "PackageInfoFlags" enum, created from documentation:
// https://developer.android.com/reference/android/content/pm/PackageManager.PackageInfoFlags#of(long)
[System.Flags]
public enum PackageInfoFlagsLong : long
{
None = 0,

GetActivities = PackageInfoFlags.Activities,

GetReceivers = PackageInfoFlags.Receivers,

GetServices = PackageInfoFlags.Services,

GetProviders = PackageInfoFlags.Providers,

GetInstrumentation = PackageInfoFlags.Instrumentation,

[global::System.Runtime.Versioning.ObsoletedOSPlatformAttribute ("android31.0", "The platform does not support getting IntentFilters for the package.")]
GetIntentFilters = PackageInfoFlags.IntentFilters,

[global::System.Runtime.Versioning.ObsoletedOSPlatformAttribute ("android28.0", "Use GetSigningCertificates instead.")]
GetSignatures = PackageInfoFlags.Signatures,

GetMetaData = PackageInfoFlags.MetaData,

GetGids = PackageInfoFlags.Gids,

[global::System.Runtime.Versioning.ObsoletedOSPlatformAttribute ("android24.0", "Replaced with MatchDisabledComponents.")]
GetDisabledComponents = PackageInfoFlags.DisabledComponents,

[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android24.0")]
MatchDisabledComponents = PackageInfoFlags.MatchDisabledComponents,

GetSharedLibraryFiles = PackageInfoFlags.SharedLibraryFiles,

GetUriPermissionPatterns = PackageInfoFlags.UriPermissionPatterns,

GetPermissions = PackageInfoFlags.Permissions,

[global::System.Runtime.Versioning.ObsoletedOSPlatformAttribute ("android24.0", "Replaced with MatchUninstalledPackages.")]
GetUninstalledPackages = PackageInfoFlags.UninstalledPackages,

[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android24.0")]
MatchUninstalledPackages = PackageInfoFlags.MatchUninstalledPackages,

GetConfigurations = PackageInfoFlags.Configurations,

[global::System.Runtime.Versioning.ObsoletedOSPlatformAttribute ("android24.0", "Replaced with MatchDisabledUntilUsedComponents.")]
GetDisabledUntilUsedComponents = PackageInfoFlags.DisabledUntilUsedComponents,

[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android24.0")]
MatchDisabledUntilUsedComponents = PackageInfoFlags.MatchDisabledUntilUsedComponents,

[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android24.0")]
MatchSystemOnly = PackageInfoFlags.MatchSystemOnly,

[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android28.0")]
GetSigningCertificates = PackageInfoFlags.SigningCertificates,

[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android29.0")]
MatchApex = 1073741824,

[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android31.0")]
[global::System.Runtime.Versioning.ObsoletedOSPlatformAttribute ("android34.0", "Use GetAttributionsLong to avoid unintended sign extension.")]
GetAttributions = PackageInfoFlags.Attributions,

[global::System.Runtime.Versioning.SupportedOSPlatformAttribute ("android34.0")]
GetAttributionsLong = 2147483648,
}
#endif // ANDROID_34
1 change: 1 addition & 0 deletions src/Mono.Android/Mono.Android.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
<Compile Include="..\..\external\Java.Interop\src\Java.Interop.Tools.JavaCallableWrappers\Java.Interop.Tools.JavaCallableWrappers\Crc64.Table.cs">
<Link>Crc64.Table.cs</Link>
</Compile>
<Compile Include="Android.Content.PM\PackageManager.cs" />
<Compile Include="Android.Graphics\PathIterator.cs" />
<Compile Include="Android.Icu\ListFormatter.cs" />
<Compile Include="Android.Icu\RelativeDateTimeFormatter.cs" />
Expand Down
28 changes: 28 additions & 0 deletions src/Mono.Android/PublicAPI/API-34/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9367,6 +9367,32 @@ Android.Content.PM.PackageInfoFlags.Signatures = 64 -> Android.Content.PM.Packag
Android.Content.PM.PackageInfoFlags.SigningCertificates = 134217728 -> Android.Content.PM.PackageInfoFlags
Android.Content.PM.PackageInfoFlags.UninstalledPackages = 8192 -> Android.Content.PM.PackageInfoFlags
Android.Content.PM.PackageInfoFlags.UriPermissionPatterns = 2048 -> Android.Content.PM.PackageInfoFlags
Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetActivities = 1 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetAttributions = -2147483648 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetAttributionsLong = 2147483648 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetConfigurations = 16384 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetDisabledComponents = 512 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetDisabledUntilUsedComponents = 32768 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetGids = 256 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetInstrumentation = 16 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetIntentFilters = 32 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetMetaData = 128 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetPermissions = 4096 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetProviders = 8 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetReceivers = 2 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetServices = 4 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetSharedLibraryFiles = 1024 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetSignatures = 64 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetSigningCertificates = 134217728 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetUninstalledPackages = 8192 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.GetUriPermissionPatterns = 2048 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.MatchApex = 1073741824 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.MatchDisabledComponents = 512 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.MatchDisabledUntilUsedComponents = 32768 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.MatchSystemOnly = 1048576 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.MatchUninstalledPackages = 8192 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInfoFlagsLong.None = 0 -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageInstaller
Android.Content.PM.PackageInstaller.InstallConstraints
Android.Content.PM.PackageInstaller.InstallConstraints.Builder
Expand Down Expand Up @@ -9517,6 +9543,7 @@ Android.Content.PM.PackageManager.NameNotFoundException.NameNotFoundException(ni
Android.Content.PM.PackageManager.NameNotFoundException.NameNotFoundException(string? name) -> void
Android.Content.PM.PackageManager.PackageInfoFlags
Android.Content.PM.PackageManager.PackageInfoFlags.Value.get -> long
Android.Content.PM.PackageManager.PackageInfoFlags.ValueAsFlags.get -> Android.Content.PM.PackageInfoFlagsLong
Android.Content.PM.PackageManager.PackageManager() -> void
Android.Content.PM.PackageManager.PackageManager(nint javaReference, Android.Runtime.JniHandleOwnership transfer) -> void
Android.Content.PM.PackageManager.Property
Expand Down Expand Up @@ -94765,6 +94792,7 @@ static Android.Content.PM.PackageInstaller.SessionParams.RestrictedPermissionsAl
static Android.Content.PM.PackageManager.ApplicationInfoFlags.Of(long value) -> Android.Content.PM.PackageManager.ApplicationInfoFlags!
static Android.Content.PM.PackageManager.ComponentEnabledSetting.Creator.get -> Android.OS.IParcelableCreator!
static Android.Content.PM.PackageManager.ComponentInfoFlags.Of(long value) -> Android.Content.PM.PackageManager.ComponentInfoFlags!
static Android.Content.PM.PackageManager.PackageInfoFlags.Of(Android.Content.PM.PackageInfoFlagsLong value) -> Android.Content.PM.PackageManager.PackageInfoFlags!
static Android.Content.PM.PackageManager.PackageInfoFlags.Of(long value) -> Android.Content.PM.PackageManager.PackageInfoFlags!
static Android.Content.PM.PackageManager.Property.Creator.get -> Android.OS.IParcelableCreator!
static Android.Content.PM.PackageManager.ResolveInfoFlags.Of(long value) -> Android.Content.PM.PackageManager.ResolveInfoFlags!
Expand Down

0 comments on commit 569b7c0

Please sign in to comment.