3852 Commits

Author SHA1 Message Date
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
3aa58bc005 Merge branch 'add-option-to-hide-anti-feature-apps' into 'master'
Add option to hide anti feature apps

Added option under Setting to grey out apps requiring anti-features similar to ignoring rooted apps on a non-rooted device.

See merge request !384
2016-08-30 15:54:44 +00: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 v0.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
Daniel Martí
1599b3c1ae Merge branch 'bugfix-for-699' into 'master'
final fixes for 0.101

I think we can release 0.101 after this bug fix for #699 and support update.  What do you think @mvdan @pserwylo @dschuermann ?

See merge request !385
2016-08-26 22:21:39 +00: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
Daniel Martí
fa112ed303 Merge branch 'enable-priv-ext-by-default' into 'master'
use Privileged Extension by default, when installed

Now that the 0.2 release of Privileged Extension is tagged, it is starting to be integrated into ROMS, and is easy to flash to ROMed devices, it is time to make F-Droid use the Privileged Extension by default, if it is installed.

See merge request !382
2016-08-23 07:55:20 +00:00
Hans-Christoph Steiner
3f53d1bad8 update changelog
closes #752
2016-08-22 22:17:38 +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
aa848b2617 gitlab-ci: require emulator tests pass on android-24 2016-08-22 21:38:01 +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í
9e10d46449 Merge branch 'gradle-bumps' into 'master'
Gradle version bumps

@eighthave I cannot reenable connected24 as it seems like a cache test is reliably failing there.

See merge request !381
2016-08-22 09:25:37 +00:00
Daniel Martí
a9944f7a22 Bump robolectric to 3.1.2 2016-08-21 11:07:47 +02:00
Daniel Martí
cbccb910a2 gradle: bump plugin and wrapper version
Since the new plugin requires 2.14.1 for security reasons.

Also re-run `gradle wrapper` to update the scripts and the jar.
2016-08-21 11:06:41 +02:00
Daniel Martí
5679880f88 CI: bump image 2016-08-21 11:02:21 +02:00
Daniel Martí
16170d6794 Bump to 0.101-alpha5 v0.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
Daniel Martí
252330fb86 Merge branch 'fix-739--empty-description' into 'master'
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.

Identified in the now closed #739.

See merge request !380
2016-08-17 16:29:21 +00: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
20a5f42359 Merge branch 'big-cache-update' into 'master'
Big cache update

So I messed up the caching a bit with my update in the past, so this is a big update to fix lots of bugs (hopefully) and add a couple of nice cache clean up features.  This should move us towards making F-Droid maintain itself more and more.  More comments in the commits.

See merge request !378
2016-08-16 17:02:45 +00: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
Hans-Christoph Steiner
c9e3643712 switch "Keep Cache Time" units to milliseconds
Both the Android task scheduler and the Java File operations want millis.
For "Forever", Long.MAX_VALUE is used.
2016-08-16 11:22:25 +02:00
Hans-Christoph Steiner
fc98820c93 move clearOldFiles() to CleanCacheService to be used on other files
Now that there is the ability to remove files based on last access time, it
makes sense to use this on all cached files, including icons, etc.
2016-08-16 11:22:25 +02:00
Hans-Christoph Steiner
28dfe970da use access time to remove old cache files >= android-21
In android-21, they exposed the formerly internal method for getting stat
structs of files.  From that, we can get the last access time, which is a
much better way to determine which files to delete rather than last
modified time.

closes #644
2016-08-16 00:03:11 +02:00
Hans-Christoph Steiner
6204a16024 set default for "keep cached apps"
There was no default set in the XML, so it just showed the default as blank

closes #719
2016-08-16 00:03:11 +02:00
Daniel Martí
cd465aae2b values-et: fix format errors from weblate 2016-08-15 16:49:16 +02:00
F-Droid Translatebot
b1df9bba01 Pull translation updates from Weblate
Translators:

Danial Behzadi    Persian
Kristjan Räts     Estonian
tacsipacsi        Hungarian
2016-08-15 16:46:12 +02:00
Peter Serwylo
943e0d0a1c Merge branch 'hash-fixes' into 'master'
Hash fixes

Two semi-related commits about hashes.  This standardizes all APK hashes to be all lowercase like in the _fdroidserver index.xml_.  The other then stops swallowing hash-related exceptions so we have a chance of debugging the issue.  @pserwylo we discussed a0f716c0db705f137749eef3d4964b8ba1050b18 in relation to #699.

See merge request !377
2016-08-12 22:40:11 +00:00
Hans-Christoph Steiner
4907e0b289 Utils.getBinaryHash() should not catch exceptions
By catching the exception here and returning null, the problem is then
passed on further down the line where it is harder to debug.  The hash is
required wherever this method is called, so this should fail immediately.

#699
2016-08-12 14:39:33 +02:00
Hans-Christoph Steiner
e77bde2cfa standardize on lowercase SHA-256 hashes
fdroidserver produces lowercase hashes, so its easiest to just mimic
that.  This makes hash comparisons easy.
db-version/61
2016-08-12 14:39:33 +02:00
Hans-Christoph Steiner
fdec402837 Merge branch 'apk-tests' into 'master'
ApkVerifier Tests

This are some tests for ApkVerifier. More will follow when we merge https://gitlab.com/fdroid/fdroidserver/merge_requests/150 and implement parsing of permissions with min and max sdk versions.

NOTE: This androidTest cannot run as a Robolectric test because the required methods from PackageManger are not included in Robolectric's Android API.

