3846 Commits

Author SHA1 Message Date
F-Droid Translatebot
679fdb3fb1 Pull translation updates from Weblate
Translators:

Adrià García-Alzórriz    Catalan
Daniel Martí             Catalan
Enol Puente              Asturian
ezjerry liao             Traditional Chinese
Jonatan                  Swedish
Miss Min                 Persian
Nutchanon Wetchasit      Thai
Sergio Oller             Catalan
2016-06-14 11:35:45 +01:00
Daniel Martí
eac0df88af CI: bump image 2016-06-13 23:36:13 +01:00
Daniel Martí
05a5041971 Merge branch 'verify-target-sdk' into 'master'
ApkVerifier: check targetSdkVersion



See merge request !333
2016-06-13 21:19:32 +00:00
Dominik Schürmann
174b1d108f ApkVerifier: check targetSdkVersion 2016-06-13 20:42:08 +02:00
Daniel Martí
6b18ab4204 Merge branch 'permissions-ui' into 'master'
Permissions UI in AppDetails

* Removes the "m" prefix and some unnecessary TODOs
* Re-uses the permission list from the privileged installer for the list in AppDetails:

![device-2016-06-09-234253](/uploads/0f3807f05084e763c07c9b4b7c49c481/device-2016-06-09-234253.png)

See merge request !332
2016-06-13 18:37:33 +00:00
Hans-Christoph Steiner
d40c94ab11 Merge branch 'targetSdkVersion' into 'master'
include targetSdkVersion in Apk

In order to work well with the Android 6.0+ permissions, the client needs to know whether an APK has been built against android-23 or higher.

@pserwylo @dschuermann how does this look?

See merge request !323
2016-06-10 08:43:44 +00:00
Hans-Christoph Steiner
59688c7ff0 include targetSdkVersion in Apk
In order to work well with the Android 6.0+ permissions, the client needs
to know whether an APK has been built against android-23 or higher.

closes #682 https://gitlab.com/fdroid/fdroidclient/issues/682
db-version/57
2016-06-10 10:28:25 +02:00
Dominik Schürmann
c88afd0995 Reuse AppSecurityPermissions in AppDetails 2016-06-09 23:42:14 +02:00
Dominik Schürmann
f5db19eba8 Remove m prefix from variables, remove TODOs 2016-06-09 23:31:27 +02:00
Daniel Martí
7e27edc9b5 Merge branch 'check-perms-after-install' into 'master'
Check permissions for unattended installer

This PR introduces the class ``ApkVerifier`` which checks the permissions of the downloaded apk file against the expected permissions from the F-Droid listing (``Apk`` class).

* I removed ``AndroidXMLDecompress`` because everything which it has been used for can also be done with ``PackageManager.getPackageArchiveInfo()``, to the best of my knowledge. I even asked in at a similar project why ``PackageManager.getPackageArchiveInfo()``may not be enough: https://github.com/jaredrummler/APKParser/issues/3 It turns out in our case it should do everything we need.
* The code responsible for sanitizing the local apk file and making it world readable has also been moved into ``ApkVerifier`` for now. This can change in a later PR when I introduce the FileProvider for downloaded apks.

We still need to check the target sdk version (see TODO in ``ApkVerifier``). This depends on https://gitlab.com/fdroid/fdroidclient/merge_requests/323

See merge request !322
2016-06-09 18:56:12 +00:00
Daniel Martí
1f61259ae3 Add Thai to the languages list 2016-06-09 14:14:13 +01:00
Daniel Martí
471447fc10 Run tools/remove-unused-trans.py
After a few strings were removed in !330.
2016-06-09 14:05:17 +01:00
F-Droid Translatebot
66d309b848 Pull translation updates from Weblate
Translators:

Mohamad Hasan Al Banna    Indonesian
Nutchanon Wetchasit       Thai
Prasanna Venkadesh        Tamil
2016-06-09 14:04:51 +01:00
Daniel Martí
abb7db0bc2 Merge branch 'remove-first-run' into 'master'
Remove first-time dialogs for extension installer

The root mechanism will not be useful in 5.1 and later and has been shown to be error prone.

See merge request !330
2016-06-09 13:00:43 +00:00
Daniel Martí
345d735d8f Merge branch 'robolectric' into 'master'
Port most tests to JVM via Robolectric library

