@@ -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,29 @@ 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+ val report = activityListener.getReportViewModel().getReport(it)
57+ if (report.report.isEmpty()) {
58+ onError()
59+ } else {
60+ val currentContext: Context ? = context
61+ if (currentContext == null ) {
62+ onError()
63+ } else {
64+ val directory = DocumentFile .fromTreeUri(currentContext, uri)
65+
66+ if (directory == null ) {
6167 onError()
6268 } else {
63- val currentContext: Context ? = context
64- if (currentContext == null ) {
69+ if (! directory.canWrite()) {
6570 onError()
6671 } else {
67- val directory = DocumentFile .fromTreeUri(currentContext, uri)
68-
69- if (directory == null ) {
70- onError()
71- } else {
72- if (! directory.canWrite()) {
73- onError()
74- } else {
75- saveReport(directory, report)
76- }
77- }
72+ saveReport(directory, report)
7873 }
7974 }
80- })
75+ }
76+ }
77+ }
8178 }
8279 }
8380
@@ -120,36 +117,30 @@ class ReportDetailFragment : Fragment() {
120117 }
121118 }
122119
123- override fun onStop () {
124- super .onStop()
125-
126- // clear all the subscription
127- disposable.clear()
128- }
129-
130120 override fun onCreateView (inflater : LayoutInflater , container : ViewGroup ? ,
131121 savedInstanceState : Bundle ? ): View {
132122
133123 // val rootView = inflater.inflate(R.layout.report_detail, container, false)
134124 // Show the report
135125 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())
126+ lifecycleScope.launch {
127+ val content = withContext(Dispatchers .IO ) {
128+ val reportObject = activityListener.getReportViewModel().getReport(id)
129+ val report: String = Core .convertReport(reportObject.report, view)
130+ var content = " "
131+ if (view != " HTML" ) {
132+ content + = " <html><head>" +
133+ " <style>:root { color-scheme: var(--color-scheme, light); } @media (prefers-color-scheme: dark) { :root { --color-scheme: dark; } }</style>" +
134+ " </head><body><pre>"
135+ content + = report.replace(" \t " , " " ).htmlEncode()
136+ content + = " </pre></body></html>"
137+ } else {
138+ content+ = report
139+ }
140+ content
141+ }
142+ reportDetailBinding.reportDetail.loadDataWithBaseURL(null , content, " text/html" , " utf-8" , null )
143+ }
153144 }
154145
155146 return reportDetailBinding.root
0 commit comments