zcash-android-wallet-zcon1/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/ui/activity/MainActivity.kt

126 lines
4.6 KiB
Kotlin
Raw Normal View History

2018-11-12 10:38:37 -08:00
package cash.z.android.wallet.ui.activity
import android.os.Bundle
2019-02-03 23:08:26 -08:00
import android.util.Log
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.view.inputmethod.InputMethodManager.HIDE_NOT_ALWAYS
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.getSystemService
2018-11-12 10:38:37 -08:00
import androidx.core.view.GravityCompat
import androidx.core.view.doOnLayout
2019-02-04 10:42:28 -08:00
import androidx.drawerlayout.widget.DrawerLayout
2018-11-12 10:38:37 -08:00
import androidx.navigation.NavController
import androidx.navigation.NavDestination
2018-11-12 10:38:37 -08:00
import androidx.navigation.Navigation
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import cash.z.android.wallet.BuildConfig
2018-11-12 10:38:37 -08:00
import cash.z.android.wallet.R
import cash.z.android.wallet.ZcashWalletApplication
2018-11-12 10:38:37 -08:00
import dagger.Module
import dagger.android.ContributesAndroidInjector
import dagger.android.support.DaggerAppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.nav_header_main.*
import cash.z.wallet.sdk.data.Synchronizer
2019-02-03 23:08:26 -08:00
import com.google.android.material.snackbar.Snackbar
import dagger.android.AndroidInjection
import kotlinx.android.synthetic.main.activity_main_first_run.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
2019-02-03 23:08:26 -08:00
import kotlinx.coroutines.channels.ReceiveChannel
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import javax.inject.Inject
2018-11-12 10:38:37 -08:00
class MainActivity : BaseActivity() {
@Inject
lateinit var synchronizer: Synchronizer
2018-11-12 10:38:37 -08:00
// used to manage the drawer and drawerToggle interactions
private lateinit var appBarConfiguration: AppBarConfiguration
2018-11-12 10:38:37 -08:00
lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if(!DEV_MODE)synchronizer.start(this)
}
override fun onDestroy() {
super.onDestroy()
synchronizer.stop()
2018-11-12 10:38:37 -08:00
}
override fun onBackPressed() {
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
drawer_layout.closeDrawer(GravityCompat.START)
} else {
super.onBackPressed()
}
}
override fun onResume() {
super.onResume()
if(DEV_MODE) navController.navigate(R.id.nav_send_fragment)
}
2018-11-13 08:59:48 -08:00
/**
* Let the navController override the default behavior when the drawer icon or back arrow are clicked. This
* automatically takes care of the drawer toggle behavior. Note that without overriding this method, the up/drawer
* buttons will not function.
*/
2018-11-12 10:38:37 -08:00
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
}
2019-02-04 10:42:28 -08:00
fun setDrawerLocked(isLocked: Boolean) {
drawer_layout.setDrawerLockMode(if (isLocked) DrawerLayout.LOCK_MODE_LOCKED_CLOSED else DrawerLayout.LOCK_MODE_UNLOCKED)
}
fun setupNavigation() {
2018-11-13 08:59:48 -08:00
// create and setup the navController and appbarConfiguration
navController = Navigation.findNavController(this, R.id.nav_host_fragment).also { n ->
appBarConfiguration = AppBarConfiguration(n.graph, drawer_layout).also { a ->
nav_view.setupWithNavController(n)
setupActionBarWithNavController(n, a)
}
}
navController.addOnNavigatedListener { _, _ ->
// hide the keyboard anytime we change destinations
getSystemService<InputMethodManager>()?.hideSoftInputFromWindow(nav_view.windowToken, HIDE_NOT_ALWAYS)
}
2018-11-13 08:59:48 -08:00
// remove icon tint so that our colored nav icons show through
nav_view.itemIconTintList = null
nav_view.doOnLayout {
text_nav_header_subtitle.text = "Version ${BuildConfig.VERSION_NAME}"
}
2018-11-13 11:03:11 -08:00
}
companion object {
/**
* A simple flag that helps with removing shortcuts in the code used during development.
* TODO: either elevate this to a real thing (based off a system property or some such) or delete it!
*/
2019-02-03 17:27:54 -08:00
const val DEV_MODE = false
2019-01-14 00:09:02 -08:00
// TODO: placeholder until we have a network service for this
const val USD_PER_ZEC = 49.07
init {
// Enable vector drawable magic
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
}
2018-11-12 10:38:37 -08:00
}
}
@Module
abstract class MainActivityModule {
@ContributesAndroidInjector
abstract fun contributeMainActivity(): MainActivity
}