From 13d5df230b8b18fe752dd943aca0413d63b93567 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sun, 8 Mar 2020 07:32:59 -0500 Subject: [PATCH] Rename EteSync lists, sync EteSync colors --- .../BaseCaldavCalendarSettingsActivity.java | 36 +++++++++++++------ .../CaldavCalendarSettingsActivity.java | 13 ++++++- .../etesync/CreateCalendarViewModel.java | 4 +-- .../EteSyncCalendarSettingsActivity.java | 13 +++++-- .../java/org/tasks/etesync/EteSyncClient.java | 23 +++++++++--- .../org/tasks/etesync/EteSynchronizer.java | 7 +++- .../etesync/UpdateCalendarViewModel.java | 17 +++++++++ 7 files changed, 92 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/org/tasks/etesync/UpdateCalendarViewModel.java diff --git a/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.java b/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.java index 56be11e89..b6d95d23b 100644 --- a/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.java +++ b/app/src/main/java/org/tasks/caldav/BaseCaldavCalendarSettingsActivity.java @@ -69,7 +69,6 @@ public abstract class BaseCaldavCalendarSettingsActivity extends BaseListSetting caldavAccount = intent.getParcelableExtra(EXTRA_CALDAV_ACCOUNT); } else { caldavAccount = caldavDao.getAccountByUuid(caldavCalendar.getAccount()); - nameLayout.setVisibility(View.GONE); } caldavAccount = caldavCalendar == null @@ -123,15 +122,21 @@ public abstract class BaseCaldavCalendarSettingsActivity extends BaseListSetting if (caldavCalendar == null) { showProgressIndicator(); - createCalendar(caldavAccount, name); - } else if (hasChanges()) { + createCalendar(caldavAccount, name, selectedColor); + } else if (nameChanged() || colorChanged()) { + showProgressIndicator(); + updateNameAndColor(caldavAccount, caldavCalendar, name, selectedColor); + } else if (iconChanged()) { updateAccount(); } else { finish(); } } - protected abstract void createCalendar(CaldavAccount caldavAccount, String name); + protected abstract void createCalendar(CaldavAccount caldavAccount, String name, int color); + + protected abstract void updateNameAndColor( + CaldavAccount account, CaldavCalendar calendar, String name, int color); protected abstract void deleteCalendar( CaldavAccount caldavAccount, CaldavCalendar caldavCalendar); @@ -192,7 +197,7 @@ public abstract class BaseCaldavCalendarSettingsActivity extends BaseListSetting finish(); } - private void updateAccount() { + protected void updateAccount() { caldavCalendar.setName(getNewName()); caldavCalendar.setColor(selectedColor); caldavCalendar.setIcon(selectedIcon); @@ -206,12 +211,21 @@ public abstract class BaseCaldavCalendarSettingsActivity extends BaseListSetting @Override protected boolean hasChanges() { - if (caldavCalendar == null) { - return !isEmpty(getNewName()) || selectedColor != -1 || selectedIcon != -1; - } - return !caldavCalendar.getName().equals(getNewName()) - || selectedIcon != caldavCalendar.getIcon() - || selectedColor != caldavCalendar.getColor(); + return caldavCalendar == null + ? !isEmpty(getNewName()) || selectedColor != 0 || selectedIcon != -1 + : nameChanged() || iconChanged() || colorChanged(); + } + + private boolean nameChanged() { + return !caldavCalendar.getName().equals(getNewName()); + } + + private boolean colorChanged() { + return selectedColor != caldavCalendar.getColor(); + } + + private boolean iconChanged() { + return selectedIcon != caldavCalendar.getIcon(); } private String getNewName() { diff --git a/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.java b/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.java index a248ac171..82dca042b 100644 --- a/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.java +++ b/app/src/main/java/org/tasks/caldav/CaldavCalendarSettingsActivity.java @@ -1,6 +1,7 @@ package org.tasks.caldav; import android.os.Bundle; +import android.view.View; import androidx.lifecycle.ViewModelProviders; import javax.inject.Inject; import org.tasks.R; @@ -24,6 +25,10 @@ public class CaldavCalendarSettingsActivity extends BaseCaldavCalendarSettingsAc protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (!isNew()) { + nameLayout.setVisibility(View.GONE); + } + createCalendarViewModel = ViewModelProviders.of(this).get(CreateCalendarViewModel.class); deleteCalendarViewModel = ViewModelProviders.of(this).get(DeleteCalendarViewModel.class); @@ -37,10 +42,16 @@ public class CaldavCalendarSettingsActivity extends BaseCaldavCalendarSettingsAc } @Override - protected void createCalendar(CaldavAccount caldavAccount, String name) { + protected void createCalendar(CaldavAccount caldavAccount, String name, int color) { createCalendarViewModel.createCalendar(client, caldavAccount, name); } + @Override + protected void updateNameAndColor( + CaldavAccount account, CaldavCalendar calendar, String name, int color) { + updateAccount(); + } + @Override protected void deleteCalendar(CaldavAccount caldavAccount, CaldavCalendar caldavCalendar) { deleteCalendarViewModel.deleteCalendar(client, caldavAccount, caldavCalendar); diff --git a/app/src/main/java/org/tasks/etesync/CreateCalendarViewModel.java b/app/src/main/java/org/tasks/etesync/CreateCalendarViewModel.java index 5fb67673c..afdac31c2 100644 --- a/app/src/main/java/org/tasks/etesync/CreateCalendarViewModel.java +++ b/app/src/main/java/org/tasks/etesync/CreateCalendarViewModel.java @@ -5,7 +5,7 @@ import org.tasks.ui.CompletableViewModel; @SuppressWarnings("WeakerAccess") public class CreateCalendarViewModel extends CompletableViewModel { - void createCalendar(EteSyncClient client, CaldavAccount account, String name) { - run(() -> client.forAccount(account).makeCollection(name)); + void createCalendar(EteSyncClient client, CaldavAccount account, String name, int color) { + run(() -> client.forAccount(account).makeCollection(name, color)); } } diff --git a/app/src/main/java/org/tasks/etesync/EteSyncCalendarSettingsActivity.java b/app/src/main/java/org/tasks/etesync/EteSyncCalendarSettingsActivity.java index 9ff89fe22..735da5f80 100644 --- a/app/src/main/java/org/tasks/etesync/EteSyncCalendarSettingsActivity.java +++ b/app/src/main/java/org/tasks/etesync/EteSyncCalendarSettingsActivity.java @@ -13,6 +13,7 @@ public class EteSyncCalendarSettingsActivity extends BaseCaldavCalendarSettingsA @Inject EteSyncClient client; private CreateCalendarViewModel createCalendarViewModel; private DeleteCalendarViewModel deleteCalendarViewModel; + private UpdateCalendarViewModel updateCalendarViewModel; @Override protected void onCreate(Bundle savedInstanceState) { @@ -20,14 +21,22 @@ public class EteSyncCalendarSettingsActivity extends BaseCaldavCalendarSettingsA createCalendarViewModel = ViewModelProviders.of(this).get(CreateCalendarViewModel.class); deleteCalendarViewModel = ViewModelProviders.of(this).get(DeleteCalendarViewModel.class); + updateCalendarViewModel = ViewModelProviders.of(this).get(UpdateCalendarViewModel.class); createCalendarViewModel.observe(this, this::createSuccessful, this::requestFailed); deleteCalendarViewModel.observe(this, this::onDeleted, this::requestFailed); + updateCalendarViewModel.observe(this, uid -> updateAccount(), this::requestFailed); } @Override - protected void createCalendar(CaldavAccount caldavAccount, String name) { - createCalendarViewModel.createCalendar(client, caldavAccount, name); + protected void createCalendar(CaldavAccount caldavAccount, String name, int color) { + createCalendarViewModel.createCalendar(client, caldavAccount, name, color); + } + + @Override + protected void updateNameAndColor(CaldavAccount account, CaldavCalendar calendar, String name, + int color) { + updateCalendarViewModel.updateCalendar(client, account, calendar, name, color); } @Override diff --git a/app/src/main/java/org/tasks/etesync/EteSyncClient.java b/app/src/main/java/org/tasks/etesync/EteSyncClient.java index 83cb221c2..e7aaba370 100644 --- a/app/src/main/java/org/tasks/etesync/EteSyncClient.java +++ b/app/src/main/java/org/tasks/etesync/EteSyncClient.java @@ -248,17 +248,32 @@ public class EteSyncClient { } } - String makeCollection(String name) + String makeCollection(String name, int color) throws VersionTooNewException, IntegrityException, HttpException { String uid = Journal.genUid(); + CollectionInfo collectionInfo = createCollectionInfo(uid, name, color); + CryptoManager crypto = new CryptoManager(collectionInfo.getVersion(), encryptionPassword, uid); + journalManager.create(new Journal(crypto, collectionInfo.toJson(), uid)); + return uid; + } + + String updateCollection(CaldavCalendar calendar, String name, int color) + throws VersionTooNewException, IntegrityException, HttpException { + String uid = calendar.getUrl(); + CollectionInfo collectionInfo = createCollectionInfo(uid, name, color); + CryptoManager crypto = new CryptoManager(collectionInfo.getVersion(), encryptionPassword, uid); + journalManager.update(new Journal(crypto, collectionInfo.toJson(), uid)); + return uid; + } + + private CollectionInfo createCollectionInfo(String uid, String name, int color) { CollectionInfo collectionInfo = new CollectionInfo(); collectionInfo.setDisplayName(name); collectionInfo.setType(TYPE_TASKS); collectionInfo.setUid(uid); collectionInfo.setSelected(true); - CryptoManager crypto = new CryptoManager(collectionInfo.getVersion(), encryptionPassword, uid); - journalManager.create(new Journal(crypto, collectionInfo.toJson(), uid)); - return uid; + collectionInfo.setColor(color == 0 ? null : color); + return collectionInfo; } void deleteCollection(CaldavCalendar calendar) throws HttpException { diff --git a/app/src/main/java/org/tasks/etesync/EteSynchronizer.java b/app/src/main/java/org/tasks/etesync/EteSynchronizer.java index dc5b3e518..357eeb001 100644 --- a/app/src/main/java/org/tasks/etesync/EteSynchronizer.java +++ b/app/src/main/java/org/tasks/etesync/EteSynchronizer.java @@ -143,16 +143,21 @@ public class EteSynchronizer { String uid = collection.getUid(); CaldavCalendar calendar = caldavDao.getCalendarByUrl(account.getUuid(), uid); + Integer colorInt = collection.getColor(); + int color = colorInt == null ? 0 : colorInt; if (calendar == null) { calendar = new CaldavCalendar(); calendar.setName(collection.getDisplayName()); calendar.setAccount(account.getUuid()); calendar.setUrl(collection.getUid()); calendar.setUuid(UUIDHelper.newUUID()); + calendar.setColor(color); caldavDao.insert(calendar); } else { - if (!calendar.getName().equals(collection.getDisplayName())) { + if (!calendar.getName().equals(collection.getDisplayName()) + || calendar.getColor() != color) { calendar.setName(collection.getDisplayName()); + calendar.setColor(color); caldavDao.update(calendar); localBroadcastManager.broadcastRefreshList(); } diff --git a/app/src/main/java/org/tasks/etesync/UpdateCalendarViewModel.java b/app/src/main/java/org/tasks/etesync/UpdateCalendarViewModel.java new file mode 100644 index 000000000..c8e6c45c7 --- /dev/null +++ b/app/src/main/java/org/tasks/etesync/UpdateCalendarViewModel.java @@ -0,0 +1,17 @@ +package org.tasks.etesync; + +import org.tasks.data.CaldavAccount; +import org.tasks.data.CaldavCalendar; +import org.tasks.ui.CompletableViewModel; + +@SuppressWarnings("WeakerAccess") +public class UpdateCalendarViewModel extends CompletableViewModel { + void updateCalendar( + EteSyncClient client, + CaldavAccount account, + CaldavCalendar calendar, + String name, + int color) { + run(() -> client.forAccount(account).updateCollection(calendar, name, color)); + } +}