1
0
mirror of https://github.com/etesync/android synced 2024-11-25 17:38:13 +00:00

Move CollectionInfo and SyncEntry to the journalmanager module.

This commit is contained in:
Tom Hacohen 2020-01-29 15:26:35 +02:00
parent 09e2a9255a
commit df94fde5ff
22 changed files with 48 additions and 140 deletions

View File

@ -133,7 +133,7 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.anko:anko-commons:0.10.4"
implementation "com.etesync:journalmanager:1.0.1"
implementation "com.etesync:journalmanager:1.0.2"
def acraVersion = '5.3.0'
implementation "ch.acra:acra-mail:$acraVersion"

View File

@ -9,40 +9,18 @@
package com.etesync.syncadapter.model
import android.content.ContentValues
import com.etesync.journalmanager.Constants
import com.etesync.journalmanager.JournalManager
import com.etesync.syncadapter.model.ServiceDB.Collections
import com.google.gson.GsonBuilder
import com.google.gson.annotations.Expose
import java.io.Serializable
class CollectionInfo : Serializable {
class CollectionInfo : com.etesync.journalmanager.model.CollectionInfo() {
@Deprecated("")
var id: Long = 0
var serviceID: Int = 0
// FIXME: Shouldn't be exposed, as it's already saved in the journal. We just expose it for when we save for db.
@Expose
var version = -1
@Expose
var type: Type? = null
var uid: String? = null
@Expose
var displayName: String? = null
@Expose
var description: String? = null
@Expose
var color: Int? = null
@Expose
var timeZone: String? = null
@Expose
var selected: Boolean = false
fun getServiceEntity(data: MyEntityDataStore): ServiceEntity {
return data.findByKey(ServiceEntity::class.java, serviceID)
}
enum class Type {
ADDRESS_BOOK,
@ -50,38 +28,18 @@ class CollectionInfo : Serializable {
TASKS,
}
init {
version = Constants.CURRENT_VERSION
}
fun updateFromJournal(journal: JournalManager.Journal) {
uid = journal.uid!!
version = journal.version
}
fun isOfTypeService(service: String): Boolean {
return service == type.toString()
}
fun getServiceEntity(data: MyEntityDataStore): ServiceEntity {
return data.findByKey(ServiceEntity::class.java, serviceID)
}
fun toJson(): String {
return GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(this, CollectionInfo::class.java)
}
override fun toString(): String {
return "CollectionInfo(serviceID=" + this.serviceID + ", version=" + this.version + ", type=" + this.type + ", uid=" + this.uid + ", displayName=" + this.displayName + ", description=" + this.description + ", color=" + this.color + ", timeZone=" + this.timeZone + ", selected=" + this.selected + ")"
}
var enumType: Type?
get() = if (super.type != null) Type.valueOf(super.type!!) else null
set(value) {
super.type = value?.name
}
companion object {
fun defaultForServiceType(service: Type): CollectionInfo {
val info = CollectionInfo()
info.displayName = "Default"
info.selected = true
info.type = service
info.enumType = service
return info
}

View File

@ -1,5 +1,7 @@
package com.etesync.syncadapter.model;
import com.etesync.journalmanager.model.SyncEntry;
import java.util.List;
import io.requery.Column;
@ -11,11 +13,9 @@ import io.requery.Generated;
import io.requery.Index;
import io.requery.Key;
import io.requery.ManyToOne;
import io.requery.Persistable;
import io.requery.PostLoad;
import io.requery.ReferentialAction;
import io.requery.Table;
import io.requery.sql.EntityDataStore;
public class JournalModel {
@Entity

View File

@ -92,7 +92,7 @@ public class ServiceDB {
db.beginTransactionNonExclusive();
// iterate through all tables
Cursor cursorTables = db.query("sqlite_master", new String[]{"name"}, "type='table'", null, null, null, null);
Cursor cursorTables = db.query("sqlite_master", new String[]{"name"}, "enumType='table'", null, null, null, null);
while (cursorTables.moveToNext()) {
String table = cursorTables.getString(0);
sb.append(table).append("\n");

View File

@ -1,52 +0,0 @@
package com.etesync.syncadapter.model
import com.etesync.syncadapter.GsonHelper
import com.etesync.journalmanager.Crypto
import com.etesync.journalmanager.JournalEntryManager
import java.io.Serializable
class SyncEntry : Serializable {
val content: String
val action: Actions
enum class Actions constructor(private val text: String) {
ADD("ADD"),
CHANGE("CHANGE"),
DELETE("DELETE");
override fun toString(): String {
return text
}
}
private constructor() {
this.content = ""
this.action = Actions.ADD
}
constructor(content: String, action: Actions) {
this.content = content
this.action = action
}
fun isAction(action: Actions): Boolean {
return this.action == action
}
fun toJson(): String {
return GsonHelper.gson.toJson(this, this.javaClass)
}
companion object {
@JvmStatic
fun fromJournalEntry(crypto: Crypto.CryptoManager, entry: JournalEntryManager.Entry): SyncEntry {
return fromJson(entry.getContent(crypto))
}
@JvmStatic
fun fromJson(json: String): SyncEntry {
return GsonHelper.gson.fromJson(json, SyncEntry::class.java)
}
}
}

View File

@ -25,7 +25,7 @@ import java.util.logging.Level
/**
* Account authenticator for the main DAVx5 account type.
* Account authenticator for the main DAVx5 account enumType.
*
* Gets started when a DAVx5 account is removed, too, so it also watches for account removals
* and contains the corresponding cleanup code.

View File

@ -24,7 +24,7 @@ import com.etesync.journalmanager.Exceptions
import com.etesync.journalmanager.JournalEntryManager
import com.etesync.syncadapter.log.Logger
import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.syncadapter.model.SyncEntry
import com.etesync.journalmanager.model.SyncEntry
import com.etesync.syncadapter.resource.LocalCalendar
import com.etesync.syncadapter.resource.LocalEvent
import com.etesync.syncadapter.utils.EventEmailInvitation

View File

@ -24,7 +24,7 @@ import com.etesync.journalmanager.Exceptions
import com.etesync.journalmanager.JournalEntryManager
import com.etesync.syncadapter.log.Logger
import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.syncadapter.model.SyncEntry
import com.etesync.journalmanager.model.SyncEntry
import com.etesync.syncadapter.resource.LocalAddress
import com.etesync.syncadapter.resource.LocalAddressBook
import com.etesync.syncadapter.resource.LocalContact

View File

@ -82,7 +82,7 @@ class CachedJournalFetcher {
}
}
return journals.filter { it.second?.type == serviceType }
return journals.filter { it.second?.enumType == serviceType }
}
}

View File

@ -21,9 +21,10 @@ import com.etesync.syncadapter.Constants.KEY_ACCOUNT
import com.etesync.journalmanager.Crypto
import com.etesync.journalmanager.Exceptions
import com.etesync.journalmanager.JournalEntryManager
import com.etesync.journalmanager.model.SyncEntry
import com.etesync.syncadapter.log.Logger
import com.etesync.syncadapter.model.*
import com.etesync.syncadapter.model.SyncEntry.Actions.ADD
import com.etesync.journalmanager.model.SyncEntry.Actions.ADD
import com.etesync.syncadapter.resource.*
import com.etesync.syncadapter.ui.AccountsActivity
import com.etesync.syncadapter.ui.DebugInfoActivity

View File

@ -19,7 +19,7 @@ import com.etesync.syncadapter.R
import com.etesync.journalmanager.JournalEntryManager
import com.etesync.syncadapter.log.Logger
import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.syncadapter.model.SyncEntry
import com.etesync.journalmanager.model.SyncEntry
import com.etesync.syncadapter.resource.LocalTask
import com.etesync.syncadapter.resource.LocalTaskList
import okhttp3.HttpUrl

View File

@ -171,17 +171,17 @@ class AccountActivity : BaseActivity(), Toolbar.OnMenuItemClickListener, PopupMe
when (item.itemId) {
R.id.create_calendar -> {
info = CollectionInfo()
info.type = CollectionInfo.Type.CALENDAR
info.enumType = CollectionInfo.Type.CALENDAR
startActivity(CreateCollectionActivity.newIntent(this@AccountActivity, account, info))
}
R.id.create_tasklist -> {
info = CollectionInfo()
info.type = CollectionInfo.Type.TASKS
info.enumType = CollectionInfo.Type.TASKS
startActivity(CreateCollectionActivity.newIntent(this@AccountActivity, account, info))
}
R.id.create_addressbook -> {
info = CollectionInfo()
info.type = CollectionInfo.Type.ADDRESS_BOOK
info.enumType = CollectionInfo.Type.ADDRESS_BOOK
startActivity(CreateCollectionActivity.newIntent(this@AccountActivity, account, info))
}
R.id.install_opentasks -> {
@ -395,7 +395,7 @@ class AccountActivity : BaseActivity(), Toolbar.OnMenuItemClickListener, PopupMe
}
val vColor = v.findViewById<View>(R.id.color)
if (info.type == CollectionInfo.Type.ADDRESS_BOOK) {
if (info.enumType == CollectionInfo.Type.ADDRESS_BOOK) {
vColor.visibility = View.GONE
} else {
vColor.setBackgroundColor(info.color ?: LocalCalendar.defaultColor)

View File

@ -37,7 +37,7 @@ class CollectionMembersActivity : BaseActivity(), Refreshable {
setTitle(R.string.collection_members_title)
val colorSquare = findViewById<View>(R.id.color)
when (info.type) {
when (info.enumType) {
CollectionInfo.Type.CALENDAR -> {
colorSquare.setBackgroundColor(info.color ?: LocalCalendar.defaultColor)
}

View File

@ -42,7 +42,7 @@ open class CreateCollectionActivity : BaseActivity() {
setContentView(R.layout.activity_create_collection)
val displayName = findViewById<View>(R.id.display_name) as EditText
when (info.type) {
when (info.enumType) {
CollectionInfo.Type.CALENDAR -> {
setTitle(R.string.create_calendar)
displayName.setHint(R.string.create_calendar_display_name_hint)
@ -114,7 +114,7 @@ open class CreateCollectionActivity : BaseActivity() {
info.description = StringUtils.trimToNull(edit.text.toString())
if (ok) {
when (info.type) {
when (info.enumType) {
CollectionInfo.Type.CALENDAR, CollectionInfo.Type.TASKS -> {
val view = findViewById<View>(R.id.color)
info.color = (view.background as ColorDrawable).color

View File

@ -89,13 +89,13 @@ class CreateCollectionFragment : DialogFragment(), LoaderManager.LoaderCallbacks
val data = (context.applicationContext as App).data
// 1. find service ID
when (info.type){
when (info.enumType){
CollectionInfo.Type.ADDRESS_BOOK -> authority = App.addressBooksAuthority
CollectionInfo.Type.CALENDAR -> authority = CalendarContract.AUTHORITY
CollectionInfo.Type.TASKS -> authority = TaskProvider.ProviderName.OpenTasks.authority
}
val serviceEntity = JournalModel.Service.fetchOrCreate(data, account.name, info.type)
val serviceEntity = JournalModel.Service.fetchOrCreate(data, account.name, info.enumType)
info.serviceID = serviceEntity.id
val settings = AccountSettings(context, account)

View File

@ -31,7 +31,7 @@ class EditCollectionActivity : CreateCollectionActivity() {
setTitle(R.string.edit_collection)
when (info.type) {
when (info.enumType) {
CollectionInfo.Type.CALENDAR -> {
val colorSquare = findViewById<View>(R.id.color)
colorSquare.setBackgroundColor(info.color ?: LocalCalendar.defaultColor)

View File

@ -25,7 +25,7 @@ import com.etesync.syncadapter.Constants
import com.etesync.syncadapter.R
import com.etesync.syncadapter.model.CollectionInfo
import com.etesync.syncadapter.model.JournalEntity
import com.etesync.syncadapter.model.SyncEntry
import com.etesync.journalmanager.model.SyncEntry
import com.etesync.syncadapter.resource.*
import com.etesync.syncadapter.ui.journalviewer.ListEntriesFragment.Companion.setJournalEntryView
import com.etesync.syncadapter.utils.EventEmailInvitation
@ -102,7 +102,7 @@ class JournalItemActivity : BaseActivity(), Refreshable {
fun restoreItem(item: MenuItem) {
// FIXME: This code makes the assumption that providers are all available. May not be true for tasks, and potentially others too.
when (info.type) {
when (info.enumType) {
CollectionInfo.Type.CALENDAR -> {
val provider = contentResolver.acquireContentProviderClient(CalendarContract.CONTENT_URI)!!
val localCalendar = LocalCalendar.findByName(account, provider, LocalCalendar.Factory, info.uid!!)!!
@ -159,7 +159,7 @@ class JournalItemActivity : BaseActivity(), Refreshable {
private class TabsAdapter(fm: FragmentManager, private val context: Context, private val info: CollectionInfo, private val syncEntry: SyncEntry) : FragmentPagerAdapter(fm) {
override fun getCount(): Int {
// FIXME: Make it depend on info type (only have non-raw for known types)
// FIXME: Make it depend on info enumType (only have non-raw for known types)
return 2
}
@ -215,7 +215,7 @@ class JournalItemActivity : BaseActivity(), Refreshable {
info = arguments!!.getSerializable(Constants.KEY_COLLECTION_INFO) as CollectionInfo
syncEntry = arguments!!.getSerializable(KEY_SYNC_ENTRY) as SyncEntry
when (info.type) {
when (info.enumType) {
CollectionInfo.Type.ADDRESS_BOOK -> {
v = inflater.inflate(R.layout.contact_info, container, false)
asyncTask = loadContactTask(v)

View File

@ -60,7 +60,7 @@ class ViewCollectionActivity : BaseActivity(), Refreshable {
isOwner = journalEntity!!.isOwner(account.name)
val colorSquare = findViewById<View>(R.id.color)
when (info.type) {
when (info.enumType) {
CollectionInfo.Type.CALENDAR -> {
colorSquare.setBackgroundColor(info.color ?: LocalCalendar.defaultColor)
}
@ -176,7 +176,7 @@ class ViewCollectionActivity : BaseActivity(), Refreshable {
entryCount = data.count(EntryEntity::class.java).where(EntryEntity.JOURNAL.eq(journalEntity)).get().value()
var count: Long = -1
when (info.type) {
when (info.enumType) {
CollectionInfo.Type.CALENDAR -> {
try {
val providerClient = contentResolver.acquireContentProviderClient(CalendarContract.CONTENT_URI)
@ -237,7 +237,7 @@ class ViewCollectionActivity : BaseActivity(), Refreshable {
if (result == null) {
stats.text = "Stats loading error."
} else {
when (info.type) {
when (info.enumType) {
CollectionInfo.Type.CALENDAR -> {
stats.text = String.format(Locale.getDefault(), "Events: %d, Journal entries: %d",
result, entryCount)

View File

@ -43,13 +43,13 @@ class ImportActivity : BaseActivity(), SelectImportMethod, ResultFragment.OnImpo
}
override fun importAccount() {
if (info.type == CollectionInfo.Type.CALENDAR) {
if (info.enumType == CollectionInfo.Type.CALENDAR) {
supportFragmentManager.beginTransaction()
.replace(android.R.id.content,
LocalCalendarImportFragment.newInstance(account, info))
.addToBackStack(LocalCalendarImportFragment::class.java.name)
.commit()
} else if (info.type == CollectionInfo.Type.ADDRESS_BOOK) {
} else if (info.enumType == CollectionInfo.Type.ADDRESS_BOOK) {
supportFragmentManager.beginTransaction()
.replace(android.R.id.content,
LocalContactImportFragment.newInstance(account, info))
@ -144,7 +144,7 @@ class ImportActivity : BaseActivity(), SelectImportMethod, ResultFragment.OnImpo
text.setText(R.string.import_button_local)
card.setOnClickListener { mSelectImportMethod!!.importAccount() }
if ((activity as ImportActivity).info.type == CollectionInfo.Type.TASKS) {
if ((activity as ImportActivity).info.enumType == CollectionInfo.Type.TASKS) {
card.visibility = View.GONE
}

View File

@ -116,7 +116,7 @@ class ImportFragment : DialogFragment() {
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.action = Intent.ACTION_GET_CONTENT
when (info.type) {
when (info.enumType) {
CollectionInfo.Type.CALENDAR -> intent.type = "text/calendar"
CollectionInfo.Type.TASKS -> intent.type = "text/calendar"
CollectionInfo.Type.ADDRESS_BOOK -> intent.type = "text/x-vcard"
@ -215,7 +215,7 @@ class ImportFragment : DialogFragment() {
val context = context!!
val importReader = InputStreamReader(inputStream)
if (info.type == CollectionInfo.Type.CALENDAR) {
if (info.enumType == CollectionInfo.Type.CALENDAR) {
val events = Event.eventsFromReader(importReader, null)
importReader.close()
@ -268,7 +268,7 @@ class ImportFragment : DialogFragment() {
entryProcessed()
}
} else if (info.type == CollectionInfo.Type.TASKS) {
} else if (info.enumType == CollectionInfo.Type.TASKS) {
val tasks = Task.tasksFromReader(importReader)
importReader.close()
@ -317,7 +317,7 @@ class ImportFragment : DialogFragment() {
entryProcessed()
}
} else if (info.type == CollectionInfo.Type.ADDRESS_BOOK) {
} else if (info.enumType == CollectionInfo.Type.ADDRESS_BOOK) {
val uidToLocalId = HashMap<String?, Long>()
val downloader = ContactsSyncManager.ResourceDownloader(context)
val contacts = Contact.fromReader(importReader, downloader)

View File

@ -224,7 +224,7 @@ class LocalContactImportFragment : Fragment() {
private val accountResolver: AccountResolver
/**
* Provide a reference to the type of views that you are using (custom ViewHolder)
* Provide a reference to the enumType of views that you are using (custom ViewHolder)
*/
class ViewHolder(v: View, onAccountSelected: OnAccountSelected) : RecyclerView.ViewHolder(v) {
internal val titleTextView: TextView

View File

@ -19,6 +19,7 @@ import android.widget.ArrayAdapter
import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.ListFragment
import com.etesync.journalmanager.model.SyncEntry
import com.etesync.syncadapter.App
import com.etesync.syncadapter.R
import com.etesync.syncadapter.model.*
@ -139,7 +140,7 @@ class ListEntriesFragment : ListFragment(), AdapterView.OnItemClickListener {
// FIXME: hacky way to make it show sensible info
val fullContent = syncEntry.content
var prefix = ""
when (info.type) {
when (info.enumType) {
CollectionInfo.Type.CALENDAR, CollectionInfo.Type.TASKS -> {
prefix = "SUMMARY:"
}