543 Commits

Author SHA1 Message Date
Hans-Christoph Steiner
9848db7680 move CrashReportActivity into new .acra package
This isolates all the ACRA stuff in its own package.
2016-09-28 14:23:34 +02:00
Hans-Christoph Steiner
f24c5b6ac7 custom ACRA sender to put stacktrace title in email Subject:
This should hopefully make it easier to sort through the emails.
2016-09-28 14:23:34 +02:00
Hans-Christoph Steiner
4c7322d917 throw in extra test URLs for HttpDownloaderTest
These are commented out so that the tests aren't brittle when they run on
the CI builds.  But are easy to uncomment when testing locally.
2016-09-28 11:35:57 +02:00
Hans-Christoph Steiner
4598a78bfd support TLS 1.2 on all repos
Update to the latest NetCipher, which now fully supports SNI, in order to
support TLS 1.2 on all supported platform levels.  Without this, a repo
that is TLS 1.2 only will be unusable on all but the most recent versions
of Android.

#431
2016-09-28 11:35:57 +02:00
Hans-Christoph Steiner
bad613fbc1 move HttpDownloaderTest to emulator, AndroidOS has oddities
There are oddities with the way that Android has implemented the network
stack, as compared to OpenJDK or Oracle JDK.  So running the tests on the
local JVM, i.e. Robolectric, will not provide good test coverage for real
world use cases.
2016-09-28 11:35:57 +02:00
Hans-Christoph Steiner
dd134c50bc update to latest support lib bugfix version: v24.2.1 2016-09-27 22:59:17 +02:00
Daniel Martí
3aad107b51 Add Icelandic to the list of languages
Added to weblate in the last commit.
2016-09-27 13:15:03 +01:00
F-Droid Translatebot
a29d2eb4f9 Pull translation updates from Weblate
Translators:

Ajeje Brazorf       Sardinian
Enol P              Asturian
Marian Hanzel       Slovak
Michael Moroni      Italian
Mladen Pejaković    Serbian
Sérgio Marques      Portuguese (Portugal)
Sveinn í Felli      Icelandic
Дмитрий Михирев     Russian
2016-09-27 13:11:44 +01:00
Hans-Christoph Steiner
ab7602c407 Merge branch 'fix-763--multi-repo-brokenness' into 'master'
Fix 763  multi repo brokenness

I've put a comment [here](https://gitlab.com/fdroid/fdroidclient/issues/763#note_15032709) explaining the problem.

