Skip to content

Commit

Permalink
Merge pull request #20 from koreatlwls/19-anr-oom
Browse files Browse the repository at this point in the history
close #19 anr oom
  • Loading branch information
koreatlwls authored Jul 18, 2024
2 parents 163a41b + aee4a17 commit e1b4e7d
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 47 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ android.nonTransitiveRClass=true
SONATYPE_HOST=DEFAULT
RELEASE_SIGNING_ENABLED=true
GROUP=io.github.koreatlwls
VERSION_NAME=0.1.5
VERSION_NAME=0.1.7
POM_NAME=Hi-Jack-Mocker
POM_DESCRIPTION=Hi-Jack-Mocker is a project that leverages OkHttp3's interceptor to intercept and modify network requests and responses, allowing you to verify the UI easily.
POM_INCEPTION_YEAR=2024
Expand Down
111 changes: 65 additions & 46 deletions hjm/src/main/kotlin/com/koreatlwls/hjm/HiJackMocker.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import android.app.Application
import android.content.Context
import android.os.Bundle
import android.view.Gravity
import android.view.ViewGroup
import android.widget.FrameLayout
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.size
Expand Down Expand Up @@ -60,66 +61,84 @@ object HiJackMocker {
}
)


private fun Application.addLifecycleCallbacks() {
registerActivityLifecycleCallbacks(
object : Application.ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
override fun onActivityStarted(activity: Activity) {}

override fun onActivityResumed(activity: Activity) {
if (activity !is HjmActivity) {
addHjmModeButton(activity)
}
}
registerActivityLifecycleCallbacks(ActivityLifecycleCallbacksImpl())
}

private class ActivityLifecycleCallbacksImpl : Application.ActivityLifecycleCallbacks {
private var composeView : ComposeView? = null

override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?)= Unit

override fun onActivityPaused(activity: Activity) {}
override fun onActivityStopped(activity: Activity) {}
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
override fun onActivityStarted(activity: Activity) = Unit

override fun onActivityResumed(activity: Activity) {
if (activity !is HjmActivity) {
addHjmModeButton(activity)
}
)
}
}

override fun onActivityPaused(activity: Activity) = Unit

private fun addHjmModeButton(activity: Activity) {
val composeView = ComposeView(activity).apply {
setContent {
HjmModeButton()
override fun onActivityStopped(activity: Activity) = Unit

override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) = Unit

override fun onActivityDestroyed(activity: Activity) {
if(activity !is HjmActivity){
removeHjmModeButton(activity)
}
}

val params = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT
).apply {
gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
topMargin = 150
private fun addHjmModeButton(activity: Activity) {
composeView = ComposeView(activity).apply {
setContent {
HjmModeButton()
}
}

val params = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT
).apply {
gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL
topMargin = 100
}

activity.addContentView(composeView, params)
}

activity.addContentView(composeView, params)
}
private fun removeHjmModeButton(activity: Activity) {
composeView?.let {
(activity.window.decorView as? ViewGroup)?.removeView(it)
}
composeView = null
}

@Composable
private fun HjmModeButton() {
val checked by hjmDataStore.getHjmModeFlow().collectAsState(initial = false)
val scope = rememberCoroutineScope()
@Composable
private fun HjmModeButton() {
val checked by hjmDataStore.getHjmModeFlow().collectAsState(initial = false)
val scope = rememberCoroutineScope()

IconButton(
onClick = {
scope.launch {
withContext(Dispatchers.IO){
hjmDataStore.setHjmMode(!checked)
IconButton(
onClick = {
scope.launch {
withContext(Dispatchers.IO){
hjmDataStore.setHjmMode(!checked)
}
}
}
) {
Image(
modifier = Modifier.size(36.dp),
painter = painterResource(
id = if (checked) R.drawable.hjm_mode_on
else R.drawable.hjm_mode_off
),
contentDescription = null,
)
}
) {
Image(
modifier = Modifier.size(36.dp),
painter = painterResource(
id = if (checked) R.drawable.hjm_mode_on
else R.drawable.hjm_mode_off
),
contentDescription = null,
)
}
}
}

0 comments on commit e1b4e7d

Please sign in to comment.