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"> + + + + + + + + + + + + + + + + + + + + + +