Skip to content

Commit

Permalink
Merge pull request #1224 from Infomaniak/v3-ui-no-network
Browse files Browse the repository at this point in the history
Add no network indicator banner to the root of files and the gallery
  • Loading branch information
JorisBodin authored Feb 23, 2024
2 parents d6d43fd + 2d0d300 commit c35afe1
Show file tree
Hide file tree
Showing 9 changed files with 179 additions and 103 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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() }
Expand Down Expand Up @@ -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
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -79,6 +76,11 @@ class RootFilesFragment : Fragment() {

updateAndObserveFiles()
observeNavigateFileListTo()
observeAndDisplayNetworkAvailability(
mainViewModel = mainViewModel,
noNetworkBinding = noNetworkInclude,
noNetworkBindingDirectParent = contentLinearLayout,
)
}

private fun setupDriveToolbar() = with(binding) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down Expand Up @@ -89,6 +92,11 @@ class MenuGalleryFragment : Fragment() {
})

adjustFastScrollBarScrollRange()
observeAndDisplayNetworkAvailability(
mainViewModel = mainViewModel,
noNetworkBinding = binding.noNetworkInclude,
noNetworkBindingDirectParent = binding.galleryContentLinearLayout,
)
}

private fun adjustFastScrollBarScrollRange() = with(binding) {
Expand Down
21 changes: 21 additions & 0 deletions app/src/main/java/com/infomaniak/drive/utils/Extensions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
}
}
17 changes: 3 additions & 14 deletions app/src/main/res/layout/fragment_file_list.xml
Original file line number Diff line number Diff line change
Expand Up @@ -121,20 +121,9 @@

</FrameLayout>

<TextView
android:id="@+id/noNetwork"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/marginStandard"
android:layout_marginBottom="@dimen/marginStandardSmall"
android:drawablePadding="10dp"
android:gravity="center"
android:text="@string/allNoNetwork"
android:textColor="@color/primaryText"
android:textSize="13sp"
android:visibility="gone"
app:drawableStartCompat="@drawable/ic_no_network"
tools:visibility="visible" />
<include
android:id="@+id/noNetworkInclude"
layout="@layout/layout_no_network_small" />

<LinearLayout
android:id="@+id/currentActivity"
Expand Down
19 changes: 15 additions & 4 deletions app/src/main/res/layout/fragment_menu_gallery.xml
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,23 @@
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">

<androidx.fragment.app.FragmentContainerView
android:id="@+id/galleryFragmentView"
<LinearLayout
android:id="@+id/galleryContentLinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="true"
tools:layout="@layout/fragment_gallery" />
android:orientation="vertical">

<include
android:id="@+id/noNetworkInclude"
layout="@layout/layout_no_network_small" />

<androidx.fragment.app.FragmentContainerView
android:id="@+id/galleryFragmentView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="true"
tools:layout="@layout/fragment_gallery" />

</LinearLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
159 changes: 85 additions & 74 deletions app/src/main/res/layout/fragment_root_files.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,91 +52,102 @@
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>

<androidx.core.widget.NestedScrollView
<LinearLayout
android:id="@+id/contentLinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">

<com.google.android.material.card.MaterialCardView
style="@style/CardViewInfomaniak"
<include
android:id="@+id/noNetworkInclude"
layout="@layout/layout_no_network_small" />

<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/marginStandard"
android:layout_marginTop="@dimen/marginStandard"
android:layout_marginEnd="@dimen/marginStandard">
android:layout_height="match_parent">

<LinearLayout
<com.google.android.material.card.MaterialCardView
style="@style/CardViewInfomaniak"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@drawable/divider"
android:orientation="vertical"
android:showDividers="middle">

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/organizationFolder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
app:icon="@drawable/ic_folder_common_documents"
app:title="@string/localizedFilenameTeamSpace"
tools:visibility="visible" />

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/personalFolder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
app:icon="@drawable/ic_folder_filled"
app:iconColor="@color/iconColor"
app:title="@string/localizedFilenamePrivateSpace"
tools:visibility="visible" />

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/favorites"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_star_unfilled"
app:title="@string/favoritesTitle" />

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/recentChanges"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_clock"
app:title="@string/lastEditsTitle" />

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/sharedWithMeFiles"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_folder_select_2"
app:title="@string/sharedWithMeTitle" />
android:layout_marginStart="@dimen/marginStandard"
android:layout_marginTop="@dimen/marginStandard"
android:layout_marginEnd="@dimen/marginStandard">

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/myShares"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_folder_select"
app:title="@string/mySharesTitle" />

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/offlineFile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_offline"
app:title="@string/offlineFileTitle" />

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/trashbin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_delete"
app:iconColor="@color/iconColor"
app:title="@string/trashTitle" />

</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</androidx.core.widget.NestedScrollView>
android:divider="@drawable/divider"
android:orientation="vertical"
android:showDividers="middle">

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/organizationFolder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
app:icon="@drawable/ic_folder_common_documents"
app:title="@string/localizedFilenameTeamSpace"
tools:visibility="visible" />

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/personalFolder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
app:icon="@drawable/ic_folder_filled"
app:iconColor="@color/iconColor"
app:title="@string/localizedFilenamePrivateSpace"
tools:visibility="visible" />

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/favorites"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_star_unfilled"
app:title="@string/favoritesTitle" />

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/recentChanges"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_clock"
app:title="@string/lastEditsTitle" />

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/sharedWithMeFiles"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_folder_select_2"
app:title="@string/sharedWithMeTitle" />

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/myShares"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_folder_select"
app:title="@string/mySharesTitle" />

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/offlineFile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_offline"
app:title="@string/offlineFileTitle" />

<com.infomaniak.drive.ui.menu.MenuItemView
android:id="@+id/trashbin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:icon="@drawable/ic_delete"
app:iconColor="@color/iconColor"
app:title="@string/trashTitle" />

</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</androidx.core.widget.NestedScrollView>
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

<include
Expand Down
Loading

0 comments on commit c35afe1

Please sign in to comment.