This includes (in order of commits):
* A test case to reproduce (see my comment [here](https://gitlab.com/fdroid/fdroidclient/issues/763#note_15954822) about whether I should rename this)
* A brittle fix
* A more robust fix

See merge request !394
2016-09-27 10:20:15 +00:00
Peter Serwylo
1678223cab More robust fix for #763, specifying column names to copy explicitly.
This is far less brittle at runtime, but slightly more work at dev time.
The following things are undesirable but make it much easier to write:
 * Use of `CREATE_TABLE_APP.replaceFirst(...)` to create the temp tables.
 * Having to specify a list fo columns twice in `Schema` (`ALL_COLS` + `COLS`).

The `replaceFirst` means we don't need to maintain two separate create table
statements. It is a little messy because there is no compile time guarantee
that we are creating a valid SQL statement at the end, just our knowledge
that a create table statment tends to have the table name first and it
probably wont cause problems.

The `ALL_COLS` + `COLS` is required so that we don't have to type out a list
of fields when copying data in `TempAppProvider`. Otherwise, whenever a new
column is added, developers would need to know that it also needs to be added
to this third place. Currently it is in the `Schema` and the `CREATE_TABLE_*`
statements where one needs to add a new column. These are both intuitive and
hopefully easily discoverable. Having to add it to the `TempAppProvider` is
less intuitive and likely to result in bugs.
2016-09-24 08:52:15 +10:00
Peter Serwylo
1ba6034e19 Fixed issue #763 by being more specific when creating temp table for update.
When performing the old style `CREATE TABLE ... AS SELECT ...` (CTAS) statement,
no indexes are added. In addition, rowid is not added. Even if manually
specifying an autoincrement column in the original schema, this autoincrement
column does not get recreated with the CTAS statement. So instead, this change
reuses the original `CREATE TABLE` statement which explicitly defines all of the
relevant columns. In addition, it explicitly adds an autoincrement integer primary
key. This has the same semantics as the existing implicit `rowid` column that
sqlite creates. From from https://sqlite.org/autoinc.html:

> In SQLite, a column with type INTEGER PRIMARY KEY is an alias for the ROWID
> (except in WITHOUT ROWID tables) which is always a 64-bit signed integer.

However, as it is explicit now, is copied when doing the
`INSERT INTO ... SELECT ...` statement to get data from the real table to the
temp table in preperation for updates (and back again after the update has
populated the temp table).

Note that this makes the `INSERT INTO ... SELECT ...` statements slightly more
brittle, because now we need the table definition used to create the temp table
(from `DBHelper.CREATE_APP_TABLE`) to have the same column order as those in the
real `fdroid_app` table. While this may sound like a silly comment to make, it
is important because database migrations can result in a database having the
correct set of columns, but in a different order to how they were specified
in the original create table statement.

If a database migration performs an `ALTER TABLE ... ADD COLUMN ...` the column
will be added at the end. If at the same time the `CREATE TABLE` is changed so
that the new column is specified as the second to last column in the list of
columns, then the `INSERT INTO ... SELECT ...` will not work as expected.
2016-09-24 08:52:15 +10:00
Peter Serwylo
9b13d98943 Use database constant instead of hard coded string literal 2016-09-24 08:52:15 +10:00
Peter Serwylo
cff209cd44 Replicated issue #763 in a test case 2016-09-24 08:52:12 +10:00
Hans-Christoph Steiner
ecd98047da fix emulator tests on android-10, closes #769
We have to work harder to get writeable dirs in the android-10 emulator.
2016-09-19 14:56:07 +02:00
uberspot
360f365227 Remove any whitespace from fingerprint EditText input so that copy pasting is easier for users. 2016-09-18 20:58:46 +02:00
Daniel Martí
fdc70b0f9d Bump build-tools and docker image version
The latter is simply to include the newer version.
2016-09-10 12:02:12 +02:00
Daniel Martí
012fe5e224 Add new Burmese/Myanmar language to the list
Rendering this on my computer is a pain, so patches welcome if I screwed
up the unicode since all I can see is squares.
2016-09-10 11:59:24 +02:00
F-Droid Translatebot
c4a3b579c4 Pull translation updates from Weblate
Translators:

Agus                      Galician
Ajeje Brazorf             Sardinian
Alberto Moshpirit         Spanish
El Virolo                 French
Koen Glotzbach            Dutch
Licaon Kter               Romanian
Michael                   German
Mohamad Hasan Al Banna    Indonesian
naofum                    Japanese
Olexandr Nesterenko       Ukrainian
Osoitz                    Basque
Pyae Sone                 Burmese
Verdulo                   Esperanto
Verdulo                   Polish
YFdyh000                  Simplified Chinese
2016-09-10 11:46:35 +02:00
Hans-Christoph Steiner
3657cf3256 Merge branch 'fix-ish-698' into 'master'
handle install broadcasts after InstallManagerService was killed

If InstallManagerService was killed, it'll forget all of its state.  If it is killed while an install process is running, and that install fails,
InstallManagerService will receive a broadcast about the error but then it can't find anything about the app in question besides its download URL.
That is enough to control the notification, but not enough to get the name of the app in question.  This is a workaround by showing the APK filename when the app name cannot be found. Ideally, the packageName would somehow magically be delivered to InstallManagerService in this case, but the
Installer stuff doesn't always have it to send.

With android-23, there is getActiveNotifications(), which we might be able to use to stash the packageName and fetch it as needed.

See merge request !387
2016-09-07 12:16:56 +00:00
F-Droid Translatebot
49db1a78d7 Pull translation updates from Weblate
Translators:

Adrià García-Alzórriz    Catalan
Ajeje Brazorf            Sardinian
Christophe CHAUVET       French
Enol P                   Asturian
Laura Arjona Reina       Spanish
Licaon Kter              Romanian
Michael                  German
Mladen Pejaković         Serbian
naofum                   Japanese
Osoitz                   Basque
Swyter                   Spanish
Sylvia van Os            Dutch
Tobias Bannert           German
Verdulo                  Esperanto
Verdulo                  Polish
Viktor Alojzije Coric    Croatian
Waqar Ahmed              Urdu
YFdyh000                 Simplified Chinese
2016-09-02 09:31:53 +09:00
Hans-Christoph Steiner
973174cc7b privileged mode means auto-downloads are actually installs
When the Privileged Extension is working, then enabling the preference
"Automatically download updates" will actually install those updates in the
background.  So the preference should communicate that to the user. So now
it serves as a global "allow background updates"

#16
closes #106
2016-09-01 17:49:52 +02:00
Hans-Christoph Steiner
530144bec6 don't show notification if the app name is unknown #720
This gets rid of the notifications that say "Tap to Install Unknown", and
instead just cancels the notification.  The downloaded APK will still be
cached, so when the user goes to click install or update again, it won't
need to download it again.

closes #758
2016-09-01 15:59:51 +02:00
Hans-Christoph Steiner
c9a6cc3051 handle install broadcasts after InstallManagerService was killed
If InstallManagerService was killed, it'll forget all of its state.  If it
is killed while an install process is running, and that install fails,
InstallManagerService will receive a broadcast about the error but then it
can't find anything about the app in question besides its download URL.
That is enough to control the notification, but not enough to get the name
of the app in question.  This is a workaround by showing the APK filename
when the app name cannot be found. Ideally, the packageName would somehow
magically be delivered to InstallManagerService in this case, but the
Installer stuff doesn't always have it to send.

With android-23, there is getActiveNotifications(), which we might be able
to use to stash the packageName and fetch it as needed.
2016-08-31 23:28:50 +02:00
Aditya Bharadwaj
5d58fc0199 Fix PMD issue. 2016-08-26 22:29:50 -04:00
Aditya Bharadwaj
632eeff611 Update naming convention as per review. Add antifeatures list length check to filter anti-feature apps. 2016-08-26 21:48:53 -04:00
Aditya Bharadwaj
1e95f57ef8 Fix checkstyle issue. 2016-08-26 21:48:53 -04:00
Aditya Bharadwaj
1f354a1b3f Add option to grey out apps requiring anti-features. 2016-08-26 21:48:53 -04:00
Daniel Martí
fde227e889 Bump to 0.101-alpha6 2016-08-27 08:37:34 +09:00
F-Droid Translatebot
b30a188498 Pull translation updates from Weblate
Translators:

Ajeje Brazorf    Sardinian
John Doe         Turkish
Nathan Follens   Dutch
2016-08-27 08:33:16 +09:00
Hans-Christoph Steiner
45b083546f get ACRA reports without crashing to debug #698
This should be reverted once #698 is fixed.  If execution has gotten this
far into InstallManagerService, there should always be App and Apk
instances.  That is enforced when Intents are received by this Service.
2016-08-26 11:55:14 +02:00
Hans-Christoph Steiner
b45f7ba27c remove confusing messages when Privileged Extension not installed
This was saying that the Privileged Extension is enabled but not properly
configured.  This is because the preference logic changed to default to on
unless the user explicitly disabled it.  So using the Privileged
Extension based on whether its installed and whether the user has disabled
it.

related to ea0700d406101b7ed6907b1dbd2918dbc214f435
2016-08-26 10:50:43 +02:00
Hans-Christoph Steiner
0577ecfc53 update support libs to latest (24.2.0) to hopefully fix crashes
Based on ACRA reports, there are some mystery UI related stacktraces that
do not have org.fdroid.fdroid lines in them.
2016-08-26 10:47:46 +02:00
Hans-Christoph Steiner
691545f065 use gradle-witness for all included libs
use the automatic method for generating the gradle-witness block so its
easy to keep it updated.
2016-08-26 10:47:46 +02:00
Hans-Christoph Steiner
3adfbc66aa sort gradle-witness lines so its easy to see changes 2016-08-26 10:42:39 +02:00
Hans-Christoph Steiner
53cbb26209 check whether installed APKs exist and are readable before hashing
I guess APKs could disappear, or perhaps not be readable.

closes #699

Here's the stacktrace:

java.io.FileNotFoundException:
 /system/priv-app/ATT_Ready2Go/ATT_Ready2Go.apk: open failed: ENOENT (No such file or directory)
 at org.fdroid.fdroid.Utils.getBinaryHash(Utils.java:405)
 at org.fdroid.fdroid.data.InstalledAppProviderService.onHandleIntent(InstalledAppProviderService.java:164)
 at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
 at android.os.Handler.dispatchMessage(Handler.java:102)
 at android.os.Looper.loop(Looper.java:135)
 at android.os.HandlerThread.run(HandlerThread.java:61)
2016-08-23 22:56:31 +02:00
Hans-Christoph Steiner
ea0700d406 use Privileged Extension by default when it is installed
This totally changed the logic of the "Use Privileged Extension" preference
making it based on whether the Privileged Extension is installed and usable
rather than storing the user's selection.  This code now only stores when
the user manually disables using the Privileged Extension even when it is
installed.

closes #729
2016-08-22 22:16:32 +02:00
Hans-Christoph Steiner
91cac9fed4 only show "install Priv Ext" in Prefs when its supported
The root install method that is available via the "Expert" preferences does
not work on newer than android-19.  So when that's the case, this hides
that item from the preferences screen entirely.
2016-08-22 22:16:32 +02:00
Hans-Christoph Steiner
a1ae08cd1e fix bug in cache cleanup on 21+ introduced in cbd6da5
!379 was merged without the emulator tests passing.  This fixes that.
2016-08-22 21:38:01 +02:00
Daniel Martí
a9944f7a22 Bump robolectric to 3.1.2 2016-08-21 11:07:47 +02:00
Daniel Martí
16170d6794 Bump to 0.101-alpha5 2016-08-20 19:07:25 +02:00
F-Droid Translatebot
6846d04751 Pull translation updates from Weblate
Translators:

Kristjan Räts    Estonian
Marko            Finnish
tacsipacsi       Hungarian
2016-08-20 19:06:28 +02:00
Daniel Martí
5a6aecad85 Merge branch 'fix-748--verify-error' into 'master'
Move code causing verify error into separate helper class

Fixes #748.

I'm not 100% sure on how the `@TargetApi` and `VerifyError` work
together. However it is something along the lines of:
 * Class loader needs `CleanCacheService`.
 * At this point, it loads the bytecode for that class and verifies
   that it all makes sense.
 * The bytecode within the method targeted at API 21 is not understood
   by earlier APIs, because the entire `Os` class was introduced in 21.
 * By putting it into a different class, that class is only loaded
   at runtime on devices with API of 21 or higher.

Previously, `@TargetApi` + the relevant guard condition to check
the build version at runtime suffices to prevent this. However it seems
that if the entire class does not even exist on earlier APIs, then it
is no longer good enough.

See merge request !379
2016-08-20 17:00:15 +00:00
Peter Serwylo
cbd6da5267 Move code causing verify error into separate helper class
I'm not 100% sure on how the `@TargetApi` and `VerifyError` work
together. However it is something along the lines of:
 * Class loader needs `CleanCacheService`.
 * At this point, it loads the bytecode for that class and verifies
   that it all makes sense.
 * The bytecode within the method targeted at API 21 is not understood
   by earlier APIs, because the entire `Os` class was introduced in 21.
 * By putting it into a different class, that class is only loaded
   at runtime on devices with API of 21 or higher.

Previously, `@TargetApi` + the relevant guard condition to check
the build version at runtime suffices to prevent this. However it seems
that if the entire class does not even exist on earlier APIs, then it
is no longer good enough.
2016-08-18 11:58:56 +10:00
Peter Serwylo
b855c745e0 Ensure that description is not null when parsing index.
At time of writing (and for some time before), fdroidserver has forced
a description of "No description available" for apps which don't have
descriptions at all:

 * https://gitlab.com/fdroid/fdroidserver/blob/0.6.0/fdroidserver/metadata.py#L876

However, if the description is not set for whatever reason, it should not
crash the client.
2016-08-18 00:32:11 +10:00
Hans-Christoph Steiner
4dc1415035 document processes in CleanCacheService
This breaks out each separate process into its own utility method, and adds
javadoc to describe them.
2016-08-16 16:50:04 +02:00
Hans-Christoph Steiner
0614213de0 delete cached icons that have not been accessed in over a year
The icon files are downloaded for each version of the app.  Over time, old
versions will pile up.  This cleans out the ones that have not been used in
over a year.

On < android-21, this will delete icons that were downloaded over a year
ago even if they are still in use because it is only possible to check
mtime, not atime.
2016-08-16 12:43:31 +02:00
Hans-Christoph Steiner
f6693ab1a1 avoid deleting cached files while they are being used
If CleanCacheService runs while an APK is being installed, it should not
delete the APK that is in the process of being installed.  This does that
by only deleting those files if they are older than an hour. Same goes for
the index files.

#738
2016-08-16 12:43:31 +02:00
Hans-Christoph Steiner
09829515e8 fix bug where files were never deleted from cache
It was passing the wrong time value in the recursion, which made for a
really old "olderThan" time.  This also then flipped the logic on the
next round through the recursion, causing files to be deleted even if
"Keep Cache Time" was set to "Forever".

closes #719
closes #736
2016-08-16 12:43:31 +02:00
Hans-Christoph Steiner
cbf5914460 if the "Keep Cache Time" pref changes, reschedule CleanCacheService
Before, CleanCacheService was only scheduled at app start for once a day.
If the user selects a time less than a day, then CleanCacheService should
run more frequently.

closes #719
2016-08-16 12:43:31 +02:00
Hans-Christoph Steiner
40541fadfe clearOldFiles() test must run on the emulator
It seems that Robolectric does not implement android.system.Os so the
atime checking code cannot be tested there.  Works fine on the emulator.
2016-08-16 12:43:31 +02:00