From e6313378d5d14360d32fd727d718bfd23ba96e9b Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Thu, 10 Jun 2021 11:15:12 +0200 Subject: [PATCH] Navigate to login fragment when server is found --- .../jellyfin/fragments/AddServerFragment.kt | 22 ++++++++++++--- .../jellyfin/viewmodels/AddServerViewModel.kt | 12 +++++++++ .../main/res/layout/fragment_add_server.xml | 27 ++++++++++++++++--- 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt index 2fd2a219..b3a9e805 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/AddServerFragment.kt @@ -6,7 +6,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.lifecycle.ViewModelProvider -import androidx.navigation.findNavController +import androidx.navigation.fragment.findNavController import dev.jdtech.jellyfin.R import dev.jdtech.jellyfin.databinding.FragmentAddServerBinding import dev.jdtech.jellyfin.viewmodels.AddServerViewModel @@ -20,16 +20,30 @@ class AddServerFragment : Fragment() { val application = requireNotNull(this.activity).application val binding = FragmentAddServerBinding.inflate(inflater) val viewModelFactory = AddServerViewModelFactory(application) - val viewModel = ViewModelProvider(this, viewModelFactory).get(AddServerViewModel::class.java) + val viewModel = + ViewModelProvider(this, viewModelFactory).get(AddServerViewModel::class.java) binding.lifecycleOwner = this binding.viewModel = viewModel binding.buttonConnect.setOnClickListener { v: View -> - viewModel.checkServer(binding.editTextServerAddress.text.toString()) - //v.findNavController().navigate(R.id.action_addServerFragment_to_loginFragment) + val serverAddress = binding.editTextServerAddress.text.toString() + if (serverAddress.isNotBlank()) { + viewModel.checkServer(serverAddress) + binding.progressCircular.visibility = View.VISIBLE + } else { + binding.editTextServerAddress.error = "Empty server address" + } } + viewModel.navigateToLogin.observe(viewLifecycleOwner, { + if (it) { + this.findNavController().navigate(R.id.action_addServerFragment_to_loginFragment) + viewModel.onNavigateToLoginDone() + } + binding.progressCircular.visibility = View.GONE + }) + return binding.root } } \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt index 31a2fe5e..40f08623 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/viewmodels/AddServerViewModel.kt @@ -2,6 +2,8 @@ package dev.jdtech.jellyfin.viewmodels import android.app.Application import android.util.Log +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dev.jdtech.jellyfin.api.JellyfinApi @@ -10,14 +12,24 @@ import org.jellyfin.sdk.api.client.exception.ApiClientException import java.lang.Exception class AddServerViewModel(val application: Application) : ViewModel() { + private val _navigateToLogin = MutableLiveData() + val navigateToLogin: LiveData + get() = _navigateToLogin + fun checkServer(baseUrl: String) { viewModelScope.launch { val jellyfinApi = JellyfinApi.newInstance(application, baseUrl) try { jellyfinApi.systemApi.getPublicSystemInfo() + _navigateToLogin.value = true } catch (e: Exception) { Log.e("JellyfinApi", "${e.message}") + _navigateToLogin.value = false } } } + + fun onNavigateToLoginDone() { + _navigateToLogin.value = false + } } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_add_server.xml b/app/src/main/res/layout/fragment_add_server.xml index 7a45e9ff..994891e7 100644 --- a/app/src/main/res/layout/fragment_add_server.xml +++ b/app/src/main/res/layout/fragment_add_server.xml @@ -5,6 +5,7 @@ xmlns:tools="http://schemas.android.com/tools"> + @@ -27,6 +28,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + -