cb832a7cac
:app binds every :core:model interface to :data in debug and release (AppDataModule, D-085); the debug fakes module is gone. NavHost over all feature screens with the session gate (S-1, S-2, S-18), bottom destinations from each screen's own bar, result snackbars, deep links (kvitt://invite and the /i/<CODE> landing link) and notification taps. :adapter:fcm maps payload v1 to PushEvent and registers by Firebase Installation ID (firebase-messaging 26, D-087). Push work runs in WorkManager: expedited sync waited up to 20 s, then the notification from local data or the generic text. WorkManager uses KvittWorkerFactory, Coil uses :data's ImageLoader, SyncTriggers on start and foreground, update check in release only. Network security configs (debug cleartext, D-086; pinned-root variant), release signing from local.properties, notification permission after the first sync. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
62 lines
2.9 KiB
XML
62 lines
2.9 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
xmlns:tools="http://schemas.android.com/tools">
|
|
|
|
<!-- AC-2.9: asked after the first full sync that follows a pairing. -->
|
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
|
<!-- FR-16: PackageInstaller (declared by :data as well). -->
|
|
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
|
|
|
<!-- SPEC §8.8: no backup, no device transfer; network security per build type (§8.5). -->
|
|
<application
|
|
android:name=".KvittApplication"
|
|
android:allowBackup="false"
|
|
android:dataExtractionRules="@xml/data_extraction_rules"
|
|
android:label="@string/app_name"
|
|
android:networkSecurityConfig="@xml/network_security_config"
|
|
android:supportsRtl="true"
|
|
android:theme="@android:style/Theme.Material.NoActionBar">
|
|
<!-- The only exported activity (§8.8): launcher, the invite links of AC-2.6 and notification taps. -->
|
|
<activity
|
|
android:name=".MainActivity"
|
|
android:exported="true"
|
|
android:launchMode="singleTask"
|
|
android:windowSoftInputMode="adjustResize">
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.MAIN" />
|
|
<category android:name="android.intent.category.LAUNCHER" />
|
|
</intent-filter>
|
|
<intent-filter>
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
<data android:scheme="kvitt" android:host="invite" />
|
|
</intent-filter>
|
|
<!-- Unverified link: the user may get a chooser (AC-2.6). -->
|
|
<intent-filter android:autoVerify="false">
|
|
<action android:name="android.intent.action.VIEW" />
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
<data
|
|
android:scheme="https"
|
|
android:host="icehack.asuscomm.com"
|
|
android:port="8443"
|
|
android:pathPrefix="/i/" />
|
|
</intent-filter>
|
|
</activity>
|
|
|
|
<!-- WorkManager is configured by KvittApplication (KvittWorkerFactory, D-041): no default initializer. -->
|
|
<provider
|
|
android:name="androidx.startup.InitializationProvider"
|
|
android:authorities="${applicationId}.androidx-startup"
|
|
android:exported="false"
|
|
tools:node="merge">
|
|
<meta-data
|
|
android:name="androidx.work.WorkManagerInitializer"
|
|
android:value="androidx.startup"
|
|
tools:node="remove" />
|
|
</provider>
|
|
</application>
|
|
|
|
</manifest>
|