Commit 6c31c182 authored by wanglei's avatar wanglei

...

parent cc472e48
......@@ -25,6 +25,7 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:logo="@mipmap/logo"
android:requestLegacyExternalStorage="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.PdfReaderAllPdfReader"
......@@ -97,6 +98,16 @@
android:exported="false"
android:launchMode="singleTop"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.pdf.PdfLoadingActivity"
android:exported="false"
android:launchMode="singleTop"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity
android:name=".ui.pdf.PdfMergeActivity"
android:exported="false"
android:launchMode="singleTop"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<provider
android:name="androidx.core.content.FileProvider"
......
......@@ -6,7 +6,9 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.base.pdfreaderallpdfreader.R
import com.base.pdfreaderallpdfreader.ads.AdmobHelper
import com.base.pdfreaderallpdfreader.ads.admob.AdmobNativeUtils
......@@ -27,6 +29,7 @@ import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity
import com.base.pdfreaderallpdfreader.ui.ppt.PptActivity
import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentHomeMoreDialog
import com.base.pdfreaderallpdfreader.ui.word.WordActivity
import com.base.pdfreaderallpdfreader.utils.updateMediaStore
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.File
......@@ -65,6 +68,30 @@ class DocumentFragment() : Fragment() {
requireContext().showDocumentHomeMoreDialog(item, this)
}
binding.rv.adapter = adapter
binding.rv.setOnScrollChangeListener { v, scrollX, scrollY, oldScrollX, oldScrollY ->
// LogEx.logDebug(TAG, "scrollY=$scrollY oldScrollY=$oldScrollY")
// 检查当前滚动位置
val firstVisibleItem: Int =
(binding.rv.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition()
if (firstVisibleItem > 3) {
binding.ivTop.isVisible = true
}
if (firstVisibleItem == 0) {
binding.ivTop.isVisible = false
}
}
binding.ivTop.setOnClickListener {
binding.rv.scrollToPosition(0)
binding.ivTop.isVisible = false
}
binding.swipeRefreshLayout.setOnRefreshListener {
initData()
}
}
override fun onResume() {
......@@ -83,6 +110,9 @@ class DocumentFragment() : Fragment() {
binding.swipeRefreshLayout.isRefreshing = true
lifecycleScope.launch(Dispatchers.IO) {
requireContext().updateMediaStore()
val list: List<DocumentBean>
when (type) {
TYPE_PDF -> {
......
......@@ -3,6 +3,7 @@ package com.base.pdfreaderallpdfreader.ui.main
import android.content.Context
import android.media.MediaScannerConnection
import android.net.Uri
import android.os.Environment
import com.base.pdfreaderallpdfreader.bean.ConstObject
import com.base.pdfreaderallpdfreader.bean.ConstObject.MIME_TYPE_DOC
import com.base.pdfreaderallpdfreader.bean.ConstObject.MIME_TYPE_DOCX
......@@ -17,6 +18,7 @@ import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_PDF
import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_PPT
import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_WORD
import com.base.pdfreaderallpdfreader.bean.MediaBean
import com.base.pdfreaderallpdfreader.helper.MyApplication.Companion.context
import com.base.pdfreaderallpdfreader.utils.AssetUtils.readByteArrayFromAsset
import com.base.pdfreaderallpdfreader.utils.PdfBoxUtils.checkPdfEncryption
import com.base.pdfreaderallpdfreader.utils.SpStringUtils
......@@ -33,6 +35,13 @@ fun Context.upDateDemoStore() {
) { path: String?, uri: Uri? -> }
}
fun getDocumentAppDir(): File {
val appDir = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), context.packageName)
if (!appDir.exists())
appDir.exists()
return appDir
}
fun Context.saveAssetsFile() {
val demoFile = File(filesDir, "demo")
demoFile.mkdirs()
......@@ -252,7 +261,7 @@ fun Context.pdfCheck(pdfDocumentBean: DocumentBean) {
fun getDocumentType(mediaBean: MediaBean): String {
return if (mediaBean.path.endsWith(".pdf")) {
MIME_TYPE_PDF
TYPE_PDF
} else if (mediaBean.path.endsWith(".doc") || mediaBean.path.endsWith(".docx")) {
TYPE_WORD
} else if (mediaBean.path.endsWith(".xls") || mediaBean.path.endsWith(".xlsx")) {
......@@ -260,7 +269,7 @@ fun getDocumentType(mediaBean: MediaBean): String {
} else if (mediaBean.path.endsWith(".ppt") || mediaBean.path.endsWith(".pptx")) {
TYPE_PPT
} else {
TYPE_PPT
TYPE_PDF
}
}
......
......@@ -23,17 +23,23 @@ import com.base.pdfreaderallpdfreader.ui.language.LanguageActivity
import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity
import com.base.pdfreaderallpdfreader.ui.search.SearchActivity
import com.base.pdfreaderallpdfreader.ui.view.MainDialog.showStoragePermission
import com.base.pdfreaderallpdfreader.ui.view.NameDialog.showDocumentRenameDialog
import com.base.pdfreaderallpdfreader.ui.view.PwdDialog.showPdfPwdDialog
import com.base.pdfreaderallpdfreader.ui.view.RateDialog.showRateDialog
import com.base.pdfreaderallpdfreader.utils.BarUtils
import com.base.pdfreaderallpdfreader.utils.LogEx
import com.base.pdfreaderallpdfreader.utils.PdfBoxUtils.checkPdfEncryption
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkStorePermission
import com.base.pdfreaderallpdfreader.utils.ShortcutUtils.addDeskShortCut
import com.base.pdfreaderallpdfreader.utils.updateMediaStore
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.File
class MainActivity : BaseActivity<ActivityMainBinding>() {
private val TAG = "MainActivity"
override val binding: ActivityMainBinding by lazy {
ActivityMainBinding.inflate(layoutInflater)
}
......@@ -47,6 +53,23 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
mainViewModel.initScannerLauncher(this)
mainViewModel.handleActivityGmsScanResult = { imageUri, pdfUri ->
LogEx.logDebug(TAG, "pdfUri=$pdfUri")
val file = File(pdfUri.toString().replace("file://", ""))
if (file.exists()) {
showDocumentRenameDialog(file.name,
okAction = {
val child = if (it.endsWith(".pdf")) it else "$it.pdf"
val newFile = File(getDocumentAppDir(), child)
mainViewModel.copyFile(file, newFile)
this.updateMediaStore()
},
dismissAction = {
})
} else {
}
}
BarUtils.setStatusBarLightMode(this, true)
......@@ -63,6 +86,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
showStoragePermission(launcher)
}
addDeskShortCut()
}
override fun onResume() {
......@@ -91,20 +115,32 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
startActivity(Intent(this, LanguageActivity::class.java))
}
binding.includeMain.includeContentMain.ivScan.setOnClickListener {
starAdGmsScan()
if (checkStorePermission()) {
starAdGmsScan()
} else {
showStoragePermission(launcher)
}
}
binding.includeMain.ivSearch.setOnClickListener {
startActivity(Intent(this, SearchActivity::class.java))
if (checkStorePermission()) {
startActivity(Intent(this, SearchActivity::class.java))
} else {
showStoragePermission(launcher)
}
}
binding.llFileManager.setOnClickListener {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.setType("application/pdf")
intent.flags = Intent.FLAG_GRANT_WRITE_URI_PERMISSION
launcher.launch(intent) {
val uri = it.data?.data ?: Uri.EMPTY
jumpUriPdf(uri)
if (checkStorePermission()) {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.setType("application/pdf")
intent.flags = Intent.FLAG_GRANT_WRITE_URI_PERMISSION
launcher.launch(intent) {
val uri = it.data?.data ?: Uri.EMPTY
jumpUriPdf(uri)
}
} else {
showStoragePermission(launcher)
}
}
binding.llRate.setOnClickListener {
......@@ -120,6 +156,9 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
binding.llFeedback.setOnClickListener {
startActivity(Intent(this, FeedbackActivity::class.java))
}
binding.llShare.setOnClickListener {
}
}
......
......@@ -11,6 +11,7 @@ import androidx.lifecycle.ViewModel
import com.google.mlkit.vision.documentscanner.GmsDocumentScannerOptions
import com.google.mlkit.vision.documentscanner.GmsDocumentScanning
import com.google.mlkit.vision.documentscanner.GmsDocumentScanningResult
import java.io.File
class MainViewModel : ViewModel() {
......@@ -68,4 +69,11 @@ class MainViewModel : ViewModel() {
}
}
}
fun copyFile(file: File, newFile: File) {
runCatching {
file.copyTo(newFile, true)
}
}
}
\ No newline at end of file
......@@ -13,10 +13,13 @@ import com.base.pdfreaderallpdfreader.bean.ConstObject.DO_LOCK_PDF
import com.base.pdfreaderallpdfreader.bean.ConstObject.DO_SPLIT_PDF
import com.base.pdfreaderallpdfreader.databinding.FragmentHomeBinding
import com.base.pdfreaderallpdfreader.ui.document.DocumentActivity
import com.base.pdfreaderallpdfreader.ui.main.MainActivity
import com.base.pdfreaderallpdfreader.ui.main.getPdfFastSize
import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity
import com.base.pdfreaderallpdfreader.ui.pdf.PdfSelectActivity
import com.base.pdfreaderallpdfreader.ui.view.MainDialog.showStoragePermission
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkStorePermission
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.requestStoragePermission
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
......@@ -46,48 +49,86 @@ class HomeFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val launcher = (requireActivity() as MainActivity).launcher
binding.clPdfReader.setOnClickListener {
startActivity(Intent(requireContext(), DocumentActivity::class.java))
if (!requireContext().checkStorePermission()) {
requireContext().showStoragePermission(launcher)
} else {
startActivity(Intent(requireContext(), DocumentActivity::class.java))
}
}
binding.llEditPdf.setOnClickListener {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 1)
})
if (!requireContext().checkStorePermission()) {
requireContext().showStoragePermission(launcher)
} else {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 1)
})
}
}
binding.llMergePdf.setOnClickListener {
PdfActivity.jumpMerge(requireActivity())
if (!requireContext().checkStorePermission()) {
requireContext().showStoragePermission(launcher)
} else {
PdfActivity.jumpMerge(requireActivity())
}
}
binding.llSplitPdf.setOnClickListener {
startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply {
putExtra("doWhat", DO_SPLIT_PDF)
})
if (!requireContext().checkStorePermission()) {
requireContext().showStoragePermission(launcher)
} else {
startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply {
putExtra("doWhat", DO_SPLIT_PDF)
})
}
}
binding.llLockPdf.setOnClickListener {
startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply {
putExtra("doWhat", DO_LOCK_PDF)
})
if (!requireContext().checkStorePermission()) {
requireContext().showStoragePermission(launcher)
} else {
startActivity(Intent(requireContext(), PdfSelectActivity::class.java).apply {
putExtra("doWhat", DO_LOCK_PDF)
})
}
}
binding.llWord.setOnClickListener {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 2)
})
if (!requireContext().checkStorePermission()) {
requireContext().showStoragePermission(launcher)
} else {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 2)
})
}
}
binding.llExcel.setOnClickListener {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 3)
})
if (!requireContext().checkStorePermission()) {
requireContext().showStoragePermission(launcher)
} else {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 3)
})
}
}
binding.llPpt.setOnClickListener {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 4)
})
if (!requireContext().checkStorePermission()) {
requireContext().showStoragePermission(launcher)
} else {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 4)
})
}
}
binding.llOther.setOnClickListener {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 0)
})
if (!requireContext().checkStorePermission()) {
requireContext().showStoragePermission(launcher)
} else {
startActivity(Intent(requireContext(), DocumentActivity::class.java).apply {
putExtra("initTab", 0)
})
}
}
......
......@@ -8,15 +8,24 @@ import androidx.core.view.updatePadding
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import com.base.pdfreaderallpdfreader.base.BaseActivity
import com.base.pdfreaderallpdfreader.bean.DocumentBean
import com.base.pdfreaderallpdfreader.bean.DocumentBean.Companion.TYPE_PDF
import com.base.pdfreaderallpdfreader.databinding.ActivitySearchBinding
import com.base.pdfreaderallpdfreader.databinding.ItemTabDocumentBinding
import com.base.pdfreaderallpdfreader.ui.document.DocumentFragment.Companion.jumpOtherDocument
import com.base.pdfreaderallpdfreader.ui.main.DocumentAdapter
import com.base.pdfreaderallpdfreader.ui.pdf.PdfActivity
import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentHomeMoreDialog
import com.base.pdfreaderallpdfreader.ui.view.DocumentHomeMoreCallBack
import com.base.pdfreaderallpdfreader.utils.BarUtils
import com.base.pdfreaderallpdfreader.utils.LogEx
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.File
class SearchActivity : BaseActivity<ActivitySearchBinding>() {
class SearchActivity : BaseActivity<ActivitySearchBinding>(), DocumentHomeMoreCallBack {
private val TAG = "SearchActivity"
private lateinit var searchViewModel: SearchViewModel
private var adapter: DocumentAdapter? = null
......@@ -32,6 +41,16 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
adapter = DocumentAdapter()
binding.rv.adapter = adapter
adapter?.moreAction = { item: DocumentBean ->
showDocumentHomeMoreDialog(item, null, this)
}
adapter?.itemClickAction = { item: DocumentBean ->
if (item.type == TYPE_PDF) {
PdfActivity.jumpPdfActivity(this, item)
} else {
jumpOtherDocument(item)
}
}
arrayOf("All", "PDF", "Word", "Excel", "PPT").forEach { tab ->
val tabBinding = ItemTabDocumentBinding.inflate(layoutInflater)
......@@ -53,6 +72,7 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
binding.edit.setOnEditorActionListener { v, actionId, event ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
LogEx.logDebug(TAG, "actionDone")
if (binding.edit.text.isNotEmpty()) {
searchDocument()
}
......@@ -75,6 +95,7 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
}
private fun searchDocument() {
LogEx.logDebug(TAG, "searchDocument")
val search = binding.edit.text.toString()
lifecycleScope.launch(Dispatchers.IO) {
val result = searchViewModel.getSearchDocument(this@SearchActivity, search)
......@@ -98,4 +119,23 @@ class SearchActivity : BaseActivity<ActivitySearchBinding>() {
var SEARCH_MODE_PPT = "search_mode_ppt"
}
override fun renameDocumentBean(file: File, newName: String) {
try {
val newFile = File(file.parentFile, newName)
val result = file.renameTo(newFile)
if (result) {
searchDocument()
}
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun deleteDocument(item: DocumentBean) {
val flag = File(item.path).delete()
if (flag) {
adapter?.remove(item)
}
}
}
\ No newline at end of file
......@@ -45,10 +45,6 @@ class SearchViewModel : ViewModel() {
else -> typeList = all
}
typeList.filter {
File(it.path).name.lowercase(Locale.ENGLISH)
.contains(search.lowercase(Locale.ENGLISH))
}
return typeList
return typeList.filter { File(it.path).name.lowercase(Locale.ENGLISH).contains(search.lowercase(Locale.ENGLISH)) }
}
}
\ No newline at end of file
......@@ -31,13 +31,26 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import java.io.File
interface DocumentHomeMoreCallBack {
fun renameDocumentBean(file: File, newName: String) {
}
fun deleteDocument(item: DocumentBean) {
}
}
object DocumentDialog {
@SuppressLint("SetTextI18n", "NotifyDataSetChanged")
fun Context.showDocumentHomeMoreDialog(
item: DocumentBean,
documentFragment: DocumentFragment
documentFragment: DocumentFragment? = null,
documentHomeMoreCallBack: DocumentHomeMoreCallBack? = null
): BottomSheetDialog {
val dialog = BottomSheetDialog(this, R.style.BottomSheetDialog)
val binding = DialogDocumentHomeMoreBinding.inflate(LayoutInflater.from(this))
......@@ -75,7 +88,8 @@ object DocumentDialog {
binding.llRename.setOnClickListener {
showDocumentRenameDialog(file.name, okAction = { newName ->
dialog.dismiss()
documentFragment.renameDocumentBean(file, newName)
documentFragment?.renameDocumentBean(file, newName)
documentHomeMoreCallBack?.renameDocumentBean(file, newName)
})
}
binding.llDetail.setOnClickListener {
......@@ -87,7 +101,8 @@ object DocumentDialog {
binding.llDelete.setOnClickListener {
dialog.dismiss()
showDeleteDialog {
documentFragment.deleteDocument(item)
documentFragment?.deleteDocument(item)
documentHomeMoreCallBack?.deleteDocument(item)
}
}
return dialog
......
......@@ -16,6 +16,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
object MainDialog {
fun Context.showStoragePermission(
launcher: ActivityLauncher,
launcherAction: ((flag: Boolean) -> Unit)? = null,
......
......@@ -23,6 +23,7 @@ import com.base.pdfreaderallpdfreader.ui.view.DocumentDialog.showDocumentDetail
import com.base.pdfreaderallpdfreader.utils.IntentShareUtils
import com.base.pdfreaderallpdfreader.utils.LogEx
import com.base.pdfreaderallpdfreader.utils.NumberRangeFilter
import com.base.pdfreaderallpdfreader.utils.PermissionUtils.checkStorePermission
import com.base.pdfreaderallpdfreader.utils.SpStringUtils
import com.base.pdfreaderallpdfreader.utils.SpStringUtils.BOOKMARK_KEY
import com.base.pdfreaderallpdfreader.utils.ToastUtils.toast
......
package com.base.pdfreaderallpdfreader.utils
import android.content.Context
import android.content.Intent
import android.content.pm.ShortcutInfo
import android.content.pm.ShortcutManager
import android.graphics.drawable.Icon
import android.os.Build
import com.base.pdfreaderallpdfreader.R
import com.base.pdfreaderallpdfreader.bean.ConstObject
import com.base.pdfreaderallpdfreader.ui.splash.SplashActivity
object ShortcutUtils {
fun Context.addDeskShortCut() {
//获取ShortcutManager对象
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
val shortcutManager: ShortcutManager = getSystemService(ShortcutManager::class.java) as ShortcutManager
val shortcut1 = ShortcutInfo.Builder(this, "11111")
.setShortLabel("Scan Pdf")
.setIcon(Icon.createWithResource(this, R.mipmap.pdf_scan_short))
.setIntent(Intent(Intent.ACTION_MAIN, null, this, SplashActivity::class.java).apply {
putExtra("actionId", ConstObject.SHORTCUT_SCAN_PDF)
})
.build()
val shortcut2 = ShortcutInfo.Builder(this, "22222")
.setShortLabel("Split Pdf")
.setIcon(Icon.createWithResource(this, R.mipmap.pdf_split_short))
.setIntent(Intent(Intent.ACTION_MAIN, null, this, SplashActivity::class.java).apply {
putExtra("actionId", ConstObject.SHORTCUT_SPLIT_PDF)
})
.build()
val shortcut3 = ShortcutInfo.Builder(this, "33333")
.setShortLabel("Merge Pdf")
.setIcon(Icon.createWithResource(this, R.mipmap.pdf_merge_short))
.setIntent(Intent(Intent.ACTION_MAIN, null, this, SplashActivity::class.java).apply {
putExtra("actionId", ConstObject.SHORTCUT_MERGE_PDF)
})
.build()
//setDynamicShortcuts()方法来设置快捷方式
shortcutManager.setDynamicShortcuts(listOf(shortcut1, shortcut2, shortcut3))
}
}
}
\ No newline at end of file
......@@ -69,7 +69,9 @@
android:textColor="#B1B3B9"
android:textSize="13sp" />
<!-- 文件管理-->
<LinearLayout
android:id="@+id/ll_file_manager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="10dp"
......@@ -119,12 +121,14 @@
</LinearLayout>
<!-- 多语言 -->
<LinearLayout
android:id="@+id/ll_file_manager"
android:id="@+id/ll_language"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="10dp"
android:orientation="horizontal">
android:orientation="horizontal"
android:visibility="gone">
<ImageView
android:layout_width="wrap_content"
......@@ -135,7 +139,6 @@
tools:ignore="ContentDescription" />
<LinearLayout
android:id="@+id/ll_language"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
......@@ -171,7 +174,6 @@
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
......@@ -181,6 +183,7 @@
android:textColor="#B1B3B9"
android:textSize="13sp" />
<!-- 评价 -->
<LinearLayout
android:id="@+id/ll_rate"
android:layout_width="match_parent"
......@@ -223,11 +226,14 @@
</LinearLayout>
<!-- 分享 -->
<LinearLayout
android:id="@+id/ll_share"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="10dp"
android:orientation="horizontal">
android:orientation="horizontal"
android:visibility="gone">
<ImageView
android:layout_width="wrap_content"
......@@ -265,6 +271,7 @@
</LinearLayout>
<!-- 隐私政策 -->
<LinearLayout
android:id="@+id/ll_privacy"
android:layout_width="match_parent"
......@@ -307,6 +314,7 @@
</LinearLayout>
<!-- 反馈 -->
<LinearLayout
android:id="@+id/ll_feedback"
android:layout_width="match_parent"
......
......@@ -21,13 +21,28 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginVertical="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_document" />
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginVertical="16dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/item_document" />
<ImageView
android:id="@+id/iv_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|bottom"
android:layout_marginBottom="100dp"
android:src="@mipmap/pdf_top"
android:visibility="gone" />
</FrameLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout>
......
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">Pdf Reader All Pdf Reader</string>
<string name="app_name">PDF Reader &amp; Editor</string>
<string name="facebook_app_id" tools:ignore="MissingTranslation">567688245803774</string>
......
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