97 lines
No EOL
3.3 KiB
Kotlin
97 lines
No EOL
3.3 KiB
Kotlin
package dev.jdtech.jellyfin.fragments
|
|
|
|
import android.os.Bundle
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import android.view.inputmethod.EditorInfo
|
|
import androidx.core.view.isVisible
|
|
import androidx.fragment.app.Fragment
|
|
import androidx.fragment.app.viewModels
|
|
import androidx.lifecycle.Lifecycle
|
|
import androidx.lifecycle.lifecycleScope
|
|
import androidx.lifecycle.repeatOnLifecycle
|
|
import androidx.navigation.fragment.findNavController
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
import dev.jdtech.jellyfin.databinding.FragmentAddServerBinding
|
|
import dev.jdtech.jellyfin.viewmodels.AddServerViewModel
|
|
import kotlinx.coroutines.launch
|
|
import timber.log.Timber
|
|
|
|
@AndroidEntryPoint
|
|
class AddServerFragment : Fragment() {
|
|
|
|
private lateinit var binding: FragmentAddServerBinding
|
|
private val viewModel: AddServerViewModel by viewModels()
|
|
|
|
override fun onCreateView(
|
|
inflater: LayoutInflater, container: ViewGroup?,
|
|
savedInstanceState: Bundle?
|
|
): View {
|
|
binding = FragmentAddServerBinding.inflate(inflater)
|
|
|
|
binding.editTextServerAddress.setOnEditorActionListener { _, actionId, _ ->
|
|
return@setOnEditorActionListener when (actionId) {
|
|
EditorInfo.IME_ACTION_GO -> {
|
|
connectToServer()
|
|
true
|
|
}
|
|
else -> false
|
|
}
|
|
}
|
|
|
|
binding.buttonConnect.setOnClickListener {
|
|
connectToServer()
|
|
}
|
|
|
|
viewLifecycleOwner.lifecycleScope.launch {
|
|
viewLifecycleOwner.lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
|
|
viewModel.uiState.collect { uiState ->
|
|
Timber.d("$uiState")
|
|
when (uiState) {
|
|
is AddServerViewModel.UiState.Normal -> bindUiStateNormal()
|
|
is AddServerViewModel.UiState.Error -> bindUiStateError(uiState)
|
|
is AddServerViewModel.UiState.Loading -> bindUiStateLoading()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
viewLifecycleOwner.lifecycleScope.launch {
|
|
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
|
|
viewModel.navigateToLogin.collect {
|
|
if (it) {
|
|
navigateToLoginFragment()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return binding.root
|
|
}
|
|
|
|
private fun bindUiStateNormal() {
|
|
binding.buttonConnect.isEnabled = true
|
|
binding.progressCircular.isVisible = false
|
|
}
|
|
|
|
private fun bindUiStateError(uiState: AddServerViewModel.UiState.Error) {
|
|
binding.buttonConnect.isEnabled = true
|
|
binding.progressCircular.isVisible = false
|
|
binding.editTextServerAddressLayout.error = uiState.message
|
|
}
|
|
|
|
private fun bindUiStateLoading() {
|
|
binding.buttonConnect.isEnabled = false
|
|
binding.progressCircular.isVisible = true
|
|
binding.editTextServerAddressLayout.error = null
|
|
}
|
|
|
|
private fun connectToServer() {
|
|
val serverAddress = binding.editTextServerAddress.text.toString()
|
|
viewModel.checkServer(serverAddress.removeSuffix("/"))
|
|
}
|
|
|
|
private fun navigateToLoginFragment() {
|
|
findNavController().navigate(AddServerFragmentDirections.actionAddServerFragmentToLoginFragment())
|
|
}
|
|
} |