Commit 8214428f authored by wanglei's avatar wanglei

...master需同步到功能...

parent eb1214ae
...@@ -8,6 +8,7 @@ android { ...@@ -8,6 +8,7 @@ android {
compileSdk 34 compileSdk 34
defaultConfig { defaultConfig {
//com.pdfninja.pdfreaderandimagetopdf.bmw
applicationId "com.base.superpdfreader" applicationId "com.base.superpdfreader"
minSdk 26 minSdk 26
targetSdk 34 targetSdk 34
......
package com.base.superpdfreader
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.Assert.*
/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.base.superpdfreader", appContext.packageName)
}
}
\ No newline at end of file
...@@ -19,6 +19,27 @@ ...@@ -19,6 +19,27 @@
android:theme="@style/Theme.SuperPDFReader" android:theme="@style/Theme.SuperPDFReader"
tools:targetApi="33"> tools:targetApi="33">
<activity
android:name=".activity.SplashActivity"
android:exported="true"
android:launchMode="singleTask"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity">
</activity>
<activity <activity
android:name=".activity.PdfConvertedActivity" android:name=".activity.PdfConvertedActivity"
android:exported="false" android:exported="false"
...@@ -55,19 +76,6 @@ ...@@ -55,19 +76,6 @@
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="portrait" android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" /> tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileProvider" android:authorities="${applicationId}.fileProvider"
...@@ -81,8 +89,6 @@ ...@@ -81,8 +89,6 @@
<meta-data <meta-data
android:name="com.facebook.sdk.ApplicationId" android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" /> android:value="@string/facebook_app_id" />
</application> </application>
</manifest> </manifest>
\ No newline at end of file
package com.base.superpdfreader.activity
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.net.Uri
import android.text.SpannableString
import android.text.Spanned
import android.text.style.UnderlineSpan
import android.view.View
import androidx.lifecycle.lifecycleScope
import com.base.superpdfreader.MainActivity
import com.base.superpdfreader.bean.ConstObject.PrivacyPolicy
import com.base.superpdfreader.databinding.ActivitySplashBinding
import com.base.superpdfreader.helps.BaseActivity
import com.base.superpdfreader.utils.BarUtils
import com.base.superpdfreader.utils.SPUtils
import kotlinx.coroutines.Job
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import kotlin.random.Random
@SuppressLint("CustomSplashScreen")
class SplashActivity : BaseActivity<ActivitySplashBinding>() {
private var job: Job? = null
private val progress = MutableSharedFlow<Int>()
private val progressFlow: SharedFlow<Int> = progress
private var oneClickStart: Boolean = false
var ifAgreePrivacy = false
get() {
return SPUtils.getInstance().getBoolean("ifAgreePrivacy", field)
}
set(value) {
field = value
SPUtils.getInstance().put("ifAgreePrivacy", value, true)
}
override val binding: ActivitySplashBinding by lazy {
ActivitySplashBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
jumpNext()
if (ifAgreePrivacy) {
startProgress()
binding.llStart.visibility = View.GONE
binding.llProgress.visibility = View.VISIBLE
} else {
binding.llStart.visibility = View.VISIBLE
binding.llProgress.visibility = View.GONE
}
val spannableString = SpannableString("Privacy Policy")
spannableString.setSpan(
UnderlineSpan(),
0,
spannableString.length,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.idTvPrivacyPolicy.text = spannableString
binding.idTvPrivacyPolicy.setOnClickListener {
val intent = Intent(
Intent.ACTION_VIEW,
Uri.parse(PrivacyPolicy)
)
startActivity(intent)
}
}
private fun jumpNext() {
lifecycleScope.launch {
progressFlow.collectLatest {
if (it >= 100) {
startActivity(Intent(this@SplashActivity, MainActivity::class.java))
finish()
}
}
}
}
override fun initListener() {
binding.idTvStart.setOnClickListener {
if (oneClickStart) {
return@setOnClickListener
}
oneClickStart = true
ifAgreePrivacy = true
binding.llStart.visibility = View.GONE
binding.llProgress.visibility = View.VISIBLE
startProgress()
}
}
fun startProgress() = lifecycleScope.launch {
while (isActive) {
delay(Random.nextLong(50, 150))
val value = binding.pb.progress + Random.nextInt(3, 5)
binding.pb.setProgress(value, true)
progress.emit(value)
}
}
override fun onResume() {
super.onResume()
if (ifAgreePrivacy) {
job = startProgress()
}
}
override fun onPause() {
super.onPause()
job?.cancel()
}
}
\ No newline at end of file
package com.base.superpdfreader.bean
object ConstObject {
const val PrivacyPolicy = "https://sites.google.com/view/pdfreaderimagetopdf/pdf-reader-image-to-pdf"
}
\ No newline at end of file
...@@ -16,6 +16,7 @@ import com.base.superpdfreader.helps.PermissionHelp.requestStorePermission ...@@ -16,6 +16,7 @@ import com.base.superpdfreader.helps.PermissionHelp.requestStorePermission
import com.base.superpdfreader.view.DialogViews.showGerPermission import com.base.superpdfreader.view.DialogViews.showGerPermission
import com.base.superpdfreader.view.DocumentDetailDialog.showDocumentDetailDialog import com.base.superpdfreader.view.DocumentDetailDialog.showDocumentDetailDialog
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File import java.io.File
...@@ -78,21 +79,26 @@ class DocumentListFragment() : BaseFragment<FragmentDocumentListBinding>() { ...@@ -78,21 +79,26 @@ class DocumentListFragment() : BaseFragment<FragmentDocumentListBinding>() {
override fun setListener() { override fun setListener() {
binding.tvAllow.setOnClickListener { binding.tvAllow.setOnClickListener {
val launcher = (requireActivity() as MainActivity).launcher val launcher = (requireActivity() as MainActivity).launcher
if (dialog == null) {
dialog = requireContext().showGerPermission(null, deny = {}, allow = { dialog = requireContext().showGerPermission(null, deny = {}, allow = {
requireContext().requestStorePermission(launcher, requireContext().requestStorePermission(launcher,
jumpAction = {}, jumpAction = {},
result = { flag -> result = { flag ->
binding.llPermission.isVisible = !flag binding.llPermission.isVisible = !flag
initData() initData()
} }
) )
}) }, dismiss = { dialog = null })
}
} }
binding.swipeRefresh.setOnRefreshListener { binding.swipeRefresh.setOnRefreshListener {
binding.swipeRefresh.isRefreshing = false lifecycleScope.launch {
delay(2000)
binding.swipeRefresh.isRefreshing = false
initData()
}
} }
} }
...@@ -153,6 +159,9 @@ class DocumentListFragment() : BaseFragment<FragmentDocumentListBinding>() { ...@@ -153,6 +159,9 @@ class DocumentListFragment() : BaseFragment<FragmentDocumentListBinding>() {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
binding.llPermission.isVisible = !requireContext().checkStorePermission() binding.llPermission.isVisible = !requireContext().checkStorePermission()
if (requireContext().checkStorePermission()) {
initData()
}
} }
companion object { companion object {
......
This diff is collapsed.
...@@ -23,7 +23,8 @@ object DialogViews { ...@@ -23,7 +23,8 @@ object DialogViews {
fun Context.showGerPermission( fun Context.showGerPermission(
tittle: String? = null, tittle: String? = null,
deny: ((view: Dialog) -> Unit)? = null, deny: ((view: Dialog) -> Unit)? = null,
allow: ((view: Dialog) -> Unit)? = null allow: ((view: Dialog) -> Unit)? = null,
dismiss: (() -> Unit)? = null,
): Dialog { ): Dialog {
val dialog = Dialog(this) val dialog = Dialog(this)
val binding = DialogPermissonOpenBinding.inflate(LayoutInflater.from(this)) val binding = DialogPermissonOpenBinding.inflate(LayoutInflater.from(this))
...@@ -46,7 +47,8 @@ object DialogViews { ...@@ -46,7 +47,8 @@ object DialogViews {
// .setFontSize(13, true) // .setFontSize(13, true)
// .setForegroundColor(0xFF999999.toInt()) // .setForegroundColor(0xFF999999.toInt())
// .create() // .create()
binding.idTvTt.text =
"We need access to your files in order to provide you with the ability to scan PDF and image files. The image files will be used to support the image to PDF conversion feature. Would you like to grant us permission to access your files?"
tittle?.let { binding.idTvTt.text = it } tittle?.let { binding.idTvTt.text = it }
binding.idFullLottie.imageAssetsFolder = "easy_permission_finger/images/" binding.idFullLottie.imageAssetsFolder = "easy_permission_finger/images/"
binding.idFullLottie.setAnimation("easy_permission_finger/data.json") binding.idFullLottie.setAnimation("easy_permission_finger/data.json")
...@@ -59,6 +61,9 @@ object DialogViews { ...@@ -59,6 +61,9 @@ object DialogViews {
dialog.dismiss() dialog.dismiss()
allow?.invoke(dialog) allow?.invoke(dialog)
} }
dialog.setOnDismissListener {
dismiss?.invoke()
}
dialog.show() dialog.show()
return dialog return dialog
} }
......
...@@ -89,6 +89,9 @@ object PDFSaveDialog { ...@@ -89,6 +89,9 @@ object PDFSaveDialog {
saveAction.invoke(pdfParameterBean) saveAction.invoke(pdfParameterBean)
dialog.dismiss() dialog.dismiss()
} }
binding.flGuanbi.setOnClickListener {
dialog.dismiss()
}
//https://cloud.tencent.com/developer/article/1829876 //https://cloud.tencent.com/developer/article/1829876
val parentView = binding.root.parent as View val parentView = binding.root.parent as View
BottomSheetBehavior.from(parentView).state = BottomSheetBehavior.STATE_EXPANDED BottomSheetBehavior.from(parentView).state = BottomSheetBehavior.STATE_EXPANDED
......
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<stroke
android:width="1px"
android:color="#FF3835" />
<corners android:radius="6dp" />
</shape>
</item>
<item
android:id="@android:id/progress"
android:bottom="3dp"
android:end="3dp"
android:start="3dp"
android:top="3dp">
<scale android:scaleWidth="100%">
<shape>
<corners android:radius="5dp" />
<solid android:color="#FF3835" />
</shape>
</scale>
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/white"/>
<!-- <item android:drawable="@drawable/splash_bg" />-->
<item
android:top="130dp"
android:gravity="top|center_horizontal">
<bitmap
android:src="@mipmap/qdylogo" />
</item>
</layer-list>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/splash_bp"
android:gravity="center_horizontal"
android:orientation="vertical">
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="2" />
<LinearLayout
android:id="@+id/ll_progress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="49dp"
android:gravity="center_horizontal"
android:orientation="vertical"
android:visibility="gone">
<ProgressBar
android:id="@+id/pb"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="15dp"
android:layout_marginHorizontal="32dp"
android:layout_marginTop="5dp"
android:max="100"
android:progressDrawable="@drawable/shape_splash_s"
tools:progress="50" />
<TextView
android:id="@+id/tv_load"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:text="Loading..."
android:textColor="#000000"
android:textSize="15sp"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_ad_des"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="42dp"
android:text="This process may involve ad."
android:textColor="#000000"
android:textSize="15sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="4dp"
android:text="By continuing you are agreeing to the"
android:textColor="#676767"
android:textSize="14sp"
tools:ignore="HardcodedText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" &amp; "
android:visibility="gone"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/id_tv_privacy_policy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Privacy Policy"
android:textColor="#676767"
android:textSize="14sp"
tools:ignore="HardcodedText" />
</LinearLayout>
<TextView
android:id="@+id/id_tv_start"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginHorizontal="40dp"
android:layout_marginBottom="49dp"
android:background="@color/color_pdf"
android:gravity="center"
android:text="START TO USE"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
android:visibility="visible"
tools:ignore="HardcodedText" />
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
\ No newline at end of file
...@@ -24,14 +24,22 @@ ...@@ -24,14 +24,22 @@
android:textStyle="bold" android:textStyle="bold"
tools:ignore="HardcodedText" /> tools:ignore="HardcodedText" />
<ImageView <FrameLayout
android:id="@+id/iv_guanbi" android:id="@+id/fl_guanbi"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end" android:layout_gravity="center_vertical|end"
android:layout_marginEnd="11dp" android:layout_marginEnd="6dp"
android:src="@mipmap/guanbi" android:padding="5dp">
tools:ignore="ContentDescription" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/guanbi"
tools:ignore="ContentDescription" />
</FrameLayout>
</FrameLayout> </FrameLayout>
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
android:layout_marginHorizontal="15dp" android:layout_marginHorizontal="15dp"
android:layout_marginTop="22dp" android:layout_marginTop="22dp"
android:layout_marginBottom="38dp" android:layout_marginBottom="38dp"
android:gravity="center"
android:textSize="13sp" /> android:textSize="13sp" />
<com.airbnb.lottie.LottieAnimationView <com.airbnb.lottie.LottieAnimationView
......
<resources> <resources>
<string name="app_name">Super PDF Reader</string> <string name="app_name">Super PDF Reader</string>
<string name="hello_blank_fragment">Hello blank fragment</string> <string name="hello_blank_fragment">Hello blank fragment</string>
<string name="facebook_app_id">11</string> <string name="facebook_app_id">944700447857513</string>
</resources> </resources>
\ No newline at end of file
package com.base.superpdfreader
import org.junit.Test
import org.junit.Assert.*
/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}
\ No newline at end of file
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