545 Commits

Author SHA1 Message Date
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
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.
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
7afee40d8f standardize priv-app install name as FDroidPrivilegedExtension
This syncs up the name the root install method uses with what is used by
the ROM integration and update.zip.  It also uses the full name for
consistency, with non-alpha and spaces removed following priv-app naming
conventions.

https://gitlab.com/fdroid/privileged-extension/merge_requests/3
https://gitlab.com/fdroid/privileged-extension/merge_requests/5
2016-08-12 11:28:36 +02:00
Hans-Christoph Steiner
1192410d87 remove scripts for creating update.zip, moved to priv-ext
https://gitlab.com/fdroid/privileged-extension/merge_requests/5
2016-08-11 16:59:59 +02:00
Peter Serwylo
ebb6d43cbb Remove dead code
AS picked up that the statement is always false, so the body of the if is
never executed. This is indeed the case, because the constructor assigns
the object which is being checked for null.
2016-08-11 23:16:28 +10:00
Peter Serwylo
6c1b277cab Close cursors which previously were left dangling. 2016-08-11 23:10:54 +10:00
Peter Serwylo
005d109818 Clean up switch statements with only a single option. 2016-08-11 23:10:11 +10:00
Peter Serwylo
fd50a2c730 Remove unused code.
The code only existed so that it could be used in a test. Subsequently,
a further test was written to test this code (used by the first test).
Since none of the code is actually used in the app, it has been removed.
2016-08-11 23:02:59 +10:00
Peter Serwylo
626f55b43b Renamed AppTable to AppMetadataTable
See #511 for details. This is in prepration for having an even more normalized
`fdroid_package` table. That table will be the authoritative reference of what
"packages" are known about in the client. The "app" table (now thought of as "app metadata") will
be specific to each repository which provides different metadata about that app.
2016-08-11 16:34:26 +10:00
Dominik Schürmann
9235462e34 Tests for ApkVerifier 2016-08-09 22:26:39 +02:00
Peter Serwylo
203bcda695 Cleanup in response to CR comments 2016-08-04 21:35:46 +10:00
Peter Serwylo
bb88be9403 Further tests for AppPrefs.equals() which is used by AppDetails. 2016-08-04 11:15:42 +10:00
Peter Serwylo
9637de5e4c Make ignored app tests actually test code in use.
The test was using a `findIgnored` method in `AppProvider`, which only
existed for the purpose of testing. The test has been changed to instead
check for apps which would end up in the "can update" list (which is really
where the "ignored" apps are useful).
2016-08-04 09:53:25 +10:00
Peter Serwylo
125acd6276 Migrate app preferences to different table.
In the process, realised that using appId as a foreign key is worse than
packageName, because appId can get removed and added again, but it will
be different when the same app is inserted a second time. In order to
maintain the association of which apps have preferences stored against
them, they need to be stored against something with a bit more semantic
meaning. Thus, join onto package name instead.
2016-08-04 09:53:25 +10:00
Peter Serwylo
4b5481b8f2 Appese checkstyle + pmd 2016-08-04 09:53:25 +10:00
Peter Serwylo
5e263c0e0f Use "COALESCE(x, 0)" instead of "x = 0 OR x IS NULL"
This is a more concise syntax to say the same thing, and avoids an
OR clause in the where - which is often the cause of slowness in
many queries. Not sure if it was problematic in these cases, however
this COALESCE syntax is still more consise.
2016-08-04 09:53:25 +10:00
Peter Serwylo
004c86bc42 Notify content observers correctly 2016-08-04 09:53:25 +10:00
Peter Serwylo
903048ffe4 Add covering indexes for main queries.
With no indexes at all, a join between X and Y tables would require a full
table scan of Y for each row in X. With an index on the relevant field in
Y, it would require an index lookup on the join field in Y for each row in
X, which contains a pointer to the row of interest in Y. This row is then
looked up and the relevant value extracted. By using a covering index (one
which includes all fields required to satisfy the query, with the first field
being the one which is looked up in the join), then once the index has been
searched, there is no need to then go to table Y because all the relevant
data is already in the index.

