Ver Fonte

【PDF组件】文档打开、文件加密状态封装

liuxiaolong há 2 anos atrás
pai
commit
7e76be62ff
43 ficheiros alterados com 366 adições e 397 exclusões
  1. 0 1
      app/src/main/java/com/convenient/android/lib/MainActivity.kt
  2. 0 2
      app/src/main/java/com/convenient/android/lib/ui/sample/ad/AdMainActivity.kt
  3. 0 1
      app/src/main/java/com/convenient/android/lib/ui/sample/ad/activity/AdNativeActivity.kt
  4. 29 6
      app/src/main/java/com/convenient/android/lib/ui/sample/read/ReaderActivity.kt
  5. 9 8
      app/src/main/java/com/convenient/android/lib/ui/sample/read/ReaderViewActivity.kt
  6. 1 1
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/impl/AdmobAdSize.kt
  7. 0 2
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/impl/AdmobInitialize.kt
  8. 12 16
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdMobNativeRequestImpl.kt
  9. 15 19
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobAppOpenRequestImpl.kt
  10. 21 24
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobBannerRequestImpl.kt
  11. 14 18
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobInterstitialRequestImpl.kt
  12. 14 18
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobRewardInterstitialRequestImpl.kt
  13. 4 14
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobRewardRequestImpl.kt
  14. 1 0
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/view/AdmobBannerView.kt
  15. 1 1
      lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/view/AdmobNativeAdView.kt
  16. 0 1
      lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxAppOpenRequestImpl.kt
  17. 0 1
      lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxBannerRequestImpl.kt
  18. 0 2
      lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxInterstitialRequestImpl.kt
  19. 3 9
      lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxNativeRequestImpl.kt
  20. 3 8
      lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxNativeTemplateRequestImpl.kt
  21. 4 4
      lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxRewardRequestImpl.kt
  22. 0 1
      lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/view/AppLovinMaxBannerView.kt
  23. 4 11
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJAppOpenRequestImpl.kt
  24. 8 12
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJBannerRequestImpl.kt
  25. 7 11
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJInterstitialRequestImpl.kt
  26. 7 11
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJNativeRequestImpl.kt
  27. 4 8
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJNativeTemplateRequestImpl.kt
  28. 4 7
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJRewardRequestImpl.kt
  29. 2 4
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/view/CSJBannerView.kt
  30. 0 1
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/view/CSJNativeAdView.kt
  31. 1 0
      lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/view/CSJNativeTemplateAdView.kt
  32. 5 15
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMAppOpenRequestImpl.kt
  33. 4 7
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMBannerRequestImpl.kt
  34. 31 37
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMInterstitialRequestImpl.kt
  35. 10 18
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMNativeTemplateRequestImpl.kt
  36. 8 14
      lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMRewardRequestImpl.kt
  37. 2 4
      lib_material_design_tokens/src/androidTest/java/com/convenient/android/material/design/tokens/ExampleInstrumentedTest.kt
  38. 1 1
      lib_material_design_tokens/src/main/res/values-night/themes.xml
  39. 1 1
      lib_material_design_tokens/src/main/res/values/themes.xml
  40. 1 2
      lib_material_design_tokens/src/test/java/com/convenient/android/material/design/tokens/ExampleUnitTest.kt
  41. 60 76
      lib_pdf_base/src/main/java/com/pdf/base/function/LogicFunction.kt
  42. 47 0
      lib_pdf_base/src/main/java/com/pdf/base/impl/NormalOpenDocumentCallback.kt
  43. 28 0
      lib_pdf_base/src/main/java/com/pdf/base/interfaces/OpenDocumentCallback.kt

+ 0 - 1
app/src/main/java/com/convenient/android/lib/MainActivity.kt

@@ -16,7 +16,6 @@ import androidx.compose.material3.*
 import androidx.compose.runtime.*
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.graphics.vector.ImageVector
 import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.dp

+ 0 - 2
app/src/main/java/com/convenient/android/lib/ui/sample/ad/AdMainActivity.kt

@@ -4,7 +4,6 @@ import android.os.Bundle
 import android.util.Log
 import androidx.activity.compose.setContent
 import androidx.appcompat.app.AppCompatActivity
-import androidx.lifecycle.lifecycleScope
 import com.composition.android.ad.admob.impl.AdmobInitialize
 import com.composition.android.ad.csj.impl.CSJInitialize
 import com.composition.android.ad.gromore.impl.GroMoreInitialize
@@ -14,7 +13,6 @@ import com.composition.android.lib.ad.bean.AdUnitBean
 import com.convenient.android.lib.ui.sample.ad.model.Datas
 import com.convenient.android.lib.ui.sample.ad.page.AdMainPage
 import com.convenient.android.lib.ui.theme.SampleTheme
