1
0
mirror of https://github.com/etesync/android synced 2024-12-24 15:38:09 +00:00
Commit Graph

874 Commits

Author SHA1 Message Date
Tom Hacohen
c1979846bd Service test: test inviting members to journals.
The test server now support multiple test users so we can now test this
code path (was temporarily removed).
2017-05-30 16:26:14 +01:00
Tom Hacohen
09685d08e3 LocalGroup: correctly check if a group is local only or not. 2017-05-16 14:28:39 +01:00
Tom Hacohen
91ba20e2ed Bump version. 2017-05-16 12:25:58 +01:00
Tom Hacohen
873fc0ad0c Journal item activity: Improve presentation of groups. 2017-05-16 12:24:21 +01:00
Tom Hacohen
c54baccdc7 SyncManager: add back support for contact groups
Groups are saved as separate vCards. We removed support for groups to
speed up development and deferred adding them back until there was
demand.

There is demand now, and also, not having this support resulted in the
sync not working, not just groups not supported.

Many thanks to "359" (this user's preferred alias) for investigating and
reporting this issue.
2017-05-16 12:05:26 +01:00
Ricki Hirner
5031efe845 Remove "ical4android" from iCal PRODID (same format as for VCard) 2017-05-16 11:19:45 +01:00
Ricki Hirner
7391dfd656 Remove "vcard4android" from VCard PRODID to avoid folding for better compatibility 2017-05-16 11:19:45 +01:00
Tom Hacohen
7ddb11c670 Change PRODID to better match the davdroid format. 2017-05-16 11:19:45 +01:00
Ricki Hirner
b7eaa2753f Upgrade to okhttp/3.8.0 2017-05-16 11:08:42 +01:00
Tom Hacohen
04e50459d4 Syncmanager: fix an issue causing local cache corruption when failing to push.
Due to a logical issue in the code, new journal entries were added to the
local cache after they've been created locally, and not after they've
been added to the server. Under normal circumstances this doesn't pose a
problem, however when pushing to the server fails, the local cache
would have the new entries as if they were saved on the server, causing
the app to think there has been a corruption on the server (as entries
should never be removed from the server) and halt the sync.

This change makes it so the entries are saved to the local cache only
after they've been saved on the server.

Note: this was not spotted until now because it relies on an unfortunate
specific sequence of events. It only happens when creating journal
entries, and when trying to sync them successfully connecting to the
server to fetch the journal list and the content of the journal itself,
and only failing when coming to push the journals.

Many thanks to "359" (this user's preferred alias) for reporting the
issue that resulted in this fix.
2017-05-15 16:17:48 +01:00
Tom Hacohen
2771012997 Bump version. 2017-05-15 11:26:57 +01:00
Tom Hacohen
30fa0128b6 AsyncTask: cancel background tasks when the fragments are destroyed.
I assumed the lifecycle of the fragment and the task were tied because they
are tied to the instance, but it looks like I was wrong. We need to
explicitly cancel tasks.
2017-05-12 20:28:47 +01:00
Tom Hacohen
28aa80fe07 Syncmanager: don't try to fetch again if we already fetched everything.
This patch changes the fetching so if the last fetch returned less entries
than the limit, we don't try and fetch again because we already know there
are no others left.
2017-05-12 19:27:05 +01:00
Tom Hacohen
2b0b35c9be Service test: inviting owner to a journal is no longer allowed.
This is a new validation on the server, so this hack we did is no longer
possible.
2017-05-12 14:48:19 +01:00
Tom Hacohen
f7104bbcef Syncmanager: fetch journal entries in chunks.
Before this commit we used to fetch the whole journal entry list in one
go, which caused issues in two cases:
1. On slow internet connections the download may fail.
2. With big journals: Android interrupts sync managers if they don't
    perform any significant network traffic for over a minute[1],
    and because we would first download and only then process, we would
    sometimes hit this threshold.

Current chunk size is set to 50.

1: https://developer.android.com/reference/android/content/AbstractThreadedSyncAdapter.html
2017-05-12 14:36:43 +01:00
Tom Hacohen
c19e7b0ecb Bump version. 2017-05-12 12:46:32 +01:00
Tom Hacohen
9cdd63f1d9 Journal manager crypto: change RSA key length to 3072.
I set it to 2048 following the NIST recommendations[1] which said it was
OK, but actually, as pointed out by Dominik Schürmann, it's probably a
better idea to set to 3072.

Users who already have a 2048 key pair won't be affected, while users
who don't will have a 3072 key created for them. Users with different
key lengths can interact with each other without any issues.

1: https://www.keylength.com/en/4/
2017-05-12 12:42:35 +01:00
Tom Hacohen
b33e5003d4 Setup Encryption: use the more reliable AsyncTask over AsyncTaskLoader.
I had issues with not being able to add accounts in some cases.
2017-05-12 12:38:08 +01:00
Tom Hacohen
660d5b94ba Journal item activity: improve look (add elevation to contact name). 2017-05-12 11:31:25 +01:00
Tom Hacohen
0503efa8ac Journal item activity: Use string resources instead of hardcoded strings. 2017-05-12 11:26:57 +01:00
Tom Hacohen
c3ee3aac22 Journal item: Implement showing contacts.
This shows address book journal items in a nicer way.
2017-05-11 22:42:59 +01:00
Tom Hacohen
b964b8dfe1 Journal item: implement showing calendar events (based on etar)
This shows the calendar events in a nicer way based on Etar[1] which is
in turn based on the AOSP calendar.

1: https://github.com/Etar-Group/Etar-Calendar/
2017-05-11 22:42:59 +01:00
Tom Hacohen
7dba220d06 Journal item activity: create the infrastructure for a nicer interface 2017-05-11 22:42:59 +01:00
Tom Hacohen
e6ba52074a Journal item: view journal item in a separate activity.
This change makes clicking on journal items in the list to show in a
separate activity. At the moment it just makes for a slightly nicer
presentation. In the future we would change it to show the data in a
nice formatted way instead of a raw dump of the vObject.
2017-05-11 22:42:59 +01:00
Tom Hacohen
889eede699 Journal list: Use icons for actions instead of text. 2017-05-11 22:42:59 +01:00
Tom Hacohen
a3e4fc48ab Collection header: set owner visibility to gone when there's no owner. 2017-05-11 22:42:37 +01:00
Tom Hacohen
1cf1d0f5b0 BaseActivity: Add an activity that all other activities inherit from.
Now that we have this activity, remove the duplication of onResume/onPause and
onOptionsItemSelected.
2017-05-11 22:42:36 +01:00
Tom Hacohen
d86edd7688 Journal model: add a unique constraint to journal UIDs.
Journals and services should be unique together, this wasn't there
because of an issue with requery that should now be resolved.
2017-05-05 16:50:54 +01:00
Tom Hacohen
df05dd2498 Deps: upgrade requery to 1.3.1.
This fixes an issue with index creation when altering tables.
2017-05-05 16:49:27 +01:00
Tom Hacohen
10095bd4ee WebView: correctly handle checking if a url should open in app or browser.
There was an issue that for the first load it would only check the url
after a redirect (if there is one), which meant that for example,
the dashboard, would open in app because you'd be redirected to the
login page.
2017-05-03 19:25:39 +01:00
Tom Hacohen
a9eba1af4e Account upgrade: raise an error when account migration fails.
Account migration works in most cases, though while testing I managed to
get it to fail in some rare occasions. This commit adds a check to
verify the number of contacts we thought we migrated is equal to the
number of contacts we have after migration.

If the check fails, it presents the user with a notification that opens
the relevant FAQ entry on the EteSync website.
2017-05-03 19:04:42 +01:00
Tom Hacohen
20568c850a SyncManager: Request for a full sync if interrupted.
This doesn't work well, but I'm keeping it since it's still better than
what was there before.

We have a problem that on initial sync with long enough logs, Android
kills the sync manager before completion. The reason for that is that
due to the fact that EteSync first downloads the whole journal and only then
processes it, the sync manager spends a minute without making any
network traffic, which in turn makes Android kill the sync[1].

This should probably be fixed by paginating the initial download, that
is, downloading and processing the journal in chunks, which is possibly
a good idea regardless.

1: https://developer.android.com/reference/android/content/AbstractThreadedSyncAdapter.html
2017-05-03 19:04:42 +01:00
Tom Hacohen
a107cd3fa2 AccountSettings: remove wrong version set.
This was a leftover from the cherry-pick from DAVdroid. The version is
set outside of this function, so this was redundant, and wrong.
2017-05-03 19:04:07 +01:00
Ricki Hirner
643e2b23ea Use UUIDs for newly generated event/task UIDs (RFC 7986 5.3 UID Property) 2017-05-02 11:35:52 +01:00
Tom Hacohen
f819dbf33f Bump version. 2017-04-27 13:02:53 +01:00
Tom Hacohen
eb95eada91 Import: Add an alias for our addressbook and davdroid account types. 2017-04-27 11:56:19 +01:00
Tom Hacohen
861d5e4b4e Fix account type and authority to use function and not string. 2017-04-27 11:56:18 +01:00
Tom Hacohen
26c0a62dc4 Don't crash when immediately entering collection after creation. 2017-04-27 11:56:17 +01:00
Tom Hacohen
674ea1eeca Workaround Android account creation issue (ignoring userData)
It seems like there's an issue with Android that sometimes the userData
passed to addAccountExplicitly is not correctly set in the Android cache
making it return null on subsequent fetches. It doesn't always happen
because some cases clear the cache, however I can consistently trigger
it by creating and deleting an account a few times in a row.
2017-04-27 11:49:06 +01:00
Tom Hacohen
db82757bc4 Show an error message when failing to create an account. 2017-04-27 11:49:05 +01:00
Tom Hacohen
aeae7de077 Workaround: ignore invalid account errors when syncing contacts
This is an ugly workaround. For some reason a sync is called when an
account is removed. Since the main account is removed, we get an invalid
account exception when trying to fetch it.

Need to find out why a sync is even triggered and just remove it there.
2017-04-27 11:49:05 +01:00
Tom Hacohen
c81ba0cddb Create an AndroidCompat class to wrap around Android oddities.
As part of it, move removeAccount to that class.
2017-04-27 11:49:05 +01:00
Tom Hacohen
de6a124bf2 Remove unnecessary InvalidAccountException
Based on commit d4e386441091ae3a84382f2088dfad03ea80c666 from DAVdroid.
2017-04-27 11:49:05 +01:00
Tom Hacohen
068e0c6b4d Expose appName from App and use it. 2017-04-27 11:49:05 +01:00
Ricki Hirner
51840c3a22 Fix some inconsistencies 2017-04-27 11:49:05 +01:00
Ricki Hirner
138d344a5b Open DAVdroid main activity when add a "DAVdroid Address book" account is added over Settings 2017-04-27 11:49:05 +01:00
Tom Hacohen
d6ace869fe Remove add, share and delete restrictions on address books
Now that we have multiple address books support, we can share and delete
address books like we did calendars.
2017-04-27 11:49:05 +01:00
Tom Hacohen
2f95ddbda2 Import: Fix address book import.
The import code assumed there can be only one address book, and that
it's the main one. This commit fixes that wrong assumption.
2017-04-27 11:48:01 +01:00
Tom Hacohen
e729bcff42 ViewCollection: fix addressbook stats. 2017-04-27 11:48:01 +01:00
Tom Hacohen
51aecba9a0 LocalAddressBook: Add a way to get address book by UID. 2017-04-27 11:48:01 +01:00
Tom Hacohen
19b955f981 Change LocalAddressBook to look like LocalCalendar (accept journalentity) 2017-04-27 11:48:01 +01:00
Tom Hacohen
48a77530a8 Make account type strings non-translateable. 2017-04-27 11:48:01 +01:00
Tom Hacohen
dfb8981752 Remove the ACCOUNT_TYPE constant (now a string resource)
This corresponds to commit 41dae8bcb3335b9e77d9e73b33e9bb14f8900af9 from
DAVdroid, but was done manually.
2017-04-27 11:48:01 +01:00
Ricki Hirner
0d7e2362b3 Improve address book details in debug info 2017-04-27 11:48:01 +01:00
Ricki Hirner
310b94e280 Add more debug information
* power saving status
* permissions
* address book accounts
2017-04-27 11:48:01 +01:00
Tom Hacohen
1422d95ccf Disallow user removal of address book accounts
We don't want users to remove address books on their own, we want to
control these automatically. This commit blocks it.
2017-04-27 11:48:01 +01:00
Tom Hacohen
83ef63e94b Remove getCollections and add the afterLoad workaround to getJournals. 2017-04-27 11:48:01 +01:00
Tom Hacohen
589f81c50d Add multiple address books support
Android allows only having one address book per account, so until now
users of EteSync were only able to have one address book. This was
always an annoying limitation, but even more so now that journal sharing
is implemented.

Luckily, DAVdroid recently implemented multiple account support by
creating sub-accounts for address books.

This patch is an import of the DAVdroid changes, with adjustments to
work with EteSync, and a few changes that did not make sense for
EteSync. The original commits' split didn't provide any value over this
squash, and the amount of adjustments and addition needed to be done to
apply them, made me decide to squash this change together.

This commit is mostly based on:
dfec72ce6b8ff5e0780e9ac4418c81d080f4b60b
9817594da14ad8dffae18de386e14aeaf41312b9
2017-04-27 11:42:05 +01:00
Tom Hacohen
2e25c44d78 Journalmanager crypto: Make AsymmetricKeyPair serializable.
This should fix a rare crash on the login page.
2017-04-26 19:47:32 +01:00
Tom Hacohen
71d694c1c1 Fingerprint: Change the fingerprint format to be numeric instead of hex.
Thanks to @dschuermann for the suggestion. This makes it easier for
people of non-latin speaking cultures to compare the fingerprints.

Code is based off of Signal's fingerprint generation.
2017-04-25 16:05:57 +01:00
Tom Hacohen
be108389c5 Journal viewer: verify journal entry content is not null before searching it.
This actually happened for a user, which is weird, because entries should never be null,
but I guess it is a possible scenario.
2017-04-25 16:05:55 +01:00
Tom Hacohen
96443a0b57 Journal model: fix broken database migration
Add missing readOnly column
Make the new_Entry foreign key refer to new_Journal and not the old one.
2017-04-24 16:13:20 +01:00
Tom Hacohen
fab8aa90ac Collection owner: Handle the case of owner == null. 2017-04-21 20:52:51 +01:00
Tom Hacohen
201e4e09eb Update to the new jorunal entries API. 2017-04-21 15:03:19 +01:00
Tom Hacohen
148260110a Journal members: update according to the new members API. 2017-04-21 14:10:13 +01:00
Tom Hacohen
53e7ba98ab Debug activity: Remove references to jbworkaround (we don't need it). 2017-04-21 11:28:02 +01:00
Tom Hacohen
1ab32be0f6 Add support for read-only journals.
This change only works for calendars at the moment, because we don't have shared
address books anyway.
This is currently only implemented in the client, and only as a read-only attribute,
you can't make a journal read-only yet. This requires server support that is not yet
there, but it's better to be ready for this sooner rather than later.
2017-04-21 11:19:10 +01:00
Tom Hacohen
df3db6b357 LocalCalendar: accept JournalEntity, not CollectionInfo when creating and updating.
Some of the information is now saved there, and more will be transferred
soon. CollectionInfo includes the encrypted part, and journalentity the
non-encrypted part of the journal info, so both are needed.
2017-04-21 11:08:20 +01:00
Tom Hacohen
f8d0878003 Journal sharing: Add a nice error message when journal is not found. 2017-04-21 10:33:52 +01:00
Tom Hacohen
5c2601f408 Fingerprint verification: dismiss dialog when not trusting fingerprint. 2017-04-21 10:28:14 +01:00
Tom Hacohen
3c1cad8960 Fingerprint: Improve how the fingerprint dialog looks like. 2017-04-21 10:27:52 +01:00
Tom Hacohen
fc52194d39 Journalmanager: rename CRUD method to be more consistent.
All are now on of: list, delete, create and update.
2017-04-20 20:48:12 +01:00
Tom Hacohen
0bade21aae ViewCollection: list the journal's owner if it's not owned by us. 2017-04-20 20:10:43 +01:00
Tom Hacohen
348e24c3e3 Account: indicate on the list if a collection is shared. 2017-04-20 20:04:09 +01:00
Tom Hacohen
eeda46338d Disallow sharing of journals with version < 2.
The reason for that is that before version 2, all the journals of a
particular user shared the same encryption key, which means, sharing a
journal of version one, would essentially give away the encryption key
of all of its journals, even the private ones.

This is thus blocked for security reasons.
2017-04-20 19:48:46 +01:00
Tom Hacohen
4c47384198 Journals: support adding back deleted journals.
This currently just adds the journal back, but doesn't re-apply the
journal, so the calendar for example would be empty, but the journal
itself would be listed and visible.
2017-04-20 19:48:46 +01:00
Tom Hacohen
d3057f86f0 Disallow sharing of address books.
At the moment we only support one address book per user, and sharing
address books will interfere with this model. Hopefully, we'll add
multiple address book support in the next release, and then we'll
re-enable this.
2017-04-20 19:48:46 +01:00
Tom Hacohen
93fb1e3c54 Remove redundant dbhelper calls.
These calls were made obsolete after the switch to requery. We no longer
need to get the database, because we no longer use it.
2017-04-20 19:48:46 +01:00
Tom Hacohen
e15a26af9c User info: fix version detection, and don't verify on fetch.
We were not detecting the version correctly, but always just assumed
latest version, which is obviously wrong.
In addition, before this commit we used to automatically verify on
fetch, which wasn't flexible enough for some use cases. This fixes that
too.
2017-04-20 19:48:46 +01:00
Tom Hacohen
9fb9db9327 ViewCollection: only allow owner to edit collections. 2017-04-20 19:48:46 +01:00
Tom Hacohen
656dad3615 Add UI to add/remove/list journal members.
Only owners of a journal are allowed to control and view its members.
2017-04-20 19:48:46 +01:00
Tom Hacohen
4246ae7ede Add a way to view own fingerprint.
This adds a menu option from the account page to view your own keypair
(to compare when sharing).
2017-04-20 19:48:46 +01:00
Tom Hacohen
4c6176a6f4 Fetch userinfo on account creation.
We need the keypair to access shared journals, so we need to make sure
to fetch it at the moment we create the local account, which is what
this commit does.
2017-04-20 19:48:46 +01:00
Tom Hacohen
a57936982d Add a fragment to setup user info.
This is used to create a keypair and put it on the server if one doesn't
exist, and fetch it and save it locally if one does.

It's currently called from the account activity.
2017-04-20 19:48:46 +01:00
Tom Hacohen
beccb33904 Journal: use journal keys if available.
If a journal has a key set to it (usually used for shared journals), use
it instead of the symmetric key. The key of the journal is asymmetrically
encrypted using our keypair.
2017-04-20 19:48:45 +01:00
Tom Hacohen
43803b6d3e AccountSettings: Add a keypair setting.
This is used for storing the asymmetric key pair.
2017-04-20 19:48:45 +01:00
Tom Hacohen
ae08510729 Requery: Fix database to have the correct constraints (on upgrade).
Requery doesn't automatically update column constraints, and there was
an issue with it applying indexes before adding the new columns which
was also causing troubles. This commit, while ugly, just manually
updates the database using raw SQL to what we expect it to be.
2017-04-20 19:48:45 +01:00
Tom Hacohen
e2f206e02e Services: Move to a requery model instead of raw SQL and improve models.
Having it in raw sql was slowing down development, and was error-prone.
It's much cleaner now, easier to handle, and enables us to develop
faster.

In this change I also fixed the fetching of journals to be by service
and id, not just id, because just id is not guaranteed to be unique.
2017-04-20 19:48:45 +01:00
Tom Hacohen
8b79529a94 Bump version. 2017-04-20 19:48:45 +01:00
Tom Hacohen
88ceeaa2a5 Entry and journal: fix uniqueness to be composited, and not just by uid.
Before this change, uid was unique on its own, this was wrong, because
due to shared journals, we can have the same journal in two accounts,
and we can thus have both journal and entry UIDs more than once.

This fixes the constraint to be unique for journal, uid, and service,
uid combinations.

This is currently disabled for journals because of a bug in requery.
2017-04-20 19:48:45 +01:00
Tom Hacohen
a4a32045e8 Journal: get and persist owner and key.
The server was changed so the owner of the journal, and the encrypted
key (if a shared journal) would be exposed. This change fetches it, and
saves it.
2017-04-20 19:48:45 +01:00
Tom Hacohen
efe832ddb4 Journalmanager: Add api for the members endpoint.
This API controls the members of a journal, that is, access control.
2017-04-20 19:48:45 +01:00
Tom Hacohen
11e37dbd1e Journalmanager: add API to interact with the UserInfo
This is where the keypair is stored on the server. Both the public
facing public key, and the encrypted private key
2017-04-20 19:48:45 +01:00
Tom Hacohen
e836b4c716 Crypto: Add basic asymmetric encryption methods 2017-04-20 19:48:45 +01:00
Tom Hacohen
89731519e9 Account view: cleanup and share collection list items and adapter.
They were redundant and needed some cleanup, now they are better, and
shared between calendar and contact.
2017-04-20 19:48:37 +01:00
Ricki Hirner
17d90a4569 Allow null values for IS_ORGANIZER 2017-04-20 14:15:04 +01:00
Tom Hacohen
e82d8affe8 Update okhttp and submodules to latest. 2017-04-20 14:14:40 +01:00
Tom Hacohen
30af730048 requery: update to 1.3.0.
Although this release is claimed to fix the afterLoad issue, this is not
the case. We are just updating it so the upgrade path later one would be
easier.
2017-04-20 14:08:17 +01:00
Tom Hacohen
190ec89c2c JournalModel: don't convert to list when getting collections.
Just use the iterator we get back already.
2017-04-20 14:01:28 +01:00
Tom Hacohen
da87d14ae9 Journalmanager: always use the api error message when available. 2017-04-20 11:15:10 +01:00
Tom Hacohen
6579ac8cf1 View/EditCollection: Add icons to menu operations 2017-04-19 17:54:10 +01:00
Tom Hacohen
8f1f4785a6 Revert "Update requery and remove the afterLoad workaround."
Unfortunately this requery version introduced a regression. When adding
a new account, it takes syncign a few times until it works. It looks
like requery is not loading the recently saved instances.

This reverts commit f0f70ff1c61996d0e45d8f72d24654c739c325f7.
2017-04-19 17:53:42 +01:00
Tom Hacohen
57f447d372 Requery: Don't destroy and recreate db when updating. 2017-04-19 17:53:41 +01:00
Tom Hacohen
d80cce9aad CryptoManager: add an HMAC_SIZE (in bytes) constant. 2017-04-19 17:53:21 +01:00
Tom Hacohen
56996b98c4 Update requery and remove the afterLoad workaround.
Prior to this version of requery there was an issue that prevented
afterLoad to be called in some cases. This issue forced us to add an
explicit call to afterLoad. It's now fixed, so the workaround is no
longer required.

Reference issue: https://github.com/requery/requery/issues/487
2017-04-19 17:53:00 +01:00
Tom Hacohen
c95aaaf5fd HintManager: simplify by moving to strings and removing the need to register 2017-04-07 09:50:55 +01:00
Tom Hacohen
c42602d030 Contacts/Event: Set PRODID to EteSync. 2017-04-07 09:41:27 +01:00
Tom Hacohen
4e0cd7f554 SyncManager: Use the last journal id as the ctag, instead of storing it.
We were storing the ctag separately although the data was already
present in the journal. The last entry's ID is always the CTAG.
This could cause issues if sync is aborted exactly at the right time.
I managed to trigger this issue on rare cases.
2017-04-06 23:33:11 +01:00
Tom Hacohen
338dd5e075 Database: Mark collections class as deprecated.
It's only used for migrations, and has been considered deprecated for a
while. Mark it as deprecated to make it extra obvious that this should
not be used.
2017-04-06 23:32:25 +01:00
Tom Hacohen
fcbf26a03b Tests: Add journalentrymanager tests. 2017-04-06 19:05:48 +01:00
Tom Hacohen
14e6f757c5 Journalmanager: Change getUuid to getUid (the rest says uid too). 2017-04-06 17:29:25 +01:00
Tom Hacohen
7cefb64db2 CollectionInfo: rename url -> uid. 2017-04-06 17:28:03 +01:00
Tom Hacohen
2e7ac65883 Tests: Add some basic tests. 2017-04-06 17:25:06 +01:00
Tom Hacohen
dd425ecbe2 HttpUrl: Add a way to create from string host and auth token. 2017-04-06 17:01:18 +01:00
Tom Hacohen
d41b7827ee Tests: Move constants to a shared file. 2017-04-06 17:01:18 +01:00
Tom Hacohen
9ba0f39660 Tests: Add basic authenticator tests. 2017-04-06 17:01:18 +01:00
Tom Hacohen
94f2682195 Tests: add basic encryption tests. 2017-04-06 17:01:18 +01:00
Tom Hacohen
a77e49c033 Tests: remove useless HttpClient test. 2017-04-06 17:01:18 +01:00
Tom Hacohen
70b549033c Crypto: add an exception to when crypto version is too new. 2017-04-06 17:01:18 +01:00
Tom Hacohen
5abf635fa0 Base64: Pull in the base64 impl from the android source code.
It seems like this is the only (semi) sane way to get base64 to work on both
Android and local tests.
2017-04-06 17:01:18 +01:00
Tom Hacohen
e3c48a0560 ImportFragment: move to the import package. 2017-04-06 15:06:42 +01:00
Tom Hacohen
ea91063178 Use the safe getDrawable function instead of the version specific one. 2017-04-06 15:02:36 +01:00
Tom Hacohen
52723dac67 View collection: add a showcase to explain how to import. 2017-04-06 14:29:15 +01:00
Tom Hacohen
51d9c75c56 AccountActivity: Add a showcase to the account activity. 2017-04-06 14:29:15 +01:00
Tom Hacohen
cb140a3387 Main activity: Add a showcase for adding an account.
Turn it off by default if upgrading to this version, because this means
the user most likely already knows how to add an account.
2017-04-06 14:29:15 +01:00
Tom Hacohen
f650d38435 Hints manager: Add a class to manage hints (show once info)
This is much cleaner than what was there before, and enables to easily
add more hints.
2017-04-06 12:08:32 +01:00
Tom Hacohen
2570c9671d Bump version 2017-04-06 12:02:49 +01:00
Tom Hacohen
4dd11a1912 Update minsdk version to 4.1 (16).
Prior to this version, the list of available crypto was quite poor.
2017-04-06 10:55:33 +01:00
Tom Hacohen
80fad58de4 Fix build break. 2017-04-06 10:34:05 +01:00
Ricki Hirner
c83b28c3bb Account settings: restart loader after sync interval update
* debug info: add signature
2017-04-06 10:08:16 +01:00
Tom Hacohen
4920bc0c81 SSLSocketFactory: Update the cipher priority list to something more secure.
We can assume much safer ciphers since we control the server too and
we don't have to work with old insecure servers.
2017-04-06 10:04:15 +01:00
Ricki Hirner
3a0c112fad Enable SSL_RSA_WITH_3DES_EDE_CBC_SHA for all Android versions
* refactor cipher selection
2017-04-06 09:30:07 +01:00
Tom Hacohen
c2e7914290 CollectionInfo: remove the obsolete support VEVENT and support VTODO. 2017-04-05 19:24:55 +01:00
Tom Hacohen
0a4d4a9d9e Calendar sync adapter service: minor cleanup. 2017-04-05 18:56:45 +01:00
Ricki Hirner
1295e4557e AccountsActivity: show message when global sync is disabled 2017-04-05 18:37:24 +01:00
Ricki Hirner
433484626f Don't use uid2445 column on Android <4.2; alarm ACTION: compare only value (ignore parameters) 2017-04-05 18:34:24 +01:00
Ricki Hirner
f1ea00d816 Improve Android 7 workaround behavior in combination with CATEGORIES/VCard4 contact groups 2017-04-05 18:32:52 +01:00
Ricki Hirner
be833b03ee Retain Events.UID_2445 when preparing events for upload
* move file name/UID generation from SyncManager to LocalContact, LocalEvent, LocalTask
* rename updateFileNameAndUID() to prepareForUpload()
* use random UUID for contacts, UidGenerator with Android device ID for events/tasks
* LocalEvent.prepareForUpload(): use existing UID_2445 if available
2017-04-05 18:29:15 +01:00
Ricki Hirner
97aefad0a2 Android 7 workaround: update hash after group membership operations 2017-04-05 18:09:58 +01:00
Tom Hacohen
d6558da503 Bump version. 2017-04-03 22:56:00 +01:00
Tom Hacohen
9486719cbb Import: Resolved account name and icon when possible.
We assume the name of the account == package name, which is the best guess
we have. Android doesn't have a way to get account name/icon at the moment.
2017-04-03 22:52:39 +01:00
Tal Hacohen
e4fc23eb70 Journal - Load entries on background 2017-04-03 22:11:52 +01:00
Tal Hacohen
2706021a5e Import - Add account type to calendar account list 2017-04-03 21:41:47 +03:00
Tal Hacohen
bee502a440 Sort contacts accounts by name and type 2017-04-03 21:40:54 +03:00
Tom Hacohen
1227a66409 Import: Make icon acessible and get it for address book. 2017-04-03 14:21:21 +01:00
Tom Hacohen
15580374fa Import: Make the select calendar/account lists nicer
This also adds an icon (that will soon be replaced with the icon of the
relevant account), and shares the design between the calendar and the
contacts.
2017-04-03 13:47:13 +01:00
Tom Hacohen
7915a51f1f Import: Make account import activity prettier. 2017-04-03 13:10:35 +01:00
Tom Hacohen
0d848f0573 Merge: Add import from local accounts
This set of commits add import from local accounts.
It's a bit rough around the edges, but it's good enough to go in, so work can continue
collaboratively.
2017-04-03 12:56:52 +01:00
Tal Hacohen
9684123f68 Use App.log instead of Log in import fragmnets 2017-04-03 14:33:04 +03:00
Tal Hacohen
6820d9d413 Change desgin of both import lists 2017-04-03 14:27:48 +03:00
Tal Hacohen
8d208b3438 Refactor calendar account to import package 2017-04-03 14:27:48 +03:00
Tal Hacohen
1e9e055924 Import - Use ResultFragment in all import framgnets 2017-04-03 14:27:47 +03:00
Tal Hacohen
56aba7c669 Extract ResultFragment from ImportFragment 2017-04-03 14:27:25 +03:00
Tal Hacohen
a7c5ccadc9 Import - Change toolbar title according to relevant fragment 2017-04-03 14:27:24 +03:00
Tal Hacohen
1629ffba9f Import - Add fragment to import all contacts from account 2017-04-03 14:27:23 +03:00
Tal Hacohen
7cac473c74 Import - Split ImportActivity to fragments and activity 2017-04-02 14:04:14 +03:00
Tal Hacohen
33a310344b Import - Add all events to selected calendar 2017-03-30 16:09:22 +03:00
Tal Hacohen
594c401038 Import - Show calendars in expandable list view 2017-03-30 16:09:22 +03:00
Tal Hacohen
466870ff50 Import - Add basic import activity 2017-03-30 16:09:22 +03:00
Tal Hacohen
2261d6e385 Import calendar: Add calendar account class.
CalendarAccount loads all different accounts and their calendar lists.
2017-03-30 10:10:32 +03:00
Tom Hacohen
1482fb01cb JournalManager: make jorunal version read-only. 2017-03-29 23:46:11 +01:00
Tom Hacohen
cd5e5487a8 JournalManager: make IntegrityException inherit from GeneralSecurityException. 2017-03-29 18:27:50 +01:00
Tom Hacohen
cf805d4e72 JournalManager: add version info to Journals and use it in crypto
The crypto class now behaves differently depending on the version of the
journal.
The current difference is in the key derivation, and that the new
version of the crypto also hmacs the version automatically whenever it
hmacs anything.

The versioning was added for better future-proofing of the code.
The derivation change was done because before we were creating the same
password for all of the journals, now we do it per-journal. This means
that we can, if needed in the future use this password as the journal
password when sharing journals without compromising the security of the
rest of the journals.
2017-03-29 18:27:39 +01:00
Tom Hacohen
7357447786 Collectioninfo: fix typo in ToString field exclusion. 2017-03-29 15:10:52 +01:00
Tom Hacohen
c3e30138dd Syncmanager: get a collection info for all sync managers. 2017-03-29 14:47:43 +01:00
Tom Hacohen
01add874dc Remove unneeded fixme. 2017-03-29 13:27:56 +01:00
Tom Hacohen
d2eaf5f434 Use the new CryptoManager instead of the main encryption password.
This will give us more flexibility in the future because now the
encryption key and derivation is all managed in one place.
2017-03-29 13:01:04 +01:00
Tom Hacohen
4004eca762 Syncmanager: use the journalId as the unique collection id. 2017-03-29 12:45:14 +01:00
Tom Hacohen
1e6fc5a9cb Crypto: rename Cipher to CryptoManager. 2017-03-29 12:35:44 +01:00
Tom Hacohen
abd13d4d3d Crypto: refactor the Cipher class.
Include the hmac in the cipher class.
Derive keys on class creation instead of on encrypt/decrypt.
2017-03-29 12:27:22 +01:00
Tom Hacohen
0fbee1ea02 JournalManager: rename Helpers to Crypto.
These are crypto helpers, this should have been named this way from the start.
2017-03-29 12:12:35 +01:00
Tom Hacohen
225d01c143 Crypto: Only create random generator as needed. 2017-03-29 12:02:13 +01:00
Tom Hacohen
de834915be Bump version. 2017-03-28 16:49:26 +01:00
Tom Hacohen
1d87de2e7a App update: set the app version on first launch if not already set.
The app update broadcast receiver is only called on the first update,
not install, which was causing EteSync to think it was updating from
version 1 on the first update, doesn't matter which version one was
updating from.
This fixes it by saving the version on the first run.
2017-03-28 16:44:53 +01:00
Tom Hacohen
784070c27c SyncManager: add remote entries to cache only after they've been processed
Before this change we were adding them to cache before they were
processed, potentially persisting malformed entries, or entries we
haven't yet processed causing issues if sync was aborted before an entry
was fully processed.
2017-03-27 16:08:45 +01:00
Tom Hacohen
987076d95e Webview: fix behaviour of toolbar back button and simplify. 2017-03-24 19:15:57 +00:00
Tom Hacohen
3a83cf8303 Collection deletion: mark as deleted in cache, but don't actually delete.
This is important for protecting against potential data loss.
2017-03-24 18:55:12 +00:00
Tom Hacohen
ba9f217d66 Webview: also open tos and about from within the app. 2017-03-24 18:42:28 +00:00
Tom Hacohen
9ba84109b2 Login: add a "forgot password" link. 2017-03-24 16:11:24 +00:00
Tom Hacohen
d21a498925 Webview: improve whitelist, and include all of the "accounts/" subpath. 2017-03-24 16:09:19 +00:00
Tom Hacohen
e7694924b4 Automatically fix non-dirty entries with null etag on upgrade
Commit 5d1c90dcba fixed a bug where
entries added from the server were marked as "local only" (null etag)
which was causing issues. That commit fixes it for newly added resources,
but existing resources remained broken.

This commit goes through the database and fixes all of the existing
broken resources. It skips dirty entries because figuring out if they
were just created or updated is complex, and the chances of doing an
update at exactly the same time there are dirty entries is quite low,
so the complexity involved is just not worth it.
2017-03-24 15:33:07 +00:00
Tom Hacohen
7562a7a76b ViewCollection: use the new LocalCalendar.findByName to get calendar. 2017-03-24 14:52:27 +00:00
Tom Hacohen
19ceab96b0 Bump version. 2017-03-24 14:48:00 +00:00
Tom Hacohen
5d1c90dcba Resource: set eTag when creating a new one from server.
Before this commit we would create new entries from the server without
an etag, essentially marking them as "local only". While the actual
value of the eTag is not currently used, null or not matters.
Because the resources were "local only", we would get weird behaviours
like having an "ADD" action when changing a resource.
2017-03-24 14:40:29 +00:00
Tom Hacohen
84244330b7 Always log deletes, even when not previously added to server.
Before this change we would only add "deletes" to the server when the
resource has been previously uploaded. This means that if a resource has
been created and then deleted before a sync, it would not be saved,
which is essentially data-loss.
This commit fixes it, so we always upload a delete entry.
2017-03-24 14:08:57 +00:00
Tom Hacohen
99fe3457fc Refresh ViewCollectionActivity when edited/deleted
Until now we were just closing it when opening a view that can cause a
change. This is nicer.
2017-03-24 13:57:25 +00:00
Tom Hacohen
0cd57851ad Journal model: call the postLoad callback on fetch too.
It's really annoying that it doesn't do it automatically as it should,
in the meanwhile, add this workaround.

I reported it to upstream:
https://github.com/requery/requery/issues/487
2017-03-24 13:57:25 +00:00
Tom Hacohen
415d5d5447 Clear journal cache on account deletion (fix account re-add issue)
Clearing the cache is a good idea regardless, though because of the
unique constraints in the cache on the journal name, this was causing
issues when deleting an account and then adding it back.
2017-03-24 13:57:25 +00:00
Tom Hacohen
f984b76ec6 Add import from vCard (vcf)/iCal (ics)
This commit adds a basic UI for importing contacts and calendars from a
file.
2017-03-24 13:57:25 +00:00
Tom Hacohen
24b170a170 View collection activity: only create fragment on first load. 2017-03-24 12:49:19 +00:00
Tom Hacohen
231684e0d4 Local event/contact: Add a way to add/update as dirty 2017-03-24 12:49:11 +00:00
Tom Hacohen
d98d58360e LocalCalendar: Add a function to get calendar by name. 2017-03-23 16:42:54 +00:00
Tom Hacohen
ec39aceb1a Mark CollectionInfo id as deprecated.
This is now implemented in the ORM and not the collection info itself.
2017-03-23 15:38:08 +00:00
Tom Hacohen
e9428c6ec7 Sync manager: Fix log messages to be the state strings and not int ids. 2017-03-12 17:08:03 +00:00
Tom Hacohen
7afb086c76 Debug activity: Show the number of entries per journal. 2017-03-10 17:15:09 +00:00
Tom Hacohen
ced3d7283d Remove change journal from main page. 2017-03-10 17:15:09 +00:00
Tom Hacohen
b0b5891e40 Add a collection view activity and move the journal viewer there 2017-03-10 17:15:09 +00:00
Tom Hacohen
3d217f47af Webview: Only load pages from a whilelist, not all.
This was causing issues with the dashboard page because of stripe.
The best mitigation at the moment, is to only load pages from a whitelist.
2017-03-10 14:38:08 +00:00
Tom Hacohen
e4043642db Suppress XSS warning.
We are only loading external websites, no use controlled data.
2017-03-10 14:36:53 +00:00
Tom Hacohen
838cc2a79d Merge contacts/calendars collection handling
This also removes the "stats" from the edit collection screen.
2017-03-10 14:19:17 +00:00
Tom Hacohen
3530821ddd JournalViewer: add an activity to view the journal.
It's very raw and hacky at the moment, it's just a preview release so
people could see their data is saved, and can look at it in its raw
form until we implement a nicer view.
2017-03-09 22:25:45 +00:00
Tom Hacohen
42a644cabb EntryEntity: make content a SyncEntry instead of a string.
It was always of this type, this change just makes it so it's
automatically converted instead of manually.
2017-03-09 22:17:22 +00:00
Tom Hacohen
cee9576155 JournalModel: persist collection info inside the model instead of sqlite
This change moves the collection info away from raw sqlite in favour of
the requery ORM.
2017-03-09 22:15:08 +00:00
Tom Hacohen
bd5beaaf91 Move SyncEntry to the models package.
This unties it from the sync manager, and will let us better reuse it.
2017-03-09 22:15:08 +00:00
Tom Hacohen
a794ee35cf Remove a mention of davdroid from log. 2017-03-09 22:15:08 +00:00
Tom Hacohen
36a8edfb5d Bump version. 2017-03-09 22:15:08 +00:00
Tom Hacohen
431c54ab91 Show the number of journal entries on the collection detail screens. 2017-03-09 22:15:02 +00:00
Tom Hacohen
29fd177a95 Cache journals locally.
This is useful both as an anti-tampering mechanism, and will be used
later when interacting with the journal is implemented.
2017-03-09 22:14:22 +00:00
Tom Hacohen
afcb00e4f1 Account screen: Use translatable strings for the titles 2017-03-09 16:57:00 +00:00
Tom Hacohen
b9b930939f Allow renaming collections.
I mistakingly disallowed it when I added the edit collection ability.
There is no problem with changing the display name.
2017-03-09 16:57:00 +00:00
Tom Hacohen
4c7ae90b36 Encryption setup page: add a note about why we are asking for an additional password. 2017-03-08 18:46:12 +00:00
Tom Hacohen
83fde4b81d Use DEBUG_REMOTE_URL to also override the webUri.
Before this commit it was only used to override the api endpoint,
not it's also used to override the weburl. This is needed since we now
load the etesync website inside the app and not in an external web
browser.
2017-03-08 17:27:48 +00:00
Tom Hacohen
baff2e886c Traslation: make log authority untranslatable. 2017-03-08 17:15:50 +00:00
Tom Hacohen
f84bd386f1 Create collection: only update url after pushed to server.
Without this change, if the putting on server of a new collection fails,
the url would already be updated, and since having a url indicates it
exists on the server, trying to save it later would result in a 404.
2017-03-08 17:11:49 +00:00
Tom Hacohen
32df64000f Add stats to the collection edit page. 2017-03-08 17:11:48 +00:00
Tom Hacohen
7bb57c15a9 Add an edit collection page. 2017-03-08 17:11:48 +00:00
Tom Hacohen
ce3483cee2 Create collection: update collection if already exists (info.url is set). 2017-03-08 17:11:48 +00:00
Tom Hacohen
e7138842c8 Journal manager: Add a way to update a journal. 2017-03-08 17:11:48 +00:00
Tom Hacohen
1b3a4bf318 Add a way to count calendar events/contacts. 2017-03-08 17:11:48 +00:00
Tom Hacohen
4a196102a1 Collection info: serialize url, but not to json. 2017-03-08 17:11:48 +00:00
Tom Hacohen
c6fbecc0ff Strings-de: Fix malformed closer. 2017-03-08 11:17:28 +00:00
Tom Hacohen
9e8cfa77fa Remove another unused string. 2017-03-08 10:16:17 +00:00
Larson Maerz
f785ed77cd Update German translation. 2017-03-08 10:16:17 +00:00
Tal Hacohen
8c9ec3bcc7 Replace all etesync links to open in the webview activity. 2017-03-06 17:54:18 +01:00
Tal Hacohen
c041ddb690 Add webview activity to handle etesync link. 2017-03-06 17:54:17 +01:00
Tom Hacohen
57810cd5f5 Bump version. 2017-03-02 13:56:31 +00:00
Tom Hacohen
4fcc29c1d3 Rename Usage Guide to User Guide. 2017-03-02 13:47:32 +00:00
Tom Hacohen
9ef2ea2d54 Add a "Coming soon" section for the Change Journal
Adding this because users were asking about the history feature. While
the history is maintained, there's currently no GUI to explore it, so
I've added this stub to make it more obvious that it's not there yet.
2017-03-02 12:32:03 +00:00
Tom Hacohen
6fdf2c3d1a Remove unused resources (mainly strings). 2017-03-02 11:31:35 +00:00
Tom Hacohen
14fb5ffae8 Change username login field to 'email'. 2017-03-02 11:22:03 +00:00
Tom Hacohen
cf9ee98ead Sync interval setting: use the same string for current as selector.
Before this commit the texts were different, and odd.
For example, the text in the selector would be:
Every 4 hours
and the text in the preview would be:
Every 240 minutes
2017-03-01 18:18:10 +00:00
Tom Hacohen
711df7ed55 Bump to version 0.9.1. 2017-03-01 00:24:19 +00:00
Tom Hacohen
ae99a0f53a Change exceptions inheriting from HttpException to accept "Response"
This follows the previous change and puts more information in the
exceptions (like parts of the http request and response) for better
debugging. This also moves the handling of "retry after" to the
exception itself instead of outside.
Also improved the text of one of the exception invocations.
2017-03-01 00:24:19 +00:00
Tom Hacohen
571c585292 HttpException: add a way to override response error message.
Before this change exceptions would print the message of the error code.
For example, for 500 they would print "Internal Server Error".
With this change we can now override this message with something more
sensible we got from the serer, for example "User is inactive."
2017-03-01 00:24:18 +00:00
Tom Hacohen
fc939a3cbe Shorten notification error title so account name is visible.
The text was too long and it was impossible to see the account name.
2017-03-01 00:24:08 +00:00
Tom Hacohen
ba789da797 Add a UserInactive exception for when the user is no longer active
This is a possible error message we get when we get error code 403
(permission denied) from the server. We then handle it explicitly by
sending the user to the dashboard.
2017-02-28 23:58:47 +00:00
Tom Hacohen
8e7d363128 Refactor notifications to launch a notification handler
With this change we no can launch external urls. For all I know this
doesn't work without this trick (an intent in the middle).

I also applied a transparent theme to the activity to avoid seeing the
launched activity briefly before opening external urls.

This is based on my experience working on "Share To Clipboard".
2017-02-28 23:26:19 +00:00
Tom Hacohen
d918622ba2 Fix issue with only one of the notifications being clickable. 2017-02-28 23:23:03 +00:00
Tom Hacohen
5d712c72d0 Add links to the usage guide. 2017-02-28 17:43:03 +00:00
Tom Hacohen
8c01e64ff4 Change the "delete collection" string to "Delete" 2017-02-28 17:42:51 +00:00
Tom Hacohen
3195c91e11 Bump version to 0.9.0. 2017-02-27 13:27:43 +00:00
Tom Hacohen
abc15f01d8 Rename the Android package to EteSync
I was trying to avoid it, and keep it as davdroid both for attribution,
and making it easy to cherry-pick fixes from DAVdroid.
However, it seems to be causing clashes with the davdroid app, although
every piece of documentation claims otherwise.[1]

At least it seems like cherry-picks can still be achieved using:

git cherry-pick -s recursive -X find-renames=30 COMMIT

1. https://developer.android.com/studio/build/application-id.html
(one such doc)
2017-02-27 13:23:24 +00:00
Tom Hacohen
94b29e86ac Implement sha256 using bouncy-castle. 2017-02-22 18:52:20 +00:00
Tom Hacohen
7a80b37818 Optimise proguard rules and fix warnings
We don't need to specify classes we don't use dynamically, so remove all
of the explicitly mentioned ones.

Fix a few warnings.
2017-02-22 18:52:20 +00:00
Tom Hacohen
0ebfa9cfbd Bump version to 0.8.1 and update changelog. 2017-02-22 18:52:20 +00:00
Tom Hacohen
116094c7b9 Ask for permissions on app launch. 2017-02-22 17:50:24 +00:00
Ricki Hirner
36ee584e6a Fetch translations from Transifex 2017-02-22 15:57:54 +00:00
Tom Hacohen
53637cec03 Remove translations to changed strings
I changed some strings (but kept the name) and remove others. This means
that the existing translations are no longer valid for those, so I wrote
a small script to see which strings I've changed/removed and removed
those from the translations.
2017-02-22 14:06:26 +00:00
Tom Hacohen
afca87f4d8 Toast the server name on startup in debug mode. 2017-02-22 14:06:26 +00:00
Tom Hacohen
2225ee0a03 Cleanup handling of notification errors. 2017-02-22 14:06:26 +00:00