1118 Commits

Author SHA1 Message Date
Hans-Christoph Steiner
2a9c3fee5b purge all code blocks for < android-14, except installer stuff
The installer stuff should hopefully become a standalone library, so that
might as well keep the old support in place.

#1379
2018-04-19 15:51:44 +02:00
Hans-Christoph Steiner
6fbdd1210e update to the latest version of the Android support libraries
This requires bumping compile and built-tools verisons.
2018-04-19 15:51:43 +02:00
Hans-Christoph Steiner
9e0de9ac69 rudimentary support for JobScheduler to run updates
The new JobScheduler API can opportunitistically run a job based on whether
there is good internet, connected to power, etc.  This is very useful for
running updates.  Ideally, updates would always happen in the background
while on unmetered internet and connected to power.

#588
2018-04-18 23:07:36 +02:00
Hans-Christoph Steiner
e36d7719b3 trigger an update after joining good wifi without JobSchedule
Each time the device connects to a wifi network, this waits for 2 minutes,
then if the wifi is still connected, it re-schedules the index update to
happen now.  The goal is to favor unmetered networks as much as possible
when downloading the index and any automatic app updates.

This is only needed on older platforms, JobScheduler handles this for us on
android-21+
2018-04-18 23:07:36 +02:00
Hans-Christoph Steiner
7d9f5e880c move update scheduling entirely to AlarmManager
This changes the flow of the update triggering so that any Intent sent to
UpdateService can potentially trigger an update, depending only on the
state of the internet and the "Only on WiFi" preference.  Instead of having
a timer that checks every hour to see if it is time to run the update, just
let AlarmManager send a trigger Intent based on the timing in the
"Update Interval" setting.

The update schedule is reset each time F-Droid restarts, and also each time
the user returns from the settings, so if AlarmManager fails us in the time
being, the updates will be rescheduled next time F-Droid is restarted, the
device is rebooted, etc.

