Skip to content

Commit

Permalink
fix live activity status bar immersive
Browse files Browse the repository at this point in the history
  • Loading branch information
GangJust committed Nov 12, 2023
1 parent aaa2467 commit 32dca64
Show file tree
Hide file tree
Showing 10 changed files with 1,181 additions and 20 deletions.
674 changes: 674 additions & 0 deletions LICENSE

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ android {
applicationId "com.freegang.fplus"
minSdk 24
targetSdk 33
versionCode 90
versionName "1.2.4-dev"
versionCode 93
versionName "1.2.4"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/assets/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.2.4-dev-90
1.2.4-93
8 changes: 5 additions & 3 deletions core/src/main/java/com/freegang/hook/DouYinMain.kt
Original file line number Diff line number Diff line change
Expand Up @@ -78,18 +78,20 @@ class DouYinMain(private val app: Application) {
// search and hook
DexkitBuilder.running(
app = app,
version = 13,
version = 15,
searchBefore = {
HActivity(lpparam)
HMainActivity(lpparam)
HLivePlayActivity(lpparam)
HDetailActivity(lpparam)
HSideBarNestedScrollView(lpparam)
HDisallowInterceptRelativeLayout(lpparam)
HMainTabStripScrollView(lpparam)
HFlippableViewPager(lpparam)
HCustomizedUISeekBar(lpparam)
// HVideoViewHolder(lpparam)
HVideoViewHolderRootView(lpparam)
// HVideoViewHolder(lpparam)
// HVideoViewHolderRootViewNew(lpparam)
HPenetrateTouchRelativeLayout(lpparam)
HInteractStickerParent(lpparam)
HCommentAudioView(lpparam)
Expand All @@ -104,10 +106,10 @@ class DouYinMain(private val app: Application) {
HSeekBarSpeedModeBottomMask(lpparam)
HVideoPlayerHelper(lpparam)
HVerticalViewPagerNew(lpparam)
// HVideoPagerAdapter(lpparam)
HVideoPinchView(lpparam)
HDetailPageFragment(lpparam)
HEmojiDetailDialogNew(lpparam)
// HVideoPagerAdapter(lpparam)
}
)
}.onFailure {
Expand Down
61 changes: 61 additions & 0 deletions core/src/main/java/com/freegang/hook/HLivePlayActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.freegang.hook

import android.app.Activity
import android.graphics.Color
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import com.freegang.base.BaseHook
import com.freegang.config.ConfigV1
import com.freegang.ktutils.app.navBarInteractionMode
import com.freegang.ktutils.log.KLogCat
import com.freegang.xpler.core.EmptyHook
import com.freegang.xpler.core.OnAfter
import com.freegang.xpler.core.hookBlockRunning
import com.freegang.xpler.core.thisActivity
import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.callbacks.XC_LoadPackage

class HLivePlayActivity(lpparam: XC_LoadPackage.LoadPackageParam) :
BaseHook<EmptyHook>(lpparam) {

companion object {
const val TAG = "HLivePlayActivity"
}

private val config get() = ConfigV1.get()

override fun setTargetClass(): Class<*> {
return findClass("com.ss.android.ugc.aweme.live.LivePlayActivity")
}

@OnAfter("onWindowFocusChanged")
fun onWindowFocusChangedAfter(params: XC_MethodHook.MethodHookParam, boolean: Boolean) {
hookBlockRunning(params) {
initImmersive(thisActivity)
}.onFailure {
KLogCat.tagE(TAG, it)
}
}

private fun initImmersive(activity: Activity) {
// 全屏沉浸式
if (config.isImmersive) {
val window = activity.window
if (config.systemControllerValue[0]) {
WindowCompat.getInsetsController(window, window.decorView).hide(WindowInsetsCompat.Type.statusBars())
}
if (config.systemControllerValue[1]) {
WindowCompat.getInsetsController(window, window.decorView).hide(WindowInsetsCompat.Type.navigationBars())
}
if (activity.navBarInteractionMode == 2) {
HMainActivity.isEdgeToEdgeEnabled = true
WindowCompat.setDecorFitsSystemWindows(window, false)
window.statusBarColor = Color.TRANSPARENT
window.navigationBarColor = Color.TRANSPARENT
} else {
window.statusBarColor = Color.TRANSPARENT
window.navigationBarColor = Color.parseColor("#161616")
}
}
}
}
65 changes: 57 additions & 8 deletions core/src/main/java/com/freegang/hook/HVideoViewHolder.kt
Original file line number Diff line number Diff line change
@@ -1,31 +1,80 @@
package com.freegang.hook

import android.app.Activity
import android.graphics.Color
import android.view.View
import android.view.ViewGroup
import android.view.ViewTreeObserver
import com.freegang.base.BaseHook
import com.freegang.config.ConfigV1
import com.freegang.ktutils.extension.asOrNull
import com.freegang.ktutils.log.KLogCat
import com.freegang.xpler.core.OnBefore
import com.freegang.ktutils.reflect.fieldGets
import com.freegang.ktutils.reflect.methodInvokeFirst
import com.freegang.xpler.core.EmptyHook
import com.freegang.xpler.core.hookBlockRunning
import com.freegang.xpler.core.hookClass
import com.ss.android.ugc.aweme.feed.ui.PenetrateTouchRelativeLayout
import de.robv.android.xposed.XC_MethodHook
import de.robv.android.xposed.callbacks.XC_LoadPackage

class HVideoViewHolder(lpparam: XC_LoadPackage.LoadPackageParam) :
BaseHook<Any>(lpparam) {
BaseHook<EmptyHook>(lpparam) {
companion object {
const val TAG = "HVideoViewHolder"
}

private val config get() = ConfigV1.get()

override fun setTargetClass(): Class<*> {
return findClass("com.ss.android.ugc.aweme.feed.adapter.VideoViewHolder")
override fun onInit() {
lpparam.hookClass("com.ss.android.ugc.aweme.feed.adapter.VideoViewHolder")
.methodAllByName("bind") {
onAfter {
val fieldGets = thisObject?.fieldGets(type = View::class.java) ?: emptyList()

// PenetrateTouchRelativeLayout
val penetrateTouchRelativeLayout = fieldGets.firstOrNull { it is PenetrateTouchRelativeLayout }
?.asOrNull<ViewGroup>()
changePenetrateTouchRelativeLayout(this, penetrateTouchRelativeLayout)
}
}
}

@OnBefore("isCleanMode")
fun isCleanModeBefore(params: XC_MethodHook.MethodHookParam, view: View?, boolean: Boolean) {
private var onPreDraw: ViewTreeObserver.OnDrawListener? = null
private fun changePenetrateTouchRelativeLayout(params: XC_MethodHook.MethodHookParam, view: View?) {
hookBlockRunning(params) {
if (config.isNeatMode) {
args[1] = config.neatModeState
view?.also {
onPreDraw?.let {
view.viewTreeObserver.removeOnDrawListener(it)
onPreDraw = null
}

onPreDraw = ViewTreeObserver.OnDrawListener {
// 清爽模式
if (config.isNeatMode) {
thisObject.methodInvokeFirst("isCleanMode", args = arrayOf(view, config.neatModeState))
}

// 半透明
if (config.isTranslucent) {
it.alpha = config.translucentValue[1] / 100f
if (it.alpha <= 0) { // 全透明
thisObject.methodInvokeFirst("isCleanMode", args = arrayOf(view, config.neatModeState))
return@OnDrawListener
}
}

// 全屏沉浸式
runCatching {
if (config.isImmersive) {
val activity = view.context as Activity
val window = activity.window
window.statusBarColor = Color.TRANSPARENT
window.navigationBarColor = Color.TRANSPARENT
}
}
}
view.viewTreeObserver.addOnDrawListener(onPreDraw)
}
}.onFailure {
KLogCat.tagE(TAG, it)
Expand Down
Loading

0 comments on commit 32dca64

Please sign in to comment.