summaryrefslogtreecommitdiffhomepage
path: root/android/app/src/main/AndroidManifest.xml
blob: dd660cda4ba386762d2e3d1f6b08b584628aa2c1 (plain)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools">
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- Suppress warning, just using queries tag is not enough for our all, we need access to all
    packages to allow the user to select apps for split tunneling -->
    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
        tools:ignore="QueryAllPackagesPermission" />
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    <!-- https://developer.android.com/guide/components/fg-service-types#system-exempted -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SYSTEM_EXEMPTED" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-feature android:name="android.hardware.touchscreen"
                  android:required="false" />
    <uses-feature android:name="android.hardware.faketouch"
                  android:required="false" />
    <uses-feature android:name="android.hardware.screen.portrait"
                  android:required="false" />
    <uses-feature android:name="android.hardware.screen.landscape"
                  android:required="false" />
    <uses-feature android:name="android.software.leanback"
                  android:required="false" />
    <uses-feature android:glEsVersion="0x00020000"
                  android:required="false" />

    <application android:name=".MullvadApplication"
                 android:banner="@mipmap/ic_banner"
                 android:allowBackup="false"
                 android:fullBackupContent="@xml/full_backup_content"
                 android:dataExtractionRules="@xml/data_extraction_rules"
                 android:icon="@mipmap/ic_launcher"
                 android:label="@string/app_name"
                 android:roundIcon="@mipmap/ic_launcher"
                 android:theme="@style/Theme.App.Starting"
                 tools:ignore="GoogleAppIndexingWarning">
        <!--
            MainActivity
            Must be exported in order to be launchable.
            Launch mode should singleInstance to avoid this vulnerability;
            https://developer.android.com/privacy-and-security/risks/strandhogg
            This can be disregarded when the minimum supported version is 28 or higher
            since after that it has been patched on a OS level.
        -->
        <activity android:name="net.mullvad.mullvadvpn.ui.MainActivity"
                  android:exported="true"
                  android:launchMode="singleInstance"
                  android:screenOrientation="fullUser"
                  android:windowSoftInputMode="adjustResize"
                  android:enableOnBackInvokedCallback="true"
                  tools:ignore="DiscouragedApi,UnusedAttribute">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.service.quicksettings.action.QS_TILE_PREFERENCES" />
            </intent-filter>
            <intent-filter>
                <action android:name="net.mullvad.mullvadvpn.request_vpn_permission" />
            </intent-filter>
        </activity>
        <!--
            foregroundServiceType="systemExempted" is required in Android 14+
            https://developer.android.com/guide/components/fg-service-types#system-exempted
            -->
        <service android:name="net.mullvad.mullvadvpn.service.MullvadVpnService"
                 android:exported="false"
                 android:foregroundServiceType="systemExempted"
                 android:permission="android.permission.BIND_VPN_SERVICE"
                 android:stopWithTask="false"
                 tools:ignore="ForegroundServicePermission">
            <intent-filter>
                <action android:name="android.net.VpnService" />
            </intent-filter>
            <intent-filter>
                <action android:name="net.mullvad.mullvadvpn.connect_action" />
            </intent-filter>
            <intent-filter>
                <action android:name="net.mullvad.mullvadvpn.disconnect_action" />
            </intent-filter>
            <intent-filter>
                <action android:name="net.mullvad.mullvadvpn.quit_action" />
            </intent-filter>
        </service>
        <!--
            MullvadTileService
            Tile services must be exported and protected by the bind tile permission
            (android.permission.BIND_QUICK_SETTINGS_TILE).
        -->
        <service android:name="net.mullvad.mullvadvpn.tile.MullvadTileService"
                 android:exported="true"
                 android:icon="@drawable/small_logo_black"
                 android:label="@string/toggle_vpn"
                 android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
            <intent-filter>
                <action android:name="android.service.quicksettings.action.QS_TILE" />
            </intent-filter>
        </service>
        <provider android:name="net.mullvad.mullvadvpn.provider.MullvadFileProvider"
                  android:authorities="${applicationId}.FileProvider"
                  android:exported="false"
                  android:grantUriPermissions="true">
            <meta-data android:name="android.support.FILE_PROVIDER_PATHS"
                       android:resource="@xml/provider_paths" />
        </provider>
        <receiver android:name=".receiver.LocaleChangedBroadcastReceiver"
                  android:exported="false">
            <intent-filter>
                <action android:name="android.intent.action.LOCALE_CHANGED" />
            </intent-filter>
        </receiver>
        <receiver android:name=".receiver.BootCompletedReceiver"
                          android:enabled="false"
                          android:exported="false">
                    <intent-filter>
                        <action android:name="android.intent.action.QUICKBOOT_POWERON" />
                        <action android:name="android.intent.action.BOOT_COMPLETED" />
                    </intent-filter>
                </receiver>
    </application>
</manifest>