mirror of
https://github.com/bitfireAT/davx5-ose.git
synced 2026-09-12 22:29:39 -04:00
Don't allow subclassing of AndroidCalendar anymore; remove AndroidCalendarFactory (#23)
This commit is contained in:
1 parent
dd6e3a2fb3
commit
1a613d5d3c
7 files changed
+26
-66
No files matched your search
@@ -79,7 +79,7 @@ class AndroidCalendarTest {
|
||||
assertNotNull(uri)
|
||||
|
||||
// query calendar
|
||||
val calendar = AndroidCalendar.findByID(testAccount, provider, TestCalendar.Factory, ContentUris.parseId(uri))
|
||||
val calendar = AndroidCalendar.findByID(testAccount, provider, ContentUris.parseId(uri))
|
||||
assertNotNull(calendar)
|
||||
|
||||
// delete calendar
|
||||
|
||||
@@ -101,7 +101,7 @@ class AndroidEventTest {
|
||||
private val tzDefault = DateUtils.ical4jTimeZone(tzIdDefault)
|
||||
|
||||
private lateinit var calendarUri: Uri
|
||||
private lateinit var calendar: TestCalendar
|
||||
private lateinit var calendar: AndroidCalendar
|
||||
|
||||
@Before
|
||||
fun prepare() {
|
||||
@@ -1439,7 +1439,7 @@ class AndroidEventTest {
|
||||
|
||||
private fun populateAndroidEvent(
|
||||
automaticDates: Boolean,
|
||||
destinationCalendar: TestCalendar = calendar,
|
||||
destinationCalendar: AndroidCalendar = calendar,
|
||||
asSyncAdapter: Boolean = false,
|
||||
insertCallback: (id: Long) -> Unit = {},
|
||||
extendedProperties: Map<String, String> = emptyMap(),
|
||||
@@ -1481,7 +1481,7 @@ class AndroidEventTest {
|
||||
|
||||
private fun populateEvent(
|
||||
automaticDates: Boolean,
|
||||
destinationCalendar: TestCalendar = calendar,
|
||||
destinationCalendar: AndroidCalendar = calendar,
|
||||
asSyncAdapter: Boolean = false,
|
||||
insertCallback: (id: Long) -> Unit = {},
|
||||
extendedProperties: Map<String, String> = emptyMap(),
|
||||
@@ -1943,7 +1943,7 @@ class AndroidEventTest {
|
||||
}
|
||||
|
||||
|
||||
private fun populateReminder(destinationCalendar: TestCalendar = calendar, builder: ContentValues.() -> Unit): VAlarm? {
|
||||
private fun populateReminder(destinationCalendar: AndroidCalendar = calendar, builder: ContentValues.() -> Unit): VAlarm? {
|
||||
populateEvent(true, destinationCalendar = destinationCalendar, insertCallback = { id ->
|
||||
val reminderValues = ContentValues()
|
||||
reminderValues.put(Reminders.EVENT_ID, id)
|
||||
|
||||
@@ -12,34 +12,21 @@ import android.content.ContentUris
|
||||
import android.content.ContentValues
|
||||
import android.provider.CalendarContract
|
||||
import at.bitfire.ical4android.AndroidCalendar
|
||||
import at.bitfire.ical4android.AndroidCalendarFactory
|
||||
|
||||
class TestCalendar(
|
||||
account: Account,
|
||||
providerClient: ContentProviderClient,
|
||||
id: Long
|
||||
) : AndroidCalendar(account, providerClient, id) {
|
||||
object TestCalendar {
|
||||
|
||||
companion object {
|
||||
fun findOrCreate(account: Account, provider: ContentProviderClient): TestCalendar {
|
||||
val calendars = AndroidCalendar.find(account, provider, Factory, null, null)
|
||||
return if (calendars.isEmpty()) {
|
||||
val values = ContentValues(3)
|
||||
values.put(CalendarContract.Calendars.NAME, "TestCalendar")
|
||||
values.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, "ical4android Test Calendar")
|
||||
values.put(CalendarContract.Calendars.ALLOWED_REMINDERS, CalendarContract.Reminders.METHOD_DEFAULT)
|
||||
val uri = AndroidCalendar.create(account, provider, values)
|
||||
fun findOrCreate(account: Account, provider: ContentProviderClient): AndroidCalendar {
|
||||
val calendars = AndroidCalendar.find(account, provider, null, null)
|
||||
return if (calendars.isEmpty()) {
|
||||
val values = ContentValues(3)
|
||||
values.put(CalendarContract.Calendars.NAME, "TestCalendar")
|
||||
values.put(CalendarContract.Calendars.CALENDAR_DISPLAY_NAME, "ical4android Test Calendar")
|
||||
values.put(CalendarContract.Calendars.ALLOWED_REMINDERS, CalendarContract.Reminders.METHOD_DEFAULT)
|
||||
val uri = AndroidCalendar.create(account, provider, values)
|
||||
|
||||
TestCalendar(account, provider, ContentUris.parseId(uri))
|
||||
} else
|
||||
calendars.first()
|
||||
}
|
||||
AndroidCalendar(account, provider, ContentUris.parseId(uri))
|
||||
} else
|
||||
calendars.first()
|
||||
}
|
||||
|
||||
|
||||
object Factory: AndroidCalendarFactory<TestCalendar> {
|
||||
override fun newInstance(account: Account, provider: ContentProviderClient, id: Long) =
|
||||
TestCalendar(account, provider, id)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,7 @@ import java.util.logging.Logger
|
||||
* Communicates with the Android Contacts Provider which uses an SQLite
|
||||
* database to store the events.
|
||||
*/
|
||||
open class AndroidCalendar(
|
||||
class AndroidCalendar(
|
||||
val account: Account,
|
||||
val provider: ContentProviderClient,
|
||||
|
||||
@@ -215,19 +215,18 @@ open class AndroidCalendar(
|
||||
provider.delete(Colors.CONTENT_URI.asSyncAdapter(account), null, null)
|
||||
}
|
||||
|
||||
fun <T : AndroidCalendar> findByID(
|
||||
fun findByID(
|
||||
account: Account,
|
||||
provider: ContentProviderClient,
|
||||
factory: AndroidCalendarFactory<T>,
|
||||
id: Long
|
||||
): T {
|
||||
): AndroidCalendar {
|
||||
val iterCalendars = CalendarEntity.newEntityIterator(
|
||||
provider.query(ContentUris.withAppendedId(CalendarEntity.CONTENT_URI, id).asSyncAdapter(account), null, null, null, null)
|
||||
)
|
||||
try {
|
||||
if (iterCalendars.hasNext()) {
|
||||
val values = iterCalendars.next().entityValues
|
||||
val calendar = factory.newInstance(account, provider, id)
|
||||
val calendar = AndroidCalendar(account, provider, id)
|
||||
calendar.populate(values)
|
||||
return calendar
|
||||
}
|
||||
@@ -237,21 +236,20 @@ open class AndroidCalendar(
|
||||
throw FileNotFoundException()
|
||||
}
|
||||
|
||||
fun <T : AndroidCalendar> find(
|
||||
fun find(
|
||||
account: Account,
|
||||
provider: ContentProviderClient,
|
||||
factory: AndroidCalendarFactory<T>,
|
||||
where: String?,
|
||||
whereArgs: Array<String>?
|
||||
): List<T> {
|
||||
): List<AndroidCalendar> {
|
||||
val iterCalendars = CalendarEntity.newEntityIterator(
|
||||
provider.query(CalendarEntity.CONTENT_URI.asSyncAdapter(account), null, where, whereArgs, null)
|
||||
)
|
||||
try {
|
||||
val calendars = LinkedList<T>()
|
||||
val calendars = LinkedList<AndroidCalendar>()
|
||||
while (iterCalendars.hasNext()) {
|
||||
val values = iterCalendars.next().entityValues
|
||||
val calendar = factory.newInstance(account, provider, values.getAsLong(Calendars._ID))
|
||||
val calendar = AndroidCalendar(account, provider, values.getAsLong(Calendars._ID))
|
||||
calendar.populate(values)
|
||||
calendars += calendar
|
||||
}
|
||||
@@ -263,11 +261,4 @@ open class AndroidCalendar(
|
||||
|
||||
}
|
||||
|
||||
|
||||
// default factory (will be removed as soon as AndroidCalendar is not open anymore)
|
||||
object Factory : AndroidCalendarFactory<AndroidCalendar> {
|
||||
override fun newInstance(account: Account, provider: ContentProviderClient, id: Long) =
|
||||
AndroidCalendar(account, provider, id)
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
/*
|
||||
* This file is part of bitfireAT/synctools which is released under GPLv3.
|
||||
* Copyright © All Contributors. See the LICENSE and AUTHOR files in the root directory for details.
|
||||
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||
*/
|
||||
|
||||
package at.bitfire.ical4android
|
||||
|
||||
import android.accounts.Account
|
||||
import android.content.ContentProviderClient
|
||||
|
||||
interface AndroidCalendarFactory<out T : AndroidCalendar> {
|
||||
|
||||
fun newInstance(account: Account, provider: ContentProviderClient, id: Long): T
|
||||
|
||||
}
|
||||
@@ -173,7 +173,6 @@ class AndroidEvent(
|
||||
|
||||
// calculate some scheduling properties
|
||||
val groupScheduled = e.subValues.any { it.uri == Attendees.CONTENT_URI }
|
||||
val isOrganizer = (e.entityValues.getAsInteger(Events.IS_ORGANIZER) ?: 0) != 0
|
||||
|
||||
populateEvent(e.entityValues.removeBlankStrings(), groupScheduled)
|
||||
|
||||
|
||||
@@ -110,7 +110,6 @@ class InitCalendarProviderRule private constructor() : ExternalResource() {
|
||||
AndroidCalendar.Companion.findByID(
|
||||
account,
|
||||
provider,
|
||||
AndroidCalendar.Factory,
|
||||
ContentUris.parseId(uri)
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
|
||||
Reference in new issue
Block a user