Scaffold responsive Android notification log shell

This commit is contained in:
ajp_anton
2026-07-23 07:37:07 +00:00
parent 591a3b993c
commit 022fb5220f
25 changed files with 1045 additions and 0 deletions
@@ -0,0 +1,41 @@
package se.ajpanton.notificationlog
import android.content.Context
import android.graphics.Canvas
import android.util.AttributeSet
import androidx.drawerlayout.widget.DrawerLayout
/**
* Clips drawer rendering away from display cutouts and system-bar side insets.
* DrawerLayout otherwise lets its drawer render into that unsafe area.
*/
class SafeInsetDrawerLayout @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0,
) : DrawerLayout(context, attrs, defStyleAttr) {
private var safeInsetLeft = 0
private var safeInsetRight = 0
fun setDrawerSafeInsets(left: Int, right: Int) {
val safeLeft = left.coerceAtLeast(0)
val safeRight = right.coerceAtLeast(0)
if (safeInsetLeft == safeLeft && safeInsetRight == safeRight) {
return
}
safeInsetLeft = safeLeft
safeInsetRight = safeRight
invalidate()
}
override fun dispatchDraw(canvas: Canvas) {
if (safeInsetLeft == 0 && safeInsetRight == 0) {
super.dispatchDraw(canvas)
return
}
val saveCount = canvas.save()
canvas.clipRect(safeInsetLeft, 0, (width - safeInsetRight).coerceAtLeast(safeInsetLeft), height)
super.dispatchDraw(canvas)
canvas.restoreToCount(saveCount)
}
}