1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (C) 2012 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     coreApp="true"
19     package="com.android.inputmethod.latin"
20     android:versionCode="30">
21
22    <uses-sdk android:minSdkVersion="21"
23         android:targetSdkVersion="30"/>
24
25    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
26    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
27    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
28    <uses-permission android:name="android.permission.READ_CONTACTS"/>
29    <uses-permission android:name="android.permission.READ_PROFILE"/>
30    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
31    <uses-permission android:name="android.permission.READ_SYNC_STATS"/>
32    <uses-permission android:name="android.permission.READ_USER_DICTIONARY"/>
33    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
34    <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
35    <uses-permission android:name="android.permission.VIBRATE"/>
36    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
37    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
38    <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY"/>
39
40    <!-- A signature-protected permission to ask AOSP Keyboard to close the software keyboard.
41                 To use this, add the following line into calling application's AndroidManifest.xml
42         <pre>
43                      {@code
44         <uses-permission android:name="com.android.inputmethod.latin.HIDE_SOFT_INPUT"/>
45                      }
46         </pre>
47                      then call {@link android.content.Context#sendBroadcast(Intent)} as follows:
48         <pre>
49                      {@code
50                      sendBroadcast(new Intent("com.android.inputmethod.latin.HIDE_SOFT_INPUT")
51                              .setPackage("com.android.inputmethod.latin"));
52                      }
53         </pre> -->
54    <permission android:name="com.android.inputmethod.latin.HIDE_SOFT_INPUT"
55         android:protectionLevel="signature"/>
56
57    <!-- To query enabled input methods. -->
58    <queries>
59        <intent>
60            <action android:name="android.view.InputMethod" />
61        </intent>
62    </queries>
63
64    <application android:label="@string/english_ime_name"
65         android:icon="@drawable/ic_launcher_keyboard"
66         android:supportsRtl="true"
67         android:allowBackup="true"
68         android:defaultToDeviceProtectedStorage="true"
69         android:directBootAware="true">
70
71        <!-- Services -->
72        <service android:name="LatinIME"
73             android:label="@string/english_ime_name"
74             android:permission="android.permission.BIND_INPUT_METHOD"
75             android:exported="true"
76             android:visibleToInstantApps="true">
77            <intent-filter>
78                <action android:name="android.view.InputMethod"/>
79            </intent-filter>
80            <meta-data android:name="android.view.im"
81                 android:resource="@xml/method"/>
82        </service>
83
84        <service android:name=".spellcheck.AndroidSpellCheckerService"
85             android:label="@string/spell_checker_service_name"
86             android:permission="android.permission.BIND_TEXT_SERVICE"
87             android:exported="true">
88            <intent-filter>
89                <action android:name="android.service.textservice.SpellCheckerService"/>
90            </intent-filter>
91            <meta-data android:name="android.view.textservice.scs"
92                 android:resource="@xml/spellchecker"/>
93        </service>
94
95        <service android:name="com.android.inputmethod.dictionarypack.DictionaryService"
96             android:label="@string/dictionary_service_name">
97        </service>
98
99        <!-- Activities -->
100        <activity android:name=".setup.SetupActivity"
101             android:theme="@style/platformActivityTheme"
102             android:label="@string/english_ime_name"
103             android:icon="@drawable/ic_launcher_keyboard"
104             android:launchMode="singleTask"
105             android:noHistory="true"
106             android:exported="true">
107            <intent-filter>
108                <action android:name="android.intent.action.MAIN"/>
109                <category android:name="android.intent.category.LAUNCHER"/>
110            </intent-filter>
111        </activity>
112
113        <activity android:name=".permissions.PermissionsActivity"
114             android:theme="@android:style/Theme.Translucent.NoTitleBar"
115             android:exported="false"
116             android:taskAffinity="">
117        </activity>
118
119        <activity android:name=".setup.SetupWizardActivity"
120             android:theme="@style/platformActivityTheme"
121             android:label="@string/english_ime_name"
122             android:clearTaskOnLaunch="true"
123             android:exported="true">
124            <intent-filter>
125                <action android:name="android.intent.action.MAIN"/>
126            </intent-filter>
127        </activity>
128
129        <activity android:name=".settings.SettingsActivity"
130             android:theme="@style/platformSettingsTheme"
131             android:label="@string/english_ime_settings"
132             android:exported="true">
133            <intent-filter>
134                <action android:name="android.intent.action.MAIN"/>
135            </intent-filter>
136        </activity>
137
138        <activity android:name=".spellcheck.SpellCheckerSettingsActivity"
139             android:theme="@style/platformSettingsTheme"
140             android:label="@string/android_spell_checker_settings"
141             android:exported="true">
142            <intent-filter>
143                <action android:name="android.intent.action.MAIN"/>
144            </intent-filter>
145        </activity>
146
147        <activity android:name="com.android.inputmethod.dictionarypack.DictionarySettingsActivity"
148             android:theme="@style/platformSettingsTheme"
149             android:label="@string/dictionary_settings_title"
150             android:uiOptions="splitActionBarWhenNarrow"
151             android:exported="true">
152            <intent-filter>
153                <action android:name="android.intent.action.MAIN"/>
154            </intent-filter>
155        </activity>
156
157        <activity android:name="com.android.inputmethod.dictionarypack.DownloadOverMeteredDialog"
158             android:theme="@style/platformActivityTheme"
159             android:label="@string/dictionary_install_over_metered_network_prompt"
160             android:exported="false">
161            <intent-filter>
162                <action android:name="android.intent.action.MAIN"/>
163            </intent-filter>
164        </activity>
165
166        <!-- Unexported activity used for tests. -->
167        <activity android:name=".settings.TestFragmentActivity"
168             android:exported="false"/>
169
170        <!-- Broadcast receivers -->
171        <receiver android:name="SystemBroadcastReceiver"
172             android:exported="true">
173            <intent-filter>
174                <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
175                <action android:name="android.intent.action.BOOT_COMPLETED"/>
176                <action android:name="android.intent.action.USER_INITIALIZE"/>
177                <action android:name="android.intent.action.LOCALE_CHANGED"/>
178            </intent-filter>
179        </receiver>
180
181        <receiver android:name="DictionaryPackInstallBroadcastReceiver"
182             android:exported="false">
183            <intent-filter>
184                <action android:name="com.android.inputmethod.dictionarypack.aosp.UNKNOWN_CLIENT"/>
185            </intent-filter>
186        </receiver>
187
188        <receiver android:name="com.android.inputmethod.dictionarypack.EventHandler"
189             android:exported="true">
190            <intent-filter>
191                <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
192                <action android:name="android.intent.action.DATE_CHANGED"/>
193                <action android:name="com.android.inputmethod.dictionarypack.aosp.UPDATE_NOW"/>
194                <action android:name="com.android.inputmethod.dictionarypack.aosp.INIT_AND_UPDATE_NOW"/>
195            </intent-filter>
196        </receiver>
197
198        <!-- Broadcast receiver for AccountManager#LOGIN_ACCOUNTS_CHANGED_ACTION. -->
199        <receiver android:name=".accounts.AccountsChangedReceiver"
200             android:exported="true">
201            <intent-filter>
202                <action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED"/>
203            </intent-filter>
204        </receiver>
205
206        <!-- Content providers -->
207        <provider android:name="com.android.inputmethod.dictionarypack.DictionaryProvider"
208             android:grantUriPermissions="true"
209             android:exported="false"
210             android:authorities="@string/authority"
211             android:multiprocess="false"
212             android:label="@string/dictionary_provider_name">
213        </provider>
214    </application>
215</manifest>
216