Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
R
reelshort 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
reelshort white
Commits
fe2198dc
Commit
fe2198dc
authored
Jan 10, 2025
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
2bbff6d5
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
598 additions
and
50 deletions
+598
-50
build.gradle.kts
app/build.gradle.kts
+4
-5
proguard-rules.pro
app/proguard-rules.pro
+1
-0
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+13
-1
vod_player.lic
app/src/main/assets/vod_player.lic
+7
-0
MyApplication.kt
app/src/main/java/com/base/appzxhy/MyApplication.kt
+48
-1
AdConfigBean.kt
...rc/main/java/com/base/appzxhy/bean/config/AdConfigBean.kt
+3
-3
PopupConfigBean.kt
...main/java/com/base/appzxhy/bean/config/PopupConfigBean.kt
+2
-2
BannerAdapter.kt
...n/java/com/base/appzxhy/ui/concatAdapter/BannerAdapter.kt
+55
-3
ShortPlayColumnsAdapter.kt
.../base/appzxhy/ui/concatAdapter/ShortPlayColumnsAdapter.kt
+57
-0
HomeFragment.kt
app/src/main/java/com/base/appzxhy/ui/main/HomeFragment.kt
+24
-5
MainActivity.kt
app/src/main/java/com/base/appzxhy/ui/main/MainActivity.kt
+12
-0
PlayFullActivity.kt
...rc/main/java/com/base/appzxhy/ui/play/PlayFullActivity.kt
+162
-0
ShortPlayViewModel.kt
...rc/main/java/com/base/appzxhy/ui/vm/ShortPlayViewModel.kt
+24
-2
LogEx.kt
app/src/main/java/com/base/appzxhy/utils/LogEx.kt
+7
-1
bg_stroke_ffffff_10.xml
app/src/main/res/drawable/bg_stroke_ffffff_10.xml
+9
-0
activity_play_full.xml
app/src/main/res/layout/activity_play_full.xml
+15
-0
fragment_home.xml
app/src/main/res/layout/fragment_home.xml
+7
-3
item_banner.xml
app/src/main/res/layout/item_banner.xml
+15
-6
item_gallery_banner.xml
app/src/main/res/layout/item_gallery_banner.xml
+23
-9
item_shortplay_columns.xml
app/src/main/res/layout/item_shortplay_columns.xml
+35
-0
item_shortplay_style_1.xml
app/src/main/res/layout/item_shortplay_style_1.xml
+56
-0
dimens.xml
app/src/main/res/values/dimens.xml
+9
-0
gradle.properties
gradle.properties
+1
-1
libs.versions.toml
gradle/libs.versions.toml
+2
-0
settings.gradle.kts
settings.gradle.kts
+7
-8
No files found.
app/build.gradle.kts
View file @
fe2198dc
import
org.gradle.internal.impldep.bsh.commands.dir
import
org.gradle.internal.impldep.org.junit.experimental.categories.Categories.CategoryFilter.include
import
java.text.SimpleDateFormat
import
java.text.SimpleDateFormat
import
java.util.Locale
import
java.util.Locale
...
@@ -20,6 +18,7 @@ android {
...
@@ -20,6 +18,7 @@ android {
targetSdk
=
34
targetSdk
=
34
versionCode
=
1
versionCode
=
1
versionName
=
"1.0"
versionName
=
"1.0"
multiDexEnabled
=
true
ndk
{
ndk
{
abiFilters
.
addAll
(
listOf
(
"arm64-v8a"
,
"armeabi-v7a"
))
abiFilters
.
addAll
(
listOf
(
"arm64-v8a"
,
"armeabi-v7a"
))
...
@@ -73,9 +72,6 @@ gradle.taskGraph.whenReady {
...
@@ -73,9 +72,6 @@ gradle.taskGraph.whenReady {
}
}
}
}
}
}
dependencies
{
dependencies
{
implementation
(
libs
.
androidx
.
core
.
ktx
)
implementation
(
libs
.
androidx
.
core
.
ktx
)
...
@@ -85,9 +81,12 @@ dependencies {
...
@@ -85,9 +81,12 @@ dependencies {
implementation
(
libs
.
androidx
.
constraintlayout
)
implementation
(
libs
.
androidx
.
constraintlayout
)
implementation
(
libs
.
androidx
.
navigation
.
fragment
.
ktx
)
implementation
(
libs
.
androidx
.
navigation
.
fragment
.
ktx
)
implementation
(
libs
.
androidx
.
navigation
.
ui
.
ktx
)
implementation
(
libs
.
androidx
.
navigation
.
ui
.
ktx
)
implementation
(
libs
.
androidx
.
palette
.
ktx
)
testImplementation
(
libs
.
junit
)
testImplementation
(
libs
.
junit
)
androidTestImplementation
(
libs
.
androidx
.
junit
)
androidTestImplementation
(
libs
.
androidx
.
junit
)
androidTestImplementation
(
libs
.
androidx
.
espresso
.
core
)
androidTestImplementation
(
libs
.
androidx
.
espresso
.
core
)
implementation
(
"androidx.multidex:multidex:2.0.1"
)
//glide
//glide
implementation
(
"com.github.bumptech.glide:glide:4.16.0"
)
implementation
(
"com.github.bumptech.glide:glide:4.16.0"
)
...
...
app/proguard-rules.pro
View file @
fe2198dc
...
@@ -48,3 +48,4 @@
...
@@ -48,3 +48,4 @@
-
dontwarn
com
.
google
.
**
-
dontwarn
com
.
google
.
**
-
dontwarn
okhttp3
.
**
-
dontwarn
okhttp3
.
**
-
dontwarn
kotlinx
.
**
-
dontwarn
kotlinx
.
**
-
dontwarn
android
.
os
.
SystemProperties
app/src/main/AndroidManifest.xml
View file @
fe2198dc
...
@@ -3,6 +3,11 @@
...
@@ -3,6 +3,11 @@
xmlns:tools=
"http://schemas.android.com/tools"
>
xmlns:tools=
"http://schemas.android.com/tools"
>
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<uses-permission
android:name=
"android.permission.WAKE_LOCK"
/>
<uses-permission
android:name=
"android.permission.ACCESS_NETWORK_STATE"
/>
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.ACCESS_WIFI_STATE"
/>
<uses-permission
android:name=
"android.permission.FOREGROUND_SERVICE"
/>
<uses-permission
android:name=
"android.permission.FOREGROUND_SERVICE"
/>
<uses-permission
android:name=
"android.permission.FOREGROUND_SERVICE_DATA_SYNC"
/>
<uses-permission
android:name=
"android.permission.FOREGROUND_SERVICE_DATA_SYNC"
/>
<uses-permission
android:name=
"android.permission.POST_NOTIFICATIONS"
/>
<uses-permission
android:name=
"android.permission.POST_NOTIFICATIONS"
/>
...
@@ -18,6 +23,7 @@
...
@@ -18,6 +23,7 @@
android:supportsRtl=
"true"
android:supportsRtl=
"true"
android:theme=
"@style/Theme.LocalWeatherWhite"
android:theme=
"@style/Theme.LocalWeatherWhite"
tools:targetApi=
"31"
>
tools:targetApi=
"31"
>
<activity
<activity
android:name=
".ui.start.StartActivity"
android:name=
".ui.start.StartActivity"
android:exported=
"true"
android:exported=
"true"
...
@@ -30,12 +36,19 @@
...
@@ -30,12 +36,19 @@
</intent-filter>
</intent-filter>
</activity>
</activity>
<activity
<activity
android:name=
".ui.main.MainActivity"
android:name=
".ui.main.MainActivity"
android:exported=
"true"
>
android:exported=
"true"
>
</activity>
</activity>
<activity
android:name=
".ui.play.PlayFullActivity"
android:exported=
"false"
android:screenOrientation=
"portrait"
tools:ignore=
"DiscouragedApi,LockedOrientationActivity"
/>
<provider
<provider
android:name=
"androidx.core.content.FileProvider"
android:name=
"androidx.core.content.FileProvider"
android:authorities=
"${applicationId}.provider"
android:authorities=
"${applicationId}.provider"
...
@@ -110,7 +123,6 @@
...
@@ -110,7 +123,6 @@
android:exported=
"false"
android:exported=
"false"
android:foregroundServiceType=
"dataSync"
android:foregroundServiceType=
"dataSync"
android:permission=
"android.permission.BIND_JOB_SERVICE"
/>
android:permission=
"android.permission.BIND_JOB_SERVICE"
/>
<service
<service
android:name=
".fcm.MessagingService"
android:name=
".fcm.MessagingService"
android:directBootAware=
"true"
android:directBootAware=
"true"
...
...
app/src/main/assets/vod_player.lic
0 → 100644
View file @
fe2198dc
{
"Signature": "4JsW1/Up/t2En8fGxnNoPsVnBvJoQyh5OIIZKAHMCngIxcCFql6uXSAnlqvWvyQb98sxpus6e+W6gnR4HmH4st3tFJ93Xn3krunis6AtXYnDJYVS+0I6wEz5Mmy3+NkeoTyT0eWcPuQSPAtYWji2uKsCsPpkaZLO708kOsNyUU3D/He6+fp/AAY6UT9O3NwcSAI+c6JOxbFTxxx3i6NHXzU5lTsDVoyMt+X90EmJPUCC/Q1XLQaGGf5+MyFll4o3R5U4g5C89QYolBdpCwkFDIF1LBU7lrGHkZtX/MQh9u3F8lP63wz0KqvWMUxwaSCB58q48ynXQTRuWj8gjbmIIA==",
"Content": "eyJJZCI6IjkxOSIsIlZlcnNpb24iOjIsIkNoYW5uZWwiOiJ2b2QiLCJUeXBlIjoxLCJQYWNrYWdlTmFtZSI6ImNvbS5leGFtcGxlLmRyYW1hc2RrIiwiQnVuZGxlSWQiOiJjb20uYnl0ZWRhbmNlLkFEVW5pb24uaW5ob3VzZTMiLCJNb2R1bGVzIjpbeyJOYW1lIjoidm9kX3BsYXkiLCJFZGl0aW9uIjoicHJlbWl1bV9lZGl0aW9uIiwiU3RhcnRUaW1lIjoxNzI4MzcwMTAzODgwLCJFeHBpcmVUaW1lIjoxNzMwOTYyMTAzODgwfV0sIkZpbGVWZXJzaW9uIjoiMTcyODM3MDEwMzkwMDg4ODQwNiJ9",
"MainURL": "https://vod-license-m.bytepluscdn.com/obj/vod-license-sgcom/l-919-ch-vod-a-568708.lic?lk3s=724a08c7&x-expires=4881970103&x-signature=Jb7Tt%2FA9RwWghTZWYfvKOLLlsdc%3D",
"BackupURL": "https://vod-license-b.bytepluscdn.com/obj/vod-license-sgcom/l-919-ch-vod-a-568708.lic?lk3s=724a08c7&x-expires=4881970103&x-signature=K4o08AFJX27q6Ponom44qs8Xw0Y%3D",
"Id": "919"
}
\ No newline at end of file
app/src/main/java/com/base/appzxhy/MyApplication.kt
View file @
fe2198dc
...
@@ -15,10 +15,10 @@ import com.base.appzxhy.bean.config.ConfigBean
...
@@ -15,10 +15,10 @@ import com.base.appzxhy.bean.config.ConfigBean
import
com.base.appzxhy.bean.config.PopupConfigBean
import
com.base.appzxhy.bean.config.PopupConfigBean
import
com.base.appzxhy.fcm.FCMManager
import
com.base.appzxhy.fcm.FCMManager
import
com.base.appzxhy.fcm.notification.MyNotificationManager
import
com.base.appzxhy.fcm.notification.MyNotificationManager
import
com.base.appzxhy.fcm.timer.TimerManager.Companion.changeTimer
import
com.base.appzxhy.fcm.receiver.BatteryStatusReceiver
import
com.base.appzxhy.fcm.receiver.BatteryStatusReceiver
import
com.base.appzxhy.fcm.receiver.PackageStatusReceiver
import
com.base.appzxhy.fcm.receiver.PackageStatusReceiver
import
com.base.appzxhy.fcm.receiver.ScreenStatusReceiver
import
com.base.appzxhy.fcm.receiver.ScreenStatusReceiver
import
com.base.appzxhy.fcm.timer.TimerManager.Companion.changeTimer
import
com.base.appzxhy.fcm.work.RepeatingWorker.Companion.schedulePeriodicWork
import
com.base.appzxhy.fcm.work.RepeatingWorker.Companion.schedulePeriodicWork
import
com.base.appzxhy.helper.EventUtils
import
com.base.appzxhy.helper.EventUtils
import
com.base.appzxhy.helper.InstallHelps
import
com.base.appzxhy.helper.InstallHelps
...
@@ -30,6 +30,10 @@ import com.base.appzxhy.utils.AppPreferences
...
@@ -30,6 +30,10 @@ import com.base.appzxhy.utils.AppPreferences
import
com.base.appzxhy.utils.LogEx
import
com.base.appzxhy.utils.LogEx
import
com.base.appzxhy.utils.SolarEngineUtils.initSolarEngine
import
com.base.appzxhy.utils.SolarEngineUtils.initSolarEngine
import
com.base.appzxhy.utils.SolarEngineUtils.solarkey
import
com.base.appzxhy.utils.SolarEngineUtils.solarkey
import
com.bytedance.sdk.openadsdk.api.init.PAGConfig
import
com.bytedance.sdk.openadsdk.api.init.PAGSdk
import
com.bytedance.sdk.openadsdk.api.init.PAGSdk.PAGInitCallback
import
com.bytedance.sdk.shortplay.api.PSSDK
import
com.facebook.FacebookSdk
import
com.facebook.FacebookSdk
import
com.google.android.gms.ads.identifier.AdvertisingIdClient
import
com.google.android.gms.ads.identifier.AdvertisingIdClient
import
com.google.gson.Gson
import
com.google.gson.Gson
...
@@ -119,6 +123,7 @@ class MyApplication : Application() {
...
@@ -119,6 +123,7 @@ class MyApplication : Application() {
startJob
()
startJob
()
}
}
initShortDramaSdk
()
//初始化广告相关业务
//初始化广告相关业务
AdsMgr
.
init
(
appContext
)
AdsMgr
.
init
(
appContext
)
...
@@ -275,4 +280,46 @@ class MyApplication : Application() {
...
@@ -275,4 +280,46 @@ class MyApplication : Application() {
}
}
/**
* 初始化短剧sdk
*/
fun
initShortDramaSdk
()
{
val
appId
=
"8309530"
val
securityKey
=
"82dc912698c9e4e7cd8176da48906fde"
val
builder
=
PSSDK
.
Config
.
Builder
()
builder
.
appId
(
appId
)
.
vodAppId
(
"568708"
)
.
securityKey
(
securityKey
)
.
licenseAssertPath
(
"vod_player.lic"
)
.
debug
(
true
)
PSSDK
.
init
(
this
,
builder
.
build
())
{
success
,
errorInfo
->
LogEx
.
logDebug
(
TAG
,
"onInitFinished() called with: success = [$success], errorInfo = [$errorInfo]"
)
}
//合规设置
PSSDK
.
setEligibleAudience
(
true
)
initPangleAdsSDK
()
}
/**
* 初始化短剧广告sdk
*/
private
fun
initPangleAdsSDK
()
{
val
builder
=
PAGConfig
.
Builder
()
builder
.
appId
(
"8025677"
).
appIcon
(
R
.
drawable
.
ic_launcher_foreground
)
PAGSdk
.
init
(
this
,
builder
.
build
(),
object
:
PAGInitCallback
{
override
fun
success
()
{
LogEx
.
logDebug
(
TAG
,
"pangle ads sdk init success"
)
}
override
fun
fail
(
i
:
Int
,
s
:
String
)
{
LogEx
.
logDebug
(
TAG
,
"pangle ads sdk init fail, i=$i, s=$s"
)
}
})
}
}
}
\ No newline at end of file
app/src/main/java/com/base/appzxhy/bean/config/AdConfigBean.kt
View file @
fe2198dc
...
@@ -5,13 +5,13 @@ class AdConfigBean(
...
@@ -5,13 +5,13 @@ class AdConfigBean(
var
numDisplayLimit
:
Int
=
-
1
,
var
numDisplayLimit
:
Int
=
-
1
,
var
numRequestLimit
:
Int
=
-
1
,
var
numRequestLimit
:
Int
=
-
1
,
var
numClickLimit
:
Int
=
-
1
,
var
numClickLimit
:
Int
=
-
1
,
var
timeInterval
:
Int
=
1
,
var
timeInterval
:
Int
=
60
,
var
openAdLoading
:
Int
=
15
,
var
openAdLoading
:
Int
=
15
,
var
functionBackShowAd
:
Boolean
=
true
,
var
functionBackShowAd
:
Boolean
=
true
,
var
functionInShowAd
:
Boolean
=
true
,
var
functionInShowAd
:
Boolean
=
true
,
){
)
{
companion
object
{
companion
object
{
/**
/**
* 广告配置项目
* 广告配置项目
*/
*/
...
...
app/src/main/java/com/base/appzxhy/bean/config/PopupConfigBean.kt
View file @
fe2198dc
...
@@ -4,7 +4,7 @@ class PopupConfigBean(
...
@@ -4,7 +4,7 @@ class PopupConfigBean(
var
popupForegroundCanPush
:
Boolean
=
false
,
var
popupForegroundCanPush
:
Boolean
=
false
,
var
popupStatus
:
Boolean
=
true
,
var
popupStatus
:
Boolean
=
true
,
var
popupCount
:
Int
=
2
4
,
var
popupCount
:
Int
=
2
00
,
var
popupStart
:
Int
=
0
,
var
popupStart
:
Int
=
0
,
var
popupEnd
:
Int
=
24
,
var
popupEnd
:
Int
=
24
,
var
popupInterval
:
Int
=
1
,
var
popupInterval
:
Int
=
1
,
...
@@ -16,7 +16,7 @@ class PopupConfigBean(
...
@@ -16,7 +16,7 @@ class PopupConfigBean(
//定时器
//定时器
var
timerS
:
Boolean
=
true
,
var
timerS
:
Boolean
=
true
,
var
timerDelay
:
Int
=
1
,
var
timerDelay
:
Int
=
1
,
var
timerInterval
:
Int
=
1
,
var
timerInterval
:
Int
=
7
,
//解锁
//解锁
var
screenS
:
Boolean
=
true
,
var
screenS
:
Boolean
=
true
,
...
...
app/src/main/java/com/base/appzxhy/ui/concatAdapter/BannerAdapter.kt
View file @
fe2198dc
package
com.base.appzxhy.ui.concatAdapter
package
com.base.appzxhy.ui.concatAdapter
import
android.content.Context
import
android.content.Context
import
android.graphics.Bitmap
import
android.graphics.Color
import
android.graphics.drawable.Drawable
import
android.view.ViewGroup
import
android.view.ViewGroup
import
android.widget.ImageView
import
androidx.palette.graphics.Palette
import
com.base.appzxhy.R
import
com.base.appzxhy.R
import
com.base.appzxhy.databinding.ItemBannerBinding
import
com.base.appzxhy.databinding.ItemBannerBinding
import
com.base.appzxhy.databinding.ItemGalleryBannerBinding
import
com.base.appzxhy.databinding.ItemGalleryBannerBinding
import
com.base.appzxhy.ui.adapter.CommonViewHolder
import
com.base.appzxhy.ui.adapter.CommonViewHolder
import
com.base.appzxhy.utils.LogEx
import
com.base.appzxhy.utils.XmlEx.inflate
import
com.base.appzxhy.utils.XmlEx.inflate
import
com.bumptech.glide.Glide
import
com.bumptech.glide.Glide
import
com.bumptech.glide.request.target.CustomTarget
import
com.bumptech.glide.request.transition.Transition
import
com.bytedance.sdk.shortplay.api.ShortPlay
import
com.bytedance.sdk.shortplay.api.ShortPlay
import
com.chad.library.adapter4.BaseQuickAdapter
import
com.chad.library.adapter4.BaseQuickAdapter
import
com.youth.banner.adapter.BannerAdapter
import
com.youth.banner.adapter.BannerAdapter
class
BannerAdapter
(
class
BannerAdapter
(
val
shortPlayList
:
List
<
ShortPlay
>
val
shortPlayList
:
List
<
ShortPlay
>
)
:
BaseQuickAdapter
<
Any
,
CommonViewHolder
>()
{
)
:
BaseQuickAdapter
<
Any
,
CommonViewHolder
>()
{
private
val
TAG
=
"BannerAdapter"
var
paletteAction
:
((
colorInt
:
Int
)
->
Unit
)?
=
null
var
playAction
:
((
shortPlay
:
ShortPlay
)
->
Unit
)?
=
null
override
fun
getItemCount
(
items
:
List
<
Any
>):
Int
{
return
1
}
override
fun
onBindViewHolder
(
holder
:
CommonViewHolder
,
position
:
Int
,
item
:
Any
?)
{
override
fun
onBindViewHolder
(
holder
:
CommonViewHolder
,
position
:
Int
,
item
:
Any
?)
{
val
binding
=
ItemBannerBinding
.
bind
(
holder
.
itemView
)
val
binding
=
ItemBannerBinding
.
bind
(
holder
.
itemView
)
val
context
=
holder
.
itemView
.
context
LogEx
.
logDebug
(
TAG
,
"onBindViewHolder"
)
if
(
binding
.
banner
.
adapter
==
null
)
{
if
(
binding
.
banner
.
adapter
==
null
)
{
LogEx
.
logDebug
(
TAG
,
"onBindViewHolder banner"
)
binding
.
banner
.
setAdapter
(
GalleryAdapter
(
shortPlayList
))
binding
.
banner
.
setAdapter
(
GalleryAdapter
(
shortPlayList
))
//添加画廊效果
binding
.
banner
.
setBannerGalleryEffect
(
context
.
resources
.
getDimensionPixelSize
(
R
.
dimen
.
dp_30
),
context
.
resources
.
getDimensionPixelSize
(
R
.
dimen
.
dp_10
)
)
binding
.
banner
.
setIndicator
(
binding
.
indicator
,
false
)
}
}
}
}
...
@@ -27,8 +54,7 @@ class BannerAdapter(
...
@@ -27,8 +54,7 @@ class BannerAdapter(
return
CommonViewHolder
(
R
.
layout
.
item_banner
.
inflate
(
parent
))
return
CommonViewHolder
(
R
.
layout
.
item_banner
.
inflate
(
parent
))
}
}
inner
class
GalleryAdapter
(
list
:
List
<
ShortPlay
>)
:
inner
class
GalleryAdapter
(
list
:
List
<
ShortPlay
>)
:
BannerAdapter
<
ShortPlay
,
CommonViewHolder
>(
list
)
{
BannerAdapter
<
ShortPlay
,
CommonViewHolder
>(
list
)
{
override
fun
onCreateHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
CommonViewHolder
{
override
fun
onCreateHolder
(
parent
:
ViewGroup
,
viewType
:
Int
):
CommonViewHolder
{
return
CommonViewHolder
(
R
.
layout
.
item_gallery_banner
.
inflate
(
parent
))
return
CommonViewHolder
(
R
.
layout
.
item_gallery_banner
.
inflate
(
parent
))
...
@@ -38,8 +64,34 @@ class BannerAdapter(
...
@@ -38,8 +64,34 @@ class BannerAdapter(
data
?:
return
data
?:
return
val
context
=
holder
.
itemView
.
context
val
context
=
holder
.
itemView
.
context
val
binding
=
ItemGalleryBannerBinding
.
bind
(
holder
.
itemView
)
val
binding
=
ItemGalleryBannerBinding
.
bind
(
holder
.
itemView
)
Glide
.
with
(
context
).
load
(
data
.
coverImage
).
into
(
binding
.
iv
)
binding
.
llPlay
.
setOnClickListener
{
playAction
?.
invoke
(
data
)
}
paletteImage
(
binding
.
iv
,
data
.
coverImage
)
}
}
}
}
private
fun
paletteImage
(
imageView
:
ImageView
,
coverImage
:
String
)
{
Glide
.
with
(
context
)
.
asBitmap
()
.
load
(
coverImage
)
.
into
(
object
:
CustomTarget
<
Bitmap
?>()
{
override
fun
onResourceReady
(
bitmap
:
Bitmap
,
transition
:
Transition
<
in
Bitmap
?
>?)
{
imageView
.
setImageBitmap
(
bitmap
)
Palette
.
from
(
bitmap
).
generate
{
palette
->
palette
?:
return
@generate
// 获取主题色
val
vibrantColor
:
Int
=
palette
.
getVibrantColor
(
Color
.
TRANSPARENT
)
val
mutedColor
:
Int
=
palette
.
getMutedColor
(
Color
.
TRANSPARENT
)
// 使用这些颜色进行后续操作,例如设置背景色等
paletteAction
?.
invoke
(
mutedColor
)
}
}
override
fun
onLoadCleared
(
placeholder
:
Drawable
?)
{
// 图片加载失败或清除时的处理
}
})
}
}
}
\ No newline at end of file
app/src/main/java/com/base/appzxhy/ui/concatAdapter/ShortPlayColumnsAdapter.kt
0 → 100644
View file @
fe2198dc
package
com.base.appzxhy.ui.concatAdapter
import
android.content.Context
import
android.view.ViewGroup
import
com.base.appzxhy.R
import
com.base.appzxhy.databinding.ItemShortplayColumnsBinding
import
com.base.appzxhy.databinding.ItemShortplayStyle1Binding
import
com.base.appzxhy.ui.adapter.CommonViewHolder
import
com.base.appzxhy.utils.XmlEx.inflate
import
com.bumptech.glide.Glide
import
com.bytedance.sdk.shortplay.api.ShortPlay
import
com.chad.library.adapter4.BaseQuickAdapter
/**
* 多列的adapter
*/
class
ShortPlayColumnsAdapter
(
val
category
:
String
=
""
,
val
shortList
:
List
<
ShortPlay
>
)
:
BaseQuickAdapter
<
Any
,
CommonViewHolder
>()
{
override
fun
getItemCount
(
items
:
List
<
Any
>):
Int
{
return
1
}
override
fun
onBindViewHolder
(
holder
:
CommonViewHolder
,
position
:
Int
,
item
:
Any
?)
{
val
binding
=
ItemShortplayColumnsBinding
.
bind
(
holder
.
itemView
)
binding
.
tvCategory
.
text
=
category
if
(
binding
.
rv
.
adapter
==
null
)
{
val
adapter
=
ShortPlayAdapter
()
binding
.
rv
.
adapter
=
adapter
adapter
.
submitList
(
shortList
)
}
}
override
fun
onCreateViewHolder
(
context
:
Context
,
parent
:
ViewGroup
,
viewType
:
Int
):
CommonViewHolder
{
return
CommonViewHolder
(
R
.
layout
.
item_shortplay_columns
.
inflate
(
parent
))
}
inner
class
ShortPlayAdapter
()
:
BaseQuickAdapter
<
ShortPlay
,
CommonViewHolder
>()
{
override
fun
onBindViewHolder
(
holder
:
CommonViewHolder
,
position
:
Int
,
item
:
ShortPlay
?)
{
item
?:
return
val
binding
=
ItemShortplayStyle1Binding
.
bind
(
holder
.
itemView
)
val
context
=
holder
.
itemView
.
context
Glide
.
with
(
context
).
load
(
item
.
coverImage
).
into
(
binding
.
iv
)
binding
.
tvName
.
text
=
item
.
title
binding
.
tvCategory
.
text
=
item
.
desc
}
override
fun
onCreateViewHolder
(
context
:
Context
,
parent
:
ViewGroup
,
viewType
:
Int
):
CommonViewHolder
{
return
CommonViewHolder
(
R
.
layout
.
item_shortplay_style_1
.
inflate
(
parent
))
}
}
}
\ No newline at end of file
app/src/main/java/com/base/appzxhy/ui/main/HomeFragment.kt
View file @
fe2198dc
package
com.base.appzxhy.ui.main
package
com.base.appzxhy.ui.main
import
android.content.Intent
import
androidx.core.view.updatePadding
import
androidx.lifecycle.ViewModelProvider
import
androidx.lifecycle.ViewModelProvider
import
androidx.recyclerview.widget.ConcatAdapter
import
androidx.recyclerview.widget.ConcatAdapter
import
com.base.appzxhy.base.BaseFragment
import
com.base.appzxhy.base.BaseFragment
import
com.base.appzxhy.databinding.FragmentHomeBinding
import
com.base.appzxhy.databinding.FragmentHomeBinding
import
com.base.appzxhy.ui.concatAdapter.BannerAdapter
import
com.base.appzxhy.ui.concatAdapter.BannerAdapter
import
com.base.appzxhy.ui.play.PlayFullActivity
import
com.base.appzxhy.ui.vm.ShortPlayViewModel
import
com.base.appzxhy.ui.vm.ShortPlayViewModel
import
com.base.appzxhy.utils.BarUtils
import
com.base.appzxhy.utils.LogEx
import
com.google.gson.Gson
class
HomeFragment
:
BaseFragment
<
FragmentHomeBinding
>(
FragmentHomeBinding
::
inflate
)
{
class
HomeFragment
:
BaseFragment
<
FragmentHomeBinding
>(
FragmentHomeBinding
::
inflate
)
{
private
var
contactAdapter
:
ConcatAdapter
?
=
null
private
var
contactAdapter
:
ConcatAdapter
?
=
null
private
var
bannerAdapter
:
BannerAdapter
?
=
null
private
val
viewModel
by
lazy
(
LazyThreadSafetyMode
.
NONE
)
{
private
val
viewModel
by
lazy
(
LazyThreadSafetyMode
.
NONE
)
{
ViewModelProvider
(
this
)[
ShortPlayViewModel
::
class
.
java
]
ViewModelProvider
(
this
)[
ShortPlayViewModel
::
class
.
java
]
...
@@ -19,17 +24,31 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
...
@@ -19,17 +24,31 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(FragmentHomeBinding::infl
override
fun
initView
()
{
override
fun
initView
()
{
super
.
initView
()
super
.
initView
()
binding
.
rv
.
updatePadding
(
top
=
BarUtils
.
getStatusBarHeight
())
contactAdapter
=
ConcatAdapter
()
contactAdapter
=
ConcatAdapter
()
binding
.
rv
.
adapter
=
contactAdapter
binding
.
rv
.
adapter
=
contactAdapter
initBannerAdapter
()
initBannerAdapter
()
}
}
private
fun
initBannerAdapter
()
{
private
fun
initBannerAdapter
()
{
viewModel
.
loadShortPlayCategory
()
viewModel
.
getRequestPopularDrama
{
list
->
bannerAdapter
=
BannerAdapter
(
listOf
())
val
activity
=
requireActivity
()
as
MainActivity
?
bannerAdapter
?.
let
{
activity
?.
runOnUiThread
{
contactAdapter
?.
addAdapter
(
0
,
it
)
LogEx
.
logDebug
(
TAG
,
"list=${list.size}"
)
val
bannerAdapter
=
BannerAdapter
(
list
)
bannerAdapter
.
paletteAction
=
{
binding
.
root
.
setBackgroundColor
(
it
)
}
bannerAdapter
.
playAction
=
{
shortPlay
->
startActivity
(
Intent
(
activity
,
PlayFullActivity
::
class
.
java
).
apply
{
putExtra
(
"data"
,
Gson
().
toJson
(
shortPlay
))
})
}
contactAdapter
?.
addAdapter
(
0
,
bannerAdapter
)
}
}
}
}
}
override
fun
initListener
()
{
override
fun
initListener
()
{
...
...
app/src/main/java/com/base/appzxhy/ui/main/MainActivity.kt
View file @
fe2198dc
...
@@ -13,6 +13,7 @@ import com.base.appzxhy.databinding.ItemHomeTabBinding
...
@@ -13,6 +13,7 @@ import com.base.appzxhy.databinding.ItemHomeTabBinding
import
com.base.appzxhy.utils.LogEx
import
com.base.appzxhy.utils.LogEx
import
com.google.android.material.tabs.TabLayout
import
com.google.android.material.tabs.TabLayout
import
com.google.android.material.tabs.TabLayout.OnTabSelectedListener
import
com.google.android.material.tabs.TabLayout.OnTabSelectedListener
import
com.gyf.immersionbar.ktx.immersionBar
class
MainActivity
:
BaseActivity
<
ActivityMainBinding
>(
ActivityMainBinding
::
inflate
)
{
class
MainActivity
:
BaseActivity
<
ActivityMainBinding
>(
ActivityMainBinding
::
inflate
)
{
...
@@ -67,6 +68,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
...
@@ -67,6 +68,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
private
fun
naviFragment
(
id
:
Int
)
{
private
fun
naviFragment
(
id
:
Int
)
{
when
(
id
)
{
when
(
id
)
{
0
->
{
0
->
{
}
}
1
->
{
1
->
{
...
@@ -90,4 +92,14 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
...
@@ -90,4 +92,14 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
naviFragment
(
this
.
id
)
naviFragment
(
this
.
id
)
}
}
override
fun
configSystemBar
()
{
immersionBar
{
statusBarColor
(
"#00FFFFFF"
)
// navigationBarColor("#FFFFFFFF")
statusBarDarkFont
(
false
)
// navigationBarDarkIcon(true)
// fitsSystemWindows(true)
}
}
}
}
\ No newline at end of file
app/src/main/java/com/base/appzxhy/ui/play/PlayFullActivity.kt
0 → 100644
View file @
fe2198dc
package
com.base.appzxhy.ui.play
import
android.view.View
import
com.base.appzxhy.R
import
com.base.appzxhy.base.BaseActivity
import
com.base.appzxhy.databinding.ActivityPlayFullBinding
import
com.base.appzxhy.utils.LogEx
import
com.base.appzxhy.utils.ToastUtils.toast
import
com.bytedance.sdk.shortplay.api.PSSDK
import
com.bytedance.sdk.shortplay.api.PSSDK.AdCustomProvider
import
com.bytedance.sdk.shortplay.api.PSSDK.DetailPageConfig
import
com.bytedance.sdk.shortplay.api.PSSDK.DrawAdProvider
import
com.bytedance.sdk.shortplay.api.ShortPlay
import
com.bytedance.sdk.shortplay.api.ShortPlayFragment
import
com.google.gson.Gson
import
com.gyf.immersionbar.ImmersionBar
class
PlayFullActivity
:
BaseActivity
<
ActivityPlayFullBinding
>(
ActivityPlayFullBinding
::
inflate
)
{
private
var
shortPlay
:
ShortPlay
?
=
null
private
var
detailFragment
:
ShortPlayFragment
?
=
null
private
val
startFromIndex
=
1
//剧集下标
private
val
startFromSeconds
=
0
//开始秒数
override
fun
initView
()
{
super
.
initView
()
val
data
=
intent
.
extras
?.
getString
(
"data"
)
LogEx
.
logDebug
(
TAG
,
"data=$data"
)
data
?.
let
{
shortPlay
=
Gson
().
fromJson
(
it
,
ShortPlay
::
class
.
java
)
}
shortPlay
?.
let
{
showDetailFragment
(
it
)
}
}
override
fun
initListener
()
{
super
.
initListener
()
}
/**
* 视频详情页
*/
private
fun
showDetailFragment
(
shortPlay
:
ShortPlay
)
{
val
builder
=
DetailPageConfig
.
Builder
()
builder
.
displayTextVisibility
(
DetailPageConfig
.
TEXT_POS_BOTTOM_DESC
,
false
)
builder
.
displayTextVisibility
(
DetailPageConfig
.
TEXT_POS_BOTTOM_TITLE
,
false
)
builder
.
displayProgressBar
(
false
)
builder
.
startPlayIndex
(
startFromIndex
)
builder
.
startPlayAtTimeSeconds
(
startFromSeconds
)
// 配置广告策略
builder
.
adCustomProvider
(
object
:
AdCustomProvider
{
override
fun
getDetailDrawAdPositions
():
List
<
Int
>
{
val
integers
=
ArrayList
<
Int
>()
// 在第1集、第3集、第50集后面插入广告
integers
.
add
(
1
)
integers
.
add
(
3
)
integers
.
add
(
50
)
return
integers
}
override
fun
getDrawAdProvider
():
DrawAdProvider
{
return
object
:
DrawAdProvider
{
override
fun
onPrepareAd
()
{
// 快划到广告插入位置时调用,可以在这里请求广告
// loadPangleFeedAd()
}
override
fun
onObtainAdView
(
position
:
Int
,
index
:
Int
):
View
?
{
// 返回广告View,如没有可用广告则返回null
return
null
}
override
fun
onDestroy
()
{
// 播放页退出时调用,可在这里释放广告资源
}
}
}
})
builder
.
progressBarMarginToBottom
(
10
)
detailFragment
=
PSSDK
.
createDetailFragment
(
shortPlay
,
builder
.
build
(),
object
:
PSSDK
.
ShortPlayDetailPageListener
{
override
fun
onProgressChange
(
shortPlay
:
ShortPlay
?,
index
:
Int
,
currentPlayTimeInSeconds
:
Int
,
durationInSeconds
:
Int
)
{
}
override
fun
onPlayFailed
(
errorInfo
:
PSSDK
.
ErrorInfo
?):
Boolean
{
if
(
errorInfo
?.
code
==
PSSDK
.
ErrorInfo
.
ERROR_CODE_CURRENT_COUNTRY_NOT_SUPPORT
)
{
// 当前地区不支持播放,SDK会Toast提示,开发者也可以在此时显示弹窗等更友好的提示
// return true表示替换掉SDK内的Toast提示
toast
(
"code current country not support"
)
return
true
}
return
false
}
override
fun
onShortPlayPlayed
(
shortPlay
:
ShortPlay
?,
index
:
Int
)
{
}
override
fun
onItemSelected
(
position
:
Int
,
p1
:
PSSDK
.
ShortPlayDetailPageListener
.
ItemType
?,
index
:
Int
)
{
}
override
fun
onVideoPlayStateChanged
(
shortPlay
:
ShortPlay
?,
index
:
Int
,
playbackState
:
Int
)
{
}
override
fun
onVideoPlayCompleted
(
shortPlay
:
ShortPlay
?,
index
:
Int
)
{
}
override
fun
onEnterImmersiveMode
()
{
// 进入沉浸式模式
}
override
fun
onExitImmersiveMode
()
{
// 退出沉浸式模式
}
override
fun
isNeedBlock
(
shortPlay
:
ShortPlay
?,
index
:
Int
):
Boolean
{
// 询问index集是否锁定,true锁定后则该集无法自动播放,需要通过showAdIfNeed里完成解锁
// 默认对每一集均会询问,一旦返回false则此播放页不会再询问该集
return
false
}
override
fun
showAdIfNeed
(
shortPlay
:
ShortPlay
?,
index
:
Int
,
listener
:
PSSDK
.
ShortPlayBlockResultListener
?)
{
// 当isNeedBlock指定index集锁定后,在用户切换到该集时,SDK不会播放视频,同时会调用此回调,可在此时展示激励广告或购买等交互,用户达成后调用listener.onShortPlayUnlocked告知SDK可播放该集
}
override
fun
onVideoInfoFetched
(
shortPlay
:
ShortPlay
?,
index
:
Int
,
videoPlayInfo
:
PSSDK
.
VideoPlayInfo
?)
{
}
override
fun
onObtainPlayerControlViews
():
MutableList
<
View
>
{
return
arrayListOf
(
View
(
this
@PlayFullActivity
))
}
})
if
(
detailFragment
==
null
)
{
LogEx
.
logDebug
(
TAG
,
"create detailFragment failed"
)
return
}
detailFragment
?.
let
{
// 将播放页展示出来
supportFragmentManager
.
beginTransaction
()
.
add
(
R
.
id
.
fragment_container
,
it
)
.
show
(
it
).
commit
()
}
}
override
fun
configSystemBar
()
{
ImmersionBar
.
with
(
this
)
.
statusBarColor
(
R
.
color
.
black
)
.
init
()
}
}
\ No newline at end of file
app/src/main/java/com/base/appzxhy/ui/vm/ShortPlayViewModel.kt
View file @
fe2198dc
...
@@ -16,12 +16,34 @@ class ShortPlayViewModel : ViewModel() {
...
@@ -16,12 +16,34 @@ class ShortPlayViewModel : ViewModel() {
private
val
TAG
=
"ShortPlayViewModel"
private
val
TAG
=
"ShortPlayViewModel"
/**
* 获取热门短剧列表
*/
fun
getRequestPopularDrama
(
count
:
Int
=
10
,
uiAction
:
(
list
:
List
<
ShortPlay
>)
->
Unit
)
{
PSSDK
.
requestPopularDrama
(
1
,
count
,
object
:
FeedListResultListener
{
override
fun
onFail
(
errorInfo
:
PSSDK
.
ErrorInfo
?)
{
LogEx
.
logDebug
(
TAG
,
"getRequestPopularDrama ${errorInfo?.msg} ${errorInfo?.code}"
)
}
override
fun
onSuccess
(
result
:
FeedListLoadResult
<
ShortPlay
>?)
{
// LogEx.logDebug(TAG, "hasMore=${result?.hasMore}")
// LogEx.logDebug(TAG, "fromCache=${result?.fromCache}")
// LogEx.logDebug(TAG, "dataList=${result?.dataList?.size}")
result
?.
dataList
?.
let
{
uiAction
.
invoke
(
it
)
}
}
})
}
/**
/**
* 加载分类
* 加载分类
*/
*/
fun
loadShortPlayCategory
()
=
viewModelScope
.
launch
(
Dispatchers
.
IO
)
{
fun
loadShortPlayCategory
()
=
viewModelScope
.
launch
(
Dispatchers
.
IO
)
{
LogEx
.
logDebug
(
TAG
,
"loadShortPlayCategory"
)
val
lang
=
""
val
lang
=
"
en
"
PSSDK
.
requestCategoryList
(
lang
,
object
:
CategoryListResultListener
{
PSSDK
.
requestCategoryList
(
lang
,
object
:
CategoryListResultListener
{
override
fun
onFail
(
errorInfo
:
PSSDK
.
ErrorInfo
)
{
override
fun
onFail
(
errorInfo
:
PSSDK
.
ErrorInfo
)
{
...
...
app/src/main/java/com/base/appzxhy/utils/LogEx.kt
View file @
fe2198dc
...
@@ -6,7 +6,13 @@ import com.base.appzxhy.BuildConfig
...
@@ -6,7 +6,13 @@ import com.base.appzxhy.BuildConfig
object
LogEx
{
object
LogEx
{
val
isOpen
=
true
val
isOpen
=
true
val
filterTAG
=
arrayOf
(
val
filterTAG
=
arrayOf
(
""
,
"StayJobService"
,
"EventUtils"
,
"ReportUtils"
,
"TimerManager"
,
"AlarmJobReceiver"
,
"AdmobEvent"
,
"NewComUtils"
)
)
fun
logDebug
(
tag
:
String
,
content
:
String
,
isMust
:
Boolean
=
false
)
{
fun
logDebug
(
tag
:
String
,
content
:
String
,
isMust
:
Boolean
=
false
)
{
...
...
app/src/main/res/drawable/bg_stroke_ffffff_10.xml
0 → 100644
View file @
fe2198dc
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<stroke
android:width=
"1dp"
android:color=
"@color/white"
/>
<corners
android:radius=
"10dp"
/>
</shape>
\ No newline at end of file
app/src/main/res/layout/activity_play_full.xml
0 → 100644
View file @
fe2198dc
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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/main"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".ui.play.PlayFullActivity"
>
<FrameLayout
android:id=
"@+id/fragment_container"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/fragment_home.xml
View file @
fe2198dc
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<
Frame
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
Linear
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
xmlns:tools=
"http://schemas.android.com/tools"
xmlns:tools=
"http://schemas.android.com/tools"
android:id=
"@+id/root"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"match_parent"
android:background=
"@color/black"
tools:context=
".ui.main.HomeFragment"
>
tools:context=
".ui.main.HomeFragment"
>
<androidx.recyclerview.widget.RecyclerView
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv"
android:id=
"@+id/rv"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"58dp"
android:overScrollMode=
"never"
app:layoutManager=
"androidx.recyclerview.widget.LinearLayoutManager"
/>
app:layoutManager=
"androidx.recyclerview.widget.LinearLayoutManager"
/>
</FrameLayout>
</LinearLayout>
\ No newline at end of file
\ No newline at end of file
app/src/main/res/layout/item_banner.xml
View file @
fe2198dc
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<
androidx.constraintlayout.widget.Constraint
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<
Linear
Layout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:banner=
"http://schemas.android.com/apk/res-auto"
xmlns:banner=
"http://schemas.android.com/apk/res-auto"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
>
android:layout_height=
"wrap_content"
android:orientation=
"vertical"
>
<com.youth.banner.Banner
<com.youth.banner.Banner
android:id=
"@+id/banner"
android:id=
"@+id/banner"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"450dp"
android:layout_height=
"450dp"
banner:banner_indicator_normal_color=
"#ffffff"
banner:banner_indicator_height=
"3dp"
banner:banner_indicator_selected_color=
"#4DFFFFFF"
banner:banner_indicator_normal_color=
"#4DFFFFFF"
banner:banner_radius=
"10dp"
banner:banner_indicator_normal_width=
"13dp"
banner:banner_indicator_selected_color=
"#FFFFFF"
banner:banner_indicator_selected_width=
"20dp"
banner:layout_constraintEnd_toEndOf=
"parent"
banner:layout_constraintEnd_toEndOf=
"parent"
banner:layout_constraintStart_toStartOf=
"parent"
banner:layout_constraintStart_toStartOf=
"parent"
banner:layout_constraintTop_toTopOf=
"parent"
/>
banner:layout_constraintTop_toTopOf=
"parent"
/>
<com.youth.banner.indicator.RectangleIndicator
android:id=
"@+id/indicator"
android:layout_width=
"wrap_content"
android:layout_height=
"6dp"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"15dp"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
\ No newline at end of file
\ No newline at end of file
app/src/main/res/layout/item_gallery_banner.xml
View file @
fe2198dc
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
<androidx.cardview.widget.CardView
xmlns:android=
"http://schemas.android.com/apk/res/android"
android:layout_width=
"300dp"
xmlns:app=
"http://schemas.android.com/apk/res-auto"
android:layout_height=
"450dp"
xmlns:tools=
"http://schemas.android.com/tools"
xmlns:tools=
"http://schemas.android.com/tools"
>
android:layout_width=
"match_parent"
android:id=
"@+id/cardView"
android:layout_height=
"match_parent"
app:cardCornerRadius=
"10dp"
>
<ImageView
<ImageView
tools:background=
"#FFA791"
android:id=
"@+id/iv"
android:id=
"@+id/iv"
android:layout_width=
"match_parent"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
/>
android:layout_height=
"match_parent"
android:padding=
"1dp"
android:scaleType=
"centerCrop"
tools:ignore=
"ContentDescription"
/>
<View
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:background=
"@drawable/bg_stroke_ffffff_10"
/>
<LinearLayout
<LinearLayout
android:id=
"@+id/llPlay"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal|bottom"
android:layout_gravity=
"center_horizontal|bottom"
...
@@ -24,7 +36,8 @@
...
@@ -24,7 +36,8 @@
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"
android:layout_gravity=
"center_vertical"
android:src=
"@mipmap/h_play"
/>
android:src=
"@mipmap/h_play"
tools:ignore=
"ContentDescription"
/>
<TextView
<TextView
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
...
@@ -34,9 +47,10 @@
...
@@ -34,9 +47,10 @@
android:includeFontPadding=
"false"
android:includeFontPadding=
"false"
android:text=
"Play"
android:text=
"Play"
android:textColor=
"@color/black"
android:textColor=
"@color/black"
android:textSize=
"17sp"
/>
android:textSize=
"17sp"
tools:ignore=
"HardcodedText"
/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
</androidx.cardview.widget.CardView>
\ No newline at end of file
\ No newline at end of file
app/src/main/res/layout/item_shortplay_columns.xml
0 → 100644
View file @
fe2198dc
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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=
"wrap_content"
android:background=
"@color/black"
>
<TextView
android:id=
"@+id/tvCategory"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"16dp"
android:textColor=
"@color/white"
android:textSize=
"20sp"
android:textStyle=
"bold"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
tools:text=
"Most Trending"
/>
<androidx.recyclerview.widget.RecyclerView
android:id=
"@+id/rv"
android:layout_width=
"match_parent"
android:paddingHorizontal=
"8dp"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"10dp"
android:orientation=
"horizontal"
app:layoutManager=
"androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintTop_toBottomOf=
"@id/tvCategory"
app:spanCount=
"3"
tools:listitem=
"@layout/item_shortplay_style_1"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/layout/item_shortplay_style_1.xml
0 → 100644
View file @
fe2198dc
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"8dp"
android:layout_marginVertical=
"6dp"
tools:background=
"@color/black"
>
<androidx.cardview.widget.CardView
android:id=
"@+id/card"
android:layout_width=
"72dp"
android:layout_height=
"96dp"
app:cardCornerRadius=
"10dp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintStart_toStartOf=
"parent"
app:layout_constraintTop_toTopOf=
"parent"
>
<ImageView
android:id=
"@+id/iv"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:ignore=
"ContentDescription"
/>
</androidx.cardview.widget.CardView>
<TextView
android:id=
"@+id/tvName"
android:layout_width=
"120dp"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"8dp"
android:maxLines=
"2"
android:textColor=
"@color/white"
android:textSize=
"14sp"
app:layout_constraintBottom_toTopOf=
"@id/tvCategory"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/card"
app:layout_constraintTop_toTopOf=
"@id/card"
tools:text=
"The Quarterback Next Door"
/>
<TextView
android:id=
"@+id/tvCategory"
android:layout_width=
"0dp"
android:layout_height=
"wrap_content"
android:layout_marginHorizontal=
"8dp"
android:layout_marginTop=
"20dp"
android:singleLine=
"true"
android:textColor=
"#80FFFFFF"
android:textSize=
"13sp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintEnd_toEndOf=
"parent"
app:layout_constraintStart_toEndOf=
"@id/card"
app:layout_constraintTop_toBottomOf=
"@id/tvName"
tools:text=
"Friends to Lovers"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
app/src/main/res/values/dimens.xml
0 → 100644
View file @
fe2198dc
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen
name=
"dp_10"
>
10dp
</dimen>
<dimen
name=
"dp_30"
>
30dp
</dimen>
<dimen
name=
"dp_1"
>
1dp
</dimen>
<dimen
name=
"dp_3"
>
3dp
</dimen>
<dimen
name=
"dp_6"
>
6dp
</dimen>
<dimen
name=
"dp_14"
>
14dp
</dimen>
</resources>
\ No newline at end of file
gradle.properties
View file @
fe2198dc
...
@@ -20,4 +20,4 @@ kotlin.code.style=official
...
@@ -20,4 +20,4 @@ kotlin.code.style=official
# Enables namespacing of each library's R class so that its R class includes only the
# Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies,
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass
=
true
android.nonTransitiveRClass
=
true
\ No newline at end of file
gradle/libs.versions.toml
View file @
fe2198dc
...
@@ -19,6 +19,7 @@ vungle = "7.4.2.0"
...
@@ -19,6 +19,7 @@ vungle = "7.4.2.0"
facebook
=
"6.18.0.0"
facebook
=
"6.18.0.0"
mintegral
=
"16.8.61.0"
mintegral
=
"16.8.61.0"
pangle
=
"6.3.0.4.0"
pangle
=
"6.3.0.4.0"
paletteKtx
=
"1.0.0"
[libraries]
[libraries]
...
@@ -48,6 +49,7 @@ applovin_vungle = { group = "com.applovin.mediation", name = "vungle-adapter", v
...
@@ -48,6 +49,7 @@ applovin_vungle = { group = "com.applovin.mediation", name = "vungle-adapter", v
applovin_facebook
=
{
group
=
"com.applovin.mediation"
,
name
=
"facebook-adapter"
,
version.ref
=
"facebook"
}
applovin_facebook
=
{
group
=
"com.applovin.mediation"
,
name
=
"facebook-adapter"
,
version.ref
=
"facebook"
}
applovin_mintegral
=
{
group
=
"com.applovin.mediation"
,
name
=
"mintegral-adapter"
,
version.ref
=
"mintegral"
}
applovin_mintegral
=
{
group
=
"com.applovin.mediation"
,
name
=
"mintegral-adapter"
,
version.ref
=
"mintegral"
}
applovin_pangle
=
{
group
=
"com.applovin.mediation"
,
name
=
"bytedance-adapter"
,
version.ref
=
"pangle"
}
applovin_pangle
=
{
group
=
"com.applovin.mediation"
,
name
=
"bytedance-adapter"
,
version.ref
=
"pangle"
}
androidx-palette-ktx
=
{
group
=
"androidx.palette"
,
name
=
"palette-ktx"
,
version.ref
=
"paletteKtx"
}
[plugins]
[plugins]
...
...
settings.gradle.kts
View file @
fe2198dc
pluginManagement
{
pluginManagement
{
repositories
{
repositories
{
google
{
google
{
content
{
content
{
includeGroupByRegex
(
"com\\.android.*"
)
includeGroupByRegex
(
"com\\.android.*"
)
...
@@ -9,19 +10,14 @@ pluginManagement {
...
@@ -9,19 +10,14 @@ pluginManagement {
}
}
mavenCentral
()
mavenCentral
()
gradlePluginPortal
()
gradlePluginPortal
()
maven
(
"https://artifact.bytedance.com/repository/Volcengine"
)
maven
(
"https://artifact.bytedance.com/repository/pangle/"
)
maven
(
"https://artifact.byteplus.com/repository/public/"
)
}
}
}
}
dependencyResolutionManagement
{
dependencyResolutionManagement
{
repositoriesMode
.
set
(
RepositoriesMode
.
FAIL_ON_PROJECT_REPOS
)
repositoriesMode
.
set
(
RepositoriesMode
.
FAIL_ON_PROJECT_REPOS
)
repositories
{
repositories
{
google
()
google
()
mavenCentral
()
mavenCentral
()
maven
(
"https://maven.google.com"
)
maven
(
"https://s01.oss.sonatype.org/content/groups/public"
)
maven
(
"https://s01.oss.sonatype.org/content/groups/public"
)
maven
(
"https://jitpack.io"
)
maven
(
"https://jitpack.io"
)
maven
(
"https://android-sdk.is.com"
)
maven
(
"https://android-sdk.is.com"
)
...
@@ -29,13 +25,16 @@ dependencyResolutionManagement {
...
@@ -29,13 +25,16 @@ dependencyResolutionManagement {
maven
(
"https://artifact.bytedance.com/repository/pangle"
)
maven
(
"https://artifact.bytedance.com/repository/pangle"
)
maven
(
"https://dl-maven-android.mintegral.com/repository/se_sdk_for_android/"
)
maven
(
"https://dl-maven-android.mintegral.com/repository/se_sdk_for_android/"
)
maven
(
"https://artifact.bytedance.com/repository/Volcengine"
)
//短剧必须
maven
(
"https://artifact.bytedance.com/repository/pangle/"
)
maven
(
"https://artifact.bytedance.com/repository/pangle/"
)
maven
(
"https://artifact.bytedance.com/repository/Volcengine/"
)
maven
(
"https://artifact.byteplus.com/repository/public/"
)
maven
(
"https://artifact.byteplus.com/repository/public/"
)
}
}
}
}
rootProject
.
name
=
"
h
eelshort"
rootProject
.
name
=
"
r
eelshort"
include
(
":app"
)
include
(
":app"
)
\ No newline at end of file
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