chiark / gitweb /
Merge branch 'update-install' into 'master'
[fdroidserver.git] / tests / AndroidManifest.xml
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"
4     package="org.fdroid.fdroid"
5     android:installLocation="auto"
6     android:versionCode="940"
7     android:versionName="0.94-test"
8     >
9
10     <uses-sdk
11         tools:overrideLibrary="org.thoughtcrime.ssl.pinning"
12         android:minSdkVersion="8"
13         android:targetSdkVersion="21"
14         />
15
16     <supports-screens
17         android:anyDensity="true"
18         android:largeScreens="true"
19         android:normalScreens="true"
20         android:resizeable="true"
21         android:smallScreens="true"
22         android:xlargeScreens="true"
23         />
24
25     <uses-feature
26         android:name="android.hardware.telephony"
27         android:required="false" />
28     <uses-feature
29         android:name="android.hardware.wifi"
30         android:required="false" />
31     <uses-feature
32         android:name="android.hardware.touchscreen"
33         android:required="false" />
34     <uses-feature
35         android:name="android.hardware.nfc"
36         android:required="false" />
37     <uses-feature
38         android:name="android.hardware.bluetooth"
39         android:required="false" />
40
41     <uses-permission android:name="android.permission.INTERNET" />
42     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
43     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
44     <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
45     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
46     <uses-permission android:name="android.permission.BLUETOOTH" />
47     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
48     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
49         android:maxSdkVersion="18" />
50     <uses-permission android:name="android.permission.NFC" />
51
52     <!-- These permissions are only granted when F-Droid is installed as a system-app! -->
53     <uses-permission android:name="android.permission.INSTALL_PACKAGES"
54         tools:ignore="ProtectedPermissions"/>
55     <uses-permission android:name="android.permission.DELETE_PACKAGES"
56         tools:ignore="ProtectedPermissions"/>
57
58     <application
59         android:debuggable="true"
60         android:name="FDroidApp"
61         android:icon="@drawable/ic_launcher"
62         android:label="@string/app_name"
63         android:description="@string/app_description"
64         android:allowBackup="true"
65         android:theme="@style/AppThemeDark"
66         android:supportsRtl="true"
67         >
68
69         <provider
70             android:authorities="org.fdroid.fdroid.data.AppProvider"
71             android:name="org.fdroid.fdroid.data.AppProvider"
72             android:exported="false"/>
73
74         <provider
75             android:authorities="org.fdroid.fdroid.data.RepoProvider"
76             android:name="org.fdroid.fdroid.data.RepoProvider"
77             android:exported="false"/>
78
79         <provider
80             android:authorities="org.fdroid.fdroid.data.ApkProvider"
81             android:name="org.fdroid.fdroid.data.ApkProvider"
82             android:exported="false"/>
83
84         <provider
85             android:authorities="org.fdroid.fdroid.data.InstalledAppProvider"
86             android:name="org.fdroid.fdroid.data.InstalledAppProvider"
87             android:exported="false"/>
88
89         <activity
90             android:name=".FDroid"
91             android:launchMode="singleTop"
92             android:configChanges="keyboardHidden|orientation|screenSize" >
93
94             <!-- App URLs -->
95             <intent-filter>
96                 <action android:name="android.intent.action.MAIN" />
97
98                 <category android:name="android.intent.category.LAUNCHER" />
99             </intent-filter>
100
101             <intent-filter>
102                 <action android:name="android.intent.action.VIEW" />
103
104                 <category android:name="android.intent.category.DEFAULT" />
105                 <category android:name="android.intent.category.BROWSABLE" />
106
107                 <data android:scheme="fdroid.app" />
108             </intent-filter>
109
110             <intent-filter>
111                 <action android:name="android.intent.action.VIEW" />
112
113                 <category android:name="android.intent.category.DEFAULT" />
114                 <category android:name="android.intent.category.BROWSABLE" />
115
116                 <data android:scheme="http" />
117                 <data android:scheme="https" />
118                 <data android:host="f-droid.org" />
119                 <data android:host="www.f-droid.org" />
120                 <data android:pathPrefix="/app/" />
121             </intent-filter>
122
123             <intent-filter>
124                 <action android:name="android.intent.action.VIEW" />
125
126                 <category android:name="android.intent.category.DEFAULT" />
127                 <category android:name="android.intent.category.BROWSABLE" />
128
129                 <data android:scheme="http" />
130                 <data android:scheme="https" />
131                 <data android:host="f-droid.org" />
132                 <data android:host="www.f-droid.org" />
133                 <data android:pathPrefix="/repository/browse" />
134             </intent-filter>
135
136             <intent-filter>
137                 <action android:name="android.intent.action.VIEW" />
138
139                 <category android:name="android.intent.category.DEFAULT" />
140                 <category android:name="android.intent.category.BROWSABLE" />
141
142                 <data android:scheme="market" android:host="details" />
143             </intent-filter>
144
145             <intent-filter>
146                 <action android:name="android.intent.action.VIEW" />
147
148                 <category android:name="android.intent.category.DEFAULT" />
149                 <category android:name="android.intent.category.BROWSABLE" />
150
151                 <data android:scheme="http" />
152                 <data android:scheme="https" />
153                 <data android:host="play.google.com" /> <!-- they don't do www. -->
154                 <data android:path="/store/apps/details" />
155             </intent-filter>
156
157             <intent-filter>
158                 <action android:name="android.intent.action.VIEW" />
159
160                 <category android:name="android.intent.category.DEFAULT" />
161                 <category android:name="android.intent.category.BROWSABLE" />
162
163                 <data android:scheme="amzn" android:host="apps" android:path="/android" />
164             </intent-filter>
165
166             <intent-filter>
167                 <action android:name="android.intent.action.VIEW" />
168
169                 <category android:name="android.intent.category.DEFAULT" />
170                 <category android:name="android.intent.category.BROWSABLE" />
171
172                 <data android:scheme="http" />
173                 <data android:scheme="https" />
174                 <data android:host="amazon.com" />
175                 <data android:host="www.amazon.com" />
176                 <data android:path="/gp/mas/dl/android" />
177             </intent-filter>
178
179             <!-- Search URLs -->
180
181             <intent-filter>
182                 <action android:name="android.intent.action.VIEW" />
183
184                 <category android:name="android.intent.category.DEFAULT" />
185                 <category android:name="android.intent.category.BROWSABLE" />
186
187                 <data android:scheme="fdroid.search" />
188             </intent-filter>
189
190             <intent-filter>
191                 <action android:name="android.intent.action.VIEW" />
192
193                 <category android:name="android.intent.category.DEFAULT" />
194                 <category android:name="android.intent.category.BROWSABLE" />
195
196                 <data android:scheme="market" android:host="search" />
197             </intent-filter>
198
199             <intent-filter>
200                 <action android:name="android.intent.action.VIEW" />
201
202                 <category android:name="android.intent.category.DEFAULT" />
203                 <category android:name="android.intent.category.BROWSABLE" />
204
205                 <data android:scheme="http" />
206                 <data android:scheme="https" />
207                 <data android:host="play.google.com" /> <!-- they don't do www. -->
208                 <data android:path="/store/search" />
209             </intent-filter>
210
211             <!-- Handle NFC tags detected from outside our application -->
212             <intent-filter>
213                 <action android:name="android.nfc.action.NDEF_DISCOVERED" />
214
215                 <category android:name="android.intent.category.DEFAULT" />
216
217                 <!--
218                 URIs that come in via NFC have scheme/host normalized to all lower case
219                 https://developer.android.com/reference/android/nfc/NfcAdapter.html#ACTION_NDEF_DISCOVERED
220                 -->
221                 <data android:scheme="fdroidrepo" />
222                 <data android:scheme="fdroidrepos" />
223             </intent-filter>
224
225             <!-- Repo URLs -->
226
227             <!--
228             This intent serves two purposes: Swapping apps between devices and adding a
229             repo from a website (e.g. https://guardianproject.info/fdroid/repo).
230             We intercept both of these situations in the FDroid activity, and then redirect
231             to the appropriate handler (swap handling, manage repos respectively) from there.
232
233             The reason for this is that the only differentiating factor is the presence
234             of a "swap=1" in the query string, and intent-filter is unable to deal with
235             query parameters. An alternative would be to do something like fdroidswap:// as
236             a scheme, but then we. Need to copy/paste all of this intent-filter stuff and
237             keep it up to date when it changes or a bug is found.
238             -->
239             <intent-filter>
240                 <action android:name="android.intent.action.VIEW" />
241
242                 <category android:name="android.intent.category.BROWSABLE" />
243                 <category android:name="android.intent.category.DEFAULT" />
244
245                 <!--
246                 Android's scheme matcher is case-sensitive, so include
247                 ALL CAPS versions to support ALL CAPS URLs in QR Codes.
248                 QR Codes have a special ALL CAPS mode that uses a reduced
249                 character set, making for more compact QR Codes.
250                 -->
251                 <data android:scheme="http" />
252                 <data android:scheme="HTTP" />
253                 <data android:scheme="https" />
254                 <data android:scheme="HTTPS" />
255                 <data android:scheme="fdroidrepo" />
256                 <data android:scheme="FDROIDREPO" />
257                 <data android:scheme="fdroidrepos" />
258                 <data android:scheme="FDROIDREPOS" />
259
260                 <data android:host="*" />
261
262                 <!--
263                 The pattern matcher here is poorly implemented, in particular the * is
264                 non-greedy, so you have to do stupid tricks to match patterns that have
265                 repeat characters in them. http://stackoverflow.com/a/8599921/306864
266                 -->
267                 <data android:path="/fdroid/repo" />
268                 <data android:pathPattern="/fdroid/repo/*" />
269                 <data android:pathPattern="/.*/fdroid/repo" />
270                 <data android:pathPattern="/.*/fdroid/repo/*" />
271                 <data android:pathPattern="/.*/.*/fdroid/repo" />
272                 <data android:pathPattern="/.*/.*/fdroid/repo/*" />
273                 <data android:pathPattern="/.*/.*/.*/fdroid/repo" />
274                 <data android:pathPattern="/.*/.*/.*/fdroid/repo/*" />
275                 <data android:path="/fdroid/archive" />
276                 <data android:pathPattern="/fdroid/archive/*" />
277                 <data android:pathPattern="/.*/fdroid/archive" />
278                 <data android:pathPattern="/.*/fdroid/archive/*" />
279                 <data android:pathPattern="/.*/.*/fdroid/archive" />
280                 <data android:pathPattern="/.*/.*/fdroid/archive/*" />
281                 <data android:pathPattern="/.*/.*/.*/fdroid/archive" />
282                 <data android:pathPattern="/.*/.*/.*/fdroid/archive/*" />
283                 <!--
284                 Some QR Code scanners don't respect custom schemes like fdroidrepo://,
285                 so this is a workaround, since the local repo URL is all uppercase in
286                 the QR Code for sending the local repo to another device.
287                 -->
288                 <data android:path="/FDROID/REPO" />
289                 <data android:pathPattern="/.*/FDROID/REPO" />
290                 <data android:pathPattern="/.*/.*/FDROID/REPO" />
291                 <data android:pathPattern="/.*/.*/.*/FDROID/REPO" />
292             </intent-filter>
293
294             <meta-data
295                 android:name="android.app.default_searchable"
296                 android:value=".SearchResults" />
297         </activity>
298         <activity
299             android:name=".views.swap.ConnectSwapActivity"
300             android:theme="@style/SwapTheme.Wizard.ReceiveSwap"
301             android:label=""
302             android:noHistory="true"
303             android:parentActivityName=".FDroid"
304             android:screenOrientation="portrait"
305             android:configChanges="orientation|keyboardHidden">
306             <meta-data
307                 android:name="android.support.PARENT_ACTIVITY"
308                 android:value=".FDroid" />
309         </activity>
310         <activity
311             android:name=".installer.InstallConfirmActivity"
312             android:label="@string/menu_install"
313             android:parentActivityName=".FDroid">
314             <meta-data
315                 android:name="android.support.PARENT_ACTIVITY"
316                 android:value=".FDroid" />
317         </activity>
318         <activity
319             android:name=".views.ManageReposActivity"
320             android:label="@string/app_name"
321             android:launchMode="singleTask"
322             android:parentActivityName=".FDroid" >
323             <meta-data
324                 android:name="android.support.PARENT_ACTIVITY"
325                 android:value=".FDroid" />
326             <intent-filter>
327                 <action android:name="android.intent.action.VIEW" />
328
329                 <category android:name="android.intent.category.DEFAULT" />
330
331                 <data android:mimeType="application/vnd.org.fdroid.fdroid.repo" />
332             </intent-filter>
333         </activity>
334         <activity
335             android:name=".NfcNotEnabledActivity"
336             android:noHistory="true" />
337         <!--<activity android:name=".views.QrWizardDownloadActivity" />
338         <activity android:name=".views.QrWizardWifiNetworkActivity" />
339         <activity
340             android:name=".views.LocalRepoActivity"
341             android:configChanges="orientation|keyboardHidden|screenSize"
342             android:label="@string/local_repo"
343             android:launchMode="singleTop"
344             android:parentActivityName=".FDroid"
345             android:screenOrientation="portrait" >
346             <meta-data
347                 android:name="android.support.PARENT_ACTIVITY"
348                 android:value=".FDroid" />
349         </activity>
350         <activity
351             android:name=".views.SelectLocalAppsActivity"
352             android:label="@string/setup_repo"
353             android:parentActivityName=".views.LocalRepoActivity" >
354             <meta-data
355                 android:name="android.support.PARENT_ACTIVITY"
356                 android:value=".views.LocalRepoActivity" />
357         </activity>-->
358         <activity
359             android:name=".views.RepoDetailsActivity"
360             android:label="@string/menu_manage"
361             android:parentActivityName=".views.ManageReposActivity"
362             android:windowSoftInputMode="stateHidden">
363             <meta-data
364                 android:name="android.support.PARENT_ACTIVITY"
365                 android:value=".views.ManageReposActivity" />
366         </activity>
367
368         <activity
369             android:name=".AppDetails"
370             android:label="@string/app_details"
371             android:exported="true"
372             android:parentActivityName=".FDroid" >
373             <meta-data
374                 android:name="android.support.PARENT_ACTIVITY"
375                 android:value=".FDroid" />
376
377         </activity>
378         <activity
379             android:name=".views.swap.SwapAppListActivity$SwapAppDetails"
380             android:label="@string/app_details"
381             android:parentActivityName=".views.swap.SwapAppListActivity" >
382             <meta-data
383                 android:name="android.support.PARENT_ACTIVITY"
384                 android:value=".views.swap.SwapAppListActivity" />
385         </activity>
386         <activity
387             android:label="@string/menu_preferences"
388             android:name=".PreferencesActivity"
389             android:parentActivityName=".FDroid" >
390             <meta-data
391                 android:name="android.support.PARENT_ACTIVITY"
392                 android:value=".FDroid" />
393         </activity>
394         <activity
395             android:label="@string/menu_swap"
396             android:name=".views.swap.SwapActivity"
397             android:parentActivityName=".FDroid"
398             android:theme="@style/SwapTheme.Wizard"
399             android:screenOrientation="portrait"
400             android:configChanges="orientation|keyboardHidden">
401             <meta-data
402                 android:name="android.support.PARENT_ACTIVITY"
403                 android:value=".FDroid" />
404         </activity>
405         <activity
406             android:label="@string/swap"
407             android:name=".views.swap.SwapAppListActivity"
408             android:parentActivityName=".FDroid"
409             android:theme="@style/SwapTheme.AppList"
410             android:screenOrientation="portrait"
411             android:configChanges="orientation|keyboardHidden">
412             <meta-data
413                 android:name="android.support.PARENT_ACTIVITY"
414                 android:value=".FDroid" />
415         </activity>
416         <!-- Note: Theme.NoDisplay, this activity shows dialogs only -->
417         <activity
418             android:name=".installer.InstallIntoSystemDialogActivity"
419             android:theme="@android:style/Theme.NoDisplay" />
420         <receiver
421             android:name=".installer.InstallIntoSystemBootReceiver" >
422             <intent-filter>
423                 <action android:name="android.intent.action.BOOT_COMPLETED" />
424             </intent-filter>
425         </receiver>
426         <activity
427             android:name=".SearchResults"
428             android:label="@string/search_results"
429             android:exported="true"
430             android:launchMode="singleTop"
431             android:parentActivityName=".FDroid" >
432             <meta-data
433                 android:name="android.support.PARENT_ACTIVITY"
434                 android:value=".FDroid" />
435
436             <intent-filter>
437                 <action android:name="android.intent.action.SEARCH" />
438             </intent-filter>
439
440             <meta-data
441                 android:name="android.app.searchable"
442                 android:resource="@xml/searchable" />
443         </activity>
444
445         <receiver android:name=".receiver.StartupReceiver" >
446             <intent-filter>
447                 <action android:name="android.intent.action.BOOT_COMPLETED" />
448
449                 <category android:name="android.intent.category.HOME" />
450             </intent-filter>
451         </receiver>
452         <receiver android:name=".receiver.PackageAddedReceiver" >
453             <intent-filter>
454                 <action android:name="android.intent.action.PACKAGE_ADDED" />
455
456                 <data android:scheme="package" />
457             </intent-filter>
458         </receiver>
459         <receiver android:name=".receiver.PackageUpgradedReceiver" >
460             <intent-filter>
461                 <action android:name="android.intent.action.PACKAGE_REPLACED" />
462
463                 <data android:scheme="package" />
464             </intent-filter>
465         </receiver>
466         <receiver android:name=".receiver.PackageRemovedReceiver" >
467             <intent-filter>
468                 <action android:name="android.intent.action.PACKAGE_REMOVED" />
469
470                 <data android:scheme="package" />
471             </intent-filter>
472         </receiver>
473         <receiver android:name=".receiver.WifiStateChangeReceiver" >
474             <intent-filter>
475                 <action android:name="android.net.wifi.STATE_CHANGE" />
476             </intent-filter>
477         </receiver>
478
479         <service android:name=".UpdateService" />
480         <service android:name=".net.WifiStateChangeService" />
481         <service android:name=".localrepo.LocalRepoService" />
482     </application>
483
484 </manifest>