Add tasks.org to AddAccountDialog

pull/1296/head
Alex Baker 5 years ago
parent 03d9f73cc9
commit 780328a75d

@ -135,7 +135,7 @@ _${getString(R.string.upgrade_tasks_no_account)}_
"""
---
#### ${getString(R.string.upgrade_tasks_account)}
* ${getString(R.string.upgrade_sync_tasks)}
* ${getString(R.string.tasks_org_description)}
* [${getString(R.string.upgrade_third_party_apps)}](${getString(R.string.url_app_passwords)})
* [${getString(R.string.upgrade_coming_soon)}](${getString(R.string.help_url_sync)})
"""

@ -2,6 +2,7 @@ package org.tasks.preferences.fragments
import android.content.Intent
import android.os.Bundle
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
import androidx.preference.PreferenceCategory
@ -29,6 +30,7 @@ import org.tasks.injection.InjectingPreferenceFragment
import org.tasks.jobs.WorkManager
import org.tasks.opentasks.OpenTaskAccountSettingsActivity
import org.tasks.preferences.Preferences
import org.tasks.preferences.PreferencesViewModel
import org.tasks.sync.AddAccountDialog.Companion.newAccountDialog
import org.tasks.sync.SyncAdapters
import javax.inject.Inject
@ -43,6 +45,8 @@ class Synchronization : InjectingPreferenceFragment() {
@Inject lateinit var taskDeleter: TaskDeleter
@Inject lateinit var syncAdapters: SyncAdapters
private val viewModel: PreferencesViewModel by activityViewModels()
override fun getPreferenceXml() = R.xml.preferences_synchronization
override suspend fun setupPreferences(savedInstanceState: Bundle?) {
@ -63,8 +67,11 @@ class Synchronization : InjectingPreferenceFragment() {
findPreference(R.string.add_account)
.setOnPreferenceClickListener {
newAccountDialog(this@Synchronization, REQUEST_ADD_ACCOUNT)
.show(parentFragmentManager, FRAG_TAG_ADD_ACCOUNT)
lifecycleScope.launch {
val hasTasksAccount = viewModel.tasksAccount() != null
newAccountDialog(this@Synchronization, REQUEST_ADD_ACCOUNT, hasTasksAccount)
.show(parentFragmentManager, FRAG_TAG_ADD_ACCOUNT)
}
false
}
}

@ -15,6 +15,7 @@ import androidx.fragment.app.Fragment
import com.todoroo.astrid.gtasks.auth.GtasksLoginActivity
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
import org.tasks.auth.SignInActivity
import org.tasks.caldav.CaldavAccountSettingsActivity
import org.tasks.dialogs.DialogBuilder
import org.tasks.etebase.EtebaseAccountSettingsActivity
@ -22,6 +23,7 @@ import org.tasks.extensions.getMutableIntList
import org.tasks.extensions.getMutableStringList
import org.tasks.preferences.fragments.Synchronization.Companion.REQUEST_CALDAV_SETTINGS
import org.tasks.preferences.fragments.Synchronization.Companion.REQUEST_GOOGLE_TASKS
import org.tasks.preferences.fragments.Synchronization.Companion.REQUEST_TASKS_ORG
import org.tasks.themes.DrawableUtil
import javax.inject.Inject
@ -30,10 +32,17 @@ class AddAccountDialog : DialogFragment() {
@Inject lateinit var dialogBuilder: DialogBuilder
private val hasTasksAccount: Boolean
get() = arguments?.getBoolean(EXTRA_HAS_TASKS_ACCOUNT) ?: false
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val services = resources.getMutableStringList(R.array.synchronization_services)
val descriptions = resources.getMutableStringList(R.array.synchronization_services_description)
val icons = resources.getMutableIntList(R.array.synchronization_services_icons)
if (hasTasksAccount) {
services.removeAt(0)
descriptions.removeAt(0)
icons.removeAt(0)
}
val adapter: ArrayAdapter<String> = object : ArrayAdapter<String>(
requireActivity(), R.layout.simple_list_item_2_themed, R.id.text1, services) {
@ -42,8 +51,9 @@ class AddAccountDialog : DialogFragment() {
view.findViewById<TextView>(R.id.text1).text = services[position]
view.findViewById<TextView>(R.id.text2).text = descriptions[position]
val icon = view.findViewById<ImageView>(R.id.image_view)
icon.setImageDrawable(DrawableUtil.getWrapped(context, icons[position]))
if (position == 2) {
val iconResId = icons[position]
icon.setImageDrawable(DrawableUtil.getWrapped(context, iconResId))
if (iconResId == R.drawable.ic_webdav_logo) {
icon.drawable.setTint(context.getColor(R.color.icon_tint))
}
return view
@ -53,19 +63,22 @@ class AddAccountDialog : DialogFragment() {
.newDialog()
.setTitle(R.string.choose_synchronization_service)
.setSingleChoiceItems(adapter, -1) { dialog, which ->
when (which) {
when (if (hasTasksAccount) which + 1 else which) {
0 -> activity?.startActivityForResult(
Intent(activity, SignInActivity::class.java),
REQUEST_TASKS_ORG)
1 -> activity?.startActivityForResult(
Intent(activity, GtasksLoginActivity::class.java),
REQUEST_GOOGLE_TASKS)
1 -> activity?.startActivity(
2 -> activity?.startActivity(
Intent(ACTION_VIEW, Uri.parse(getString(R.string.url_davx5))))
2 -> activity?.startActivityForResult(
3 -> activity?.startActivityForResult(
Intent(activity, CaldavAccountSettingsActivity::class.java),
REQUEST_CALDAV_SETTINGS)
3 -> activity?.startActivityForResult(
4 -> activity?.startActivityForResult(
Intent(activity, EtebaseAccountSettingsActivity::class.java),
REQUEST_CALDAV_SETTINGS)
4 -> activity?.startActivity(
5 -> activity?.startActivity(
Intent(ACTION_VIEW, Uri.parse(getString(R.string.url_decsync))))
}
dialog.dismiss()
@ -83,9 +96,19 @@ class AddAccountDialog : DialogFragment() {
}
companion object {
fun newAccountDialog(targetFragment: Fragment, rc: Int): AddAccountDialog =
AddAccountDialog().apply {
setTargetFragment(targetFragment, rc)
}
private const val EXTRA_HAS_TASKS_ACCOUNT = "extra_has_tasks_account"
fun newAccountDialog(
targetFragment: Fragment,
rc: Int,
hasTasksAccount: Boolean
): AddAccountDialog {
val dialog = AddAccountDialog()
dialog.arguments = Bundle().apply {
putBoolean(EXTRA_HAS_TASKS_ACCOUNT, hasTasksAccount)
}
dialog.setTargetFragment(targetFragment, rc)
return dialog
}
}
}

@ -0,0 +1,26 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="1146dp"
android:height="1146dp"
android:viewportWidth="1146"
android:viewportHeight="1146">
<group>
<clip-path
android:pathData="M0,0l1145.72,0l0,1145.72l-1145.72,0z"/>
<path
android:pathData="M572.65,571.88m-572.51,0a572.51,572.51 0,1 1,1145.02 0a572.51,572.51 45,1 1,-1145.02 0"
android:fillColor="#2196F3"/>
<group>
<clip-path
android:pathData="M572.65,571.88m-572.51,0a572.51,572.51 0,1 1,1145.02 0a572.51,572.51 45,1 1,-1145.02 0"/>
<path
android:fillColor="#FF000000"
android:pathData="M429.5,771.89L230.23,572.61L162.61,640.23L1146.31,1623.94L1719.76,1050.49L935.33,266.06L429.5,771.89Z"
android:fillType="nonZero"
android:fillAlpha="0.15"/>
</group>
</group>
<path
android:pathData="M429.5,771.88L230.22,572.61L162.61,640.23L429.5,907.12L1002.95,333.67L935.33,266.05L429.5,771.88Z"
android:fillColor="#ffffff"
android:fillType="nonZero"/>
</vector>

@ -194,6 +194,7 @@
</string-array>
<string-array name="synchronization_services">
<item>@string/tasks_org</item>
<item>@string/gtasks_GPr_header</item>
<item>@string/davx5</item>
<item>@string/caldav</item>
@ -202,6 +203,7 @@
</string-array>
<string-array name="synchronization_services_description">
<item>@string/tasks_org_description</item>
<item>@string/google_tasks_selection_description</item>
<item>@string/davx5_selection_description</item>
<item>@string/caldav_selection_description</item>
@ -210,6 +212,7 @@
</string-array>
<array name="synchronization_services_icons">
<item>@drawable/ic_round_icon</item>
<item>@drawable/ic_google</item>
<item>@drawable/ic_davx5_icon_green_bg</item>
<item>@drawable/ic_webdav_logo</item>

@ -33,7 +33,6 @@
<!-- Eventually these should be moved to strings.xml for translation -->
<string name="upgrade_tasks_account">Tasks.org account</string>
<string name="upgrade_tasks_no_account">Tasks.org account not included with \'Name your price\' subscriptions</string>
<string name="upgrade_sync_tasks">Sync your tasks and calendars with Tasks.org</string>
<string name="upgrade_sync_self_hosted">Sync with third-party apps and services</string>
<string name="upgrade_third_party_apps">Compatible with Outlook, Thunderbird, Apple Reminders, and more</string>
<string name="upgrade_coming_soon">Many new features coming soon!</string>

@ -549,6 +549,7 @@ File %1$s contained %2$s.\n\n
<string name="enter_tag_name">Enter tag name</string>
<string name="create_new_tag">Create \"%s\"</string>
<string name="choose_synchronization_service">Select a platform</string>
<string name="tasks_org_description">Synchronize your tasks with Tasks.org</string>
<string name="google_tasks_selection_description">Basic service that synchronizes with your Google account</string>
<string name="caldav_selection_description">Synchronization based on open internet standards</string>
<string name="etesync_selection_description">Open source, end-to-end encrypted synchronization</string>

Loading…
Cancel
Save