Advertisement
nurrohim11

Untitled

Sep 14th, 2018
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 10.47 KB | None | 0 0
  1. package com.izzaweb.dicodingfootbalapps.detail
  2.  
  3. import android.database.sqlite.SQLiteConstraintException
  4. import android.support.v7.app.AppCompatActivity
  5. import android.os.Bundle
  6. import android.support.v4.content.ContextCompat
  7. import android.support.v4.widget.SwipeRefreshLayout
  8. import android.view.Menu
  9. import android.view.MenuItem
  10. import android.widget.ProgressBar
  11. import com.google.gson.Gson
  12. import com.izzaweb.dicodingfootbalapps.R
  13. import com.izzaweb.dicodingfootbalapps.R.drawable.ic_add_to_favorites
  14. import com.izzaweb.dicodingfootbalapps.R.drawable.ic_added_to_favorites
  15. import com.izzaweb.dicodingfootbalapps.R.id.add_to_favorite
  16. import com.izzaweb.dicodingfootbalapps.R.menu.detail_menu
  17. import com.izzaweb.dicodingfootbalapps.api.ApiRepository
  18. import com.izzaweb.dicodingfootbalapps.favorit.database
  19. import com.izzaweb.dicodingfootbalapps.model.Events
  20. import com.izzaweb.dicodingfootbalapps.model.Favorit
  21. import com.izzaweb.dicodingfootbalapps.nextmatch.NextMatchPresenter
  22. import com.izzaweb.dicodingfootbalapps.util.invisible
  23. import com.izzaweb.dicodingfootbalapps.util.visible
  24. import com.squareup.picasso.Picasso
  25. import kotlinx.android.synthetic.main.activity_detail.*
  26. import kotlinx.coroutines.experimental.selects.select
  27. import okhttp3.*
  28. import org.jetbrains.anko.ctx
  29. import org.jetbrains.anko.db.classParser
  30. import org.jetbrains.anko.db.delete
  31. import org.jetbrains.anko.db.insert
  32. import org.jetbrains.anko.db.select
  33. import org.jetbrains.anko.design.snackbar
  34. import org.jetbrains.anko.find
  35. import org.jetbrains.anko.support.v4.onRefresh
  36. import org.json.JSONObject
  37. import java.io.IOException
  38. import java.text.SimpleDateFormat
  39. import java.util.*
  40.  
  41. class DetailActivity : AppCompatActivity(), DetailEventView {
  42.     val client = OkHttpClient()
  43.     private lateinit var presenter: DetailEventPresenter
  44.     private lateinit var id: String
  45.     private var idHome: String = ""
  46.     private var idAway: String = ""
  47.     private lateinit var progressBar: ProgressBar
  48.     private lateinit var swipeRefresh: SwipeRefreshLayout
  49.     private lateinit var events: Events
  50.     private var menuItem: Menu? = null
  51.     private var isFavorite: Boolean = false
  52.  
  53.     override fun onCreate(savedInstanceState: Bundle?) {
  54.         super.onCreate(savedInstanceState)
  55.         setContentView(R.layout.activity_detail)
  56.  
  57.         supportActionBar?.title = "Match Detail"
  58.         supportActionBar?.setDisplayHomeAsUpEnabled(true)
  59.  
  60.         progressBar = find(R.id.progress_bar_detail)
  61.         swipeRefresh = find(R.id.swipe_refresh_detail)
  62.         val intent = intent
  63.         id = intent.getStringExtra("id")
  64.         idHome = intent.getStringExtra("idHome")
  65.         idAway = intent.getStringExtra("idAway")
  66.         favoriteState()
  67.         val request = ApiRepository()
  68.         val gson = Gson()
  69.         presenter = DetailEventPresenter(this, request, gson)
  70.         presenter.getDetailEvent(id)
  71.         swipeRefresh.onRefresh {
  72.             presenter.getDetailEvent(id)
  73.         }
  74.         val logo = arrayOf(idHome, idAway)
  75.         getBadge(logo)
  76.     }
  77.  
  78.     override fun showLoading() {
  79.         progressBar.visible()
  80.     }
  81.  
  82.     override fun hideLoading() {
  83.         progressBar.invisible()
  84.  
  85.     }
  86.  
  87.     override fun showDetailEvent(data: List<Events>) {
  88.         events = Events(data[0].idEvent,
  89.                 data[0].teamHomeName,
  90.                 data[0].teamAwayName,
  91.                 data[0].teamHomeScore,
  92.                 data[0].teamAwayScore,
  93.                 data[0].dateEvent,
  94.                 data[0].time,
  95.                 data[0].idHomeTeam,
  96.                 data[0].idAwayTeam,
  97.                 data[0].strHomeGoalDetails,
  98.                 data[0].strAwayGoalDetails,
  99.                 data[0].intHomeShots,
  100.                 data[0].intAwayShots,
  101.                 data[0].strHomeLineupDefense,
  102.                 data[0].strAwayLineupDefense,
  103.                 data[0].strHomeLineupMidfield,
  104.                 data[0].strAwayLineupMidfield,
  105.                 data[0].strHomeLineupForward,
  106.                 data[0].strAwayLineupForward,
  107.                 data[0].strHomeLineupSubstitutes,
  108.                 data[0].strAwayLineupSubstitutes,
  109.                 data[0].strHomeFormation,
  110.                 data[0].strAwayFormation,
  111.                 data[0].strHomeLineupGoalkeeper,
  112.                 data[0].strAwayLineupGoalkeeper)
  113.         swipeRefresh.isRefreshing = false
  114.         tv_date_detail.text = data[0].dateEvent
  115.         tv_time_detail.text = data[0].time
  116.         tv_home_detail.text = data[0].teamHomeName
  117.         tv_away_detail.text = data[0].teamAwayName
  118.         if(data[0].teamHomeScore.isNullOrEmpty() && data[0].teamAwayScore.isNullOrEmpty()){
  119.             tv_skor_detail.text = "0 vs 0"
  120.         }else{
  121.             tv_skor_detail.text = data[0].teamHomeScore+"  vs  "+data[0].teamAwayScore
  122.         }
  123.         tv_home_formation.text = data[0].strHomeFormation
  124.         tv_away_formation.text = data[0].strAwayFormation
  125.         tv_home_goals.text = data[0].strHomeGoalDetails?.replace(";", "\n")
  126.         tv_away_goals.text = data[0].strAwayGoalDetails?.replace(";", "\n")
  127.         tv_home_shots.text = data[0].intHomeShots
  128.         tv_away_shots.text = data[0].intAwayShots
  129.         tv_home_gk.text = data[0].strHomeLineupGoalkeeper
  130.         tv_away_gk.text = data[0].strAwayLineupGoalkeeper
  131.         tv_home_def.text =data[0].strHomeLineupDefense
  132.         tv_away_def.text =data[0].strAwayLineupDefense
  133.         tv_home_mid.text =data[0].strHomeLineupMidfield
  134.         tv_away_mid.text =data[0].strAwayLineupMidfield
  135.         tv_home_forward.text = data[0].strHomeLineupForward
  136.         tv_away_forward.text =data[0].strAwayLineupForward
  137.         tv_home_subs.text = data[0].strHomeLineupSubstitutes
  138.         tv_away_subs.text = data[0].strAwayLineupSubstitutes
  139.     }
  140.     private fun getBadge(logo: Array<String>) {
  141.         for(i in 0..1){
  142.             val request = Request.Builder()
  143.                      .url("https://www.thesportsdb.com/api/v1/json/1/lookupteam.php?id="+logo[i])
  144.                     .build()
  145.             client.newCall(request).enqueue(object : Callback {
  146.                 override fun onFailure(call: Call, e: IOException) {}
  147.                 override fun onResponse(call: Call, response: Response) {
  148.                     var a = response.body()?.string()
  149.                     runOnUiThread {
  150.                         run(){
  151.                             var json = JSONObject(a)
  152.                             var badge = json.getJSONArray("teams").getJSONObject(0).getString("strTeamBadge")
  153.                             if(i == 0) {
  154.                                 Picasso.get().load(badge).into(img_home)
  155.                             }else{
  156.                                 Picasso.get().load(badge).into(img_away)
  157.                             }
  158.                         }
  159.                     }
  160.                 }
  161.             })
  162.         }
  163.     }
  164.     private fun favoriteState(){
  165.         database.use {
  166.             val result = select(Favorit.TABLE_FAVORITE)
  167.                     .whereArgs("(TEAM_ID = {id})",
  168.                             "id" to id)
  169.             val favorite = result.parseList(classParser<Favorit>())
  170.             if (!favorite.isEmpty()) isFavorite = true
  171.         }
  172.     }
  173.     override fun onCreateOptionsMenu(menu: Menu?): Boolean {
  174.         menuInflater.inflate(detail_menu, menu)
  175.         menuItem = menu
  176.         setFavorite()
  177.         return true
  178.     }
  179.  
  180.     override fun onOptionsItemSelected(item: MenuItem?): Boolean {
  181.         return when (item?.itemId) {
  182.             android.R.id.home -> {
  183.                 finish()
  184.                 true
  185.             }
  186.             add_to_favorite -> {
  187.                 if (isFavorite) removeFromFavorite() else addToFavorite()
  188.  
  189.                 isFavorite = !isFavorite
  190.                 setFavorite()
  191.  
  192.                 true
  193.             }
  194.  
  195.             else -> super.onOptionsItemSelected(item)
  196.         }
  197.     }
  198.     private fun addToFavorite(){
  199.         try {
  200.             database.use {
  201.                 insert(Favorit.TABLE_FAVORITE,
  202.                         Favorit.TEAM_ID to events.idEvent,
  203.                         Favorit.TEAM_HOME_NAME to events.teamHomeName,
  204.                         Favorit.TEAM_AWAY_NAME to events.teamAwayName,
  205.                         Favorit.TEAM_HOME_SCORE to events.teamHomeScore,
  206.                         Favorit.TEAM_AWAY_SCORE to events.teamAwayScore,
  207.                         Favorit.DATE_EVENT to events.dateEvent,
  208.                         Favorit.TIME to events.time,
  209.                         Favorit.ID_HOME_TEAM to events.idHomeTeam,
  210.                         Favorit.ID_AWAY_TEAM to events.idAwayTeam,
  211.                         Favorit.STR_HOME_GOAL_DETAIL to  events.strHomeGoalDetails,
  212.                         Favorit.STR_AWAY_GOAL_DETAIL to events.strAwayGoalDetails,
  213.                         Favorit.HOME_SHOTS to events.intHomeShots,
  214.                         Favorit.AWAY_SHOTS to events.intAwayShots,
  215.                         Favorit.HOME_LINEUP_DEFENSE to events.strHomeLineupDefense,
  216.                         Favorit.AWAY_LINEUP_DEFENSE to events.strHomeLineupDefense,
  217.                         Favorit.HOME_LINEUP_MIDFIELD to events.strHomeLineupMidfield,
  218.                         Favorit.AWAY_LINEUP_MIDFIELD to events.strHomeLineupMidfield,
  219.                         Favorit.HOME_LINEUP_FORWARD to events.strHomeLineupForward,
  220.                         Favorit.AWAY_LINEUP_FORWARD to events.strAwayLineupForward,
  221.                         Favorit.HOME_LINEUP_SUBSTITUTES to events.strHomeLineupSubstitutes,
  222.                         Favorit.AWAY_LINEUP_SUBSTITUTES to events.strAwayLineupSubstitutes,
  223.                         Favorit.HOME_LINEUP_FORMASI to events.strHomeFormation,
  224.                         Favorit.AWAY_LINEUP_FORMASI to events.strAwayFormation,
  225.                         Favorit.HOME_LINEUP_GOOLKEEPER to events.strHomeLineupGoalkeeper,
  226.                         Favorit.AWAY_LINEUP_GOOLKEEPER to events.strAwayLineupGoalkeeper)
  227.             }
  228.             snackbar(swipeRefresh,"Addded to favorite").show()
  229.         }catch (e: SQLiteConstraintException){
  230.             snackbar(swipeRefresh, e.localizedMessage).show()
  231.         }
  232.     }
  233.     private fun setFavorite() {
  234.         if (isFavorite)
  235.             menuItem?.getItem(0)?.icon = ContextCompat.getDrawable(this, ic_added_to_favorites)
  236.         else
  237.             menuItem?.getItem(0)?.icon = ContextCompat.getDrawable(this, ic_add_to_favorites)
  238.     }
  239.  
  240.     private fun removeFromFavorite(){
  241.         try {
  242.             database.use {
  243.                 delete(Favorit.TABLE_FAVORITE, "(TEAM_ID = {id})",
  244.                         "id" to id)
  245.             }
  246.             snackbar(swipeRefresh, "Removed to favorite").show()
  247.         }catch (e : SQLiteConstraintException){
  248.             snackbar(swipeRefresh, e.localizedMessage).show()
  249.         }
  250.     }
  251.  
  252. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement