144 Commits

Author SHA1 Message Date
Hans-Christoph Steiner
0c039a6b5e make writeIndexJar() call writeIndexXML(): only create signed repos!
There is no longer a reason to expose writeIndexXML() since FDroid should
always generate a signed repo.  So make writeIndexXML() be called as part
of writeIndexJar().
2014-05-25 22:53:19 -04:00
Hans-Christoph Steiner
b7339e9423 support HTTPS:// for local repo in a preference
Allow the local repo to use HTTPS:// instead of HTTP://.  This is currently
default off since handling the self-signed certificate is not currently
graceful.  In the future, the SPKI that AndroidPinning uses should be
included in the repo meta data, then when someone marks a repo as trusted,
that local repo's SPKI should be added to the list of trusted keys in
AndroidPinning.

fixes #2960 https://dev.guardianproject.info/issues/2960
2014-05-25 22:53:18 -04:00
Hans-Christoph Steiner
5f2efbb72a sign local repo based on key generated using spongycastle
This makes it so the local repo is always signed by a locally generated and
stored key.  That key will become the unique ID that represents a given
local repo.  It should seamlessly upgrade any existing unsigned local repo
next time that the user makes any changes to their local repo.

fixes #3380 https://dev.guardianproject.info/issues/3380
2014-05-25 22:53:18 -04:00
Hans-Christoph Steiner
146046a1ff add description of app to manifest for p2p users
The local repo generation code will take the description from the manifest
and include it in the repo meta data.  So FDroid itself should also include
this description.  Indeed every app should... perhaps this should also be
an `fdroid lint` item.
2014-05-20 18:44:47 -04:00
Hans-Christoph Steiner
f2994b0764 replace Android NSD browsing with jmdns
Android's NSD is only included in Android >= 16, and seems to be buggy. So
This replaces the NSD code entirely with jmdns, which works on all Android
versions.

fixes #2900 https://dev.guardianproject.info/issues/2900
fixes #3379 https://dev.guardianproject.info/issues/3379
2014-05-20 18:44:47 -04:00
Hans-Christoph Steiner
b5f7c0a481 preference for the "name" of the local repo
This name is used in the RepoList, the local repo website title, the
Bonjour broadcast, etc.  By default, a name is generated using the make and
model of the phone plus a random number.
2014-05-20 18:44:47 -04:00
Hans-Christoph Steiner
248cefe1f3 fix notification launching LocalRepoActivity
It was not working on my Nexus 7 running stock 4.4.2.  This seems to be the
recommend fix:
https://code.google.com/p/android/issues/detail?id=61850
2014-05-20 18:44:47 -04:00
Hans-Christoph Steiner
d25a395936 broadcast local repo via Bonjour/mDNS to enable auto-discovery
This adds support for registering the local repo with Bonjour/mDNS so that
it is broadcast out to all devices on the local network.  This makes it
easy to discover and add local repos on the same wifi.

refs #2900 https://dev.guardianproject.info/issues/2900
2014-05-20 18:37:45 -04:00
Dominik Schürmann
acd3137cbc Make prefs coherent, rename them, and rename SystemPermissionInstaller to SystemInstaller 2014-05-12 18:59:03 +02:00
Dominik Schürmann
2bd686dfe8 Add preference to opt-out of SystemPermissionInstaller 2014-05-12 12:55:17 +02:00
Dominik Schürmann
6419915d5a Strings for error dialog, cleanup 2014-05-11 02:25:50 +02:00
Dominik Schürmann
919f9c63b8 Merge master into super-fdroid 2014-05-11 00:38:53 +02:00
Hans-Christoph Steiner
7401366ac9 quick improvement of LocalRepoActivity layout
This is meant to try to make the on/off state of the webserver that serves
the local repo more apparent.
2014-05-08 00:58:42 -04:00
Hans-Christoph Steiner
08346b9b18 add Activity to choose which installed apps are in the local repo
This gets the data about which apps are installed from the ContentProvider
that pserwylo recently added for data about "Installed Apps" and presents
a list view for the user to select from by touching each line.  Then if the
user chooses "Update Repo", it will regenerate the local repo based on the
current selection.  It will always include FDroid in the local repo.

fixes #3232 https://dev.guardianproject.info/issues/3232
refs #3204 https://dev.guardianproject.info/issues/3204
2014-05-06 19:51:15 -04:00
Hans-Christoph Steiner
94dc2d019f add wizard for sending FDroid to another device via WiFi/QR
This is a little helper to direct people to get a new device to download
FDroid from another device that already has it.  It first prompts them to
join the same wifi network, and offers a QR Code to associate to the same
wifi.  The next step is a QR Code for getting the URL to the local repo.
The index.html on that local repo includes a download link for FDroid and
a repo link to the local repo.

refs #3204 https://dev.guardianproject.info/issues/3204
2014-05-06 19:51:15 -04:00
Hans-Christoph Steiner
a9c88bb5d7 build a local repo from a list of installed APKs
Wire up the "Setup Repo" button on the Local Repo view to generate an
FDroid repo on the device that is hosted with the local webserver.  This
also generates an index.html for when people navigate to the local repo via
a browser.  This index.html will allow them to both download FDroid and to
setup the repo on the device running the webserver on the local FDroid.

refs #3204 https://dev.guardianproject.info/issues/3204
refs #2668 https://dev.guardianproject.info/issues/2668
2014-05-06 19:51:15 -04:00
Hans-Christoph Steiner
5050605f72 Activity/Service for running a local repo via http://
This is a skeleton for the upcoming local repo (aka swap aka Kerplapp).
Right now, it just provides an Activity for controlling a Service which
manages a local webserver (nanohttpd).  Next, it will be wired up to the
local repo created via a dedicated Activity for managing the list of apps
included in the local repo.

refs #3204 https://dev.guardianproject.info/issues/3204
2014-05-06 19:28:27 -04:00
Hans-Christoph Steiner
cce393de09 "unverified" repo state for repos w/ fingerprints but not yet pubkeys
If a repo was configured with a fingerprint, but it has not yet updated and
gotten the pubkey from the index.jar, then it will be in an "unverified"
state, i.e. the signing key fingerprint is stored, but it has not yet been
used to check against the pubkey in the index.jar
2014-04-28 11:59:36 -04:00
Dominik Schürmann
d7203535e7 Add update all button (no functionality yet) 2014-04-27 22:22:21 +02:00
Dominik Schürmann
fbc47c1428 Show dialog if root access was denied 2014-04-27 20:11:36 +02:00
Dominik Schürmann
c4e7e617b2 Add root access preference 2014-04-27 19:59:28 +02:00
Dominik Schürmann
7ed69c93fc Installation/Delete with root shell, add preference for root access, fixes to Installer classes 2014-04-27 18:56:47 +02:00
Hans-Christoph Steiner
4a55cdf938 option to send via bluetooth any installed app on the AppDetails page
This takes the code used for sending the FDroid.apk and applies it to any
installed app.  So the user can go to the AppDetails for any installed app
and select "Send via Bluetooth" from the menu, and send the app to another
phone.
2014-04-22 11:09:49 -04:00
AlexanderR
04ea93cce8 Category list i18n 2014-04-05 17:08:29 +11:00
Daniel Martí
a1a8c06565 Start using contentDescription on ImageView elements 2014-03-22 11:12:42 +01:00
Rene Treffer
d55fc7cd69 Fix build failure with newer toolchains.
Android somehow wants every string to be externalized on newer
toolchains, let's prepare for that.

This fixes in-tree building of f-droid.
2014-03-16 13:44:25 +01:00
Daniel McCarney
3223e20e33 Add support for Network Service Discovery of FDroid repos.
If the device supports API level 16 (Android 4.1) then add a menu item
on the repository management screen to "Find Local Repos". Activating
this menu item will initiate NSD service discovery with the NsdHelper
class looking for 'fdroidrepo' and 'fdroidrepos' service types on the
local network. When one is found, the service is resolved and the name
& IP are populated into a list of discovered repositories. Clicking an
NSD discovered repo will prompt the user to add the repo.
2014-02-19 15:32:44 -05:00
Daniel Martí
e6ec5ee242 Add support for filtering apk compatibility by maxSdkVersion
For now it's enforced like minSdkVersion. It is possible to try and install
incompatible apks by enabling "Incompatible Versions" and agreeing to the
warning shown when clicking on such a version.
2014-02-19 18:11:32 +01:00
Hans-Christoph Steiner
c0cd0d33bf send the FDroid.apk via bluetooth on devices that support it
This is another easy method to send FDroid to a device that doesn't have it
yet.  Unfortunately, stock Android blocks the receiving of APKs, but many
ROMs and even some Samsung devices do not have this block.

You can find the lengthy backstory on this work here:
https://dev.guardianproject.info/issues/2084
2014-02-14 22:45:48 -05:00
Hans-Christoph Steiner
ea7f82ed1a add menu item to enable NFC to RepoDetails view
It is now possible to beam a repo config via NFC but just selecting the
repo in FDroid, then touching two NFC devices together, and clicking on the
FDroid one.  There is no indication that NFC is off, so this commit adds a
menu item that makes it easy to enable the required NFC settings for
sending a repo to another device via NFC.
2014-02-12 21:19:19 -05:00
Peter Serwylo
da8e41249b 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-08 11:29:59 +11:00
Hans-Christoph Steiner
04b5db1f4c update display of signing key fingerprint
Update Utils.formatFingerprint() to create a more readible version of the
SHA-256 fingerprint of the signing key of the repo.
2014-01-28 20:31:47 -05:00
Hans-Christoph Steiner
7b7da9a110 when receiving a repo URI with wifi info, warn user if on different wifi
A repo URI can include info such as the current wifi SSID and BSSID that
the repo is hosted on.  This is for when local repos are transmitted via
QRCode, NFC, etc.  The receiver of this URI then checks to make sure it is
on the same wifi access point, and warns the user if not.

In the future, it should do more than just warn the user, but instead give
concrete actions for the user to take, like associating to that wifi.
2014-01-28 20:31:46 -05:00
Hans-Christoph Steiner
bcb7c048b5 protect ManageRepo from malformed incoming URIs
URIs can come from clicking a web page, NFC transmission, QR Code scan, and
more.  This code stops badly formed Uri strings from crashing F-Droid.  It
then shows a Toast error message that it can't understand the incoming URI.
2014-01-22 22:12:52 -05:00
Hans-Christoph Steiner
47659b5cec relabel misnamed items from "signature" to "repo fingerprint"
In the new Repo Details screen, there is some elements that are labels as
the "signature".  This is not quite right, it is actually referring to the
fingerprint of the repo signing key.  Since a repo will also usually have a
HTTPS certificate fingerprint, there will also be a fingerprint for that
certificate.
2014-01-21 18:30:02 -05:00
Daniel Martí
1f99c00899 Revert "New setting: "Small screen" to avoid ellipsizing on small screens"
This reverts commit a5c66a8c6ed9c9fd174aeb448e428d288e52f1e1.

Conflicts:
	src/org/fdroid/fdroid/AppDetails.java
2014-01-17 21:06:37 +01:00
Daniel Martí
b58cb74612 Revert "Specify that the version is for Android"
This reverts commit aff6a03fa2c2ea84cee6597a44dcfb32fa7006f5.

Conflicts:
	res/values/strings.xml
2014-01-14 13:27:04 +01:00
Daniel Martí
a5c66a8c6e New setting: "Small screen" to avoid ellipsizing on small screens 2014-01-10 22:12:57 +01:00
Daniel Martí
ac739de345 Run fix-ellipsis for the first time 2014-01-08 13:09:53 +01:00
Daniel Martí
61ba6d52d0 Change # for Number in @string/repo_num_apps 2014-01-08 10:38:19 +01:00
Peter Serwylo
3731ed8f23 Merge remote-tracking branch 'upstream/master' into improvement/16/manage-repos
Conflicts:
	res/values/strings.xml
	src/org/fdroid/fdroid/DB.java
	src/org/fdroid/fdroid/ManageRepo.java
	src/org/fdroid/fdroid/RepoXMLHandler.java
	src/org/fdroid/fdroid/Utils.java
2014-01-04 20:45:52 +11:00
Peter Serwylo
ffa2c962dc Merge branch 'master' into improvement/16/manage-repos
Conflicts:
	res/layout/appdetails.xml
	res/values/strings.xml
	src/org/fdroid/fdroid/DB.java
	src/org/fdroid/fdroid/FDroid.java
	src/org/fdroid/fdroid/ManageRepo.java
2014-01-04 20:19:27 +11:00
Daniel Martí
aff6a03fa2 Specify that the version is for Android 2014-01-03 17:55:23 +01:00
Daniel Martí
50f68d34b9 Support minSdk info in version list views 2014-01-03 02:44:24 +01:00
Daniel Martí
753bc43452 Use AppDetails title as indicator where we come from 2014-01-01 21:34:41 +01:00
Daniel Martí
962521947e Last pref summary: notifications 2014-01-01 01:47:10 +01:00
Daniel Martí
de40bed7e1 Do expert mode summary 2014-01-01 01:43:52 +01:00
Daniel Martí
6c9a375b27 Do db sync and apk cache settings summaries too 2014-01-01 01:32:33 +01:00
Daniel Martí
abef4f36e0 Do incompatible versions and permissions settings too 2014-01-01 01:20:21 +01:00
Daniel Martí
65981e3a25 Do updateHistoryDays summary like the others 2014-01-01 01:13:01 +01:00