Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
YDL-Component-Medical
Overview
Overview
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
杨凯
YDL-Component-Medical
Commits
1a10f407
Commit
1a10f407
authored
May 26, 2022
by
upwork.021
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/d/lancet/4.3.93_muse' into d/lancet/4.3.93_muse
parents
ab504794
674cf978
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
453 additions
and
158 deletions
+453
-158
config.gradle
config.gradle
+10
-10
build.gradle
m-fm/build.gradle
+0
-1
HomeMuseView.kt
m-home/src/ydl/java/com/yidianling/home/ui/view/HomeMuseView.kt
+26
-56
home_button_banner_view.xml
m-home/src/ydl/res/layout/home_button_banner_view.xml
+1
-1
home_muse_view.xml
m-home/src/ydl/res/layout/home_muse_view.xml
+7
-6
MeditationTimeOffActivity.kt
m-muse/src/main/java/com/yidianling/muse/activity/MeditationTimeOffActivity.kt
+1
-6
PlayMeditationActivity.kt
m-muse/src/main/java/com/yidianling/muse/activity/PlayMeditationActivity.kt
+59
-20
FloatViewTouchListener.kt
m-muse/src/main/java/com/yidianling/muse/helper/FloatViewTouchListener.kt
+0
-2
MediaPlayerManager.kt
m-muse/src/main/java/com/yidianling/muse/helper/MediaPlayerManager.kt
+65
-1
MeditationWindowService.kt
m-muse/src/main/java/com/yidianling/muse/service/MeditationWindowService.kt
+45
-16
MeditationFloatPermissionUtil.kt
m-muse/src/main/java/com/yidianling/muse/utils/MeditationFloatPermissionUtil.kt
+39
-0
layout_meditation_play_float_view.xml
m-muse/src/main/res/layout/layout_meditation_play_float_view.xml
+1
-1
MineFragment.kt
m-user/src/main/java/com/yidianling/user/mine/MineFragment.kt
+14
-16
YDLShareDialog.kt
ydl-platform/src/main/java/com/ydl/ydlcommon/view/dialog/YDLShareDialog.kt
+163
-22
platform_dialog_share.xml
ydl-platform/src/main/res/layout/platform_dialog_share.xml
+2
-0
ReloadUrlEvent.kt
ydl-webview/src/main/java/com/ydl/event/ReloadUrlEvent.kt
+13
-0
NewH5Activity.java
ydl-webview/src/main/java/com/ydl/webview/NewH5Activity.java
+7
-0
No files found.
config.gradle
View file @
1a10f407
...
...
@@ -8,13 +8,13 @@ ext {
"m-confide"
:
"0.0.49.74"
,
"m-consultant"
:
"0.0.60.25"
,
"m-fm"
:
"0.0.30.08"
,
"m-user"
:
"0.0.62.1
2
"
,
"m-home"
:
"0.0.23.
58
"
,
"m-user"
:
"0.0.62.1
6
"
,
"m-home"
:
"0.0.23.
61
"
,
"m-im"
:
"0.0.21.44"
,
"m-dynamic"
:
"0.0.7.73"
,
"m-article"
:
"0.0.0.10"
,
"m-muse"
:
"0.0.28.3
7
"
,
"m-muse"
:
"0.0.28.3
8
"
,
"m-tests"
:
"0.0.24.18"
,
"m-course"
:
"0.0.43.37"
,
...
...
@@ -35,10 +35,10 @@ ext {
//mdt 组件
"ydl-tuicore"
:
"0.0.23"
,
//第一步
"ydl-platform"
:
"0.0.41.
06
"
,
"ydl-platform"
:
"0.0.41.
15
"
,
//第二步 若干
"ydl-webview"
:
"0.0.38.7
5
"
,
"ydl-webview"
:
"0.0.38.7
9
"
,
"ydl-media"
:
"0.0.21.44"
,
"ydl-pay"
:
"0.0.18.19"
,
"m-audioim"
:
"0.0.49.29.90"
,
...
...
@@ -93,13 +93,13 @@ ext {
"m-confide"
:
"0.0.49.74"
,
"m-consultant"
:
"0.0.60.25"
,
"m-fm"
:
"0.0.30.08"
,
"m-user"
:
"0.0.62.1
2
"
,
"m-home"
:
"0.0.23.
58
"
,
"m-user"
:
"0.0.62.1
6
"
,
"m-home"
:
"0.0.23.
61
"
,
"m-im"
:
"0.0.21.44"
,
"m-dynamic"
:
"0.0.7.73"
,
"m-article"
:
"0.0.0.8"
,
"m-muse"
:
"0.0.28.3
7
"
,
"m-muse"
:
"0.0.28.3
8
"
,
"m-tests"
:
"0.0.24.18"
,
"m-course"
:
"0.0.43.37"
,
//-------------- 业务模块 API 层 --------------
...
...
@@ -118,10 +118,10 @@ ext {
//mdt组件
"ydl-tuicore"
:
"0.0.23"
,
//第一步
"ydl-platform"
:
"0.0.41.
06
"
,
"ydl-platform"
:
"0.0.41.
15
"
,
//第二步 若干
"ydl-webview"
:
"0.0.38.7
5
"
,
"ydl-webview"
:
"0.0.38.7
9
"
,
"ydl-media"
:
"0.0.21.44"
,
"ydl-pay"
:
"0.0.18.19"
,
"m-audioim"
:
"0.0.49.29.90"
,
...
...
m-fm/build.gradle
View file @
1a10f407
...
...
@@ -73,7 +73,6 @@ dependencies {
if
(
rootProject
.
ext
.
dev_mode
){
//开发时使用
api
project
(
":ydl-platform"
)
api
project
(
':m-user'
)
implementation
modularPublication
(
'com.ydl:m-user-api'
)
implementation
modularPublication
(
'com.ydl:m-dynamic-api'
)
implementation
project
(
':ydl-media'
)
...
...
m-home/src/ydl/java/com/yidianling/home/ui/view/HomeMuseView.kt
View file @
1a10f407
...
...
@@ -87,87 +87,58 @@ class HomeMuseView(private val mContext: Context, private var homeEvent: IHomeEv
}
iv_video_background
?.
setOnClickListener
{
// homeEvent?.museMoreClick(Gson().toJson(bean))
if
(
Utils
.
isFastClick
())
{
//防止连击
return
@setOnClickListener
}
if
(!
moreLink
.
isNullOrBlank
())
{
NewH5Activity
.
start
(
context
,
H5Params
(
moreLink
,
null
))
}
}
val
greeting
=
bean
.
mditationIndexInfo
?.
greetings
?:
"你好"
val
greeting
=
bean
.
mditationIndexInfo
?.
greetings
?:
"你好"
tv_time
.
text
=
greeting
val
slogan
=
if
(
bean
.
mditationIndexInfo
?.
desc
.
isNullOrBlank
()){
if
(
bean
.
mditationIndexInfo
?.
desc
.
isNullOrBlank
())
{
"无常的日子里,呼吸间拾起力量"
}
else
{
}
else
{
bean
.
mditationIndexInfo
?.
desc
}
tv_meditation_slogan
.
text
=
slogan
val
videoUrl
=
bean
.
mditationIndexInfo
?.
videoLink
val
videoThumbnailUrl
=
bean
.
mditationIndexInfo
?.
mditationIndexUrl
if
(
videoUrl
.
isNullOrBlank
()){
Glide
.
with
(
this
)
.
load
(
videoThumbnailUrl
)
.
transition
(
withCrossFade
())
.
into
(
iv_video_background
)
}
else
{
GlideApp
.
with
(
this
)
.
load
(
videoThumbnailUrl
)
.
transition
(
withCrossFade
())
.
into
(
iv_video_background
)
video_view
?.
setVideoPath
(
videoUrl
)
video_view
?.
setOnErrorListener
{
mp
,
what
,
extra
->
Glide
.
with
(
this
)
.
load
(
bean
.
mditationIndexInfo
?.
mditationIndexUrl
)
.
transition
(
withCrossFade
())
.
into
(
iv_video_background
)
true
}
video_view
?.
setOnPreparedListener
{
it
?.
setVideoScalingMode
(
MediaPlayer
.
VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING
)
video_view
?.
setOnInfoListener
{
mp
,
what
,
extra
->
if
(
what
==
MediaPlayer
.
MEDIA_INFO_VIDEO_RENDERING_START
){
iv_video_background
.
visibility
=
View
.
GONE
video_view
.
setBackgroundColor
(
Color
.
TRANSPARENT
)
}
true
video_view
?.
setVideoPath
(
videoUrl
)
video_view
?.
setOnErrorListener
{
mp
,
what
,
extra
->
true
}
video_view
?.
setOnPreparedListener
{
it
?.
setVideoScalingMode
(
MediaPlayer
.
VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING
)
video_view
?.
setOnInfoListener
{
mp
,
what
,
extra
->
if
(
what
==
MediaPlayer
.
MEDIA_INFO_VIDEO_RENDERING_START
)
{
video_view
.
setBackgroundColor
(
Color
.
TRANSPARENT
)
}
it
?.
start
()
it
?.
setVolume
(
0.0F
,
0.0F
)
true
}
video_view
?.
setOnCompletionListener
{
video_view
?.
start
()
}
it
?.
start
()
it
?.
setVolume
(
0.0F
,
0.0F
)
}
video_view
?.
setOnCompletionListener
{
video_view
?.
start
()
}
bean
.
mditationListResponse
?.
forEach
{
meditationTitles
.
add
(
it
.
comment
)
}
view_pager
.
adapter
=
MeditationViewPagerAdapter
(
mContext
,
bean
)
view_pager
.
adapter
=
MeditationViewPagerAdapter
(
mContext
,
bean
)
tab_layout
.
addOnTabSelectedListener
(
object
:
TabLayout
.
OnTabSelectedListener
{
tab_layout
.
addOnTabSelectedListener
(
object
:
TabLayout
.
OnTabSelectedListener
{
override
fun
onTabSelected
(
tab
:
TabLayout
.
Tab
?)
{
var
text
:
String
?
=
tab
?.
text
.
toString
().
trim
()
var
text
:
String
?
=
tab
?.
text
.
toString
().
trim
()
val
spStr
=
SpannableString
(
text
)
val
styleSpan
=
StyleSpan
(
Typeface
.
BOLD
)
spStr
.
setSpan
(
styleSpan
,
0
,
text
?.
length
?:
0
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
)
spStr
.
setSpan
(
styleSpan
,
0
,
text
?.
length
?:
0
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
)
tab
?.
text
=
spStr
}
override
fun
onTabUnselected
(
tab
:
TabLayout
.
Tab
?)
{
var
text
:
String
?
=
tab
?.
text
.
toString
().
trim
()
var
text
:
String
?
=
tab
?.
text
.
toString
().
trim
()
val
spStr
=
SpannableString
(
text
)
val
styleSpan
=
StyleSpan
(
Typeface
.
NORMAL
)
spStr
.
setSpan
(
styleSpan
,
0
,
text
?.
length
?:
0
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
)
spStr
.
setSpan
(
styleSpan
,
0
,
text
?.
length
?:
0
,
Spanned
.
SPAN_INCLUSIVE_EXCLUSIVE
)
tab
?.
text
=
spStr
}
...
...
@@ -177,9 +148,8 @@ class HomeMuseView(private val mContext: Context, private var homeEvent: IHomeEv
})
TabLayoutMediator
(
tab_layout
,
view_pager
){
tab
,
position
->
tab
.
text
=
meditationTitles
[
position
]
TabLayoutMediator
(
tab_layout
,
view_pager
)
{
tab
,
position
->
tab
.
text
=
meditationTitles
[
position
]
}.
attach
()
}
...
...
m-home/src/ydl/res/layout/home_button_banner_view.xml
View file @
1a10f407
...
...
@@ -53,7 +53,7 @@
android:layout_height=
"wrap_content"
android:textColor=
"@color/platform_color_FFFFFF"
android:textSize=
"@dimen/platform_dp_12"
android:text=
"
应有尽有
"
/>
android:text=
"
抑郁测量
"
/>
</RelativeLayout>
<RelativeLayout
...
...
m-home/src/ydl/res/layout/home_muse_view.xml
View file @
1a10f407
...
...
@@ -21,7 +21,8 @@
<FrameLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
android:layout_height=
"match_parent"
android:background=
"#999999"
>
<com.yidianling.home.widget.AdaptiveVideoView
android:id=
"@+id/video_view"
...
...
@@ -30,11 +31,11 @@
android:focusable=
"false"
android:focusableInTouchMode=
"false"
/>
<ImageView
android:id=
"@+id/iv_video_background"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:scaleType=
"fitCenter"
/
>
<!-- <ImageView-->
<!-- android:id="@+id/iv_video_background"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- android:scaleType="fitCenter"/>--
>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=
"match_parent"
...
...
m-muse/src/main/java/com/yidianling/muse/activity/MeditationTimeOffActivity.kt
View file @
1a10f407
...
...
@@ -4,7 +4,6 @@ import android.content.Intent
import
android.os.Bundle
import
com.blankj.utilcode.util.SPUtils
import
com.ydl.ydlcommon.base.BaseActivity
import
com.ydl.ydlcommon.bean.StatusBarOptions
import
com.ydl.ydlcommon.utils.StatusBarUtils
import
com.ydl.ydlcommon.utils.remind.ToastHelper
import
com.yidianling.muse.R
...
...
@@ -85,12 +84,8 @@ class MeditationTimeOffActivity : BaseActivity() {
}
override
fun
getStatusViewOptions
():
StatusBarOptions
{
return
StatusBarOptions
(
true
,
false
)
}
override
fun
initDataAndEvent
()
{
StatusBarUtils
.
setWindowStatusBarColor
(
this
,
R
.
color
.
platform_main_theme
)
}
override
fun
layoutResId
():
Int
{
...
...
m-muse/src/main/java/com/yidianling/muse/activity/PlayMeditationActivity.kt
View file @
1a10f407
...
...
@@ -12,10 +12,10 @@ import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
import
com.ydl.webview.H5Params
import
com.ydl.webview.NewH5Activity
import
com.ydl.ydlcommon.base.BaseActivity
import
com.ydl.ydlcommon.bean.StatusBarOptions
import
com.ydl.ydlcommon.data.http.ThrowableConsumer
import
com.ydl.ydlcommon.event.MeditationEvent
import
com.ydl.ydlcommon.modular.ModularServiceManager
import
com.ydl.ydlcommon.utils.StatusBarUtils
import
com.ydl.ydlcommon.utils.StatusBarUtils.Companion.setTransparentForImageView
import
com.ydl.ydlcommon.utils.StatusBarUtils.Companion.statusBarLightMode
import
com.ydl.ydlcommon.utils.Utils
...
...
@@ -28,6 +28,7 @@ import com.yidianling.muse.dialog.ChooseMusicDialog
import
com.yidianling.muse.event.MeditationFloatEvent
import
com.yidianling.muse.helper.MediaPlayerManager
import
com.yidianling.muse.utils.MediaPlayerTimeUtil
import
com.yidianling.muse.utils.MeditationFloatPermissionUtil
import
com.yidianling.muse.widget.QuitMeditationDialog
import
com.yidianling.muse.widget.ShareMeditationDialog
import
com.yidianling.user.api.service.IUserService
...
...
@@ -63,6 +64,7 @@ class PlayMeditationActivity : BaseActivity() {
private
var
meditations
=
mutableListOf
<
MeditationPlayModuleBean
.
MeditationDetail
>()
private
var
currentMeditation
:
MeditationPlayModuleBean
.
MeditationDetail
?
=
null
private
var
currentMeditationIndex
=
0
private
var
shareTitle
=
""
private
var
shareUrl
=
""
...
...
@@ -86,6 +88,9 @@ class PlayMeditationActivity : BaseActivity() {
private
var
mObservable
:
Observable
<
Long
>?
=
null
private
var
mObserver
:
Observer
<
Long
>?
=
null
private
var
status
=
0
private
var
buried
:
String
?
=
null
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
setTransparentForImageView
(
this
,
null
)
statusBarLightMode
(
this
)
...
...
@@ -106,7 +111,7 @@ class PlayMeditationActivity : BaseActivity() {
}
override
fun
initDataAndEvent
()
{
StatusBarUtils
.
setWindowStatusBarColor
(
this
,
R
.
color
.
platform_main_theme
)
}
private
fun
getData
()
{
...
...
@@ -114,7 +119,6 @@ class PlayMeditationActivity : BaseActivity() {
if
(
meditationType
==
null
||
(
mediaId
==
null
&&
meditationType
!=
0
))
{
return
}
// 声音详情
if
(
meditationType
==
0
)
{
MuseHttp
.
getInstance
().
getPureMusicPlayDetail
(
...
...
@@ -143,7 +147,9 @@ class PlayMeditationActivity : BaseActivity() {
businessType
=
meditationPlayBean
.
businessType
val
status
=
meditationPlayBean
.
status
status
=
meditationPlayBean
.
status
buried
=
meditationPlayBean
.
buried
collected
=
status
==
1
...
...
@@ -213,7 +219,9 @@ class PlayMeditationActivity : BaseActivity() {
businessType
=
meditationPlayBean
.
businessType
val
status
=
meditationPlayBean
.
status
status
=
meditationPlayBean
.
status
buried
=
meditationPlayBean
.
buried
collected
=
status
==
1
...
...
@@ -332,10 +340,6 @@ class PlayMeditationActivity : BaseActivity() {
return
R
.
layout
.
activity_play_meditation
}
override
fun
getStatusViewOptions
():
StatusBarOptions
{
return
StatusBarOptions
(
true
,
false
)
}
private
fun
initView
()
{
shareImageUrl
=
mediaCoverUrl
...
...
@@ -381,10 +385,6 @@ class PlayMeditationActivity : BaseActivity() {
}
iv_back
.
setOnClickListener
{
// MeditationViewModel.isVisible.postValue(true)
// MeditationViewModel.meditation.postValue(currentMeditation)
// MeditationViewModel.meditations.postValue(meditations as ArrayList<MeditationPlayModuleBean.MeditationDetail>)
// LogUtil.d("Lancet=======","post $currentMeditation")
val
event
=
MeditationFloatEvent
(
true
,
meditationDetail
=
currentMeditation
)
EventBus
.
getDefault
().
post
(
event
)
...
...
@@ -586,10 +586,46 @@ class PlayMeditationActivity : BaseActivity() {
})
initPlayCompletionListener
()
}
private
fun
initPlayCompletionListener
(
isLoop
:
Boolean
=
false
,
isSingle
:
Boolean
=
false
){
mMediaPlayer
?.
setOnCompletionListener
{
postPlayRecord
(
isQuit
=
0
,
playTime
=
(
seekbar_play_progress
.
progress
/
1000.00
).
roundToInt
(),
isComplete
=
1
)
if
(
isLoop
){
if
(
isSingle
||
meditations
.
size
==
1
){
MediaPlayerManager
.
getInstance
(
this
)
?.
setAudioPath
(
currentMeditation
?.
mediaUrl
?:
""
)
}
else
{
currentMeditationIndex
=
meditations
.
indexOf
(
currentMeditation
)
if
(
currentMeditationIndex
==
meditations
.
size
-
1
){
currentMeditationIndex
=
0
}
else
{
currentMeditationIndex
++
}
currentMeditation
=
meditations
[
currentMeditationIndex
]
val
event
=
MeditationEvent
(
currentMeditation
?.
mediaId
?.
toInt
()
?:
0
,
meditationId
?:
0L
,
meditationType
?:
0
,
businessType
,
status
=
status
,
buried
=
buried
?:
""
,
mediaUrl
=
currentMeditation
?.
mediaUrl
?:
""
,
mediaCoverUrl
=
currentMeditation
?.
coverImageUrl
?:
""
,
title
=
currentMeditation
?.
title
?:
""
,
desc
=
currentMeditation
?.
desc
?:
""
)
EventBus
.
getDefault
().
post
(
event
)
}
}
isPlaying
=
if
(
it
.
isPlaying
)
{
exo_play
.
setImageResource
(
R
.
drawable
.
icon_pause_play
)
true
...
...
@@ -601,7 +637,6 @@ class PlayMeditationActivity : BaseActivity() {
mMediaPlayer
?.
pause
()
}
}
}
private
fun
postPlayRecord
(
isQuit
:
Int
,
playTime
:
Int
,
isComplete
:
Int
)
{
...
...
@@ -707,22 +742,24 @@ class PlayMeditationActivity : BaseActivity() {
val
minute
=
data
?.
extras
?.
getInt
(
"TIME_OFF_MINUTE"
,
0
)
if
(
minute
!=
null
&&
minute
>
0
)
{
if
(
meditationType
==
0
)
{
initPlayCompletionListener
(
isLoop
=
true
,
isSingle
=
true
)
tv_time_off_pure_music
.
visibility
=
View
.
VISIBLE
tv_time_off
.
visibility
=
View
.
GONE
mDisposable
?.
dispose
()
initRxTimeOff
((
minute
*
60
*
1000
).
toLong
(),
0
)
}
else
{
initPlayCompletionListener
(
isLoop
=
true
,
isSingle
=
false
)
tv_time_off_pure_music
.
visibility
=
View
.
GONE
tv_time_off
.
visibility
=
View
.
VISIBLE
mDisposable
?.
dispose
()
initRxTimeOff
((
minute
*
60
*
1000
).
toLong
(),
1
)
}
}
else
{
initPlayCompletionListener
()
mDisposable
?.
dispose
()
tv_time_off
.
visibility
=
View
.
GONE
tv_time_off_pure_music
.
visibility
=
View
.
GONE
mMediaPlayer
?.
isLooping
=
false
}
}
}
...
...
@@ -801,19 +838,21 @@ class PlayMeditationActivity : BaseActivity() {
if
(
event
.
mediaUrl
==
MediaPlayerManager
.
getInstance
(
this
)
?.
getAudioPath
())
{
return
}
initMediaPlayer
(
event
.
mediaUrl
,
0
)
}
}
override
fun
onBackPressed
()
{
val
event
=
MeditationFloatEvent
(
true
,
meditationDetail
=
currentMeditation
)
EventBus
.
getDefault
().
post
(
event
)
super
.
onBackPressed
()
}
override
fun
onDestroy
()
{
super
.
onDestroy
()
if
(
EventBus
.
getDefault
().
isRegistered
(
this
))
{
EventBus
.
getDefault
().
unregister
(
this
)
}
mDisposable
?.
dispose
()
mTimer
.
cancel
()
}
...
...
m-muse/src/main/java/com/yidianling/muse/helper/FloatViewTouchListener.kt
View file @
1a10f407
...
...
@@ -27,8 +27,6 @@ class FloatViewTouchListener(val wl: WindowManager.LayoutParams, val windowManag
x
+=
movedX
y
+=
movedY
}
LogUtil
.
d
(
"Lancet======="
,
"nowY=====$nowY"
)
LogUtil
.
d
(
"Lancet======="
,
"movedY=====$movedY"
)
//更新悬浮窗位置
windowManager
.
updateViewLayout
(
view
,
wl
)
}
...
...
m-muse/src/main/java/com/yidianling/muse/helper/MediaPlayerManager.kt
View file @
1a10f407
...
...
@@ -4,13 +4,18 @@ import android.content.Context
import
android.media.AudioAttributes
import
android.media.AudioManager
import
android.media.MediaPlayer
import
com.yidianling.muse.helper.MediaPlayerManager.MediaPlayCallBack.Companion.TYPE_LIST
import
kotlin.properties.Delegates
class
MediaPlayerManager
private
constructor
()
{
private
var
listener
:
OnMediaPlayerManagerListener
?=
null
fun
setAudioPath
(
path
:
String
){
private
var
mCurrentListIndex
=
0
private
var
mMediaPlayCallBack
:
MediaPlayCallBack
?=
null
private
var
mAudioPaths
=
mutableListOf
<
String
>()
fun
setAudioPath
(
path
:
String
,
isLoop
:
Boolean
=
false
){
val
attrs
=
AudioAttributes
.
Builder
()
.
setContentType
(
AudioAttributes
.
CONTENT_TYPE_MUSIC
)
...
...
@@ -26,6 +31,29 @@ class MediaPlayerManager private constructor() {
mMediaPlayer
?.
setOnPreparedListener
{
listener
?.
onPrepared
(
it
)
}
// mMediaPlayer?.setOnCompletionListener {
// if (it !=null){
// it.stop()
// it.release()
// }
//
// mMediaPlayer = null
// if (mAudioPaths!=null){
// mCurrentListIndex++
// if(mCurrentListIndex<mAudioPaths.size){
// mMediaPlayCallBack?.mediaPlayCallBack(TYPE_LIST,
// MediaPlayCallBack.STATE_CUT, mCurrentListIndex)
// setAudioPath(mAudioPaths[mCurrentListIndex])
// }else{
// mMediaPlayCallBack?.mediaPlayCallBack(TYPE_LIST,
// MediaPlayCallBack.STATE_STOP,mAudioPaths.size
// )
// }
// }
//
// }
}
fun
getMediaPlayer
():
MediaPlayer
?
=
mMediaPlayer
...
...
@@ -59,6 +87,22 @@ class MediaPlayerManager private constructor() {
this
.
listener
=
listener
}
fun
startPlayList
(
audioPaths
:
ArrayList
<
String
>,
playCallBack
:
MediaPlayCallBack
,
startIndex
:
Int
){
if
(
audioPaths
.
isNullOrEmpty
()
||
startIndex
>=
mAudioPaths
.
size
){
return
}
mMediaPlayCallBack
=
playCallBack
mAudioPaths
=
audioPaths
mCurrentListIndex
=
startIndex
mMediaPlayCallBack
?.
mediaPlayCallBack
(
TYPE_LIST
,
MediaPlayCallBack
.
STATE_START
,
mCurrentListIndex
)
setAudioPath
(
mAudioPaths
[
mCurrentListIndex
])
}
companion
object
{
private
var
mContext
:
Context
by
Delegates
.
notNull
()
...
...
@@ -90,4 +134,23 @@ class MediaPlayerManager private constructor() {
fun
onPrepared
(
mediaPlayer
:
MediaPlayer
)
}
interface
MediaPlayCallBack
{
companion
object
{
const
val
STATE_START
=
0
const
val
STATE_PLAY
=
1
const
val
STATE_PAUSE
=
2
const
val
STATE_STOP
=
3
const
val
STATE_CUT
=
4
const
val
TYPE_SINGLE
=
0
const
val
TYPE_LIST
=
1
}
fun
mediaPlayCallBack
(
type
:
Int
,
state
:
Int
,
position
:
Int
){}
}
}
\ No newline at end of file
m-muse/src/main/java/com/yidianling/muse/service/MeditationWindowService.kt
View file @
1a10f407
package
com.yidianling.muse.service
import
android.app.NotificationChannel
import
android.app.NotificationManager
import
android.content.ComponentName
import
android.content.Context
import
android.content.Intent
import
android.content.Intent.FLAG_ACTIVITY_NEW_TASK
import
android.graphics.PixelFormat
...
...
@@ -13,6 +17,7 @@ import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import
android.view.WindowManager
import
android.widget.ImageView
import
android.widget.TextView
import
androidx.core.app.NotificationCompat
import
androidx.lifecycle.LifecycleService
import
com.bumptech.glide.Glide
import
com.ydl.ydlcommon.data.http.ThrowableConsumer
...
...
@@ -21,7 +26,6 @@ import com.yidianling.muse.R
import
com.yidianling.muse.activity.PlayMeditationActivity
import
com.yidianling.muse.bean.MeditationPlayModuleBean
import
com.yidianling.muse.event.MeditationFloatEvent
import
com.yidianling.muse.helper.FloatViewTouchListener
import
com.yidianling.muse.helper.MediaPlayerManager
import
de.greenrobot.event.EventBus
import
io.feeeei.circleseekbar.CircleSeekBar
...
...
@@ -51,6 +55,18 @@ class MeditationWindowService : LifecycleService() {
override
fun
onCreate
()
{
super
.
onCreate
()
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
ECLAIR
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
O
){
val
manager
=
getSystemService
(
Context
.
NOTIFICATION_SERVICE
)
as
NotificationManager
val
channel
=
NotificationChannel
(
"壹点灵"
,
"play"
,
NotificationManager
.
IMPORTANCE_LOW
)
manager
.
createNotificationChannel
(
channel
)
val
notification
=
NotificationCompat
.
Builder
(
this
,
"壹点灵"
).
build
()
startForeground
(
1
,
notification
)
}
}
EventBus
.
getDefault
().
register
(
this
)
}
...
...
@@ -66,30 +82,23 @@ class MeditationWindowService : LifecycleService() {
}
flags
=
WindowManager
.
LayoutParams
.
FLAG_NOT_TOUCH_MODAL
or
WindowManager
.
LayoutParams
.
FLAG_NOT_FOCUSABLE
format
=
PixelFormat
.
RGBA_8888
width
=
outMetrics
.
widthPixels
-
dp2px
(
32F
)
height
=
WRAP_CONTENT
gravity
=
Gravity
.
CENTER_HORIZONTAL
or
Gravity
.
TOP
gravity
=
Gravity
.
CENTER_HORIZONTAL
or
Gravity
.
BOTTOM
x
=
outMetrics
.
widthPixels
/
2
-
width
/
2
y
=
outMetrics
.
heightPixels
-
height
*
2
}
floatRootView
=
LayoutInflater
.
from
(
this
).
inflate
(
R
.
layout
.
layout_meditation_play_float_view
,
null
)
ivClose
=
floatRootView
?.
findViewById
(
R
.
id
.
iv_close
)
ivCover
=
floatRootView
?.
findViewById
(
R
.
id
.
iv_cover
)
tvTitle
=
floatRootView
?.
findViewById
(
R
.
id
.
tv_title
)
ivProgress
=
floatRootView
?.
findViewById
(
R
.
id
.
progress_bar
)
ivPlayOrPause
=
floatRootView
?.
findViewById
(
R
.
id
.
iv_play_status
)
floatRootView
?.
setOnTouchListener
(
FloatViewTouchListener
(
layoutParams
,
mWindowManager
))
// floatRootView?.setOnTouchListener(FloatViewTouchListener(layoutParams, mWindowManager))
mWindowManager
.
addView
(
floatRootView
,
layoutParams
)
windowIsShow
=
true
}
...
...
@@ -106,9 +115,7 @@ class MeditationWindowService : LifecycleService() {
}
private
fun
updateFloatView
(
meditation
:
MeditationPlayModuleBean
.
MeditationDetail
)
{
mMediaPlayer
=
MediaPlayerManager
.
getInstance
(
this
)
?.
getMediaPlayer
()
floatRootView
?.
setOnClickListener
{
val
intent
=
Intent
(
this
,
PlayMeditationActivity
::
class
.
java
)
intent
.
putExtra
(
"MEDIA_ID"
,
meditation
.
mediaId
)
...
...
@@ -120,7 +127,6 @@ class MeditationWindowService : LifecycleService() {
}
if
(
mMediaPlayer
?.
isPlaying
==
true
)
{
ivPlayOrPause
?.
setImageResource
(
R
.
drawable
.
icon_meditation_float_play
)
}
else
{
ivPlayOrPause
?.
setImageResource
(
R
.
drawable
.
icon_meditation_float_pause
)
...
...
@@ -180,6 +186,11 @@ class MeditationWindowService : LifecycleService() {
meditation
.
meditationId
.
toInt
(),
meditation
.
mediaId
?:
0L
)
if
(
mMediaPlayer
?.
isPlaying
==
true
)
{
ivPlayOrPause
?.
setImageResource
(
R
.
drawable
.
icon_meditation_float_play
)
}
else
{
ivPlayOrPause
?.
setImageResource
(
R
.
drawable
.
icon_meditation_float_pause
)
}
}
ivClose
?.
setOnClickListener
{
...
...
@@ -199,17 +210,35 @@ class MeditationWindowService : LifecycleService() {
if
(
floatRootView
!=
null
&&
floatRootView
?.
windowToken
!=
null
)
{
if
(
mWindowManager
!=
null
)
{
windowIsShow
=
false
mTimer
.
cancel
()
mWindowManager
.
removeViewImmediate
(
floatRootView
)
}
}
}
override
fun
onStartCommand
(
intent
:
Intent
?,
flags
:
Int
,
startId
:
Int
):
Int
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
ECLAIR
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
O
){
startForegroundService
(
intent
)
}
else
{
startService
(
intent
)
}
}
return
super
.
onStartCommand
(
intent
,
flags
,
startId
)
}
override
fun
startForegroundService
(
service
:
Intent
?):
ComponentName
?
{
return
super
.
startForegroundService
(
service
)
}
override
fun
onDestroy
()
{
super
.
onDestroy
()
if
(
EventBus
.
getDefault
().
isRegistered
(
this
))
{
EventBus
.
getDefault
().
unregister
(
this
)
}
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
ECLAIR
)
{
stopForeground
(
true
)
}
}
private
fun
dp2px
(
dp
:
Float
):
Int
{
...
...
m-muse/src/main/java/com/yidianling/muse/utils/MeditationFloatPermissionUtil.kt
0 → 100644
View file @
1a10f407
package
com.yidianling.muse.utils
import
android.app.Activity
import
android.content.Context
import
android.content.Intent
import
android.net.Uri
import
android.os.Build
import
android.provider.Settings
object
MeditationFloatPermissionUtil
{
const
val
REQUEST_FLOAT_CODE
=
1001
private
fun
commonROMPermissionCheck
(
context
:
Context
?):
Boolean
{
var
result
=
true
if
(
Build
.
VERSION
.
SDK_INT
>=
23
){
try
{
val
clazz
:
Class
<*>
=
Settings
::
class
.
java
val
canDrawOverlays
=
clazz
.
getDeclaredMethod
(
"canDrawOverlays"
,
Context
::
class
.
java
)
result
=
canDrawOverlays
.
invoke
(
null
,
context
)
as
Boolean
}
catch
(
e
:
Exception
){
}
}
return
result
}
fun
checkSuspendedWindowPermission
(
context
:
Activity
,
block
:()
->
Unit
){
if
(
commonROMPermissionCheck
(
context
)){
block
}
else
{
context
.
startActivityForResult
(
Intent
(
Settings
.
ACTION_MANAGE_OVERLAY_PERMISSION
).
apply
{
data
=
Uri
.
parse
(
"package:${context.packageName}"
)
},
REQUEST_FLOAT_CODE
)
}
}
}
\ No newline at end of file
m-muse/src/main/res/layout/layout_meditation_play_float_view.xml
View file @
1a10f407
...
...
@@ -2,7 +2,7 @@
<FrameLayout
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:background=
"@drawable/
bg_play_meditation_float_view
"
android:background=
"@drawable/
play_float_background
"
android:layout_marginHorizontal=
"16dp"
android:layout_marginBottom=
"20dp"
android:layout_width=
"match_parent"
...
...
m-user/src/main/java/com/yidianling/user/mine/MineFragment.kt
View file @
1a10f407
...
...
@@ -27,6 +27,7 @@ import com.ydl.ydlcommon.utils.BuryPointUtils
import
com.ydl.ydlcommon.utils.Utils
import
com.ydl.ydlcommon.utils.YdlBuryPointUtil
import
com.ydl.ydlcommon.utils.actionutil.ActionCountUtils.Companion.count
import
com.ydl.ydlcommon.view.dialog.YDLShareDialog
import
com.ydl.ydlcommon.view.dialog.YDLShareDialog.Companion.style4
import
com.yidianling.consultant.api.IConsultantService
import
com.yidianling.dynamic.api.IDynamicService
...
...
@@ -53,6 +54,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers
import
io.reactivex.functions.Consumer
import
io.reactivex.schedulers.Schedulers
import
kotlinx.android.synthetic.main.user_mine_fragment_mine.*
import
java.util.*
/**
* 我的Tab
...
...
@@ -65,7 +67,7 @@ class MineFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener, View.
var
share_head
=
"http://static.ydlcdn.com/v1/images/logo320.png"
var
share_url
=
"http://m.yidianling.com/app"
var
userInfoData
:
UserResponseBean
.
UserInfo
?
=
null
private
var
mShareDialog
:
YDLShareDialog
?
=
null
private
var
startTime
:
Long
=
0
private
var
endTime
:
Long
=
0
override
fun
layoutResId
():
Int
{
...
...
@@ -131,14 +133,10 @@ class MineFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener, View.
.
getGlobalInfo
()
?.
info
&&
null
!=
PlatformRamImpl
.
getInstance
()
.
getGlobalInfo
()
?.
info
?.
app_share
)
{
share_title
=
PlatformRamImpl
.
getInstance
().
getGlobalInfo
()
?.
info
?.
app_share
?.
title
.
toString
()
share_context
=
PlatformRamImpl
.
getInstance
().
getGlobalInfo
()
?.
info
?.
app_share
?.
descrip
.
toString
()
share_head
=
PlatformRamImpl
.
getInstance
().
getGlobalInfo
()
?.
info
?.
app_share
?.
cover_url
.
toString
()
share_url
=
PlatformRamImpl
.
getInstance
().
getGlobalInfo
()
?.
info
?.
app_share
?.
dl_url
.
toString
()
share_title
=
PlatformRamImpl
.
getInstance
().
getGlobalInfo
()
?.
info
?.
app_share
?.
title
.
toString
()
share_context
=
PlatformRamImpl
.
getInstance
().
getGlobalInfo
()
?.
info
?.
app_share
?.
descrip
.
toString
()
share_head
=
PlatformRamImpl
.
getInstance
().
getGlobalInfo
()
?.
info
?.
app_share
?.
cover_url
.
toString
()
share_url
=
PlatformRamImpl
.
getInstance
().
getGlobalInfo
()
?.
info
?.
app_share
?.
dl_url
.
toString
()
}
}
...
...
@@ -393,8 +391,7 @@ class MineFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener, View.
.
put
(
"mine_name"
,
"我的动态"
)
.
burryPoint
(
"mine"
)
try
{
val
intentm
=
provide
(
IDynamicService
::
class
.
java
).
getMyTrendsActivityIntent
(
activity
)
val
intentm
=
provide
(
IDynamicService
::
class
.
java
).
getMyTrendsActivityIntent
(
activity
)
startActivity
(
intentm
)
}
catch
(
e
:
Exception
)
{
e
.
printStackTrace
()
...
...
@@ -421,8 +418,7 @@ class MineFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener, View.
BuryPointUtils
.
getInstance
().
createMap
()
.
put
(
"mine_name"
,
"预约订单"
)
.
burryPoint
(
"mine"
)
val
h5Params3
=
H5Params
(
MH5_URL
+
"wb/user/order/list?needOrderHelperAlert=1"
,
null
)
val
h5Params3
=
H5Params
(
MH5_URL
+
"wb/user/order/list?needOrderHelperAlert=1"
,
null
)
NewH5Activity
.
start
(
activity
,
h5Params3
)
}
...
...
@@ -515,10 +511,12 @@ class MineFragment : BaseFragment(), SwipeRefreshLayout.OnRefreshListener, View.
}
private
fun
share
()
{
val
dialog
=
mActivity
?.
let
{
activity
->
style4
(
activity
,
share_title
,
share_url
,
share_context
,
share_head
)
if
(
mShareDialog
==
null
)
{
mShareDialog
=
mActivity
?.
let
{
activity
->
style4
(
activity
,
share_title
,
share_url
,
share_context
,
share_head
)
}
}
d
ialog
?.
show
(
activity
?.
fragmentManager
,
"lose"
)
mShareD
ialog
?.
show
(
activity
?.
fragmentManager
,
"lose"
)
}
/**
...
...
ydl-platform/src/main/java/com/ydl/ydlcommon/view/dialog/YDLShareDialog.kt
View file @
1a10f407
...
...
@@ -42,6 +42,7 @@ class YDLShareDialog : DialogFragment {
//小程序页面地址
private
var
path
:
String
?
=
null
//小程序id
private
var
minProgramId
:
String
?
=
null
...
...
@@ -50,7 +51,13 @@ class YDLShareDialog : DialogFragment {
private
var
llmargin
=
0
@SuppressLint
(
"ValidFragment"
)
constructor
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?)
:
super
()
{
constructor
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?
)
:
super
()
{
this
.
mActivity
=
activity
this
.
shareTitle
=
shareTitle
this
.
shareUrl
=
shareUrl
...
...
@@ -60,7 +67,15 @@ class YDLShareDialog : DialogFragment {
//传递小程序参数
@SuppressLint
(
"ValidFragment"
)
constructor
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?,
path
:
String
?,
minProgramId
:
String
?)
:
super
()
{
constructor
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?,
path
:
String
?,
minProgramId
:
String
?
)
:
super
()
{
this
.
mActivity
=
activity
this
.
shareTitle
=
shareTitle
this
.
shareUrl
=
shareUrl
...
...
@@ -80,6 +95,7 @@ class YDLShareDialog : DialogFragment {
companion
object
{
var
typeStyle
:
Int
=
0
/**
* 1.为显示1排(5个) 2.为显示2排(隐藏动态和举报)3.为显示2排(隐藏动态和删除) 4.为显示1排(4个)隐藏动态按钮 5:生成海报按钮、隐藏动态 6:保存海报按钮、隐藏动态 7.为显示1排(4个)隐藏动态按钮
*/
...
...
@@ -90,6 +106,7 @@ class YDLShareDialog : DialogFragment {
const
val
TYPE5
=
5
const
val
TYPE6
=
6
const
val
TYPE7
=
7
/**
* 点击事件类型 1.动态 2.删除 3.举报 4.返回首页 5:生成海报 6:保存本地 7:分享纯图片
*/
...
...
@@ -101,55 +118,127 @@ class YDLShareDialog : DialogFragment {
const
val
CLICK_SAVE
=
6
const
val
CLICK_SHARE_IMAGE
=
7
fun
style1
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?):
YDLShareDialog
{
fun
style1
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?
):
YDLShareDialog
{
typeStyle
=
TYPE1
return
YDLShareDialog
(
activity
,
shareTitle
,
shareUrl
,
shareContent
,
shareHead
)
}
//支持分享小程序
fun
style1
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?,
minProgramPath
:
String
?
=
""
,
minProgramId
:
String
?
=
""
):
YDLShareDialog
{
fun
style1
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?,
minProgramPath
:
String
?
=
""
,
minProgramId
:
String
?
=
""
):
YDLShareDialog
{
typeStyle
=
TYPE1
return
YDLShareDialog
(
activity
,
shareTitle
,
shareUrl
,
shareContent
,
shareHead
,
minProgramPath
,
minProgramId
)
return
YDLShareDialog
(
activity
,
shareTitle
,
shareUrl
,
shareContent
,
shareHead
,
minProgramPath
,
minProgramId
)
}
fun
style2
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?):
YDLShareDialog
{
fun
style2
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?
):
YDLShareDialog
{
typeStyle
=
TYPE2
return
YDLShareDialog
(
activity
,
shareTitle
,
shareUrl
,
shareContent
,
shareHead
)
}
fun
style3
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?):
YDLShareDialog
{
fun
style3
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?
):
YDLShareDialog
{
typeStyle
=
TYPE3
return
YDLShareDialog
(
activity
,
shareTitle
,
shareUrl
,
shareContent
,
shareHead
)
}
fun
style4
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?):
YDLShareDialog
{
fun
style4
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?
):
YDLShareDialog
{
typeStyle
=
TYPE4
return
YDLShareDialog
(
activity
,
shareTitle
,
shareUrl
,
shareContent
,
shareHead
)
}
fun
style5
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?):
YDLShareDialog
{
fun
style5
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?
):
YDLShareDialog
{
typeStyle
=
TYPE5
return
YDLShareDialog
(
activity
,
shareTitle
,
shareUrl
,
shareContent
,
shareHead
)
}
fun
style6
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?):
YDLShareDialog
{
fun
style6
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?
):
YDLShareDialog
{
typeStyle
=
TYPE6
return
YDLShareDialog
(
activity
,
shareTitle
,
shareUrl
,
shareContent
,
shareHead
)
}
//支持分享小程序
fun
style7
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?,
minProgramPath
:
String
?
=
""
,
minProgramId
:
String
?
=
""
):
YDLShareDialog
{
fun
style7
(
activity
:
Activity
,
shareTitle
:
String
?,
shareUrl
:
String
?,
shareContent
:
String
?,
shareHead
:
String
?,
minProgramPath
:
String
?
=
""
,
minProgramId
:
String
?
=
""
):
YDLShareDialog
{
typeStyle
=
TYPE7
return
YDLShareDialog
(
activity
,
shareTitle
,
shareUrl
,
shareContent
,
shareHead
,
minProgramPath
,
minProgramId
)
return
YDLShareDialog
(
activity
,
shareTitle
,
shareUrl
,
shareContent
,
shareHead
,
minProgramPath
,
minProgramId
)
}
}
override
fun
onCreateView
(
inflater
:
LayoutInflater
?,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?):
View
{
override
fun
onCreateView
(
inflater
:
LayoutInflater
?,
container
:
ViewGroup
?,
savedInstanceState
:
Bundle
?
):
View
{
//去掉dialog的标题,需要在setContentView()之前
this
.
dialog
.
requestWindowFeature
(
Window
.
FEATURE_NO_TITLE
)
val
window
=
this
.
dialog
.
window
//去掉dialog默认的padding
window
!!
.
decorView
.
setPadding
(
0
,
0
,
0
,
0
)
window
?.
decorView
?
.
setPadding
(
0
,
0
,
0
,
0
)
val
lp
=
window
.
attributes
lp
.
width
=
WindowManager
.
LayoutParams
.
MATCH_PARENT
lp
.
height
=
WindowManager
.
LayoutParams
.
WRAP_CONTENT
...
...
@@ -184,49 +273,71 @@ class YDLShareDialog : DialogFragment {
when
(
typeStyle
)
{
TYPE1
->
{
//样式1
//删除、举报、首页
ll_layout2
.
visibility
=
View
.
GONE
//动态
ll_dynamic
.
visibility
=
View
.
VISIBLE
}
TYPE2
->
{
//样式2
//删除、举报、首页
ll_layout2
.
visibility
=
View
.
VISIBLE
//动态
ll_dynamic
.
visibility
=
View
.
GONE
//举报
ll_report
.
visibility
=
View
.
GONE
setStyle
()
val
deleteParams
=
LinearLayout
.
LayoutParams
(
dp55
,
ViewGroup
.
LayoutParams
.
WRAP_CONTENT
)
val
deleteParams
=
LinearLayout
.
LayoutParams
(
dp55
,
ViewGroup
.
LayoutParams
.
WRAP_CONTENT
)
deleteParams
.
setMargins
(
dp7
,
0
,
llmargin
,
0
)
deleteParams
.
weight
=
0f
ll_delete
.
layoutParams
=
deleteParams
}
TYPE3
->
{
//样式3
//删除、举报、首页
ll_layout2
.
visibility
=
View
.
VISIBLE
ll_report
.
visibility
=
View
.
VISIBLE
//动态
ll_dynamic
.
visibility
=
View
.
GONE
ll_delete
.
visibility
=
View
.
GONE
setStyle
()
val
reportParams
=
LinearLayout
.
LayoutParams
(
dp55
,
ViewGroup
.
LayoutParams
.
WRAP_CONTENT
)
val
reportParams
=
LinearLayout
.
LayoutParams
(
dp55
,
ViewGroup
.
LayoutParams
.
WRAP_CONTENT
)
reportParams
.
setMargins
(
dp7
,
0
,
llmargin
,
0
)
reportParams
.
weight
=
0f
ll_report
.
layoutParams
=
reportParams
}
TYPE4
->
{
//样式4
//动态
ll_dynamic
.
visibility
=
View
.
GONE
//删除、举报、首页
ll_layout2
.
visibility
=
View
.
GONE
setStyle
()
}
TYPE5
->
{
//样式5
//动态
ll_dynamic
.
visibility
=
View
.
GONE
ll_poster
.
visibility
=
View
.
VISIBLE
//删除、举报、首页
ll_layout2
.
visibility
=
View
.
GONE
}
TYPE6
->
{
//样式6
//动态
ll_dynamic
.
visibility
=
View
.
GONE
ll_save
.
visibility
=
View
.
VISIBLE
//删除、举报、首页
ll_layout2
.
visibility
=
View
.
GONE
}
TYPE7
->
{
//样式7
//删除、举报、首页
ll_layout2
.
visibility
=
View
.
GONE
//动态
ll_dynamic
.
visibility
=
View
.
GONE
}
}
...
...
@@ -243,11 +354,11 @@ class YDLShareDialog : DialogFragment {
Executors
.
newCachedThreadPool
().
execute
{
var
imageByte
=
Base64
.
decode
(
base64DataStr
,
Base64
.
DEFAULT
)
mActivity
!!
.
runOnUiThread
{
mActivity
?
.
runOnUiThread
{
GlideApp
.
with
(
this
)
.
load
(
imageByte
)
.
diskCacheStrategy
(
DiskCacheStrategy
.
NONE
)
.
into
(
img_pic
)
.
load
(
imageByte
)
.
diskCacheStrategy
(
DiskCacheStrategy
.
NONE
)
.
into
(
img_pic
)
}
}
...
...
@@ -381,7 +492,20 @@ class YDLShareDialog : DialogFragment {
}
private
fun
share
(
platform
:
SHARE_MEDIA
)
{
ShareUtils
.
shareTo
(
platform
,
mActivity
!!
,
shareTitle
!!
,
shareUrl
!!
,
shareContent
,
shareHead
)
mActivity
?.
let
{
activity
->
shareTitle
?.
let
{
shareTitle
->
shareUrl
?.
let
{
shareUrl
->
ShareUtils
.
shareTo
(
platform
,
activity
,
shareTitle
,
shareUrl
,
shareContent
,
shareHead
)
}
}
}
ShareUtils
.
callBack
=
object
:
ShareActionCallBack
{
override
fun
onShareSuccessed
(
share_media
:
SHARE_MEDIA
)
{
mShareCallBack
?.
onShareSuccessed
(
share_media
)
...
...
@@ -399,7 +523,24 @@ class YDLShareDialog : DialogFragment {
*/
private
fun
shareMinWeixin
()
{
//分享小程序到微信
ShareUtils
.
shareSmailWeixin
(
mActivity
!!
,
shareTitle
!!
,
shareUrl
!!
,
shareContent
,
shareHead
,
path
,
minProgramId
,
null
)
mActivity
?.
let
{
activity
->
shareTitle
?.
let
{
shareTitle
->
shareUrl
?.
let
{
shareUrl
->
ShareUtils
.
shareSmailWeixin
(
activity
,
shareTitle
,
shareUrl
,
shareContent
,
shareHead
,
path
,
minProgramId
,
null
)
}
}
}
dismiss
()
}
...
...
ydl-platform/src/main/res/layout/platform_dialog_share.xml
View file @
1a10f407
...
...
@@ -131,6 +131,7 @@
android:layout_width=
"55dp"
android:layout_height=
"wrap_content"
android:layout_weight=
"1"
android:visibility=
"gone"
android:orientation=
"vertical"
>
<ImageView
...
...
@@ -248,6 +249,7 @@
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"@dimen/platform_dp_18"
android:visibility=
"gone"
android:orientation=
"horizontal"
>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
...
...
ydl-webview/src/main/java/com/ydl/event/ReloadUrlEvent.kt
0 → 100644
View file @
1a10f407
package
com.ydl.event
/**
* h5页面内访问URL
*/
class
ReloadUrlEvent
{
var
url
:
String
?
=
null
constructor
(
url
:
String
)
{
this
.
url
=
url
}
}
\ No newline at end of file
ydl-webview/src/main/java/com/ydl/webview/NewH5Activity.java
View file @
1a10f407
...
...
@@ -34,6 +34,7 @@ import com.tencent.smtt.sdk.WebView;
import
com.tencent.smtt.sdk.WebViewClient
;
import
com.umeng.socialize.UMShareAPI
;
import
com.umeng.socialize.bean.SHARE_MEDIA
;
import
com.ydl.event.ReloadUrlEvent
;
import
com.ydl.utils.PopUtils
;
import
com.ydl.utils.ProxyCheckUtils
;
import
com.ydl.utils.WebUrlParamsUtils
;
...
...
@@ -1064,6 +1065,12 @@ public class NewH5Activity extends BaseActivity implements PtrHandler {
}
}
public
void
onEvent
(
ReloadUrlEvent
event
)
{
//刷新页面
loadUrl
(
event
.
getUrl
());
shouldClearHistory
=
true
;
}
public
void
onEvent
(
UserBindPhoneEvent
event
)
{
//刷新页面
loadUrl
(
h5Params
.
getUrl
());
...
...
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