Commit graph

11190 commits

Author SHA1 Message Date
Dirk Hohndel
bb43a3fa32 whitespace cleanup for previous commit
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 12:46:59 -05:00
Dirk Hohndel
0a0d7b48e9 QML UI: press and hold for delete dive on dive list
This looks a little rough, but I think it works well. I'm sure it could
be prettier, though. The next patch will just do the white space cleanup
for the additional indentation level.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 12:46:59 -05:00
Dirk Hohndel
69c10808af QML UI: don't go through manager object to show map
We can open URLs in the browser directly from QML.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 12:46:59 -05:00
Dirk Hohndel
f677d482e9 QML UI: don't go through manager object to open user manual
We can open URLs in the browser directly from QML.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 07:02:44 -05:00
Miika Turkia
7e47874adb SDM import: fix logic for sample import
Seems that testing if BOOKMARK is empty is a bad idea. We end up not
getting any samples, but the ones containing a bookmark. So we need to
switch the logic to testing if BOOKMARK contains something and do those
tasks first and otherwise grab a regular sample.

Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 06:29:25 -05:00
Miika Turkia
19400b8da1 SDM import: calculate duration if needed
Seems that DiveManager does not always return the dive duration in
DIVETIMESEC field. In this case we can try to calculate the duration
from sample count and interval.

Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 06:28:51 -05:00
Dirk Hohndel
094ff8c681 QML UI: all these changes certainly deserve a new version
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 23:05:28 -05:00
Dirk Hohndel
48362ae11a QML UI: when on the dive list, action button now offers add dive
This seems like a useful default action when people are looking at the dive
list (and it's a request from a user to have this as a button instead of just
via the menu).

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 22:31:33 -05:00
Dirk Hohndel
7d62ce5295 QML UI: add an "add" icon
Again, proudly borrowing from the breeze icon set.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 22:31:23 -05:00
Dirk Hohndel
9b1d142f3a QML UI: put add dive action in a function
This way we can call this from a button as well as the menu.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 22:29:39 -05:00
Dirk Hohndel
b158d55474 qml white space fixes
Left over from the merge of the Kirigami 1.0 port

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 22:29:06 -05:00
Dirk Hohndel
e036ee71ad QML UI: add space at the top of dive details view
With the switch to Kirigami 1.0 it seems that the top bar now overlaps
the page.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 21:39:55 -05:00
Dirk Hohndel
faa22d5343 QML UI: animate showing the dive edit sheet
This requires a change to Kirigami so that a property change (instead of
calling the open() function) can trigger the animation.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 21:15:58 -05:00
Dirk Hohndel
6c8736adb8 QML UI: end editing mode when edit overlay is flicked offscreen
Just changing the state isn't quite enough.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 21:14:59 -05:00
Dirk Hohndel
39799228af QML UI: fix small bug in main menu
One Action hadn't been converted to a Kirigami.Action.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 20:40:12 -05:00
Dirk Hohndel
3aa219c689 Merge branch 'mergeKirigamiPort' 2016-04-01 20:28:58 -05:00
Linus Torvalds
a554c66fa3 Fix cylinder end pressure fixup from samples
This bug admittedly hits almost nobody, but if you had multiple cylinder
pressure sensors on the same cylinder (attached to multiple dive
computers, of course), we would take the beginning pressure from the
first dive computer, and the ending pressure from the last dive
computer.

That came about because we'd just walk all the dive computer samples in
order, and the first time we see a relevant sample and we don't have a
beginning pressure, we'd take that pressure.  So the beginning pressure
was from the first dive computer, and once we'd seen a valid beginning
pressure, that would never change.

But as we're walking along, we'd continue to update the ending pressure
from the last relevant sample we see, which means that as we go on to
look at the other dive computers, we'd continue to update the ending
pressure with data from them.

And mixing beginning/ending pressures from two different sensors just
does not make sense.

This changes the logic to be the same for beginning and ending
pressures: we only update it once, with the first relevant sample we
see.  But we walk the samples twice: forwards from the beginning to
find the first beginning pressure, and backwards from the end to find
the ending pressure.

That means that as we move on to the second dive computer, we've now
filled in the ending pressure from the first one, and will no longer
update it any more.

NOTE! We don't stop scanning the samples (or the dive computers) just
because we've found a valid pressure value.  We'll always walk all the
samples because there might be multiple different cylinders that get
pressure data from different samples (and different dive computers).

We could have some early-out logic when we've filled in all relevant
cylinders, but since this just runs once per dive it's not worth it.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 20:18:53 -05:00
Linus Torvalds
f92e2e752f Split up fixup_dive_dc() into multiple smaller independent functions
fixup_dive_dc() is called for each dive computer when we add a new dive.
It does various housekeeping functions, cleaning up the sample data, and
fixing up dive details as a result of the sample data.

The function has grown to be a monster over time, and particularly the
central "walk every sample" loop has become an unreadable mess.

And the thing is, this isn't even all that performance-critical: it's
only done once per dive and dc, and there is no reason to have a single
illegible and complex loop.

