AndroidManifest.xml

8.8 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    <!-- Autofill verifies the signing certificate of whichever browser owns6         the framework AssistStructure. Android 11+ filters PackageManager7         lookups unless that browser role is declared visible. -->8    <queries>9        <intent>10            <action android:name="android.intent.action.VIEW" />11            <category android:name="android.intent.category.BROWSABLE" />12            <data android:scheme="https" />13        </intent>14    </queries>1516    <uses-permission android:name="android.permission.INTERNET" />17    <!-- mDNS/NSD peer discovery for the C7 LAN sync transport -->18    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />19    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />20    <uses-permission android:name="android.permission.VIBRATE" />21    <uses-permission android:name="android.permission.USE_BIOMETRIC" />22    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />23    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />24    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />25    <!-- Android 14+ requires the specific type alongside the generic permission. -->26    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />27    <!-- Doze defers network work even for a foreground service, which would make28         an already-paired browser's reconnect time out with no visible cause.29         Play-policy-restricted: only ever requested from an explicit user tap, and30         never required — see the distribution note in sync/BatteryExemption.kt. -->31    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />32    <uses-permission android:name="android.permission.CAMERA" />33    <!-- Peach ships outside the Play Store, so it installs its own updates via the34         system package installer. Still gated per-app by the user's "install unknown35         apps" grant — this permission only makes the ask possible. -->36    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />37    <uses-feature android:name="android.hardware.camera.any" android:required="false" />3839    <application40        android:name=".PeachApplication"41        android:allowBackup="false"42        android:fullBackupContent="@xml/backup_rules"43        android:dataExtractionRules="@xml/data_extraction_rules"44        android:icon="@mipmap/ic_launcher"45        android:label="@string/app_name"46        android:roundIcon="@mipmap/ic_launcher_round"47        android:supportsRtl="true"48        android:theme="@style/Theme.Peach.Splash">4950        <activity51            android:name=".MainActivity"52            android:exported="true"53            android:launchMode="singleTask"54            android:screenOrientation="unspecified"55            android:enableOnBackInvokedCallback="true"56            android:theme="@style/Theme.Peach">57            <intent-filter>58                <action android:name="android.intent.action.MAIN" />59                <category android:name="android.intent.category.LAUNCHER" />60            </intent-filter>61            <intent-filter>62                <action android:name="android.intent.action.VIEW" />63                <category android:name="android.intent.category.DEFAULT" />64                <category android:name="android.intent.category.BROWSABLE" />65                <data android:scheme="peach" />66            </intent-filter>67            <meta-data68                android:name="android.app.shortcuts"69                android:resource="@xml/shortcuts" />70        </activity>7172        <activity73            android:name=".ui.lock.BiometricUnlockActivity"74            android:exported="false"75            android:theme="@style/Theme.Peach" />7677        <activity78            android:name=".autofill.AutofillEntryPickerActivity"79            android:exported="false"80            android:excludeFromRecents="true"81            android:theme="@style/Theme.Peach.Transparent" />8283        <activity84            android:name=".passkeys.PasskeyCredentialSelectionActivity"85            android:exported="false"86            android:excludeFromRecents="true"87            android:theme="@style/Theme.Peach.Transparent" />8889        <activity90            android:name=".credentials.PasswordCredentialSelectionActivity"91            android:exported="false"92            android:excludeFromRecents="true"93            android:theme="@style/Theme.Peach.Transparent" />9495        <activity96            android:name=".credentials.CredentialProviderUnlockActivity"97            android:exported="false"98            android:excludeFromRecents="true"99            android:theme="@style/Theme.Peach.Transparent" />100101        <!-- WorkManager is initialized on demand by PeachApplication (Configuration.Provider)102             so the update worker can be Hilt-injected; its default auto-initializer would103             race that and build a factory-less WorkManager first. -->104        <provider105            android:name="androidx.startup.InitializationProvider"106            android:authorities="${applicationId}.androidx-startup"107            android:exported="false"108            tools:node="merge">109            <meta-data110                android:name="androidx.work.WorkManagerInitializer"111                android:value="androidx.startup"112                tools:node="remove" />113        </provider>114115        <provider116            android:name="androidx.core.content.FileProvider"117            android:authorities="${applicationId}.fileprovider"118            android:exported="false"119            android:grantUriPermissions="true">120            <meta-data121                android:name="android.support.FILE_PROVIDER_PATHS"122                android:resource="@xml/file_paths" />123        </provider>124125        <!-- Keeps the phone dialable for sync; a browser extension can never126             listen, so this side has to stay reachable. -->127        <service128            android:name=".sync.PeachSyncService"129            android:exported="false"130            android:foregroundServiceType="dataSync" />131132        <receiver133            android:name=".sync.SyncNotificationDismissedReceiver"134            android:exported="false" />135136        <receiver137            android:name=".sync.BootReceiver"138            android:exported="false">139            <intent-filter>140                <action android:name="android.intent.action.BOOT_COMPLETED" />141            </intent-filter>142        </receiver>143144        <service145            android:name=".autofill.PeachAutofillService"146            android:permission="android.permission.BIND_AUTOFILL_SERVICE"147            android:exported="true"148            android:label="@string/autofill_service_label"149            android:settingsActivity=".MainActivity">150            <intent-filter>151                <action android:name="android.service.autofill.AutofillService" />152            </intent-filter>153            <meta-data154                android:name="android.autofill"155                android:resource="@xml/autofill_service_config" />156        </service>157158        <service159            android:name=".passkeys.PeachCredentialProviderService"160            android:permission="android.permission.BIND_CREDENTIAL_PROVIDER_SERVICE"161            android:exported="true"162            tools:targetApi="34">163            <intent-filter>164                <action android:name="android.service.credentials.CredentialProviderService" />165            </intent-filter>166            <meta-data167                android:name="android.credentials.provider"168                android:resource="@xml/credential_provider_config" />169        </service>170171        <service172            android:name=".qs.PeachTileService"173            android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"174            android:exported="true">175            <intent-filter>176                <action android:name="android.service.quicksettings.action.QS_TILE" />177            </intent-filter>178        </service>179180        <receiver181            android:name=".widget.PeachSmallWidgetReceiver"182            android:exported="true">183            <intent-filter>184                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />185            </intent-filter>186            <meta-data187                android:name="android.appwidget.provider"188                android:resource="@xml/peach_small_widget_info" />189        </receiver>190191        <receiver192            android:name=".widget.PeachMediumWidgetReceiver"193            android:exported="true">194            <intent-filter>195                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />196            </intent-filter>197            <meta-data198                android:name="android.appwidget.provider"199                android:resource="@xml/peach_medium_widget_info" />200        </receiver>201202    </application>203</manifest>