@@ -14,6 +14,7 @@ import android.widget.AdapterView
1414import android.widget.ArrayAdapter
1515import androidx.core.app.ActivityCompat.finishAffinity
1616import androidx.fragment.app.DialogFragment
17+ import androidx.lifecycle.lifecycleScope
1718import com.google.android.material.dialog.MaterialAlertDialogBuilder
1819import com.nextcloud.android.lib.resources.tos.GetTermsRemoteOperation
1920import com.nextcloud.android.lib.resources.tos.SignTermRemoteOperation
@@ -29,9 +30,9 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult
2930import com.owncloud.android.lib.common.utils.Log_OC
3031import com.owncloud.android.utils.DisplayUtils
3132import com.owncloud.android.utils.theme.ViewThemeUtils
32- import kotlinx.coroutines.CoroutineScope
3333import kotlinx.coroutines.Dispatchers
3434import kotlinx.coroutines.launch
35+ import kotlinx.coroutines.withContext
3536import javax.inject.Inject
3637
3738class TermsOfServiceDialog : DialogFragment (), Injectable {
@@ -50,52 +51,56 @@ class TermsOfServiceDialog : DialogFragment(), Injectable {
5051 lateinit var terms: List <Term >
5152 lateinit var languages: Map <String , String >
5253
53- override fun onCreate (savedInstanceState : Bundle ? ) {
54- super .onCreate(savedInstanceState)
55-
56- fetchTerms()
57- }
58-
5954 override fun onCreateDialog (savedInstanceState : Bundle ? ): Dialog {
6055 binding = DialogShowTosBinding .inflate(requireActivity().layoutInflater)
61-
6256 return createDialogBuilder().create()
6357 }
6458
59+ override fun onStart () {
60+ super .onStart()
61+ fetchTerms()
62+ }
63+
6564 private fun updateDialog () {
6665 binding.message.setHtmlContent(terms[0 ].renderedBody)
6766
68- val arrayAdapter: ArrayAdapter <String > = ArrayAdapter (
67+ val arrayAdapter: ArrayAdapter <String > = ArrayAdapter < String > (
6968 binding.root.context,
7069 android.R .layout.simple_spinner_item
71- )
70+ ).apply {
71+ for ((_, _, languageCode) in terms) {
72+ add(languages[languageCode])
73+ }
7274
73- for ((_, _, languageCode) in terms) {
74- arrayAdapter.add(languages[languageCode])
75+ setDropDownViewResource(android.R .layout.simple_spinner_dropdown_item)
7576 }
7677
77- arrayAdapter.setDropDownViewResource(android.R .layout.simple_spinner_dropdown_item)
78+ setupLanguageDropdown(arrayAdapter)
79+ }
7880
79- binding.languageDropdown.adapter = arrayAdapter
80- binding.languageDropdown.onItemSelectedListener = object : AdapterView .OnItemSelectedListener {
81- override fun onItemSelected (adapterView : AdapterView <* >? , view : View , position : Int , l : Long ) {
82- binding.message
83- .setHtmlContent(terms[position].renderedBody)
84- }
81+ private fun setupLanguageDropdown (arrayAdapter : ArrayAdapter <String >) {
82+ binding.languageDropdown.run {
83+ adapter = arrayAdapter
84+ onItemSelectedListener = object : AdapterView .OnItemSelectedListener {
85+ override fun onItemSelected (adapterView : AdapterView <* >? , view : View , position : Int , l : Long ) {
86+ binding.message
87+ .setHtmlContent(terms[position].renderedBody)
88+ }
8589
86- override fun onNothingSelected (adapterView : AdapterView <* >? ) = Unit
87- }
90+ override fun onNothingSelected (adapterView : AdapterView <* >? ) = Unit
91+ }
8892
89- if (terms.size == 1 ) {
90- binding.languageDropdown.visibility = View .GONE
93+ if (terms.size == 1 ) {
94+ visibility = View .GONE
95+ }
9196 }
9297 }
9398
99+ @Suppress(" DEPRECATION" )
94100 private fun fetchTerms () {
95- CoroutineScope (Dispatchers .IO ).launch {
96- // viewLifecycleOwner.lifecycleScope.launch {
101+ lifecycleScope.launch(Dispatchers .IO ) {
97102 try {
98- client = clientFactory.createNextcloudClient(accountManager.getUser() )
103+ client = clientFactory.createNextcloudClient(accountManager.user )
99104 val result = GetTermsRemoteOperation ().execute(client)
100105
101106 if (result.isSuccess &&
@@ -105,8 +110,7 @@ class TermsOfServiceDialog : DialogFragment(), Injectable {
105110 languages = result.resultData.languages
106111 terms = result.resultData.terms
107112
108- CoroutineScope (Dispatchers .Main ).launch {
109- // withContext(Dispatchers.Main) {
113+ withContext(Dispatchers .Main ) {
110114 updateDialog()
111115 }
112116 }
@@ -125,17 +129,25 @@ class TermsOfServiceDialog : DialogFragment(), Injectable {
125129 }
126130 .setPositiveButton(R .string.terms_of_services_agree) { dialog, _ ->
127131 dialog.dismiss()
128- Thread {
129- val id = binding.languageDropdown.selectedItemPosition
130- val signResult: RemoteOperationResult <Void > =
131- SignTermRemoteOperation (terms.get(id).id).execute(client)
132- if (! signResult.isSuccess) {
133- DisplayUtils .showSnackMessage(view, R .string.sign_tos_failed)
134- }
135- }.start()
132+ agreeToS()
136133 }
137134 }
138135
136+ private fun agreeToS () {
137+ lifecycleScope.launch(Dispatchers .IO ) {
138+ val id = binding.languageDropdown.selectedItemPosition
139+ val signResult: RemoteOperationResult <Void > =
140+ SignTermRemoteOperation (terms[id].id).execute(client)
141+
142+ if (! signResult.isSuccess) {
143+ withContext(Dispatchers .Main ) {
144+ DisplayUtils .showSnackMessage(view, R .string.sign_tos_failed)
145+ }
146+ }
147+ }
148+ }
149+
150+
139151 companion object {
140152 private const val TAG = " TermsOfServiceDialog"
141153 }
0 commit comments