Skip to content

Instantly share code, notes, and snippets.

@Zulqurnain
Created March 17, 2022 17:51
Show Gist options
  • Save Zulqurnain/fb73e730a0b48b6db34346a147906dbb to your computer and use it in GitHub Desktop.
Save Zulqurnain/fb73e730a0b48b6db34346a147906dbb to your computer and use it in GitHub Desktop.
import android.annotation.SuppressLint
import android.app.Activity
import android.content.Intent
import android.graphics.Color
import android.net.Uri
import android.os.Build
import android.view.Menu
import android.view.View
import android.view.WindowManager
import androidx.annotation.*
import androidx.appcompat.app.ActionBar
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.core.view.ViewCompat
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import com.jutt.professoryapp.R
import com.jutt.professoryapp.application.RxBus
import com.jutt.professoryapp.view.dialogs.ConfirmationDialog
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import timber.log.Timber
fun AppCompatActivity.setupActionBar(toolbar: Toolbar?, action: ActionBar.() -> Unit) {
setSupportActionBar(toolbar)
supportActionBar?.run {
action()
}
}
@SuppressLint("ObsoleteSdkInt")
fun AppCompatActivity.refreshMenu(menu: Menu) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
invalidateOptionsMenu()
} else {
menu.clear()
onCreateOptionsMenu(menu)
}
}
fun AppCompatActivity.doFullScreen(
rootOfLayout: View,
makeStatusBarTransparent: Boolean = false,
hideBottomNavButtons: Boolean = false
) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
window.apply {
clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
decorView.systemUiVisibmility =
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
if(hideBottomNavButtons)
decorView.systemUiVisibility = decorView.systemUiVisibility or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
} else {
decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
}
statusBarColor = Color.TRANSPARENT
}
}
if(makeStatusBarTransparent)
ViewCompat.setOnApplyWindowInsetsListener(rootOfLayout)
{ _, insets -> insets.consumeSystemWindowInsets() }
}
fun AppCompatActivity.hasOpenedDialogs(): Boolean {
val fragments: List<Fragment?> = supportFragmentManager.fragments
for (fragment in fragments) {
if (fragment is DialogFragment && fragment.isShowing()) {
return true
}
}
return false
}
fun AppCompatActivity.replaceFragmentInActivity(
fragment: Fragment,
frameId: Int,
addToBackStack: Boolean = false,
backStackEntry: String? = null,
@AnimatorRes @AnimRes @Size(value = 2) pushAnimation: IntArray? = null,
@AnimatorRes @AnimRes @Size(value = 2) popAnimation: IntArray? = null
) = supportFragmentManager.transact(
addToBackStack = addToBackStack,
backStackEntry = backStackEntry,
pushAnimation = pushAnimation,
popAnimation = popAnimation
) {
replace(frameId, fragment)
}
fun Activity.launchDialIntent(number: String?) {
if (!number.isNullOrBlank()) {
startActivity(Intent(Intent.ACTION_DIAL).apply {
data = Uri.parse("tel:$number")
})
}
}
fun AppCompatActivity.getFragmentFromContainer(@IdRes containerId: Int): Fragment? {
return supportFragmentManager.findFragmentById(containerId)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment