678 Commits

Author SHA1 Message Date
n8fr8
884c8219fd put exception back into Log per this comment: https://gitlab.com/fdroid/fdroidclient/merge_requests/137 2015-09-10 21:26:28 -04:00
n8fr8
988f5dbfdc use TextUtils.isEmpty() - a better solution! 2015-09-10 21:26:28 -04:00
n8fr8
b6939dcce4 for #404 a few more tweaks to make sure things are getting closed! 2015-09-10 21:26:28 -04:00
n8fr8
b3f8ac0a5b related to #404 improvement to patterns to support close and discoverable
You must, must, must close the BT sockets else you run out of them.
This code tries to handle all the places where BT sockets may not get closed.
It also tries to tweak user experience/UI integration pieces in a few areas,
and handle some NPEs that can occur when BT fails.
2015-09-10 21:26:28 -04:00
n8fr8
0a96d17dd1 now handling empty repo fingerprint during check
- also support icondownloading over bluetooth
- also check for null repoUrl variable
2015-09-10 21:26:28 -04:00
n8fr8
c831cf77cc Many changes to swap workflow to get Bluetooth to work
- don't try to start BT in the background. you can only start/stop a BT server once, else new connections don't work
- be more mindful of reading/writing bytes from the input/output streams... make sure bytes are available, because you will block forever if you do not do that
- use the device class tag to filter devices in discovery instead of the fdroid name tag
- this now successfully connects but there is an error in the certificate fingerprint verification still
2015-09-10 21:26:28 -04:00
Hans-Christoph Steiner
a69488b32f HttpDownloader bypasses proxy when accessing a swap repo
Proxying are basically always for internet access, and swap repos are by
definition only on the local network.  This adds a pretty strict check for
whether a given download URL is for a swap repo, and if so, the proxy
settings are ignored.

fixes https://dev.guardianproject.info/issues/3421
2015-09-10 18:42:36 +02:00
Hans-Christoph Steiner
1654443b00 StrictMode only works in android-9 and above 2015-09-10 18:42:36 +02:00
Hans-Christoph Steiner
8d20135779 swap: close resources reported by StrictMode
This required rebuilding the zipsigner.jar, since there was once issue to
be fixed in kellingwood.security.zipsigner.ZipSigner.

