- class UserDetail : AppCompatActivity(), View.OnClickListener {
- private lateinit var binding: UserDetailBinding
- private lateinit var dbHelper: UserHelper
- private var statusFavorite = false
- private var data: UserData? = null
- companion object {
- private val TAG = MainActivity::class.java.simpleName
- @StringRes
- private val TAB_TITLES = intArrayOf(
- R.string.followers,
- R.string.following
- )
- const val EXTRA_USERNAME = "extra_username"
- }
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.user_detail)
- binding = UserDetailBinding.inflate(layoutInflater)
- setContentView(binding.root)
- val user = intent.getParcelableExtra(EXTRA_USERNAME) as UserData?
- setUserDetail(user?.username)
- val sectionsPagerAdapter = SectionsPagerAdapter(this)
- val viewPager: ViewPager2 = findViewById(R.id.viewpager)
- viewPager.adapter = sectionsPagerAdapter
- val tabs: TabLayout = findViewById(R.id.tabs)
- TabLayoutMediator(tabs, viewPager) { tab, position ->
- tab.text = resources.getString(TAB_TITLES[position])
- }.attach()
- supportActionBar?.elevation = 0f
- dbHelper = UserHelper.getInstance(applicationContext)
- dbHelper.open()
- val cursor: Cursor = dbHelper.queryByUsername(user?.username.toString())
- if (cursor.moveToNext()) {
- statusFavorite = true
- setStatusFavorite(true)
- }
- data = intent.getParcelableExtra(EXTRA_USERNAME)
- binding.fabFavorite.setOnClickListener(this)
- }
- private fun setStatusFavorite(status: Boolean) {
- if (status) {
- binding.fabFavorite.setImageResource(R.drawable.ic_baseline_favorite_24)
- } else {
- binding.fabFavorite.setImageResource(R.drawable.ic_baseline_favorite_border_24)
- }
- }
- private fun setUserDetail(userData: String?) {
- val client = AsyncHttpClient()
- val url = "https://api.github.com/users/$userData"
- client.addHeader("Authorization", "token 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")
- client.addHeader("User-Agent", "Request")
- client.get(url, object : AsyncHttpResponseHandler() {
- override fun onSuccess(statusCode: Int, headers: Array<out Header>?, responseBody: ByteArray) {
- val result = String(responseBody)
- Log.d(TAG, result)
- try {
- val responseObject = JSONObject(result)
- val avatar = responseObject.getString("avatar_url")
- val username = responseObject.getString("login")
- val name = responseObject.getString("name")
- val location = responseObject.getString("location")
- val company = responseObject.getString("company")
- val repository = responseObject.getString("public_repos")
- Glide.with(this@UserDetail)
- .load(avatar)
- .apply(RequestOptions()).override(250, 250)
- .into(binding.detailAvatar)
- binding.detailUsername.text = username
- binding.detailName.text = name
- binding.detailLocation.text = location
- binding.detailCompany.text = company
- binding.detailRepository.text = repository
- } catch (e: Exception) {
- Toast.makeText(this@UserDetail, e.message, Toast.LENGTH_SHORT).show()
- e.printStackTrace()
- }
- }
- override fun onFailure(statusCode: Int, headers: Array<out Header>?, responseBody: ByteArray?, error: Throwable?) {
- binding.tabs.visibility = View.INVISIBLE
- val errorMessage = when (statusCode) {
- 401 -> "$statusCode : Bad Request"
- 403 -> "$statusCode : Forbidden"
- 404 -> "$statusCode : Not Found"
- else -> "$statusCode : $(error.message)"
- }
- Toast.makeText(this@UserDetail, errorMessage, Toast.LENGTH_SHORT).show()
- }
- })
- }
- override fun onCreateOptionsMenu(menu: Menu?): Boolean {
- menuInflater.inflate(R.menu.main_menu, menu)
- return super.onCreateOptionsMenu(menu)
- }
- override fun onOptionsItemSelected(item: MenuItem): Boolean {
- if (item.itemId == R.id.settings) {
- val mIntent = Intent(Settings.ACTION_LOCALE_SETTINGS)
- startActivity(mIntent)
- }
- if (item.itemId == R.id.notification) {
- val mIntent = Intent(this, Notification::class.java)
- startActivity(mIntent)
- }
- if (item.itemId == R.id.favorite) {
- val move = Intent(this, FavoriteActivity::class.java)
- startActivity(move)
- }
- return super.onOptionsItemSelected(item)
- }
- override fun onClick(v: View?) {
- when (v?.id) {
- R.id.fab_favorite -> {
- if (statusFavorite) {
- val idUser = data?.username.toString()
- dbHelper.deleteById(idUser)
- Toast.makeText(this, "$idUser deleted from favorite", Toast.LENGTH_SHORT).show()
- setStatusFavorite(false)
- statusFavorite = true
- } else {
- val value = ContentValues()
- value.put(USERNAME, data?.username)
- value.put(NAME, data?.name)
- value.put(AVATAR, data?.avatar)
- value.put(COMPANY, data?.company)
- value.put(LOCATION, data?.location)
- value.put(REPOSITORY, data?.repository)
- value.put(FOLLOWERS, data?.followers)
- value.put(FOLLOWING, data?.following)
- value.put(FAVORITE, "is Favorite")
- statusFavorite = false
- contentResolver.insert(CONTENT_URI, value)
- Toast.makeText(this, "User add to Favorite!", Toast.LENGTH_SHORT).show()
- setStatusFavorite(true)
- }
- }
- }
- }
- }