mirror of
https://github.com/etesync/android
synced 2025-02-02 19:01:06 +00:00
Event invitations: add a button to send an email invite from the journal item view.
This commit is contained in:
parent
7b0cdff9dc
commit
fe7aa2208b
@ -1,5 +1,6 @@
|
|||||||
package com.etesync.syncadapter.ui
|
package com.etesync.syncadapter.ui
|
||||||
|
|
||||||
|
import android.accounts.Account
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
@ -11,9 +12,7 @@ import android.support.v4.view.ViewPager
|
|||||||
import android.text.format.DateFormat
|
import android.text.format.DateFormat
|
||||||
import android.text.format.DateUtils
|
import android.text.format.DateUtils
|
||||||
import android.text.format.Time
|
import android.text.format.Time
|
||||||
import android.view.LayoutInflater
|
import android.view.*
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import at.bitfire.ical4android.Event
|
import at.bitfire.ical4android.Event
|
||||||
import at.bitfire.ical4android.InvalidCalendarException
|
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.JournalEntity
|
||||||
import com.etesync.syncadapter.model.SyncEntry
|
import com.etesync.syncadapter.model.SyncEntry
|
||||||
import com.etesync.syncadapter.ui.journalviewer.ListEntriesFragment.Companion.setJournalEntryView
|
import com.etesync.syncadapter.ui.journalviewer.ListEntriesFragment.Companion.setJournalEntryView
|
||||||
|
import com.etesync.syncadapter.utils.EventEmailInvitation
|
||||||
import ezvcard.util.PartialDate
|
import ezvcard.util.PartialDate
|
||||||
import org.jetbrains.anko.doAsync
|
import org.jetbrains.anko.doAsync
|
||||||
import org.jetbrains.anko.uiThread
|
import org.jetbrains.anko.uiThread
|
||||||
@ -37,8 +37,11 @@ import java.util.concurrent.Future
|
|||||||
|
|
||||||
class JournalItemActivity : BaseActivity(), Refreshable {
|
class JournalItemActivity : BaseActivity(), Refreshable {
|
||||||
private var journalEntity: JournalEntity? = null
|
private var journalEntity: JournalEntity? = null
|
||||||
|
private lateinit var account: Account
|
||||||
protected lateinit var info: CollectionInfo
|
protected lateinit var info: CollectionInfo
|
||||||
private lateinit var syncEntry: SyncEntry
|
private lateinit var syncEntry: SyncEntry
|
||||||
|
private var emailInvitationEvent: Event? = null
|
||||||
|
private var emailInvitationEventString: String? = null
|
||||||
|
|
||||||
override fun refresh() {
|
override fun refresh() {
|
||||||
val data = (applicationContext as App).data
|
val data = (applicationContext as App).data
|
||||||
@ -49,6 +52,7 @@ class JournalItemActivity : BaseActivity(), Refreshable {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
account = intent.extras!!.getParcelable(ViewCollectionActivity.EXTRA_ACCOUNT)!!
|
||||||
info = journalEntity!!.info
|
info = journalEntity!!.info
|
||||||
|
|
||||||
title = info.displayName
|
title = info.displayName
|
||||||
@ -75,6 +79,24 @@ class JournalItemActivity : BaseActivity(), Refreshable {
|
|||||||
tabLayout.setupWithViewPager(viewPager)
|
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) {
|
private class TabsAdapter(fm: FragmentManager, private val context: Context, private val info: CollectionInfo, private val syncEntry: SyncEntry) : FragmentPagerAdapter(fm) {
|
||||||
|
|
||||||
override fun getCount(): Int {
|
override fun getCount(): Int {
|
||||||
@ -220,6 +242,10 @@ class JournalItemActivity : BaseActivity(), Refreshable {
|
|||||||
sb.append(alarm.trigger.value)
|
sb.append(alarm.trigger.value)
|
||||||
}
|
}
|
||||||
setTextViewText(view, R.id.reminders, sb.toString())
|
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 {
|
companion object {
|
||||||
private val KEY_SYNC_ENTRY = "syncEntry"
|
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)
|
val intent = Intent(context, JournalItemActivity::class.java)
|
||||||
|
intent.putExtra(ViewCollectionActivity.EXTRA_ACCOUNT, account)
|
||||||
intent.putExtra(Constants.KEY_COLLECTION_INFO, info)
|
intent.putExtra(Constants.KEY_COLLECTION_INFO, info)
|
||||||
intent.putExtra(KEY_SYNC_ENTRY, syncEntry)
|
intent.putExtra(KEY_SYNC_ENTRY, syncEntry)
|
||||||
return intent
|
return intent
|
||||||
|
@ -102,7 +102,7 @@ class ViewCollectionActivity : BaseActivity(), Refreshable {
|
|||||||
|
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
supportFragmentManager.beginTransaction()
|
supportFragmentManager.beginTransaction()
|
||||||
.add(R.id.list_entries_container, ListEntriesFragment.newInstance(info))
|
.add(R.id.list_entries_container, ListEntriesFragment.newInstance(account, info))
|
||||||
.commit()
|
.commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
package com.etesync.syncadapter.ui.journalviewer
|
package com.etesync.syncadapter.ui.journalviewer
|
||||||
|
|
||||||
|
import android.accounts.Account
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.support.v4.app.ListFragment
|
import android.support.v4.app.ListFragment
|
||||||
@ -22,6 +23,7 @@ import com.etesync.syncadapter.App
|
|||||||
import com.etesync.syncadapter.R
|
import com.etesync.syncadapter.R
|
||||||
import com.etesync.syncadapter.model.*
|
import com.etesync.syncadapter.model.*
|
||||||
import com.etesync.syncadapter.ui.JournalItemActivity
|
import com.etesync.syncadapter.ui.JournalItemActivity
|
||||||
|
import com.etesync.syncadapter.ui.ViewCollectionActivity
|
||||||
import io.requery.Persistable
|
import io.requery.Persistable
|
||||||
import io.requery.sql.EntityDataStore
|
import io.requery.sql.EntityDataStore
|
||||||
import org.jetbrains.anko.doAsync
|
import org.jetbrains.anko.doAsync
|
||||||
@ -31,6 +33,7 @@ import java.util.concurrent.Future
|
|||||||
class ListEntriesFragment : ListFragment(), AdapterView.OnItemClickListener {
|
class ListEntriesFragment : ListFragment(), AdapterView.OnItemClickListener {
|
||||||
|
|
||||||
private lateinit var data: EntityDataStore<Persistable>
|
private lateinit var data: EntityDataStore<Persistable>
|
||||||
|
private lateinit var account: Account
|
||||||
private lateinit var info: CollectionInfo
|
private lateinit var info: CollectionInfo
|
||||||
private var journalEntity: JournalEntity? = null
|
private var journalEntity: JournalEntity? = null
|
||||||
private var asyncTask: Future<Unit>? = null
|
private var asyncTask: Future<Unit>? = null
|
||||||
@ -40,6 +43,7 @@ class ListEntriesFragment : ListFragment(), AdapterView.OnItemClickListener {
|
|||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
data = (context!!.applicationContext as App).data
|
data = (context!!.applicationContext as App).data
|
||||||
|
account = arguments!!.getParcelable(ViewCollectionActivity.EXTRA_ACCOUNT)!!
|
||||||
info = arguments!!.getSerializable(EXTRA_COLLECTION_INFO) as CollectionInfo
|
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) {
|
override fun onItemClick(parent: AdapterView<*>, view: View, position: Int, id: Long) {
|
||||||
val entry = listAdapter.getItem(position) as EntryEntity
|
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<EntryEntity>(context, R.layout.journal_viewer_list_item) {
|
internal inner class EntriesListAdapter(context: Context) : ArrayAdapter<EntryEntity>(context, R.layout.journal_viewer_list_item) {
|
||||||
@ -110,9 +114,10 @@ class ListEntriesFragment : ListFragment(), AdapterView.OnItemClickListener {
|
|||||||
companion object {
|
companion object {
|
||||||
protected val EXTRA_COLLECTION_INFO = "collectionInfo"
|
protected val EXTRA_COLLECTION_INFO = "collectionInfo"
|
||||||
|
|
||||||
fun newInstance(info: CollectionInfo): ListEntriesFragment {
|
fun newInstance(account: Account, info: CollectionInfo): ListEntriesFragment {
|
||||||
val frag = ListEntriesFragment()
|
val frag = ListEntriesFragment()
|
||||||
val args = Bundle(1)
|
val args = Bundle(1)
|
||||||
|
args.putParcelable(ViewCollectionActivity.EXTRA_ACCOUNT, account)
|
||||||
args.putSerializable(EXTRA_COLLECTION_INFO, info)
|
args.putSerializable(EXTRA_COLLECTION_INFO, info)
|
||||||
frag.arguments = args
|
frag.arguments = args
|
||||||
return frag
|
return frag
|
||||||
|
17
app/src/main/res/menu/activity_journal_item.xml
Normal file
17
app/src/main/res/menu/activity_journal_item.xml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
~ 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
|
||||||
|
-->
|
||||||
|
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<item android:title="@string/calendar_attendees_send_email_action"
|
||||||
|
android:icon="@drawable/ic_email_black"
|
||||||
|
android:onClick="sendEventInvite"
|
||||||
|
app:showAsAction="always" />
|
||||||
|
</menu>
|
@ -336,6 +336,7 @@
|
|||||||
<!-- Calendar invites -->
|
<!-- Calendar invites -->
|
||||||
<string name="sync_calendar_attendees_notification_title" formatted="false">%s</string>
|
<string name="sync_calendar_attendees_notification_title" formatted="false">%s</string>
|
||||||
<string name="sync_calendar_attendees_notification_content">Send invitations to guests?</string>
|
<string name="sync_calendar_attendees_notification_content">Send invitations to guests?</string>
|
||||||
|
<string name="calendar_attendees_send_email_action">Send invitations</string>
|
||||||
<string name="sync_calendar_attendees_email_subject" formatted="false">Invitation: %s @ %s</string>
|
<string name="sync_calendar_attendees_email_subject" formatted="false">Invitation: %s @ %s</string>
|
||||||
<string name="sync_calendar_attendees_email_content" formatted="false">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.</string>
|
<string name="sync_calendar_attendees_email_content" formatted="false">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.</string>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user