Facebook
From Lousy Hummingbird, 2 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 45
  1. class UserDetail : AppCompatActivity(), View.OnClickListener {
  2.  
  3.     private lateinit var binding: UserDetailBinding
  4.  
  5.     private lateinit var dbHelper: UserHelper
  6.     private var statusFavorite = false
  7.     private var data: UserData? = null
  8.  
  9.     companion object {
  10.         private val TAG = MainActivity::class.java.simpleName
  11.         @StringRes
  12.         private val TAB_TITLES = intArrayOf(
  13.             R.string.followers,
  14.             R.string.following
  15.         )
  16.  
  17.         const val EXTRA_USERNAME = "extra_username"
  18.     }
  19.  
  20.     override fun onCreate(savedInstanceState: Bundle?) {
  21.         super.onCreate(savedInstanceState)
  22.         setContentView(R.layout.user_detail)
  23.         binding = UserDetailBinding.inflate(layoutInflater)
  24.         setContentView(binding.root)
  25.  
  26.         val user = intent.getParcelableExtra(EXTRA_USERNAME) as UserData?
  27.  
  28.         setUserDetail(user?.username)
  29.  
  30.         val sectionsPagerAdapter = SectionsPagerAdapter(this)
  31.         val viewPager: ViewPager2 = findViewById(R.id.viewpager)
  32.         viewPager.adapter = sectionsPagerAdapter
  33.         val tabs: TabLayout = findViewById(R.id.tabs)
  34.         TabLayoutMediator(tabs, viewPager) { tab, position ->
  35.             tab.text = resources.getString(TAB_TITLES[position])
  36.         }.attach()
  37.  
  38.         supportActionBar?.elevation = 0f
  39.  
  40.         dbHelper = UserHelper.getInstance(applicationContext)
  41.         dbHelper.open()
  42.  
  43.         val cursor: Cursor = dbHelper.queryByUsername(user?.username.toString())
  44.         if (cursor.moveToNext()) {
  45.             statusFavorite = true
  46.             setStatusFavorite(true)
  47.         }
  48.  
  49.         data = intent.getParcelableExtra(EXTRA_USERNAME)
  50.  
  51.         binding.fabFavorite.setOnClickListener(this)
  52.     }
  53.  
  54.     private fun setStatusFavorite(status: Boolean) {
  55.         if (status) {
  56.             binding.fabFavorite.setImageResource(R.drawable.ic_baseline_favorite_24)
  57.         } else {
  58.             binding.fabFavorite.setImageResource(R.drawable.ic_baseline_favorite_border_24)
  59.         }
  60.     }
  61.  
  62.     private fun setUserDetail(userData: String?) {
  63.  
  64.         val client = AsyncHttpClient()
  65.         val url = "https://api.github.com/users/$userData"
  66.         client.addHeader("Authorization", "token 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")
  67.         client.addHeader("User-Agent", "Request")
  68.         client.get(url, object : AsyncHttpResponseHandler() {
  69.  
  70.             override fun onSuccess(statusCode: Int, headers: Array<out Header>?, responseBody: ByteArray) {
  71.                 val result = String(responseBody)
  72.                 Log.d(TAG, result)
  73.  
  74.                 try {
  75.  
  76.                     val responseObject = JSONObject(result)
  77.  
  78.                     val avatar = responseObject.getString("avatar_url")
  79.                     val username = responseObject.getString("login")
  80.                     val name = responseObject.getString("name")
  81.                     val location = responseObject.getString("location")
  82.                     val company = responseObject.getString("company")
  83.                     val repository = responseObject.getString("public_repos")
  84.  
  85.  
  86.                     Glide.with(this@UserDetail)
  87.                             .load(avatar)
  88.                             .apply(RequestOptions()).override(250, 250)
  89.                             .into(binding.detailAvatar)
  90.  
  91.                     binding.detailUsername.text = username
  92.                     binding.detailName.text = name
  93.                     binding.detailLocation.text = location
  94.                     binding.detailCompany.text = company
  95.                     binding.detailRepository.text = repository
  96.  
  97.                 } catch (e: Exception) {
  98.                     Toast.makeText(this@UserDetail, e.message, Toast.LENGTH_SHORT).show()
  99.                     e.printStackTrace()
  100.                 }
  101.             }
  102.  
  103.             override fun onFailure(statusCode: Int, headers: Array<out Header>?, responseBody: ByteArray?, error: Throwable?) {
  104.                 binding.tabs.visibility = View.INVISIBLE
  105.  
  106.                 val errorMessage = when (statusCode) {
  107.                     401 -> "$statusCode : Bad Request"
  108.                     403 -> "$statusCode : Forbidden"
  109.                     404 -> "$statusCode : Not Found"
  110.                     else -> "$statusCode : $(error.message)"
  111.                 }
  112.                 Toast.makeText(this@UserDetail, errorMessage, Toast.LENGTH_SHORT).show()
  113.             }
  114.  
  115.         })
  116.     }
  117.  
  118.     override fun onCreateOptionsMenu(menu: Menu?): Boolean {
  119.         menuInflater.inflate(R.menu.main_menu, menu)
  120.         return super.onCreateOptionsMenu(menu)
  121.     }
  122.  
  123.     override fun onOptionsItemSelected(item: MenuItem): Boolean {
  124.         if (item.itemId == R.id.settings) {
  125.             val mIntent = Intent(Settings.ACTION_LOCALE_SETTINGS)
  126.             startActivity(mIntent)
  127.         }
  128.         if (item.itemId == R.id.notification) {
  129.             val mIntent = Intent(this, Notification::class.java)
  130.             startActivity(mIntent)
  131.         }
  132.         if (item.itemId == R.id.favorite) {
  133.             val move = Intent(this, FavoriteActivity::class.java)
  134.             startActivity(move)
  135.         }
  136.         return super.onOptionsItemSelected(item)
  137.     }
  138.  
  139.     override fun onClick(v: View?) {
  140.         when (v?.id) {
  141.             R.id.fab_favorite -> {
  142.                 if (statusFavorite) {
  143.                     val idUser = data?.username.toString()
  144.                     dbHelper.deleteById(idUser)
  145.                     Toast.makeText(this, "$idUser deleted from favorite", Toast.LENGTH_SHORT).show()
  146.                     setStatusFavorite(false)
  147.                     statusFavorite = true
  148.                 } else {
  149.                     val value = ContentValues()
  150.                     value.put(USERNAME, data?.username)
  151.                     value.put(NAME, data?.name)
  152.                     value.put(AVATAR, data?.avatar)
  153.                     value.put(COMPANY, data?.company)
  154.                     value.put(LOCATION, data?.location)
  155.                     value.put(REPOSITORY, data?.repository)
  156.                     value.put(FOLLOWERS, data?.followers)
  157.                     value.put(FOLLOWING, data?.following)
  158.                     value.put(FAVORITE, "is Favorite")
  159.  
  160.                     statusFavorite = false
  161.                     contentResolver.insert(CONTENT_URI, value)
  162.                     Toast.makeText(this, "User add to Favorite!", Toast.LENGTH_SHORT).show()
  163.                     setStatusFavorite(true)
  164.                 }
  165.             }
  166.         }
  167.     }
  168. }