From bd018ba28ddfd63c443930aa70ce6ec8a0e97127 Mon Sep 17 00:00:00 2001 From: Amit Kundu Date: Mon, 15 May 2023 20:27:43 +0300 Subject: [PATCH] Replace "Global Scope" with "lifeCycleScope" --- pdfViewer/build.gradle | 4 ++++ .../java/com/rajat/pdfviewer/PdfDownloader.kt | 16 ++++++++-------- .../java/com/rajat/pdfviewer/PdfRendererView.kt | 11 +++++++++-- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/pdfViewer/build.gradle b/pdfViewer/build.gradle index 64a34f7..4930028 100644 --- a/pdfViewer/build.gradle +++ b/pdfViewer/build.gradle @@ -35,6 +35,8 @@ android { } dependencies { + def lifecycle_version = "2.4.1" + implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'androidx.core:core-ktx:1.9.0' @@ -49,4 +51,6 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.4' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0' + implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" + implementation "androidx.lifecycle:lifecycle-common:$lifecycle_version" } diff --git a/pdfViewer/src/main/java/com/rajat/pdfviewer/PdfDownloader.kt b/pdfViewer/src/main/java/com/rajat/pdfviewer/PdfDownloader.kt index 092b01d..cc5f543 100644 --- a/pdfViewer/src/main/java/com/rajat/pdfviewer/PdfDownloader.kt +++ b/pdfViewer/src/main/java/com/rajat/pdfviewer/PdfDownloader.kt @@ -1,9 +1,8 @@ package com.rajat.pdfviewer import android.content.Context +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.async import kotlinx.coroutines.launch import java.io.BufferedInputStream import java.io.File @@ -20,14 +19,15 @@ internal class PdfDownloader(url: String, private val listener: StatusListener) fun onDownloadProgress(currentBytes: Long, totalBytes: Long) {} fun onDownloadSuccess(absolutePath: String) {} fun onError(error: Throwable) {} + fun getCoroutineScope(): CoroutineScope } init { - GlobalScope.async { download(url) } + listener.getCoroutineScope().launch(Dispatchers.IO) { download(url) } } private fun download(downloadUrl: String) { - GlobalScope.launch(Dispatchers.Main) { listener.onDownloadStart() } + listener.getCoroutineScope().launch(Dispatchers.Main) { listener.onDownloadStart() } val outputFile = File(listener.getContext().cacheDir, "downloaded_pdf.pdf") if (outputFile.exists()) outputFile.delete() @@ -49,7 +49,7 @@ internal class PdfDownloader(url: String, private val listener: StatusListener) break if (totalLength > 0) { downloaded += bufferSize - GlobalScope.launch(Dispatchers.Main) { + listener.getCoroutineScope().launch(Dispatchers.Main) { listener.onDownloadProgress( downloaded.toLong(), totalLength.toLong() @@ -60,9 +60,9 @@ internal class PdfDownloader(url: String, private val listener: StatusListener) } while (true) } catch (e: Exception) { e.printStackTrace() - GlobalScope.launch(Dispatchers.Main) { listener.onError(e) } + listener.getCoroutineScope().launch(Dispatchers.Main) { listener.onError(e) } return } - GlobalScope.launch(Dispatchers.Main) { listener.onDownloadSuccess(outputFile.absolutePath) } + listener.getCoroutineScope().launch(Dispatchers.Main) { listener.onDownloadSuccess(outputFile.absolutePath) } } -} \ No newline at end of file +} diff --git a/pdfViewer/src/main/java/com/rajat/pdfviewer/PdfRendererView.kt b/pdfViewer/src/main/java/com/rajat/pdfviewer/PdfRendererView.kt index dbee910..e08ba57 100644 --- a/pdfViewer/src/main/java/com/rajat/pdfviewer/PdfRendererView.kt +++ b/pdfViewer/src/main/java/com/rajat/pdfviewer/PdfRendererView.kt @@ -15,12 +15,16 @@ import android.webkit.WebView import android.webkit.WebViewClient import android.widget.FrameLayout import android.widget.TextView +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.LifecycleCoroutineScope +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.DefaultItemAnimator import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.NO_POSITION import kotlinx.android.synthetic.main.pdf_rendererview.view.* +import kotlinx.coroutines.CoroutineScope import java.io.File import java.net.URLEncoder @@ -63,7 +67,8 @@ class PdfRendererView @JvmOverloads constructor( fun initWithUrl( url: String, pdfQuality: PdfQuality = this.quality, - engine: PdfEngine = this.engine + engine: PdfEngine = this.engine, + lifecycleScope: LifecycleCoroutineScope = (context as AppCompatActivity).lifecycleScope ) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP || engine == PdfEngine.GOOGLE) { initUnderKitkat(url) @@ -93,6 +98,8 @@ class PdfRendererView @JvmOverloads constructor( error.printStackTrace() statusListener?.onError(error) } + + override fun getCoroutineScope(): CoroutineScope = lifecycleScope }) } @@ -256,4 +263,4 @@ class PdfRendererView @JvmOverloads constructor( pdfRendererCore.closePdfRender() } -} \ No newline at end of file +}