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="28">
21
22    <uses-sdk android:minSdkVersion="21"
23         android:targetSdkVersion="28"/>
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    <application android:label="@string/english_ime_name"
58         android:icon="@drawable/ic_launcher_keyboard"
59         android:supportsRtl="true"
60         android:allowBackup="true"
61         android:defaultToDeviceProtectedStorage="true"
62         android:directBootAware="true">
63
64        <!-- Services -->
65        <service android:name="LatinIME"
66             android:label="@string/english_ime_name"
67             android:permission="android.permission.BIND_INPUT_METHOD"
68             android:exported="true">
69            <intent-filter>
70                <action android:name="android.view.InputMethod"/>
71            </intent-filter>
72            <meta-data android:name="android.view.im"
73                 android:resource="@xml/method"/>
74        </service>
75
76        <service android:name=".spellcheck.AndroidSpellCheckerService"
77             android:label="@string/spell_checker_service_name"
78             android:permission="android.permission.BIND_TEXT_SERVICE"
79             android:exported="true">
80            <intent-filter>
81                <action android:name="android.service.textservice.SpellCheckerService"/>
82            </intent-filter>
83            <meta-data android:name="android.view.textservice.scs"
84                 android:resource="@xml/spellchecker"/>
85        </service>
86
87        <service android:name="com.android.inputmethod.dictionarypack.DictionaryService"
88             android:label="@string/dictionary_service_name">
89        </service>
90
91        <!-- Activities -->
92        <activity android:name=".setup.SetupActivity"
93             android:theme="@style/platformActivityTheme"
94             android:label="@string/english_ime_name"
95             android:icon="@drawable/ic_launcher_keyboard"
96             android:launchMode="singleTask"
97             android:noHistory="true"
98             android:exported="true">
99            <intent-filter>
100                <action android:name="android.intent.action.MAIN"/>
101                <category android:name="android.intent.category.LAUNCHER"/>
102            </intent-filter>
103        </activity>
104
105        <activity android:name=".permissions.PermissionsActivity"
106             android:theme="@android:style/Theme.Translucent.NoTitleBar"
107             android:exported="false"
108             android:taskAffinity="">
109        </activity>
110
111        <activity android:name=".setup.SetupWizardActivity"
112             android:theme="@style/platformActivityTheme"
113             android:label="@string/english_ime_name"
114             android:clearTaskOnLaunch="true"
115             android:exported="true">
116            <intent-filter>
117                <action android:name="android.intent.action.MAIN"/>
118            </intent-filter>
119        </activity>
120
121        <activity android:name=".settings.SettingsActivity"
122             android:theme="@style/platformSettingsTheme"
123             android:label="@string/english_ime_settings"
124             android:exported="true">
125            <intent-filter>
126                <action android:name="android.intent.action.MAIN"/>
127            </intent-filter>
128        </activity>
129
130        <activity android:name=".spellcheck.SpellCheckerSettingsActivity"
131             android:theme="@style/platformSettingsTheme"
132             android:label="@string/android_spell_checker_settings"
133             android:exported="true">
134            <intent-filter>
135                <action android:name="android.intent.action.MAIN"/>
136            </intent-filter>
137        </activity>
138
139        <activity android:name="com.android.inputmethod.dictionarypack.DictionarySettingsActivity"
140             android:theme="@style/platformSettingsTheme"
141             android:label="@string/dictionary_settings_title"
142             android:uiOptions="splitActionBarWhenNarrow"
143             android:exported="true">
144            <intent-filter>
145                <action android:name="android.intent.action.MAIN"/>
146            </intent-filter>
147        </activity>
148
149        <activity android:name="com.android.inputmethod.dictionarypack.DownloadOverMeteredDialog"
150             android:theme="@style/platformActivityTheme"
151             android:label="@string/dictionary_install_over_metered_network_prompt"
152             android:exported="true">
153            <intent-filter>
154                <action android:name="android.intent.action.MAIN"/>
155            </intent-filter>
156        </activity>
157
158        <!-- Unexported activity used for tests. -->
159        <activity android:name=".settings.TestFragmentActivity"
160             android:exported="false"/>
161
162        <!-- Broadcast receivers -->
163        <receiver android:name="SystemBroadcastReceiver"
164             android:exported="true">
165            <intent-filter>
166                <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
167                <action android:name="android.intent.action.BOOT_COMPLETED"/>
168                <action android:name="android.intent.action.USER_INITIALIZE"/>
169                <action android:name="android.intent.action.LOCALE_CHANGED"/>
170            </intent-filter>
171        </receiver>
172
173        <receiver android:name="DictionaryPackInstallBroadcastReceiver"
174             android:exported="false">
175            <intent-filter>
176                <action android:name="com.android.inputmethod.dictionarypack.aosp.UNKNOWN_CLIENT"/>
177            </intent-filter>
178        </receiver>
179
180        <receiver android:name="com.android.inputmethod.dictionarypack.EventHandler"
181             android:exported="true">
182            <intent-filter>
183                <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
184                <action android:name="android.intent.action.DATE_CHANGED"/>
185                <action android:name="com.android.inputmethod.dictionarypack.aosp.UPDATE_NOW"/>
186                <action android:name="com.android.inputmethod.dictionarypack.aosp.INIT_AND_UPDATE_NOW"/>
187            </intent-filter>
188        </receiver>
189
190        <!-- Broadcast receiver for AccountManager#LOGIN_ACCOUNTS_CHANGED_ACTION. -->
191        <receiver android:name=".accounts.AccountsChangedReceiver"
192             android:exported="true">
193            <intent-filter>
194                <action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED"/>
195            </intent-filter>
196        </receiver>
197
198        <!-- Content providers -->
199        <provider android:name="com.android.inputmethod.dictionarypack.DictionaryProvider"
200             android:grantUriPermissions="true"
201             android:exported="false"
202             android:authorities="@string/authority"
203             android:multiprocess="false"
204             android:label="@string/dictionary_provider_name">
205        </provider>
206    </application>
207</manifest>
208