The corresponding exception by robolectric:
```
org.fdroid.fdroid.installer.ApkVerifierTest > testVerifier FAILED
00:31:18.241 [DEBUG] [TestEventLogger]     java.lang.NoClassDefFoundError: java/util/jar/StrictJarFile
00:31:18.241 [DEBUG] [TestEventLogger]         at java.lang.Class.getDeclaredMethods0(Native Method)
00:31:18.241 [DEBUG] [TestEventLogger]         at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
00:31:18.241 [DEBUG] [TestEventLogger]         at java.lang.Class.getDeclaredMethod(Class.java:2128)
00:31:18.241 [DEBUG] [TestEventLogger]         at org.robolectric.util.ReflectionHelpers.callStaticMethod(ReflectionHelpers.java:224)
00:31:18.241 [DEBUG] [TestEventLogger]         at org.robolectric.internal.bytecode.RobolectricInternals.performStaticInitialization(RobolectricInternals.java:54)
00:31:18.241 [DEBUG] [TestEventLogger]         at org.robolectric.internal.bytecode.ShadowWrangler.classInitializing(ShadowWrangler.java:119)
00:31:18.241 [DEBUG] [TestEventLogger]         at org.robolectric.internal.bytecode.RobolectricInternals.classInitializing(RobolectricInternals.java:18)
00:31:18.241 [DEBUG] [TestEventLogger]         at android.content.pm.PackageParser.<clinit>(PackageParser.java)
00:31:18.241 [DEBUG] [TestEventLogger]         at android.content.pm.PackageManager.getPackageArchiveInfo(PackageManager.java:3545)
00:31:18.241 [DEBUG] [TestEventLogger]         at org.fdroid.fdroid.installer.ApkVerifier.verifyApk(ApkVerifier.java:56)
00:31:18.241 [DEBUG] [TestEventLogger]         at org.fdroid.fdroid.installer.ApkVerifierTest.testVerifier(ApkVerifierTest.java:78)
00:31:18.242 [DEBUG] [TestEventLogger]         at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
[...]
00:31:18.244 [DEBUG] [TestEventLogger] 
00:31:18.244 [DEBUG] [TestEventLogger]         Caused by:
00:31:18.245 [DEBUG] [TestEventLogger]         java.lang.ClassNotFoundException: java.util.jar.StrictJarFile
00:31:18.245 [DEBUG] [TestEventLogger]             at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
00:31:18.245 [DEBUG] [TestEventLogger]             at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
00:31:18.245 [DEBUG] [TestEventLogger]             at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
00:31:18.245 [DEBUG] [TestEventLogger]             at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
00:31:18.245 [DEBUG] [TestEventLogger]             at org.robolectric.internal.bytecode.InstrumentingClassLoader.loadClass(InstrumentingClassLoader.java:124)
00:31:18.245 [DEBUG] [TestEventLogger]             at java.lang.Class.getDeclaredMethods0(Native Method)
00:31:18.245 [DEBUG] [TestEventLogger]             at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
00:31:18.245 [DEBUG] [TestEventLogger]             at java.lang.Class.getDeclaredMethod(Class.java:2128)
00:31:18.245 [DEBUG] [TestEventLogger]             at org.robolectric.util.ReflectionHelpers.callStaticMethod(ReflectionHelpers.java:224)
00:31:18.245 [DEBUG] [TestEventLogger]             at org.robolectric.internal.bytecode.RobolectricInternals.performStaticInitialization(RobolectricInternals.java:54)
00:31:18.245 [DEBUG] [TestEventLogger]             at org.robolectric.internal.bytecode.ShadowWrangler.classInitializing(ShadowWrangler.java:119)
00:31:18.245 [DEBUG] [TestEventLogger]             at org.robolectric.internal.bytecode.RobolectricInternals.classInitializing(RobolectricInternals.java:18)
00:31:18.245 [DEBUG] [TestEventLogger]             at android.content.pm.PackageParser.<clinit>(PackageParser.java)
00:31:18.245 [DEBUG] [TestEventLogger]             at android.content.pm.PackageManager.$$robo$$getPackageArchiveInfo(PackageManager.java:3545)
00:31:18.245 [DEBUG] [TestEventLogger]             at android.content.pm.PackageManager.getPackageArchiveInfo(PackageManager.java)
00:31:18.245 [DEBUG] [TestEventLogger]             at org.fdroid.fdroid.installer.ApkVerifier.verifyApk(ApkVerifier.java:56)
00:31:18.246 [DEBUG] [TestEventLogger]             at org.fdroid.fdroid.installer.ApkVerifierTest.testVerifier(ApkVerifierTest.java:78)
00:31:18.246 [DEBUG] [TestEventLogger]             at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[...]
```

See merge request !367
2016-08-12 12:38:24 +00:00
Hans-Christoph Steiner
ef21bf973c Merge branch 'fix-511--remove-dead-code' into 'master'
More misc code cleanup around database code

I'm pulling out the final bit of unrelated code from my database refactor branch in the hope of making the final diff easier. This cleans up a few switch statements with only one option, closes some cursors, and removes some dead code. Comments in the commits explain the dead code.

See merge request !374
2016-08-12 10:21:09 +00:00
Hans-Christoph Steiner
c6faeea14e Merge branch 'fdroid-privileged-extension-fixes' into 'master'
F-Droid Privileged Extension fixes

A couple of small fixes related to the process of finalizing the new Privileged Extension for a real release!  @dschuermann hopefully just renaming is enough when installing FPE via the root method.  Or do you think we should handle removing existing installs in the old location?

See merge request !376
2016-08-12 09:53:02 +00:00