diff --git a/app/src/main/java/com/etesync/syncadapter/ui/JournalItemActivity.kt b/app/src/main/java/com/etesync/syncadapter/ui/JournalItemActivity.kt index 2e06e4a1..877db70c 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/JournalItemActivity.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/JournalItemActivity.kt @@ -1,5 +1,6 @@ package com.etesync.syncadapter.ui +import android.accounts.Account import android.content.Context import android.content.Intent import android.os.Bundle @@ -11,9 +12,7 @@ import android.support.v4.view.ViewPager import android.text.format.DateFormat import android.text.format.DateUtils import android.text.format.Time -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup +import android.view.* import android.widget.TextView import at.bitfire.ical4android.Event import at.bitfire.ical4android.InvalidCalendarException @@ -26,6 +25,7 @@ import com.etesync.syncadapter.model.CollectionInfo import com.etesync.syncadapter.model.JournalEntity import com.etesync.syncadapter.model.SyncEntry import com.etesync.syncadapter.ui.journalviewer.ListEntriesFragment.Companion.setJournalEntryView +import com.etesync.syncadapter.utils.EventEmailInvitation import ezvcard.util.PartialDate import org.jetbrains.anko.doAsync import org.jetbrains.anko.uiThread @@ -37,8 +37,11 @@ import java.util.concurrent.Future class JournalItemActivity : BaseActivity(), Refreshable { private var journalEntity: JournalEntity? = null + private lateinit var account: Account protected lateinit var info: CollectionInfo private lateinit var syncEntry: SyncEntry + private var emailInvitationEvent: Event? = null + private var emailInvitationEventString: String? = null override fun refresh() { val data = (applicationContext as App).data @@ -49,6 +52,7 @@ class JournalItemActivity : BaseActivity(), Refreshable { return } + account = intent.extras!!.getParcelable(ViewCollectionActivity.EXTRA_ACCOUNT)!! info = journalEntity!!.info title = info.displayName @@ -75,6 +79,24 @@ class JournalItemActivity : BaseActivity(), Refreshable { tabLayout.setupWithViewPager(viewPager) } + override fun onCreateOptionsMenu(menu: Menu): Boolean { + if (emailInvitationEvent != null) { + menuInflater.inflate(R.menu.activity_journal_item, menu) + } + return true + } + + fun allowSendEmail(event: Event?, icsContent: String) { + emailInvitationEvent = event + emailInvitationEventString = icsContent + invalidateOptionsMenu() + } + + fun sendEventInvite(item: MenuItem) { + val intent = EventEmailInvitation(this, account).createIntent(emailInvitationEvent!!, emailInvitationEventString!!) + startActivity(intent) + } + private class TabsAdapter(fm: FragmentManager, private val context: Context, private val info: CollectionInfo, private val syncEntry: SyncEntry) : FragmentPagerAdapter(fm) { override fun getCount(): Int { @@ -220,6 +242,10 @@ class JournalItemActivity : BaseActivity(), Refreshable { sb.append(alarm.trigger.value) } setTextViewText(view, R.id.reminders, sb.toString()) + + if (event.attendees.isNotEmpty() && activity != null) { + (activity as JournalItemActivity).allowSendEmail(event, syncEntry.content) + } } } } @@ -467,8 +493,9 @@ class JournalItemActivity : BaseActivity(), Refreshable { companion object { private val KEY_SYNC_ENTRY = "syncEntry" - fun newIntent(context: Context, info: CollectionInfo, syncEntry: SyncEntry): Intent { + fun newIntent(context: Context, account: Account, info: CollectionInfo, syncEntry: SyncEntry): Intent { val intent = Intent(context, JournalItemActivity::class.java) + intent.putExtra(ViewCollectionActivity.EXTRA_ACCOUNT, account) intent.putExtra(Constants.KEY_COLLECTION_INFO, info) intent.putExtra(KEY_SYNC_ENTRY, syncEntry) return intent diff --git a/app/src/main/java/com/etesync/syncadapter/ui/ViewCollectionActivity.kt b/app/src/main/java/com/etesync/syncadapter/ui/ViewCollectionActivity.kt index 5ae1d2b8..44660a5c 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/ViewCollectionActivity.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/ViewCollectionActivity.kt @@ -102,7 +102,7 @@ class ViewCollectionActivity : BaseActivity(), Refreshable { if (savedInstanceState == null) { supportFragmentManager.beginTransaction() - .add(R.id.list_entries_container, ListEntriesFragment.newInstance(info)) + .add(R.id.list_entries_container, ListEntriesFragment.newInstance(account, info)) .commit() } diff --git a/app/src/main/java/com/etesync/syncadapter/ui/journalviewer/ListEntriesFragment.kt b/app/src/main/java/com/etesync/syncadapter/ui/journalviewer/ListEntriesFragment.kt index 820a9c21..32c7c920 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/journalviewer/ListEntriesFragment.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/journalviewer/ListEntriesFragment.kt @@ -8,6 +8,7 @@ package com.etesync.syncadapter.ui.journalviewer +import android.accounts.Account import android.content.Context import android.os.Bundle import android.support.v4.app.ListFragment @@ -22,6 +23,7 @@ import com.etesync.syncadapter.App import com.etesync.syncadapter.R import com.etesync.syncadapter.model.* import com.etesync.syncadapter.ui.JournalItemActivity +import com.etesync.syncadapter.ui.ViewCollectionActivity import io.requery.Persistable import io.requery.sql.EntityDataStore import org.jetbrains.anko.doAsync @@ -31,6 +33,7 @@ import java.util.concurrent.Future class ListEntriesFragment : ListFragment(), AdapterView.OnItemClickListener { private lateinit var data: EntityDataStore + private lateinit var account: Account private lateinit var info: CollectionInfo private var journalEntity: JournalEntity? = null private var asyncTask: Future? = null @@ -40,6 +43,7 @@ class ListEntriesFragment : ListFragment(), AdapterView.OnItemClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) data = (context!!.applicationContext as App).data + account = arguments!!.getParcelable(ViewCollectionActivity.EXTRA_ACCOUNT)!! info = arguments!!.getSerializable(EXTRA_COLLECTION_INFO) as CollectionInfo } @@ -85,7 +89,7 @@ class ListEntriesFragment : ListFragment(), AdapterView.OnItemClickListener { override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) { val entry = listAdapter.getItem(position) as EntryEntity - startActivity(JournalItemActivity.newIntent(context!!, info, entry.content)) + startActivity(JournalItemActivity.newIntent(context!!, account, info, entry.content)) } internal inner class EntriesListAdapter(context: Context) : ArrayAdapter(context, R.layout.journal_viewer_list_item) { @@ -110,9 +114,10 @@ class ListEntriesFragment : ListFragment(), AdapterView.OnItemClickListener { companion object { protected val EXTRA_COLLECTION_INFO = "collectionInfo" - fun newInstance(info: CollectionInfo): ListEntriesFragment { + fun newInstance(account: Account, info: CollectionInfo): ListEntriesFragment { val frag = ListEntriesFragment() val args = Bundle(1) + args.putParcelable(ViewCollectionActivity.EXTRA_ACCOUNT, account) args.putSerializable(EXTRA_COLLECTION_INFO, info) frag.arguments = args return frag diff --git a/app/src/main/res/menu/activity_journal_item.xml b/app/src/main/res/menu/activity_journal_item.xml new file mode 100644 index 00000000..0f4598c1 --- /dev/null +++ b/app/src/main/res/menu/activity_journal_item.xml @@ -0,0 +1,17 @@ + + + + + + + \ 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 76482d22..efce8efd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -336,6 +336,7 @@ %s Send invitations to guests? + Send invitations Invitation: %s @ %s You have been invited to the following event:\n\n%s\nWhen: %s\nWhere: %s\nAttendees: %s\n\n--\nThis email was created by EteSync.\nSecure, encrypted and journaled cloud sync.