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?, 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?, 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) } } } } }