rifki_cs29

DetailActivity

Jul 1st, 2020
349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 6.83 KB | None | 0 0
  1. package com.rifki.kotlin.mygithubfinal.view.activity
  2.  
  3. import android.content.ContentResolver
  4. import android.content.ContentValues
  5. import android.net.Uri
  6. import androidx.appcompat.app.AppCompatActivity
  7. import android.os.Bundle
  8. import android.util.Log
  9. import android.view.Menu
  10. import android.view.MenuItem
  11. import androidx.appcompat.app.ActionBar
  12. import androidx.core.content.ContextCompat
  13. import androidx.lifecycle.Observer
  14. import androidx.lifecycle.ViewModelProvider
  15. import com.bumptech.glide.Glide
  16. import com.bumptech.glide.request.RequestOptions
  17. import com.google.android.material.snackbar.Snackbar
  18. import com.rifki.kotlin.mygithubfinal.R
  19. import com.rifki.kotlin.mygithubfinal.adapter.SectionsPagerAdapter
  20. import com.rifki.kotlin.mygithubfinal.db.DatabaseContract
  21. import com.rifki.kotlin.mygithubfinal.db.DatabaseContract.FavouriteColumns.Companion.CONTENT_URI
  22. import com.rifki.kotlin.mygithubfinal.db.FavouriteHelper
  23. import com.rifki.kotlin.mygithubfinal.helper.MappingHelper
  24. import com.rifki.kotlin.mygithubfinal.model.GithubUser
  25. import com.rifki.kotlin.mygithubfinal.view.fragment.FollowersFragment
  26. import com.rifki.kotlin.mygithubfinal.view.fragment.FollowingFragment
  27. import com.rifki.kotlin.mygithubfinal.viewModel.DetailViewModel
  28. import kotlinx.android.synthetic.main.activity_detail.*
  29.  
  30. class DetailActivity : AppCompatActivity() {
  31.     private lateinit var detailViewModel: DetailViewModel
  32.     private lateinit var username: String
  33.     private var isFavourite = false
  34.     private lateinit var uriWithId : Uri
  35.     private var menuItem: Menu? = null
  36.  
  37.     companion object {
  38.         const val EXTRA_STATE = "extra_state"
  39.         internal val TAG = DetailActivity::class.java.simpleName
  40.     }
  41.  
  42.     private fun setActionBarTitle(username: String) {
  43.         if (supportActionBar != null) {
  44.             (supportActionBar as ActionBar).title = username
  45.         }
  46.     }
  47.  
  48.     override fun onCreate(savedInstanceState: Bundle?) {
  49.         super.onCreate(savedInstanceState)
  50.         setContentView(R.layout.activity_detail)
  51.  
  52.         val detailGithubUser = intent.getParcelableExtra(EXTRA_STATE) as GithubUser
  53.  
  54.         Glide.with(this)
  55.             .load(detailGithubUser.avatar)
  56.             .apply(RequestOptions()
  57.                 .placeholder(R.drawable.ic_baseline_account_circle_24)
  58.                 .error(R.drawable.ic_baseline_account_circle_24))
  59.             .into(image_avatar)
  60.         tv_username.text = detailGithubUser.username
  61.  
  62.         detailViewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(DetailViewModel::class.java)
  63.  
  64.         detailViewModel.setDetailGithubUser(detailGithubUser.username)
  65.         detailViewModel.getDetailGithubUsers().observe(this, Observer { githubUser ->
  66.             if(githubUser != null) {
  67.                 tv_name.text = githubUser.name
  68.                 tv_repo.text = githubUser.repository.toString()
  69.                 tv_company.text = githubUser.company
  70.                 tv_bio.text = githubUser.bio
  71.                 tv_location.text = githubUser.location
  72.             }
  73.         })
  74.  
  75.         val sectionsPagerAdapter = SectionsPagerAdapter(this, supportFragmentManager)
  76.         sectionsPagerAdapter.setData(detailGithubUser.username)
  77.         view_pager.adapter = sectionsPagerAdapter
  78.         tabs_follow.setupWithViewPager(view_pager)
  79.         supportActionBar?.elevation = 0f
  80.  
  81.         val bundle = Bundle()
  82.         val followersFragment = FollowersFragment()
  83.         bundle.putString(FollowersFragment.EXTRA_FOLLOWERS, detailGithubUser.username)
  84.         followersFragment.arguments = bundle
  85.  
  86.         val followingFragment = FollowingFragment()
  87.         bundle.putString(FollowingFragment.EXTRA_FOLLOWING, detailGithubUser.username)
  88.         followingFragment.arguments = bundle
  89.  
  90.         setActionBarTitle(detailGithubUser.username)
  91.  
  92.         favouriteCheck()
  93.     }
  94.  
  95.     private fun favouriteCheck(){
  96.         val githubUser = intent.getParcelableExtra(EXTRA_STATE) as GithubUser
  97.         uriWithId = Uri.parse(CONTENT_URI.toString() + "/" + githubUser.username)
  98.         val cursor = contentResolver.query(uriWithId, null, null, null, null)
  99.  
  100.         Log.d(TAG, "UriWithId : ${uriWithId.toString()}")
  101.         Log.d(TAG,"Cursor : $cursor")
  102.         /*if(cursor != null){
  103.             isFavourite = true
  104.         } else isFavourite */
  105.         /*val favourite = MappingHelper.mapCursorToArrayList(
  106.             cursor?.apply {
  107.                 while (moveToNext()){
  108.                     getString(getColumnIndexOrThrow(DatabaseContract.FavouriteColumns.USERNAME))
  109.                 }
  110.             }
  111.         )
  112.         if (favourite.isNotEmpty()) isFavourite = true
  113.         Log.d(TAG, "Favorite : ${favourite.toString()}")
  114.         Log.d(TAG,"Cursor : ${cursor.toString()}")*/
  115.         /*val dataGitObject = MappingHelper.mapCursorToArrayList(cursor)
  116.         for (data in dataGitObject) {
  117.             if (githubUser.username == data.username) {
  118.                 isFavourite = true
  119.                 Log.d(TAG, "this User Favorite")
  120.             }
  121.         }*/
  122.     }
  123.  
  124.     private fun insertFavouriteUser(){
  125.         val githubUser = intent.getParcelableExtra(EXTRA_STATE) as GithubUser
  126.         val values = ContentValues().apply {
  127.             put(DatabaseContract.FavouriteColumns.USERNAME, githubUser.username)
  128.             put(DatabaseContract.FavouriteColumns.AVATAR, githubUser.avatar)
  129.             put(DatabaseContract.FavouriteColumns.URL, githubUser.url)
  130.         }
  131.         contentResolver.insert(CONTENT_URI, values)
  132.         showSnackbarMessage("${githubUser.username} Favourite")
  133.     }
  134.  
  135.     private fun deleteFavouriteUser(){
  136.         val githubUser = intent.getParcelableExtra(EXTRA_STATE) as GithubUser
  137.         contentResolver.delete(uriWithId, null, null)
  138.         showSnackbarMessage("${githubUser.username} Favourite Delete")
  139.     }
  140.  
  141.     private fun setFavouriteIcon(){
  142.         if (isFavourite){
  143.             menuItem?.getItem(0)?.icon = ContextCompat.getDrawable(this, R.drawable.ic_baseline_favorite_24)
  144.         } else {
  145.             menuItem?.getItem(0)?.icon = ContextCompat.getDrawable(this, R.drawable.ic_baseline_favorite_border_24)
  146.         }
  147.     }
  148.  
  149.     override fun onCreateOptionsMenu(menu: Menu): Boolean {
  150.         menuInflater.inflate(R.menu.options_menu_detail, menu)
  151.         menuItem = menu
  152.         setFavouriteIcon()
  153.         return true
  154.     }
  155.  
  156.     override fun onOptionsItemSelected(item: MenuItem): Boolean {
  157.         return when (item.itemId) {
  158.             R.id.favorite -> {
  159.                 if (isFavourite) deleteFavouriteUser() else insertFavouriteUser()
  160.  
  161.                 isFavourite = !isFavourite
  162.                 setFavouriteIcon()
  163.                 true
  164.             }
  165.             else -> super.onOptionsItemSelected(item)
  166.         }
  167.     }
  168.  
  169.     private fun showSnackbarMessage(message: String) {
  170.         Snackbar.make(view_pager, message, Snackbar.LENGTH_SHORT).show()
  171.     }
  172. }
Add Comment
Please, Sign In to add comment