Mashudi

MainActivity

May 16th, 2018
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 11.17 KB | None | 0 0
  1. package com.example.masrobot.klikpesanantar.MainApp.Main
  2.  
  3. import android.app.Activity
  4. import android.content.Intent
  5. import android.os.Bundle
  6. import android.support.design.widget.NavigationView
  7. import android.support.v4.view.GravityCompat
  8. import android.support.v7.app.ActionBarDrawerToggle
  9. import android.support.v7.app.AppCompatActivity
  10. import android.support.v7.widget.LinearLayoutManager
  11. import android.support.v7.widget.RecyclerView
  12. import android.util.Log
  13. import android.view.Menu
  14. import android.view.MenuItem
  15. import android.widget.Toast
  16. import com.example.masrobot.klikpesanantar.MainApp.Model.Kategori
  17. import com.example.masrobot.klikpesanantar.MainApp.Model.Users
  18. import com.example.masrobot.klikpesanantar.MainApp.adapter.MainAdapter
  19. import com.example.masrobot.klikpesanantar.R
  20. import com.firebase.ui.auth.AuthUI
  21. import com.firebase.ui.auth.ErrorCodes
  22. import com.firebase.ui.auth.IdpResponse
  23. import com.firebase.ui.auth.data.model.User
  24. import kotlinx.android.synthetic.main.activity_main.*
  25. import kotlinx.android.synthetic.main.app_bar_main.*
  26. import kotlinx.android.synthetic.main.nav_header_main.view.*
  27. import org.jetbrains.anko.alert
  28. import org.jetbrains.anko.appcompat.v7.Appcompat
  29. import org.jetbrains.anko.selector
  30. import org.jetbrains.anko.toast
  31. import org.jetbrains.anko.yesButton
  32. import java.util.*
  33. import kotlin.collections.ArrayList
  34.  
  35.  
  36. class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener, MainView {
  37.     // panggil Presenter
  38.     private var presenter = MainPresenter()
  39.  
  40.     private val TAG: String = MainActivity::class.java.simpleName
  41.  
  42.     // inisialisasi array dan adapter recylerview
  43.     private val mKategori = ArrayList<Kategori>()
  44.     private var mKategoriAdapter: MainAdapter? = null
  45.  
  46.     override fun onCreate(savedInstanceState: Bundle?) {
  47.         super.onCreate(savedInstanceState)
  48.         setContentView(R.layout.activity_main)
  49.         setSupportActionBar(toolbar)
  50.  
  51.         // Initialize Presenter
  52.         initPresenter()
  53.         onAttachView()
  54.     }
  55.  
  56.     // Lifecycle section
  57.     // Attach UI from Presenter
  58.     override fun onAttachView() {
  59.         Log.d(TAG, "onAttachView")
  60.  
  61.         presenter.onAttach(this)
  62.  
  63.         // Nav Drawer Toggle
  64.         val toggle = ActionBarDrawerToggle(
  65.                 this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
  66.         drawer_layout.addDrawerListener(toggle)
  67.         toggle.syncState()
  68.  
  69.         nav_view.setNavigationItemSelectedListener(this)
  70.  
  71.         // Recyclerview initialize
  72.         val mRvKategori = findViewById<RecyclerView>(R.id.rv_kategori)
  73.         mKategoriAdapter = MainAdapter(this, mKategori)
  74.         mRvKategori.adapter = mKategoriAdapter
  75.         mRvKategori.layoutManager = LinearLayoutManager(this)
  76.  
  77.         // run onCreate from Presenter
  78.         presenter.onCreate()
  79.     }
  80.  
  81.     // Detach UI from Presenter
  82.     override fun onDetachView() {
  83.         Log.d(TAG, "onDetachView")
  84.         presenter.onDetach()
  85.     }
  86.  
  87.     // start activity
  88.     override fun onStart() {
  89.         Log.d(TAG, "onStart")
  90.  
  91.         super.onStart()
  92.  
  93.         // run firebase get data onStart
  94.         presenter.onStart()
  95.     }
  96.  
  97.     // resume activity with check user is auth?
  98.     override fun onResume() {
  99.         Log.d(TAG, "onResume")
  100.  
  101.         super.onResume()
  102.  
  103.         // resume activity with check user is auth?
  104.         presenter.onResume()
  105.     }
  106.  
  107.     // stop activity with stop listener firebase database
  108.     override fun onStop() {
  109.         Log.d(TAG, "onStop")
  110.  
  111.         super.onStop()
  112.  
  113.         // fun firebase remove listener
  114.         presenter.onStop()
  115.     }
  116.  
  117.     // Destroy activity
  118.     override fun onDestroy() {
  119.         Log.d(TAG, "onDestroy")
  120.  
  121.         super.onDestroy()
  122.  
  123.         // onDestroy call Detach View
  124.         onDetachView()
  125.     }
  126.  
  127.     // Initialize MainPresenter
  128.     private fun initPresenter() {
  129.         presenter = MainPresenter()
  130.     }
  131.  
  132.     // Navigation Section
  133.     // Back button pressed
  134.     override fun onBackPressed() {
  135.         if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
  136.             drawer_layout.closeDrawer(GravityCompat.START)
  137.         } else {
  138.             super.onBackPressed()
  139.         }
  140.     }
  141.  
  142.     // create toolbar menu
  143.     override fun onCreateOptionsMenu(menu: Menu): Boolean {
  144.         // Inflate the menu; this adds items to the action bar if it is present.
  145.         menuInflater.inflate(R.menu.main, menu)
  146.         return true
  147.     }
  148.  
  149.     // toolbar menu
  150.     override fun onOptionsItemSelected(item: MenuItem): Boolean {
  151.         // Handle action bar item clicks here. The action bar will
  152.         // automatically handle clicks on the Home/Up button, so long
  153.         // as you specify a parent activity in AndroidManifest.xml.
  154.         when (item.itemId) {
  155.             R.id.action_shopping_chart -> return true
  156.         }
  157.         return super.onOptionsItemSelected(item)
  158.     }
  159.  
  160.     // Navigation Drawer
  161.     override fun onNavigationItemSelected(item: MenuItem): Boolean = presenter.
  162.             navigationItemSelected(item)
  163.  
  164.     // show menu item with authentication
  165.     override fun menuItemWithAuth() {
  166.         // Menu Item Hide
  167.         nav_view.menu.findItem(R.id.nav_masuk).isVisible = false
  168.  
  169.         // Menu Item Show
  170.         nav_view.menu.findItem(R.id.nav_favorit).isVisible = true
  171.         nav_view.menu.findItem(R.id.nav_toko).isVisible = true
  172.         nav_view.menu.findItem(R.id.nav_pengaturan).isVisible = true
  173.         nav_view.menu.findItem(R.id.nav_keluar).isVisible = true
  174.  
  175.         // Header Text
  176.         nav_view.getHeaderView(0).nama_lengkap?.text = "Your Username"
  177.         nav_view.getHeaderView(0).user_status?.text = "Your user status"
  178.         nav_view.getHeaderView(0).info_saldo?.text = "$$$"
  179.     }
  180.  
  181.     // show menu item without authentication
  182.     override fun menuItemWithoutAuth() {
  183.         // Menu Item Hide
  184.         nav_view.menu.findItem(R.id.nav_favorit).isVisible = false
  185.         nav_view.menu.findItem(R.id.nav_toko).isVisible = false
  186.         nav_view.menu.findItem(R.id.nav_pengaturan).isVisible = false
  187.         nav_view.menu.findItem(R.id.nav_keluar).isVisible = false
  188.  
  189.         // Menu Item Show
  190.         nav_view.menu.findItem(R.id.nav_masuk).isVisible = true
  191.  
  192.         // Header Text
  193.         nav_view.getHeaderView(0).nama_lengkap?.setText(R.string.app_name)
  194.         nav_view.getHeaderView(0).user_status?.text = ""
  195.         nav_view.getHeaderView(0).info_saldo?.text = ""
  196.     }
  197.  
  198.     // close navigation drawer
  199.     override fun closeDrawer() {
  200.         drawer_layout.closeDrawer(GravityCompat.START)
  201.     }
  202.  
  203.     // startactivity from presenter
  204.     override fun onStartActivity(intent: Intent) {
  205.         startActivity(intent)
  206.     }
  207.  
  208.     // Logic from Presenter Section
  209.     // get passing data from firebase
  210.     override fun refreshKategoriList(kategoris: List<Kategori>) {
  211.         mKategori.clear()
  212.         mKategori.addAll(kategoris)
  213.         mKategoriAdapter?.notifyDataSetChanged()
  214.     }
  215.  
  216.     // get passing toast error database from firebase
  217.     override fun toast(message: String) = Toast.makeText(this, message,
  218.             Toast.LENGTH_SHORT).show()
  219.  
  220.     // fungsi sign in
  221.     override fun signIn(requestCode: Int) {
  222.         startActivityForResult(
  223.                 // Get an instance of AuthUI based on the default app
  224.                 AuthUI.getInstance()
  225.                         .createSignInIntentBuilder()
  226.                         .setAvailableProviders(Arrays.asList(
  227.                                 AuthUI.IdpConfig.PhoneBuilder()
  228.                                         .setDefaultCountryIso("id")
  229.                                         .build(),
  230.                                 AuthUI.IdpConfig.GoogleBuilder().build()))
  231.                         .setIsSmartLockEnabled(true)
  232.                         .setLogo(R.drawable.ic_klikpesanantar)
  233.                         .setTheme(R.style.LoginTheme_NoActionBar)
  234.                         .build(),
  235.                 requestCode)
  236.     }
  237.  
  238.     // fungsi sign out
  239.     override fun signOut() {
  240.         AuthUI.getInstance()
  241.                 .signOut(this)
  242.                 .addOnCompleteListener { task ->
  243.                     if (task.isSuccessful) {
  244.                         presenter.onResume()
  245.                         signIn(presenter.RC_SIGN_IN)
  246.                     } else {
  247.                         toast(R.string.fui_error_unknown)
  248.                     }
  249.                 }
  250.     }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
  251.  
  252.     // catch data from sign in firebaseUI
  253.     override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
  254.         super.onActivityResult(requestCode, resultCode, data)
  255.         // RC_SIGN_IN is the request code you passed into startActivityForResult(...) when starting the sign in flow.
  256.         if (requestCode == presenter.RC_SIGN_IN) {
  257.             val response = IdpResponse.fromResultIntent(data)
  258.  
  259.             // Successfully signed in
  260.             if (resultCode == Activity.RESULT_OK) {
  261.  
  262.                 Log.w(TAG, "Sign In Success")
  263.             } else {
  264.                 // Sign in failed
  265.                 if (response == null) {
  266.                     // User pressed back button
  267.                     Log.w(TAG, "Sign In Cancelled")
  268.                 }
  269.  
  270.                 if (response?.error?.errorCode == ErrorCodes.NO_NETWORK) {
  271.                     alert(Appcompat, "No Internet Access") {
  272.                         yesButton {  }
  273.                     }.show()
  274.                     Log.w(TAG, "No Internet Access")
  275.                 }
  276.                 Log.e(TAG, "Sign-in error: ${response?.error?.message}", response?.error)
  277.             }
  278.         }
  279.     }
  280. }
Add Comment
Please, Sign In to add comment