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

@ -15,6 +15,7 @@ import androidx.fragment.app.Fragment
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 org.tasks.R import org.tasks.R
import org.tasks.auth.SignInActivity
import org.tasks.caldav.CaldavAccountSettingsActivity import org.tasks.caldav.CaldavAccountSettingsActivity
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.tasks.etebase.EtebaseAccountSettingsActivity import org.tasks.etebase.EtebaseAccountSettingsActivity
@ -22,6 +23,7 @@ import org.tasks.extensions.getMutableIntList
import org.tasks.extensions.getMutableStringList import org.tasks.extensions.getMutableStringList
import org.tasks.preferences.fragments.Synchronization.Companion.REQUEST_CALDAV_SETTINGS 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_GOOGLE_TASKS
import org.tasks.preferences.fragments.Synchronization.Companion.REQUEST_TASKS_ORG
import org.tasks.themes.DrawableUtil import org.tasks.themes.DrawableUtil
import javax.inject.Inject import javax.inject.Inject
@ -30,10 +32,17 @@ class AddAccountDialog : DialogFragment() {
@Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var dialogBuilder: DialogBuilder
private val hasTasksAccount: Boolean
get() = arguments?.getBoolean(EXTRA_HAS_TASKS_ACCOUNT) ?: false
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val services = resources.getMutableStringList(R.array.synchronization_services) val services = resources.getMutableStringList(R.array.synchronization_services)
val descriptions = resources.getMutableStringList(R.array.synchronization_services_description) val descriptions = resources.getMutableStringList(R.array.synchronization_services_description)
val icons = resources.getMutableIntList(R.array.synchronization_services_icons) 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>( 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) {
@ -42,8 +51,9 @@ class AddAccountDialog : DialogFragment() {
view.findViewById<TextView>(R.id.text1).text = services[position] view.findViewById<TextView>(R.id.text1).text = services[position]
view.findViewById<TextView>(R.id.text2).text = descriptions[position] view.findViewById<TextView>(R.id.text2).text = descriptions[position]
val icon = view.findViewById<ImageView>(R.id.image_view) val icon = view.findViewById<ImageView>(R.id.image_view)
icon.setImageDrawable(DrawableUtil.getWrapped(context, icons[position])) val iconResId = icons[position]
if (position == 2) { icon.setImageDrawable(DrawableUtil.getWrapped(context, iconResId))
if (iconResId == R.drawable.ic_webdav_logo) {
icon.drawable.setTint(context.getColor(R.color.icon_tint)) icon.drawable.setTint(context.getColor(R.color.icon_tint))
} }
return view return view
@ -53,19 +63,22 @@ class AddAccountDialog : DialogFragment() {
.newDialog() .newDialog()
.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 (if (hasTasksAccount) which + 1 else which) {
0 -> activity?.startActivityForResult( 0 -> activity?.startActivityForResult(
Intent(activity, SignInActivity::class.java),
REQUEST_TASKS_ORG)
1 -> activity?.startActivityForResult(
Intent(activity, GtasksLoginActivity::class.java), Intent(activity, GtasksLoginActivity::class.java),
REQUEST_GOOGLE_TASKS) REQUEST_GOOGLE_TASKS)
1 -> activity?.startActivity( 2 -> activity?.startActivity(
Intent(ACTION_VIEW, Uri.parse(getString(R.string.url_davx5)))) Intent(ACTION_VIEW, Uri.parse(getString(R.string.url_davx5))))
2 -> activity?.startActivityForResult( 3 -> activity?.startActivityForResult(
Intent(activity, CaldavAccountSettingsActivity::class.java), Intent(activity, CaldavAccountSettingsActivity::class.java),
REQUEST_CALDAV_SETTINGS) REQUEST_CALDAV_SETTINGS)
3 -> activity?.startActivityForResult( 4 -> activity?.startActivityForResult(
Intent(activity, EtebaseAccountSettingsActivity::class.java), Intent(activity, EtebaseAccountSettingsActivity::class.java),
REQUEST_CALDAV_SETTINGS) REQUEST_CALDAV_SETTINGS)
4 -> activity?.startActivity( 5 -> activity?.startActivity(
Intent(ACTION_VIEW, Uri.parse(getString(R.string.url_decsync)))) Intent(ACTION_VIEW, Uri.parse(getString(R.string.url_decsync))))
} }
dialog.dismiss() dialog.dismiss()
@ -83,9 +96,19 @@ class AddAccountDialog : DialogFragment() {
} }
companion object { companion object {
fun newAccountDialog(targetFragment: Fragment, rc: Int): AddAccountDialog = private const val EXTRA_HAS_TASKS_ACCOUNT = "extra_has_tasks_account"
AddAccountDialog().apply {
setTargetFragment(targetFragment, rc) 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>
<string-array name="synchronization_services"> <string-array name="synchronization_services">
<item>@string/tasks_org</item>
<item>@string/gtasks_GPr_header</item> <item>@string/gtasks_GPr_header</item>
<item>@string/davx5</item> <item>@string/davx5</item>
<item>@string/caldav</item> <item>@string/caldav</item>
@ -202,6 +203,7 @@
</string-array> </string-array>
<string-array name="synchronization_services_description"> <string-array name="synchronization_services_description">
<item>@string/tasks_org_description</item>
<item>@string/google_tasks_selection_description</item> <item>@string/google_tasks_selection_description</item>
<item>@string/davx5_selection_description</item> <item>@string/davx5_selection_description</item>
<item>@string/caldav_selection_description</item> <item>@string/caldav_selection_description</item>
@ -210,6 +212,7 @@
</string-array> </string-array>
<array name="synchronization_services_icons"> <array name="synchronization_services_icons">
<item>@drawable/ic_round_icon</item>
<item>@drawable/ic_google</item> <item>@drawable/ic_google</item>
<item>@drawable/ic_davx5_icon_green_bg</item> <item>@drawable/ic_davx5_icon_green_bg</item>
<item>@drawable/ic_webdav_logo</item> <item>@drawable/ic_webdav_logo</item>

@ -33,7 +33,6 @@
<!-- Eventually these should be moved to strings.xml for translation --> <!-- Eventually these should be moved to strings.xml for translation -->
<string name="upgrade_tasks_account">Tasks.org account</string> <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_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_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_third_party_apps">Compatible with Outlook, Thunderbird, Apple Reminders, and more</string>
<string name="upgrade_coming_soon">Many new features coming soon!</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="enter_tag_name">Enter tag name</string>
<string name="create_new_tag">Create \"%s\"</string> <string name="create_new_tag">Create \"%s\"</string>
<string name="choose_synchronization_service">Select a platform</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="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="caldav_selection_description">Synchronization based on open internet standards</string>
<string name="etesync_selection_description">Open source, end-to-end encrypted synchronization</string> <string name="etesync_selection_description">Open source, end-to-end encrypted synchronization</string>

Loading…
Cancel
Save