diff --git a/app/src/debug/res/drawable/ic_banner_foreground.xml b/app/src/debug/res/drawable/ic_banner_foreground.xml new file mode 100644 index 00000000..1a1c4a4e --- /dev/null +++ b/app/src/debug/res/drawable/ic_banner_foreground.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt b/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt index 7d3e158a..43873ba8 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/MainActivity.kt @@ -13,6 +13,7 @@ import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.NavigationUI import androidx.navigation.ui.setupActionBarWithNavController import com.google.android.material.bottomnavigation.BottomNavigationView +import com.google.android.material.navigation.NavigationBarView import dagger.hilt.android.AndroidEntryPoint import dev.jdtech.jellyfin.databinding.ActivityMainAppBinding import dev.jdtech.jellyfin.fragments.HomeFragmentDirections @@ -34,7 +35,7 @@ class MainActivity : AppCompatActivity() { setContentView(binding.root) - val navView: BottomNavigationView = binding.navView + val navView: NavigationBarView = binding.navView as NavigationBarView val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment_activity_main) as NavHostFragment diff --git a/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt index 6691efd1..04a2689f 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/fragments/LoginFragment.kt @@ -86,7 +86,6 @@ class LoginFragment : Fragment() { private fun login() { val username = binding.editTextUsername.text.toString() val password = binding.editTextPassword.text.toString() - binding.progressCircular.visibility = View.VISIBLE viewModel.login(username, password) } diff --git a/app/src/main/java/dev/jdtech/jellyfin/tv/ui/TvAddServerFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/tv/ui/TvAddServerFragment.kt index 833222ea..ff73cdff 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/tv/ui/TvAddServerFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/tv/ui/TvAddServerFragment.kt @@ -4,6 +4,7 @@ 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 @@ -29,12 +30,19 @@ internal class TvAddServerFragment : Fragment() { savedInstanceState: Bundle? ): View { binding = TvAddServerFragmentBinding.inflate(inflater) - binding.lifecycleOwner = viewLifecycleOwner - binding.viewModel = viewModel + + binding.editTextServerAddress.setOnEditorActionListener { _, actionId, _ -> + return@setOnEditorActionListener when (actionId) { + EditorInfo.IME_ACTION_GO -> { + connectToServer() + true + } + else -> false + } + } binding.buttonConnect.setOnClickListener { - val serverAddress = binding.serverAddress.text.toString() - viewModel.checkServer(serverAddress) + connectToServer() } viewLifecycleOwner.lifecycleScope.launch { @@ -60,17 +68,25 @@ internal class TvAddServerFragment : Fragment() { } 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.serverAddress.error = uiState.message + binding.editTextServerAddress.error = uiState.message } private fun bindUiStateLoading() { + binding.buttonConnect.isEnabled = false binding.progressCircular.isVisible = true - binding.serverAddress.error = null + binding.editTextServerAddress.error = null + } + + private fun connectToServer() { + val serverAddress = binding.editTextServerAddress.text.toString() + viewModel.checkServer(serverAddress.removeSuffix("/")) } private fun navigateToLoginFragment() { diff --git a/app/src/main/java/dev/jdtech/jellyfin/tv/ui/TvLoginFragment.kt b/app/src/main/java/dev/jdtech/jellyfin/tv/ui/TvLoginFragment.kt index 38233d37..b25e1714 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/tv/ui/TvLoginFragment.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/tv/ui/TvLoginFragment.kt @@ -4,6 +4,7 @@ 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 @@ -28,15 +29,19 @@ class TvLoginFragment : Fragment() { savedInstanceState: Bundle? ): View { binding = TvLoginFragmentBinding.inflate(inflater) - binding.lifecycleOwner = viewLifecycleOwner - binding.viewModel = viewModel + + binding.editTextPassword.setOnEditorActionListener { _, actionId, _ -> + return@setOnEditorActionListener when (actionId) { + EditorInfo.IME_ACTION_GO -> { + login() + true + } + else -> false + } + } binding.buttonLogin.setOnClickListener { - val username = binding.username.text.toString() - val password = binding.password.text.toString() - - binding.progressCircular.visibility = View.VISIBLE - viewModel.login(username, password) + login() } viewLifecycleOwner.lifecycleScope.launch { @@ -62,17 +67,26 @@ class TvLoginFragment : Fragment() { } private fun bindUiStateNormal() { + binding.buttonLogin.isEnabled = true binding.progressCircular.isVisible = false } private fun bindUiStateError(uiState: LoginViewModel.UiState.Error) { + binding.buttonLogin.isEnabled = true binding.progressCircular.isVisible = false - binding.username.error = uiState.message + binding.editTextUsername.error = uiState.message } private fun bindUiStateLoading() { + binding.buttonLogin.isEnabled = false binding.progressCircular.isVisible = true - binding.username.error = null + binding.editTextUsername.error = null + } + + private fun login() { + val username = binding.editTextUsername.text.toString() + val password = binding.editTextPassword.text.toString() + viewModel.login(username, password) } private fun navigateToMainActivity() { diff --git a/app/src/main/res/layout-television/tv_add_server_fragment.xml b/app/src/main/res/layout-television/tv_add_server_fragment.xml index 721a5fae..b4863eeb 100644 --- a/app/src/main/res/layout-television/tv_add_server_fragment.xml +++ b/app/src/main/res/layout-television/tv_add_server_fragment.xml @@ -1,24 +1,14 @@ - - - - - - + android:layout_height="match_parent"> + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintVertical_bias="0.36"> + android:textColor="?android:textColorPrimary" /> + android:imeOptions="actionGo" + android:inputType="textUri" /> - - -