package app.fedilab.android.mastodon.activities import android.app.Dialog import android.content.Intent import android.net.Uri import android.os.Bundle import android.text.SpannableString import android.text.style.UnderlineSpan import android.view.Window import androidx.core.view.isVisible import androidx.fragment.app.DialogFragment import androidx.lifecycle.ViewModelProvider import app.fedilab.android.BaseMainActivity import app.fedilab.android.R import app.fedilab.android.databinding.ActivityInstanceSocialBinding import app.fedilab.android.mastodon.client.entities.app.InstanceSocial import app.fedilab.android.mastodon.helper.Helper import app.fedilab.android.mastodon.helper.ThemeHelper import app.fedilab.android.mastodon.viewmodel.mastodon.InstanceSocialVM import com.bumptech.glide.Glide import com.google.android.material.dialog.MaterialAlertDialogBuilder /* Copyright 2022 Thomas Schneider * * This file is a part of Fedilab * * This program is free software; you can redistribute it and/or modify it under the terms of the * GNU General Public License as published by the Free Software Foundation; either version 3 of the * License, or (at your option) any later version. * * Fedilab is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * You should have received a copy of the GNU General Public License along with Fedilab; if not, * see . */ class InstanceHealthActivity : DialogFragment() { private var _binding: ActivityInstanceSocialBinding? = null private val binding: ActivityInstanceSocialBinding get() = _binding!! override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { _binding = ActivityInstanceSocialBinding.inflate(layoutInflater) binding.close.setOnClickListener { dialog?.dismiss() } val content = SpannableString(binding.refInstance.text.toString()) content.setSpan(UnderlineSpan(), 0, content.length, 0) binding.refInstance.text = content binding.refInstance.setOnClickListener { startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://instances.social"))) } val materialAlertDialogBuilder = MaterialAlertDialogBuilder(requireContext()) materialAlertDialogBuilder.setView(binding.root) val dialog = materialAlertDialogBuilder.create() dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) dialog.setOnShowListener { checkInstance() } return dialog } private fun checkInstance() { val instanceSocialVM = ViewModelProvider(this@InstanceHealthActivity)[InstanceSocialVM::class.java] instanceSocialVM.getInstances(BaseMainActivity.currentInstance.trim { it <= ' ' }) .observe(this@InstanceHealthActivity) { instanceSocialList: InstanceSocial? -> val instance = instanceSocialList?.instances?.firstOrNull { instance -> instance.name.equals( BaseMainActivity.currentInstance.trim { it <= ' ' }, ignoreCase = true ) } if (instance != null) { instance.thumbnail?.takeIf { it != "null" }?.let { thumbnail -> Glide.with(this@InstanceHealthActivity) .asBitmap() .placeholder(R.drawable.default_banner) .load(thumbnail) .into(binding.backgroundImage) } binding.name.text = instance.name if (instance.up) { binding.up.setText(R.string.is_up) binding.up.setTextColor( ThemeHelper.getAttColor( requireContext(), R.attr.colorPrimary ) ) } else { binding.up.setText(R.string.is_down) binding.up.setTextColor( ThemeHelper.getAttColor( requireContext(), R.attr.colorError ) ) } binding.uptime.text = getString( R.string.instance_health_uptime, instance.uptime * 100 ) if (instance.checked_at != null) binding.checkedAt.text = getString( R.string.instance_health_checkedat, Helper.dateToString(instance.checked_at) ) binding.values.text = getString( R.string.instance_health_indication, instance.version, Helper.withSuffix(instance.active_users.toLong()), Helper.withSuffix(instance.statuses.toLong()) ) } else { binding.instanceData.isVisible = false binding.noInstance.isVisible = true } binding.loader.isVisible = false } } override fun onDestroyView() { super.onDestroyView() _binding = null } }