@ -1,8 +1,8 @@
package org.tasks.sync
import android.app.Activity.RESULT_OK
import android.app.Dialog
import android.content.Intent
import android.content.Intent.ACTION_VIEW
import android.net.Uri
import android.os.Bundle
import android.view.View
@ -12,19 +12,12 @@ import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.tasks.R
import org.tasks.caldav.CaldavAccountSettingsActivity
import org.tasks.data.CaldavAccount
import org.tasks.data.CaldavDao
import org.tasks.data.OpenTaskDao.Companion.ACCOUNT_TYPE_DAVx5
import org.tasks.data.OpenTaskDao.Companion.ACCOUNT_TYPE_ETESYNC
import org.tasks.dialogs.DialogBuilder
import org.tasks.etesync.EteSyncAccountSettingsActivity
import org.tasks.jobs.WorkManager
import org.tasks.preferences.fragments.REQUEST_CALDAV_SETTINGS
import org.tasks.preferences.fragments.REQUEST_GOOGLE_TASKS
import org.tasks.themes.DrawableUtil
@ -34,36 +27,16 @@ import javax.inject.Inject
class AddAccountDialog : DialogFragment ( ) {
@Inject lateinit var dialogBuilder : DialogBuilder
@Inject lateinit var caldavDao : CaldavDao
@Inject lateinit var syncAdapters : SyncAdapters
@Inject lateinit var workManager : WorkManager
override fun onCreateDialog ( savedInstanceState : Bundle ? ) : Dialog {
val services = requireActivity ( ) . resources . getStringArray ( R . array . synchronization _services ) . toMutableList ( )
val descriptions = requireActivity ( ) . resources . getStringArray ( R . array . synchronization _services _description ) . toMutableList ( )
val icons = arrayListOf (
R . drawable . ic _google ,
R . drawable . ic _webdav _logo ,
R . drawable . ic _etesync
)
val types = arrayListOf ( " " , " " , " " )
requireArguments ( ) . getStringArrayList ( EXTRA _ACCOUNTS ) ?. forEach { account ->
val ( type , name ) = account . split ( " : " )
when ( type ) {
ACCOUNT _TYPE _DAVx5 -> {
services . add ( name )
descriptions . add ( getString ( R . string . davx5 ) )
types . add ( ACCOUNT _TYPE _DAVx5 )
icons . add ( R . drawable . ic _davx5 _icon _green _bg )
}
ACCOUNT _TYPE _ETESYNC -> {
services . add ( name )
descriptions . add ( getString ( R . string . etesync ) )
types . add ( ACCOUNT _TYPE _ETESYNC )
icons . add ( R . drawable . ic _etesync )
}
}
val services = requireActivity ( ) . resources . getStringArray ( R . array . synchronization _services )
val descriptions = requireActivity ( ) . resources . getStringArray ( R . array . synchronization _services _description )
val typedArray = requireActivity ( ) . resources . obtainTypedArray ( R . array . synchronization _services _icons )
val icons = IntArray ( typedArray . length ( ) )
for ( i in icons . indices ) {
icons [ i ] = typedArray . getResourceId ( i , 0 )
}
typedArray . recycle ( )
val adapter : ArrayAdapter < String > = object : ArrayAdapter < String > (
requireActivity ( ) , R . layout . simple _list _item _2 _themed , R . id . text1 , services ) {
override fun getView ( position : Int , convertView : View ? , parent : ViewGroup ) : View {
@ -83,38 +56,19 @@ class AddAccountDialog : DialogFragment() {
. setTitle ( R . string . choose _synchronization _service )
. setSingleChoiceItems ( adapter , - 1 ) { dialog , which ->
when ( which ) {
0 -> {
activity ?. startActivityForResult (
Intent ( activity , GtasksLoginActivity :: class . java ) ,
REQUEST _GOOGLE _TASKS )
dialog . dismiss ( )
}
1 -> {
activity ?. startActivityForResult (
Intent ( activity , CaldavAccountSettingsActivity :: class . java ) ,
REQUEST _CALDAV _SETTINGS )
dialog . dismiss ( )
}
2 -> {
activity ?. startActivityForResult (
Intent ( activity , EteSyncAccountSettingsActivity :: class . java ) ,
REQUEST _CALDAV _SETTINGS )
dialog . dismiss ( )
}
else -> {
lifecycleScope . launch {
caldavDao . insert ( CaldavAccount ( ) . apply {
name = services [ which ]
uuid = " ${types[which]} : ${name} "
accountType = CaldavAccount . TYPE _OPENTASKS
} )
syncAdapters . sync ( true )
workManager . updateBackgroundSync ( )
dialog . dismiss ( )
targetFragment ?. onActivityResult ( targetRequestCode , RESULT _OK , null )
}
}
0 -> activity ?. startActivityForResult (
Intent ( activity , GtasksLoginActivity :: class . java ) ,
REQUEST _GOOGLE _TASKS )
1 -> activity ?. startActivityForResult (
Intent ( activity , CaldavAccountSettingsActivity :: class . java ) ,
REQUEST _CALDAV _SETTINGS )
2 -> activity ?. startActivityForResult (
Intent ( activity , EteSyncAccountSettingsActivity :: class . java ) ,
REQUEST _CALDAV _SETTINGS )
3 -> activity ?. startActivity (
Intent ( ACTION _VIEW , Uri . parse ( " https://tasks.org/davx5 " ) ) )
}
dialog . dismiss ( )
}
. setNeutralButton ( R . string . help ) { _ , _ ->
activity ?. startActivity ( Intent (
@ -126,15 +80,8 @@ class AddAccountDialog : DialogFragment() {
}
companion object {
private const val EXTRA _ACCOUNTS = " extra_accounts "
fun newAccountDialog (
targetFragment : Fragment , rc : Int , openTaskAccounts : List < String >
) : AddAccountDialog {
fun newAccountDialog ( targetFragment : Fragment , rc : Int ) : AddAccountDialog {
val dialog = AddAccountDialog ( )
dialog . arguments = Bundle ( ) . apply {
putStringArrayList ( EXTRA _ACCOUNTS , ArrayList ( openTaskAccounts ) )
}
dialog . setTargetFragment ( targetFragment , rc )
return dialog
}