Commit b9c9216b authored by wanglei's avatar wanglei

...

parent 52f34b1f
......@@ -21,7 +21,12 @@ object AdmobBannerUtils {
private var adView: AdView? = null
private var listener: ViewTreeObserver.OnGlobalLayoutListener? = null
fun showCollapsibleBannerAd(context: Context, parent: ViewGroup, adClose: (() -> Unit)? = null) {
fun showCollapsibleBannerAd(
context: Context,
collapsible: Boolean = true,
parent: ViewGroup,
adClose: (() -> Unit)? = null
) {
val isShowBanner = AppPreferences.getInstance().getString("isShowBanner", "0").toInt()
if (isShowBanner == 0) {
return
......@@ -45,17 +50,20 @@ object AdmobBannerUtils {
val adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(context, adWidth)
adView?.adUnitId = if (BuildConfig.DEBUG) ConfigHelper.bannerAdmobIdTest else ConfigHelper.bannerAdmobId
adView?.setAdSize(adSize)
loadCollapsibleBanner(adClose)
loadCollapsibleBanner(collapsible, adClose)
parent.viewTreeObserver.removeOnGlobalLayoutListener(listener)
}
parent.viewTreeObserver.addOnGlobalLayoutListener(listener)
}
private fun loadCollapsibleBanner(adClose: (() -> Unit)?) {
private fun loadCollapsibleBanner(collapsible: Boolean, adClose: (() -> Unit)?) {
val extras = Bundle()
extras.putString("collapsible", "bottom")
extras.putString("collapsible_request_id", UUID.randomUUID().toString())
if (collapsible) {
extras.putString("collapsible", "bottom")
extras.putString("collapsible_request_id", UUID.randomUUID().toString())
}
val adRequest =
AdRequest.Builder().addNetworkExtrasBundle(AdMobAdapter::class.java, extras).build()
adView?.adListener =
......
......@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.app.Activity
import android.content.Context
import android.view.View
import android.view.View.OnClickListener
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.pdfviewerscannerwhite.R
......@@ -15,8 +16,13 @@ import com.base.pdfviewerscannerwhite.bean.DocumentBean.Companion.TYPE_PPT
import com.base.pdfviewerscannerwhite.bean.DocumentBean.Companion.TYPE_WORD
import com.base.pdfviewerscannerwhite.databinding.ItemAdBinding
import com.base.pdfviewerscannerwhite.databinding.ItemDocumentBinding
import com.base.pdfviewerscannerwhite.ui.view.guideview.GuideBuilder
import com.base.pdfviewerscannerwhite.ui.view.guideview.LottieComponent
import com.base.pdfviewerscannerwhite.utils.AppPreferences
import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatSize
import com.base.pdfviewerscannerwhite.utils.KotlinExt.toFormatTime
import com.base.pdfviewerscannerwhite.utils.LogEx
import com.base.pdfviewerscannerwhite.utils.PermissionUtils.checkStorePermission
import com.base.pdfviewerscannerwhite.utils.XmlEx.inflate
import com.chad.library.adapter4.BaseQuickAdapter
import java.io.File
......@@ -73,6 +79,10 @@ class DocumentAdapter(val activity: Activity) : BaseQuickAdapter<DocumentBean, D
binding.root.setOnClickListener {
itemClick?.invoke(item)
}
if (item.path.contains("DEMO.pdf")) {
guideDemo(holder.itemView, item)
}
}
1 -> {//合并选择
......@@ -154,4 +164,51 @@ class DocumentAdapter(val activity: Activity) : BaseQuickAdapter<DocumentBean, D
DocumentViewHolder(R.layout.item_ad.inflate(parent))
}
}
/**
* 引导
*/
private fun guideDemo(view: View, item: DocumentBean) {
LogEx.logDebug(TAG, "guideDemo")
val isGuideDemo = AppPreferences.getInstance().getBoolean("isGuideDemo", false)
if (!isGuideDemo && activity.checkStorePermission()) {
view.post {
val builder = GuideBuilder()
builder.setTargetView(view)
.setAlpha(150)
.setHighTargetCorner(20)
.setHighTargetPadding(10)
.setOverlayTarget(false)
.setOutsideTouchable(false)
.setAutoDismiss(true)
builder.setOnVisibilityChangedListener(object : GuideBuilder.OnVisibilityChangedListener {
override fun onShown() {
AppPreferences.getInstance().put("isGuideDemo", true)
}
override fun onDismiss() {
itemClick?.invoke(item)
}
})
val component = LottieComponent()
builder.addComponent(component)
val guide = builder.createGuide()
guide.setShouldCheckLocInWindow(false)
guide.show(activity)
component.click = OnClickListener {
// guide.dismiss()
// itemClick?.invoke(item)
}
}
}
}
}
\ No newline at end of file
......@@ -28,6 +28,7 @@ import com.base.pdfviewerscannerwhite.databinding.FragmentDocumentBinding
import com.base.pdfviewerscannerwhite.helper.BaseFragment
import com.base.pdfviewerscannerwhite.ui.main.MainActivity.Companion.jumpDocument
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showSortDialog
import com.base.pdfviewerscannerwhite.utils.AppPreferences
import com.base.pdfviewerscannerwhite.utils.KeyBoardUtils.hideKeyboard
import com.base.pdfviewerscannerwhite.utils.KeyBoardUtils.showKeyBoard
import com.base.pdfviewerscannerwhite.utils.LogEx
......@@ -66,7 +67,6 @@ class DocumentFragment(
private lateinit var pageAdapter: FragmentStateAdapter
@SuppressLint("SetTextI18n")
override fun setView() {
when (dataType) {
......@@ -116,7 +116,6 @@ class DocumentFragment(
searchAdapter.itemClick = {
requireActivity().jumpDocument(it)
}
}
@SuppressLint("ServiceCast")
......@@ -285,7 +284,6 @@ class DocumentFragment(
currentPage.changItemSelect(select)
}
@SuppressLint("SetTextI18n")
fun changeSearchUI(show: Boolean) {
if (show) {
......@@ -332,7 +330,6 @@ class DocumentFragment(
}
private fun searchDocument() {
if (binding.editSearch.text.isNotEmpty()) {
val search = binding.editSearch.text.toString()
......
package com.base.pdfviewerscannerwhite.ui.main
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import android.view.View
import androidx.core.view.isVisible
......@@ -87,6 +88,8 @@ class DocumentPageFragment() : BaseFragment<FragmentDocumentPageBinding>(), Docu
}
var isEmpty: Boolean = false
fun refreshData(showEmpty: Boolean = true) = lifecycleScope.launch(Dispatchers.IO) {
isEmpty = false
......
......@@ -50,6 +50,8 @@ import com.base.pdfviewerscannerwhite.ui.view.DialogView.showNotificationDialog
import com.base.pdfviewerscannerwhite.ui.view.DialogView.showStoragePermission
import com.base.pdfviewerscannerwhite.ui.view.PdfDialog.showPdfPwdDialog
import com.base.pdfviewerscannerwhite.ui.view.RateDialog.showRateDialog
import com.base.pdfviewerscannerwhite.ui.view.guideview.GuideBuilder
import com.base.pdfviewerscannerwhite.ui.view.guideview.LottieComponent
import com.base.pdfviewerscannerwhite.ui.weather.WeatherInterface
import com.base.pdfviewerscannerwhite.utils.AppPreferences
import com.base.pdfviewerscannerwhite.utils.BarUtils
......@@ -172,10 +174,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
}
private fun closeScanGuide() {
binding.flScanGuide.visibility = View.GONE
dialogRequestStep()
}
override fun handleActivityGmsScanResult(imageUri: Uri?, pdfUri: Uri?) {
// LogEx.logDebug(TAG, "imageUri=$imageUri")
......@@ -191,16 +189,14 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
},
dismissAction = {
avoidScanThenDialog = false
dialogRequestStep()
})
} else {
avoidScanThenDialog = false
dialogRequestStep()
}
}
var isPause = false
private var isPause = false
override fun onPause() {
super.onPause()
isPause = true
......@@ -235,58 +231,82 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
mainPresenter.initAllDocumentData()
//scan guide
if (mainStartTimes == 1) {
binding.flScanGuide.visibility = View.VISIBLE
return
}
showMainBanner()
//避免scan回调的任意弹窗
if (!avoidScanThenDialog) {
dialogRequestStep()
}
//权限
val permissionGrand = checkStorePermission()
val canShowRateN = AppPreferences.getInstance().getString("canShowRateN", "4").toInt()
if (isPause && mainStartTimes >= canShowRateN) {
showRateDialog()
if (permissionGrand) {
showPermissionThenGuide()
} else {
showPermissionDialog()
}
}
//弹窗请求顺序
private fun dialogRequestStep() {
LogEx.logDebug(TAG, "dialogRequestStep 1")
if (!checkStorePermission()) {
LogEx.logDebug(TAG, "dialogRequestStep 2")
showPermissionDialog()
} else {
if (!bannerShowed) {
LogEx.logDebug(TAG, "dialogRequestStep 3")
showMainBanner()
return
/**
*权限过后的弹窗顺序
*/
@SuppressLint("NotifyDataSetChanged")
private fun showPermissionThenGuide() {
//demo guide
val isGuideDemo = AppPreferences.getInstance().getBoolean("isGuideDemo", false)
//scan guide
val isGuideScan = AppPreferences.getInstance().getBoolean("isGuideScan", false)
if (isGuideDemo) {
if (!isGuideScan) {
showGuideScan()
} else {
if (!avoidScanThenDialog) {
val canShowRateN = AppPreferences.getInstance().getString("canShowRateN", "4").toInt()
if (isPause && mainStartTimes >= canShowRateN) {
showRateDialog()
}
}
}
//通知弹窗
// if (!todayShowNotificationDialog && !checkNotificationPermission()) {
// todayShowNotificationDialog = true
// showNotificationDialog(launcher)
// } else {
// if (!ConstObject.setDefault) {
// showDefaultBottomDialog()
// } else {
// showRateDialog()
// }
// }
}
}
private fun showGuideScan() {
binding.root.post {
val builder = GuideBuilder()
builder.setTargetView(binding.ivScan)
.setAlpha(150)
.setHighTargetCorner(20)
.setHighTargetPadding(10)
.setOverlayTarget(false)
.setOutsideTouchable(false)
.setAutoDismiss(true)
builder.setOnVisibilityChangedListener(object : GuideBuilder.OnVisibilityChangedListener {
override fun onShown() {
AppPreferences.getInstance().put("isGuideScan", true)
}
override fun onDismiss() {
useGmsScanFunction()
}
})
val component = LottieComponent()
builder.addComponent(component)
val guide = builder.createGuide()
guide.setShouldCheckLocInWindow(false)
guide.show(this)
}
}
private var permissionDialog: Dialog? = null
private fun showPermissionDialog() {
if (permissionDialog == null) {
permissionDialog = showStoragePermission(launcher,
noLauncherAction = {
showMainBanner()
showPermissionThenGuide()
},
dismissAction = {
permissionDialog = null
})
}
}
......@@ -294,18 +314,15 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
private fun showMainBanner() {
if (!bannerShowed) {
bannerShowed = true
AdmobBannerUtils.showCollapsibleBannerAd(this, binding.flBanner) {
//通知弹窗
// if (!todayShowNotificationDialog && !checkNotificationPermission()) {
// todayShowNotificationDialog = true
// showNotificationDialog(launcher)
// } else {
// if (!ConstObject.setDefault) {
// showDefaultBottomDialog()
// } else {
// showRateDialog()
// }
// }
val isGuideDemo = AppPreferences.getInstance().getBoolean("isGuideDemo", false)
val isGuideScan = AppPreferences.getInstance().getBoolean("isGuideScan", false)
val flag = checkStorePermission()
//权限 引导都完了 弹折叠
AdmobBannerUtils.showCollapsibleBannerAd(
this,
isGuideScan && flag,
binding.flBanner
) {
}
}
}
......@@ -438,9 +455,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
binding.ivScan.setOnClickListener {
useGmsScanFunction()
}
binding.flScanGuide.setOnClickListener {
closeScanGuide()
}
binding.tvTryScan.setOnClickListener {
useGmsScanFunction()
}
......@@ -452,7 +466,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
fun useGmsScanFunction() {
avoidScanThenDialog = true
binding.flScanGuide.visibility = View.GONE
mainPresenter.starAdGmsScan(this)
}
......@@ -464,7 +477,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
if (items.isNotEmpty()) {
shareMutDocuments(documentPageFragment.type, items.map { it.uri } as ArrayList<Uri>)
}
}
}
......@@ -473,7 +485,6 @@ class MainActivity : BaseActivity<ActivityMainBinding>(), MainView {
binding.llRecent.isSelected = selectView == binding.llRecent
binding.llBookmark.isSelected = selectView == binding.llBookmark
binding.llTool.isSelected = selectView == binding.llTool
}
fun changeSelectUI(show: Boolean) {
......
......@@ -12,11 +12,14 @@ import com.base.pdfviewerscannerwhite.R;
*/
public class LottieComponent implements Component {
public View.OnClickListener click;
@Override
public View getView(LayoutInflater inflater) {
LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.layout_lottie_guide, null);
// ll.setOnClickListener(view -> Toast.makeText(view.getContext(), "引导层被点击了", Toast.LENGTH_SHORT).show());
ll.setOnClickListener(click);
return ll;
}
......@@ -37,6 +40,6 @@ public class LottieComponent implements Component {
@Override
public int getYOffset() {
return -150;
return -100;
}
}
......@@ -279,8 +279,8 @@
</LinearLayout>
<!-- android:id="@+id/fl_scan_guide"-->
<FrameLayout
android:id="@+id/fl_scan_guide"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment