package code.name.monkey.retromusic.extensions import android.content.Context import android.content.res.Configuration import android.graphics.drawable.Drawable import android.os.PowerManager import android.widget.Toast import androidx.annotation.DrawableRes import androidx.annotation.IdRes import androidx.annotation.IntegerRes import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.content.res.AppCompatResources import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.navigation.fragment.NavHostFragment import code.name.monkey.retromusic.util.PreferenceUtil fun Fragment.getIntRes(@IntegerRes int: Int): Int { return resources.getInteger(int) } fun Context.getIntRes(@IntegerRes int: Int): Int { return resources.getInteger(int) } val Context.generalThemeValue get() = PreferenceUtil.getGeneralThemeValue(isSystemDarkModeEnabled()) fun Context.isSystemDarkModeEnabled(): Boolean { val isBatterySaverEnabled = (getSystemService(Context.POWER_SERVICE) as PowerManager?)?.isPowerSaveMode ?: false val isDarkModeEnabled = (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES return isBatterySaverEnabled or isDarkModeEnabled } inline fun Fragment.extra(key: String, default: T? = null) = lazy { val value = arguments?.get(key) if (value is T) value else default } inline fun Fragment.extraNotNull(key: String, default: T? = null) = lazy { val value = arguments?.get(key) requireNotNull(if (value is T) value else default) { key } } val NavHostFragment.currentFragment: Fragment? get() = targetFragment val FragmentManager.currentNavigationFragment: Fragment? get() = primaryNavigationFragment?.childFragmentManager?.fragments?.first() fun AppCompatActivity.currentFragment(navHostId: Int): Fragment? { val navHostFragment: NavHostFragment = supportFragmentManager.findFragmentById(navHostId) as NavHostFragment navHostFragment.targetFragment return navHostFragment.childFragmentManager.fragments.first() } @Suppress("UNCHECKED_CAST") fun AppCompatActivity.whichFragment(@IdRes id: Int): T { return supportFragmentManager.findFragmentById(id) as T } @Suppress("UNCHECKED_CAST") fun Fragment.whichFragment(@IdRes id: Int): T { return childFragmentManager.findFragmentById(id) as T } fun Fragment.showToast(@StringRes stringRes: Int) { showToast(getString(stringRes)) } fun Fragment.showToast(message: String) { Toast.makeText(requireContext(), message, Toast.LENGTH_SHORT).show() } fun Context.getDrawableCompat(@DrawableRes drawableRes: Int): Drawable { return AppCompatResources.getDrawable(this, drawableRes)!! } fun Fragment.getDrawableCompat(@DrawableRes drawableRes: Int): Drawable { return AppCompatResources.getDrawable(requireContext(), drawableRes)!! }