This offers a marginal performance improvement.
2016-08-04 09:53:25 +10:00
Peter Serwylo
3e3af3bbf3 Completely removed preferences from app table. 2016-08-04 09:53:25 +10:00
Peter Serwylo
d47967e03d Added new table to store user preferences.
Haven't yet migrated data from the old location in the app table yet.
2016-08-04 09:53:25 +10:00
Daniel Martí
3c5f8756f4 Bump to 0.101-alpha4 2016-08-02 11:25:30 +02:00
Dominik Schürmann
0fd1d5ae4c Move Privileged Extension to separate repo 2016-08-01 23:02:57 +02:00
Daniel Martí
d24f1034f4 Merge branch 'bumps' into 'master'
Various minor version bumps



See merge request !370
2016-08-01 06:07:38 +00:00
Daniel Martí
3726b2b7fa gradle: bump support libs to 24.1.1
Minor bugfix release.

Also bump the CI image with the new stuff.
2016-08-01 00:59:24 +02:00
Daniel Martí
c61a055ea8 Merge branch 'install-receiver' into 'master'
Merge download broadcast receivers

Previously, for all 4 states broadcast receivers were registered separately. These have now been merged into one receiver. IMHO this makes the code more readable and structured.

See merge request !368
2016-07-31 17:08:56 +00:00
Daniel Martí
d41cfe85d6 gradle: bump buildToolsVersion to 24.0.1 2016-07-31 18:40:06 +02:00
Daniel Martí
217bde1290 gradle: bump checkstyle, robolectric and PMD versions
All minor bugfix releases.
2016-07-31 16:41:25 +02:00
Dominik Schürmann
bfcc706167 Use AOSP Installer if permission check fails
If the old repo index is used and the
permission check fails in ApkVerifier
fallback to the AOSP DefaultInstaller
to show all permissions.
2016-07-29 18:16:00 +02:00
Dominik Schürmann
a442d539e4 Merge download broadcast receivers
Previously, for all 4 states broadcast receivers were registered
separately. These have now been merged into one receiver.
2016-07-29 01:56:49 +02:00
Dominik Schürmann
19a033db32 Use integers for SDK checks
More consistent with other checks as
introduced in e021eb5c
2016-07-29 01:30:52 +02:00
Dominik Schürmann
318f95b51e Fix install on Android 2.3
Cause: setType clears previously setUri.

Fixes #718
2016-07-27 16:23:26 +02:00
Dominik Schürmann
2e92dc941b Use App/Apk parceling instead of ContentVals
The usage of ContentValues to send App/Apk objects
to services was an hack in my opinion.
This hack broke in https://gitlab.com/fdroid/fdroidclient/merge_requests/359
where the packageName has been removed from the
toContentValues() method, which leads to NPEs in
the services.
2016-07-25 17:50:28 +02:00
Dominik Schürmann
321842836c Make App and Apk classes really Parcelable 2016-07-25 17:50:28 +02:00
Dominik Schürmann
ed76576a5c Fix RepoProviderTest
Somehow RepoProviderTest was not targetting SDK 23
2016-07-25 17:31:27 +02:00
Daniel Martí
7287acd822 Merge branch 'utils-7.0' into 'master'
Add 7.0 (24) to the versions list



See merge request !361
2016-07-25 13:17:10 +00:00
Daniel Martí
f9bfe2a877 Merge branch 'api-24' into 'master'
Api 24

Based on https://gitlab.com/fdroid/fdroidclient/merge_requests/352 with fixes for robolectric

See merge request !360
2016-07-25 12:58:46 +00:00
Daniel Martí
5f3448394c Add 7.0 (24) to the versions list 2016-07-25 14:55:56 +02:00
Dominik Schürmann
b37d07a829 Use Build.VERSION_CODES.N in installer classes 2016-07-25 14:45:34 +02:00
Dominik Schürmann
cbbc3ab60d Use sdk=23 for robolectric
* SDK 24 is currently not supported
2016-07-25 14:45:30 +02:00
Daniel Martí
53e812e198 Bump to 0.101-alpha3 2016-07-25 13:19:16 +02:00