package ani.dantotsu.profile import android.content.Intent import android.os.Bundle import android.view.ViewGroup import android.view.ViewGroup.MarginLayoutParams import android.view.Window import android.view.WindowManager import android.widget.ImageButton import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.core.view.updateLayoutParams import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import ani.dantotsu.R import ani.dantotsu.connections.anilist.Anilist import ani.dantotsu.connections.anilist.api.User import ani.dantotsu.databinding.ActivityFollowBinding import ani.dantotsu.initActivity import ani.dantotsu.navBarHeight import ani.dantotsu.settings.saving.PrefManager import ani.dantotsu.settings.saving.PrefName import ani.dantotsu.statusBarHeight import ani.dantotsu.themes.ThemeManager import com.xwray.groupie.GroupieAdapter import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext class FollowActivity : AppCompatActivity(){ private lateinit var binding: ActivityFollowBinding val adapter = GroupieAdapter() var users: List? = null private lateinit var selected: ImageButton override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ThemeManager(this).applyTheme() initActivity(this) binding = ActivityFollowBinding.inflate(layoutInflater) setContentView(binding.root) if (!PrefManager.getVal(PrefName.ImmersiveMode)) { this.window.statusBarColor = ContextCompat.getColor(this, R.color.nav_bg_inv) binding.root.fitsSystemWindows = true } else { binding.root.fitsSystemWindows = false requestWindowFeature(Window.FEATURE_NO_TITLE) window.setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN ) binding.listTitle.updateLayoutParams { topMargin = statusBarHeight } } val layoutType = PrefManager.getVal(PrefName.FollowerLayout) selected = getSelected(layoutType) binding.followerGrid.alpha = 0.33f binding.followerList.alpha = 0.33f selected(selected) binding.listRecyclerView.layoutManager = LinearLayoutManager( this, LinearLayoutManager.VERTICAL, false ) binding.listRecyclerView.adapter = adapter binding.listBack.setOnClickListener { finish() } val title = intent.getStringExtra("title") val userID= intent.getIntExtra("userId", 0) binding.listTitle.text = title lifecycleScope.launch(Dispatchers.IO) { val respond = when (title) { "Following" -> Anilist.query.userFollowing(userID)?.data?.page?.following "Followers" -> Anilist.query.userFollowers(userID)?.data?.page?.followers else -> null } users = respond withContext(Dispatchers.Main) { fillList() } } binding.followerList.setOnClickListener { selected(it as ImageButton) PrefManager.setVal(PrefName.FollowerLayout, 0) fillList() } binding.followerGrid.setOnClickListener { selected(it as ImageButton) PrefManager.setVal(PrefName.FollowerLayout, 1) fillList() } } private fun fillList() { adapter.clear() binding.listRecyclerView.layoutManager = when (getLayoutType(selected)) { 0 -> LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) 1 -> GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false) else -> LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) } users?.forEach { user -> if (getLayoutType(selected) == 0) { adapter.add(FollowerItem(user.id, user.name ?: "Unknown", user.avatar?.medium, user.bannerImage) { onUserClick(it) }) } else { adapter.add(GridFollowerItem(user.id, user.name ?: "Unknown", user.avatar?.medium) { onUserClick(it) }) } } } fun selected(it: ImageButton) { selected.alpha = 0.33f selected = it selected.alpha = 1f } private fun getSelected(pos: Int): ImageButton { return when (pos) { 0 -> binding.followerList 1 -> binding.followerGrid else -> binding.followerList } } private fun getLayoutType(it: ImageButton): Int { return when (it) { binding.followerList -> 0 binding.followerGrid -> 1 else -> 0 } } private fun onUserClick(id: Int) { val intent = Intent(this, ProfileActivity::class.java) intent.putExtra("userId", id) startActivity(intent) } }