Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
P
PDF Viewer Scanner White ago
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
kuxulei
PDF Viewer Scanner White ago
Commits
b9c9216b
Commit
b9c9216b
authored
Jan 25, 2025
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
52f34b1f
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
152 additions
and
73 deletions
+152
-73
AdmobBannerColla.kt
.../base/pdfviewerscannerwhite/ads/admob/AdmobBannerColla.kt
+13
-5
DocumentAdapter.kt
...com/base/pdfviewerscannerwhite/ui/main/DocumentAdapter.kt
+57
-0
DocumentFragment.kt
...om/base/pdfviewerscannerwhite/ui/main/DocumentFragment.kt
+1
-4
DocumentPageFragment.kt
...ase/pdfviewerscannerwhite/ui/main/DocumentPageFragment.kt
+3
-0
MainActivity.kt
...va/com/base/pdfviewerscannerwhite/ui/main/MainActivity.kt
+72
-61
LottieComponent.java
...viewerscannerwhite/ui/view/guideview/LottieComponent.java
+5
-2
activity_main.xml
app/src/main/res/layout/activity_main.xml
+1
-1
No files found.
app/src/main/java/com/base/pdfviewerscannerwhite/ads/admob/AdmobBannerColla.kt
View file @
b9c9216b
...
...
@@ -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
=
...
...
app/src/main/java/com/base/pdfviewerscannerwhite/ui/main/DocumentAdapter.kt
View file @
b9c9216b
...
...
@@ -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
app/src/main/java/com/base/pdfviewerscannerwhite/ui/main/DocumentFragment.kt
View file @
b9c9216b
...
...
@@ -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
()
...
...
app/src/main/java/com/base/pdfviewerscannerwhite/ui/main/DocumentPageFragment.kt
View file @
b9c9216b
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
...
...
app/src/main/java/com/base/pdfviewerscannerwhite/ui/main/MainActivity.kt
View file @
b9c9216b
...
...
@@ -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
=
{
show
MainBanner
()
show
PermissionThenGuide
()
},
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
)
{
...
...
app/src/main/java/com/base/pdfviewerscannerwhite/ui/view/guideview/LottieComponent.java
View file @
b9c9216b
...
...
@@ -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
-
1
5
0
;
return
-
1
0
0
;
}
}
app/src/main/res/layout/activity_main.xml
View file @
b9c9216b
...
...
@@ -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"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment