Skip to content

Instantly share code, notes, and snippets.

@AAverin
Created June 8, 2016 05:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AAverin/dcf50af01bdd7ddcad86cb477ca6c200 to your computer and use it in GitHub Desktop.
Save AAverin/dcf50af01bdd7ddcad86cb477ca6c200 to your computer and use it in GitHub Desktop.
interface NavigationDrawerViewExtensionDelegate : EventsDelegate {
fun showInitialScreen()
fun showNav1Screen()
fun showNav2Screen()
}
interface NavigationDrawerViewExtensionContract
@ActivityScope
class NavigationDrawerViewExtension @Inject constructor(
private val activity: BaseActivity,
private val drawerToggleFactory: DrawerToggleFactory
) : EventsDelegatingViewExtension<NavigationDrawerViewExtensionDelegate>, NavigationDrawerViewExtensionContract, ExtraLifecycleDelegate {
override var eventsDelegate: NavigationDrawerViewExtensionDelegate? = null
private var toolbar: Toolbar? = null
private var drawer: DrawerLayout? = null
private lateinit var navigationView: NavigationView
fun setViews(
drawer: DrawerLayout,
navigationView: NavigationView) {
this.drawer = drawer;
this.navigationView = navigationView
createDrawerToggle()
}
fun setToolbar(toolbar: Toolbar) {
this.toolbar = toolbar
createDrawerToggle()
}
override fun onCreate(savedInstanceState: Bundle?) {
navigationView.setNavigationItemSelectedListener { onNavigationItemSelected(it.itemId) }
eventsDelegate?.showInitialScreen()
}
override fun onBackPressed(): Boolean {
if (drawer?.isDrawerOpen(GravityCompat.START) ?: false) {
drawer?.closeDrawer(GravityCompat.START)
return true
}
return false
}
private fun createDrawerToggle() {
if (drawer == null || toolbar == null) return
val toggle = drawerToggleFactory.create(
activity,
drawer!!,
toolbar!!,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close)
drawer!!.setDrawerListener(toggle)
toggle.syncState()
}
private fun onNavigationItemSelected(id: Int): Boolean {
when (id) {
R.id.nav1 -> eventsDelegate?.showNav1Screen()
R.id.nav2 -> eventsDelegate?.showNav2Screen()
}
drawer?.closeDrawer(GravityCompat.START)
return true
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment