1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
use serde::{Deserialize, Serialize};
/// Specifies the subsets of app data that parent content provider can access.
///
/// Data subsets are indicated by the path part of a `content:` URI. (The authority part
/// of the URI identifies the content provider.) Granting permission is a way of enabling
/// clients of the provider that don't normally have permission to access its data to
/// overcome that restriction on a one-time basis.
///
/// If a content provider's [`grantUriPermissions`] attribute is `"true"`, permission can
/// be granted for any the data under the provider's purview. However, if that attribute
/// is `"false"` permission can be granted only to data subsets that are specified
/// by this element. A provider can contain any number of
/// `<grant-uri-permission>` elements. Each one can specify only one path (only
/// one of the three possible attributes).
///
/// For information on how permission is granted, see the [`<intent-filter>`] element's
/// [`grantUriPermissions`] attribute.
///
/// ## XML Syntax
/// ```xml
/// <grant-uri-permission android:path="string"
/// android:pathPattern="string"
/// android:pathPrefix="string" />
/// ```
///
/// ## Contained in
/// * [`<provider>`]
///
/// ## Introduced in
/// API Level 1
///
/// [`grantUriPermissions`]: crate::Provider#structfield.grant_uri_permissions
/// [`<intent-filter>`]: crate::IntentFilter
/// [`<provider>`]: crate::Provider
#[derive(
Debug, Deserialize, Serialize, YaSerialize, YaDeserialize, PartialEq, Eq, Default, Clone,
)]
pub struct GrantUriPermission {
/// A path identifying the data subset or subsets that permission can be granted for.
/// The path attribute specifies a complete path; permission can be granted only
/// to the particular data subset identified by that path. The `pathPrefix`
/// attribute specifies the initial part of a path; permission can be granted to
/// all data subsets with paths that share that initial part. The `pathPattern`
/// attribute specifies a complete path, but one that can contain the following
/// wildcards:
///
/// * An asterisk `('*')` matches a sequence of 0 to many occurrences of the
/// immediately preceding character.
/// * A period followed by an asterisk `(".*")` matches any sequence of 0 to many
/// characters.
///
/// Because `'\'` is used as an escape character when the string is read from XML
/// (before it is parsed as a pattern), you will need to double-escape: For
/// example, a literal `'*'` would be written as `"\\*"` and a literal `'\'` would
/// be written as `"\\\\"`. This is basically the same as what you would need to
/// write if constructing the string in Java code.
/// For more information on these types of patterns, see the descriptions of
/// [`PATTERN_LITERAL`], [`PATTERN_PREFIX`], and [`PATTERN_SIMPLE_GLOB`] in the
/// [`PatternMatcher`] class.
///
/// [`PATTERN_LITERAL`]: https://developer.android.com/reference/android/os/PatternMatcher#PATTERN_LITERAL
/// [`PATTERN_PREFIX`]: https://developer.android.com/reference/android/os/PatternMatcher#PATTERN_PREFIX
/// [`PATTERN_SIMPLE_GLOB`]: https://developer.android.com/reference/android/os/PatternMatcher#PATTERN_SIMPLE_GLOB
/// [`PatternMatcher`]: https://developer.android.com/reference/android/os/PatternMatcher
#[yaserde(attribute, prefix = "android")]
pub path: Option<String>,
#[yaserde(attribute, prefix = "android", rename = "pathPattern")]
pub path_pattern: Option<String>,
#[yaserde(attribute, prefix = "android", rename = "pathPrefix")]
pub path_prefix: Option<String>,
}