0
0
mirror of https://github.com/mediathekview/zapp.git synced 2024-09-20 04:12:14 +02:00

Display mediathek errors

This commit is contained in:
Christine Coenen 2022-04-28 13:36:19 +02:00
parent a808fdccee
commit 11292be979
2 changed files with 58 additions and 3 deletions

View File

@ -10,6 +10,7 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.paging.LoadState
import androidx.recyclerview.widget.LinearLayoutManager
import de.christinecoenen.code.zapp.R
import de.christinecoenen.code.zapp.app.mediathek.ui.list.MediathekListFragmentViewModel
import de.christinecoenen.code.zapp.app.mediathek.ui.list.adapter.FooterLoadStateAdapter
import de.christinecoenen.code.zapp.app.mediathek.ui.list.adapter.MediathekShowComparator
@ -22,6 +23,8 @@ import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
import org.koin.android.ext.android.inject
import org.koin.androidx.viewmodel.ext.android.viewModel
import java.net.UnknownServiceException
import javax.net.ssl.SSLHandshakeException
class MediathekListFragment : Fragment(),
@ -86,11 +89,11 @@ class MediathekListFragment : Fragment(),
.distinctUntilChanged()
.collectLatest { refreshState ->
binding.loader.isVisible = refreshState is LoadState.Loading
//binding.error.isVisible = refreshState is LoadState.Error
binding.error.isVisible = refreshState is LoadState.Error
updateNoShowsMessage(refreshState)
when (refreshState) {
//is LoadState.Error -> onMediathekLoadErrorChanged(refreshState.error)
is LoadState.Error -> onMediathekLoadErrorChanged(refreshState.error)
is LoadState.NotLoading -> binding.list.scrollToPosition(0)
is LoadState.Loading -> Unit
}
@ -125,4 +128,17 @@ class MediathekListFragment : Fragment(),
val isAdapterEmpty = adapter.itemCount == 0 && loadState is LoadState.NotLoading
binding.noShows.isVisible = isAdapterEmpty
}
private fun onMediathekLoadErrorChanged(e: Throwable) {
if (e is SSLHandshakeException || e is UnknownServiceException) {
showError(R.string.error_mediathek_ssl_error)
} else {
showError(R.string.error_mediathek_info_not_available)
}
}
private fun showError(messageResId: Int) {
binding.errorMessage.setText(messageResId)
binding.error.visibility = View.VISIBLE
}
}

View File

@ -99,6 +99,7 @@
android:id="@+id/no_shows"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone"
@ -107,12 +108,13 @@
app:layout_constraintStart_toStartOf="@id/list"
app:layout_constraintTop_toTopOf="@id/list"
tools:ignore="UseCompoundDrawables"
tools:visibility="visible">
tools:visibility="gone">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="@dimen/lb_error_image_max_height"
android:contentDescription="@null"
android:focusable="false"
android:src="@drawable/ic_sad_tv"
android:tint="@color/lb_error_message" />
@ -120,10 +122,47 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/lb_error_under_image_baseline_margin"
android:focusable="false"
android:gravity="center"
android:text="@string/fragment_mediathek_no_results"
android:textAppearance="@style/TextAppearance.Leanback.ErrorMessage" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusable="false"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/list"
app:layout_constraintEnd_toEndOf="@id/list"
app:layout_constraintStart_toStartOf="@id/list"
app:layout_constraintTop_toTopOf="@id/list"
app:layout_constraintWidth_max="350dp"
tools:ignore="UseCompoundDrawables"
tools:visibility="visible">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="@dimen/lb_error_image_max_height"
android:contentDescription="@null"
android:focusable="false"
android:src="@drawable/ic_warning_white_24dp"
android:tint="@color/lb_error_message" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/error_message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/lb_error_under_image_baseline_margin"
android:focusable="false"
android:gravity="center"
android:text="@string/error_mediathek_info_not_available"
android:textAppearance="@style/TextAppearance.Leanback.ErrorMessage" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>