1
0
mirror of https://github.com/etesync/android synced 2025-08-05 13:25:21 +00:00

Migrate from AsyncTask to anko's doAsync.

This commit is contained in:
Tom Hacohen 2019-01-08 00:47:25 +00:00
parent 1e0540871c
commit 3996f1824d
4 changed files with 204 additions and 199 deletions

View File

@ -127,6 +127,8 @@ android {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.anko:anko-commons:0.10.4"
def acraVersion = '5.2.1'
implementation "ch.acra:acra-mail:$acraVersion"

View File

@ -2,7 +2,6 @@ package com.etesync.syncadapter.ui
import android.accounts.Account
import android.content.Context
import android.os.AsyncTask
import android.os.Bundle
import android.support.v4.app.ListFragment
import android.support.v7.app.AlertDialog
@ -20,13 +19,16 @@ import com.etesync.syncadapter.model.JournalModel
import io.requery.Persistable
import io.requery.sql.EntityDataStore
import okhttp3.HttpUrl
import org.jetbrains.anko.doAsync
import org.jetbrains.anko.uiThread
import java.util.concurrent.Future
class CollectionMembersListFragment : ListFragment(), AdapterView.OnItemClickListener, Refreshable {
private lateinit var data: EntityDataStore<Persistable>
private lateinit var account: Account
private lateinit var info: CollectionInfo
private lateinit var journalEntity: JournalEntity
private var asyncTask: AsyncTask<*, *, *>? = null
private var asyncTask: Future<Unit>? = null
private var emptyTextView: TextView? = null
@ -48,7 +50,30 @@ class CollectionMembersListFragment : ListFragment(), AdapterView.OnItemClickLis
}
override fun refresh() {
asyncTask = JournalMembersFetch().execute()
asyncTask = doAsync {
var members: List<JournalManager.Member>? = null;
try {
val settings = AccountSettings(context!!, account!!)
val httpClient = HttpClient.create(context!!, settings)
val journalsManager = JournalManager(httpClient, HttpUrl.get(settings.uri!!)!!)
val journal = JournalManager.Journal.fakeWithUid(journalEntity!!.uid)
members = journalsManager.listMembers(journal)
} catch (e: Exception) {
uiThread {
emptyTextView!!.text = e.localizedMessage
}
}
uiThread {
val listAdapter = MembersListAdapter(context!!)
setListAdapter(listAdapter)
listAdapter.addAll(members)
emptyTextView!!.setText(R.string.collection_members_list_empty)
}
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -94,37 +119,6 @@ class CollectionMembersListFragment : ListFragment(), AdapterView.OnItemClickLis
}
}
private inner class JournalMembersFetch : AsyncTask<Void, Void, JournalMembersFetch.MembersResult>() {
override fun doInBackground(vararg voids: Void): MembersResult {
try {
val settings = AccountSettings(context!!, account!!)
val httpClient = HttpClient.create(context!!, settings)
val journalsManager = JournalManager(httpClient, HttpUrl.get(settings.uri!!)!!)
val journal = JournalManager.Journal.fakeWithUid(journalEntity!!.uid)
return MembersResult(journalsManager.listMembers(journal), null)
} catch (e: Exception) {
return MembersResult(null, e)
}
}
override fun onPostExecute(result: MembersResult) {
if (result.throwable == null) {
val listAdapter = MembersListAdapter(context!!)
setListAdapter(listAdapter)
listAdapter.addAll(result.members)
emptyTextView!!.setText(R.string.collection_members_list_empty)
} else {
emptyTextView!!.text = result.throwable.localizedMessage
}
}
internal inner class MembersResult(val members: List<JournalManager.Member>?, val throwable: Throwable?)
}
companion object {
fun newInstance(account: Account, info: CollectionInfo): CollectionMembersListFragment {

View File

@ -27,10 +27,13 @@ import com.etesync.syncadapter.model.JournalEntity
import com.etesync.syncadapter.model.SyncEntry
import com.etesync.syncadapter.ui.journalviewer.ListEntriesFragment.Companion.setJournalEntryView
import ezvcard.util.PartialDate
import org.jetbrains.anko.doAsync
import org.jetbrains.anko.uiThread
import java.io.IOException
import java.io.StringReader
import java.text.SimpleDateFormat
import java.util.*
import java.util.concurrent.Future
class JournalItemActivity : BaseActivity(), Refreshable {
private var journalEntity: JournalEntity? = null
@ -123,7 +126,7 @@ class JournalItemActivity : BaseActivity(), Refreshable {
class PrettyFragment : Fragment() {
internal lateinit var info: CollectionInfo
internal lateinit var syncEntry: SyncEntry
private var asyncTask: AsyncTask<*, *, *>? = null
private var asyncTask: Future<Unit>? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
var v: View? = null
@ -134,11 +137,11 @@ class JournalItemActivity : BaseActivity(), Refreshable {
when (info.type) {
CollectionInfo.Type.ADDRESS_BOOK -> {
v = inflater.inflate(R.layout.contact_info, container, false)
asyncTask = LoadContactTask(v).execute()
asyncTask = loadContactTask(v)
}
CollectionInfo.Type.CALENDAR -> {
v = inflater.inflate(R.layout.event_info, container, false)
asyncTask = LoadEventTask(v).execute()
asyncTask = loadEventTask(v)
}
}
@ -151,22 +154,21 @@ class JournalItemActivity : BaseActivity(), Refreshable {
asyncTask!!.cancel(true)
}
private inner class LoadEventTask internal constructor(internal var view: View) : AsyncTask<Void, Void, Event>() {
override fun doInBackground(vararg aVoids: Void): Event? {
private fun loadEventTask(view: View): Future<Unit> {
return doAsync {
var event: Event? = null
val inputReader = StringReader(syncEntry.content)
try {
return Event.fromReader(inputReader, null)[0]
event = Event.fromReader(inputReader, null)[0]
} catch (e: InvalidCalendarException) {
e.printStackTrace()
} catch (e: IOException) {
e.printStackTrace()
}
return null
}
override fun onPostExecute(event: Event) {
if (event != null) {
uiThread {
val loader = view.findViewById<View>(R.id.event_info_loading_msg)
loader.visibility = View.GONE
val contentContainer = view.findViewById<View>(R.id.event_info_scroll_view)
@ -216,22 +218,22 @@ class JournalItemActivity : BaseActivity(), Refreshable {
setTextViewText(view, R.id.reminders, sb.toString())
}
}
}
}
private inner class LoadContactTask internal constructor(internal var view: View) : AsyncTask<Void, Void, Contact>() {
override fun doInBackground(vararg aVoids: Void): Contact? {
private fun loadContactTask(view: View): Future<Unit> {
return doAsync {
var contact: Contact? = null
val reader = StringReader(syncEntry.content)
try {
return Contact.fromReader(reader, null)[0]
contact = Contact.fromReader(reader, null)[0]
} catch (e: IOException) {
e.printStackTrace()
}
return null
}
override fun onPostExecute(contact: Contact) {
if (contact != null) {
uiThread {
val loader = view.findViewById<View>(R.id.loading_msg)
loader.visibility = View.GONE
val contentContainer = view.findViewById<View>(R.id.content_container)
@ -246,8 +248,14 @@ class JournalItemActivity : BaseActivity(), Refreshable {
showContact(contact)
}
}
}
}
}
private fun showGroup(contact: Contact) {
val view = this.view!!
val mainCard = view.findViewById<View>(R.id.main_card) as ViewGroup
addInfoItem(view.context, mainCard, getString(R.string.journal_item_member_count), null, contact.members.size.toString())
@ -259,6 +267,7 @@ class JournalItemActivity : BaseActivity(), Refreshable {
private fun showContact(contact: Contact) {
val view = this.view!!
val mainCard = view.findViewById<View>(R.id.main_card) as ViewGroup
val aboutCard = view.findViewById<View>(R.id.about_card) as ViewGroup
aboutCard.findViewById<View>(R.id.title_container).visibility = View.VISIBLE
@ -331,7 +340,6 @@ class JournalItemActivity : BaseActivity(), Refreshable {
// PHOTO
// if (contact.photo != null)
}
}
private fun getDisplayedDate(date: Date?, partialDate: PartialDate?): String? {
if (date != null) {

View File

@ -9,7 +9,6 @@
package com.etesync.syncadapter.ui.journalviewer
import android.content.Context
import android.os.AsyncTask
import android.os.Bundle
import android.support.v4.app.ListFragment
import android.view.LayoutInflater
@ -25,13 +24,16 @@ import com.etesync.syncadapter.model.*
import com.etesync.syncadapter.ui.JournalItemActivity
import io.requery.Persistable
import io.requery.sql.EntityDataStore
import org.jetbrains.anko.doAsync
import org.jetbrains.anko.uiThread
import java.util.concurrent.Future
class ListEntriesFragment : ListFragment(), AdapterView.OnItemClickListener {
private lateinit var data: EntityDataStore<Persistable>
private lateinit var info: CollectionInfo
private var journalEntity: JournalEntity? = null
private var asyncTask: AsyncTask<*, *, *>? = null
private var asyncTask: Future<Unit>? = null
private var emptyTextView: TextView? = null
@ -51,10 +53,26 @@ class ListEntriesFragment : ListFragment(), AdapterView.OnItemClickListener {
return view
}
fun loadEntries(): List<EntryEntity> {
journalEntity = JournalModel.Journal.fetch(data, info.getServiceEntity(data), info.uid)
return data.select(EntryEntity::class.java).where(EntryEntity.JOURNAL.eq(journalEntity)).orderBy(EntryEntity.ID.desc()).get().toList()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
asyncTask = JournalFetch().execute()
asyncTask = doAsync {
val entries = loadEntries()
uiThread {
val listAdapter = EntriesListAdapter(context!!)
setListAdapter(listAdapter)
listAdapter.addAll(entries)
emptyTextView!!.text = getString(R.string.journal_entries_list_empty)
}
}
listView.onItemClickListener = this
}
@ -89,23 +107,6 @@ class ListEntriesFragment : ListFragment(), AdapterView.OnItemClickListener {
}
}
private inner class JournalFetch : AsyncTask<Void, Void, List<EntryEntity>>() {
override fun doInBackground(vararg voids: Void): List<EntryEntity> {
journalEntity = JournalModel.Journal.fetch(data, info.getServiceEntity(data), info.uid)
return data.select(EntryEntity::class.java).where(EntryEntity.JOURNAL.eq(journalEntity)).orderBy(EntryEntity.ID.desc()).get().toList()
}
override fun onPostExecute(result: List<EntryEntity>) {
val listAdapter = EntriesListAdapter(context!!)
setListAdapter(listAdapter)
listAdapter.addAll(result)
emptyTextView!!.text = getString(R.string.journal_entries_list_empty)
}
}
companion object {
protected val EXTRA_COLLECTION_INFO = "collectionInfo"