diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1eb6645..82e5439 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -35,9 +35,14 @@ android { } dependencies { + implementation("org.testng:testng:6.9.6") defaultLibrary() + val version = "2.24.0" + testImplementation("org.mockito:mockito-core:${version}") + androidTestImplementation("org.mockito:mockito-android:${version}") + implementation("androidx.paging:paging-runtime:3.3.6") implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01") val ktorClientCore = "3.0.3" @@ -54,9 +59,6 @@ dependencies { implementation(Dependencies.AndroidX.Navigation.fragment) implementation(Dependencies.AndroidX.Navigation.navigationUi) - implementation(Dependencies.Retrofit.library) - implementation(Dependencies.Retrofit.gsonConverter) - implementation("com.squareup.picasso:picasso:2.8") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") implementation("androidx.datastore:datastore-preferences:1.1.2") diff --git a/app/src/main/java/ru/myitschool/work/utils/AccessibilityExtensions.kt b/app/src/main/java/ru/myitschool/work/utils/AccessibilityExtensions.kt new file mode 100644 index 0000000..7783436 --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/utils/AccessibilityExtensions.kt @@ -0,0 +1,22 @@ +package ru.myitschool.work.utils + +import android.content.Context +import android.net.ConnectivityManager +import android.net.NetworkCapabilities + +fun isOnline(context: Context): Boolean { + val connectivityManager = + context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + val capabilities = + connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork) + if (capabilities != null) { + if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { + return true + } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { + return true + } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)) { + return true + } + } + return false +} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/utils/FragmentExtesions.kt b/app/src/main/java/ru/myitschool/work/utils/FragmentExtesions.kt index 3faef06..d4b0905 100644 --- a/app/src/main/java/ru/myitschool/work/utils/FragmentExtesions.kt +++ b/app/src/main/java/ru/myitschool/work/utils/FragmentExtesions.kt @@ -1,18 +1,19 @@ package ru.myitschool.work.utils import androidx.fragment.app.Fragment -import androidx.lifecycle.flowWithLifecycle +import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.launch -inline fun <T> Flow<T>.collectWithLifecycle( +fun <T> Flow<T>.collectWithLifecycle( fragment: Fragment, - crossinline collector: (T) -> Unit + function: suspend (T) -> Unit ) { fragment.viewLifecycleOwner.lifecycleScope.launch { - flowWithLifecycle(fragment.viewLifecycleOwner.lifecycle).collect { value -> - collector(value) + fragment.repeatOnLifecycle(Lifecycle.State.STARTED) { + collect { function.invoke(it) } } } } \ No newline at end of file diff --git a/app/src/main/res/drawable/no_wifi_pic.png b/app/src/main/res/drawable/no_wifi_pic.png new file mode 100644 index 0000000..f0a8f1a Binary files /dev/null and b/app/src/main/res/drawable/no_wifi_pic.png differ diff --git a/app/src/main/res/layout/fragment_no_internet_notification.xml b/app/src/main/res/layout/fragment_no_internet_notification.xml new file mode 100644 index 0000000..7d52898 --- /dev/null +++ b/app/src/main/res/layout/fragment_no_internet_notification.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="utf-8" ?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" + app:layout_constraintBottom_toBottomOf="parent"> + + <com.google.android.material.bottomsheet.BottomSheetDragHandleView + android:id="@+id/drag_handle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:layout_constraintTop_toTopOf="parent" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginHorizontal="24dp" + android:layout_marginTop="20dp" + android:gravity="center_horizontal" + android:orientation="vertical" + app:layout_constraintTop_toBottomOf="@id/drag_handle"> + + <ImageView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:src="@drawable/no_wifi_pic" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/offline_error" + android:textFontWeight="700" + android:textSize="24sp" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:gravity="center" + android:text="@string/no_internet_instructions" + android:textFontWeight="400" + android:textSize="18sp" /> + + <Button + android:foreground="?attr/selectableItemBackground" + android:textColor="@color/white" + android:layout_marginTop="16dp" + android:id="@+id/close" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/to_main_menu" + android:background="@drawable/main_button" /> + </LinearLayout> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file