Commit b9c9216b authored by wanglei's avatar wanglei

...

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