Skip to content

Commit

Permalink
Enable edge-to-edge only for supported activities
Browse files Browse the repository at this point in the history
Add a check to prevent enabling edge-to-edge on unsupported activities. Report a crash when an activity is not a `ComponentActivity` and is edge-to-edge enabled.
  • Loading branch information
Alejo committed Feb 11, 2025
1 parent 3ae16d0 commit fbb6f8e
Showing 1 changed file with 27 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,36 @@ import android.app.Application
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.enableEdgeToEdge
import com.automattic.android.tracks.crashlogging.CrashLogging
import javax.inject.Inject

class ApplicationEdgeToEdgeEnabler @Inject constructor() : Application.ActivityLifecycleCallbacks {
class ApplicationEdgeToEdgeEnabler @Inject constructor(
private val crashLogger: CrashLogging
) : Application.ActivityLifecycleCallbacks {

private val unsupportedEdgeToEdgeActivities = setOf(
"leakcanary.internal.RequestPermissionActivity"
)

override fun onActivityCreated(activity: Activity, bindle: Bundle?) {
(activity as? ComponentActivity)?.enableEdgeToEdge()
val isEdgeToEdgeSupported = isEdgeToEdgeSupported(activity)
if (PackageUtils.isDebugBuild() && isEdgeToEdgeSupported) {
(activity as ComponentActivity).enableEdgeToEdge()
} else {
(activity as? ComponentActivity)?.enableEdgeToEdge() ?: run {
if (isEdgeToEdgeSupported) {
val message = "Activity $activity is not a ComponentActivity"
crashLogger.sendReport(
exception = ClassCastException(message),
message = message
)
}
}
}
}

private fun isEdgeToEdgeSupported(activity: Activity): Boolean {
return (activity::class.java.name in unsupportedEdgeToEdgeActivities).not()
}

override fun onActivityStarted(activity: Activity) {
Expand Down

0 comments on commit fbb6f8e

Please sign in to comment.