1 package leakcanary.internal.navigation
2 
3 import android.app.Activity
4 import android.content.Context
5 import android.os.Build.VERSION
6 import android.view.LayoutInflater
7 import android.view.Menu
8 import android.view.View
9 import android.view.ViewGroup
10 import com.squareup.leakcanary.core.R
11 
inflatenull12 internal fun ViewGroup.inflate(layoutResId: Int) = LayoutInflater.from(context)
13   .inflate(layoutResId, this, false)!!
14 
15 internal val View.activity
16   get() = context as Activity
17 
18 @Suppress("UNCHECKED_CAST")
19 internal fun <T : Activity> View.activity() = context as T
20 
21 internal fun View.onCreateOptionsMenu(onCreateOptionsMenu: (Menu) -> Unit) {
22   activity<NavigatingActivity>().onCreateOptionsMenu = onCreateOptionsMenu
23   activity.invalidateOptionsMenu()
24 }
25 
goTonull26 internal fun View.goTo(screen: Screen) {
27   activity<NavigatingActivity>().goTo(screen)
28 }
29 
goBacknull30 internal fun View.goBack() {
31   activity<NavigatingActivity>().goBack()
32 }
33 
getColorCompatnull34 internal fun Context.getColorCompat(id: Int): Int {
35   return if (VERSION.SDK_INT >= 23) {
36     getColor(id)
37   } else {
38     resources.getColor(id)
39   }
40 }
41 
onScreenExitingnull42 internal fun View.onScreenExiting(block: () -> Unit) {
43   @Suppress("UNCHECKED_CAST")
44   var callbacks = getTag(R.id.leak_canary_notification_on_screen_exit) as MutableList<() -> Unit>?
45   if (callbacks == null) {
46     callbacks = mutableListOf()
47     setTag(R.id.leak_canary_notification_on_screen_exit, callbacks)
48   }
49   callbacks.add(block)
50 }
51 
notifyScreenExitingnull52 internal fun View.notifyScreenExiting() {
53   @Suppress("UNCHECKED_CAST")
54   val callbacks = getTag(R.id.leak_canary_notification_on_screen_exit)
55     as MutableList<() -> Unit>?
56   callbacks?.forEach { it.invoke() }
57 }