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
<!--
This plugin needs **no** permission. Every control it hosts is a plain
`android.widget` view built from Rust over JNI, and its one factory class is
instantiated reflectively by the embedding's `FrustViewHost`, not by the
system — neither needs a manifest entry.
The one manifest component is the provider below: it is how
`FrustNativePresenter` (native presentations — alerts) obtains the
application `Context` BEFORE any Activity exists, to register its
process-wide `Application.ActivityLifecycleCallbacks` and so know which
Activity is resumed when an app asks for an alert. The first Activity is
otherwise the only `Context` this plugin would see, and that is too late to
observe its own first resume. A no-op `ContentProvider` whose `onCreate` runs
at process start is the standard library-self-initialization mechanism for
exactly this (`androidx.startup`'s `InitializationProvider`), mirroring
`plugins/auth-session/platform/android`'s `FrustAuthSessionInitProvider`
(no `initOrder`, like that one: nothing here depends on another provider
having run first).
`${applicationId}` is substituted by AGP at manifest-merge time, so the
authority is unique per consuming app (two apps on one device cannot
collide). `exported="false"`: nothing outside the app may reach it — it
exposes no data and every ContentProvider operation returns null/0.
No `package` attribute: AGP takes the module's package from
`android.namespace` in `build.gradle.kts` (`dev.frust.nativewidgets`).
-->