From 838cc2a79dd367fde6e2d726fe8ffda87fc9ed99 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Fri, 10 Mar 2017 10:13:35 +0000 Subject: [PATCH] Merge contacts/calendars collection handling This also removes the "stats" from the edit collection screen. --- app/src/main/AndroidManifest.xml | 6 +- .../syncadapter/ui/AccountActivity.java | 36 +--- .../ui/CreateCalendarActivity.java | 174 ------------------ ...ity.java => CreateCollectionActivity.java} | 88 ++++----- .../ui/DeleteCollectionFragment.java | 2 +- .../ui/EditCollectionActivity.java | 84 +++++++++ .../layout/activity_create_address_book.xml | 64 ------- ...dar.xml => activity_create_collection.xml} | 23 +-- app/src/main/res/values/strings.xml | 1 + 9 files changed, 143 insertions(+), 335 deletions(-) delete mode 100644 app/src/main/java/com/etesync/syncadapter/ui/CreateCalendarActivity.java rename app/src/main/java/com/etesync/syncadapter/ui/{CreateAddressBookActivity.java => CreateCollectionActivity.java} (50%) create mode 100644 app/src/main/java/com/etesync/syncadapter/ui/EditCollectionActivity.java delete mode 100644 app/src/main/res/layout/activity_create_address_book.xml rename app/src/main/res/layout/{activity_create_calendar.xml => activity_create_collection.xml} (76%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6c3a4fc1..3c2fd429 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -183,10 +183,8 @@ - - + + parent, View view, int position, long id) { final ListView list = (ListView)parent; final ArrayAdapter adapter = (ArrayAdapter)list.getAdapter(); final CollectionInfo info = adapter.getItem(position); - Intent intent = new Intent(AccountActivity.this, CreateAddressBookActivity.class); - intent.putExtra(CreateAddressBookActivity.EXTRA_ACCOUNT, account); - intent.putExtra(CreateAddressBookActivity.EXTRA_COLLECTION_INFO, info); - startActivity(intent); - } - }; - - private AdapterView.OnItemClickListener onCalendarItemClickListener = new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - final ListView list = (ListView)parent; - final ArrayAdapter adapter = (ArrayAdapter)list.getAdapter(); - final CollectionInfo info = adapter.getItem(position); - - Intent intent = new Intent(AccountActivity.this, CreateCalendarActivity.class); - intent.putExtra(CreateCalendarActivity.EXTRA_ACCOUNT, account); - intent.putExtra(CreateCalendarActivity.EXTRA_COLLECTION_INFO, info); - if (adapter.getCount() > 1) { - intent.putExtra(CreateCalendarActivity.EXTRA_ALLOW_DELETE, true); - } - startActivity(intent); + startActivity(EditCollectionActivity.newIntent(AccountActivity.this, account, info, (adapter.getCount() > 1))); } }; @@ -250,7 +228,7 @@ public class AccountActivity extends AppCompatActivity implements Toolbar.OnMenu AddressBookAdapter adapter = new AddressBookAdapter(this); adapter.addAll(info.carddav.collections); listCardDAV.setAdapter(adapter); - listCardDAV.setOnItemClickListener(onContactItemClickListener); + listCardDAV.setOnItemClickListener(onItemClickListener); } else card.setVisibility(View.GONE); @@ -266,7 +244,7 @@ public class AccountActivity extends AppCompatActivity implements Toolbar.OnMenu final CalendarAdapter adapter = new CalendarAdapter(this); adapter.addAll(info.caldav.collections); listCalDAV.setAdapter(adapter); - listCalDAV.setOnItemClickListener(onCalendarItemClickListener); + listCalDAV.setOnItemClickListener(onItemClickListener); } else card.setVisibility(View.GONE); } diff --git a/app/src/main/java/com/etesync/syncadapter/ui/CreateCalendarActivity.java b/app/src/main/java/com/etesync/syncadapter/ui/CreateCalendarActivity.java deleted file mode 100644 index 2fcdc8f8..00000000 --- a/app/src/main/java/com/etesync/syncadapter/ui/CreateCalendarActivity.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright © 2013 – 2016 Ricki Hirner (bitfire web engineering). - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Public License v3.0 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/gpl.html - */ - -package com.etesync.syncadapter.ui; - -import android.accounts.Account; -import android.content.Intent; -import android.graphics.drawable.ColorDrawable; -import android.os.Bundle; -import android.provider.CalendarContract; -import android.support.v4.app.NavUtils; -import android.support.v7.app.AlertDialog; -import android.support.v7.app.AppCompatActivity; -import android.text.TextUtils; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.EditText; -import android.widget.TextView; - -import org.apache.commons.lang3.StringUtils; - -import com.etesync.syncadapter.App; -import com.etesync.syncadapter.R; -import com.etesync.syncadapter.model.CollectionInfo; -import com.etesync.syncadapter.model.EntryEntity; -import com.etesync.syncadapter.model.JournalEntity; -import com.etesync.syncadapter.resource.LocalCalendar; - -import java.util.Locale; - -import at.bitfire.ical4android.CalendarStorageException; -import io.requery.Persistable; -import io.requery.sql.EntityDataStore; -import yuku.ambilwarna.AmbilWarnaDialog; - -public class CreateCalendarActivity extends AppCompatActivity { - public static final String EXTRA_ACCOUNT = "account", - EXTRA_COLLECTION_INFO = "collectionInfo", - EXTRA_ALLOW_DELETE = "allowDelete"; - - protected Account account; - protected CollectionInfo info; - protected Boolean allowDelete; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - account = getIntent().getExtras().getParcelable(EXTRA_ACCOUNT); - info = (CollectionInfo) getIntent().getExtras().getSerializable(EXTRA_COLLECTION_INFO); - allowDelete = (Boolean) getIntent().getExtras().get(EXTRA_ALLOW_DELETE); - allowDelete = (allowDelete == null) ? false : allowDelete; - - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - - setContentView(R.layout.activity_create_calendar); - final View colorSquare = findViewById(R.id.color); - colorSquare.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - new AmbilWarnaDialog(CreateCalendarActivity.this, ((ColorDrawable) colorSquare.getBackground()).getColor(), true, new AmbilWarnaDialog.OnAmbilWarnaListener() { - @Override - public void onCancel(AmbilWarnaDialog dialog) { - } - - @Override - public void onOk(AmbilWarnaDialog dialog, int color) { - colorSquare.setBackgroundColor(color); - } - }).show(); - } - }); - - if (info != null) { - final EditText edit = (EditText) findViewById(R.id.display_name); - edit.setText(info.displayName); - - final EditText desc = (EditText) findViewById(R.id.description); - desc.setText(info.description); - - if (info.color != null) { - colorSquare.setBackgroundColor(info.color); - } else { - colorSquare.setBackgroundColor(LocalCalendar.defaultColor); - } - - final TextView stats = (TextView) findViewById(R.id.stats); - final View statsGroup = findViewById(R.id.stats_group); - try { - LocalCalendar resource = (LocalCalendar) LocalCalendar.find(account, this.getContentResolver().acquireContentProviderClient(CalendarContract.CONTENT_URI), - LocalCalendar.Factory.INSTANCE, CalendarContract.Calendars.NAME + "=?", new String[]{info.url})[0]; - long count = resource.count(); - EntityDataStore data = ((App) getApplication()).getData(); - int entryCount = -1; - final JournalEntity journalEntity = data.select(JournalEntity.class).where(JournalEntity.UID.eq(info.url)).limit(1).get().firstOrNull(); - if (journalEntity != null) { - entryCount = data.count(EntryEntity.class).where(EntryEntity.JOURNAL.eq(journalEntity)).get().value(); - } - stats.setText(String.format(Locale.getDefault(), "Events: %d, Journal entries: %d", count, entryCount)); - statsGroup.setVisibility(View.VISIBLE); - } catch (CalendarStorageException e) { - e.printStackTrace(); - } - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - if (info == null) { - getMenuInflater().inflate(R.menu.activity_create_collection, menu); - } else { - getMenuInflater().inflate(R.menu.activity_edit_collection, menu); - } - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - if (item.getItemId() == android.R.id.home) { - Intent intent = new Intent(this, AccountActivity.class); - intent.putExtra(AccountActivity.EXTRA_ACCOUNT, account); - NavUtils.navigateUpTo(this, intent); - return true; - } - return false; - } - - public void onDeleteCollection(MenuItem item) { - if (!allowDelete) { - new AlertDialog.Builder(this) - .setIcon(R.drawable.ic_error_dark) - .setTitle(R.string.account_delete_collection_last_title) - .setMessage(R.string.account_delete_collection_last_text) - .setPositiveButton(android.R.string.ok, null) - .show(); - } else { - DeleteCollectionFragment.ConfirmDeleteCollectionFragment.newInstance(account, info).show(getSupportFragmentManager(), null); - } - } - - public void onCreateCollection(MenuItem item) { - boolean ok = true; - if (info == null) { - info = new CollectionInfo(); - } - - EditText edit = (EditText) findViewById(R.id.display_name); - info.displayName = edit.getText().toString(); - if (TextUtils.isEmpty(info.displayName)) { - edit.setError(getString(R.string.create_collection_display_name_required)); - ok = false; - } - - edit = (EditText) findViewById(R.id.description); - info.description = StringUtils.trimToNull(edit.getText().toString()); - - View view = findViewById(R.id.color); - info.color = ((ColorDrawable) view.getBackground()).getColor(); - - if (ok) { - info.type = CollectionInfo.Type.CALENDAR; - info.supportsVEVENT = true; - info.selected = true; - - CreateCollectionFragment.newInstance(account, info).show(getSupportFragmentManager(), null); - } - } -} diff --git a/app/src/main/java/com/etesync/syncadapter/ui/CreateAddressBookActivity.java b/app/src/main/java/com/etesync/syncadapter/ui/CreateCollectionActivity.java similarity index 50% rename from app/src/main/java/com/etesync/syncadapter/ui/CreateAddressBookActivity.java rename to app/src/main/java/com/etesync/syncadapter/ui/CreateCollectionActivity.java index 85075fbf..c6139655 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/CreateAddressBookActivity.java +++ b/app/src/main/java/com/etesync/syncadapter/ui/CreateCollectionActivity.java @@ -9,9 +9,10 @@ package com.etesync.syncadapter.ui; import android.accounts.Account; +import android.content.Context; import android.content.Intent; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; -import android.provider.ContactsContract; import android.support.v4.app.NavUtils; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; @@ -19,65 +20,63 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; -import android.widget.TextView; -import com.etesync.syncadapter.App; import com.etesync.syncadapter.R; import com.etesync.syncadapter.model.CollectionInfo; -import com.etesync.syncadapter.model.EntryEntity; -import com.etesync.syncadapter.model.JournalEntity; -import com.etesync.syncadapter.resource.LocalAddressBook; import org.apache.commons.lang3.StringUtils; -import org.w3c.dom.Text; -import java.util.Locale; +import yuku.ambilwarna.AmbilWarnaDialog; -import at.bitfire.vcard4android.ContactsStorageException; -import io.requery.Persistable; -import io.requery.sql.EntityDataStore; - -public class CreateAddressBookActivity extends AppCompatActivity { - public static final String EXTRA_ACCOUNT = "account", - EXTRA_COLLECTION_INFO = "collectionInfo"; +public class CreateCollectionActivity extends AppCompatActivity { + static final String EXTRA_ACCOUNT = "account", + EXTRA_COLLECTION_INFO = "collectionInfo"; protected Account account; protected CollectionInfo info; + public static Intent newIntent(Context context, Account account, CollectionInfo info) { + Intent intent = new Intent(context, CreateCollectionActivity.class); + intent.putExtra(CreateCollectionActivity.EXTRA_ACCOUNT, account); + intent.putExtra(CreateCollectionActivity.EXTRA_COLLECTION_INFO, info); + return intent; + } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - account = getIntent().getParcelableExtra(EXTRA_ACCOUNT); + account = getIntent().getExtras().getParcelable(EXTRA_ACCOUNT); info = (CollectionInfo) getIntent().getExtras().getSerializable(EXTRA_COLLECTION_INFO); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - setContentView(R.layout.activity_create_address_book); - if (info != null) { - final EditText edit = (EditText) findViewById(R.id.display_name); - edit.setText(info.displayName); + setContentView(R.layout.activity_create_collection); - final EditText desc = (EditText) findViewById(R.id.description); - desc.setText(info.description); + if (info.type == CollectionInfo.Type.CALENDAR) { + setTitle(R.string.create_calendar); - final TextView stats = (TextView) findViewById(R.id.stats); - final View statsGroup = findViewById(R.id.stats_group); - try { - LocalAddressBook resource = new LocalAddressBook(account, this.getContentResolver().acquireContentProviderClient(ContactsContract.Contacts.CONTENT_URI)); - long count = resource.count(); - EntityDataStore data = ((App) getApplication()).getData(); - int entryCount = -1; - final JournalEntity journalEntity = data.select(JournalEntity.class).where(JournalEntity.UID.eq(info.url)).limit(1).get().firstOrNull(); - if (journalEntity != null) { - entryCount = data.count(EntryEntity.class).where(EntryEntity.JOURNAL.eq(journalEntity)).get().value(); - }; - stats.setText(String.format(Locale.getDefault(), "Contacts: %d, Journal Entries: %d", count, entryCount)); - statsGroup.setVisibility(View.VISIBLE); - } catch (ContactsStorageException e) { - e.printStackTrace(); - } + final View colorSquare = findViewById(R.id.color); + colorSquare.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new AmbilWarnaDialog(CreateCollectionActivity.this, ((ColorDrawable) colorSquare.getBackground()).getColor(), true, new AmbilWarnaDialog.OnAmbilWarnaListener() { + @Override + public void onCancel(AmbilWarnaDialog dialog) { + } + + @Override + public void onOk(AmbilWarnaDialog dialog, int color) { + colorSquare.setBackgroundColor(color); + } + }).show(); + } + }); + } else { + setTitle(R.string.create_addressbook); + + final View colorGroup = findViewById(R.id.color_group); + colorGroup.setVisibility(View.GONE); } } @@ -104,18 +103,25 @@ public class CreateAddressBookActivity extends AppCompatActivity { info = new CollectionInfo(); } - EditText edit = (EditText)findViewById(R.id.display_name); + EditText edit = (EditText) findViewById(R.id.display_name); info.displayName = edit.getText().toString(); if (TextUtils.isEmpty(info.displayName)) { edit.setError(getString(R.string.create_collection_display_name_required)); ok = false; } - edit = (EditText)findViewById(R.id.description); + edit = (EditText) findViewById(R.id.description); info.description = StringUtils.trimToNull(edit.getText().toString()); if (ok) { - info.type = CollectionInfo.Type.ADDRESS_BOOK; + if (info.type == CollectionInfo.Type.CALENDAR) { + View view = findViewById(R.id.color); + info.color = ((ColorDrawable) view.getBackground()).getColor(); + + info.supportsVEVENT = true; + } + + info.selected = true; CreateCollectionFragment.newInstance(account, info).show(getSupportFragmentManager(), null); } diff --git a/app/src/main/java/com/etesync/syncadapter/ui/DeleteCollectionFragment.java b/app/src/main/java/com/etesync/syncadapter/ui/DeleteCollectionFragment.java index b53c5cdd..4e76adc1 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/DeleteCollectionFragment.java +++ b/app/src/main/java/com/etesync/syncadapter/ui/DeleteCollectionFragment.java @@ -84,7 +84,7 @@ public class DeleteCollectionFragment extends DialogFragment implements LoaderMa Activity activity = getActivity(); if (activity instanceof AccountActivity) ((AccountActivity) activity).reload(); - else if (activity instanceof CreateCalendarActivity) + else if (activity instanceof CreateCollectionActivity) activity.finish(); } } diff --git a/app/src/main/java/com/etesync/syncadapter/ui/EditCollectionActivity.java b/app/src/main/java/com/etesync/syncadapter/ui/EditCollectionActivity.java new file mode 100644 index 00000000..a0465812 --- /dev/null +++ b/app/src/main/java/com/etesync/syncadapter/ui/EditCollectionActivity.java @@ -0,0 +1,84 @@ +/* + * Copyright © 2013 – 2016 Ricki Hirner (bitfire web engineering). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the GNU Public License v3.0 + * which accompanies this distribution, and is available at + * http://www.gnu.org/licenses/gpl.html + */ + +package com.etesync.syncadapter.ui; + +import android.accounts.Account; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AlertDialog; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.EditText; + +import com.etesync.syncadapter.R; +import com.etesync.syncadapter.model.CollectionInfo; +import com.etesync.syncadapter.resource.LocalCalendar; + +public class EditCollectionActivity extends CreateCollectionActivity { + private final static String EXTRA_ALLOW_DELETE = "allowDelete"; + + protected boolean allowDelete; + + public static Intent newIntent(Context context, Account account, CollectionInfo info, boolean allowDelete) { + Intent intent = new Intent(context, EditCollectionActivity.class); + intent.putExtra(CreateCollectionActivity.EXTRA_ACCOUNT, account); + intent.putExtra(CreateCollectionActivity.EXTRA_COLLECTION_INFO, info); + intent.putExtra(EXTRA_ALLOW_DELETE, allowDelete); + return intent; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + allowDelete = getIntent().getExtras().getBoolean(EXTRA_ALLOW_DELETE, false); + + setTitle(R.string.edit_collection); + + if (info.type == CollectionInfo.Type.CALENDAR) { + final View colorSquare = findViewById(R.id.color); + if (info.color != null) { + colorSquare.setBackgroundColor(info.color); + } else { + colorSquare.setBackgroundColor(LocalCalendar.defaultColor); + } + } + + final EditText edit = (EditText) findViewById(R.id.display_name); + edit.setText(info.displayName); + + final EditText desc = (EditText) findViewById(R.id.description); + desc.setText(info.description); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + if (info.type == CollectionInfo.Type.ADDRESS_BOOK) { + getMenuInflater().inflate(R.menu.activity_create_collection, menu); + } else { + getMenuInflater().inflate(R.menu.activity_edit_collection, menu); + } + return true; + } + + public void onDeleteCollection(MenuItem item) { + if (!allowDelete) { + new AlertDialog.Builder(this) + .setIcon(R.drawable.ic_error_dark) + .setTitle(R.string.account_delete_collection_last_title) + .setMessage(R.string.account_delete_collection_last_text) + .setPositiveButton(android.R.string.ok, null) + .show(); + } else { + DeleteCollectionFragment.ConfirmDeleteCollectionFragment.newInstance(account, info).show(getSupportFragmentManager(), null); + } + } +} diff --git a/app/src/main/res/layout/activity_create_address_book.xml b/app/src/main/res/layout/activity_create_address_book.xml deleted file mode 100644 index 75f0d58c..00000000 --- a/app/src/main/res/layout/activity_create_address_book.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/activity_create_calendar.xml b/app/src/main/res/layout/activity_create_collection.xml similarity index 76% rename from app/src/main/res/layout/activity_create_calendar.xml rename to app/src/main/res/layout/activity_create_collection.xml index 4fa399da..8d8ea09e 100644 --- a/app/src/main/res/layout/activity_create_calendar.xml +++ b/app/src/main/res/layout/activity_create_collection.xml @@ -39,6 +39,7 @@ android:inputType="textAutoCorrect"/> - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7d77b705..fde1276b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -181,6 +181,7 @@ My Address Book Create calendar My Calendar + Edit collection Set the calendar\'s color Creating collection Display name (title) of this collection: