107 lines
3.3 KiB
Kotlin
107 lines
3.3 KiB
Kotlin
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<Filter>) {
|
|
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)
|
|
}
|
|
}
|