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
89f8a399
Commit
89f8a399
authored
May 26, 2022
by
范玉宾
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
time off single loop playlist
parent
7f7c465b
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
143 additions
and
107 deletions
+143
-107
config.gradle
config.gradle
+2
-2
HomeMuseView.kt
m-home/src/ydl/java/com/yidianling/home/ui/view/HomeMuseView.kt
+26
-56
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
MediaPlayerManager.kt
m-muse/src/main/java/com/yidianling/muse/helper/MediaPlayerManager.kt
+0
-1
MeditationWindowService.kt
m-muse/src/main/java/com/yidianling/muse/service/MeditationWindowService.kt
+9
-16
MeditationFloatPermissionUtil.kt
m-muse/src/main/java/com/yidianling/muse/utils/MeditationFloatPermissionUtil.kt
+39
-0
No files found.
config.gradle
View file @
89f8a399
...
...
@@ -14,7 +14,7 @@ ext {
"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"
,
...
...
@@ -99,7 +99,7 @@ ext {
"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 层 --------------
...
...
m-home/src/ydl/java/com/yidianling/home/ui/view/HomeMuseView.kt
View file @
89f8a399
...
...
@@ -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_muse_view.xml
View file @
89f8a399
...
...
@@ -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 @
89f8a399
...
...
@@ -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 @
89f8a399
...
...
@@ -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
...
...
@@ -27,6 +27,7 @@ import com.yidianling.muse.bean.MeditationPlayModuleBean
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
...
...
@@ -62,6 +63,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
=
""
...
...
@@ -85,6 +87,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
)
...
...
@@ -105,7 +110,7 @@ class PlayMeditationActivity : BaseActivity() {
}
override
fun
initDataAndEvent
()
{
StatusBarUtils
.
setWindowStatusBarColor
(
this
,
R
.
color
.
platform_main_theme
)
}
private
fun
getData
()
{
...
...
@@ -113,7 +118,6 @@ class PlayMeditationActivity : BaseActivity() {
if
(
meditationType
==
null
||
(
mediaId
==
null
&&
meditationType
!=
0
))
{
return
}
// 声音详情
if
(
meditationType
==
0
)
{
MuseHttp
.
getInstance
().
getPureMusicPlayDetail
(
...
...
@@ -142,7 +146,9 @@ class PlayMeditationActivity : BaseActivity() {
businessType
=
meditationPlayBean
.
businessType
val
status
=
meditationPlayBean
.
status
status
=
meditationPlayBean
.
status
buried
=
meditationPlayBean
.
buried
collected
=
status
==
1
...
...
@@ -212,7 +218,9 @@ class PlayMeditationActivity : BaseActivity() {
businessType
=
meditationPlayBean
.
businessType
val
status
=
meditationPlayBean
.
status
status
=
meditationPlayBean
.
status
buried
=
meditationPlayBean
.
buried
collected
=
status
==
1
...
...
@@ -329,10 +337,6 @@ class PlayMeditationActivity : BaseActivity() {
return
R
.
layout
.
activity_play_meditation
}
override
fun
getStatusViewOptions
():
StatusBarOptions
{
return
StatusBarOptions
(
true
,
false
)
}
private
fun
initView
()
{
shareImageUrl
=
mediaCoverUrl
...
...
@@ -378,10 +382,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
)
...
...
@@ -583,10 +583,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
...
...
@@ -598,7 +634,6 @@ class PlayMeditationActivity : BaseActivity() {
mMediaPlayer
?.
pause
()
}
}
}
private
fun
postPlayRecord
(
isQuit
:
Int
,
playTime
:
Int
,
isComplete
:
Int
)
{
...
...
@@ -704,22 +739,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
}
}
}
...
...
@@ -798,19 +835,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/MediaPlayerManager.kt
View file @
89f8a399
...
...
@@ -27,7 +27,6 @@ class MediaPlayerManager private constructor() {
mMediaPlayer
?.
reset
()
mMediaPlayer
?.
setAudioAttributes
(
attrs
)
mMediaPlayer
?.
setDataSource
(
path
)
mMediaPlayer
?.
isLooping
=
isLoop
mMediaPlayer
?.
prepareAsync
()
mMediaPlayer
?.
setOnPreparedListener
{
listener
?.
onPrepared
(
it
)
...
...
m-muse/src/main/java/com/yidianling/muse/service/MeditationWindowService.kt
View file @
89f8a399
...
...
@@ -18,7 +18,6 @@ import android.view.WindowManager
import
android.widget.ImageView
import
android.widget.TextView
import
androidx.core.app.NotificationCompat
import
androidx.core.content.getSystemService
import
androidx.lifecycle.LifecycleService
import
com.bumptech.glide.Glide
import
com.ydl.ydlcommon.data.http.ThrowableConsumer
...
...
@@ -27,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
...
...
@@ -84,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
}
...
...
@@ -124,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
)
...
...
@@ -138,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
)
...
...
@@ -198,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
{
...
...
m-muse/src/main/java/com/yidianling/muse/utils/MeditationFloatPermissionUtil.kt
0 → 100644
View file @
89f8a399
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
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