2010-10-19 23:24:04 +01:00
|
|
|
<?xml version="1.0" encoding="utf-8"?>
|
|
|
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
2014-04-26 13:43:51 +02:00
|
|
|
xmlns:tools="http://schemas.android.com/tools"
|
2012-09-17 21:46:32 +01:00
|
|
|
package="org.fdroid.fdroid"
|
|
|
|
android:installLocation="auto"
|
2014-12-09 15:55:13 +01:00
|
|
|
android:versionCode="770"
|
|
|
|
android:versionName="0.77-test" >
|
2012-09-17 21:46:32 +01:00
|
|
|
|
|
|
|
<uses-sdk
|
2014-05-20 12:41:50 +10:00
|
|
|
android:minSdkVersion="7"
|
2014-11-05 21:39:22 +01:00
|
|
|
android:targetSdkVersion="21" />
|
2012-09-17 21:46:32 +01:00
|
|
|
|
|
|
|
<supports-screens
|
|
|
|
android:anyDensity="true"
|
|
|
|
android:largeScreens="true"
|
|
|
|
android:normalScreens="true"
|
|
|
|
android:resizeable="true"
|
|
|
|
android:smallScreens="true"
|
|
|
|
android:xlargeScreens="true" />
|
|
|
|
|
2014-02-14 20:46:12 -05:00
|
|
|
<uses-feature
|
|
|
|
android:name="android.hardware.wifi"
|
|
|
|
android:required="false" />
|
2012-09-17 21:46:32 +01:00
|
|
|
<uses-feature
|
|
|
|
android:name="android.hardware.touchscreen"
|
|
|
|
android:required="false" />
|
2014-01-31 21:49:13 -05:00
|
|
|
<uses-feature
|
|
|
|
android:name="android.hardware.nfc"
|
|
|
|
android:required="false" />
|
2014-02-14 22:40:48 -05:00
|
|
|
<uses-feature
|
|
|
|
android:name="android.hardware.bluetooth"
|
|
|
|
android:required="false" />
|
2012-09-17 21:46:32 +01:00
|
|
|
|
|
|
|
<uses-permission android:name="android.permission.INTERNET" />
|
2013-10-24 14:21:35 +02:00
|
|
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
2014-01-24 11:08:15 -05:00
|
|
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
2014-05-19 21:57:39 -04:00
|
|
|
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
|
2014-05-02 17:35:12 -04:00
|
|
|
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
2014-02-14 22:40:48 -05:00
|
|
|
<uses-permission android:name="android.permission.BLUETOOTH" />
|
2012-09-17 21:46:32 +01:00
|
|
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
|
|
|
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
2014-01-31 21:49:13 -05:00
|
|
|
<uses-permission android:name="android.permission.NFC" />
|
2014-12-31 01:00:31 +01:00
|
|
|
|
2014-04-26 02:01:26 +02:00
|
|
|
<!-- These permissions are only granted when F-Droid is installed as a system-app! -->
|
2014-12-31 01:00:31 +01:00
|
|
|
<uses-permission android:name="android.permission.INSTALL_PACKAGES"
|
2014-04-26 13:43:51 +02:00
|
|
|
tools:ignore="ProtectedPermissions"/>
|
2014-12-31 01:00:31 +01:00
|
|
|
<uses-permission android:name="android.permission.DELETE_PACKAGES"
|
2014-04-26 13:43:51 +02:00
|
|
|
tools:ignore="ProtectedPermissions"/>
|
2014-12-31 01:00:31 +01:00
|
|
|
|
2014-04-26 13:43:51 +02:00
|
|
|
<!-- Indicate that F-Droid may request root access (introduced by Koush's Superuser app) -->
|
|
|
|
<uses-permission android:name="android.permission.ACCESS_SUPERUSER"/>
|
2014-12-31 01:00:31 +01:00
|
|
|
|
2012-09-17 21:46:32 +01:00
|
|
|
<application
|
|
|
|
android:name="FDroidApp"
|
|
|
|
android:icon="@drawable/ic_launcher"
|
2013-07-07 12:12:29 +02:00
|
|
|
android:label="@string/app_name"
|
2014-05-19 23:18:10 -04:00
|
|
|
android:description="@string/app_description"
|
2013-09-23 21:22:56 +02:00
|
|
|
android:allowBackup="true"
|
2013-11-03 16:12:22 +01:00
|
|
|
android:theme="@style/AppThemeDark"
|
2014-09-08 08:39:07 +02:00
|
|
|
android:supportsRtl="true"
|
|
|
|
tools:replace="theme, icon, label"
|
|
|
|
>
|
2014-01-23 12:27:38 +11:00
|
|
|
|
Removed DB, implemented AppProvider.
Yay!
As expected, a lot of the stuff in DB class is due to UpdateService
requiring it to process the downloaded indexes and insert data into
the database. Thus, this change is about removing that stuff from
the DB class and migrating to ContentProviders.
This required a bit of a change to the way that UpdateService decides
what to do with the data from indexes, but I hope it will make
understanding and changing UpdateService easier in the long term.
For example, it used to read the app details from database, then
if a repo wasn't updated (due to unchanged index) then it would take
the app details for that repo from the list of apps, and re-update
the database (or something like that).
Now, it has been refactored into the following methods:
* updateOrInsertApps(appsToUpdate);
* updateOrInsertApks(apksToUpdate);
* removeApksFromRepos(disabledRepos);
* removeApksNoLongerInRepo(appsToUpdate, updatedRepos);
* removeAppsWithoutApks();
* and probably some others...
Which hopefully are self-explanitory.
The recent change to implement single repo updates was re-implemented
with in light of the methods above. The interface to UpdateService for
scheduling a single repo update is the same as it was before, but
the implementation is completely different. Still works though.
Using batch content provider operations for repo updates,
but they suffer from the problem of not all being under the same
transaction, so if an insert/update stuffs up half way through, we
are left with only half of the update being complete. In the future,
if there is some way to implement notifications from the content provider's
applyBatch method, then we can do it all in the one transaction, and
still have notifications. Currently we break it into several calls
to applyBatch (and hence several transactions) to inform the user
of the progress.
Also adding the beginnings of some tests for AppProvider. In the future, I'll
work on adding better coverage, including instrumentation to test UI features.
==========================
Below is a list of many of the minor changes that also happened along the way
==========================
Make "Can update" tab stay up to date using content observer, rather
than manually deciding when to refresh the tab label as before.
The installed app list is now cached in Utils, because it is invoked
quite a few times, especially when rendering the app lists. The cache is
invalidated when PackageReceiver is notified of new apps.
The content providers don't notify changes if we are in batch mode.
I've left the notification at the end of the batch updates as the
responsibility of the UpdateService. However, it would be nice if this
was somehow handled by the content, as they are really the ones who
should worry about it.
Made curVersion, curVercode and curApk work with providers.
This was done by removing curApk (otherwise we'd need to query the db each
time we fetched one app to get a reference to that apk (resulting in hundreds
of queries). Instead, UpdateService now calculates curVercode and curVersion
and saves them to the database. We then use these where possible. If we really
need curApk (because we want info other than its version and code) we still have
the option of ApkProvider.Helper.find(app.id, app.curVercode). I considered
putting this inside the app value object, e.g. in getCurApk() but thought
better of it as it will likely result in people invoking it all the time,
without realising it causes a DB query.
incompatibleReasons required a minor UI tweak, removing the "min sdk"
ui element from the Apk list. It is replaced by the "Requires: %s" view
(which only appears when the app is incompatible). In the process, and in
response to some feedback from mvdan, I left the min sdk in there, but
only made it show when in "expert mode", just like the architecture.
In order to make the "installed apps" query work under test conditions,
needed to change the way the InstalledApkCache be replaceable with a
mock object.
Pause UIL loading on fast scroll of list, as the list was very choppy for
some reason.
Re-added "Last repo scan" info to the Manage Repo list view.
Fixed up some misc TODO's, removed some unused/empty functions.
2014-02-02 19:38:36 +11:00
|
|
|
<provider
|
|
|
|
android:authorities="org.fdroid.fdroid.data.AppProvider"
|
|
|
|
android:name="org.fdroid.fdroid.data.AppProvider"
|
|
|
|
android:exported="false"/>
|
|
|
|
|
2014-01-23 12:27:38 +11:00
|
|
|
<provider
|
2014-01-31 03:15:48 +11:00
|
|
|
android:authorities="org.fdroid.fdroid.data.RepoProvider"
|
2014-01-23 12:27:38 +11:00
|
|
|
android:name="org.fdroid.fdroid.data.RepoProvider"
|
|
|
|
android:exported="false"/>
|
|
|
|
|
2014-01-31 03:15:48 +11:00
|
|
|
<provider
|
|
|
|
android:authorities="org.fdroid.fdroid.data.ApkProvider"
|
|
|
|
android:name="org.fdroid.fdroid.data.ApkProvider"
|
|
|
|
android:exported="false"/>
|
|
|
|
|
Adding our own cache of currently installed apks in the database.
Previously the data was not stored anywhere, and each time we wanted
to know about all installed apps, we built a ridiculously long SQL
query. The query had essentially one "OR" clause for each installed
app. To make matters worse, it also required one parameter for each
of these, so we could bind the installed app name to a "?" in the query.
SQL has a limit of (usually) 999 parameters which can be provided to
a query, which meant it would fall over if the user had more than
1000 apps installed.
This change introduces a new table called "fdroid_installedApps".
It is initialized on first run, by iterating over the installed apps
as given by the PackageManager. It is subsequenty kept up to date
by a set of BroadcastReceivers, which listen for apps being
uninstalled/installed/upgraded.
It also includes tests to verify that queries of installed apps,
when there are more than 1000 apps installed, don't break.
Finally, tests are also now able to to insert into providers other
than the one under test. This is due to the fact that the providers
often join onto tables managed by other providers.
2014-04-14 00:08:31 +10:00
|
|
|
<provider
|
|
|
|
android:authorities="org.fdroid.fdroid.data.InstalledAppProvider"
|
|
|
|
android:name="org.fdroid.fdroid.data.InstalledAppProvider"
|
|
|
|
android:exported="false"/>
|
|
|
|
|
2012-09-17 21:46:32 +01:00
|
|
|
<activity
|
2013-10-03 19:00:46 +02:00
|
|
|
android:name=".FDroid"
|
2014-02-15 11:49:29 +01:00
|
|
|
android:launchMode="singleTop"
|
2012-09-18 18:04:31 +01:00
|
|
|
android:configChanges="keyboardHidden|orientation|screenSize" >
|
2013-09-29 20:27:49 +02:00
|
|
|
|
2012-09-17 21:46:32 +01:00
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.intent.action.MAIN" />
|
|
|
|
|
|
|
|
<category android:name="android.intent.category.LAUNCHER" />
|
|
|
|
</intent-filter>
|
|
|
|
|
2013-07-28 09:23:53 +02:00
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.intent.action.VIEW" />
|
|
|
|
|
|
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
|
|
|
2013-11-19 20:02:11 -05:00
|
|
|
<data android:scheme="http" />
|
|
|
|
<data android:scheme="https" />
|
|
|
|
<data android:host="f-droid.org" />
|
|
|
|
<data android:host="www.f-droid.org" />
|
|
|
|
<data android:pathPrefix="/repository/browse" />
|
2013-07-28 09:23:53 +02:00
|
|
|
</intent-filter>
|
|
|
|
|
2014-08-21 07:10:36 +09:30
|
|
|
<!--
|
|
|
|
This intent serves two purposes: Swapping apps between devices and adding a
|
|
|
|
repo from a website (e.g. https://guardianproject.info/fdroid/repo).
|
|
|
|
We intercept both of these situations in the FDroid activity, and then redirect
|
|
|
|
to the appropriate handler (swap handling, manage repos respectively) from there.
|
|
|
|
|
|
|
|
The reason for this is that the only differentiating factor is the presence
|
|
|
|
of a "swap=1" in the query string, and intent-filter is unable to deal with
|
|
|
|
query parameters. An alternative would be to do something like fdroidswap:// as
|
|
|
|
a scheme, but then we. Need to copy/paste all of this intent-filter stuff and
|
|
|
|
keep it up to date when it changes or a bug is found.
|
|
|
|
-->
|
2013-11-19 14:29:07 -05:00
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.intent.action.VIEW" />
|
|
|
|
|
|
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
|
|
|
2014-08-21 07:10:36 +09:30
|
|
|
<!--
|
|
|
|
Android's scheme matcher is case-sensitive, so include
|
|
|
|
ALL CAPS versions to support ALL CAPS URLs in QR Codes.
|
|
|
|
QR Codes have a special ALL CAPS mode that uses a reduced
|
|
|
|
character set, making for more compact QR Codes.
|
|
|
|
-->
|
2013-11-19 14:29:07 -05:00
|
|
|
<data android:scheme="http" />
|
2014-08-21 07:10:36 +09:30
|
|
|
<data android:scheme="HTTP" />
|
2013-11-19 14:29:07 -05:00
|
|
|
<data android:scheme="https" />
|
2014-08-21 07:10:36 +09:30
|
|
|
<data android:scheme="HTTPS" />
|
|
|
|
<data android:scheme="fdroidrepo" />
|
|
|
|
<data android:scheme="FDROIDREPO" />
|
|
|
|
<data android:scheme="fdroidrepos" />
|
|
|
|
<data android:scheme="FDROIDREPOS" />
|
|
|
|
|
2013-11-19 14:29:07 -05:00
|
|
|
<data android:host="*" />
|
2014-08-21 07:10:36 +09:30
|
|
|
|
2013-12-02 15:37:49 -05:00
|
|
|
<!--
|
|
|
|
The pattern matcher here is poorly implemented, in particular the * is
|
|
|
|
non-greedy, so you have to do stupid tricks to match patterns that have
|
|
|
|
repeat characters in them. http://stackoverflow.com/a/8599921/306864
|
|
|
|
-->
|
|
|
|
<data android:path="/fdroid/repo" />
|
|
|
|
<data android:pathPattern="/fdroid/repo/*" />
|
|
|
|
<data android:pathPattern="/.*/fdroid/repo" />
|
|
|
|
<data android:pathPattern="/.*/fdroid/repo/*" />
|
|
|
|
<data android:pathPattern="/.*/.*/fdroid/repo" />
|
|
|
|
<data android:pathPattern="/.*/.*/fdroid/repo/*" />
|
|
|
|
<data android:pathPattern="/.*/.*/.*/fdroid/repo" />
|
|
|
|
<data android:pathPattern="/.*/.*/.*/fdroid/repo/*" />
|
|
|
|
<data android:path="/fdroid/archive" />
|
|
|
|
<data android:pathPattern="/fdroid/archive/*" />
|
|
|
|
<data android:pathPattern="/.*/fdroid/archive" />
|
|
|
|
<data android:pathPattern="/.*/fdroid/archive/*" />
|
|
|
|
<data android:pathPattern="/.*/.*/fdroid/archive" />
|
|
|
|
<data android:pathPattern="/.*/.*/fdroid/archive/*" />
|
|
|
|
<data android:pathPattern="/.*/.*/.*/fdroid/archive" />
|
|
|
|
<data android:pathPattern="/.*/.*/.*/fdroid/archive/*" />
|
2014-04-07 21:07:01 -04:00
|
|
|
<!--
|
|
|
|
Some QR Code scanners don't respect custom schemes like fdroidrepo://,
|
|
|
|
so this is a workaround, since the local repo URL is all uppercase in
|
|
|
|
the QR Code for sending the local repo to another device.
|
|
|
|
-->
|
|
|
|
<data android:path="/FDROID/REPO" />
|
2014-07-11 17:28:41 -04:00
|
|
|
<data android:path="/.*/FDROID/REPO" />
|
|
|
|
<data android:path="/.*/.*/FDROID/REPO" />
|
2013-12-02 21:55:55 -05:00
|
|
|
</intent-filter>
|
Implemented client connection for swap.
Listen for a new intent, show a screen to the user mentioning
they are about to start a swap. Make FDroid receive repo intents,
then dispatch to relevant Activity.
Previously manage repo always got the intents. Now FDroid does, and
chooses whether to give to ManageRepos or Client connect.
Not sure if it is required to do it this way or not, but it seems to
work.
I had a bit of an issue getting the "Welcome to F-Droid" string to
fit on one line, because it was breaking on the hyphen. That is still
not resolved in this commit.
Still need to:
* Show error messages instead of the "connect" description
* Jar signing seems not to work when connecting to other repo.
In order to handle returning to F-Droid after connecting (or saying no)
I tagged the intent with a "handled" extra value. That way, I can ignore
trying to connect to a repo if we've already handled that event.
Finally, I also fixed an issue regarding downloading of signed
index.jar files with an uppercase fingerprint.
The fingerprint from the jar differed from that in the swap url,
in that one was upper case and the other was lower case.
This uses an .equalsIgnoreCase check instead. It also adds an
extra guard in case the repo doesn't have a fingerprint. Although
it may not even use the signed repo updater if both the pubkey
and fingerprint are null, it is nice to have the extra assurance.
Fixes issue #19.
I also left some more TODO's around. I should put them in issues,
but I'm in a bit of a hurry.
2014-07-05 07:49:37 +09:30
|
|
|
|
|
|
|
<meta-data
|
|
|
|
android:name="android.app.default_searchable"
|
|
|
|
android:value=".SearchResults" />
|
|
|
|
</activity>
|
|
|
|
<activity
|
|
|
|
android:name=".views.swap.ConnectSwapActivity"
|
|
|
|
android:theme="@style/SwapTheme.Wizard.ReceiveSwap"
|
|
|
|
android:label=""
|
|
|
|
android:noHistory="true"
|
|
|
|
android:parentActivityName=".FDroid">
|
|
|
|
<meta-data
|
|
|
|
android:name="android.support.PARENT_ACTIVITY"
|
|
|
|
android:value=".FDroid" />
|
|
|
|
</activity>
|
|
|
|
<activity
|
2014-08-19 15:43:16 +09:30
|
|
|
android:name=".views.ManageReposActivity"
|
|
|
|
android:label="@string/app_name"
|
Implemented client connection for swap.
Listen for a new intent, show a screen to the user mentioning
they are about to start a swap. Make FDroid receive repo intents,
then dispatch to relevant Activity.
Previously manage repo always got the intents. Now FDroid does, and
chooses whether to give to ManageRepos or Client connect.
Not sure if it is required to do it this way or not, but it seems to
work.
I had a bit of an issue getting the "Welcome to F-Droid" string to
fit on one line, because it was breaking on the hyphen. That is still
not resolved in this commit.
Still need to:
* Show error messages instead of the "connect" description
* Jar signing seems not to work when connecting to other repo.
In order to handle returning to F-Droid after connecting (or saying no)
I tagged the intent with a "handled" extra value. That way, I can ignore
trying to connect to a repo if we've already handled that event.
Finally, I also fixed an issue regarding downloading of signed
index.jar files with an uppercase fingerprint.
The fingerprint from the jar differed from that in the swap url,
in that one was upper case and the other was lower case.
This uses an .equalsIgnoreCase check instead. It also adds an
extra guard in case the repo doesn't have a fingerprint. Although
it may not even use the signed repo updater if both the pubkey
and fingerprint are null, it is nice to have the extra assurance.
Fixes issue #19.
I also left some more TODO's around. I should put them in issues,
but I'm in a bit of a hurry.
2014-07-05 07:49:37 +09:30
|
|
|
android:launchMode="singleTask"
|
|
|
|
android:parentActivityName=".FDroid" >
|
|
|
|
<meta-data
|
|
|
|
android:name="android.support.PARENT_ACTIVITY"
|
|
|
|
android:value=".FDroid" />
|
2014-01-31 21:49:13 -05:00
|
|
|
<!-- Handle NFC tags detected from outside our application -->
|
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
|
|
|
|
|
|
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
|
|
|
|
|
|
<!--
|
|
|
|
URIs that come in via NFC have scheme/host normalized to all lower case
|
|
|
|
https://developer.android.com/reference/android/nfc/NfcAdapter.html#ACTION_NDEF_DISCOVERED
|
|
|
|
-->
|
|
|
|
<data android:scheme="fdroidrepo" />
|
|
|
|
<data android:scheme="fdroidrepos" />
|
|
|
|
</intent-filter>
|
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.intent.action.VIEW" />
|
2013-09-26 01:04:12 +02:00
|
|
|
|
2014-01-31 21:49:13 -05:00
|
|
|
<category android:name="android.intent.category.DEFAULT" />
|
2013-09-26 01:04:12 +02:00
|
|
|
|
2014-01-31 21:49:13 -05:00
|
|
|
<data android:mimeType="application/vnd.org.fdroid.fdroid.repo" />
|
|
|
|
</intent-filter>
|
|
|
|
</activity>
|
|
|
|
<activity
|
|
|
|
android:name=".NfcNotEnabledActivity"
|
|
|
|
android:noHistory="true" />
|
2014-08-19 15:43:16 +09:30
|
|
|
<!--<activity android:name=".views.QrWizardDownloadActivity" />
|
2014-05-02 20:51:23 -04:00
|
|
|
<activity android:name=".views.QrWizardWifiNetworkActivity" />
|
2014-05-02 20:26:31 -04:00
|
|
|
<activity
|
|
|
|
android:name=".views.LocalRepoActivity"
|
|
|
|
android:configChanges="orientation|keyboardHidden|screenSize"
|
|
|
|
android:label="@string/local_repo"
|
|
|
|
android:launchMode="singleTop"
|
|
|
|
android:parentActivityName=".FDroid"
|
|
|
|
android:screenOrientation="portrait" >
|
Migrating activities to appcompat-v7
The only remaining activity is the AppDetails acvitity, which will require
a little more than just making it extend ActionBarActivity. Currently,
it extends ListActivity. To support appcompat-v7, it really should have
two fragments - the details one and the list one. Then, when the orientation
is changed, it should load a different layout with the fragments side by side.
Although Google is encouraging people to make old devices run apps
with the action bar (via appcompat-v7), they haven't provided a way
for people to create preference/setting screens with an action bar.
There are plenty of issues in the Android issue tracker relating
to this, but it doesn't yet seem to be on the radar of the Android
devs.
Until there is a native implementation of PreferenceFragment in
the appcompat-v7 support library, this submodule provides is a 3rd
party solution. It is actually a fork of the first repo in github,
though that was a bit of an upload and dump, without accepting MR's.
This fork includes gradle support.
2014-06-03 08:19:26 +09:30
|
|
|
<meta-data
|
|
|
|
android:name="android.support.PARENT_ACTIVITY"
|
|
|
|
android:value=".FDroid" />
|
2014-05-02 20:26:31 -04:00
|
|
|
</activity>
|
2013-04-13 10:06:55 +10:00
|
|
|
<activity
|
2014-05-05 19:47:21 -04:00
|
|
|
android:name=".views.SelectLocalAppsActivity"
|
|
|
|
android:label="@string/setup_repo"
|
|
|
|
android:parentActivityName=".views.LocalRepoActivity" >
|
|
|
|
<meta-data
|
|
|
|
android:name="android.support.PARENT_ACTIVITY"
|
|
|
|
android:value=".views.LocalRepoActivity" />
|
2014-08-19 15:43:16 +09:30
|
|
|
</activity>-->
|
2013-04-13 10:06:55 +10:00
|
|
|
<activity
|
|
|
|
android:name=".views.RepoDetailsActivity"
|
2014-01-21 19:21:34 -05:00
|
|
|
android:label="@string/menu_manage"
|
2014-07-10 18:37:35 -04:00
|
|
|
android:parentActivityName=".views.ManageReposActivity"
|
Migrating activities to appcompat-v7
The only remaining activity is the AppDetails acvitity, which will require
a little more than just making it extend ActionBarActivity. Currently,
it extends ListActivity. To support appcompat-v7, it really should have
two fragments - the details one and the list one. Then, when the orientation
is changed, it should load a different layout with the fragments side by side.
Although Google is encouraging people to make old devices run apps
with the action bar (via appcompat-v7), they haven't provided a way
for people to create preference/setting screens with an action bar.
There are plenty of issues in the Android issue tracker relating
to this, but it doesn't yet seem to be on the radar of the Android
devs.
Until there is a native implementation of PreferenceFragment in
the appcompat-v7 support library, this submodule provides is a 3rd
party solution. It is actually a fork of the first repo in github,
though that was a bit of an upload and dump, without accepting MR's.
This fork includes gradle support.
2014-06-03 08:19:26 +09:30
|
|
|
android:windowSoftInputMode="stateHidden">
|
|
|
|
<meta-data
|
|
|
|
android:name="android.support.PARENT_ACTIVITY"
|
2014-08-19 15:43:16 +09:30
|
|
|
android:value=".views.ManageReposActivity" />
|
Migrating activities to appcompat-v7
The only remaining activity is the AppDetails acvitity, which will require
a little more than just making it extend ActionBarActivity. Currently,
it extends ListActivity. To support appcompat-v7, it really should have
two fragments - the details one and the list one. Then, when the orientation
is changed, it should load a different layout with the fragments side by side.
Although Google is encouraging people to make old devices run apps
with the action bar (via appcompat-v7), they haven't provided a way
for people to create preference/setting screens with an action bar.
There are plenty of issues in the Android issue tracker relating
to this, but it doesn't yet seem to be on the radar of the Android
devs.
Until there is a native implementation of PreferenceFragment in
the appcompat-v7 support library, this submodule provides is a 3rd
party solution. It is actually a fork of the first repo in github,
though that was a bit of an upload and dump, without accepting MR's.
This fork includes gradle support.
2014-06-03 08:19:26 +09:30
|
|
|
</activity>
|
2014-01-31 21:49:13 -05:00
|
|
|
|
2012-09-17 21:46:32 +01:00
|
|
|
<activity
|
2013-10-03 19:00:46 +02:00
|
|
|
android:name=".AppDetails"
|
2013-07-28 13:50:42 +02:00
|
|
|
android:label="@string/app_details"
|
2013-07-07 11:10:03 +02:00
|
|
|
android:exported="true"
|
2013-10-03 19:00:46 +02:00
|
|
|
android:parentActivityName=".FDroid" >
|
|
|
|
<meta-data
|
|
|
|
android:name="android.support.PARENT_ACTIVITY"
|
|
|
|
android:value=".FDroid" />
|
2013-07-15 15:37:24 +02:00
|
|
|
|
2012-09-17 21:46:32 +01:00
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.intent.action.VIEW" />
|
|
|
|
|
2013-07-18 11:36:05 +02:00
|
|
|
<category android:name="android.intent.category.DEFAULT" />
|
2013-07-18 11:56:39 +02:00
|
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
2013-07-18 11:36:05 +02:00
|
|
|
|
2012-09-17 21:46:32 +01:00
|
|
|
<data android:scheme="fdroid.app" />
|
|
|
|
</intent-filter>
|
2013-09-29 20:27:49 +02:00
|
|
|
|
2013-07-15 15:37:24 +02:00
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.intent.action.VIEW" />
|
|
|
|
|
2013-07-18 11:36:05 +02:00
|
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
|
|
|
2013-07-15 15:37:24 +02:00
|
|
|
<data android:scheme="market" android:host="details" />
|
|
|
|
</intent-filter>
|
|
|
|
|
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.intent.action.VIEW" />
|
|
|
|
|
2013-07-18 11:36:05 +02:00
|
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
|
|
|
2013-11-19 20:02:11 -05:00
|
|
|
<data android:scheme="http" />
|
|
|
|
<data android:scheme="https" />
|
|
|
|
<data android:host="f-droid.org" />
|
|
|
|
<data android:host="www.f-droid.org" />
|
|
|
|
<data android:pathPrefix="/app/" />
|
2013-07-15 15:37:24 +02:00
|
|
|
</intent-filter>
|
2013-07-07 11:10:03 +02:00
|
|
|
</activity>
|
|
|
|
<activity
|
2013-07-28 13:50:42 +02:00
|
|
|
android:label="@string/menu_preferences"
|
2013-07-26 09:10:32 +10:00
|
|
|
android:name=".PreferencesActivity"
|
2013-10-03 19:00:46 +02:00
|
|
|
android:parentActivityName=".FDroid" >
|
2013-07-07 11:10:03 +02:00
|
|
|
<meta-data
|
|
|
|
android:name="android.support.PARENT_ACTIVITY"
|
2013-10-03 19:00:46 +02:00
|
|
|
android:value=".FDroid" />
|
2012-09-17 21:46:32 +01:00
|
|
|
</activity>
|
2014-08-19 15:37:44 +09:30
|
|
|
<activity
|
|
|
|
android:label="@string/menu_swap"
|
|
|
|
android:name=".views.swap.SwapActivity"
|
|
|
|
android:parentActivityName=".FDroid"
|
|
|
|
android:theme="@style/SwapTheme.Wizard">
|
|
|
|
<meta-data
|
|
|
|
android:name="android.support.PARENT_ACTIVITY"
|
|
|
|
android:value=".FDroid" />
|
|
|
|
</activity>
|
2014-08-14 20:31:18 +09:30
|
|
|
<activity
|
|
|
|
android:label="@string/swap"
|
|
|
|
android:name=".views.swap.SwapAppListActivity"
|
|
|
|
android:parentActivityName=".FDroid"
|
|
|
|
android:theme="@style/SwapTheme.AppList">
|
|
|
|
<meta-data
|
|
|
|
android:name="android.support.PARENT_ACTIVITY"
|
|
|
|
android:value=".FDroid" />
|
|
|
|
</activity>
|
2012-09-17 21:46:32 +01:00
|
|
|
<activity
|
2013-10-03 19:00:46 +02:00
|
|
|
android:name=".SearchResults"
|
2013-07-28 13:50:42 +02:00
|
|
|
android:label="@string/search_results"
|
2012-09-17 21:46:32 +01:00
|
|
|
android:exported="true"
|
2013-07-07 11:10:03 +02:00
|
|
|
android:launchMode="singleTop"
|
2013-10-03 19:00:46 +02:00
|
|
|
android:parentActivityName=".FDroid" >
|
|
|
|
<meta-data
|
|
|
|
android:name="android.support.PARENT_ACTIVITY"
|
|
|
|
android:value=".FDroid" />
|
|
|
|
|
2012-09-17 21:46:32 +01:00
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.intent.action.SEARCH" />
|
|
|
|
</intent-filter>
|
|
|
|
|
2013-09-26 08:56:09 +02:00
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.intent.action.VIEW" />
|
|
|
|
|
|
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
|
|
|
2013-09-29 20:27:49 +02:00
|
|
|
<data android:scheme="fdroid.search" />
|
2013-09-26 08:56:09 +02:00
|
|
|
</intent-filter>
|
|
|
|
|
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.intent.action.VIEW" />
|
|
|
|
|
|
|
|
<category android:name="android.intent.category.DEFAULT" />
|
|
|
|
<category android:name="android.intent.category.BROWSABLE" />
|
|
|
|
|
2013-09-29 20:27:49 +02:00
|
|
|
<data android:scheme="market" android:host="search" />
|
2013-09-26 08:56:09 +02:00
|
|
|
</intent-filter>
|
|
|
|
|
2012-09-17 21:46:32 +01:00
|
|
|
<meta-data
|
|
|
|
android:name="android.app.searchable"
|
|
|
|
android:resource="@xml/searchable" />
|
|
|
|
</activity>
|
2014-12-31 01:00:31 +01:00
|
|
|
|
2013-12-11 11:46:08 -05:00
|
|
|
<!--Used for SSL TOFU, supported by extern/MemorizingTrustManager lib -->
|
2014-05-18 12:54:21 +02:00
|
|
|
<activity
|
|
|
|
android:name="de.duenndns.ssl.MemorizingActivity"
|
|
|
|
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
|
2012-09-17 21:46:32 +01:00
|
|
|
|
2013-10-03 19:00:46 +02:00
|
|
|
<receiver android:name=".StartupReceiver" >
|
2012-09-17 21:46:32 +01:00
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.intent.action.BOOT_COMPLETED" />
|
|
|
|
|
|
|
|
<category android:name="android.intent.category.HOME" />
|
|
|
|
</intent-filter>
|
|
|
|
</receiver>
|
Adding our own cache of currently installed apks in the database.
Previously the data was not stored anywhere, and each time we wanted
to know about all installed apps, we built a ridiculously long SQL
query. The query had essentially one "OR" clause for each installed
app. To make matters worse, it also required one parameter for each
of these, so we could bind the installed app name to a "?" in the query.
SQL has a limit of (usually) 999 parameters which can be provided to
a query, which meant it would fall over if the user had more than
1000 apps installed.
This change introduces a new table called "fdroid_installedApps".
It is initialized on first run, by iterating over the installed apps
as given by the PackageManager. It is subsequenty kept up to date
by a set of BroadcastReceivers, which listen for apps being
uninstalled/installed/upgraded.
It also includes tests to verify that queries of installed apps,
when there are more than 1000 apps installed, don't break.
Finally, tests are also now able to to insert into providers other
than the one under test. This is due to the fact that the providers
often join onto tables managed by other providers.
2014-04-14 00:08:31 +10:00
|
|
|
<receiver android:name=".PackageAddedReceiver" >
|
2012-10-05 18:11:36 +01:00
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.intent.action.PACKAGE_ADDED" />
|
Adding our own cache of currently installed apks in the database.
Previously the data was not stored anywhere, and each time we wanted
to know about all installed apps, we built a ridiculously long SQL
query. The query had essentially one "OR" clause for each installed
app. To make matters worse, it also required one parameter for each
of these, so we could bind the installed app name to a "?" in the query.
SQL has a limit of (usually) 999 parameters which can be provided to
a query, which meant it would fall over if the user had more than
1000 apps installed.
This change introduces a new table called "fdroid_installedApps".
It is initialized on first run, by iterating over the installed apps
as given by the PackageManager. It is subsequenty kept up to date
by a set of BroadcastReceivers, which listen for apps being
uninstalled/installed/upgraded.
It also includes tests to verify that queries of installed apps,
when there are more than 1000 apps installed, don't break.
Finally, tests are also now able to to insert into providers other
than the one under test. This is due to the fact that the providers
often join onto tables managed by other providers.
2014-04-14 00:08:31 +10:00
|
|
|
|
|
|
|
<data android:scheme="package" />
|
|
|
|
</intent-filter>
|
|
|
|
</receiver>
|
|
|
|
<receiver android:name=".PackageUpgradedReceiver" >
|
|
|
|
<intent-filter>
|
2014-04-29 18:18:38 +02:00
|
|
|
<action android:name="android.intent.action.PACKAGE_REPLACED" />
|
Adding our own cache of currently installed apks in the database.
Previously the data was not stored anywhere, and each time we wanted
to know about all installed apps, we built a ridiculously long SQL
query. The query had essentially one "OR" clause for each installed
app. To make matters worse, it also required one parameter for each
of these, so we could bind the installed app name to a "?" in the query.
SQL has a limit of (usually) 999 parameters which can be provided to
a query, which meant it would fall over if the user had more than
1000 apps installed.
This change introduces a new table called "fdroid_installedApps".
It is initialized on first run, by iterating over the installed apps
as given by the PackageManager. It is subsequenty kept up to date
by a set of BroadcastReceivers, which listen for apps being
uninstalled/installed/upgraded.
It also includes tests to verify that queries of installed apps,
when there are more than 1000 apps installed, don't break.
Finally, tests are also now able to to insert into providers other
than the one under test. This is due to the fact that the providers
often join onto tables managed by other providers.
2014-04-14 00:08:31 +10:00
|
|
|
|
|
|
|
<data android:scheme="package" />
|
|
|
|
</intent-filter>
|
|
|
|
</receiver>
|
|
|
|
<receiver android:name=".PackageRemovedReceiver" >
|
|
|
|
<intent-filter>
|
2012-10-05 18:11:36 +01:00
|
|
|
<action android:name="android.intent.action.PACKAGE_REMOVED" />
|
|
|
|
|
2012-10-19 08:39:56 +01:00
|
|
|
<data android:scheme="package" />
|
2012-10-05 18:11:36 +01:00
|
|
|
</intent-filter>
|
|
|
|
</receiver>
|
2014-05-02 17:35:12 -04:00
|
|
|
<receiver android:name=".WifiStateChangeReceiver" >
|
|
|
|
<intent-filter>
|
|
|
|
<action android:name="android.net.wifi.STATE_CHANGE" />
|
|
|
|
</intent-filter>
|
|
|
|
</receiver>
|
2012-10-05 18:11:36 +01:00
|
|
|
|
2013-10-03 19:00:46 +02:00
|
|
|
<service android:name=".UpdateService" />
|
2014-05-02 17:35:12 -04:00
|
|
|
<service android:name=".net.WifiStateChangeService" />
|
2014-05-02 20:26:31 -04:00
|
|
|
<service android:name=".localrepo.LocalRepoService" />
|
2012-09-17 21:46:32 +01:00
|
|
|
</application>
|
|
|
|
|
2012-10-19 20:37:36 +01:00
|
|
|
</manifest>
|