diff --git a/app/src/main/java/com/infomaniak/drive/ui/fileList/FileListFragment.kt b/app/src/main/java/com/infomaniak/drive/ui/fileList/FileListFragment.kt
index 398de8b8e2..95f370aba9 100644
--- a/app/src/main/java/com/infomaniak/drive/ui/fileList/FileListFragment.kt
+++ b/app/src/main/java/com/infomaniak/drive/ui/fileList/FileListFragment.kt
@@ -436,10 +436,12 @@ open class FileListFragment : MultiSelectFragment(MATOMO_CATEGORY), SwipeRefresh
}
protected open fun setupFileAdapter() {
- mainViewModel.isInternetAvailable.observe(viewLifecycleOwner) { isInternetAvailable ->
- fileAdapter.toggleOfflineMode(requireContext(), !isInternetAvailable)
- binding.noNetwork.isGone = isInternetAvailable
- }
+ observeAndDisplayNetworkAvailability(
+ mainViewModel = mainViewModel,
+ noNetworkBinding = binding.noNetworkInclude,
+ noNetworkBindingDirectParent = binding.fileListLayout,
+ additionalChanges = { isInternetAvailable -> fileAdapter.toggleOfflineMode(requireContext(), !isInternetAvailable) }
+ )
multiSelectManager.apply {
openMultiSelect = { openMultiSelect() }
@@ -818,7 +820,7 @@ open class FileListFragment : MultiSelectFragment(MATOMO_CATEGORY), SwipeRefresh
if (changeControlsVisibility) {
val isFileListDestination = findNavController().currentDestination?.id == R.id.fileListFragment
- noNetwork.isVisible = hasFilesAndIsOffline
+ noNetworkInclude.noNetwork.isVisible = hasFilesAndIsOffline
toolbar.menu?.findItem(R.id.searchItem)?.isVisible = !hideFileList && isFileListDestination
}
diff --git a/app/src/main/java/com/infomaniak/drive/ui/home/HomeFragment.kt b/app/src/main/java/com/infomaniak/drive/ui/home/HomeFragment.kt
index 5ee8cd8f9a..48a7f4060f 100644
--- a/app/src/main/java/com/infomaniak/drive/ui/home/HomeFragment.kt
+++ b/app/src/main/java/com/infomaniak/drive/ui/home/HomeFragment.kt
@@ -53,7 +53,6 @@ class HomeFragment : Fragment(), SwipeRefreshLayout.OnRefreshListener {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) = with(binding) {
super.onViewCreated(view, savedInstanceState)
-
mainViewModel.isInternetAvailable.observe(viewLifecycleOwner) { isInternetAvailable ->
noNetworkCard.root.isGone = isInternetAvailable
}
diff --git a/app/src/main/java/com/infomaniak/drive/ui/home/RootFilesFragment.kt b/app/src/main/java/com/infomaniak/drive/ui/home/RootFilesFragment.kt
index bbc42fdfb1..901585bb9b 100644
--- a/app/src/main/java/com/infomaniak/drive/ui/home/RootFilesFragment.kt
+++ b/app/src/main/java/com/infomaniak/drive/ui/home/RootFilesFragment.kt
@@ -37,13 +37,10 @@ import com.infomaniak.drive.data.models.File
import com.infomaniak.drive.databinding.FragmentRootFilesBinding
import com.infomaniak.drive.ui.MainViewModel
import com.infomaniak.drive.ui.fileList.FileListViewModel
-import com.infomaniak.drive.utils.AccountUtils
+import com.infomaniak.drive.utils.*
import com.infomaniak.drive.utils.FilePresenter.displayFile
import com.infomaniak.drive.utils.FilePresenter.openFolder
-import com.infomaniak.drive.utils.Utils
import com.infomaniak.drive.utils.Utils.Shortcuts
-import com.infomaniak.drive.utils.isPositive
-import com.infomaniak.drive.utils.setupSwitchDriveButton
import com.infomaniak.lib.core.utils.safeBinding
import com.infomaniak.lib.core.utils.safeNavigate
@@ -79,6 +76,11 @@ class RootFilesFragment : Fragment() {
updateAndObserveFiles()
observeNavigateFileListTo()
+ observeAndDisplayNetworkAvailability(
+ mainViewModel = mainViewModel,
+ noNetworkBinding = noNetworkInclude,
+ noNetworkBindingDirectParent = contentLinearLayout,
+ )
}
private fun setupDriveToolbar() = with(binding) {
diff --git a/app/src/main/java/com/infomaniak/drive/ui/menu/MenuGalleryFragment.kt b/app/src/main/java/com/infomaniak/drive/ui/menu/MenuGalleryFragment.kt
index a2c5da80ad..09e786f05f 100644
--- a/app/src/main/java/com/infomaniak/drive/ui/menu/MenuGalleryFragment.kt
+++ b/app/src/main/java/com/infomaniak/drive/ui/menu/MenuGalleryFragment.kt
@@ -26,19 +26,22 @@ import androidx.core.view.isGone
import androidx.core.view.marginBottom
import androidx.core.view.marginTop
import androidx.fragment.app.Fragment
-import androidx.navigation.fragment.findNavController
+import androidx.fragment.app.activityViewModels
import com.google.android.material.appbar.AppBarLayout
import com.infomaniak.drive.R
import com.infomaniak.drive.databinding.FragmentMenuGalleryBinding
import com.infomaniak.drive.databinding.MultiSelectLayoutBinding
import com.infomaniak.drive.ui.MainActivity
+import com.infomaniak.drive.ui.MainViewModel
import com.infomaniak.drive.ui.fileList.multiSelect.GalleryMultiSelectActionsBottomSheetDialog
+import com.infomaniak.drive.utils.observeAndDisplayNetworkAvailability
import com.infomaniak.lib.core.utils.safeBinding
import com.infomaniak.lib.core.utils.toPx
class MenuGalleryFragment : Fragment() {
private var binding: FragmentMenuGalleryBinding by safeBinding()
+ private val mainViewModel: MainViewModel by activityViewModels()
private var galleryFragment = GalleryFragment()
@@ -89,6 +92,11 @@ class MenuGalleryFragment : Fragment() {
})
adjustFastScrollBarScrollRange()
+ observeAndDisplayNetworkAvailability(
+ mainViewModel = mainViewModel,
+ noNetworkBinding = binding.noNetworkInclude,
+ noNetworkBindingDirectParent = binding.galleryContentLinearLayout,
+ )
}
private fun adjustFastScrollBarScrollRange() = with(binding) {
diff --git a/app/src/main/java/com/infomaniak/drive/utils/Extensions.kt b/app/src/main/java/com/infomaniak/drive/utils/Extensions.kt
index 65cceb7c4c..dbc1fad1f0 100644
--- a/app/src/main/java/com/infomaniak/drive/utils/Extensions.kt
+++ b/app/src/main/java/com/infomaniak/drive/utils/Extensions.kt
@@ -30,6 +30,7 @@ import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
import android.provider.MediaStore
import android.text.format.Formatter
+import android.transition.*
import android.util.DisplayMetrics
import android.util.Patterns
import android.view.ViewGroup
@@ -39,6 +40,7 @@ import android.widget.ImageView
import androidx.annotation.DrawableRes
import androidx.core.content.ContextCompat
import androidx.core.content.pm.ShortcutManagerCompat
+import androidx.core.view.children
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
@@ -67,6 +69,7 @@ import com.infomaniak.drive.data.models.drive.Category
import com.infomaniak.drive.data.models.drive.Drive
import com.infomaniak.drive.databinding.CardviewFileListBinding
import com.infomaniak.drive.databinding.ItemUserBinding
+import com.infomaniak.drive.databinding.LayoutNoNetworkSmallBinding
import com.infomaniak.drive.databinding.LayoutSwitchDriveBinding
import com.infomaniak.drive.ui.MainActivity
import com.infomaniak.drive.ui.MainViewModel
@@ -455,3 +458,21 @@ fun LayoutSwitchDriveBinding.setupSwitchDriveButton(fragment: Fragment) {
},
)
}
+
+fun Fragment.observeAndDisplayNetworkAvailability(
+ mainViewModel: MainViewModel,
+ noNetworkBinding: LayoutNoNetworkSmallBinding,
+ noNetworkBindingDirectParent: ViewGroup,
+ additionalChanges: ((isInternetAvailable: Boolean) -> Unit)? = null,
+) {
+ mainViewModel.isInternetAvailable.observe(viewLifecycleOwner) { isInternetAvailable ->
+ val togetherAutoTransition = AutoTransition().apply { ordering = TransitionSet.ORDERING_TOGETHER }
+ with(togetherAutoTransition) {
+ noNetworkBindingDirectParent.children.forEach { child -> addTarget(child) }
+ TransitionManager.beginDelayedTransition(noNetworkBindingDirectParent, this)
+ }
+
+ noNetworkBinding.noNetwork.isGone = isInternetAvailable
+ additionalChanges?.invoke(isInternetAvailable)
+ }
+}
diff --git a/app/src/main/res/layout/fragment_file_list.xml b/app/src/main/res/layout/fragment_file_list.xml
index 7e0fb68e4b..71a419f7dc 100644
--- a/app/src/main/res/layout/fragment_file_list.xml
+++ b/app/src/main/res/layout/fragment_file_list.xml
@@ -121,20 +121,9 @@
-
+
-
+ android:orientation="vertical">
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_root_files.xml b/app/src/main/res/layout/fragment_root_files.xml
index 6e665b0c88..94748c7da6 100644
--- a/app/src/main/res/layout/fragment_root_files.xml
+++ b/app/src/main/res/layout/fragment_root_files.xml
@@ -52,91 +52,102 @@
-
-
+
+
+ android:layout_height="match_parent">
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_marginStart="@dimen/marginStandard"
+ android:layout_marginTop="@dimen/marginStandard"
+ android:layout_marginEnd="@dimen/marginStandard">
-
-
-
-
-
-
-
-
-
+ android:divider="@drawable/divider"
+ android:orientation="vertical"
+ android:showDividers="middle">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+