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 inflatenull12internal 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 goTonull26internal fun View.goTo(screen: Screen) { 27 activity<NavigatingActivity>().goTo(screen) 28 } 29 goBacknull30internal fun View.goBack() { 31 activity<NavigatingActivity>().goBack() 32 } 33 getColorCompatnull34internal 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 onScreenExitingnull42internal 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 notifyScreenExitingnull52internal 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 }