So split up that loop into several smaller pieces that each will loop
individually over the sample data, and do just one thing.  So now we
have separate functions for

 - fixing up the depth samples with interpolation
 - fixing up dive temperature data
 - correcting the cylinder pressure sensor index
 - cleaning up the actual sample pressures

Yes, this way we walk the samples multiple times, but the end result is
that the code is much easier to understand.  There should be no actual
behavioral differences from this cleanup, except for the fact that since
the code is much more understandable, this cleanup also fixed a bug:

In the temperature fixup, we would fix up the overall dive temperatures
based on the dive computer temperatures.  But we would then fix up the
overall dive computer temperature based on the sample temperature
*afterwards*, which wouldn't then be reflected in the overall dive
temperatures.

There was another non-symptomatic bug that became obvious when doing
this cleanup: the code used to calculate a 'depthtime' over the dive
that was never actually used.  That's a historical artifact of old code
that had become dead when the average depth calculations were moved to a
function of their own earlier.

This is preparatory for fixing the overall cylinder pressure stats,
which are currently wrong for dives with multiple dive computers: we
currently take the starting cylinder pressure from the *first* dive
computer that has cylinder pressure information, but we take the ending
cylinder pressure from the *last* dive computer with cylinder pressure
information.

This does not fix that bug, but without this cleanup fixing that would
be a nightmare due to the previous complicated "do everything in one
single loop" model.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 20:17:40 -05:00
Dirk Hohndel
cace666741 QML UI: avoid having the virtual keyboard show briefly at startup
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 20:15:44 -05:00
Dirk Hohndel
f19ffb28c6 Minor tweak to script to pull Kirigami
This just allows the script to be used when you are working locally on
Kirigami to test changes - no point in waiting for a pull from upstream
then. The only goal is to copy the files over.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 20:13:33 -05:00
Dirk Hohndel
80bfccdf33 QML UI: better visual arrangement of the dive list
Make the lines that together form one dive move closer together so the dives
visually stand out more.

(this also includes small white space change, oops)

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 16:56:16 -05:00
Dirk Hohndel
c117a7be6e QML UI: make the dive list font even darker
Still not black, though - there's an opacity setting somewhere that I must be
missing.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 16:55:24 -05:00
Dirk Hohndel
74f8d50264 QML UI: use the new Kirigami option to control the title bar sizes
I liked the default and the fact that it disappeared completely, but the big
size was a bit too much...

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 16:54:22 -05:00
Dirk Hohndel
fba14709bc Disable kirigami plugin when copying the components
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-01 16:40:07 -05:00
Dirk Hohndel
2efa047999 Merge branch 'kirigamiPort' of https://github.com/sebasje/subsurface into mergeKirigamiPort
This merge was a bit more challenging given how far things had diverged,
but I hope I got it mostly right.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-31 22:36:15 -05:00
Dirk Hohndel
2069526e74 Update script to pull Kirigami
Now with it's own repository and slightly different paths.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-31 18:43:58 -05:00
Dirk Hohndel
cc2b815a4d QML UI: simplify the code to cancel edit / add
This way we have one function that correctly ends both modes.
As a positive side effect this fixes a bug where one could exit the
add mode by tapping Dive list in the main menu which would not delete
the partially created dive.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-30 20:49:00 -05:00
Dirk Hohndel
6a3e761d8f QML UI: scroll to top of dive list when tapping title bar
This helps you get to the latest dive when you are stuck at the bottom
of a dive list.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-30 20:39:25 -05:00
Dirk Hohndel
1cf1fa9cac QML UI: add property to reflect when dive list is shown
This makes it easier to have actions that are only valid in this case.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-30 20:38:51 -05:00
Dirk Hohndel
13c49276d1 Revert "QML UI: make dive list fold dive trips"
This reverts commit 83c72e7a79.

The folding as implemented is too painfully slow and buggy on devices.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-30 20:17:41 -05:00
Dirk Hohndel
27a62a0210 Revert "QML UI: make dives outside of dive trips always visible"
This reverts commit a065b97472.

The folding as implemented is too painfully slow and buggy on devices.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-30 20:16:50 -05:00
Linus Torvalds
f0be2764da Be smarter about dive renumbering when merging dives
We really have two different cases for merging dives:

 (a) downloading a new dive from a dive computer, and merging it with an
     existing dive that we had already created using a different dive
     computer.  This is the "try_to_merge()" case, called from
     "process_dives()

 (b) merging two different dives into one longer dive.  This is the
     "merge_two_dives()" case when you explicitly merge dives using the
     divelist.

While a lot of the issues are the same, many details differ, and one of
the details is how dive numbering should be handled.

In particular, when you download from a dive computer and merge with an
existing dive, you want too take the *maximum* dive number, because the
dive computer notion of which dive it is may well not match what the
user dive number is.

On the other hand, when you explicitly merge in the dive list, you end
up renumbering not just the dive you are merging, but also all
subsequent dives, since you now have one fewer dives overall.  So that
case already has to be handled by the caller.