Here are the stacktraces:

            StrictMode  E  A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
                        E  java.lang.Throwable: Explicit termination method 'close' not called
                        E      at dalvik.system.CloseGuard.open(CloseGuard.java:184)
                        E      at java.io.FileOutputStream.<init>(FileOutputStream.java:90)
                        E      at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
                        E      at java.io.FileWriter.<init>(FileWriter.java:42)
                        E      at org.fdroid.fdroid.localrepo.LocalRepoManager.writeIndexJar(LocalRepoManager.java:488)
                        E      at org.fdroid.fdroid.views.swap.SwapWorkflowActivity$PrepareSwapRepo.doInBackground(SwapWorkflowActivity.java:698)
                        E      at org.fdroid.fdroid.views.swap.SwapWorkflowActivity$PrepareSwapRepo.doInBackground(SwapWorkflowActivity.java:645)
                        E      at android.os.AsyncTask$2.call(AsyncTask.java:288)
                        E      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                        E      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                        E      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                        E      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                        E      at java.lang.Thread.run(Thread.java:841)
                        E  A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
                        E  java.lang.Throwable: Explicit termination method 'close' not called
                        E      at dalvik.system.CloseGuard.open(CloseGuard.java:184)
                        E      at java.io.RandomAccessFile.<init>(RandomAccessFile.java:128)
                        E      at kellinwood.zipio.ZipInput.<init>(ZipInput.java:57)
                        E      at kellinwood.zipio.ZipInput.read(ZipInput.java:75)
                        E      at kellinwood.security.zipsigner.ZipSigner.signZip(ZipSigner.java:646)
                        E      at org.fdroid.fdroid.localrepo.LocalRepoKeyStore.signZip(LocalRepoKeyStore.java:218)
                        E      at org.fdroid.fdroid.localrepo.LocalRepoManager.writeIndexJar(LocalRepoManager.java:515)
                        E      at org.fdroid.fdroid.views.swap.SwapWorkflowActivity$PrepareSwapRepo.doInBackground(SwapWorkflowActivity.java:698)
                        E      at org.fdroid.fdroid.views.swap.SwapWorkflowActivity$PrepareSwapRepo.doInBackground(SwapWorkflowActivity.java:645)
                        E      at android.os.AsyncTask$2.call(AsyncTask.java:288)
                        E      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                        E      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                        E      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                        E      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                        E      at java.lang.Thread.run(Thread.java:841)
                        E  A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
                        E  java.lang.Throwable: Explicit termination method 'end' not called
                        E      at dalvik.system.CloseGuard.open(CloseGuard.java:184)
                        E      at java.util.zip.Inflater.<init>(Inflater.java:82)
                        E      at kellinwood.zipio.ZioEntry.getInputStream(ZioEntry.java:475)
                        E      at kellinwood.zipio.ZioEntry.getInputStream(ZioEntry.java:445)
                        E      at kellinwood.security.zipsigner.ZipSigner.addDigestsToManifest(ZipSigner.java:418)
                        E      at kellinwood.security.zipsigner.ZipSigner.signZip(ZipSigner.java:713)
                        E      at kellinwood.security.zipsigner.ZipSigner.signZip(ZipSigner.java:647)
                        E      at org.fdroid.fdroid.localrepo.LocalRepoKeyStore.signZip(LocalRepoKeyStore.java:218)
                        E      at org.fdroid.fdroid.localrepo.LocalRepoManager.writeIndexJar(LocalRepoManager.java:515)
                        E      at org.fdroid.fdroid.views.swap.SwapWorkflowActivity$PrepareSwapRepo.doInBackground(SwapWorkflowActivity.java:698)
                        E      at org.fdroid.fdroid.views.swap.SwapWorkflowActivity$PrepareSwapRepo.doInBackground(SwapWorkflowActivity.java:645)
                        E      at android.os.AsyncTask$2.call(AsyncTask.java:288)
                        E      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                        E      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                        E      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                        E      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                        E      at java.lang.Thread.run(Thread.java:841)

