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