Skip to content

Commit

Permalink
优化停止逻辑
Browse files Browse the repository at this point in the history
  • Loading branch information
xiaowine committed Mar 2, 2024
1 parent 122c1c9 commit abbea02
Showing 1 changed file with 22 additions and 35 deletions.
57 changes: 22 additions & 35 deletions app/src/main/java/cn/lyric/getter/hook/app/SystemUi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import com.github.kyuubiran.ezxhelper.finders.MethodFinder.`-Static`.methodFinde


object SystemUi : BaseHook() {
var isPlayer: Boolean = false
private lateinit var receiver: LyricReceiver

private var title: String by observableChange("") { _, _, newValue ->
Expand Down Expand Up @@ -58,8 +57,7 @@ object SystemUi : BaseHook() {
loadClassOrNull("com.android.systemui.statusbar.NotificationMediaManager").isNotNull {
it.methodFinder().filterByName("clearCurrentMediaNotification").first().createHook {
after {
if (!isPlayer || !useOwnMusicController) return@after
isPlayer = false
if (!useOwnMusicController) return@after
eventTools.cleanLyric()
}
}
Expand All @@ -69,8 +67,7 @@ object SystemUi : BaseHook() {
loadClassOrNull("com.android.systemui.media.controls.ui.MediaCarouselController").isNotNull {
it.methodFinder().filterByName("removePlayer\$default").first().createHook {
after {
if (!isPlayer || !useOwnMusicController) return@after
isPlayer = false
if (!useOwnMusicController) return@after
eventTools.cleanLyric()
}
}
Expand All @@ -82,10 +79,9 @@ object SystemUi : BaseHook() {
if (clazz!!.hasMethod("onPlaybackStateChanged")) {
clazz.methodFinder().filterByName("onPlaybackStateChanged").first().createHook {
after { hookParam ->
if (!isPlayer || !useOwnMusicController) return@after
if (!useOwnMusicController) return@after
val playbackState = hookParam.args[0] as PlaybackState
if (playbackState.state == 2) {
isPlayer = false
eventTools.cleanLyric()
}
}
Expand All @@ -94,65 +90,56 @@ object SystemUi : BaseHook() {
}
}
}
if (config.enhancedHiddenLyrics || config.showTitle) {
moduleRes.getString(R.string.enhanced_hidden_lyrics).log()
for (i in 0..10) {
val clazz = loadClassOrNull("com.android.systemui.statusbar.NotificationMediaManager$$i")
if (clazz.isNotNull()) {
if (clazz!!.hasMethod("onMetadataChanged")) {
clazz.methodFinder().filterByName("onMetadataChanged").first().createHook {
after { hookParam ->
val metadata = hookParam.args[0] as MediaMetadata
title = metadata.getString(MediaMetadata.METADATA_KEY_TITLE)
}
}
break
}
}
}
}


loadClass("android.media.session.MediaController").methodFinder().filterByParamCount(1).filterByName("unregisterCallback").first().createHook {
after {
if (!isPlayer || !useOwnMusicController) return@after
if (!useOwnMusicController) return@after
if (it.args[0]::class.java.name.contains("statusbar")) {
isPlayer = false
eventTools.cleanLyric()
}

}
}
loadClass("android.media.session.MediaController").methodFinder().filterByParamCount(1).filterByName("registerCallback").first().createHook {
after {
if (!isPlayer || !useOwnMusicController) return@after
if (!useOwnMusicController) return@after
if (it.args[0]::class.java.name.contains("statusbar")) {
(it.thisObject as MediaController).registerCallback(object : MediaController.Callback() {
override fun onPlaybackStateChanged(state: PlaybackState?) {
super.onPlaybackStateChanged(state)
if (state != null) {
if (state.state == PlaybackState.STATE_PAUSED) {
isPlayer = false
eventTools.cleanLyric()
}

}
}
})
}
}
}

if (config.enhancedHiddenLyrics || config.showTitle) {
moduleRes.getString(R.string.enhanced_hidden_lyrics).log()
for (i in 0..10) {
val clazz = loadClassOrNull("com.android.systemui.statusbar.NotificationMediaManager$$i")
if (clazz.isNotNull()) {
if (clazz!!.hasMethod("onMetadataChanged")) {
clazz.methodFinder().filterByName("onMetadataChanged").first().createHook {
after { hookParam ->
val metadata = hookParam.args[0] as MediaMetadata
title = metadata.getString(MediaMetadata.METADATA_KEY_TITLE)
}
}
break
}
}
}
}
getApplication { application ->
receiver = LyricReceiver(object : LyricListener() {
override fun onUpdate(lyricData: LyricData) {
isPlayer = true
useOwnMusicController = lyricData.extraData.useOwnMusicController
}

override fun onStop(lyricData: LyricData) {
isPlayer = false
}
})
Tools.registerLyricListener(application, BuildConfig.API_VERSION, receiver)
}
Expand Down

0 comments on commit abbea02

Please sign in to comment.