Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.masrobot.klikpesanantar.MainApp.Main
- import android.app.Activity
- import android.content.Intent
- import android.os.Bundle
- import android.support.design.widget.NavigationView
- import android.support.v4.view.GravityCompat
- import android.support.v7.app.ActionBarDrawerToggle
- import android.support.v7.app.AppCompatActivity
- import android.support.v7.widget.LinearLayoutManager
- import android.support.v7.widget.RecyclerView
- import android.util.Log
- import android.view.Menu
- import android.view.MenuItem
- import android.widget.Toast
- import com.example.masrobot.klikpesanantar.MainApp.Model.Kategori
- import com.example.masrobot.klikpesanantar.MainApp.Model.Users
- import com.example.masrobot.klikpesanantar.MainApp.adapter.MainAdapter
- import com.example.masrobot.klikpesanantar.R
- import com.firebase.ui.auth.AuthUI
- import com.firebase.ui.auth.ErrorCodes
- import com.firebase.ui.auth.IdpResponse
- import com.firebase.ui.auth.data.model.User
- import kotlinx.android.synthetic.main.activity_main.*
- import kotlinx.android.synthetic.main.app_bar_main.*
- import kotlinx.android.synthetic.main.nav_header_main.view.*
- import org.jetbrains.anko.alert
- import org.jetbrains.anko.appcompat.v7.Appcompat
- import org.jetbrains.anko.selector
- import org.jetbrains.anko.toast
- import org.jetbrains.anko.yesButton
- import java.util.*
- import kotlin.collections.ArrayList
- class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener, MainView {
- // panggil Presenter
- private var presenter = MainPresenter()
- private val TAG: String = MainActivity::class.java.simpleName
- // inisialisasi array dan adapter recylerview
- private val mKategori = ArrayList<Kategori>()
- private var mKategoriAdapter: MainAdapter? = null
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
- setSupportActionBar(toolbar)
- // Initialize Presenter
- initPresenter()
- onAttachView()
- }
- // Lifecycle section
- // Attach UI from Presenter
- override fun onAttachView() {
- Log.d(TAG, "onAttachView")
- presenter.onAttach(this)
- // Nav Drawer Toggle
- val toggle = ActionBarDrawerToggle(
- this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
- drawer_layout.addDrawerListener(toggle)
- toggle.syncState()
- nav_view.setNavigationItemSelectedListener(this)
- // Recyclerview initialize
- val mRvKategori = findViewById<RecyclerView>(R.id.rv_kategori)
- mKategoriAdapter = MainAdapter(this, mKategori)
- mRvKategori.adapter = mKategoriAdapter
- mRvKategori.layoutManager = LinearLayoutManager(this)
- // run onCreate from Presenter
- presenter.onCreate()
- }
- // Detach UI from Presenter
- override fun onDetachView() {
- Log.d(TAG, "onDetachView")
- presenter.onDetach()
- }
- // start activity
- override fun onStart() {
- Log.d(TAG, "onStart")
- super.onStart()
- // run firebase get data onStart
- presenter.onStart()
- }
- // resume activity with check user is auth?
- override fun onResume() {
- Log.d(TAG, "onResume")
- super.onResume()
- // resume activity with check user is auth?
- presenter.onResume()
- }
- // stop activity with stop listener firebase database
- override fun onStop() {
- Log.d(TAG, "onStop")
- super.onStop()
- // fun firebase remove listener
- presenter.onStop()
- }
- // Destroy activity
- override fun onDestroy() {
- Log.d(TAG, "onDestroy")
- super.onDestroy()
- // onDestroy call Detach View
- onDetachView()
- }
- // Initialize MainPresenter
- private fun initPresenter() {
- presenter = MainPresenter()
- }
- // Navigation Section
- // Back button pressed
- override fun onBackPressed() {
- if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
- drawer_layout.closeDrawer(GravityCompat.START)
- } else {
- super.onBackPressed()
- }
- }
- // create toolbar menu
- override fun onCreateOptionsMenu(menu: Menu): Boolean {
- // Inflate the menu; this adds items to the action bar if it is present.
- menuInflater.inflate(R.menu.main, menu)
- return true
- }
- // toolbar menu
- override fun onOptionsItemSelected(item: MenuItem): Boolean {
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- when (item.itemId) {
- R.id.action_shopping_chart -> return true
- }
- return super.onOptionsItemSelected(item)
- }
- // Navigation Drawer
- override fun onNavigationItemSelected(item: MenuItem): Boolean = presenter.
- navigationItemSelected(item)
- // show menu item with authentication
- override fun menuItemWithAuth() {
- // Menu Item Hide
- nav_view.menu.findItem(R.id.nav_masuk).isVisible = false
- // Menu Item Show
- nav_view.menu.findItem(R.id.nav_favorit).isVisible = true
- nav_view.menu.findItem(R.id.nav_toko).isVisible = true
- nav_view.menu.findItem(R.id.nav_pengaturan).isVisible = true
- nav_view.menu.findItem(R.id.nav_keluar).isVisible = true
- // Header Text
- nav_view.getHeaderView(0).nama_lengkap?.text = "Your Username"
- nav_view.getHeaderView(0).user_status?.text = "Your user status"
- nav_view.getHeaderView(0).info_saldo?.text = "$$$"
- }
- // show menu item without authentication
- override fun menuItemWithoutAuth() {
- // Menu Item Hide
- nav_view.menu.findItem(R.id.nav_favorit).isVisible = false
- nav_view.menu.findItem(R.id.nav_toko).isVisible = false
- nav_view.menu.findItem(R.id.nav_pengaturan).isVisible = false
- nav_view.menu.findItem(R.id.nav_keluar).isVisible = false
- // Menu Item Show
- nav_view.menu.findItem(R.id.nav_masuk).isVisible = true
- // Header Text
- nav_view.getHeaderView(0).nama_lengkap?.setText(R.string.app_name)
- nav_view.getHeaderView(0).user_status?.text = ""
- nav_view.getHeaderView(0).info_saldo?.text = ""
- }
- // close navigation drawer
- override fun closeDrawer() {
- drawer_layout.closeDrawer(GravityCompat.START)
- }
- // startactivity from presenter
- override fun onStartActivity(intent: Intent) {
- startActivity(intent)
- }
- // Logic from Presenter Section
- // get passing data from firebase
- override fun refreshKategoriList(kategoris: List<Kategori>) {
- mKategori.clear()
- mKategori.addAll(kategoris)
- mKategoriAdapter?.notifyDataSetChanged()
- }
- // get passing toast error database from firebase
- override fun toast(message: String) = Toast.makeText(this, message,
- Toast.LENGTH_SHORT).show()
- // fungsi sign in
- override fun signIn(requestCode: Int) {
- startActivityForResult(
- // Get an instance of AuthUI based on the default app
- AuthUI.getInstance()
- .createSignInIntentBuilder()
- .setAvailableProviders(Arrays.asList(
- AuthUI.IdpConfig.PhoneBuilder()
- .setDefaultCountryIso("id")
- .build(),
- AuthUI.IdpConfig.GoogleBuilder().build()))
- .setIsSmartLockEnabled(true)
- .setLogo(R.drawable.ic_klikpesanantar)
- .setTheme(R.style.LoginTheme_NoActionBar)
- .build(),
- requestCode)
- }
- // fungsi sign out
- override fun signOut() {
- AuthUI.getInstance()
- .signOut(this)
- .addOnCompleteListener { task ->
- if (task.isSuccessful) {
- presenter.onResume()
- signIn(presenter.RC_SIGN_IN)
- } else {
- toast(R.string.fui_error_unknown)
- }
- }
- }
- // catch data from sign in firebaseUI
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- super.onActivityResult(requestCode, resultCode, data)
- // RC_SIGN_IN is the request code you passed into startActivityForResult(...) when starting the sign in flow.
- if (requestCode == presenter.RC_SIGN_IN) {
- val response = IdpResponse.fromResultIntent(data)
- // Successfully signed in
- if (resultCode == Activity.RESULT_OK) {
- Log.w(TAG, "Sign In Success")
- } else {
- // Sign in failed
- if (response == null) {
- // User pressed back button
- Log.w(TAG, "Sign In Cancelled")
- }
- if (response?.error?.errorCode == ErrorCodes.NO_NETWORK) {
- alert(Appcompat, "No Internet Access") {
- yesButton { }
- }.show()
- Log.w(TAG, "No Internet Access")
- }
- Log.e(TAG, "Sign-in error: ${response?.error?.message}", response?.error)
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment