Skip to content

Commit a7bcab0

Browse files
committed
fix lifecycle
Signed-off-by: alperozturk <[email protected]>
1 parent cd7ad98 commit a7bcab0

File tree

1 file changed

+48
-36
lines changed

1 file changed

+48
-36
lines changed

app/src/main/java/com/owncloud/android/ui/dialog/TermsOfServiceDialog.kt

Lines changed: 48 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import android.widget.AdapterView
1414
import android.widget.ArrayAdapter
1515
import androidx.core.app.ActivityCompat.finishAffinity
1616
import androidx.fragment.app.DialogFragment
17+
import androidx.lifecycle.lifecycleScope
1718
import com.google.android.material.dialog.MaterialAlertDialogBuilder
1819
import com.nextcloud.android.lib.resources.tos.GetTermsRemoteOperation
1920
import com.nextcloud.android.lib.resources.tos.SignTermRemoteOperation
@@ -29,9 +30,9 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult
2930
import com.owncloud.android.lib.common.utils.Log_OC
3031
import com.owncloud.android.utils.DisplayUtils
3132
import com.owncloud.android.utils.theme.ViewThemeUtils
32-
import kotlinx.coroutines.CoroutineScope
3333
import kotlinx.coroutines.Dispatchers
3434
import kotlinx.coroutines.launch
35+
import kotlinx.coroutines.withContext
3536
import javax.inject.Inject
3637

3738
class 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

Comments
 (0)