AndroidManifest.xml

8.1 KB · raw

1<?xml version="1.0" encoding="utf-8"?>2<manifest xmlns:android="http://schemas.android.com/apk/res/android"3    xmlns:tools="http://schemas.android.com/tools">45    <uses-permission android:name="android.permission.INTERNET" />6    <!-- mDNS/NSD peer discovery for the C7 LAN sync transport -->7    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />8    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />9    <uses-permission android:name="android.permission.VIBRATE" />10    <uses-permission android:name="android.permission.USE_BIOMETRIC" />11    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />12    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />13    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />14    <!-- Android 14+ requires the specific type alongside the generic permission. -->15    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />16    <!-- Doze defers network work even for a foreground service, which would make17         an already-paired browser's reconnect time out with no visible cause.18         Play-policy-restricted: only ever requested from an explicit user tap, and19         never required — see the distribution note in sync/BatteryExemption.kt. -->20    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />21    <uses-permission android:name="android.permission.CAMERA" />22    <!-- Peach ships outside the Play Store, so it installs its own updates via the23         system package installer. Still gated per-app by the user's "install unknown24         apps" grant — this permission only makes the ask possible. -->25    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />26    <uses-feature android:name="android.hardware.camera.any" android:required="false" />2728    <application29        android:name=".PeachApplication"30        android:allowBackup="false"31        android:fullBackupContent="@xml/backup_rules"32        android:dataExtractionRules="@xml/data_extraction_rules"33        android:icon="@mipmap/ic_launcher"34        android:label="@string/app_name"35        android:roundIcon="@mipmap/ic_launcher_round"36        android:supportsRtl="true"37        android:theme="@style/Theme.Peach.Splash">3839        <activity40            android:name=".MainActivity"41            android:exported="true"42            android:launchMode="singleTask"43            android:screenOrientation="unspecified"44            android:enableOnBackInvokedCallback="true"45            android:theme="@style/Theme.Peach">46            <intent-filter>47                <action android:name="android.intent.action.MAIN" />48                <category android:name="android.intent.category.LAUNCHER" />49            </intent-filter>50            <intent-filter>51                <action android:name="android.intent.action.VIEW" />52                <category android:name="android.intent.category.DEFAULT" />53                <category android:name="android.intent.category.BROWSABLE" />54                <data android:scheme="peach" />55            </intent-filter>56            <meta-data57                android:name="android.app.shortcuts"58                android:resource="@xml/shortcuts" />59        </activity>6061        <activity62            android:name=".ui.lock.BiometricUnlockActivity"63            android:exported="false"64            android:theme="@style/Theme.Peach" />6566        <activity67            android:name=".autofill.AutofillEntryPickerActivity"68            android:exported="false"69            android:excludeFromRecents="true"70            android:theme="@style/Theme.Peach.Transparent" />7172        <activity73            android:name=".passkeys.PasskeyCredentialSelectionActivity"74            android:exported="false"75            android:excludeFromRecents="true"76            android:theme="@style/Theme.Peach.Transparent" />7778        <activity79            android:name=".credentials.PasswordCredentialSelectionActivity"80            android:exported="false"81            android:excludeFromRecents="true"82            android:theme="@style/Theme.Peach.Transparent" />8384        <!-- WorkManager is initialized on demand by PeachApplication (Configuration.Provider)85             so the update worker can be Hilt-injected; its default auto-initializer would86             race that and build a factory-less WorkManager first. -->87        <provider88            android:name="androidx.startup.InitializationProvider"89            android:authorities="${applicationId}.androidx-startup"90            android:exported="false"91            tools:node="merge">92            <meta-data93                android:name="androidx.work.WorkManagerInitializer"94                android:value="androidx.startup"95                tools:node="remove" />96        </provider>9798        <provider99            android:name="androidx.core.content.FileProvider"100            android:authorities="${applicationId}.fileprovider"101            android:exported="false"102            android:grantUriPermissions="true">103            <meta-data104                android:name="android.support.FILE_PROVIDER_PATHS"105                android:resource="@xml/file_paths" />106        </provider>107108        <!-- Keeps the phone dialable for sync; a browser extension can never109             listen, so this side has to stay reachable. -->110        <service111            android:name=".sync.PeachSyncService"112            android:exported="false"113            android:foregroundServiceType="dataSync" />114115        <receiver116            android:name=".sync.SyncNotificationDismissedReceiver"117            android:exported="false" />118119        <receiver120            android:name=".sync.BootReceiver"121            android:exported="false">122            <intent-filter>123                <action android:name="android.intent.action.BOOT_COMPLETED" />124            </intent-filter>125        </receiver>126127        <service128            android:name=".autofill.PeachAutofillService"129            android:permission="android.permission.BIND_AUTOFILL_SERVICE"130            android:exported="true"131            android:label="@string/autofill_service_label"132            android:settingsActivity=".MainActivity">133            <intent-filter>134                <action android:name="android.service.autofill.AutofillService" />135            </intent-filter>136            <meta-data137                android:name="android.autofill"138                android:resource="@xml/autofill_service_config" />139        </service>140141        <service142            android:name=".passkeys.PeachCredentialProviderService"143            android:permission="android.permission.BIND_CREDENTIAL_PROVIDER_SERVICE"144            android:exported="true"145            tools:targetApi="34">146            <intent-filter>147                <action android:name="android.service.credentials.CredentialProviderService" />148            </intent-filter>149            <meta-data150                android:name="android.credentials.provider"151                android:resource="@xml/credential_provider_config" />152        </service>153154        <service155            android:name=".qs.PeachTileService"156            android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"157            android:exported="true">158            <intent-filter>159                <action android:name="android.service.quicksettings.action.QS_TILE" />160            </intent-filter>161        </service>162163        <receiver164            android:name=".widget.PeachSmallWidgetReceiver"165            android:exported="true">166            <intent-filter>167                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />168            </intent-filter>169            <meta-data170                android:name="android.appwidget.provider"171                android:resource="@xml/peach_small_widget_info" />172        </receiver>173174        <receiver175            android:name=".widget.PeachMediumWidgetReceiver"176            android:exported="true">177            <intent-filter>178                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />179            </intent-filter>180            <meta-data181                android:name="android.appwidget.provider"182                android:resource="@xml/peach_medium_widget_info" />183        </receiver>184185    </application>186</manifest>