-
Notifications
You must be signed in to change notification settings - Fork 533
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[AndroidManifest] Add support for <property>
element via PropertyAttribute
.
#9016
Conversation
099bb67
to
d8bfe6e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I didn't really have any concerns except the classes at the bottom of a file. 👍
// Dummy types because we don't want to take a dependency on Mono.Android or Java.Interop | ||
namespace Android.App | ||
{ | ||
public class Activity : Java.Interop.IJavaPeerable { } | ||
public class Application : Java.Interop.IJavaPeerable { } | ||
public class Service : Java.Interop.IJavaPeerable { } | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should we put these in a separate file, to make them easier to find? I could see another test wanting to use these at some point, and they are useable within the entire project.
var properties = | ||
Assemblies.SelectMany (path => PropertyAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path), cache)) | ||
.Where (attr => attr != null) | ||
.ToList (); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This shouldn't be fixed here, but I wonder if the N Assemblies.SelectMany()
calls could be a performance issue.
Proposed commit message: Fixes: https://github.com/xamarin/xamarin-android/issues/8729
API-31 added support for a [`<property/>`][0] element within
`AndroidManifest.xml`, which can be contained within `<activity/>`,
`<application/>`, `<provider/>`, `<receiver/>`, and `<service/>`
elements.
Add a new `Android.App.PropertyAttribute` custom attribute which will
emit `<property/>` within `AndroidManifest.xml`:
[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class,
AllowMultiple = true, Inherited = false)]
public partial class PropertyAttribute : Attribute {
public string Name {get;}
public string? Resource {get;}
public string? Value {get;}
public PropertyAttribute (string name);
}
Semantics otherwise appear to be identical to
`<meta-data/>`/`MetaDataAttribute`: only `Resource` or `Value` can
be specified, etc. (This is checked by `aapt2`.)
Using `[assembly:Property(…)]` will result in `<property/>` being
emitted within the `<application/>` element.
For example:
[Service (Name = "fooService", ForegroundServiceType = Android.Content.PM.ForegroundService.TypeSpecialUse)]
[Property ("android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE", Value = "explanation_for_special_use")]
public partial class FooService : Service {
}
will emit the `AndroidManifest.xml` fragment:
<service android:name="fooService" android:foregroundServiceType="specialUse">
<property
android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
android:value="explanation_for_special_use"
/>
</service>
[0]: https://developer.android.com/guide/topics/manifest/property-element |
Hi, what version will it appear in? |
It will be in .NET 9 Preview 7. |
* main: (23 commits) Localized file check-in by OneLocBuild Task (#9129) [ci] Disable CodeQL on CI/PR pipelines (#9128) Refine 16k page alignment support (#9075) [build] fix `ConfigureLocalWorkload` target (#9124) Bump to NDK r27 (#9020) [ci] Use drop service for SDK insertion artifacts (#9116) Fix up all mapping paths (#9121) [ci] Fix maestro publishing for stable packages (#9118) Bump to dotnet/sdk@2f14fea98b 9.0.100-preview.7.24367.21 (#9108) Missing androidx.window.[extensions|sidecar] warnings (#9085) [ci] Use sign-artifacts template for macOS signing (#9091) [ci] Use DotNetCoreCLI to sign macOS files (#9102) [ci] Disable CodeQL on macOS, Linux, non-main jobs (#9111) [tests] re-enable `JavaAbstractMethodTest` (#9097) [Microsoft.Android.Sdk.ILLink] preserve types with `IJniNameProviderAttribute` (#9099) [Mono.Android] Data sharing and Close() overrides (#9103) [AndroidManifest] Add `Android.App.PropertyAttribute` (#9016) [Mono.Android] Add support for AndroidMessageHandler ClientCertificates (#8961) [Mono.Android] Bind and enumify API-35 (#9043) Bump to dotnet/java-interop@7a058c0e (#9066) ...
Fixes: #8729
Adds support for specifying the
AndroidManifest.xml
<property>
element via a new[Property]
attribute. This appears to be the exact same as<meta-data>
but with a different name, so it is implemented exactly the same.Example:
creates:
This element can be applied to
<application>
,<activity>
,<provider>
,<receiver>
, and<service>
elements.