Fixes #607.

This ports all but one of the tests from `app/src/androidTest` to `app/src/test` to be run on the JVM.

I would've liked to port the final one, but it must be run on Android because we are testing the ability of an Android OS to perform symlinks. Also, it is not a bad thing in itself to have tests run on an emulator, just that those which _can_ be run on the host JVM should be. In the future, there will no doubt be other tests which are required to run on the JVM. At the very least, we should be able to run tests on faster emulators now because we are not constrained by the failing provider tests.

This branch required only very minimal changes to the client code, but resulted in the removal of a whole bunch of crappy mocking code that I had to add in order to support testing of the content providers (i.e. navigating around all of the final/hidden/etc apis in Android).

See merge request !327
2016-06-09 11:02:11 +00:00
Dominik Schürmann
c1abd09362 Remove AndroidXMLDecompressTest 2016-06-09 12:36:43 +02:00
Dominik Schürmann
f6cc716fac Remove first-time dialogs for extension installer
The root mechanism will not be useful in 5.1 and later and has been shown
to be error prone.

Fixes #636
2016-06-09 11:12:09 +02:00
Dominik Schürmann
739bd00257 Documentation and cleanup 2016-06-09 10:31:33 +02:00
Dominik Schürmann
4bed9d67c5 Verify permissions of downloaded apk 2016-06-09 10:25:57 +02:00
Dominik Schürmann
1652c32d51 Move permission getter in Apk class
Also fix permissions list based on the fact
that F-Droid deletes android.permission. prefix
only for default Android permissions, not custom ones.
2016-06-09 10:25:57 +02:00
Dominik Schürmann
24ed40bd34 Move Apk verification and file sanitizing into own class
* use getPackageArchiveInfo of AOSP instead of AndroidXMLDecompress
* verify in InstallManagerService instead of Installer subclasses
2016-06-09 10:25:57 +02:00
Peter Serwylo
182a63af41 Ensure tests for proper multirepo support are not run.
They are here so that when we support multiple repos in a more robust
manner, we can use these tests to show that it was successful.
2016-06-09 10:44:40 +10:00
Peter Serwylo
53e74dcdbd Appease checkstyle for test code.
Like PMD, we also had to add a concession to allow static imports.
This time, it was achieved by moving the assertions to a more generally
named `Assert` class, and then allowing static imports from that.
2016-06-09 10:44:40 +10:00
Peter Serwylo
4e73d1e5e6 Finish porting tests to Robolectric, and appease PMD.
To appease PMD, we now have a three rulesets in `config/pmd/*.xml`:

 * `rules.xml`: The bulk of the rules, used by both main and test code.
 * `rules-main.xml`: Rules specific to the andoid client code.
 * `rules-test.xml`: Rules specific to test code.

The rationale is because checkstyle by default checks for "too many static
imports", which is a fair call. However in JUnit4 code, it is common to
import many `assert*` static methods.
2016-06-09 10:44:40 +10:00
Peter Serwylo
253900e927 Multi-repo updater ported to robolectric.
The tests pass, but there is a lingering message that gets logged:

```
Jun 08, 2016 7:31:13 AM com.almworks.sqlite4java.Internal log
WARNING: [sqlite] [DETACH DATABASE temp_update_db]DB[1][C]: exception when clearing
com.almworks.sqlite4java.SQLiteException: [1] DB[1] reset [no such database: temp_update_db]
	at com.almworks.sqlite4java.SQLiteConnection.throwResult(SQLiteConnection.java:1309)
	at com.almworks.sqlite4java.SQLiteConnection.throwResult(SQLiteConnection.java:1282)
	at com.almworks.sqlite4java.SQLiteConnection.cacheStatementHandle(SQLiteConnection.java:1211)
	at com.almworks.sqlite4java.SQLiteConnection.access$900(SQLiteConnection.java:54)
	at com.almworks.sqlite4java.SQLiteConnection$CachedController.dispose(SQLiteConnection.java:1606)
	at com.almworks.sqlite4java.SQLiteStatement.dispose(SQLiteStatement.java:187)
	at org.robolectric.shadows.ShadowSQLiteConnection$Connections$4.call(ShadowSQLiteConnection.java:421)
	at org.robolectric.shadows.ShadowSQLiteConnection$Connections$6.call(ShadowSQLiteConnection.java:449)
	at org.robolectric.shadows.ShadowSQLiteConnection$Connections$6.call(ShadowSQLiteConnection.java:443)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
```

