Commit graph

536 commits

Author SHA1 Message Date
Linus Torvalds
2d760a7bff Don't write back dive data that hasn't changed in git
This caches the git ID for the dive on load, and avoids building the
dive directory and hashing it on save as long as nothing has invalidated
the git ID cache.

That should make it much faster to write back data to the git
repository, since the dive tree structure and the divecomputer blobs in
particular are the bulk of it (due to all the sample data).  It's not
actually the git operations that are all that expensive, it's literally
generating the big blob with all the snprintf() calls for the data.

The git save used to be a fairly expensive with large data sets,
especially noticeable on mobile with much weaker CPU's.  This should
speed things up by at least a factor of two.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 17:27:10 -07:00
Dirk Hohndel
2b36091599 QML UI: include the new back button for iOS
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:55:14 -07:00
Dirk Hohndel
1bbf6ab8a8 Revert "QML UI: make sure the correct data is in the bread crumbs"
This reverts commit 410fd222d1.

The change this relied on was rejected by upstream Kirigami

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:24:19 -07:00
Dirk Hohndel
e0ad3c85d1 QML UI: animate showing the dive edit sheet
This now uses the correct property to open the OverlaySheet.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:23:07 -07:00
Dirk Hohndel
d8ec9597fa Revert "QML UI: animate showing the dive edit sheet"
This reverts commit faa22d5343.

Upstream Kirigami already had a property to do this. Oops.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:22:16 -07:00
Dirk Hohndel
e50a3470c1 QML UI: rate limit git progress output
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:19:24 -07:00
Dirk Hohndel
9283332b95 Use the same format for output to stderr and AppLog
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:19:13 -07:00
Dirk Hohndel
f7564c2b77 QML UI: keep cloud sync enabled state in settings
So if the app gets closed and restarted, it will continue to not sync (or
sync) over the network.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:18:51 -07:00
Dirk Hohndel
bb74144860 QML UI: allow user to disable automatic cloud sync
This is useful if you are in an area with slow or spotty network and if
you are fine with just saving to the phone. In order to sync to the cloud
you either have to manually sync via the menu or turn this back on and
hide the application.

The commit also removes the old refresh from the Manage dives menu as the
semantic of that was possibly destructive now that we no longer
immediately save changes to git - those could be thrown away by selecting
refresh before the app had a chance to save them.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:18:41 -07:00
Dirk Hohndel
616842c8c0 QML UI: be more careful when to show us accessing the cloud
There may be other paths where we potentially show the wrong status to
the user... but at least with this it times out eventually; there
shouldn't be any single operation that isn't broken down with progress
markers that takes more than 10 seconds, so keeping the notification
around for 30 seconds seems very conservative.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:18:32 -07:00
Dirk Hohndel
4af9ee5dea QML UI: don't immediately save data after we make changes
Much as this felt like the prudent thing to do, it makes the UI painful
to use.  In bad network conditions, with a large dive log, on a phone,
the save operation can take more than a minute - which is just completely
ludicrous.

So instead we mark the dive list changed when we make changes and wait
for the app to not be in the foreground. Once the OS tells us that we are
hidden (on the desktop that generally means we don't have focus, on a
mobile device it usually does mean that the app is not on the screen), we
check if there are data to be saved and do so.

There is of course a major problem with this logic. If the user switches
away from Subsurface-mobile but comes back fairly quickly (just reacting
to a notification or briefly checking something, changing a song,
something... then the app may still be non-responsive for quite a while.

So we need to do something about the time it takes us to save the git
tree locally, and then figure out if we can move at least some of the
network traffic to another thread.

And we need to make sure the user immediately notices that the app is not
crashed but is actually saving their data. But that's for another commit.

tl;dr: CAREFUL, don't kill Subsurface-mobile before it had time to save
your data or your changes may be gone. In typical use that shouldn't be
an issue, but it is something that we need to tell the user about.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:18:22 -07:00
Dirk Hohndel
5821c56da2 Instrument the git storage code
This allows fairly fine grained analysis on what part of loading from
and saving to git we are spending our time. Compute performance and
network speed play a significant role in how all this plays out.

The routine to check if we can reach the cloud server is modified to
send updates every second so we don't hang without any feedback for five
seconds when there is network but we can't reach the cloud server (not
an unlikely scenario in many dive locations with poor network quality)

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:18:11 -07:00
Dirk Hohndel
904539024e Make accessingCloud an integer so it can convey more information
This will be used to simulate a progress bar eventually.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:17:57 -07:00
Dirk Hohndel
eea1ff6a83 Change the git progress update callback signature
This way we can include additional text. This will be used in later
patches.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-04 14:17:45 -07:00
Dirk Hohndel
410fd222d1 QML UI: make sure the correct data is in the bread crumbs
Once again this requires changes that aren't upstream in Kirigami.
But with this the bread crumbs update when the user swipes from dive
to dive.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 17:59:59 -05:00
Dirk Hohndel
162d07086b QML UI: remove obsolete code
This simply causes an error

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 17:59:32 -05:00
Dirk Hohndel
d95805e90b QML UI: tap on the very top / title bar of dive list goes to top
This requires changes to Kirigami that aren't upstream, yet. So there's
a chance that this commit will have to be changed or reverted / redone.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 17:01:37 -05:00
Dirk Hohndel
09856b4546 QML UI: work around problem starting some actions while on the App log
If you show the App log and then start "Add dive manually" or "Show GPS
fixes" you get this odd behavior that the page stack returns to the App
log for some reason. A simple workaround is of course to return to the
dive list, first. Not ideal (because there shouldn't be a reason not to
have the All log in the stack as well, but not really a big problem,
either, since the App log is mainly intended for developers.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 12:47:00 -05:00
Dirk Hohndel
254ea5accb QML UI: redo application log page
This makes things wrap and scroll correctly again for me

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
2016-04-02 12:46:59 -05:00
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
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
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
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
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
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
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
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
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