Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
B
Browser White
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
wanglei
Browser White
Commits
f87e78be
Commit
f87e78be
authored
Aug 08, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
5c6f3887
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
280 additions
and
72 deletions
+280
-72
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+7
-7
MediaBrowserActivity.kt
...serwhite/ui/activity/mediabrowser/MediaBrowserActivity.kt
+71
-0
MediaAdapter.kt
...ain/java/com/base/browserwhite/ui/adapter/MediaAdapter.kt
+59
-33
FileFragment.kt
...in/java/com/base/browserwhite/ui/fragment/FileFragment.kt
+32
-21
HomeFragment.kt
...in/java/com/base/browserwhite/ui/fragment/HomeFragment.kt
+0
-5
MediaStoreUtils.kt
.../main/java/com/base/browserwhite/utils/MediaStoreUtils.kt
+41
-6
activity_media_browser.xml
app/src/main/res/layout/activity_media_browser.xml
+46
-0
fragment_file.xml
app/src/main/res/layout/fragment_file.xml
+1
-0
item_media_picture.xml
app/src/main/res/layout/item_media_picture.xml
+9
-0
h_fanhui.png
app/src/main/res/mipmap-xxhdpi/h_fanhui.png
+0
-0
dimens.xml
app/src/main/res/values-land/dimens.xml
+3
-0
dimens.xml
app/src/main/res/values-w1240dp/dimens.xml
+3
-0
dimens.xml
app/src/main/res/values-w600dp/dimens.xml
+3
-0
dimens.xml
app/src/main/res/values/dimens.xml
+1
-0
libs.versions.toml
gradle/libs.versions.toml
+4
-0
No files found.
app/src/main/AndroidManifest.xml
View file @
f87e78be
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
>
<!--required设置为true,无相机设备google play上不会分发-->
<!-- required设置为true,无相机设备google play上不会分发 -->
<uses-feature
android:name=
"android.hardware.camera"
android:required=
"false"
/>
<uses-permission
android:name=
"android.permission.CAMERA"
/>
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.MANAGE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.FOREGROUND_SERVICE"
/>
<uses-permission
android:name=
"android.permission.FOREGROUND_SERVICE_DATA_SYNC"
/>
...
...
@@ -38,6 +34,12 @@
<category
android:name=
"android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
<activity
android:name=
".ui.activity.mediabrowser.MediaBrowserActivity"
android:exported=
"false"
android:launchMode=
"singleTop"
android:screenOrientation=
"portrait"
tools:ignore=
"DiscouragedApi,LockedOrientationActivity"
/>
<activity
android:name=
".ui.activity.webstore.WevStoreActivity"
android:exported=
"false"
...
...
@@ -69,11 +71,9 @@
android:screenOrientation=
"portrait"
tools:ignore=
"DiscouragedApi,LockedOrientationActivity"
/>
<service
android:name=
".service.StayNotificationService"
android:foregroundServiceType=
"dataSync"
/>
</application>
</manifest>
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ui/activity/mediabrowser/MediaBrowserActivity.kt
0 → 100644
View file @
f87e78be
package
com.base.browserwhite.ui.activity.mediabrowser
import
android.graphics.Color
import
androidx.activity.addCallback
import
androidx.core.view.updatePadding
import
androidx.lifecycle.lifecycleScope
import
androidx.recyclerview.widget.GridLayoutManager
import
androidx.recyclerview.widget.GridLayoutManager.SpanSizeLookup
import
com.base.browserwhite.databinding.ActivityMediaBrowserBinding
import
com.base.browserwhite.ui.activity.BaseActivity
import
com.base.browserwhite.ui.adapter.MediaAdapter
import
com.base.browserwhite.utils.BarUtils
import
com.base.browserwhite.utils.MediaStoreUtils.getMediaPhoto
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.launch
class
MediaBrowserActivity
:
BaseActivity
<
ActivityMediaBrowserBinding
>()
{
override
val
binding
:
ActivityMediaBrowserBinding
by
lazy
{
ActivityMediaBrowserBinding
.
inflate
(
layoutInflater
)
}
private
lateinit
var
adapter
:
MediaAdapter
override
fun
initView
()
{
BarUtils
.
setStatusBarLightMode
(
this
,
true
)
BarUtils
.
setStatusBarColor
(
this
,
Color
.
TRANSPARENT
)
binding
.
root
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
val
tittle
=
intent
.
extras
?.
getString
(
"tittle"
)
?:
""
binding
.
tvTitle
.
text
=
tittle
when
(
tittle
)
{
"Picture"
->
{
adapter
=
MediaAdapter
(
1
)
binding
.
rv
.
layoutManager
=
GridLayoutManager
(
this
,
4
).
apply
{
spanSizeLookup
=
object
:
SpanSizeLookup
()
{
override
fun
getSpanSize
(
position
:
Int
):
Int
{
// 根据item的类型或数据来决定占据的列数
return
1
}
}
}
}
}
binding
.
rv
.
adapter
=
adapter
initData
()
}
override
fun
initListener
()
{
super
.
initListener
()
onBackPressedDispatcher
.
addCallback
{
finishToMain
()
}
binding
.
flFanhui
.
setOnClickListener
{
onBackPressedDispatcher
.
onBackPressed
()
}
}
private
fun
initData
()
=
lifecycleScope
.
launch
(
Dispatchers
.
IO
)
{
val
mediaList
=
getMediaPhoto
()
launch
(
Dispatchers
.
Main
)
{
adapter
.
setData
(
mediaList
)
}
}
}
\ No newline at end of file
app/src/main/java/com/base/browserwhite/ui/adapter/MediaAdapter.kt
View file @
f87e78be
...
...
@@ -15,19 +15,31 @@ import com.base.browserwhite.bean.ConstObject.MIME_TYPE_PPTX
import
com.base.browserwhite.bean.ConstObject.MIME_TYPE_XLS
import
com.base.browserwhite.bean.ConstObject.MIME_TYPE_XLSX
import
com.base.browserwhite.bean.MediaBean
import
com.base.browserwhite.databinding.ItemMediaPictureBinding
import
com.base.browserwhite.databinding.ItemMediaRecentBinding
import
com.base.browserwhite.utils.KotlinExt.toFormatSize
import
com.base.browserwhite.utils.XmlEx.inflate
import
com.bumptech.glide.Glide
import
java.io.File
class
MediaAdapter
(
val
moreAction
:
(
view
:
View
,
bean
:
MediaBean
)
->
Unit
)
:
RecyclerView
.
Adapter
<
MediaAdapter
.
MediaViewHolder
>()
{
class
MediaAdapter
(
val
uiType
:
Int
,
val
clickAction
:
((
bean
:
MediaBean
)
->
Unit
)?
=
null
,
val
moreAction
:
((
view
:
View
,
bean
:
MediaBean
)
->
Unit
)?
=
null
)
:
RecyclerView
.
Adapter
<
MediaAdapter
.
MediaViewHolder
>()
{
private
val
beanList
=
arrayListOf
<
MediaBean
>()
inner
class
MediaViewHolder
(
view
:
View
)
:
ViewHolder
(
view
)
override
fun
onCreateViewHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
MediaViewHolder
{
if
(
uiType
==
0
)
{
return
MediaViewHolder
(
R
.
layout
.
item_media_recent
.
inflate
(
parent
))
}
if
(
uiType
==
1
)
{
return
MediaViewHolder
(
R
.
layout
.
item_media_picture
.
inflate
(
parent
))
}
return
MediaViewHolder
(
R
.
layout
.
item_media_recent
.
inflate
(
parent
))
}
...
...
@@ -36,53 +48,67 @@ class MediaAdapter(val moreAction: (view: View, bean: MediaBean) -> Unit) : Recy
}
override
fun
onBindViewHolder
(
holder
:
MediaViewHolder
,
position
:
Int
)
{
val
binding
=
ItemMediaRecentBinding
.
bind
(
holder
.
itemView
)
val
context
=
holder
.
itemView
.
context
val
bean
=
beanList
[
position
]
binding
.
ivShipin
.
visibility
=
View
.
GONE
when
{
bean
.
mimeType
.
contains
(
"image"
)
->
{
Glide
.
with
(
context
).
load
(
bean
.
path
).
into
(
binding
.
iv
)
}
if
(
uiType
==
0
)
{
val
binding
=
ItemMediaRecentBinding
.
bind
(
holder
.
itemView
)
binding
.
ivShipin
.
visibility
=
View
.
GONE
when
{
bean
.
mimeType
.
contains
(
"image"
)
->
{
Glide
.
with
(
context
).
load
(
bean
.
path
).
into
(
binding
.
iv
)
}
bean
.
mimeType
.
contains
(
"video"
)
->
{
Glide
.
with
(
context
).
load
(
bean
.
path
).
into
(
binding
.
iv
)
binding
.
ivShipin
.
visibility
=
View
.
VISIBLE
}
bean
.
mimeType
.
contains
(
"video"
)
->
{
Glide
.
with
(
context
).
load
(
bean
.
path
).
into
(
binding
.
iv
)
binding
.
ivShipin
.
visibility
=
View
.
VISIBLE
}
bean
.
mimeType
.
contains
(
"audio"
)
->
{
bean
.
mimeType
.
contains
(
"audio"
)
->
{
}
}
bean
.
mimeType
==
MIME_TYPE_PDF
->
{
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
f_pdf
)
}
bean
.
mimeType
==
MIME_TYPE_PDF
->
{
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
f_pdf
)
}
bean
.
mimeType
==
MIME_TYPE_DOC
||
bean
.
mimeType
==
MIME_TYPE_DOCX
->
{
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
h_word
)
}
bean
.
mimeType
==
MIME_TYPE_DOC
||
bean
.
mimeType
==
MIME_TYPE_DOCX
->
{
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
h_word
)
}
bean
.
mimeType
==
MIME_TYPE_XLS
||
bean
.
mimeType
==
MIME_TYPE_XLSX
->
{
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
h_xls
)
}
bean
.
mimeType
==
MIME_TYPE_XLS
||
bean
.
mimeType
==
MIME_TYPE_XLSX
->
{
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
h_xls
)
}
bean
.
mimeType
==
MIME_TYPE_PPT
||
bean
.
mimeType
==
MIME_TYPE_PPTX
->
{
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
h_ppt
)
}
bean
.
mimeType
==
MIME_TYPE_PPT
||
bean
.
mimeType
==
MIME_TYPE_PPTX
->
{
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
h_ppt
)
}
bean
.
mimeType
==
MIME_TYPE_APK
->
{
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
h_apk
)
bean
.
mimeType
==
MIME_TYPE_APK
->
{
binding
.
iv
.
setImageResource
(
R
.
mipmap
.
h_apk
)
}
}
}
val
file
=
File
(
bean
.
path
)
binding
.
tvName
.
text
=
file
.
name
binding
.
tvSize
.
text
=
file
.
length
().
toFormatSize
()
val
file
=
File
(
bean
.
path
)
binding
.
tvName
.
text
=
file
.
name
binding
.
tvSize
.
text
=
file
.
length
().
toFormatSize
()
binding
.
flMore
.
setOnClickListener
{
moreAction
.
invoke
(
it
,
bean
)
binding
.
flMore
.
setOnClickListener
{
moreAction
?.
invoke
(
it
,
bean
)
}
binding
.
root
.
setOnClickListener
{
clickAction
?.
invoke
(
bean
)
}
}
else
if
(
uiType
==
1
)
{
val
binding
=
ItemMediaPictureBinding
.
bind
(
holder
.
itemView
)
Glide
.
with
(
context
).
load
(
bean
.
path
).
centerCrop
().
into
(
binding
.
iv
)
binding
.
root
.
setOnClickListener
{
clickAction
?.
invoke
(
bean
)
}
}
}
@SuppressLint
(
"NotifyDataSetChanged"
)
...
...
app/src/main/java/com/base/browserwhite/ui/fragment/FileFragment.kt
View file @
f87e78be
...
...
@@ -13,6 +13,7 @@ import androidx.appcompat.app.AppCompatActivity
import
androidx.lifecycle.lifecycleScope
import
com.base.browserwhite.databinding.FragmentFileBinding
import
com.base.browserwhite.ui.activity.MainActivity
import
com.base.browserwhite.ui.activity.mediabrowser.MediaBrowserActivity
import
com.base.browserwhite.ui.adapter.MediaAdapter
import
com.base.browserwhite.ui.views.DialogViews.showMediaMoreDialog
import
com.base.browserwhite.utils.KotlinExt.toFormatSize
...
...
@@ -23,7 +24,7 @@ import com.base.browserwhite.utils.MediaStoreUtils.getMediaDocumentSize
import
com.base.browserwhite.utils.MediaStoreUtils.getMediaPhotoSize
import
com.base.browserwhite.utils.MediaStoreUtils.getMediaVideoSize
import
com.base.browserwhite.utils.MediaStoreUtils.getMediaZipSize
import
com.base.browserwhite.utils.MediaStoreUtils.get
RecentMedia
import
com.base.browserwhite.utils.MediaStoreUtils.get
MediaFile
import
com.base.browserwhite.utils.PermissionHelp.checkStorePermission
import
com.base.browserwhite.utils.PermissionHelp.requestStorePermission
import
kotlinx.coroutines.Dispatchers
...
...
@@ -45,26 +46,30 @@ class FileFragment : BaseFragment<FragmentFileBinding>() {
override
fun
setView
()
{
showStorage
()
adapter
=
MediaAdapter
{
view
,
bean
->
requireContext
().
showMediaMoreDialog
(
view
,
deleteAction
=
{},
shareAction
=
{
LogEx
.
logDebug
(
TAG
,
"uri=${bean.uri}"
)
val
shareIntent
=
Intent
().
apply
{
action
=
Intent
.
ACTION_SEND
type
=
bean
.
mimeType
putExtra
(
Intent
.
EXTRA_STREAM
,
bean
.
uri
)
flags
=
Intent
.
FLAG_GRANT_READ_URI_PERMISSION
// 可以添加更多额外信息,如主题、文本等
}
val
chooserIntent
=
Intent
.
createChooser
(
shareIntent
,
"Share File"
)
if
(
shareIntent
.
resolveActivity
(
requireContext
().
packageManager
)
!=
null
)
{
startActivity
(
chooserIntent
)
}
else
{
Toast
.
makeText
(
requireContext
(),
"no app can share the file"
,
Toast
.
LENGTH_SHORT
).
show
()
}
adapter
=
MediaAdapter
(
0
,
clickAction
=
{
},
moreAction
=
{
view
,
bean
->
requireContext
().
showMediaMoreDialog
(
view
,
deleteAction
=
{},
shareAction
=
{
LogEx
.
logDebug
(
TAG
,
"uri=${bean.uri}"
)
val
shareIntent
=
Intent
().
apply
{
action
=
Intent
.
ACTION_SEND
type
=
bean
.
mimeType
putExtra
(
Intent
.
EXTRA_STREAM
,
bean
.
uri
)
flags
=
Intent
.
FLAG_GRANT_READ_URI_PERMISSION
// 可以添加更多额外信息,如主题、文本等
}
val
chooserIntent
=
Intent
.
createChooser
(
shareIntent
,
"Share File"
)
if
(
shareIntent
.
resolveActivity
(
requireContext
().
packageManager
)
!=
null
)
{
startActivity
(
chooserIntent
)
}
else
{
Toast
.
makeText
(
requireContext
(),
"no app can share the file"
,
Toast
.
LENGTH_SHORT
).
show
()
}
})
})
}
binding
.
rvRecent
.
adapter
=
adapter
if
(
requireContext
().
checkStorePermission
())
{
...
...
@@ -83,6 +88,12 @@ class FileFragment : BaseFragment<FragmentFileBinding>() {
}
}
}
binding
.
llPicture
.
setOnClickListener
{
requireActivity
().
startActivity
(
Intent
(
requireContext
(),
MediaBrowserActivity
::
class
.
java
).
apply
{
putExtra
(
"tittle"
,
"Picture"
)
})
}
}
...
...
@@ -142,7 +153,7 @@ class FileFragment : BaseFragment<FragmentFileBinding>() {
}
val
mediaList
=
requireContext
().
get
RecentMedia
().
filter
{
val
mediaList
=
requireContext
().
get
MediaFile
().
filter
{
val
file
=
File
(
it
.
path
)
System
.
currentTimeMillis
()
-
file
.
lastModified
()
<=
15L
*
24
*
60
*
60
*
1000
}
...
...
app/src/main/java/com/base/browserwhite/ui/fragment/HomeFragment.kt
View file @
f87e78be
package
com.base.browserwhite.ui.fragment
import
android.content.Intent
import
androidx.lifecycle.lifecycleScope
import
androidx.recyclerview.widget.GridLayoutManager
import
androidx.recyclerview.widget.ItemTouchHelper
import
androidx.recyclerview.widget.LinearLayoutManager
...
...
@@ -21,10 +20,6 @@ import com.base.browserwhite.ui.activity.webstore.WevStoreActivity
import
com.base.browserwhite.ui.adapter.WebsiteAdapter
import
com.base.browserwhite.ui.views.DialogViews.showSearchEngineDialog
import
com.base.browserwhite.ui.views.itemtouch.MyItemTouchHelperCallBack
import
com.base.browserwhite.utils.MediaStoreUtils
import
com.base.browserwhite.utils.MediaStoreUtils.getRecentMedia
import
com.base.browserwhite.utils.PermissionHelp.checkStorePermission
import
kotlinx.coroutines.launch
class
HomeFragment
:
BaseFragment
<
FragmentHomeBinding
>()
{
...
...
app/src/main/java/com/base/browserwhite/utils/MediaStoreUtils.kt
View file @
f87e78be
...
...
@@ -21,7 +21,9 @@ import com.base.browserwhite.bean.MediaBean
object
MediaStoreUtils
{
private
val
TAG
=
"MediaStoreUtils"
fun
Context
.
getRecentMedia
():
ArrayList
<
MediaBean
>
{
//图片视频音频不用这个查
fun
Context
.
getMediaFile
(
selectionArgs
:
Array
<
String
>?
=
null
):
ArrayList
<
MediaBean
>
{
val
list
=
arrayListOf
<
MediaBean
>()
...
...
@@ -31,10 +33,9 @@ object MediaStoreUtils {
// MediaStore.Files.FileColumns.TITLE,
MediaStore
.
Files
.
FileColumns
.
MIME_TYPE
,
// MediaStore.Files.FileColumns.SIZE,
MediaStore
.
Files
.
FileColumns
.
DATE_ADDED
)
val
mimeTypeSelectionArgs
=
arrayOf
(
val
mimeTypeSelectionArgs
=
selectionArgs
?:
arrayOf
(
MIME_TYPE_IMAGE
,
MIME_TYPE_VIDEO
,
// MIME_TYPE_AUDIO,
...
...
@@ -48,9 +49,11 @@ object MediaStoreUtils {
MIME_TYPE_APK
)
val
mimeTypeSelection
=
val
mimeTypeSelection
=
if
(
mimeTypeSelectionArgs
.
size
==
1
)
{
"${MediaStore.Files.FileColumns.MIME_TYPE} = ?"
}
else
{
"${MediaStore.Files.FileColumns.MIME_TYPE} IN ("
+
mimeTypeSelectionArgs
.
joinToString
(
","
)
{
"?"
}
+
")"
}
// val selection = "$timeSelection AND $mimeTypeSelection"
val
selection
=
mimeTypeSelection
...
...
@@ -64,7 +67,7 @@ object MediaStoreUtils {
MediaStore
.
Files
.
getContentUri
(
"external"
),
projection
,
selection
,
mimeTypeSelectionArgs
,
selectionArgs
?:
mimeTypeSelectionArgs
,
MediaStore
.
Files
.
FileColumns
.
DATE_ADDED
+
" DESC"
)
if
(
cursor
!=
null
)
{
...
...
@@ -120,6 +123,38 @@ object MediaStoreUtils {
return
count
}
fun
Context
.
getMediaPhoto
():
List
<
MediaBean
>
{
val
list
=
arrayListOf
<
MediaBean
>()
val
contentResolver
=
this
.
contentResolver
// 定义查询的Uri和列
val
baseUri
=
MediaStore
.
Images
.
Media
.
EXTERNAL_CONTENT_URI
val
projection
=
arrayOf
(
MediaStore
.
Images
.
Media
.
_ID
,
MediaStore
.
Files
.
FileColumns
.
DATA
)
// 执行查询
var
cursor
:
Cursor
?
=
null
try
{
cursor
=
contentResolver
.
query
(
baseUri
,
projection
,
null
,
null
,
null
)
if
(
cursor
!=
null
)
{
while
(
cursor
.
moveToNext
())
{
val
id
=
cursor
.
getInt
(
cursor
.
getColumnIndexOrThrow
(
MediaStore
.
Files
.
FileColumns
.
_ID
))
val
uri
=
Uri
.
withAppendedPath
(
baseUri
,
id
.
toString
())
val
path
=
cursor
.
getString
(
cursor
.
getColumnIndexOrThrow
(
MediaStore
.
Files
.
FileColumns
.
DATA
))
list
.
add
(
MediaBean
(
path
=
path
,
uri
=
uri
))
}
}
}
catch
(
e
:
Exception
)
{
}
finally
{
cursor
?.
close
()
}
return
list
}
fun
Context
.
getMediaVideoSize
():
Int
{
var
count
=
0
runCatching
{
...
...
app/src/main/res/layout/activity_media_browser.xml
0 → 100644
View file @
f87e78be
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:fitsSystemWindows=
"true"
android:orientation=
"vertical"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
<FrameLayout
android:id=
"@+id/fl_fanhui"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:padding=
"15dp"
tools:ignore=
"UselessParent"
>
<ImageView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:src=
"@mipmap/h_fanhui"
tools:ignore=
"ContentDescription"
/>
</FrameLayout>
<TextView
android:id=
"@+id/tv_title"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:textColor=
"@color/black"
android:textSize=
"19sp"
android:textStyle=
"bold"
tools:text=
"Picture"
/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv"
android:layout_width=
"match_parent"
android:layout_height=
"0dp"
android:layout_weight=
"1"
/>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_file.xml
View file @
f87e78be
...
...
@@ -276,6 +276,7 @@
tools:ignore=
"DisableBaselineAlignment"
>
<LinearLayout
android:id=
"@+id/ll_picture"
android:layout_width=
"0dp"
android:layout_height=
"match_parent"
android:layout_weight=
"1"
...
...
app/src/main/res/layout/item_media_picture.xml
0 → 100644
View file @
f87e78be
<?xml version="1.0" encoding="utf-8"?>
<ImageView
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/iv"
android:layout_width=
"match_parent"
android:layout_height=
"95dp"
android:layout_margin=
"3dp"
tools:ignore=
"ContentDescription"
/>
\ No newline at end of file
app/src/main/res/mipmap-xxhdpi/h_fanhui.png
0 → 100644
View file @
f87e78be
747 Bytes
app/src/main/res/values-land/dimens.xml
0 → 100644
View file @
f87e78be
<resources>
<dimen
name=
"fab_margin"
>
48dp
</dimen>
</resources>
\ No newline at end of file
app/src/main/res/values-w1240dp/dimens.xml
0 → 100644
View file @
f87e78be
<resources>
<dimen
name=
"fab_margin"
>
200dp
</dimen>
</resources>
\ No newline at end of file
app/src/main/res/values-w600dp/dimens.xml
0 → 100644
View file @
f87e78be
<resources>
<dimen
name=
"fab_margin"
>
48dp
</dimen>
</resources>
\ No newline at end of file
app/src/main/res/values/dimens.xml
View file @
f87e78be
...
...
@@ -8,4 +8,5 @@
<dimen
name=
"dp_15"
>
15dp
</dimen>
<dimen
name=
"dp_150"
>
150dp
</dimen>
<dimen
name=
"dp_30"
>
30dp
</dimen>
<dimen
name=
"fab_margin"
>
16dp
</dimen>
</resources>
\ No newline at end of file
gradle/libs.versions.toml
View file @
f87e78be
...
...
@@ -12,6 +12,8 @@ constraintlayout = "2.1.4"
navigationFragmentKtx
=
"2.6.0"
navigationUiKtx
=
"2.6.0"
viewbinding
=
"8.5.1"
navigationFragmentKtxVersion
=
"2.6.0"
navigationUiKtxVersion
=
"2.6.0"
[libraries]
androidx-core-ktx
=
{
group
=
"androidx.core"
,
name
=
"core-ktx"
,
version.ref
=
"coreKtx"
}
...
...
@@ -22,6 +24,8 @@ androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version
material
=
{
group
=
"com.google.android.material"
,
name
=
"material"
,
version.ref
=
"material"
}
androidx-activity
=
{
group
=
"androidx.activity"
,
name
=
"activity"
,
version.ref
=
"activity"
}
androidx-constraintlayout
=
{
group
=
"androidx.constraintlayout"
,
name
=
"constraintlayout"
,
version.ref
=
"constraintlayout"
}
androidx-navigation-fragment-ktx
=
{
group
=
"androidx.navigation"
,
name
=
"navigation-fragment-ktx"
,
version.ref
=
"navigationFragmentKtxVersion"
}
androidx-navigation-ui-ktx
=
{
group
=
"androidx.navigation"
,
name
=
"navigation-ui-ktx"
,
version.ref
=
"navigationUiKtxVersion"
}
[plugins]
androidApplication
=
{
id
=
"com.android.application"
,
version.ref
=
"agp"
}
...
...
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