refs #662
2018-04-18 22:04:52 +02:00
Hans-Christoph Steiner
5f3e952958 move "Update Interval" pref handling to Preferences class
Basically all of the settings are handled in the Preferences class now,
this was an outlier.
2018-04-18 21:56:14 +02:00
Hans-Christoph Steiner
2615c461f2 debounce incoming "WiFi Connected" events for reliable status
Some devices send multiple copies of given events, like a Moto G often
sends three {@code CONNECTED} events.  So they have to be debounced to
keep the {@link #BROADCAST} useful.
2018-04-18 17:14:22 +02:00
Hans-Christoph Steiner
045fc1a35e make "Scan QR" immediately show the QR screen, not "Select Apps" 2018-04-18 17:14:22 +02:00
Hans-Christoph Steiner
fa1331139f delete all swap repos when before swap starts and after it stops
For now, swap repos are only trusted as long as swapping is active.  They
should have a long lived trust based on the signing key, but that requires
that the repos are stored in the database by fingerprint, not by URL
address.

#295
#703
2018-04-18 17:14:22 +02:00
Hans-Christoph Steiner
b9c247e2b1 if WifiManager fails to return netmask, directly query net interfaces
Google broke returning the netmask somewhere around android-21. This could
be done using more official APIs, but this reuses stuff that needs to be
there anyway.

closes #577
https://code.google.com/p/android/issues/detail?id=82477#c5
https://issuetracker.google.com/issues/37015180
2018-04-18 17:14:22 +02:00
Hans-Christoph Steiner
3fd1b055b3 tame debug logging in CompatibilityChecker
It makes a huge dump on every index refresh, making troubleshooting other
things around the index hard.
2018-04-18 17:14:22 +02:00
Hans-Christoph Steiner
eb77f72cd2 store last working mirror per repo
For mirroring to work on multiple repos, this must be stored and used per-
repo.  The timeout and number of tries seem fine to keep global to reduce
the total amount of mirror churn when this logic is searching.
2018-04-18 09:53:16 +02:00
Hans-Christoph Steiner
21e3124b5f prevent crash when starting swap on devices without Bluetooth/WiFi
This was introduced in f90b030e76ddb03e00bc0d46977c01c1bae3936d
2018-04-18 09:53:16 +02:00
Hans-Christoph Steiner
c42d7164cf exclude ROM apps from default swap app listing
Apps that are built as part of the ROM and signed by the platform keys
should very rarely be swapped.  This removes them from the default
list by comparing the signing keys.

This filter is deliberately only included on the list function and not on
the search function.  If people want to share system apps, they'll be able
to find them with the search function, but the system apps won't show up
by default.

https://source.android.com/devices/tech/ota/sign_builds#certificates-keys

closes #440
2018-04-18 09:53:16 +02:00
Hans-Christoph Steiner
36c76070e5 Apk.versionName can be null, and the code should handle it
closes #1418
2018-04-17 15:30:56 +02:00
Hans-Christoph Steiner
94818e36bf fix swap to work with APKs with blank versionNames
fdroidclient#1418
fdroiddata!3061
2018-04-17 15:30:56 +02:00
Hans-Christoph Steiner
eac85e725f debug logging in release builds for disappearing F-Droid 2018-04-16 17:00:23 +02:00
Hans-Christoph Steiner
c770d4ef18 prefer WiFi in Send F-Droid when the conditions dictate that 2018-04-13 00:26:54 +02:00
Hans-Christoph Steiner
f07e5c040c when user selects WiFi over Hotspot, make sure WiFi is enabled 2018-04-13 00:20:55 +02:00
Hans-Christoph Steiner
444ecd024b when user turns on swap WiFi visibility, ensure that WiFi is on 2018-04-13 00:20:55 +02:00
Hans-Christoph Steiner
570b532bd6 prompt user for WRITE_SETTINGS permission when setting up Hotspot
closes #656
2018-04-13 00:20:55 +02:00
Hans-Christoph Steiner
f90b030e76 save and restore Bluetooth/WiFi swap state and previous state
This should make swap remember if Bluetooth/WiFi was disabled when swapping
started, then automatically disable it when swapping is done. This also
makes swapping remember the swap "visibility" that the user set, and restore
that when the user starts swapping again.  There are logic bugs elsewhere
in the whole thing that prevent this from always working, but the state
should be set and stored properly.
2018-04-13 00:20:55 +02:00
Hans-Christoph Steiner
57e4315e18 quit BluetoothServer when Bluetooth is disabled 2018-04-13 00:20:54 +02:00
Hans-Christoph Steiner
73ad5bd6b3 update to latest jmDNS for more reliable detection
closes #612
2018-04-13 00:20:54 +02:00
Hans-Christoph Steiner
6b4b85d396 entirely purge AndroidHttpClient from the code base.
closes #586
2018-04-13 00:20:54 +02:00
Hans-Christoph Steiner
9cb53e93d0 allow Bluetooth swap to work when there is no available internet
#1393
2018-04-13 00:20:54 +02:00
Hans-Christoph Steiner
615e559ce1 only prompt to swap back to proper swap URLs
Before, it was possible to annoy the user by sending HTTP POST with any
repo URL in it.
2018-04-13 00:20:52 +02:00
Hans-Christoph Steiner
86e128b7e8 document F-Droid's use of HTTP 2018-04-11 11:34:12 +02:00
Hans-Christoph Steiner
b523ecc969 check redelivered Intents whether they completed while we were killed
If F-Droid gets killed during the install/update process, then the install
procedure would keep getting readded and redownloaded since it is a sticky
Intent.  The test is very specific so that this does not block things like
installing updates with the same versionCode, which happens sometimes, and
is allowed by Android.

#1271
2018-04-11 11:34:12 +02:00
Hans-Christoph Steiner
1413c35342 use standard method for basic installed app queries
Makes easy to track where these lookups are happening, and hopefully
simplifies the code a bit.
2018-04-11 11:34:09 +02:00
Hans-Christoph Steiner
af509e431e reformat localrepo code in using Android Studio Ctrl-Alt-L 2018-04-11 11:26:55 +02:00
Hans-Christoph Steiner
5bd276c804 make "Only on WiFi" also apply to updates, graphics, and icons
The "Only on WiFi" pref originally only controlled index updates, but now
it makes sense to include all of the various files that are downloaded.

#1381
2018-04-06 15:50:57 +02:00
Hans-Christoph Steiner
7ba1966538 use standard code style and var naming patterns for AppDiff
The standard pattern is to pass a Context in rather than call things like
getPackageManager in.  It should only pass a PackageManager if that is
actually being reused.

This shouldn't change the logic at all.
2018-04-06 12:01:53 +02:00
Hans-Christoph Steiner
98aea01272 remove confusing Exception when checking permissions
Might as well just let things fail with a NullPointerException, that will
provide more information around the crash.
2018-04-06 12:01:53 +02:00
Hans-Christoph Steiner
b5adf7d0ef document ignoring EXIF 2018-04-06 12:01:53 +02:00
Hans-Christoph Steiner
4a0dd8abe7 when storage is low, make UIL limit cache based on available size 2018-04-05 23:28:53 +02:00
Hans-Christoph Steiner
c1656f61a7 if device storage is really low, delete the entire cache 2018-04-05 23:28:53 +02:00
Hans-Christoph Steiner
af32e4ac85 trigger CleanCacheService if device storage is low 2018-04-05 23:28:53 +02:00
Hans-Christoph Steiner
661aebb75f properly gather all requested permissions from index-v1.json
The permissions from uses-permission and uses-permission-sdk-23 should be
combined into a single list of permissions that are being requested for the
current SDK version.  The previous code was overwriting one or the other,
based on the order that Jackson happen to call setRequestedPermissions().

closes #1139
#890
#1394
admin#65
2018-04-05 23:28:53 +02:00
Hans-Christoph Steiner
688057b3e7 fix some progress vars that were still int rather than long
This completes the work started in 195aaae7e52dc1c47741965904ed17bdc816a71c

closes #1395
closes #1400

# Conflicts:
#	app/src/main/java/org/fdroid/fdroid/UpdateService.java
2018-04-05 23:28:49 +02:00
Hans-Christoph Steiner
2c6ed51a35 fix last long lines in UpdateService 2018-04-05 23:26:06 +02:00
Hans-Christoph Steiner
48e438d510 declare some key vars final to help the compiler optimize those
Apparently, the Java compiler can in some cases reuse a final value instead
of executing a method again.  This is from @hotlittlewhitedog

!653
2018-04-04 17:43:11 +02:00
Hans-Christoph Steiner
fa9a4ce608 scale all images to the exact required size to save memory/disk
!661
https://gitlab.com/fdroid/fdroidclient/merge_requests/653#note_65065867
2018-04-04 17:43:11 +02:00
Hans-Christoph Steiner
cb5923e03b ensure images are never larger than device supports
In order to save disk space and memory, at a cost of some CPU time,
this makes sure that all downloaded images are not bigger than the
device can support.  A nice side effect of this process is that EXIF
information is stripped from JPEG files since they are read into a
Bitmap, then written out as a PNG.  This should complete the JPEG EXIF
stripping started in 2a3aaacf2347679f30e2c8feffb92f25bb882c8b with
considerExifParams(false)
!653
2018-04-04 17:43:08 +02:00
Hans-Christoph Steiner
258d2a41c3 do not include blank fingerprints in AddRepo fingerprintRepoMap 2018-03-30 14:05:06 +02:00
Hans-Christoph Steiner
67a5156641 remove verbose logging from InstalledAppProvider stuff 2018-03-30 14:05:06 +02:00
Hans-Christoph Steiner
2b8bfd4aa6 show placeholder image if screenshots fail to load 2018-03-30 14:05:06 +02:00
Hans-Christoph Steiner
c83c8301e6 improve URL normalizing in "Add Repo" and also support content:// URLs
This adds some case normalization to both the scheme and the host. This was
previously messing up TreeUri content:// URLs like this:
content://com.android.externalstorage.documents/tree/1AFB-2402%3A/document/1AFB-2402%3Atesty.at.or.at%2Ffdroid%2Frepo

Turning them into:
content://com.android.externalstorage.documents/tree/1AFB-2402:/document/1AFB-2402:testy.at.or.at/fdroid/repo
2018-03-30 14:05:06 +02:00
Hans-Christoph Steiner
06f42f864f don't crash in "Add Repo" if an invalid URL is given
Oops, missed this in 89e04cc078bb96a6999ccc4a42f23800272e2be2
2018-03-30 14:05:06 +02:00
Hans-Christoph Steiner
3f3ff5ffd7 further simplification of Downloader based on Uri
missed this in df08e84e7829652d7999eee5451080a012b00a1e
2018-03-30 14:05:06 +02:00