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
|
||||
|
||||
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
|
||||
|
@ -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()
|
||||
}
|
||||
|
||||
|
@ -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<Persistable>
|
||||
private lateinit var account: Account
|
||||
private lateinit var info: CollectionInfo
|
||||
private var journalEntity: JournalEntity? = null
|
||||
private var asyncTask: Future<Unit>? = 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<EntryEntity>(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
|
||||
|
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 -->
|
||||
<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="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_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