[AndroidManifest] Add support for <property> element via PropertyAttribute.#9016
Merged
[AndroidManifest] Add support for <property> element via PropertyAttribute.#9016
<property> element via PropertyAttribute.#9016Conversation
099bb67 to
d8bfe6e
Compare
dellis1972
approved these changes
Jul 10, 2024
jonathanpeppers
approved these changes
Jul 10, 2024
Member
jonathanpeppers
left a comment
There was a problem hiding this comment.
I didn't really have any concerns except the classes at the bottom of a file. 👍
Comment on lines
+1316
to
+1322
| // 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 { } | ||
| } |
Member
There was a problem hiding this comment.
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.
Comment on lines
+583
to
+586
| var properties = | ||
| Assemblies.SelectMany (path => PropertyAttribute.FromCustomAttributeProvider (Resolver.GetAssembly (path), cache)) | ||
| .Where (attr => attr != null) | ||
| .ToList (); |
Member
There was a problem hiding this comment.
This shouldn't be fixed here, but I wonder if the N Assemblies.SelectMany() calls could be a performance issue.
Contributor
|
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? |
Contributor
Author
|
It will be in .NET 9 Preview 7. |
grendello
added a commit
that referenced
this pull request
Jul 23, 2024
* 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) ...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.