Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions changelog/unreleased/4985
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Bugfix: Widen snackbars on tablets

Snackbar width has been expanded to fill the parent on tablets with a
smallest-width of at least 600dp, so tablet users see a full-width snackbar
instead of the narrow Material default.

https://github.com/owncloud/android/issues/4921
https://github.com/owncloud/android/pull/4985
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ fun Activity.showMessageInSnackbar(
val bottomNavView = findViewById<View?>(R.id.bottom_nav_view)
val snackbar = Snackbar.make(findViewById(layoutId), message, duration)
if (bottomNavView?.isVisible == true) { snackbar.setAnchorView(bottomNavView) }
snackbar.show()
snackbar.applyResponsiveWidth().show()
}

fun Activity.showSnackbarWithAction(
Expand All @@ -112,7 +112,7 @@ fun Activity.showSnackbarWithAction(
val bottomNavView = findViewById<View?>(R.id.bottom_nav_view)
val snackbar = Snackbar.make(findViewById(android.R.id.content), message, duration)
if (bottomNavView?.isVisible == true) { snackbar.setAnchorView(bottomNavView) }
snackbar.setAction(actionText) { action() }.show()
snackbar.setAction(actionText) { action() }.applyResponsiveWidth().show()
}

fun Activity.showErrorInToast(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ fun Fragment.showMessageInSnackbar(
val bottomNavView = rootView.findViewById<View?>(R.id.bottom_nav_view)
val snackbar = Snackbar.make(requiredView, message, duration)
if (bottomNavView?.isVisible == true) { snackbar.setAnchorView(bottomNavView) }
snackbar.show()
snackbar.applyResponsiveWidth().show()
}

fun Fragment.showSnackbarWithAction(
Expand All @@ -74,6 +74,7 @@ fun Fragment.showSnackbarWithAction(
val requiredView = view ?: return
Snackbar.make(requiredView, message, duration)
.setAction(actionText) { action() }
.applyResponsiveWidth()
.show()
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* ownCloud Android client application
*
* Copyright (C) 2026 ownCloud GmbH.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.owncloud.android.extensions

import android.view.ViewGroup
import androidx.core.view.updateLayoutParams
import com.google.android.material.snackbar.Snackbar

fun Snackbar.applyResponsiveWidth(): Snackbar {
if (view.context.resources.configuration.smallestScreenWidthDp >= 600) {
view.updateLayoutParams<ViewGroup.LayoutParams> {
width = ViewGroup.LayoutParams.MATCH_PARENT
}
}
return this
}
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ import com.owncloud.android.domain.files.model.OCFile.Companion.ROOT_PARENT_ID
import com.owncloud.android.domain.spaces.model.OCSpace
import com.owncloud.android.domain.utils.Event
import com.owncloud.android.extensions.checkPasscodeEnforced
import com.owncloud.android.extensions.applyResponsiveWidth
import com.owncloud.android.extensions.collectLatestLifecycleFlow
import com.owncloud.android.extensions.goToUrl
import com.owncloud.android.extensions.isDownloadPending
Expand Down Expand Up @@ -1408,7 +1409,9 @@ class FileDisplayActivity : FileActivity(),

is SynchronizeFileUseCase.SyncType.DownloadEnqueued -> {
fileWaitingToPreview?.let {
Snackbar.make(findViewById(android.R.id.content), R.string.new_remote_version_found_msg, Snackbar.LENGTH_LONG).show()
Snackbar.make(findViewById(android.R.id.content), R.string.new_remote_version_found_msg, Snackbar.LENGTH_LONG)
.applyResponsiveWidth()
.show()
startSyncThenOpen(it)
fileWaitingToPreview = null
} ?: showSnackMessage(getString(R.string.download_enqueued_msg))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ import androidx.core.view.WindowInsetsCompat
import com.google.android.material.snackbar.Snackbar
import com.owncloud.android.R
import com.owncloud.android.domain.files.model.OCFile
import com.owncloud.android.extensions.applyResponsiveWidth
import com.owncloud.android.extensions.collectLatestLifecycleFlow
import com.owncloud.android.extensions.filterMenuOptions
import com.owncloud.android.extensions.sendDownloadedFilesByShareSheet
Expand Down Expand Up @@ -305,13 +306,17 @@ class PreviewAudioFragment : FileFragment() {

R.id.action_set_available_offline -> {
fileOperationsViewModel.performOperation(FileOperation.SetFilesAsAvailableOffline(listOf(file)))
Snackbar.make(requireView(), R.string.confirmation_set_available_offline, Snackbar.LENGTH_LONG).show()
Snackbar.make(requireView(), R.string.confirmation_set_available_offline, Snackbar.LENGTH_LONG)
.applyResponsiveWidth()
.show()
true
}

R.id.action_unset_available_offline -> {
fileOperationsViewModel.performOperation(FileOperation.UnsetFilesAsAvailableOffline(listOf(file)))
Snackbar.make(requireView(), R.string.confirmation_unset_available_offline, Snackbar.LENGTH_LONG).show()
Snackbar.make(requireView(), R.string.confirmation_unset_available_offline, Snackbar.LENGTH_LONG)
.applyResponsiveWidth()
.show()
true
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ import com.owncloud.android.R
import com.owncloud.android.databinding.PreviewImageFragmentBinding
import com.owncloud.android.domain.files.model.MIME_SVG
import com.owncloud.android.domain.files.model.OCFile
import com.owncloud.android.extensions.applyResponsiveWidth
import com.owncloud.android.extensions.collectLatestLifecycleFlow
import com.owncloud.android.extensions.filterMenuOptions
import com.owncloud.android.extensions.sendDownloadedFilesByShareSheet
Expand Down Expand Up @@ -248,13 +249,17 @@ class PreviewImageFragment : FileFragment() {

R.id.action_set_available_offline -> {
fileOperationsViewModel.performOperation(FileOperation.SetFilesAsAvailableOffline(listOf(file)))
Snackbar.make(requireActivity().window.decorView, R.string.confirmation_set_available_offline, Snackbar.LENGTH_LONG).show()
Snackbar.make(requireActivity().window.decorView, R.string.confirmation_set_available_offline, Snackbar.LENGTH_LONG)
.applyResponsiveWidth()
.show()
true
}

R.id.action_unset_available_offline -> {
fileOperationsViewModel.performOperation(FileOperation.UnsetFilesAsAvailableOffline(listOf(file)))
Snackbar.make(requireActivity().window.decorView, R.string.confirmation_unset_available_offline, Snackbar.LENGTH_LONG).show()
Snackbar.make(requireActivity().window.decorView, R.string.confirmation_unset_available_offline, Snackbar.LENGTH_LONG)
.applyResponsiveWidth()
.show()
true
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import com.google.android.material.tabs.TabLayoutMediator
import com.owncloud.android.R
import com.owncloud.android.databinding.PreviewTextFragmentBinding
import com.owncloud.android.domain.files.model.OCFile
import com.owncloud.android.extensions.applyResponsiveWidth
import com.owncloud.android.extensions.collectLatestLifecycleFlow
import com.owncloud.android.extensions.filterMenuOptions
import com.owncloud.android.extensions.sendDownloadedFilesByShareSheet
Expand Down Expand Up @@ -170,15 +171,19 @@ class PreviewTextFragment : FileFragment() {
val fileToSetAsAvailableOffline = ArrayList<OCFile>()
fileToSetAsAvailableOffline.add(file)
fileOperationsViewModel.performOperation(FileOperation.SetFilesAsAvailableOffline(fileToSetAsAvailableOffline))
Snackbar.make(requireView(), R.string.confirmation_set_available_offline, Snackbar.LENGTH_LONG).show()
Snackbar.make(requireView(), R.string.confirmation_set_available_offline, Snackbar.LENGTH_LONG)
.applyResponsiveWidth()
.show()
true
}

R.id.action_unset_available_offline -> {
val fileToUnsetAsAvailableOffline = ArrayList<OCFile>()
fileToUnsetAsAvailableOffline.add(file)
fileOperationsViewModel.performOperation(FileOperation.UnsetFilesAsAvailableOffline(fileToUnsetAsAvailableOffline))
Snackbar.make(requireView(), R.string.confirmation_unset_available_offline, Snackbar.LENGTH_LONG).show()
Snackbar.make(requireView(), R.string.confirmation_unset_available_offline, Snackbar.LENGTH_LONG)
.applyResponsiveWidth()
.show()
true
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ import com.owncloud.android.R
import com.owncloud.android.databinding.VideoPreviewBinding
import com.owncloud.android.domain.files.model.OCFile
import com.owncloud.android.domain.utils.Event
import com.owncloud.android.extensions.applyResponsiveWidth
import com.owncloud.android.extensions.filterMenuOptions
import com.owncloud.android.extensions.sendDownloadedFilesByShareSheet
import com.owncloud.android.extensions.showErrorInSnackbar
Expand Down Expand Up @@ -411,15 +412,15 @@ class PreviewVideoActivity : FileActivity(), Player.Listener, OnPrepareVideoPlay
val fileToSetAsAvailableOffline = ArrayList<OCFile>()
fileToSetAsAvailableOffline.add(file)
fileOperationsViewModel.performOperation(SetFilesAsAvailableOffline(fileToSetAsAvailableOffline))
Snackbar.make(binding.root, R.string.confirmation_set_available_offline, Snackbar.LENGTH_LONG).show()
Snackbar.make(binding.root, R.string.confirmation_set_available_offline, Snackbar.LENGTH_LONG).applyResponsiveWidth().show()
true
}

R.id.action_unset_available_offline -> {
val fileToUnsetAsAvailableOffline = ArrayList<OCFile>()
fileToUnsetAsAvailableOffline.add(file)
fileOperationsViewModel.performOperation(UnsetFilesAsAvailableOffline(fileToUnsetAsAvailableOffline))
Snackbar.make(binding.root, R.string.confirmation_unset_available_offline, Snackbar.LENGTH_LONG).show()
Snackbar.make(binding.root, R.string.confirmation_unset_available_offline, Snackbar.LENGTH_LONG).applyResponsiveWidth().show()
true
}

Expand Down
Loading