The `temp_update_db` is the one used for repo updates, but I thought that it
correctly gets dropped/detached by the `TempAppProvider` when required. In fact,
given the nature of the error message (no such database: temp_update_db), that
hints at the fact that it is indeed dropped. I'm struggling to figure out what
causes this, but it should not be harmful to the running of the tests. If a test
actually fails, then it is picked up correctly by JUnit.
2016-06-09 10:44:40 +10:00
Peter Serwylo
660ebc5ec8 Migrated to robolectric.
This required changing the SAX parser to be namespace aware, as it seems
that is the default in Android, but not the default in the OpenJDK.
2016-06-09 10:44:40 +10:00
Peter Serwylo
60451a050f Remove unused test code.
Many of the `Mock*` classes are there to deal with idiosyncrosies of
the Android SDK, including `final`/package local/`@Hide` annotations/etc.
They are no longer required with robolectric tests.
2016-06-09 10:44:40 +10:00
Peter Serwylo
839ebebd87 Migrated Apk tests to robolectric.
Relatively straightforward port, nothing particularly special here.
2016-06-09 10:44:40 +10:00
Peter Serwylo
4e66bb810f Ported AppProvider tests to Robolectric.
Get around silly `final` methods in `ContentResolver` with Mockito and `delegatesTo`.

The Robolectric library presumes that people always want to test content providers by
manually invoking the `query`/`update`/`delete` methods on the `ShadowContentResolver`.
While that is a great feature for testing, we have helper methods that require testing,
and these methods accept either a _real_ `ContentResolver` or `Context`. Robolectric
did some cool magic in terms of intercepting runtime calls to content resolvers and
forwarding them to the "shadow" verison, to deal with final/package private/etc methods.
However, as a side effect, the `ShadowContentProvider` _is not a `ContentProvider` as
far as the Java compiler is concerned.

By utilising Mockito + `delegatesTo` method, we are able to achieve what is required:
 * An actual `ContentProvider` instance.
 * It forwards calls to the `ShadowContentProvider` provided by Robolectric.
2016-06-09 10:44:40 +10:00
Peter Serwylo
09fd3d188c Robolectric testing support + InstallAppProvider testing now run in JVM.
Robolectric provides testing support for Android via the JVM, including testing
of content providers. In order to get these tests to work, we need to avoid
the default behaviour of starting up FDroidApp.onCreate(). This method has a lot
of static state which fails if set multiple times. Instead of trying to ensure
we correctly zero out that state each test, it is preferable to instead never
bother with that in the first place. Expecially when that is not what is under
test (as is the case with content provider tests).
2016-06-09 10:44:40 +10:00
Peter Serwylo
c7bb93f743 Inject hash + hashType into install method.
This makes testing of the function easier, as the method previously expected
a real file to exist on disk for which it could then hash. This instead allows
mock hash values to be inserted when under test.

Other than this, the semantics remain exactly the same as before, and the
expensive hashing is still done on a worker thread as part of the `IntentService`.
2016-06-09 10:44:40 +10:00
Daniel Martí
4c7217d796 Add Tamil (ta) to the languages list 2016-06-08 23:32:44 +01:00
Daniel Martí
a987dc0ce5 Run tools/remove-unused-trans.py
Fixes the many lint errors accumulated over the past few weeks.
2016-06-08 23:28:20 +01:00
F-Droid Translatebot
297208b255 Pull translation updates from Weblate
Translators:

Ab                         Arabic
Adrià García-Alzórriz      Catalan
Adrià García-Alzórriz      Spanish
ageru                      French
Ajeje Brazorf              Sardinian
ezjerry liao               Traditional Chinese
Francesco Giordano         Italian
Frank Ludviksson           Spanish
Helder Santana             Portuguese (Brazil)
Kristoffer Grundström      Swedish
Licaon Kter                Romanian
Marian Hanzel              Slovak
Massimiliano Caniparoli    Italian
Mladen Pejaković           Serbian
Mutante Citta              Italian
naofum                     Japanese
Olexandr Nesterenko        Ukrainian
Prasanna Venkadesh         Tamil
Sérgio Marques             Portuguese (Portugal)
Tobias Bannert             German
Verdulo                    Esperanto
Verdulo                    Polish
2016-06-08 23:27:40 +01:00
Daniel Martí
5052266450 pull-trans: fix "Added translation" commits
The weblate commits now take two forms:

	Translated using Weblate ($LANG)
	Added translation using Weblate ($LANG)

Adapt the regex to reflect both, avoiding the latter form from screwing
everything up.
2016-06-08 23:25:54 +01:00
Daniel Martí
99a488dc18 Merge branch 'studio-suggestions' into 'master'
Studio suggestions



See merge request !324
2016-06-08 20:10:38 +00:00
Daniel Martí
f779118d6b Merge branch 'remove-install-cancel' into 'master'
Remove cancel button for install

Remove cancel button for install/uninstall progress

See merge request !325
2016-06-08 13:01:56 +00:00
Dominik Schürmann
1bb35aced4 Remove cancel button for install
The install progress is not cancelable thus the cancel
button should not be displayed. This corresponds to the
behaviour of Google Play.
2016-06-08 14:18:30 +02:00
Daniel Martí
2c16ffdefe Remove redundant throw clauses found by Studio 2016-06-07 22:33:09 +01:00
Daniel Martí
d2ac7e6eba Remove some dead code found by Studio 2016-06-07 22:33:09 +01:00
Daniel Martí
649647497e Apply some "access can be weaker" Studio fixes 2016-06-07 22:33:09 +01:00
Daniel Martí
fef76eff89 gradle: bump android plugin version to 2.1.2
Bugfix release, no changelog on developer.android.com.
2016-06-07 22:05:46 +01:00
Daniel Martí
52e4548755 Sync changelog with 0.100 release
Also, bump versionCode to 0.101-alpha0 to allow upgrading from 0.100 to
master.
2016-06-07 21:44:22 +01:00
Daniel Martí
692c5e6917 Merge branch 'one-badge-per-line' into 'master'
One badge per line

It looks nicer in markdown and is still parallel: https://gitlab.com/NicoAlt/fdroidclient/blob/one-badge-per-line/README.md

See merge request !321
2016-06-03 16:08:21 +00:00
Nico Alt
946b017ab2 One badge per line 2016-06-03 18:02:16 +02:00
Daniel Martí
2b7a194831 Merge branch 'fix-badge' into 'master'
Fix GitLab CI badge



See merge request !320
2016-06-03 15:58:51 +00:00
Nico Alt
3116094b96 Fix GitLab CI badge 2016-06-03 17:55:30 +02:00
Daniel Martí
e2f5d97cb2 Merge branch 'crash-fixes' into 'master'
Service crash fixes

3 relatively simple crash fixes.  The two related to `WifiStateChangeService` have already be included in `stable-0.100`, 7385d320b42af960be63c9c179e1cbf186c1398a should be cherry-picked into `stable-0.100` after this is merged.

I already have 198ad843c1fabc8cf57ffe85c77230288cd6d7a4 ready in my stable-0.100 branch

See merge request !317
2016-06-02 13:20:14 +00:00
Peter Serwylo
4e9c8e9e5e Merge branch 'cr-of-299' into 'master'
Changes made during CR of 299

Here is a collection of small changes I implemented while CRing 299. The most interesting is probably the nice opportunity to use a little bit of RX. This is a good example of where it is a useful API, to "debounce" requests by 1 second (i.e. collect all requests but only respond to the last one after X time units). The `PublishSubject` sits there for the duration of the service, and passively receives events when required. However, it only emits events to the subscriber after one second because before subscribig we ask it to debounce events.

See merge request !319
2016-06-02 11:41:58 +00:00
Peter Serwylo
7c8ea5c5af Prevent InstalledAppProvider from notifying about changes.
Historically the providers were responsible for notifying about inserts/deletes
for this table. However this is no longer the case with the new service responsible
for throttling the rate with which these notifications occur.
2016-06-02 21:08:23 +10:00