@@ -17,6 +17,7 @@ import androidx.core.view.MenuProvider
1717import androidx.documentfile.provider.DocumentFile
1818import androidx.fragment.app.Fragment
1919import androidx.lifecycle.Lifecycle
20+ import androidx.lifecycle.lifecycleScope
2021import androidx.preference.PreferenceManager.getDefaultSharedPreferences
2122
2223import android.os.Bundle
@@ -25,15 +26,14 @@ import android.content.Context
2526import android.view.*
2627import android.widget.Toast
2728
28- import io.reactivex.android.schedulers.AndroidSchedulers
29- import io.reactivex.disposables.CompositeDisposable
30- import io.reactivex.schedulers.Schedulers
29+ import kotlinx.coroutines.Dispatchers
30+ import kotlinx.coroutines.launch
31+ import kotlinx.coroutines.withContext
3132
3233import net.mediaarea.mediainfo.databinding.ReportDetailBinding
3334
3435
3536class ReportDetailFragment : Fragment () {
36- private val disposable: CompositeDisposable = CompositeDisposable ()
3737 private lateinit var activityListener: ReportActivityListener
3838 private var sharedPreferences: SharedPreferences ? = null
3939 private lateinit var reportDetailBinding: ReportDetailBinding
@@ -52,32 +52,31 @@ class ReportDetailFragment : Fragment() {
5252 return @let
5353 }
5454
55- disposable
56- .add(activityListener.getReportViewModel().getReport(it)
57- .subscribeOn(Schedulers .io())
58- .observeOn(AndroidSchedulers .mainThread())
59- .subscribe { report: Report ->
60- if (report.report.isEmpty()) {
55+ lifecycleScope.launch {
56+ withContext(Dispatchers .IO ) {
57+ val report = activityListener.getReportViewModel().getReport(it)
58+ if (report == null || report.report.isEmpty()) {
59+ onError()
60+ } else {
61+ val currentContext: Context ? = context
62+ if (currentContext == null ) {
6163 onError()
6264 } else {
63- val currentContext: Context ? = context
64- if (currentContext == null ) {
65+ val directory = DocumentFile .fromTreeUri(currentContext, uri)
66+
67+ if (directory == null ) {
6568 onError()
6669 } else {
67- val directory = DocumentFile .fromTreeUri(currentContext, uri)
68-
69- if (directory == null ) {
70+ if (! directory.canWrite()) {
7071 onError()
7172 } else {
72- if (! directory.canWrite()) {
73- onError()
74- } else {
75- saveReport(directory, report)
76- }
73+ saveReport(directory, report)
7774 }
7875 }
7976 }
80- })
77+ }
78+ }
79+ }
8180 }
8281 }
8382
@@ -120,36 +119,30 @@ class ReportDetailFragment : Fragment() {
120119 }
121120 }
122121
123- override fun onStop () {
124- super .onStop()
125-
126- // clear all the subscription
127- disposable.clear()
128- }
129-
130122 override fun onCreateView (inflater : LayoutInflater , container : ViewGroup ? ,
131123 savedInstanceState : Bundle ? ): View {
132124
133125 // val rootView = inflater.inflate(R.layout.report_detail, container, false)
134126 // Show the report
135127 id?.let { id ->
136- disposable.add(activityListener.getReportViewModel().getReport(id)
137- .subscribeOn(Schedulers .io())
138- .observeOn(AndroidSchedulers .mainThread())
139- .doOnSuccess {
140- val report: String = Core .convertReport(it.report, view)
141- var content = " "
142- if (view != " HTML" ) {
143- content + = " <html><head>" +
144- " <style>:root { color-scheme: var(--color-scheme, light); } @media (prefers-color-scheme: dark) { :root { --color-scheme: dark; } }</style>" +
145- " </head><body><pre>"
146- content + = report.replace(" \t " , " " ).htmlEncode()
147- content + = " </pre></body></html>"
148- } else {
149- content+ = report
150- }
151- reportDetailBinding.reportDetail.loadDataWithBaseURL(null , content, " text/html" , " utf-8" , null )
152- }.subscribe())
128+ lifecycleScope.launch {
129+ val content = withContext(Dispatchers .IO ) {
130+ val reportObject = activityListener.getReportViewModel().getReport(id)
131+ val report: String = if (reportObject != null ) Core .convertReport(reportObject.report, view) else " Error fetching report."
132+ var content = " "
133+ if (view != " HTML" ) {
134+ content + = " <html><head>" +
135+ " <style>:root { color-scheme: var(--color-scheme, light); } @media (prefers-color-scheme: dark) { :root { --color-scheme: dark; } }</style>" +
136+ " </head><body><pre>"
137+ content + = report.replace(" \t " , " " ).htmlEncode()
138+ content + = " </pre></body></html>"
139+ } else {
140+ content+ = report
141+ }
142+ content
143+ }
144+ reportDetailBinding.reportDetail.loadDataWithBaseURL(null , content, " text/html" , " utf-8" , null )
145+ }
153146 }
154147
155148 return reportDetailBinding.root
0 commit comments