Now, the simpler "download from dive computer" case was broken by commit
ce3a78efca ("Assign lower number to a merged dive instead of higher
one").  It fixed the numbering for the divelist case, but broke the
download case.

So this commit reverts commit ce3a78efca, and instead extends and
clarifies the dive renumbering that "merge_two_dives()" already did.  It
now explicitly renumbers not just the following dives, but also
renumbers the merged dive itself, so now we can go back to the old "take
the bigger dive number" for the core merging, which fixes the download
case.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-30 20:16:19 -05:00
Dirk Hohndel
94a549e767 QML UI: brute force password saving
This is embarrassing. I should have done this in the first place instead
of trying to hack around it.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-29 21:43:37 -05:00
Dirk Hohndel
cae180036e QML UI: really force passwords to be saved
The logic looked so easy, but the preference needs to be hard coded twice
because there are two scenarios:
- new install, make sure we load the password from settings (so it needs
  to be hard coded BEFORE we load preferences)
- update where previously for some reason the user stored that they
  didn't want to store the password, so we need to also hard code it after
  the settings were loaded

Looks odd, but that should do the trick.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-29 21:23:28 -05:00
Dirk Hohndel
5e8930a179 If the cache was valid, we don't want to reload just because of changes
This was exactly backwards. If there already are changes we do NOT want to
reload - that would overwrite those changes for no good reason; after all, the
starting point was correct, so why throw the changes away?

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-29 20:46:12 -05:00
Dirk Hohndel
501f8ba6a4 QML UI: remove a few obsolete properties and references
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-29 20:24:34 -05:00
Dirk Hohndel
a11e719f1a QML UI: add SAC rate to dive detail view
Not sure why this wasn't there before, it's certainly one of the more
interesting values for me.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-29 20:18:06 -05:00
Dirk Hohndel
a065b97472 QML UI: make dives outside of dive trips always visible
Create small visible separation from the dive trip before. And make the dive
trip header a slightly different color so they stand out between dives.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-29 20:08:15 -05:00
Dirk Hohndel
83c72e7a79 QML UI: make dive list fold dive trips
This makes it MUCH easier to deal with a lot of dives.

Instead of needing a more complicated model we simply use the meta data that
allows us to create the dive trip sections to hide (make invisible + height 0)
all dives that aren't in the selected trip.

I'll admit that this was much easier than I expected it to be.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-29 19:42:34 -05:00
Dirk Hohndel
1b0c3d8df5 Update mobile version
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-28 17:05:49 -05:00
Dirk Hohndel
dd0d88f9d7 QML UI: take device pixel ratio into account when scaling pixmaps on iOS
This way warning icons and tank change icons and other event markers are no
longer ridiculously tiny on retina screens. Oddly this doesn't appear to be
needed on Android, only on iOS.

Fixes #1033

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-28 17:05:29 -05:00
Dirk Hohndel
8185d24e61 QML UI: force local saving of password
commit d99c931219 ("QML UI: remove the checkbox for remembering the
password") made the incorrect assumption that this would always be true
by default when it actually was false by default. Oops.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-27 19:28:31 -05:00
Dirk Hohndel
4670373731 QML UI: tighten credential input screen
This way even on smaller screens both email and password should fit
above the keyboard which makes data entry so much easier.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-27 19:10:58 -05:00
Dirk Hohndel
a4977f2a90 QML UI: add some diagnostics to App log
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-26 21:49:20 -07:00
Dirk Hohndel
d4357b3b21 QML UI: allow writing to App log from QML
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-26 21:49:19 -07:00
Dirk Hohndel
7434e4213b QML UI: show keyboard when entering credential screen
If the user goes to the credentials screen, they likely want to edit
something.  So put the focus on the first entry field and show the
keyboard.

We also need to hide the keyboard when the credential screen becomes
invisble so that the keyboard doesn't stay around when the dive list
is shown.

Suggested-by: Henrik Brautaset Aronsen <subsurface@henrik.synth.no>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-26 21:49:19 -07:00
Robert C. Helling
e216f91ebc Prevent unintentionally running as root
Some users try to run Subsurface as root for example to get around
permission problems with dive computer devices. This is a bad idea
since config files get touched as root and then cannot be read
as normal user anymore.

This patch allows running as root only with verbose option on. We can
assume if somebody manages to start subsurface as root this happens
from the command line.

For some reason, I couldn't get translation working at this stage.

Windows version is a stub.

Signed-off-by: Robert C. Helling <helling@atdotde.de>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-26 20:08:08 -07:00
Dirk Hohndel
d99c931219 QML UI: remove the checkbox for remembering the password
In the context of the mobile app this simply makes no sense. If the user
doesn't select this option, the app doesn't really work. So why have the option
in the first place?

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-24 21:42:20 -07:00
Dirk Hohndel
246422d03f iOS build: fix typos
Can't believe I didn't notice them earlier... I must have stared at these
strings countless times.

Reported-by: Scott Ireland <scott@sdj.ca>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-24 21:36:42 -07:00
Dirk Hohndel
8f5a662441 QML UI: add the position source reported to the log
I've seen iPads without GPS report that they support satellite positioning.
Seems like a Qt bug to me.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-03-24 17:48:20 -07:00