Navigate to login fragment when server is found

This commit is contained in:
Jarne Demeulemeester 2021-06-10 11:15:12 +02:00
parent 9953165415
commit e6313378d5
No known key found for this signature in database
GPG key ID: 60884A0C1EBA43E5
3 changed files with 53 additions and 8 deletions

View file

@ -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,15 +20,29 @@ 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
}

View file

@ -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<Boolean>()
val navigateToLogin: LiveData<Boolean>
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
}
}

View file

@ -5,6 +5,7 @@
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="dev.jdtech.jellyfin.viewmodels.AddServerViewModel" />
@ -27,6 +28,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
@ -62,11 +64,28 @@
android:textAppearance="@style/text_subtitle"
android:textColorHint="@color/neutral_400" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button_connect"
style="@style/setup_button"
android:layout_width="match_parent"
android:drawableStart="@drawable/ic_launcher_foreground"
android:text="@string/button_connect" />
<ProgressBar
android:id="@+id/progress_circular"
android:layout_width="48dp"
android:layout_height="48dp"
android:elevation="8dp"
android:indeterminateTint="@color/white"
android:padding="8dp"
android:visibility="invisible" />
</RelativeLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>