1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (C) 2016 The Android Open Source Project
3
4     Licensed under the Apache License, Version 2.0 (the "License");
5     you may not use this file except in compliance with the License.
6     You may obtain a copy of the License at
7
8          http://www.apache.org/licenses/LICENSE-2.0
9
10     Unless required by applicable law or agreed to in writing, software
11     distributed under the License is distributed on an "AS IS" BASIS,
12     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13     See the License for the specific language governing permissions and
14     limitations under the License.
15-->
16
17<manifest xmlns:android="http://schemas.android.com/apk/res/android"
18    xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
19    xmlns:tools="http://schemas.android.com/tools"
20    package="android.ext.services"
21    android:versionCode="309999900"
22    android:versionName="2019-09"
23    coreApp="true">
24
25    <uses-permission android:name="android.permission.PROVIDE_RESOLVER_RANKER_SERVICE" />
26    <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
27
28    <uses-permission android:name="android.permission.MONITOR_DEFAULT_SMS_PACKAGE" />
29    <uses-permission android:name="android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE" />
30    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
31    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
32    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
33    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
34    <!-- INTERNET permission is restricted to TextClassifier downloader process only -->
35    <uses-permission android:name="android.permission.INTERNET" />
36    <!-- Remove unused permissions merged from WorkManager library -->
37    <uses-permission android:name="android.permission.WAKE_LOCK" tools:node="remove" />
38    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" tools:node="remove" />
39    <!-- Need this permission to receive the Boot-Completed broadcast -->
40    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
41
42    <application
43        android:name=".ExtServicesApplication"
44        android:label="@string/app_name"
45        android:forceQueryable="true"
46        android:supportsRtl="true">
47
48        <processes>
49            <!-- Deny INTERNET permission for all processes by default -->
50            <deny-permission android:name="android.permission.INTERNET" />
51            <process />
52            <process android:process=":modelDownloaderServiceProcess">
53                <allow-permission android:name="android.permission.INTERNET" />
54            </process>
55            <process android:process=".adservices">
56                <allow-permission android:name="android.permission.INTERNET" />
57            </process>
58        </processes>
59
60        <service android:name=".storage.CacheQuotaServiceImpl"
61             android:exported="true"
62             android:directBootAware="true"
63             android:permission="android.permission.BIND_CACHE_QUOTA_SERVICE">
64            <intent-filter>
65                <action android:name="android.app.usage.CacheQuotaService" />
66            </intent-filter>
67        </service>
68
69        <service android:name=".resolver.LRResolverRankerService"
70                 android:exported="true"
71                 android:directBootAware="true"
72                 android:permission="android.permission.BIND_RESOLVER_RANKER_SERVICE">
73            <intent-filter android:priority="-1">
74                <action android:name="android.service.resolver.ResolverRankerService" />
75            </intent-filter>
76        </service>
77
78        <service android:name=".notification.Assistant"
79                 android:label="@string/notification_assistant"
80                 android:directBootAware="true"
81                 android:permission="android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE"
82                 android:exported="true">
83            <intent-filter>
84                <action android:name="android.service.notification.NotificationAssistantService" />
85            </intent-filter>
86        </service>
87
88        <service android:name=".autofill.AutofillFieldClassificationServiceImpl"
89             android:exported="true"
90             android:directBootAware="true"
91             android:permission="android.permission.BIND_AUTOFILL_FIELD_CLASSIFICATION_SERVICE">
92            <intent-filter>
93                <action android:name="android.service.autofill.AutofillFieldClassificationService" />
94            </intent-filter>
95            <meta-data
96                android:name="android.autofill.field_classification.default_algorithm"
97                android:resource="@string/autofill_field_classification_default_algorithm" />
98            <meta-data
99                android:name="android.autofill.field_classification.available_algorithms"
100                android:resource="@array/autofill_field_classification_available_algorithms" />
101        </service>
102
103        <service android:name=".watchdog.ExplicitHealthCheckServiceImpl"
104                 android:exported="true"
105                 android:directBootAware="true"
106                 android:permission="android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE">
107            <intent-filter>
108                <action android:name="android.service.watchdog.ExplicitHealthCheckService" />
109            </intent-filter>
110        </service>
111
112        <activity android:name="com.android.textclassifier.notification.CopyCodeActivity"
113                  android:exported="false"
114                  android:directBootAware="true"
115                  android:theme="@android:style/Theme.NoDisplay"/>
116
117        <!-- DirectBootAware is disabled below as it shouldn't be used if the device is locked -->
118        <service
119            android:name="com.android.textclassifier.DefaultTextClassifierService"
120            android:directBootAware="false"
121            android:exported="true"
122            android:permission="android.permission.BIND_TEXTCLASSIFIER_SERVICE">
123            <intent-filter>
124                <action android:name="android.service.textclassifier.TextClassifierService"/>
125            </intent-filter>
126        </service>
127
128        <service android:name="com.android.textclassifier.downloader.ModelDownloaderService"
129                 android:exported="false"
130                 android:directBootAware="false"
131                 android:process=":modelDownloaderServiceProcess">
132        </service>
133
134        <service android:name=".autofill.InlineSuggestionRenderServiceImpl"
135                 android:exported="true"
136                 android:directBootAware="true"
137                 android:permission="android.permission.BIND_INLINE_SUGGESTION_RENDER_SERVICE">
138            <intent-filter>
139                <action android:name="android.service.autofill.InlineSuggestionRenderService" />
140            </intent-filter>
141        </service>
142
143        <service android:name=".displayhash.DisplayHashingServiceImpl"
144            android:exported="true"
145            android:directBootAware="true"
146            android:permission="android.permission.BIND_DISPLAY_HASHING_SERVICE">
147            <intent-filter>
148                <action android:name="android.service.displayhash.DisplayHashingService" />
149            </intent-filter>
150        </service>
151
152        <!-- Remove the default WorkManager and Startup initializers and use on-demand
153             initialization instead. This gives us more control on when initialization
154             happens, e.g. when the user is unlocked.
155        -->
156        <provider
157            android:name="androidx.work.impl.WorkManagerInitializer"
158            android:authorities="${applicationId}.workmanager-init"
159            tools:node="remove" />
160        <provider
161            android:name="androidx.startup.InitializationProvider"
162            android:authorities="${applicationId}.androidx-startup"
163            tools:node="remove" />
164
165        <receiver android:name=".common.AdServicesFilesCleanupBootCompleteReceiver"
166                  android:enabled="@bool/enableAdServicesDataCleanupReceiver"
167                  android:exported="true">
168            <intent-filter>
169                <action android:name="android.intent.action.BOOT_COMPLETED"/>
170            </intent-filter>
171        </receiver>
172        <service android:name="android.ext.services.common.AdServicesAppsearchDeleteJob"
173                 android:enabled="@bool/enableAdServicesDataCleanupReceiver"
174                 android:permission="android.permission.BIND_JOB_SERVICE"
175                 android:exported="false">
176        </service>
177    </application>
178</manifest>
179