Skip to content

Commit 2d5ac26

Browse files
committed
finishing (cleaning code and add comment)
1 parent 9387166 commit 2d5ac26

10 files changed

Lines changed: 89 additions & 7 deletions

File tree

app/src/main/java/com/riyandifirman/githubuser/adapter/SectionsPagerAdapter.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,30 @@ import com.riyandifirman.githubuser.ui.detail.FollowingFragment
1212

1313
class SectionsPagerAdapter(private val mContext: Context, fManager: FragmentManager, data: Bundle) : FragmentPagerAdapter(fManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
1414

15+
// bundle untuk mengirim data ke fragment yang akan ditampilkan
1516
private var fragmentBundle: Bundle = data
1617

1718
@StringRes
1819
private val TAB_TITLES = intArrayOf(R.string.tab_a, R.string.tab_b)
1920

21+
// fungsi untuk mengembalikan jumlah tab
2022
override fun getCount(): Int {
2123
return 2
2224
}
2325

26+
// fungsi untuk mengembalikan fragment yang akan ditampilkan pada tab
2427
override fun getItem(position: Int): Fragment {
2528
var fragment: Fragment? = null
2629
when (position) {
2730
0 -> fragment = FollowersFragment()
2831
1 -> fragment = FollowingFragment()
2932
}
33+
// mengirim data ke fragment
3034
fragment?.arguments = fragmentBundle
3135
return fragment as Fragment
3236
}
3337

38+
// fungsi untuk mengembalikan judul tab
3439
override fun getPageTitle(position: Int): CharSequence? {
3540
return mContext.resources.getString(TAB_TITLES[position])
3641
}

app/src/main/java/com/riyandifirman/githubuser/adapter/UserAdapter.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,21 @@ class UserAdapter : RecyclerView.Adapter<UserAdapter.ListViewHolder>(){
1212
private var onItemClickCallback: OnItemClickCallback? = null
1313
private val listUser = ArrayList<User>()
1414

15+
// fungsi untuk menambahkan data ke dalam list
1516
fun setData(items: ArrayList<User>) {
1617
listUser.clear()
1718
listUser.addAll(items)
1819
notifyDataSetChanged()
1920
}
2021

22+
// fungsi untuk set on click listener pada item recyclerview
2123
fun setOnItemClickCallback(onItemClickCallback: OnItemClickCallback) {
2224
this.onItemClickCallback = onItemClickCallback
2325
}
2426

27+
// class untuk menampung view yang akan digunakan
2528
inner class ListViewHolder(val binding: UserItemBinding): RecyclerView.ViewHolder(binding.root) {
29+
// fungsi untuk mengisi data ke dalam view
2630
fun bind(user: User) {
2731
binding.root.setOnClickListener {
2832
onItemClickCallback?.onItemClicked(user)
@@ -39,17 +43,21 @@ class UserAdapter : RecyclerView.Adapter<UserAdapter.ListViewHolder>(){
3943
}
4044
}
4145

46+
// fungsi untuk membuat view holder
4247
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListViewHolder {
4348
val view = UserItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
4449
return ListViewHolder(view)
4550
}
4651

52+
// fungsi untuk mengembalikan jumlah data yang ada
4753
override fun getItemCount(): Int = listUser.size
4854

55+
// fungsi untuk mengisi data ke dalam view holder
4956
override fun onBindViewHolder(holder: ListViewHolder, position: Int) {
5057
holder.bind(listUser[position])
5158
}
5259

60+
// interface untuk menangani event click pada item recyclerview
5361
interface OnItemClickCallback {
5462
fun onItemClicked(data: User)
5563
}

app/src/main/java/com/riyandifirman/githubuser/ui/detail/DetailUserActivity.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class DetailUserActivity : AppCompatActivity() {
1515
private lateinit var binding: ActivityDetailUserBinding
1616
private lateinit var viewModel: DetailUserViewModel
1717

18+
// companion object digunakan untuk membuat variabel yang dapat diakses dari mana saja
1819
companion object {
1920
const val EXTRA_USERNAME = "extra_username"
2021
}
@@ -24,15 +25,21 @@ class DetailUserActivity : AppCompatActivity() {
2425
binding = ActivityDetailUserBinding.inflate(layoutInflater)
2526
setContentView(binding.root)
2627

28+
// mengambil data dari intent yang dikirimkan dari MainActivity
2729
val username = intent.getStringExtra(EXTRA_USERNAME)
30+
31+
// membuat bundle untuk mengirimkan data ke fragment
2832
val bundle = Bundle()
2933
bundle.putString(EXTRA_USERNAME, username)
3034

31-
viewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(
32-
DetailUserViewModel::class.java)
35+
// menginisialisasi viewModel
36+
viewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(DetailUserViewModel::class.java)
37+
3338
if (username != null) {
3439
viewModel.setDetailUser(username)
3540
}
41+
42+
// memanggil fungsi getDetailUser() yang ada di viewModel untuk mengambil data dari API
3643
viewModel.getDetailUser().observe(this) {
3744
if (it != null) {
3845
binding.apply {
@@ -44,18 +51,22 @@ class DetailUserActivity : AppCompatActivity() {
4451
tvFollowers.text = "${it.followers} Followers"
4552
tvFollowing.text = "${it.following} Following"
4653
}
54+
// memanggil fungsi showLoading() untuk menghilangkan progress bar
4755
showLoading(false)
4856
}
4957
}
5058

59+
// menginisialisasi adapter untuk view pager
5160
val sectionsPagerAdapter = SectionsPagerAdapter(this, supportFragmentManager, bundle)
5261
val viewPager: ViewPager = binding.viewPager
62+
// menghubungkan view pager dengan tab layout
5363
binding.apply {
5464
viewPager.adapter = sectionsPagerAdapter
5565
tabLayout.setupWithViewPager(viewPager)
5666
}
5767
}
5868

69+
// fungsi untuk menampilkan progress bar
5970
private fun showLoading(isLoading: Boolean) {
6071
if (isLoading) {
6172
// jika isLoading true maka progress bar akan muncul

app/src/main/java/com/riyandifirman/githubuser/ui/detail/FollowersFragment.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,30 +12,41 @@ import com.riyandifirman.githubuser.viewmodel.FollowersViewModel
1212

1313
class FollowersFragment : Fragment(R.layout.fragment_follows) {
1414

15+
// inisialisasi binding di fragment
1516
private var _binding: FragmentFollowsBinding? = null
1617
private val binding get() = _binding!!
18+
1719
private lateinit var adapter: UserAdapter
1820
private lateinit var username: String
1921
private lateinit var viewModel: FollowersViewModel
2022

2123
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
2224
super.onViewCreated(view, savedInstanceState)
2325

26+
// mengambil data dari detail user activity
2427
username = arguments?.getString(DetailUserActivity.EXTRA_USERNAME).toString()
28+
29+
// menginisialisasi binding
2530
_binding = FragmentFollowsBinding.bind(view)
2631

32+
// menginisialisasi adapter
2733
adapter = UserAdapter()
2834
adapter.notifyDataSetChanged()
2935

36+
// menginisialisasi recycle view
3037
binding.apply {
3138
recycleView.layoutManager = LinearLayoutManager(activity)
3239
recycleView.setHasFixedSize(true)
3340
recycleView.adapter = adapter
3441
}
3542

3643
showLoading(true)
44+
45+
// menginisialisasi view model
3746
viewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(FollowersViewModel::class.java)
47+
// mengirimkan data username ke view model
3848
viewModel.setFollowers(username)
49+
// mengambil data followers dari view model
3950
viewModel.getFollowers().observe(viewLifecycleOwner) {
4051
if (it != null) {
4152
adapter.setData(it)
@@ -44,6 +55,7 @@ class FollowersFragment : Fragment(R.layout.fragment_follows) {
4455
}
4556
}
4657

58+
// fungsi untuk menampilkan progress bar
4759
private fun showLoading(isLoading: Boolean) {
4860
if (isLoading) {
4961
// jika isLoading true maka progress bar akan muncul
@@ -54,6 +66,7 @@ class FollowersFragment : Fragment(R.layout.fragment_follows) {
5466
}
5567
}
5668

69+
// fungsi untuk menghapus binding
5770
override fun onDestroyView() {
5871
super.onDestroyView()
5972
_binding = null

app/src/main/java/com/riyandifirman/githubuser/ui/detail/FollowingFragment.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,40 @@ import com.riyandifirman.githubuser.viewmodel.FollowingViewModel
1212

1313
class FollowingFragment : Fragment(R.layout.fragment_follows) {
1414

15+
// inisialisasi binding di fragment
1516
private var _binding: FragmentFollowsBinding? = null
1617
private val binding get() = _binding!!
18+
1719
private lateinit var adapter: UserAdapter
1820
private lateinit var username: String
1921
private lateinit var viewModel: FollowingViewModel
2022

2123
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
2224
super.onViewCreated(view, savedInstanceState)
2325

26+
// mengambil data dari detail user activity
2427
username = arguments?.getString(DetailUserActivity.EXTRA_USERNAME).toString()
28+
29+
// menginisialisasi binding
2530
_binding = FragmentFollowsBinding.bind(view)
2631

32+
// menginisialisasi adapter
2733
adapter = UserAdapter()
2834
adapter.notifyDataSetChanged()
2935

36+
// menginisialisasi recycle view
3037
binding.apply {
3138
recycleView.layoutManager = LinearLayoutManager(activity)
3239
recycleView.setHasFixedSize(true)
3340
recycleView.adapter = adapter
3441
}
3542

3643
showLoading(true)
37-
viewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(
38-
FollowingViewModel::class.java)
44+
// menginisialisasi view model
45+
viewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(FollowingViewModel::class.java)
46+
// mengirimkan data username ke view model
3947
viewModel.setFollowing(username)
48+
// mengambil data followers dari view model
4049
viewModel.getFollowing().observe(viewLifecycleOwner) {
4150
if (it != null) {
4251
adapter.setData(it)
@@ -45,6 +54,7 @@ class FollowingFragment : Fragment(R.layout.fragment_follows) {
4554
}
4655
}
4756

57+
// fungsi untuk menampilkan progress bar
4858
private fun showLoading(isLoading: Boolean) {
4959
if (isLoading) {
5060
// jika isLoading true maka progress bar akan muncul
@@ -55,6 +65,7 @@ class FollowingFragment : Fragment(R.layout.fragment_follows) {
5565
}
5666
}
5767

68+
// fungsi untuk menghilangkan binding
5869
override fun onDestroyView() {
5970
super.onDestroyView()
6071
_binding = null

app/src/main/java/com/riyandifirman/githubuser/ui/main/MainActivity.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ class MainActivity : AppCompatActivity() {
3131
adapter = UserAdapter()
3232
adapter.notifyDataSetChanged()
3333

34+
// set on item click callback untuk adapter
3435
adapter.setOnItemClickCallback(object : UserAdapter.OnItemClickCallback {
36+
// fungsi untuk menangani ketika item di klik
3537
override fun onItemClicked(data: User) {
3638
// panggil DetailUserActivity dengan membawa data user
3739
val intent = Intent(this@MainActivity, DetailUserActivity::class.java)
@@ -40,9 +42,10 @@ class MainActivity : AppCompatActivity() {
4042
}
4143
})
4244

43-
viewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(
44-
MainViewModel::class.java)
45+
// inisialisasi MainViewModel
46+
viewModel = ViewModelProvider(this, ViewModelProvider.NewInstanceFactory()).get(MainViewModel::class.java)
4547

48+
// inisialisasi recycle view
4649
binding.apply {
4750
recycleView.layoutManager = LinearLayoutManager(this@MainActivity)
4851
recycleView.setHasFixedSize(true)
@@ -58,6 +61,7 @@ class MainActivity : AppCompatActivity() {
5861
}
5962
}
6063

64+
// fungsi untuk menampilkan progress bar
6165
private fun showLoading(isLoading: Boolean) {
6266
if (isLoading) {
6367
// jika isLoading true maka progress bar akan muncul
@@ -68,10 +72,12 @@ class MainActivity : AppCompatActivity() {
6872
}
6973
}
7074

75+
// fungsi untuk menampilkan option menu search
7176
override fun onCreateOptionsMenu(menu: Menu): Boolean {
7277
val inflater = menuInflater
7378
inflater.inflate(R.menu.option_menu, menu)
7479

80+
// inisialisasi search manager dan search view
7581
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
7682
val searchView = menu.findItem(R.id.search).actionView as SearchView
7783

app/src/main/java/com/riyandifirman/githubuser/viewmodel/DetailUserViewModel.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,29 @@ class DetailUserViewModel : ViewModel() {
1414
val _user = MutableLiveData<DetailUserResponse>()
1515
val user: LiveData<DetailUserResponse> = _user
1616

17+
// fungsi untuk mengambil data dari API
1718
fun setDetailUser(username: String) {
19+
// memanggil fungsi getDetailUser pada ApiConfig untuk mengambil data dengan parameter username
1820
val client = ApiConfig.getApiService().getDetailUser(username)
1921
client.enqueue(object : Callback<DetailUserResponse> {
22+
// jika berhasil
2023
override fun onResponse(
2124
call: Call<DetailUserResponse>,
2225
response: Response<DetailUserResponse>
2326
) {
2427
if (response.isSuccessful) {
28+
// mengisi data ke dalam _user dengan data yang didapat dari API
2529
_user.postValue(response.body())
2630
}
2731
}
2832

33+
// jika gagal
2934
override fun onFailure(call: Call<DetailUserResponse>, t: Throwable) {
3035
Log.d("ERROR", t.message.toString())
3136
}
3237
})
3338
}
3439

40+
// fungsi untuk mengembalikan data
3541
fun getDetailUser(): LiveData<DetailUserResponse> = user
3642
}

app/src/main/java/com/riyandifirman/githubuser/viewmodel/FollowersViewModel.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,29 @@ class FollowersViewModel : ViewModel() {
1414
var _listFollowers = MutableLiveData<ArrayList<User>>()
1515
val listFollowers: LiveData<ArrayList<User>> = _listFollowers
1616

17+
// fungsi untuk mengambil data dari API
1718
fun setFollowers(username : String) {
19+
// memanggil fungsi getFollowerUser pada ApiConfig untuk mengambil data dengan parameter username
1820
val client = ApiConfig.getApiService().getFollowerUser(username)
1921
client.enqueue(object : Callback<ArrayList<User>> {
22+
// jika berhasil
2023
override fun onResponse(
2124
call: Call<ArrayList<User>>,
2225
response: Response<ArrayList<User>>
2326
) {
2427
if (response.isSuccessful) {
28+
// mengisi data ke dalam _listFollowers dengan data yang didapat dari API
2529
_listFollowers.postValue(response.body())
2630
}
2731
}
2832

33+
// jika gagal
2934
override fun onFailure(call: Call<ArrayList<User>>, t: Throwable) {
3035
Log.d("ERROR", t.message.toString())
3136
}
3237
})
3338
}
3439

40+
// fungsi untuk mengembalikan data
3541
fun getFollowers(): LiveData<ArrayList<User>> = listFollowers
3642
}

app/src/main/java/com/riyandifirman/githubuser/viewmodel/FollowingViewModel.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,23 +14,29 @@ class FollowingViewModel : ViewModel() {
1414
var _listFollowing = MutableLiveData<ArrayList<User>>()
1515
val listFollowing: LiveData<ArrayList<User>> = _listFollowing
1616

17+
// fungsi untuk mengambil data dari API
1718
fun setFollowing(username : String) {
19+
// memanggil fungsi getFollowingUser pada ApiConfig untuk mengambil data dengan parameter username
1820
val client = ApiConfig.getApiService().getFollowingUser(username)
1921
client.enqueue(object : Callback<ArrayList<User>> {
22+
// jika berhasil
2023
override fun onResponse(
2124
call: Call<ArrayList<User>>,
2225
response: Response<ArrayList<User>>
2326
) {
2427
if (response.isSuccessful) {
28+
// mengisi data ke dalam _listFollowing dengan data yang didapat dari API
2529
_listFollowing.postValue(response.body())
2630
}
2731
}
2832

33+
// jika gagal
2934
override fun onFailure(call: Call<ArrayList<User>>, t: Throwable) {
3035
Log.d("ERROR", t.message.toString())
3136
}
3237
})
3338
}
3439

40+
// fungsi untuk mengembalikan data
3541
fun getFollowing(): LiveData<ArrayList<User>> = listFollowing
3642
}

0 commit comments

Comments
 (0)