-import kotlinx.coroutines.launch
 
 class AdMainActivity : AppCompatActivity() {
 

+ 0 - 1
app/src/main/java/com/convenient/android/lib/ui/sample/ad/activity/AdNativeActivity.kt

@@ -3,7 +3,6 @@ package com.convenient.android.lib.ui.sample.ad.activity
 import android.os.Bundle
 import androidx.core.view.isVisible
 import androidx.lifecycle.lifecycleScope
-import com.composition.android.ad.applovinmax.loadAppLovinNativeAd
 import com.composition.android.lib.ad.AdLoad
 import com.composition.android.lib.ad.AdManager
 import com.composition.android.lib.ad.basic.AdResult

+ 29 - 6
app/src/main/java/com/convenient/android/lib/ui/sample/read/ReaderActivity.kt

@@ -30,7 +30,9 @@ import com.compdfkit.ui.reader.IReaderViewCallback
 import com.convenient.android.common.utils.ToastUtil
 import com.convenient.android.lib.ui.sample.read.setting.BottomSettingView
 import com.convenient.android.lib.ui.theme.SampleTheme
-import com.pdf.base.function.onVerifyDocument
+import com.pdf.base.function.documentIsEncrypt
+import com.pdf.base.function.openDocument
+import com.pdf.base.function.retryOpenDocument
 import kotlinx.coroutines.launch
 
 /**
@@ -73,11 +75,32 @@ fun readerPage(life: LifecycleCoroutineScope?) {
         //第一个文件
         when (it.isNotEmpty()) {
             true -> it[0].apply {
-                life?.onVerifyDocument(context, this, "", "", { document ->
-                    currentDocument = document
-                }, {
-                    Log.e("AAAA", "初始化失败")
-                })
+                life?.launch {
+
+                    if (context.documentIsEncrypt(this@apply)) {
+                        Log.e("AAAA", "文档已加密")
+                    }else{
+                        Log.e("AAAA", "文档未加密")
+                    }
+
+                    context.openDocument(this@apply, "", ""){
+
+                        success {
+                            currentDocument = it
+                        }
+
+                        fail {
+                            Log.e("AAAA", "初始化失败")
+                        }
+
+                        isEncrypt {
+                            ToastUtil.showToast(context, "文档已加密")
+                            life.launch {
+                                it.retryOpenDocument(this@apply, absolutePath = "", password = "1234", normalOpenDocumentCallback = this@openDocument)
+                            }
+                        }
+                    }
+                }
             }
             else -> ToastUtil.showToast(context, "初始化失败")
         }

+ 9 - 8
app/src/main/java/com/convenient/android/lib/ui/sample/read/ReaderViewActivity.kt

@@ -1,11 +1,11 @@
 package com.convenient.android.lib.ui.sample.read
 
 import android.os.Bundle
-import android.util.Log
 import androidx.lifecycle.lifecycleScope
 import com.convenient.android.common.base.viewbinding.BaseBindingActivity
 import com.convenient.android.lib.databinding.ActivityReaderViewBinding
-import com.pdf.base.function.onVerifyDocument
+import com.pdf.base.function.openDocument
+import kotlinx.coroutines.launch
 
 /**
  * @author: hubowen
@@ -15,12 +15,13 @@ import com.pdf.base.function.onVerifyDocument
 class ReaderViewActivity : BaseBindingActivity<ActivityReaderViewBinding>(ActivityReaderViewBinding::inflate) {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        lifecycleScope.onVerifyDocument(context = this, uri = null, absolutePath = "/storage/emulated/0/17PDF/123.pdf", password = null, {
-            binding.idReaderView.pdfDocument = it
-        }, {
-            Log.e("AAAA", "error")
-        })
-
+        lifecycleScope.launch {
+            this@ReaderViewActivity.openDocument(uri = null, absolutePath = "/storage/emulated/0/17PDF/123.pdf", password = ""){
+                success {  }
+                fail {  }
+                isEncrypt {  }
+            }
+        }
         readerView
     }
 }

+ 1 - 1
lib_ad_admob/src/main/java/com/composition/android/ad/admob/impl/AdmobAdSize.kt

@@ -7,7 +7,7 @@ import com.google.android.gms.ads.AdSize
  * @classname:
  * @author: LiuXiaoLong
  * @date: 2022/9/13
- * description:
+ * description: AdMob横幅广告尺寸
  */
 class AdmobAdSize(var size: AdSize) : IAdSize<AdSize> {
 

+ 0 - 2
lib_ad_admob/src/main/java/com/composition/android/ad/admob/impl/AdmobInitialize.kt

@@ -5,7 +5,6 @@ import com.composition.android.lib.ad.AdManager
 import com.composition.android.lib.ad.interfaces.Initialize
 import com.composition.android.lib.ad.util.adLogE
 import com.google.android.gms.ads.MobileAds
-import com.google.android.gms.ads.RequestConfiguration
 
 /**
  * @classname:
@@ -18,6 +17,5 @@ class AdmobInitialize : Initialize {
         MobileAds.initialize(context){
             adLogE(AdManager.TAG,"Admob初始化完成---------->")
         }
-
     }
 }

+ 12 - 16
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdMobNativeRequestImpl.kt

@@ -5,6 +5,7 @@ import com.composition.android.lib.ad.basic.AdLoadCode
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import com.google.android.gms.ads.AdListener
@@ -12,7 +13,6 @@ import com.google.android.gms.ads.AdLoader
 import com.google.android.gms.ads.AdRequest
 import com.google.android.gms.ads.LoadAdError
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -20,33 +20,29 @@ import kotlin.coroutines.resume
  * @date: 2022/9/5
  * description:Admob原生广告加载实现
  */
-class AdMobNativeRequestImpl : IAdFormatRequest{
+class AdMobNativeRequestImpl : IAdFormatRequest {
 
 
-    override suspend fun load(context: Context, adUnitBean : AdUnitBean)  : AdResult{
+    override suspend fun load(context: Context, adUnitBean: AdUnitBean): AdResult {
 
         return suspendCancellableCoroutine {
             val listener: AdListener = object : AdListener() {
                 override fun onAdFailedToLoad(p0: LoadAdError) {
                     printAdFailInfo(p0.code, p0.message)
-                    if (it.isActive) {
-                        it.resume(AdResult.Fail(adUnitBean, msg = p0.message))
-                    }
+                    it.isActiveResult(AdResult.Fail(adUnitBean, msg = p0.message))
                 }
             }
             val adLoader = AdLoader.Builder(context, adUnitBean.adUnitId)
-                .forNativeAd {nativeAd->
+                .forNativeAd { nativeAd ->
                     printAdInfo(adUnitBean)
-                    if (it.isActive) {
-                        it.resume(
-                            AdResult.Success(
-                                nativeAd,
-                                adUnitBean,
-                                AdLoadCode.SUCCESS,
-                                "Admob广告-原生-加载成功"
-                            )
+                    it.isActiveResult(
+                        AdResult.Success(
+                            nativeAd,
+                            adUnitBean,
+                            AdLoadCode.SUCCESS,
+                            "Admob广告-原生-加载成功"
                         )
-                    }
+                    )
                 }
                 .withAdListener(listener).build()
             val adRequest = AdRequest.Builder().build()

+ 15 - 19
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobAppOpenRequestImpl.kt

@@ -5,12 +5,12 @@ import com.composition.android.lib.ad.basic.AdLoadCode
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import com.google.android.gms.ads.LoadAdError
 import com.google.android.gms.ads.appopen.AppOpenAd
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -27,29 +27,25 @@ class AdmobAppOpenRequestImpl : IAdFormatRequest {
                 object : AppOpenAd.AppOpenAdLoadCallback() {
                     override fun onAdFailedToLoad(p0: LoadAdError) {
                         printAdFailInfo(p0.code, p0.message)
-                        if (it.isActive) {
-                            it.resume(
-                                AdResult.Fail(
-                                    adUnitBean,
-                                    AdLoadCode.FAIL,
-                                    p0.message
-                                )
+                        it.isActiveResult(
+                            AdResult.Fail(
+                                adUnitBean,
+                                AdLoadCode.FAIL,
+                                p0.message
                             )
-                        }
-
+                        )
                     }
+
                     override fun onAdLoaded(p0: AppOpenAd) {
                         printAdInfo(adUnitBean)
-                        if (it.isActive) {
-                            it.resume(
-                                AdResult.Success(
-                                    p0,
-                                    adUnitBean,
-                                    AdLoadCode.SUCCESS,
-                                    "Admob广告-开屏-加载成功"
-                                )
+                        it.isActiveResult(
+                            AdResult.Success(
+                                p0,
+                                adUnitBean,
+                                AdLoadCode.SUCCESS,
+                                "Admob广告-开屏-加载成功"
                             )
-                        }
+                        )
                     }
                 }
             val adRequest = com.google.android.gms.ads.AdRequest.Builder()

+ 21 - 24
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobBannerRequestImpl.kt

@@ -7,13 +7,13 @@ import com.composition.android.lib.ad.basic.AdLoadCode
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import com.google.android.gms.ads.AdListener
 import com.google.android.gms.ads.AdView
 import com.google.android.gms.ads.LoadAdError
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -28,42 +28,39 @@ class AdmobBannerRequestImpl : IAdFormatRequest {
         return suspendCancellableCoroutine<AdResult> {
             val adView = AdView(context).apply {
                 adUnitId = adUnitBean.adUnitId
-                setAdSize(if (adUnitBean.adSize is AdmobAdSize){
-                    (adUnitBean.adSize as AdmobAdSize).size
-                }else{
-                    getAdSize(context)
-                })
+                setAdSize(
+                    if (adUnitBean.adSize is AdmobAdSize) {
+                        (adUnitBean.adSize as AdmobAdSize).size
+                    } else {
+                        getAdSize(context)
+                    }
+                )
             }
 
             val listener: AdListener = object : AdListener() {
                 override fun onAdLoaded() {
                     super.onAdLoaded()
                     printAdInfo(adUnitBean)
-                    if (it.isActive) {
-                        it.resume(
-                            AdResult.Success(
-                                adView,
-                                adUnitBean,
-                                AdLoadCode.SUCCESS,
-                                "Admob广告-横幅-加载成功"
-                            )
+                    it.isActiveResult(
+                        AdResult.Success(
+                            adView,
+                            adUnitBean,
+                            AdLoadCode.SUCCESS,
+                            "Admob广告-横幅-加载成功"
                         )
-                    }
-
+                    )
                 }
 
                 override fun onAdFailedToLoad(p0: LoadAdError) {
                     super.onAdFailedToLoad(p0)
                     printAdFailInfo(p0.code, p0.message)
-                    if (it.isActive){
-                        it.resume(
-                            AdResult.Fail(
-                                adUnitBean,
-                                AdLoadCode.FAIL,
-                                p0.message
-                            )
+                    it.isActiveResult(
+                        AdResult.Fail(
+                            adUnitBean,
+                            AdLoadCode.FAIL,
+                            p0.message
                         )
-                    }
+                    )
                 }
             }
             adView.adListener = listener

+ 14 - 18
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobInterstitialRequestImpl.kt

@@ -5,13 +5,13 @@ import com.composition.android.lib.ad.basic.AdLoadCode
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import com.google.android.gms.ads.LoadAdError
 import com.google.android.gms.ads.interstitial.InterstitialAd
 import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -27,29 +27,25 @@ class AdmobInterstitialRequestImpl : IAdFormatRequest {
             val listener: InterstitialAdLoadCallback = object : InterstitialAdLoadCallback() {
                 override fun onAdLoaded(p0: InterstitialAd) {
                     printAdInfo(adUnitBean)
-                    if (it.isActive){
-                        it.resume(
-                            AdResult.Success(
-                                adObject = p0,
-                                adBean = adUnitBean,
-                                code = AdLoadCode.SUCCESS,
-                                msg = "Admob广告-插屏-加载成功"
-                            )
+                    it.isActiveResult(
+                        AdResult.Success(
+                            adObject = p0,
+                            adBean = adUnitBean,
+                            code = AdLoadCode.SUCCESS,
+                            msg = "Admob广告-插屏-加载成功"
                         )
-                    }
+                    )
                 }
 
                 override fun onAdFailedToLoad(p0: LoadAdError) {
                     printAdFailInfo(p0.code, p0.message)
-                    if (it.isActive){
-                        it.resume(
-                            AdResult.Fail(
-                                adUnitBean,
-                                AdLoadCode.FAIL,
-                                p0.message
-                            )
+                    it.isActiveResult(
+                        AdResult.Fail(
+                            adUnitBean,
+                            AdLoadCode.FAIL,
+                            p0.message
                         )
-                    }
+                    )
                 }
             }
 

+ 14 - 18
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobRewardInterstitialRequestImpl.kt

@@ -6,13 +6,13 @@ import com.composition.android.lib.ad.basic.AdLoadCode
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import com.google.android.gms.ads.LoadAdError
 import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAd
 import com.google.android.gms.ads.rewardedinterstitial.RewardedInterstitialAdLoadCallback
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -29,29 +29,25 @@ class AdmobRewardInterstitialRequestImpl : IAdFormatRequest {
                 object : RewardedInterstitialAdLoadCallback() {
                     override fun onAdLoaded(p0: RewardedInterstitialAd) {
                         printAdInfo(adUnitBean)
-                        if (it.isActive) {
-                            it.resume(
-                                AdResult.Success(
-                                    adBean = adUnitBean,
-                                    adObject = p0,
-                                    code = AdLoadCode.SUCCESS,
-                                    msg = "Admob广告-激励-加载成功"
-                                )
+                        it.isActiveResult(
+                            AdResult.Success(
+                                adBean = adUnitBean,
+                                adObject = p0,
+                                code = AdLoadCode.SUCCESS,
+                                msg = "Admob广告-激励-加载成功"
                             )
-                        }
+                        )
                     }
 
                     override fun onAdFailedToLoad(p0: LoadAdError) {
                         printAdFailInfo(p0.code, p0.message)
-                        if (it.isActive) {
-                            it.resume(
-                                AdResult.Fail(
-                                    adUnitBean,
-                                    AdLoadCode.FAIL,
-                                    getFailedCodeInfo(p0.code)
-                                )
+                        it.isActiveResult(
+                            AdResult.Fail(
+                                adUnitBean,
+                                AdLoadCode.FAIL,
+                                getFailedCodeInfo(p0.code)
                             )
-                        }
+                        )
                     }
                 }
 

+ 4 - 14
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/request/AdmobRewardRequestImpl.kt

@@ -5,13 +5,13 @@ import com.composition.android.lib.ad.basic.AdLoadCode
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import com.google.android.gms.ads.LoadAdError
 import com.google.android.gms.ads.rewarded.RewardedAd
 import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -22,31 +22,21 @@ import kotlin.coroutines.resume
 class AdmobRewardRequestImpl : IAdFormatRequest {
 
     override suspend fun load(context: Context, adUnitBean: AdUnitBean): AdResult {
-        return suspendCancellableCoroutine<AdResult> {
+        return suspendCancellableCoroutine {
             val listener: RewardedAdLoadCallback = object : RewardedAdLoadCallback() {
 
                 override fun onAdFailedToLoad(p0: LoadAdError) {
                     printAdFailInfo(p0.code, p0.message)
-                    if (it.isActive) {
-                        it.resume(AdResult.Fail(adUnitBean, AdLoadCode.FAIL, p0.message))
-                    }
+                    it.isActiveResult(AdResult.Fail(adUnitBean, AdLoadCode.FAIL, p0.message))
                 }
 
                 override fun onAdLoaded(p0: RewardedAd) {
                     printAdInfo(adUnitBean)
-                    if (it.isActive) {
-                        it.resume(
-                            AdResult.Success(
-                                p0,
-                                adUnitBean, AdLoadCode.SUCCESS, "Admob广告-激励-加载成功"
-                            )
-                        )
-                    }
+                    it.isActiveResult(AdResult.Success(p0, adUnitBean, AdLoadCode.SUCCESS, "Admob广告-激励-加载成功"))
                 }
             }
             val adRequest = com.google.android.gms.ads.AdRequest.Builder()
                 .build()
-
             RewardedAd.load(context, adUnitBean.adUnitId, adRequest, listener)
         }
     }

+ 1 - 0
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/view/AdmobBannerView.kt

@@ -59,6 +59,7 @@ class AdmobBannerView(context: Context?) : BasicAdView<AdView>(context) {
     override fun onDestroy() {
         adView?.pause()
         adView?.destroy()
+        adResult?.adObject = null
     }
 
 }

+ 1 - 1
lib_ad_admob/src/main/java/com/composition/android/ad/admob/load/view/AdmobNativeAdView.kt

@@ -51,12 +51,12 @@ class AdmobNativeAdView(context: Context?) : BasicAdView<NativeAdView>(context)
 
     override fun onDestroy() {
         adView?.destroy()
+        adResult?.adObject = null
     }
 
 
     companion object {
 
-
         fun populateNativeAdView(context: Context, success: AdResult.Success, nativeAdViewHolder: NativeAdViewHolder, nativeAdView: NativeAdView) {
             try {
                 val nativeAd = success.adObject as NativeAd

+ 0 - 1
lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxAppOpenRequestImpl.kt

@@ -13,7 +13,6 @@ import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:AppLovinMaxAppOpenRequestImpl

+ 0 - 1
lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxBannerRequestImpl.kt

@@ -15,7 +15,6 @@ import com.composition.android.lib.ad.interfaces.IAdFormatRequest
 import com.composition.android.lib.ad.util.*
 import com.kdanmobile.android.ad.applovinmax.R
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:

+ 0 - 2
lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxInterstitialRequestImpl.kt

@@ -5,7 +5,6 @@ import android.content.Context
 import com.applovin.mediation.MaxAd
 import com.applovin.mediation.MaxAdListener
 import com.applovin.mediation.MaxError
-import com.applovin.mediation.ads.MaxAppOpenAd
 import com.applovin.mediation.ads.MaxInterstitialAd
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
@@ -14,7 +13,6 @@ import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:AppLovinMaxAppOpenRequestImpl

+ 3 - 9
lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxNativeRequestImpl.kt

@@ -2,27 +2,21 @@ package com.composition.android.ad.applovinmax.load.request
 
 import android.app.Activity
 import android.content.Context
-import android.view.ViewGroup
-import android.widget.RelativeLayout
 import androidx.appcompat.widget.AppCompatImageView
 import com.applovin.mediation.MaxAd
-import com.applovin.mediation.MaxAdViewAdListener
 import com.applovin.mediation.MaxError
-import com.applovin.mediation.ads.MaxAdView
 import com.applovin.mediation.nativeAds.MaxNativeAdListener
 import com.applovin.mediation.nativeAds.MaxNativeAdLoader
 import com.applovin.mediation.nativeAds.MaxNativeAdView
 import com.applovin.mediation.nativeAds.MaxNativeAdViewBinder
-import com.composition.android.lib.ad.AdManager
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.basic.NativeAdViewHolder
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
-import com.composition.android.lib.ad.util.*
-import com.kdanmobile.android.ad.applovinmax.R
-import kotlinx.coroutines.flow.combine
+import com.composition.android.lib.ad.util.isActiveResult
+import com.composition.android.lib.ad.util.printAdFailInfo
+import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:

+ 3 - 8
lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxNativeTemplateRequestImpl.kt

@@ -2,23 +2,18 @@ package com.composition.android.ad.applovinmax.load.request
 
 import android.app.Activity
 import android.content.Context
-import android.view.ViewGroup
-import android.widget.RelativeLayout
 import com.applovin.mediation.MaxAd
-import com.applovin.mediation.MaxAdViewAdListener
 import com.applovin.mediation.MaxError
-import com.applovin.mediation.ads.MaxAdView
 import com.applovin.mediation.nativeAds.MaxNativeAdListener
 import com.applovin.mediation.nativeAds.MaxNativeAdLoader
 import com.applovin.mediation.nativeAds.MaxNativeAdView
-import com.composition.android.lib.ad.AdManager
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
-import com.composition.android.lib.ad.util.*
-import com.kdanmobile.android.ad.applovinmax.R
+import com.composition.android.lib.ad.util.isActiveResult
+import com.composition.android.lib.ad.util.printAdFailInfo
+import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:

+ 4 - 4
lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/request/AppLovinMaxRewardRequestImpl.kt

@@ -2,9 +2,10 @@ package com.composition.android.ad.applovinmax.load.request
 
 import android.app.Activity
 import android.content.Context
-import com.applovin.mediation.*
-import com.applovin.mediation.ads.MaxAppOpenAd
-import com.applovin.mediation.ads.MaxInterstitialAd
+import com.applovin.mediation.MaxAd
+import com.applovin.mediation.MaxError
+import com.applovin.mediation.MaxReward
+import com.applovin.mediation.MaxRewardedAdListener
 import com.applovin.mediation.ads.MaxRewardedAd
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
@@ -13,7 +14,6 @@ import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:AppLovinMaxAppOpenRequestImpl

+ 0 - 1
lib_ad_applovinmax/src/main/java/com/composition/android/ad/applovinmax/load/view/AppLovinMaxBannerView.kt

@@ -2,7 +2,6 @@ package com.composition.android.ad.applovinmax.load.view
 
 import android.content.Context
 import com.applovin.mediation.MaxAd
-import com.applovin.mediation.MaxAdListener
 import com.applovin.mediation.MaxAdViewAdListener
 import com.applovin.mediation.MaxError
 import com.applovin.mediation.ads.MaxAdView

+ 4 - 11
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJAppOpenRequestImpl.kt

@@ -7,7 +7,6 @@ import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
 import com.composition.android.lib.ad.util.*
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -37,26 +36,20 @@ class CSJAppOpenRequestImpl : IAdFormatRequest {
                 .build()
 
             TTAdSdk.getAdManager().createAdNative(context)
-                .loadSplashAd(adSlot, object : TTAdNative.SplashAdListener{
+                .loadSplashAd(adSlot, object : TTAdNative.SplashAdListener {
                     override fun onError(p0: Int, p1: String?) {
                         printAdFailInfo(p0, p1)
-                        if (it.isActive){
-                            it.resume(AdResult.Fail(adBean = adUnitBean, msg = p1?:"穿山甲广告-开屏-加载失败"))
-                        }
+                        it.isActiveResult(AdResult.Fail(adBean = adUnitBean, msg = p1 ?: "穿山甲广告-开屏-加载失败"))
                     }
 
                     override fun onTimeout() {
                         adLog(msg = "穿山甲广告-开屏-加载超时")
-                        if (it.isActive){
-                            it.resume(AdResult.Fail(adBean = adUnitBean, msg = "穿山甲广告-开屏-加载失败,请求超时"))
-                        }
+                        it.isActiveResult(AdResult.Fail(adBean = adUnitBean, msg = "穿山甲广告-开屏-加载失败,请求超时"))
                     }
 
                     override fun onSplashAdLoad(p0: TTSplashAd?) {
                         printAdInfo(adUnitBean)
-                        if (it.isActive){
-                            it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲广告-开屏-加载成功"))
-                        }
+                        it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲广告-开屏-加载成功"))
                     }
                 })
         }

+ 8 - 12
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJBannerRequestImpl.kt

@@ -7,10 +7,10 @@ import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
 import com.composition.android.lib.ad.util.adLog
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -29,7 +29,7 @@ class CSJBannerRequestImpl : IAdFormatRequest {
             val adSlot = AdSlot.Builder()
                 .setCodeId(adUnitBean.adUnitId)
                 .setAdCount(1)
-                .setExpressViewAcceptedSize(size.first /2F, size.second/2F)
+                .setExpressViewAcceptedSize(size.first / 2F, size.second / 2F)
                 .setAdLoadType(TTAdLoadType.PRELOAD)
                 .build()
 
@@ -37,20 +37,16 @@ class CSJBannerRequestImpl : IAdFormatRequest {
                 .loadBannerExpressAd(adSlot, object : TTAdNative.NativeExpressAdListener {
                     override fun onError(p0: Int, p1: String?) {
                         printAdFailInfo(p0, p1)
-                        if (it.isActive) {
-                            it.resume(AdResult.Fail(adUnitBean, msg = p1 ?: "穿山甲广告-横幅-加载失败"))
-                        }
+                        it.isActiveResult(AdResult.Fail(adUnitBean, msg = p1 ?: "穿山甲广告-横幅-加载失败"))
                     }
 
                     override fun onNativeExpressAdLoad(p0: MutableList<TTNativeExpressAd>?) {
                         printAdInfo(adUnitBean)
-                        if (it.isActive) {
-                            if (p0.isNullOrEmpty().not()) {
-                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0?.get(0), msg = "穿山甲广告-横幅-加载成功"))
-                            } else {
-                                adLog(msg = "穿山甲广告-横幅-返回的广告实例为空")
-                                it.resume(AdResult.Fail(adUnitBean, msg = "穿山甲广告-横幅-加载失败, 返回的广告实例为空"))
-                            }
+                        if (p0.isNullOrEmpty().not()) {
+                            it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = p0?.get(0), msg = "穿山甲广告-横幅-加载成功"))
+                        } else {
+                            adLog(msg = "穿山甲广告-横幅-返回的广告实例为空")
+                            it.isActiveResult(AdResult.Fail(adUnitBean, msg = "穿山甲广告-横幅-加载失败, 返回的广告实例为空"))
                         }
                     }
                 })

+ 7 - 11
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJInterstitialRequestImpl.kt

@@ -6,10 +6,10 @@ import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
 import com.composition.android.lib.ad.util.adLog
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -34,9 +34,7 @@ class CSJInterstitialRequestImpl : IAdFormatRequest {
                 .loadFullScreenVideoAd(adSlot, object : TTAdNative.FullScreenVideoAdListener {
                     override fun onError(p0: Int, p1: String?) {
                         printAdFailInfo(p0, p1)
-                        if (it.isActive) {
-                            it.resume(AdResult.Fail(adUnitBean, msg = p1 ?: "穿山甲广告-模板插屏-加载失败"))
-                        }
+                        it.isActiveResult(AdResult.Fail(adUnitBean, msg = p1 ?: "穿山甲广告-模板插屏-加载失败"))
                     }
 
                     override fun onFullScreenVideoAdLoad(p0: TTFullScreenVideoAd?) {
@@ -47,13 +45,11 @@ class CSJInterstitialRequestImpl : IAdFormatRequest {
 
                     override fun onFullScreenVideoCached(p0: TTFullScreenVideoAd?) {
                         printAdInfo(adUnitBean)
-                        if (it.isActive) {
-                            if (p0 != null) {
-                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲广告-模板插屏-加载成功"))
-                            } else {
-                                adLog(msg = "穿山甲广告-模板插屏-加载失败,SDK返回的广告实例为空")
-                                it.resume(AdResult.Fail(adUnitBean, msg = "穿山甲广告-模板插屏-加载失败,SDK返回的广告实例为空"))
-                            }
+                        if (p0 != null) {
+                            it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲广告-模板插屏-加载成功"))
+                        } else {
+                            adLog(msg = "穿山甲广告-模板插屏-加载失败,SDK返回的广告实例为空")
+                            it.isActiveResult(AdResult.Fail(adUnitBean, msg = "穿山甲广告-模板插屏-加载失败,SDK返回的广告实例为空"))
                         }
                     }
                 })

+ 7 - 11
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJNativeRequestImpl.kt

@@ -6,10 +6,10 @@ import com.composition.android.ad.csj.impl.CSJNativeAdImageSize
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -23,7 +23,7 @@ class CSJNativeRequestImpl : IAdFormatRequest {
 
         return suspendCancellableCoroutine {
 
-            val adSize = if (adUnitBean.adSize != null && adUnitBean.adSize is CSJNativeAdImageSize){
+            val adSize = if (adUnitBean.adSize != null && adUnitBean.adSize is CSJNativeAdImageSize) {
                 val size = adUnitBean.adSize as CSJNativeAdImageSize
                 size.width to size.height
             } else {
@@ -42,19 +42,15 @@ class CSJNativeRequestImpl : IAdFormatRequest {
                 .loadNativeAd(adSlot, object : TTAdNative.NativeAdListener {
                     override fun onError(p0: Int, p1: String?) {
                         printAdFailInfo(p0, p1)
-                        if (it.isActive) {
-                            it.resume(AdResult.Fail(adUnitBean, msg = p1 ?: "穿山甲广告-原生-加载失败"))
-                        }
+                        it.isActiveResult(AdResult.Fail(adUnitBean, msg = p1 ?: "穿山甲广告-原生-加载失败"))
                     }
 
                     override fun onNativeAdLoad(p0: MutableList<TTNativeAd>?) {
                         printAdInfo(adUnitBean)
-                        if (it.isActive) {
-                            if (p0.isNullOrEmpty().not()) {
-                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0?.get(0), msg = "穿山甲广告-原生-加载成功"))
-                            } else {
-                                it.resume(AdResult.Fail(adUnitBean, msg = "穿山甲广告原生-加载失败, SDK返回的广告实例为空"))
-                            }
+                        if (p0.isNullOrEmpty().not()) {
+                            it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = p0?.get(0), msg = "穿山甲广告-原生-加载成功"))
+                        } else {
+                            it.isActiveResult(AdResult.Fail(adUnitBean, msg = "穿山甲广告原生-加载失败, SDK返回的广告实例为空"))
                         }
                     }
                 })

+ 4 - 8
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJNativeTemplateRequestImpl.kt

@@ -6,10 +6,10 @@ import com.composition.android.ad.csj.impl.CSJNativeAdImageSize
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -40,20 +40,16 @@ class CSJNativeTemplateRequestImpl : IAdFormatRequest {
                 .loadNativeExpressAd(adSlot, object : TTAdNative.NativeExpressAdListener {
                     override fun onError(p0: Int, p1: String?) {
                         printAdFailInfo(p0, p1)
-                        if (it.isActive) {
-                            it.resume(AdResult.Fail(adUnitBean, msg = p1 ?: "穿山甲广告-原生模板-加载失败"))
-                        }
+                        it.isActiveResult(AdResult.Fail(adUnitBean, msg = p1 ?: "穿山甲广告-原生模板-加载失败"))
                     }
 
                     override fun onNativeExpressAdLoad(p0: MutableList<TTNativeExpressAd>?) {
                         printAdInfo(adUnitBean)
-                        if (it.isActive) {
                             if (p0.isNullOrEmpty().not()) {
-                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0?.get(0), msg = "穿山甲广告-原生模板-加载成功"))
+                                it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = p0?.get(0), msg = "穿山甲广告-原生模板-加载成功"))
                             } else {
-                                it.resume(AdResult.Fail(adUnitBean, msg = "穿山甲广告原生模板-加载失败, SDK返回的广告实例为空"))
+                                it.isActiveResult(AdResult.Fail(adUnitBean, msg = "穿山甲广告原生模板-加载失败, SDK返回的广告实例为空"))
                             }
-                        }
                     }
                 })
         }

+ 4 - 7
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/request/CSJRewardRequestImpl.kt

@@ -5,6 +5,7 @@ import com.bytedance.sdk.openadsdk.*
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
@@ -28,12 +29,10 @@ class CSJRewardRequestImpl : IAdFormatRequest {
                 .build()
 
             TTAdSdk.getAdManager().createAdNative(context)
-                .loadRewardVideoAd(adSlot, object : TTAdNative.RewardVideoAdListener{
+                .loadRewardVideoAd(adSlot, object : TTAdNative.RewardVideoAdListener {
                     override fun onError(code: Int, p1: String?) {
                         printAdFailInfo(code, p1)
-                        if (it.isActive) {
-                            it.resume(AdResult.Fail(adBean = adUnitBean, msg = p1?:"穿山甲广告-激励视频-加载失败"))
-                        }
+                        it.isActiveResult(AdResult.Fail(adBean = adUnitBean, msg = p1 ?: "穿山甲广告-激励视频-加载失败"))
                     }
 
                     override fun onRewardVideoAdLoad(p0: TTRewardVideoAd?) {
@@ -45,9 +44,7 @@ class CSJRewardRequestImpl : IAdFormatRequest {
 
                     override fun onRewardVideoCached(p0: TTRewardVideoAd?) {
                         printAdInfo(adUnitBean)
-                        if (it.isActive){
-                            it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲广告-激励视频-缓存加载成功"))
-                        }
+                        it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0, msg = "穿山甲广告-激励视频-缓存加载成功"))
                     }
                 })
         }

+ 2 - 4
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/view/CSJBannerView.kt

@@ -14,14 +14,12 @@ import com.composition.android.lib.ad.util.adLog
  * @classname:
  * @author: LiuXiaoLong
  * @date: 2022/9/13
- * description:
+ * description:穿山甲横幅广告View
  */
 class CSJBannerView(context: Context?,var viewHolder: BannerAdViewHolder) : BasicAdView<View>(context) {
 
-
-
     override fun adContentView(): View? {
-        var adObj = adResult?.adObject as TTNativeExpressAd
+        val adObj = adResult?.adObject as TTNativeExpressAd
         adObj.setExpressInteractionListener(object : TTNativeExpressAd.ExpressAdInteractionListener{
             override fun onAdClicked(p0: View?, p1: Int) {
                 viewHolder.adListener?.onAdClick()

+ 0 - 1
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/view/CSJNativeAdView.kt

@@ -53,7 +53,6 @@ class CSJNativeAdView(context: Context?) : BasicAdView<View>(context) {
         val ttNativeAd = adResult?.adObject as? TTNativeAd
         ttNativeAd?.destroy()
         adResult?.adObject = null
-
     }
 
     companion object {

+ 1 - 0
lib_ad_csj/src/main/java/com/composition/android/ad/csj/load/view/CSJNativeTemplateAdView.kt

@@ -43,6 +43,7 @@ class CSJNativeTemplateAdView(context: Context?) : BasicAdView<View>(context) {
     override fun onDestroy() {
         val ttNativeExpressAd = adResult?.adObject as? TTNativeExpressAd
         ttNativeExpressAd?.destroy()
+        adResult?.adObject = null
     }
 
     companion object {

+ 5 - 15
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMAppOpenRequestImpl.kt

@@ -12,7 +12,6 @@ import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
 import com.composition.android.lib.ad.util.*
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -37,33 +36,24 @@ class GMAppOpenRequestImpl : IAdFormatRequest {
                         object : GMSplashAdLoadCallback {
                             override fun onSplashAdLoadFail(p0: AdError) {
                                 printAdFailInfo(p0.code, p0.message)
-                                if (it.isActive) {
-                                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-开屏-加载失败"))
-                                }
+                                it.isActiveResult(AdResult.Fail(adUnitBean, msg = "GroMore广告-开屏-加载失败"))
                             }
 
                             override fun onSplashAdLoadSuccess() {
                                 printAdInfo(adUnitBean)
-                                if (it.isActive) {
-                                    it.resume(AdResult.Success(adBean = adUnitBean, adObject = mTTSplashAd, msg = "GroMore广告-开屏-加载成功"))
-                                }
+                                it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = mTTSplashAd, msg = "GroMore广告-开屏-加载成功"))
                             }
 
                             override fun onAdLoadTimeout() {
                                 printAdFailInfo(0, "GroMore广告-开屏-加载超时")
-                                if (it.isActive) {
-                                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-开屏-加载超时"))
-                                }
-
+                                it.isActiveResult(AdResult.Fail(adUnitBean, msg = "GroMore广告-开屏-加载超时"))
                             }
                         })
                 }
 
             } else {
-                if (it.isActive) {
-                    adLog(msg = "GroMore广告-开屏-加载失败:context需要为Activity")
-                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-开屏-加载失败:context需要为Activity"))
-                }
+                adLog(msg = "GroMore广告-开屏-加载失败:context需要为Activity")
+                it.isActiveResult(AdResult.Fail(adUnitBean, msg = "GroMore广告-开屏-加载失败:context需要为Activity"))
             }
         }
     }

+ 4 - 7
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMBannerRequestImpl.kt

@@ -14,6 +14,7 @@ import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
 import com.composition.android.lib.ad.util.adLogE
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
@@ -45,21 +46,17 @@ class GMBannerRequestImpl : IAdFormatRequest {
                     mTTBannerViewAd.loadAd(slotBanner, object : GMBannerAdLoadCallback {
                         override fun onAdFailedToLoad(p0: AdError) {
                             printAdFailInfo(p0.code, p0.message)
-                            if (it.isActive) {
-                                it.resume(AdResult.Fail(adUnitBean, msg = p0.message))
-                            }
+                            it.isActiveResult(AdResult.Fail(adUnitBean, msg = p0.message))
                         }
 
                         override fun onAdLoaded() {
                             printAdInfo(adUnitBean)
-                            if (it.isActive) {
-                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = mTTBannerViewAd, msg = "GroMore广告-横幅-加载成功"))
-                            }
+                            it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = mTTBannerViewAd, msg = "GroMore广告-横幅-加载成功"))
                         }
                     })
 
                 } else {
-                    if (it.isActive){
+                    if (it.isActive) {
                         adLogE(AdManager.TAG, "GroMore广告-横幅-加载失败:context需要为Activity")
                         it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-横幅-加载失败:context需要为Activity"))
                     }

+ 31 - 37
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMInterstitialRequestImpl.kt

@@ -13,10 +13,10 @@ import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
 import com.composition.android.lib.ad.util.adLog
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -28,46 +28,40 @@ class GMInterstitialRequestImpl : IAdFormatRequest {
     override suspend fun load(context: Context, adUnitBean: AdUnitBean): AdResult {
         return suspendCancellableCoroutine {
             GMSettingConfig.loadAdConfig {
-                    if (context is Activity){
-                        val mInterstitialFullAd = GMInterstitialFullAd(context, adUnitBean.adUnitId)
-                        val customData: MutableMap<String, String> = HashMap()
-                        customData[GMAdConstant.CUSTOM_DATA_KEY_GDT] = "gdt custom data"
-                        val adSlot = GMAdSlotInterstitialFull.Builder()
-                            .setCustomData(customData)
-                            .setGMAdSlotGDTOption(GMAdOptionUtil.getGMAdSlotGDTOption().build())
-                            .setGMAdSlotBaiduOption(GMAdOptionUtil.getGMAdSlotBaiduOption().build())
-                            .setOrientation(GMAdConstant.VERTICAL)
-                            .setUserID(adUnitBean.adUnitId)
-                            .setMuted(true)
-                            .build()
+                if (context is Activity) {
+                    val mInterstitialFullAd = GMInterstitialFullAd(context, adUnitBean.adUnitId)
+                    val customData: MutableMap<String, String> = HashMap()
+                    customData[GMAdConstant.CUSTOM_DATA_KEY_GDT] = "gdt custom data"
+                    val adSlot = GMAdSlotInterstitialFull.Builder()
+                        .setCustomData(customData)
+                        .setGMAdSlotGDTOption(GMAdOptionUtil.getGMAdSlotGDTOption().build())
+                        .setGMAdSlotBaiduOption(GMAdOptionUtil.getGMAdSlotBaiduOption().build())
+                        .setOrientation(GMAdConstant.VERTICAL)
+                        .setUserID(adUnitBean.adUnitId)
+                        .setMuted(true)
+                        .build()
 
-                        mInterstitialFullAd.loadAd(adSlot, object : GMInterstitialFullAdLoadCallback{
-                            override fun onInterstitialFullLoadFail(p0: AdError) {
-                                printAdFailInfo(p0.code, p0.message)
-                                if (it.isActive){
-                                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-插屏-加载失败"))
-                                }
-                            }
-
-                            override fun onInterstitialFullAdLoad() {
-                                //这里为广告加载成功,但还没缓存好
-                            }
+                    mInterstitialFullAd.loadAd(adSlot, object : GMInterstitialFullAdLoadCallback {
+                        override fun onInterstitialFullLoadFail(p0: AdError) {
+                            printAdFailInfo(p0.code, p0.message)
+                            it.isActiveResult(AdResult.Fail(adUnitBean, msg = "GroMore广告-插屏-加载失败"))
+                        }
 
-                            override fun onInterstitialFullCached() {
-                                printAdInfo(adUnitBean)
-                                //这里为广告已经缓存好了,保证流畅播放,再次返回成功
-                                if (it.isActive){
-                                    it.resume(AdResult.Success(adBean = adUnitBean, adObject = mInterstitialFullAd, msg = "GroMore广告-插屏-加载成功"))
-                                }
-                            }
-                        })
+                        override fun onInterstitialFullAdLoad() {
+                            //这里为广告加载成功,但还没缓存好
+                        }
 
-                    }else{
-                        if (it.isActive){
-                            adLog(msg = "GroMore广告-插屏-加载失败:context需要为activity")
-                            it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-插屏-加载失败:context需要为activity"))
+                        override fun onInterstitialFullCached() {
+                            printAdInfo(adUnitBean)
+                            //这里为广告已经缓存好了,保证流畅播放,再次返回成功
+                            it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = mInterstitialFullAd, msg = "GroMore广告-插屏-加载成功"))
                         }
-                    }
+                    })
+
+                } else {
+                    adLog(msg = "GroMore广告-插屏-加载失败:context需要为activity")
+                    it.isActiveResult(AdResult.Fail(adUnitBean, msg = "GroMore广告-插屏-加载失败:context需要为activity"))
+                }
             }
         }
     }

+ 10 - 18
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMNativeTemplateRequestImpl.kt

@@ -16,10 +16,10 @@ import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
 import com.composition.android.lib.ad.util.adLog
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -30,18 +30,16 @@ import kotlin.coroutines.resume
 class GMNativeTemplateRequestImpl : IAdFormatRequest {
 
 
-
-
     override suspend fun load(context: Context, adUnitBean: AdUnitBean): AdResult {
 
         return suspendCancellableCoroutine {
             if (context is Activity) {
                 GMSettingConfig.loadAdConfig {
 
-                    val adImageSize = if (adUnitBean.adSize!= null && adUnitBean.adSize is GMAdImageSize){
+                    val adImageSize = if (adUnitBean.adSize != null && adUnitBean.adSize is GMAdImageSize) {
                         val size = adUnitBean.adSize as GMAdImageSize
                         size.gmAdSize
-                    }else{
+                    } else {
                         getScreenWidthDp(context).toInt() to 340
                     }
                     val gmNativeAd = GMUnifiedNativeAd(context, adUnitBean.adUnitId)
@@ -56,29 +54,23 @@ class GMNativeTemplateRequestImpl : IAdFormatRequest {
                         object : GMNativeAdLoadCallback {
                             override fun onAdLoaded(p0: MutableList<GMNativeAd>) {
                                 printAdInfo(adUnitBean)
-                                if (it.isActive) {
-                                    if (p0.isNullOrEmpty().not()) {
-                                        it.resume(AdResult.Success(adBean = adUnitBean, adObject = p0.get(0), msg = "GroMore广告-原生模板-加载成功"))
-                                    } else {
-                                        it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-原生模板-加载失败"))
-                                    }
+                                if (p0.isNullOrEmpty().not()) {
+                                    it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = p0.get(0), msg = "GroMore广告-原生模板-加载成功"))
+                                } else {
+                                    it.isActiveResult(AdResult.Fail(adUnitBean, msg = "GroMore广告-原生模板-加载失败"))
                                 }
                             }
 
                             override fun onAdLoadedFail(p0: AdError) {
                                 printAdFailInfo(p0.code, p0.message)
-                                if (it.isActive) {
-                                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-原生模板-加载失败"))
-                                }
+                                it.isActiveResult(AdResult.Fail(adUnitBean, msg = "GroMore广告-原生模板-加载失败"))
                             }
                         }
                     )
                 }
             } else {
-                if (it.isActive) {
-                    adLog(msg = "GroMore广告-原生模板-context需要为Activity类型")
-                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-原生模板-context需要为Activity类型"))
-                }
+                adLog(msg = "GroMore广告-原生模板-context需要为Activity类型")
+                it.isActiveResult(AdResult.Fail(adUnitBean, msg = "GroMore广告-原生模板-context需要为Activity类型"))
             }
         }
     }

+ 8 - 14
lib_ad_gromore/src/main/java/com/composition/android/ad/gromore/load/request/GMRewardRequestImpl.kt

@@ -11,10 +11,10 @@ import com.composition.android.ad.gromore.util.GMSettingConfig
 import com.composition.android.lib.ad.basic.AdResult
 import com.composition.android.lib.ad.bean.AdUnitBean
 import com.composition.android.lib.ad.interfaces.IAdFormatRequest
+import com.composition.android.lib.ad.util.isActiveResult
 import com.composition.android.lib.ad.util.printAdFailInfo
 import com.composition.android.lib.ad.util.printAdInfo
 import kotlinx.coroutines.suspendCancellableCoroutine
-import kotlin.coroutines.resume
 
 /**
  * @classname:
@@ -26,19 +26,17 @@ class GMRewardRequestImpl : IAdFormatRequest {
     override suspend fun load(context: Context, adUnitBean: AdUnitBean): AdResult {
 
         return suspendCancellableCoroutine {
-            if (context is Activity){
+            if (context is Activity) {
                 GMSettingConfig.loadAdConfig {
                     val gmRewardAd = GMRewardAd(context, adUnitBean.adUnitId)
                     gmRewardAd.loadAd(GMAdSlotRewardVideo.Builder()
                         .setRewardAmount(1)
                         .setMuted(true)
                         .setOrientation(GMAdConstant.VERTICAL)
-                        .build(), object : GMRewardedAdLoadCallback{
+                        .build(), object : GMRewardedAdLoadCallback {
                         override fun onRewardVideoLoadFail(p0: AdError) {
-                           printAdFailInfo(p0.code, p0.message)
-                            if (it.isActive){
-                                it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-激励视频-加载失败"))
-                            }
+                            printAdFailInfo(p0.code, p0.message)
+                            it.isActiveResult(AdResult.Fail(adUnitBean, msg = "GroMore广告-激励视频-加载失败"))
                         }
 
                         override fun onRewardVideoAdLoad() {
@@ -46,17 +44,13 @@ class GMRewardRequestImpl : IAdFormatRequest {
 
                         override fun onRewardVideoCached() {
                             printAdInfo(adUnitBean)
-                            if (it.isActive){
-                                it.resume(AdResult.Success(adBean = adUnitBean, adObject = gmRewardAd, msg = "GroMore广告-激励视频-加载成功"))
-                            }
+                            it.isActiveResult(AdResult.Success(adBean = adUnitBean, adObject = gmRewardAd, msg = "GroMore广告-激励视频-加载成功"))
                         }
                     })
                 }
-            }else{
+            } else {
                 printAdFailInfo(0, "GroMore广告-激励视频-加载异常:context需要为Activity类型")
-                if (it.isActive){
-                    it.resume(AdResult.Fail(adUnitBean, msg = "GroMore广告-激励视频-加载异常:context需要为Activity类型"))
-                }
+                it.isActiveResult(AdResult.Fail(adUnitBean, msg = "GroMore广告-激励视频-加载异常:context需要为Activity类型"))
             }
         }
     }

+ 2 - 4
lib_material_design_tokens/src/androidTest/java/com/convenient/android/material/design/tokens/ExampleInstrumentedTest.kt

@@ -1,13 +1,11 @@
 package com.convenient.android.material.design.tokens
 
-import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.ext.junit.runners.AndroidJUnit4
-
+import androidx.test.platform.app.InstrumentationRegistry
+import org.junit.Assert.*
 import org.junit.Test
 import org.junit.runner.RunWith
 
-import org.junit.Assert.*
-
 /**
  * Instrumented test, which will execute on an Android device.
  *

+ 1 - 1
lib_material_design_tokens/src/main/res/values-night/themes.xml

@@ -1,4 +1,4 @@
-<resources xmlns:tools="http://schemas.android.com/tools">
+<resources>
     <!-- Base application theme. -->
     <style name="Theme.Lib" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
         <!-- Primary brand color. -->

+ 1 - 1
lib_material_design_tokens/src/main/res/values/themes.xml

@@ -1,4 +1,4 @@
-<resources xmlns:tools="http://schemas.android.com/tools">
+<resources>
     <!-- Base application theme. -->
     <style name="Theme.Lib" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
         <!-- Primary brand color. -->

+ 1 - 2
lib_material_design_tokens/src/test/java/com/convenient/android/material/design/tokens/ExampleUnitTest.kt

@@ -1,9 +1,8 @@
 package com.convenient.android.material.design.tokens
 
+import org.junit.Assert.assertEquals
 import org.junit.Test
 
-import org.junit.Assert.*
-
 /**
  * Example local unit test, which will execute on the development machine (host).
  *

+ 60 - 76
lib_pdf_base/src/main/java/com/pdf/base/function/LogicFunction.kt

@@ -5,9 +5,13 @@ import android.net.Uri
 import android.util.Log
 import androidx.lifecycle.LifecycleCoroutineScope
 import com.compdfkit.core.document.CPDFDocument
-import kotlinx.coroutines.Dispatchers
+import com.compdfkit.core.document.CPDFDocument.PDFDocumentError
+import com.pdf.base.impl.NormalOpenDocumentCallback
+import com.pdf.base.interfaces.OpenDocumentCallback
+import kotlinx.coroutines.*
+import kotlinx.coroutines.flow.*
 import kotlinx.coroutines.launch
-import kotlinx.coroutines.withContext
+import kotlin.coroutines.suspendCoroutine
 
 /**
  * @author: hubowen
@@ -20,95 +24,75 @@ import kotlinx.coroutines.withContext
  * onSuccess 返回一个正常的Document
  * onError 错误返回
  */
-fun LifecycleCoroutineScope.onVerifyDocument(context: Context, uri: Uri?, absolutePath: String?, password: String? = "", onSuccess: ((CPDFDocument) -> Unit)?, onError: (() -> Unit)? = null) {
-    launch(Dispatchers.IO) {
-        context.toCPDFDocument(uri, absolutePath, password, {
-            onSuccess?.invoke(it)
-        }, {
-            onError?.invoke()
-        })
-    }
+
+private suspend fun CPDFDocument.openDocument(uri: Uri?, absolutePath: String?, password: String? = ""): Flow<Pair<PDFDocumentError, CPDFDocument?>> {
+    return flow {
+        val result = try {
+            val error =
+                when {
+                    uri != null -> if (password.isNullOrEmpty()) open(uri) else open(uri, password)
+                    absolutePath.isNullOrEmpty().not() -> if (password.isNullOrEmpty()) open(absolutePath) else open(absolutePath, password)
+                    else -> {
+                        PDFDocumentError.PDFDocumentErrorUnknown
+                    }
+                }
+            error to this@openDocument
+        } catch (e: Exception) {
+            e.printStackTrace()
+            PDFDocumentError.PDFDocumentErrorUnknown to null
+        }
+        emit(result)
+    }.flowOn(Dispatchers.IO)
 }
 
+
 /**
  * 转换至 Document对象,这里单独写出来,提供单独的document,用来做功能
  * onSuccess 返回一个正常的Document
  * NeedExit 错误返回
  */
-suspend fun Context.toCPDFDocument(uri: Uri?, absolutePath: String?, password: String? = "", onSuccess: ((CPDFDocument) -> Unit)?, onError: (() -> Unit)? = null) {
-    var document: CPDFDocument? = null
-
-    fun getCPDFDocument(password: String? = null): CPDFDocument.PDFDocumentError? {
-        return try {
-            when (absolutePath.isNullOrEmpty()) {
-                true -> {
-                    uri?.let { uri_ ->
-                        CPDFDocument(this).let {
-                            document = it
-                            when {
-                                password.isNullOrEmpty() -> it.open(uri_)
-                                else -> it.open(uri_, password)
-                            }
-                        }
-                    }
-                }
-                else -> {
-                    CPDFDocument(this).let {
-                        document = it
-                        when {
-                            password.isNullOrEmpty() -> it.open(absolutePath)
-                            else -> it.open(absolutePath, password)
-                        }
-                    }
-                }
+suspend fun Context.openDocument(uri: Uri?, absolutePath: String?, password: String? = "", callback: NormalOpenDocumentCallback.() -> Unit) {
+    val listener = NormalOpenDocumentCallback().also(callback)
+    val document = CPDFDocument(this)
+    document.openDocument(uri, absolutePath, password).collect {
+        when (it.first) {
+            PDFDocumentError.PDFDocumentErrorSuccess -> listener.success(cPdfDocument = it.second!!)
+            PDFDocumentError.PDFDocumentErrorPassword -> {
+                listener.isEncrypt(it.second!!)
             }
-        } catch (e: Exception) {
-            e.printStackTrace()
-            onError?.invoke()
-            null
+            else -> listener.fail(error = it.first)
         }
     }
+}
 
-    runCatching {
-        getCPDFDocument(password)?.apply {
-            withContext(Dispatchers.Main) {
-                when (this@apply) {
-                    CPDFDocument.PDFDocumentError.PDFDocumentErrorSuccess -> {
-                        document?.run { onSuccess?.invoke(this) }
-                    }
-                    CPDFDocument.PDFDocumentError.PDFDocumentErrorPassword -> {
-                        Log.e("AAAA", "PDFDocumentErrorPassword")
-//                        (ActivitysUtils.current() as AppCompatActivity?)?.apply {
-//                            PdfPasswordEnterDialog(tPdfDocument, uri, absolutePath).onShow(supportFragmentManager) {
-//                                when {
-//                                    it -> onFinish?.invoke(tPdfDocument)
-//                                    else -> needExit?.invoke()
-//                                }
-//                            }
-//                        }
-                    }
-                    else -> {
-                        Log.e("AAAA", this@apply.toString())
-//                        (ActivitysUtils.current() as AppCompatActivity?)?.let {
-//                            BaseDialogFragmentHelper.showConfirmTips(
-//                                it.supportFragmentManager,
-//                                title = getString(R.string.pdf_damaged_title),
-//                                message = getString(R.string.pdf_damaged_content),
-//                                isCancelable = false,
-//                                isCanceledOnTouchOutside = false
-//                            ) {
-//                                needExit?.invoke()
-//                            }
-//                        }
-                    }
-                }
-            }
+
+/**
+ * 重试打开文档,不会再调用回调中的isEncrypt()
+ */
+suspend fun CPDFDocument.retryOpenDocument(uri: Uri?, absolutePath: String?, password: String? = "", normalOpenDocumentCallback: NormalOpenDocumentCallback) {
+    openDocument(uri, absolutePath, password).collect{ pair->
+        when (pair.first) {
+            PDFDocumentError.PDFDocumentErrorSuccess -> normalOpenDocumentCallback.success(cPdfDocument = pair.second!!)
+            else -> normalOpenDocumentCallback.fail(error = pair.first)
         }
-    }.onFailure {
-        onError?.invoke()
     }
 }
 
+/**
+ * 文档是否已加密
+ * @param uri 要检查的Uri文件
+ * @param absolutePath 要检查的file 路径文件
+ */
+suspend fun Context.documentIsEncrypt(uri: Uri? = null, absolutePath: String? = ""): Boolean {
+    val document = CPDFDocument(this)
+    val result = document.openDocument(uri = uri, absolutePath = absolutePath, password = "")
+        .firstOrNull()
+    return result != null && result.first == PDFDocumentError.PDFDocumentErrorPassword
+}
+
+
+
+
 /**
  * 保存Document 这里有一个逻辑,先增量保存如果失败则进行全量保存。
  */

+ 47 - 0
lib_pdf_base/src/main/java/com/pdf/base/impl/NormalOpenDocumentCallback.kt

@@ -0,0 +1,47 @@
+package com.pdf.base.impl
+
+import com.compdfkit.core.document.CPDFDocument
+import com.pdf.base.interfaces.OpenDocumentCallback
+
+
+typealias OpenDocumentSuccess = (CPDFDocument) -> Unit
+typealias OpenDocumentFail = (CPDFDocument.PDFDocumentError) -> Unit
+typealias DocumentIsEncrypt = (CPDFDocument) -> Unit
+
+/**
+ * @classname:
+ * @author: LiuXiaoLong
+ * @date: 2022/11/18
+ * description: 打开文档监听默认实现
+ */
+class NormalOpenDocumentCallback : OpenDocumentCallback {
+
+    private var success : OpenDocumentSuccess? = null
+    private var fail : OpenDocumentFail? = null
+    private var isEncrypt : DocumentIsEncrypt? = null
+
+    override fun success(cPdfDocument: CPDFDocument) {
+        success?.invoke(cPdfDocument)
+    }
+
+    override fun fail(error: CPDFDocument.PDFDocumentError) {
+        fail?.invoke(error)
+    }
+
+    override fun isEncrypt(cPdfDocument: CPDFDocument) {
+        isEncrypt?.invoke(cPdfDocument)
+    }
+
+    fun success(success: OpenDocumentSuccess){
+        this.success = success
+    }
+
+    fun fail(fail : OpenDocumentFail){
+        this.fail = fail
+    }
+
+    fun isEncrypt(isEncrypt: DocumentIsEncrypt){
+        this.isEncrypt = isEncrypt
+    }
+
+}

+ 28 - 0
lib_pdf_base/src/main/java/com/pdf/base/interfaces/OpenDocumentCallback.kt

@@ -0,0 +1,28 @@
+package com.pdf.base.interfaces
+
+import com.compdfkit.core.document.CPDFDocument
+
+/**
+ * @classname:
+ * @author: LiuXiaoLong
+ * @date: 2022/11/18
+ * description:
+ */
+interface OpenDocumentCallback {
+
+    /**
+     * 打开成功
+     */
+    fun success(cPdfDocument: CPDFDocument)
+
+    /**
+     * 打开失败
+     */
+    fun fail(error : CPDFDocument.PDFDocumentError)
+
+    /**
+     * 文档已加密
+     */
+    fun isEncrypt(cPdfDocument: CPDFDocument)
+
+}