StrictMode  E  A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
            E  java.lang.Throwable: Explicit termination method 'close' not called
            E      at dalvik.system.CloseGuard.open(CloseGuard.java:184)
            E      at java.io.FileOutputStream.<init>(FileOutputStream.java:90)
            E      at java.io.FileOutputStream.<init>(FileOutputStream.java:73)
            E      at java.io.FileWriter.<init>(FileWriter.java:42)
            E      at org.fdroid.fdroid.localrepo.LocalRepoManager.writeIndexJar(LocalRepoManager.java:488)
            E      at org.fdroid.fdroid.views.swap.SwapWorkflowActivity$PrepareSwapRepo.doInBackground(SwapWorkflowActivity.java:698)
            E      at org.fdroid.fdroid.views.swap.SwapWorkflowActivity$PrepareSwapRepo.doInBackground(SwapWorkflowActivity.java:645)
            E      at android.os.AsyncTask$2.call(AsyncTask.java:288)
            E      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            E      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            E      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            E      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            E      at java.lang.Thread.run(Thread.java:841)
            E  A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
            E  java.lang.Throwable: Explicit termination method 'close' not called
            E      at dalvik.system.CloseGuard.open(CloseGuard.java:184)
            E      at java.io.RandomAccessFile.<init>(RandomAccessFile.java:128)
            E      at kellinwood.zipio.ZipInput.<init>(ZipInput.java:57)
            E      at kellinwood.zipio.ZipInput.read(ZipInput.java:75)
            E      at kellinwood.security.zipsigner.ZipSigner.signZip(ZipSigner.java:646)
            E      at org.fdroid.fdroid.localrepo.LocalRepoKeyStore.signZip(LocalRepoKeyStore.java:218)
            E      at org.fdroid.fdroid.localrepo.LocalRepoManager.writeIndexJar(LocalRepoManager.java:515)
            E      at org.fdroid.fdroid.views.swap.SwapWorkflowActivity$PrepareSwapRepo.doInBackground(SwapWorkflowActivity.java:698)
            E      at org.fdroid.fdroid.views.swap.SwapWorkflowActivity$PrepareSwapRepo.doInBackground(SwapWorkflowActivity.java:645)
            E      at android.os.AsyncTask$2.call(AsyncTask.java:288)
            E      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            E      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            E      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            E      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            E      at java.lang.Thread.run(Thread.java:841)
            E  A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
            E  java.lang.Throwable: Explicit termination method 'end' not called
            E      at dalvik.system.CloseGuard.open(CloseGuard.java:184)
            E      at java.util.zip.Inflater.<init>(Inflater.java:82)
            E      at kellinwood.zipio.ZioEntry.getInputStream(ZioEntry.java:475)
            E      at kellinwood.zipio.ZioEntry.getInputStream(ZioEntry.java:445)
            E      at kellinwood.security.zipsigner.ZipSigner.addDigestsToManifest(ZipSigner.java:418)
            E      at kellinwood.security.zipsigner.ZipSigner.signZip(ZipSigner.java:713)
            E      at kellinwood.security.zipsigner.ZipSigner.signZip(ZipSigner.java:647)
            E      at org.fdroid.fdroid.localrepo.LocalRepoKeyStore.signZip(LocalRepoKeyStore.java:218)
            E      at org.fdroid.fdroid.localrepo.LocalRepoManager.writeIndexJar(LocalRepoManager.java:515)
            E      at org.fdroid.fdroid.views.swap.SwapWorkflowActivity$PrepareSwapRepo.doInBackground(SwapWorkflowActivity.java:698)
            E      at org.fdroid.fdroid.views.swap.SwapWorkflowActivity$PrepareSwapRepo.doInBackground(SwapWorkflowActivity.java:645)
            E      at android.os.AsyncTask$2.call(AsyncTask.java:288)
            E      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            E      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            E      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            E      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            E      at java.lang.Thread.run(Thread.java:841)
2015-09-10 18:42:35 +02:00
Daniel Martí
5bb5e3a96b Fix conflict between swap and privileged merges
Also avoid possible NPE in the package name comparison.
2015-09-09 21:35:38 -07:00
Daniel Martí
ed5de47197 Merge branch 'enhanced-priv-install' of https://gitlab.com/dschuermann/fdroidclient 2015-09-09 21:21:06 -07:00
Peter Serwylo
9848816df4 Fix bug introduced when resolving conflicts during rebase.
ApkDownloader now requires an `App` to be passed in.
2015-09-10 08:49:46 +10:00
Peter Serwylo
645f9fc5e3 Rename Utils.copy and Utils.symlinkOrCopyFile to indicate exception clobbering
Renamed to Utils.copyQuietly() and Utils.symlinkOrCopyFileQuietly().

The copy(File, File) method gobbles up IOExceptions, whereas the other
copy(InputStream, OupputStream) method doesn't. This could cause confusion,
whereas developers using one may not realise it is is gobblign their
exceptions.
2015-09-10 06:22:29 +10:00
Peter Serwylo
a09587c7e2 Use helper functions where appropriate. 2015-09-10 06:21:12 +10:00
Peter Serwylo
7b773f94f9 Make DownloadManager code file-agnostic, needn't be specific to "Apps"
This is mainly cosmetic, changing the names of variables so that the downloader
can seemingly be used for any type of download into the future.
2015-09-10 06:21:12 +10:00
Peter Serwylo
0a9941d93d Refactor AsyncDownloader to be an interface.
The interface is used by both AsyncDownloadWrapper and
AsyncDownloaderFromAndroid.
2015-09-10 06:21:12 +10:00
Peter Serwylo
d0d287f668 Remove undocumented params from JavaDoc.
Android Studio by default warns about undocumented params, which makes it harder
to identify more problematic warnings to do with actual code problems. This warning could
be toned down in the IDE so that it doesn't complain, but equally, the params are
not neccesary in JavaDoc if they are undocumented, and don't end up adding any more
than the parameters themselves.
2015-09-10 06:21:12 +10:00
Peter Serwylo
69ecaf023f Refactored AsyncDownloader to only ever be constructed by DownloadFactory. 2015-09-10 06:21:12 +10:00
Peter Serwylo
9b7c4c7b4a WIP: CR. 2015-09-10 06:21:11 +10:00
Toby Kurien
ef40b5f3db Now displays a notification when download is complete, unless use is already on the app details screen, in which case it pops up the installer immediately 2015-09-10 06:21:11 +10:00
Toby Kurien
13e54ced07 Display of app name and version in the download title 2015-09-10 06:21:11 +10:00
Toby Kurien
6f8b49c974 proper handling of file resources, implemented progress stats for async downloader 2015-09-10 06:21:11 +10:00
Toby Kurien
d10a56ed44 re-inserted log statement mistakenly removed 2015-09-10 06:21:11 +10:00
Toby Kurien
efd4ebeadf cleaned up code, prevented multiple app details screens popping up, fixed "no such app" toast after install 2015-09-10 06:21:11 +10:00
Toby Kurien
e827be1b5b when user clicks on notification, the app details screen now comes up. If there are multiple downloads, the first one is shown. 2015-09-10 06:21:11 +10:00
Toby Kurien
11caf22dc6 wip: app details now reloads details of running downloads 2015-09-10 06:21:11 +10:00
Toby Kurien
f9fee5beb0 wip: when a download is completed, app is woken up and app details screen displayed 2015-09-10 06:21:11 +10:00
Toby Kurien
5f989739bb wip: running download manager outside fdroid 2015-09-10 06:21:10 +10:00
Toby Kurien
dbd4c467f8 added asyndownloader to use DownloadManager when possible 2015-09-10 06:21:10 +10:00
Hans-Christoph Steiner
13c90e6c4a add HTTPS pins for good, free CAs: cert.startcom.org & letsencrypt.org
These are two good options for easy, free HTTPS certificates.  This should
help, but not fix, #238 https://gitlab.com/fdroid/fdroidclient/issues/238
2015-09-08 19:21:24 +02:00
Hans-Christoph Steiner
2c88703588 use NetCipher to get improved TLS and cipher support on HTTPS connections
The NetCipher library creates instances of HttpURLConnection that are
configured to have solid TLS protocol and cipher settings, especially on
older versions of Android.

fixes #370 https://gitlab.com/fdroid/fdroidclient/issues/370
2015-09-08 19:19:30 +02:00
Hans-Christoph Steiner
1f607d3e6d improve net check for index updates; update index on app start
This remove the magic number "1" from the network state check, and makes
explicit that it is checking the active network connection.

This is then used to check whether it is appropriate to update the index
when FDroid first starts.
2015-09-08 19:19:29 +02:00
Dominik Schürmann
1fd85f40e7 Install privileged methods 2015-09-07 01:40:37 +02:00
Dominik Schürmann
5bfc30651a Refactor, allow installPrivileged from apk path 2015-09-07 01:40:37 +02:00
Dominik Schürmann
57af421561 Check if PrivilegedInstaller is available, adapt InstallPrivileged 2015-09-07 01:38:49 +02:00
Dominik Schürmann
85c8e7035d Move shared AIDL files into lib, restructure, start of install/delete code 2015-09-07 01:38:48 +02:00
Dominik Schürmann
e87693d989 Add Privileged F-Droid project 2015-09-07 01:37:07 +02:00
Dominik Schürmann
d530a1cf56 Restructure installer packages 2015-09-07 01:37:06 +02:00
Daniel Martí
9e85911b5d StrictMode fix: close cached keystore file 2015-09-05 23:45:45 -04:00
Daniel Martí
cb9290fb89 Detect all VM policy penalties 2015-09-05 23:35:39 -04:00
Daniel Martí
8b7eba6698 StrictMode fix: close streams in local repo assets 2015-09-05 23:31:19 -04:00
Daniel Martí
bd1db5412b Add StrictMode to the entire app, fixes #399
Only enabled on debug builds. With only logs for now, we can move on to more
annoying penalties like dialogs or crashes once we have solved all of them.
2015-09-05 23:30:59 -04:00
Daniel Martí
6214b7f659 Merge branch 'issue-395' 2015-09-05 22:16:15 -04:00
Peter Serwylo
3213fd2ba1 Merge branch 'new-swap' 2015-09-06 08:37:26 +10:00
Daniel Martí
10171d9228 Installer: handle package parse errors, fixes #395 2015-09-03 18:52:40 -07:00
Daniel Martí
74c93907c5 Don't call onAppChanged() if install was cancelled
It should have not changed anything about the app. It should make AppDetails
update anything as needed just like returning from any other activity.
2015-09-03 18:49:31 -07:00
Daniel Martí
c43505befb Fix tests by making a method explicitly protected
This was making proguard complain and refuse to continue. This fix should not
alter how F-Droid works, it's just to make the tests function with proguard
enabled.
2015-09-02 16:10:06 -07:00
Peter Serwylo
f635df8502 Merge branch 'master' into new-swap 2015-09-02 17:01:58 +10:00
Hans-Christoph Steiner
303de3d972 temporarily disable broken HTTPS support in swap
Right now, turning on HTTPS really just prevents things from working.  It
is not fully required, since swapping is only local connections, so not
easily susceptible to mass eavesdropping, though it would be nice.  I'm
leaving the rest of the plumbing for this here intact for when we come back
to getting swap always using HTTPS.

closes #378 https://gitlab.com/fdroid/fdroidclient/issues/378
2015-08-27 11:05:36 +02:00
Hans-Christoph Steiner
04e318c9ca force swap X.509 cert generation to use English/Gregorian times
When using locales that use different calendars, like Farsi, Arabic,
Hebrew, etc. there was a crash in spongycastle's X.509 generation because
it was trying to parse a Farsi date string as English.

fixes #334 https://gitlab.com/fdroid/fdroidclient/issues/334

Here's the original stacktrace:
    java.lang.IllegalArgumentException: invalid date string: Unparseable date: "ñõðøòñðóñõõóGMT+00:00" (at offset 0)
            at org.spongycastle.asn1.ASN1UTCTime.<init>(ASN1UTCTime.java:115)
            at org.spongycastle.asn1.DERUTCTime.<init>(DERUTCTime.java:23)
            at org.spongycastle.asn1.x509.Time.<init>(Time.java:67)
            at org.spongycastle.cert.X509v3CertificateBuilder.<init>(X509v3CertificateBuilder.java:40)
            at org.fdroid.fdroid.localrepo.LocalRepoKeyStore.generateSelfSignedCertChain(LocalRepoKeyStore.java:301)
            at org.fdroid.fdroid.localrepo.LocalRepoKeyStore.generateSelfSignedCertChain(LocalRepoKeyStore.java:281)
            at org.fdroid.fdroid.localrepo.LocalRepoKeyStore.<init>(LocalRepoKeyStore.java:136)
            at org.fdroid.fdroid.localrepo.LocalRepoKeyStore.get(LocalRepoKeyStore.java:73)
            at org.fdroid.fdroid.net.WifiStateChangeService$WaitForWifiAsyncTask.doInBackground(WifiStateChangeService.java:124)
            at org.fdroid.fdroid.net.WifiStateChangeService$WaitForWifiAsyncTask.doInBackground(WifiStateChangeService.java:62)
2015-08-27 11:05:35 +02:00