package com.keylesspalace.tusky.components.filters import android.content.Intent import android.os.Bundle import androidx.activity.viewModels import androidx.lifecycle.lifecycleScope import com.keylesspalace.tusky.BaseActivity import com.keylesspalace.tusky.R import com.keylesspalace.tusky.databinding.ActivityFiltersBinding import com.keylesspalace.tusky.di.ViewModelFactory import com.keylesspalace.tusky.entity.Filter import com.keylesspalace.tusky.util.hide import com.keylesspalace.tusky.util.show import com.keylesspalace.tusky.util.viewBinding import kotlinx.coroutines.launch import java.io.IOException import javax.inject.Inject class FiltersActivity : BaseActivity(), FiltersListener { @Inject lateinit var viewModelFactory: ViewModelFactory private val binding by viewBinding(ActivityFiltersBinding::inflate) private val viewModel: FiltersViewModel by viewModels { viewModelFactory } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) setSupportActionBar(binding.includedToolbar.toolbar) supportActionBar?.run { // Back button setDisplayHomeAsUpEnabled(true) setDisplayShowHomeEnabled(true) } binding.addFilterButton.setOnClickListener { launchEditFilterActivity() } setTitle(R.string.pref_title_timeline_filters) } override fun onResume() { super.onResume() loadFilters() observeViewModel() } private fun observeViewModel() { lifecycleScope.launch { viewModel.filters.collect { filters -> binding.filtersView.show() binding.addFilterButton.show() binding.filterProgressBar.hide() refreshFilterDisplay(filters) } } lifecycleScope.launch { viewModel.error.collect { error -> if (error is IOException) { binding.filterMessageView.setup( R.drawable.elephant_offline, R.string.error_network ) { loadFilters() } } else { binding.filterMessageView.setup( R.drawable.elephant_error, R.string.error_generic ) { loadFilters() } } } } } private fun refreshFilterDisplay(filters: List) { binding.filtersView.adapter = FiltersAdapter(this, filters) } private fun loadFilters() { binding.filterMessageView.hide() binding.filtersView.hide() binding.addFilterButton.hide() binding.filterProgressBar.show() viewModel.load() } private fun launchEditFilterActivity(filter: Filter? = null) { val intent = Intent(this, EditFilterActivity::class.java).apply { if (filter != null) { putExtra(EditFilterActivity.FILTER_TO_EDIT, filter) } } startActivity(intent) overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left) } override fun deleteFilter(filter: Filter) { viewModel.deleteFilter(filter, binding.root) } override fun updateFilter(updatedFilter: Filter) { launchEditFilterActivity(updatedFilter) } }