package mx.trackermap.TrackerMap.android.session import android.content.Intent import android.content.pm.PackageManager import android.net.Uri import android.os.Bundle import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.app.NavUtils import mx.trackermap.TrackerMap.android.R import mx.trackermap.TrackerMap.android.databinding.UserInformationActivityBinding import mx.trackermap.TrackerMap.client.models.User import org.koin.androidx.viewmodel.ext.android.viewModel class UserInformationActivity : AppCompatActivity() { private var _binding: UserInformationActivityBinding? = null private val binding get() = _binding!! private val userInformationViewModel: UserInformationViewModel by viewModel() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) _binding = UserInformationActivityBinding.inflate(layoutInflater) setContentView(binding.root) initialize() } private fun initialize() { setupObservers() setupEvents() userInformationViewModel.fetchUserInfo() // Show version number val pm = applicationContext.packageManager val pkgName = applicationContext.packageName try { val pkgInfo = pm.getPackageInfo(pkgName, 0) binding.appVersion.text = pkgInfo.versionName } catch (e: PackageManager.NameNotFoundException) { e.printStackTrace() } } private fun setupObservers() { userInformationViewModel.userInformation.observe(this) { userInformation -> when (userInformation) { UserInformationViewModel.InformationState.Loading -> setLoading(true) UserInformationViewModel.InformationState.Failure -> failure() is UserInformationViewModel.InformationState.Success -> display(userInformation.user) UserInformationViewModel.InformationState.Signout -> signOut() } } } private fun setupEvents() { binding.backButton.setOnClickListener { onBackPressed() } binding.signoutButton.setOnClickListener { userInformationViewModel.signout() } binding.sourceCodeButton.setOnClickListener { openURL(getString(R.string.app_source_code_url)) } binding.websiteButton.setOnClickListener { openURL(getString(R.string.app_website_url)) } } private fun setLoading(isLoading: Boolean) { binding.infoLoading.visibility = if (isLoading) View.VISIBLE else View.GONE binding.userInfoCard.visibility = if (isLoading) View.GONE else View.VISIBLE } private fun failure() { setLoading(false) Toast.makeText(this, "Something went wrong...", Toast.LENGTH_LONG).show() } private fun display(user: User) { setLoading(false) binding.apply { usernameInfo.text = user.name ?: "" emailInfo.text = user.email ?: "" idInfo.text = "${user.id ?: "--"}" deviceLimitInfo.text = "${user.deviceLimit ?: "--"}" adminInfo.text = "${user.administrator}" } } private fun openURL(url: String) { val uri = Uri.parse(url) val intent = Intent(Intent.ACTION_VIEW, uri) startActivity(intent) } private fun signOut() { val intent = Intent(applicationContext, LoginActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK startActivity(intent) finish() } }