diff --git a/app/src/main/java/com/nextcloud/client/editimage/EditImageActivity.kt b/app/src/main/java/com/nextcloud/client/editimage/EditImageActivity.kt index 7c09f8b61aaa..9663c6fec9a3 100644 --- a/app/src/main/java/com/nextcloud/client/editimage/EditImageActivity.kt +++ b/app/src/main/java/com/nextcloud/client/editimage/EditImageActivity.kt @@ -23,6 +23,7 @@ import com.nextcloud.client.di.Injectable import com.nextcloud.client.jobs.upload.FileUploadHelper import com.nextcloud.client.jobs.upload.FileUploadWorker import com.nextcloud.model.OCUploadLocalPathData +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.owncloud.android.R import com.owncloud.android.databinding.ActivityEditImageBinding @@ -31,7 +32,6 @@ import com.owncloud.android.files.services.NameCollisionPolicy import com.owncloud.android.lib.common.operations.OnRemoteOperationListener import com.owncloud.android.operations.UploadFileOperation import com.owncloud.android.ui.activity.FileActivity -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.MimeType import java.io.File @@ -87,7 +87,7 @@ class EditImageActivity : override fun onCropImageComplete(view: CropImageView, result: CropImageView.CropResult) { if (!result.isSuccessful) { - DisplayUtils.showSnackMessage(this, getString(R.string.image_editor_unable_to_edit_image)) + SnackbarUtil.show(this, getString(R.string.image_editor_unable_to_edit_image)) return } val resultUri = result.getUriFilePath(this, false) @@ -113,7 +113,7 @@ class EditImageActivity : override fun onSetImageUriComplete(view: CropImageView, uri: Uri, error: Exception?) { if (error != null) { - DisplayUtils.showSnackMessage(this, getString(R.string.image_editor_unable_to_edit_image)) + SnackbarUtil.show(this, getString(R.string.image_editor_unable_to_edit_image)) return } view.visibility = View.VISIBLE diff --git a/app/src/main/java/com/nextcloud/client/errorhandling/ShowErrorActivity.kt b/app/src/main/java/com/nextcloud/client/errorhandling/ShowErrorActivity.kt index 87c138f9b1b6..fefb879642fc 100644 --- a/app/src/main/java/com/nextcloud/client/errorhandling/ShowErrorActivity.kt +++ b/app/src/main/java/com/nextcloud/client/errorhandling/ShowErrorActivity.kt @@ -12,6 +12,7 @@ import android.view.Menu import android.view.MenuItem import androidx.appcompat.app.AppCompatActivity import com.google.android.material.snackbar.Snackbar +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.databinding.ActivityShowErrorBinding import com.owncloud.android.utils.ClipboardUtil @@ -35,14 +36,9 @@ class ShowErrorActivity : AppCompatActivity() { setSupportActionBar(binding.toolbarInclude.toolbar) supportActionBar!!.title = createErrorTitle() - val snackbar = DisplayUtils.createSnackbar( - binding.errorPageContainer, - R.string.error_report_issue_text, - Snackbar.LENGTH_INDEFINITE - ) - .setAction(R.string.error_report_issue_action) { reportIssue() } - - snackbar.show() + SnackbarUtil.create(binding.errorPageContainer, R.string.error_report_issue_text, Snackbar.LENGTH_INDEFINITE) + ?.setAction(R.string.error_report_issue_action) { reportIssue() } + ?.show() } private fun createErrorTitle() = String.format(getString(R.string.error_crash_title), getString(R.string.app_name)) diff --git a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadHelper.kt b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadHelper.kt index 425c717649b4..128a544b7fdb 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadHelper.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadHelper.kt @@ -25,6 +25,7 @@ import com.nextcloud.client.network.Connectivity import com.nextcloud.client.network.ConnectivityService import com.nextcloud.client.notifications.AppWideNotificationManager import com.nextcloud.model.OCUploadLocalPathData +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.checkWCFRestrictions import com.nextcloud.utils.extensions.createOwncloudClient import com.nextcloud.utils.extensions.getUploadIds @@ -51,7 +52,6 @@ import com.owncloud.android.operations.RemoveFileOperation import com.owncloud.android.operations.UploadFileOperation import com.owncloud.android.ui.adapter.uploadList.helper.ConflictHandlingResult import com.owncloud.android.ui.adapter.uploadList.helper.UploadListAdapterActionHandler -import com.owncloud.android.utils.DisplayUtils import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -619,7 +619,7 @@ class FileUploadHelper { MAX_FILE_COUNT, MAX_FILE_COUNT ) - DisplayUtils.showSnackMessage(activity, message) + SnackbarUtil.show(activity, message) } class UploadNotificationActionReceiver : BroadcastReceiver() { diff --git a/app/src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.kt b/app/src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.kt index 824e7b2d688c..b836ce09c71e 100644 --- a/app/src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.kt +++ b/app/src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.kt @@ -24,6 +24,7 @@ import com.nextcloud.client.account.UserAccountManager import com.nextcloud.client.appinfo.AppInfo import com.nextcloud.client.di.Injectable import com.nextcloud.client.preferences.AppPreferences +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.mdm.MDMConfig import com.owncloud.android.BuildConfig import com.owncloud.android.R @@ -103,7 +104,7 @@ class FirstRunActivity : val accountName = data?.getStringExtra(AccountManager.KEY_ACCOUNT_NAME) val account = userAccountManager?.getAccountByName(accountName) if (account == null) { - DisplayUtils.showSnackMessage(this, R.string.account_creation_failed) + SnackbarUtil.show(this, R.string.account_creation_failed) return@registerForActivityResult } diff --git a/app/src/main/java/com/nextcloud/client/player/ui/PlayerActivity.kt b/app/src/main/java/com/nextcloud/client/player/ui/PlayerActivity.kt index 751f465c34c3..73fda35a82af 100644 --- a/app/src/main/java/com/nextcloud/client/player/ui/PlayerActivity.kt +++ b/app/src/main/java/com/nextcloud/client/player/ui/PlayerActivity.kt @@ -26,6 +26,7 @@ import com.nextcloud.client.player.model.file.PlaybackFileType import com.nextcloud.client.player.ui.audio.AudioPlayerView import com.nextcloud.client.player.ui.video.VideoPlayerView import com.nextcloud.ui.fileactions.FileActionsBottomSheet +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getSerializableArgument import com.owncloud.android.R import com.owncloud.android.datamodel.OCFile @@ -33,7 +34,6 @@ import com.owncloud.android.ui.activity.FileActivity import com.owncloud.android.ui.activity.FileDisplayActivity import com.owncloud.android.ui.dialog.ConfirmationDialogFragment import com.owncloud.android.ui.dialog.RemoveFilesDialogFragment -import com.owncloud.android.utils.DisplayUtils import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import javax.inject.Inject @@ -211,7 +211,7 @@ class PlayerActivity : private fun showFileExportStartedMessage() { val message = resources.getQuantityString(R.plurals.export_start, 1, 1) - DisplayUtils.showSnackMessage(playerView, message) + SnackbarUtil.show(playerView, message) } private fun showRemoveFileDialog(file: OCFile) { diff --git a/app/src/main/java/com/nextcloud/client/player/ui/PlayerView.kt b/app/src/main/java/com/nextcloud/client/player/ui/PlayerView.kt index eb632ca452a7..db771fe61b37 100644 --- a/app/src/main/java/com/nextcloud/client/player/ui/PlayerView.kt +++ b/app/src/main/java/com/nextcloud/client/player/ui/PlayerView.kt @@ -26,12 +26,12 @@ import com.nextcloud.client.player.model.state.PlaybackState import com.nextcloud.client.player.ui.control.PlayerControlView import com.nextcloud.client.player.ui.pager.PlayerPager import com.nextcloud.client.player.util.WindowWrapper +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.lib.common.OwnCloudClientManagerFactory import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.operations.DownloadFileOperation -import com.owncloud.android.utils.DisplayUtils import dagger.android.HasAndroidInjector import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -124,7 +124,7 @@ abstract class PlayerView @JvmOverloads constructor( if (error is SourceException) { downloadFile() } else { - DisplayUtils.showSnackMessage(this, R.string.common_error_unknown) + SnackbarUtil.show(this, R.string.common_error_unknown) } } @@ -145,7 +145,7 @@ abstract class PlayerView @JvmOverloads constructor( } else { Log_OC.e(TAG, "cannot download file") withContext(Dispatchers.Main) { - DisplayUtils.showSnackMessage(this@PlayerView, R.string.player_error_source_not_found) + SnackbarUtil.show(this@PlayerView, R.string.player_error_source_not_found) } } } diff --git a/app/src/main/java/com/nextcloud/ui/SetOnlineStatusBottomSheet.kt b/app/src/main/java/com/nextcloud/ui/SetOnlineStatusBottomSheet.kt index b917d5706fe6..532710839c7f 100644 --- a/app/src/main/java/com/nextcloud/ui/SetOnlineStatusBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/ui/SetOnlineStatusBottomSheet.kt @@ -24,13 +24,13 @@ import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.client.account.UserAccountManager import com.nextcloud.client.core.AsyncRunner import com.nextcloud.client.di.Injectable +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.setVisibleIf import com.owncloud.android.R import com.owncloud.android.databinding.SetOnlineStatusBottomSheetBinding import com.owncloud.android.lib.resources.users.Status import com.owncloud.android.lib.resources.users.StatusType import com.owncloud.android.ui.activity.BaseActivity -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.theme.CapabilityUtils import com.owncloud.android.utils.theme.ViewThemeUtils import kotlinx.coroutines.Dispatchers @@ -114,7 +114,7 @@ class SetOnlineStatusBottomSheet(val currentStatus: Status?) : } activity?.let { - DisplayUtils.showSnackMessage(it, R.string.set_online_status_bottom_sheet_error_message) + SnackbarUtil.show(it, R.string.set_online_status_bottom_sheet_error_message) } clearTopStatus() } diff --git a/app/src/main/java/com/nextcloud/ui/SetStatusMessageBottomSheet.kt b/app/src/main/java/com/nextcloud/ui/SetStatusMessageBottomSheet.kt index 86efd789df05..3ac1e4a8a25f 100644 --- a/app/src/main/java/com/nextcloud/ui/SetStatusMessageBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/ui/SetStatusMessageBottomSheet.kt @@ -28,6 +28,7 @@ import com.nextcloud.client.account.User import com.nextcloud.client.account.UserAccountManager import com.nextcloud.client.core.AsyncRunner import com.nextcloud.client.di.Injectable +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.databinding.SetStatusMessageBottomSheetBinding import com.owncloud.android.datamodel.ArbitraryDataProvider @@ -296,7 +297,7 @@ class SetStatusMessageBottomSheet(val user: User, val currentStatus: Status?) : if (boolean) { dismiss() } else { - DisplayUtils.showSnackMessage(view, view?.resources?.getString(R.string.error_setting_status_message)) + SnackbarUtil.show(view, view?.resources?.getString(R.string.error_setting_status_message)) } } diff --git a/app/src/main/java/com/nextcloud/ui/component/UploadWarningCard.kt b/app/src/main/java/com/nextcloud/ui/component/UploadWarningCard.kt index 1e25dfe17bd0..a4599f5b760b 100644 --- a/app/src/main/java/com/nextcloud/ui/component/UploadWarningCard.kt +++ b/app/src/main/java/com/nextcloud/ui/component/UploadWarningCard.kt @@ -18,10 +18,10 @@ import android.view.View import androidx.core.net.toUri import com.nextcloud.client.device.PowerManagementService import com.nextcloud.client.jobs.BackgroundJobManager +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.setVisibleIf import com.owncloud.android.databinding.UploadWarningCardBinding import com.owncloud.android.datamodel.SyncedFolderProvider -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.FilesSyncHelper import com.owncloud.android.utils.theme.ViewThemeUtils import kotlinx.coroutines.CoroutineScope @@ -120,7 +120,7 @@ class UploadWarningCard( FilesSyncHelper.startAutoUploadIgnoringPowerSaving(syncedFolderProvider, backgroundJobManager) } - DisplayUtils.showSnackMessage(view, result.messageId) + SnackbarUtil.show(view, result.messageId) } } } diff --git a/app/src/main/java/com/nextcloud/ui/fileInfo/GovernanceDetailInfo.kt b/app/src/main/java/com/nextcloud/ui/fileInfo/GovernanceDetailInfo.kt index c03dff07f9ea..ae9c399f5a5a 100644 --- a/app/src/main/java/com/nextcloud/ui/fileInfo/GovernanceDetailInfo.kt +++ b/app/src/main/java/com/nextcloud/ui/fileInfo/GovernanceDetailInfo.kt @@ -28,11 +28,11 @@ import com.google.android.material.textfield.TextInputLayout import com.nextcloud.ui.fileInfo.model.GovernanceEvent import com.nextcloud.ui.fileInfo.model.GovernanceLabel import com.nextcloud.ui.fileInfo.model.GovernanceUiState +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.databinding.FileInfoFragmentBinding import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.ui.dialog.extensions.themeButtons -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.theme.ViewThemeUtils import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.first @@ -74,7 +74,7 @@ class GovernanceDetailInfo( viewModel.events.collect { event -> when (event) { GovernanceEvent.PermissionDenied -> { - DisplayUtils.showSnackMessage(fragment, R.string.governance_permission_denied) + SnackbarUtil.show(fragment, R.string.governance_permission_denied) currentLoadedState()?.let { refresh(it) } } } diff --git a/app/src/main/java/com/nextcloud/ui/fileactions/ClientIntegration.kt b/app/src/main/java/com/nextcloud/ui/fileactions/ClientIntegration.kt index d7dc8668ad34..fa6c4bf32239 100644 --- a/app/src/main/java/com/nextcloud/ui/fileactions/ClientIntegration.kt +++ b/app/src/main/java/com/nextcloud/ui/fileactions/ClientIntegration.kt @@ -38,6 +38,7 @@ import com.nextcloud.operations.PostMethod import com.nextcloud.ui.composeActivity.ComposeActivity import com.nextcloud.ui.composeActivity.ComposeDestination import com.nextcloud.utils.GlideHelper +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.databinding.FileActionsBottomSheetBinding import com.owncloud.android.databinding.FileActionsBottomSheetItemBinding @@ -201,7 +202,7 @@ class ClientIntegration( } private suspend fun showMessage(message: String) = withContext(Dispatchers.Main) { - DisplayUtils.showSnackMessage(sheet.requireActivity(), message) + SnackbarUtil.show(sheet.requireActivity(), message) } private fun parseTooltipResult(response: String?): TooltipResponse { diff --git a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt index e0a0583ca5da..5a9bb17c74a9 100644 --- a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt @@ -34,6 +34,7 @@ import com.nextcloud.android.lib.resources.clientintegration.Endpoint import com.nextcloud.client.account.CurrentAccountProvider import com.nextcloud.client.di.Injectable import com.nextcloud.client.di.ViewModelFactory +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.setVisibleIf import com.nextcloud.utils.thumbnail.ThumbnailArguments import com.owncloud.android.R @@ -138,7 +139,7 @@ class FileActionsBottomSheet : FileActionsViewModel.UiState.Error -> { activity?.let { - DisplayUtils.showSnackMessage(it, R.string.error_file_actions) + SnackbarUtil.show(it, R.string.error_file_actions) } dismissAllowingStateLoss() } diff --git a/app/src/main/java/com/nextcloud/ui/trashbinFileActions/TrashbinFileActionsBottomSheet.kt b/app/src/main/java/com/nextcloud/ui/trashbinFileActions/TrashbinFileActionsBottomSheet.kt index 55546b83c7f2..2cd05ac40a7e 100644 --- a/app/src/main/java/com/nextcloud/ui/trashbinFileActions/TrashbinFileActionsBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/ui/trashbinFileActions/TrashbinFileActionsBottomSheet.kt @@ -26,6 +26,7 @@ import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.client.account.CurrentAccountProvider import com.nextcloud.client.di.Injectable import com.nextcloud.client.di.ViewModelFactory +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.toOCFile import com.nextcloud.utils.thumbnail.ThumbnailArguments import com.owncloud.android.R @@ -34,7 +35,6 @@ import com.owncloud.android.databinding.FileActionsBottomSheetItemBinding import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.datamodel.SyncedFolderProvider import com.owncloud.android.lib.resources.trashbin.model.TrashbinFile -import com.owncloud.android.utils.DisplayUtils import com.nextcloud.utils.thumbnail.ThumbnailGenerator import com.owncloud.android.utils.theme.ViewThemeUtils import javax.inject.Inject @@ -111,7 +111,7 @@ class TrashbinFileActionsBottomSheet : TrashbinFileActionsViewModel.UiState.Error -> { activity?.let { - DisplayUtils.showSnackMessage(it, R.string.error_file_actions) + SnackbarUtil.show(it, R.string.error_file_actions) } dismissAllowingStateLoss() } diff --git a/app/src/main/java/com/nextcloud/utils/SnackbarUtil.kt b/app/src/main/java/com/nextcloud/utils/SnackbarUtil.kt new file mode 100644 index 000000000000..a527af09ef42 --- /dev/null +++ b/app/src/main/java/com/nextcloud/utils/SnackbarUtil.kt @@ -0,0 +1,109 @@ +/* + * Nextcloud - Android Client + * + * SPDX-FileCopyrightText: 2026 Alper Ozturk + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +package com.nextcloud.utils + +import android.app.Activity +import android.os.Handler +import android.os.Looper +import android.view.View +import androidx.annotation.StringRes +import androidx.core.view.isVisible +import androidx.fragment.app.Fragment +import com.google.android.material.snackbar.Snackbar +import com.owncloud.android.R +import com.owncloud.android.lib.common.utils.Log_OC + +object SnackbarUtil { + + private val TAG = SnackbarUtil::class.java.simpleName + private val mainThreadHandler = Handler(Looper.getMainLooper()) + + @JvmStatic + fun show(view: View?, @StringRes messageRes: Int, vararg formatArgs: Any?) { + show(view, view.message(messageRes, formatArgs)) + } + + @JvmStatic + fun show(view: View?, message: CharSequence?) { + create(view, message, Snackbar.LENGTH_LONG)?.let { snackbar -> onMainThread(snackbar::show) } + } + + @JvmStatic + fun show(activity: Activity?, @StringRes messageRes: Int, vararg formatArgs: Any?) { + val host = activity.hostView() + show(host, host.message(messageRes, formatArgs)) + } + + @JvmStatic + fun show(activity: Activity?, message: CharSequence?) { + show(activity.hostView(), message) + } + + @JvmStatic + fun show(fragment: Fragment?, @StringRes messageRes: Int, vararg formatArgs: Any?) { + val host = fragment?.activity.hostView() + show(host, host.message(messageRes, formatArgs)) + } + + @JvmStatic + fun showIndefinite(fragment: Fragment?, @StringRes messageRes: Int): Snackbar? = + create(fragment?.activity.hostView(), messageRes, Snackbar.LENGTH_INDEFINITE) + ?.also { snackbar -> onMainThread(snackbar::show) } + + @JvmStatic + fun showServerOutdated(activity: Activity?, duration: Int) { + create(activity.hostView(), R.string.outdated_server, duration) + ?.setAction(R.string.dismiss) { } + ?.let { snackbar -> onMainThread(snackbar::show) } + } + + @JvmStatic + fun dismiss(snackbar: Snackbar?) { + snackbar?.let { onMainThread(snackbar::dismiss) } + } + + @JvmStatic + fun create(view: View?, message: CharSequence?, duration: Int): Snackbar? { + if (view == null || message == null) { + Log_OC.e(TAG, "Snackbar cannot be shown, host view or message is null") + return null + } + + return Snackbar.make(view, message, duration).anchoredToFloatingActionButton(view) + } + + @JvmStatic + fun create(view: View?, @StringRes messageRes: Int, duration: Int): Snackbar? = + create(view, view?.context?.getText(messageRes), duration) + + @Suppress("SpreadOperator") + private fun View?.message(@StringRes messageRes: Int, formatArgs: Array): CharSequence? { + val context = this?.context ?: return null + return when { + formatArgs.isEmpty() -> context.getText(messageRes) + else -> context.getString(messageRes, *formatArgs) + } + } + + private fun Activity?.hostView(): View? = + this?.takeUnless { it.isFinishing || it.isDestroyed }?.findViewById(android.R.id.content) + + private fun Snackbar.anchoredToFloatingActionButton(host: View): Snackbar = apply { + val fab = host.rootView.findViewById(R.id.fab_main) + if (fab != null && fab.isVisible && fab.isAttachedToWindow) { + anchorView = fab + } + } + + private fun onMainThread(action: () -> Unit) { + if (Looper.myLooper() == Looper.getMainLooper()) { + action() + } else { + mainThreadHandler.post(action) + } + } +} diff --git a/app/src/main/java/com/nextcloud/utils/extensions/OCFileListFragmentExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/OCFileListFragmentExtensions.kt index 33fc9b1a5872..08079b46fe54 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/OCFileListFragmentExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/OCFileListFragmentExtensions.kt @@ -9,6 +9,7 @@ package com.nextcloud.utils.extensions import android.os.Bundle import androidx.lifecycle.lifecycleScope +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.e2ee.model.E2EEAction import com.owncloud.android.R import com.owncloud.android.datamodel.OCFile @@ -20,7 +21,6 @@ import com.owncloud.android.ui.dialog.setupEncryption.SetupEncryptionDialogFragm import com.owncloud.android.ui.dialog.setupEncryption.SetupEncryptionDialogFragment.Companion.RESULT_REQUEST_KEY import com.owncloud.android.ui.dialog.setupEncryption.SetupEncryptionDialogFragment.Companion.SUCCESS import com.owncloud.android.ui.fragment.OCFileListFragment -import com.owncloud.android.utils.DisplayUtils import kotlinx.coroutines.launch private const val TAG = "OCFileListFragmentExtensions" @@ -39,7 +39,7 @@ fun OCFileListFragment.showEncryptionDialog(remotePath: String?, action: E2EEAct return@isNetworkAndServerAvailable } - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this, R.string.internet_connection_required_for_encrypted_folder_setup ) diff --git a/app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java b/app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java index 667cf47e65f7..05181e31974a 100644 --- a/app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -64,6 +64,7 @@ import com.nextcloud.client.preferences.AppPreferences; import com.nextcloud.common.PlainClient; import com.nextcloud.operations.PostMethod; +import com.nextcloud.utils.SnackbarUtil; import com.nextcloud.utils.extensions.BundleExtensionsKt; import com.nextcloud.utils.mdm.MDMConfig; import com.owncloud.android.MainApp; @@ -425,7 +426,7 @@ private void poolLogin() { */ private void anonymouslyPostLoginRequest(String url) { if (TextUtils.isEmpty(url)) { - DisplayUtils.showSnackMessage(this, R.string.authenticator_activity_empty_base_url); + SnackbarUtil.show(this, R.string.authenticator_activity_empty_base_url); return; } baseUrl = url; @@ -433,7 +434,7 @@ private void anonymouslyPostLoginRequest(String url) { singleThreadExecutor.execute(() -> { String response = getResponseOfAnonymouslyPostLoginRequest(); if (TextUtils.isEmpty(response)) { - DisplayUtils.showSnackMessage(AuthenticatorActivity.this, R.string.authenticator_activity_empty_response_message); + SnackbarUtil.show(AuthenticatorActivity.this, R.string.authenticator_activity_empty_response_message); return; } @@ -469,7 +470,7 @@ private String extractLoginUrl(String response) { } Log_OC.e(TAG, "Both AuthObject and fallback parsing failed, returning default login URL"); - DisplayUtils.showSnackMessage(this, R.string.authenticator_activity_login_error); + SnackbarUtil.show(this, R.string.authenticator_activity_login_error); return getResources().getString(R.string.webview_login_url); } @@ -488,7 +489,7 @@ private String getResponseOfAnonymouslyPostLoginRequest() { private void launchDefaultWebBrowser(String url) { if (url == null || url.isBlank()) { - DisplayUtils.showSnackMessage(this, R.string.invalid_url); + SnackbarUtil.show(this, R.string.invalid_url); return; } @@ -515,7 +516,7 @@ private void launchDefaultWebBrowser(String url) { Log_OC.e(TAG, "External browser launch failed: " + e); } - DisplayUtils.showSnackMessage(this, R.string.authenticator_activity_no_web_browser_found); + SnackbarUtil.show(this, R.string.authenticator_activity_no_web_browser_found); } private Pair extractPollUrlAndToken() { @@ -888,7 +889,7 @@ protected void onNewIntent(Intent intent) { if (data != null && data.toString().startsWith(getString(R.string.login_data_own_scheme))) { if (!MDMConfig.INSTANCE.multiAccountSupport(this) && accountManager.getAccounts().length == 1) { - DisplayUtils.showSnackMessage(this, R.string.no_mutliple_accounts_allowed); + SnackbarUtil.show(this, R.string.no_mutliple_accounts_allowed); finish(); return; } else { @@ -953,7 +954,7 @@ protected void onResume() { if (!bindService(new Intent(this, OperationsService.class), mOperationsServiceConnection, Context.BIND_AUTO_CREATE)) { - DisplayUtils.showSnackMessage(accountSetupBinding.scroll, R.string.error_cant_bind_to_operations_service); + SnackbarUtil.show(accountSetupBinding.scroll, R.string.error_cant_bind_to_operations_service); finish(); } @@ -1088,7 +1089,7 @@ private void onGetUserNameFinish(RemoteOperationResult result) { } catch (AccountNotFoundException e) { Log_OC.e(TAG, "Account " + mAccount + " was removed!", e); - DisplayUtils.showSnackMessage(accountSetupBinding.scroll, R.string.auth_account_does_not_exist); + SnackbarUtil.show(accountSetupBinding.scroll, R.string.auth_account_does_not_exist); finish(); } } @@ -1342,7 +1343,7 @@ private void updateAuthStatusIconAndText(RemoteOperationResult result) { } private void showErrorAndFinishActivity() { - DisplayUtils.showSnackMessage(this, mAuthStatusText); + SnackbarUtil.show(this, mAuthStatusText); finish(); } @@ -1378,7 +1379,7 @@ public void onAuthenticatorTaskCallback(RemoteOperationResult result) } catch (AccountNotFoundException e) { Log_OC.e(TAG, "Account " + mAccount + " was removed!", e); - DisplayUtils.showSnackMessage(accountSetupBinding.scroll, R.string.auth_account_does_not_exist); + SnackbarUtil.show(accountSetupBinding.scroll, R.string.auth_account_does_not_exist); finish(); } } @@ -1420,7 +1421,7 @@ public void onAuthenticatorTaskCallback(RemoteOperationResult result) if (accountSetupWebviewBinding != null) { anonymouslyPostLoginRequest(mServerInfo.mBaseUrl + WEB_LOGIN); } else { - DisplayUtils.showSnackMessage(this, R.string.auth_access_failed, result.getLogMessage(this)); + SnackbarUtil.show(this, R.string.auth_access_failed, result.getLogMessage(this)); // init webView again updateAuthStatusIconAndText(result); @@ -1620,7 +1621,7 @@ private void startQRScanner() { if (!MDMConfig.INSTANCE.multiAccountSupport(this) && accountManager.getAccounts().length == 1) { - DisplayUtils.showSnackMessage(this, R.string.no_mutliple_accounts_allowed); + SnackbarUtil.show(this, R.string.no_mutliple_accounts_allowed); return; } @@ -1803,6 +1804,6 @@ public void onSavedCertificate() { */ @Override public void onFailedSavingCertificate() { - DisplayUtils.showSnackMessage(this, R.string.ssl_validator_not_saved); + SnackbarUtil.show(this, R.string.ssl_validator_not_saved); } } diff --git a/app/src/main/java/com/owncloud/android/authentication/DeepLinkLoginActivity.kt b/app/src/main/java/com/owncloud/android/authentication/DeepLinkLoginActivity.kt index d3b8f21d9754..3d52334fd119 100644 --- a/app/src/main/java/com/owncloud/android/authentication/DeepLinkLoginActivity.kt +++ b/app/src/main/java/com/owncloud/android/authentication/DeepLinkLoginActivity.kt @@ -9,9 +9,9 @@ package com.owncloud.android.authentication import android.os.Bundle import com.nextcloud.client.di.Injectable +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.mdm.MDMConfig import com.owncloud.android.R -import com.owncloud.android.utils.DisplayUtils class DeepLinkLoginActivity : AuthenticatorActivity(), @@ -20,7 +20,7 @@ class DeepLinkLoginActivity : override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) if (!MDMConfig.multiAccountSupport(this) && accountManager.accounts.size == 1) { - DisplayUtils.showSnackMessage(this, R.string.no_mutliple_accounts_allowed) + SnackbarUtil.show(this, R.string.no_mutliple_accounts_allowed) return } @@ -35,7 +35,7 @@ class DeepLinkLoginActivity : loginDialog?.showDeepLinkDialog(loginUrlInfo) } catch (_: IllegalArgumentException) { - DisplayUtils.showSnackMessage(this, R.string.direct_login_failed) + SnackbarUtil.show(this, R.string.direct_login_failed) } } } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/AlbumsPickerActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/AlbumsPickerActivity.kt index 0c0df32e2298..52562d890619 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/AlbumsPickerActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/AlbumsPickerActivity.kt @@ -14,6 +14,7 @@ import android.view.MenuItem import android.view.View import androidx.fragment.app.FragmentActivity import com.nextcloud.client.di.Injectable +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.databinding.FilesFolderPickerBinding import com.owncloud.android.datamodel.OCFile @@ -28,7 +29,6 @@ import com.owncloud.android.ui.fragment.FileFragment import com.owncloud.android.ui.fragment.GalleryFragment import com.owncloud.android.ui.fragment.OCFileListFragment import com.owncloud.android.ui.fragment.albums.AlbumsFragment -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.ErrorMessageAdapter class AlbumsPickerActivity : @@ -179,7 +179,7 @@ class AlbumsPickerActivity : fileListFragment?.refreshAlbums() } else { try { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, resources) ) diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt index 5f9d0caed0db..f8235dfda031 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt @@ -25,6 +25,7 @@ import com.nextcloud.client.jobs.upload.FileUploadWorker import com.nextcloud.client.jobs.upload.UploadNotificationManager import com.nextcloud.client.jobs.utils.UploadErrorNotificationManager import com.nextcloud.model.HTTPStatusCodes +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getDecryptedPath import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.logFileSize @@ -40,7 +41,6 @@ import com.owncloud.android.lib.resources.files.model.RemoteFile import com.owncloud.android.ui.dialog.conflict.ConflictsResolveDialog.Decision import com.owncloud.android.ui.dialog.conflict.ConflictsResolveDialog.OnConflictDecisionMadeListener import com.owncloud.android.ui.dialog.conflict.ConflictResolveDialogFactory -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.FileStorageUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -359,7 +359,7 @@ class ConflictsResolveActivity : } lifecycleScope.launch(Dispatchers.Main) { - DisplayUtils.showSnackMessage(this@ConflictsResolveActivity, message) + SnackbarUtil.show(this@ConflictsResolveActivity, message) finish() } } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java index 805b645a9095..fc9a204b83da 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java @@ -65,6 +65,7 @@ import com.nextcloud.ui.composeActivity.ComposeDestination; import com.nextcloud.utils.GlideHelper; import com.nextcloud.utils.LinkHelper; +import com.nextcloud.utils.SnackbarUtil; import com.nextcloud.utils.extensions.ActivityExtensionsKt; import com.nextcloud.utils.extensions.DrawerActivityExtensionsKt; import com.nextcloud.utils.extensions.NavigationViewExtensionsKt; @@ -1457,7 +1458,7 @@ protected void handleDeepLink(@NonNull Uri uri) { DeepLinkConstants deepLinkType = DeepLinkConstants.Companion.fromPath(path); if (deepLinkType == null) { - DisplayUtils.showSnackMessage(this, getString(R.string.invalid_url)); + SnackbarUtil.show(this, getString(R.string.invalid_url)); return; } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java b/app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java index 784a8117588b..b20d447a67ff 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java @@ -25,6 +25,7 @@ import com.google.android.material.snackbar.Snackbar; import com.nextcloud.android.common.ui.theme.utils.ColorRole; import com.nextcloud.client.account.User; +import com.nextcloud.utils.SnackbarUtil; import com.nextcloud.utils.extensions.FileExtensionsKt; import com.nextcloud.utils.extensions.IntentExtensionsKt; import com.nextcloud.utils.thumbnail.VideoOverlayGenerator; @@ -34,7 +35,6 @@ import com.owncloud.android.datamodel.SyncedFolderObserver; import com.owncloud.android.datamodel.SyncedFolderProvider; import com.owncloud.android.ui.asynctasks.TextEditorLoadUrlTask; -import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.MimeTypeUtil; import com.owncloud.android.utils.RichDocumentDownloader; import com.owncloud.android.utils.WebViewUtil; @@ -86,17 +86,19 @@ public void onUrlLoaded(String loadedUrl) { new Handler().postDelayed(() -> { if (this.getWebView().getVisibility() != View.VISIBLE) { - Snackbar snackbar = DisplayUtils.createSnackbar(findViewById(android.R.id.content), - R.string.timeout_richDocuments, Snackbar.LENGTH_INDEFINITE) - .setAction(R.string.common_cancel, v -> closeView()); - - viewThemeUtils.material.themeSnackbar(snackbar); - setLoadingSnackbar(snackbar); - snackbar.show(); + Snackbar snackbar = SnackbarUtil.create(findViewById(android.R.id.content), + R.string.timeout_richDocuments, + Snackbar.LENGTH_INDEFINITE); + if (snackbar != null) { + snackbar.setAction(R.string.common_cancel, v -> closeView()); + viewThemeUtils.material.themeSnackbar(snackbar); + setLoadingSnackbar(snackbar); + snackbar.show(); + } } }, 10 * 1000); } else { - DisplayUtils.showSnackMessage(this,R.string.richdocuments_failed_to_load_document); + SnackbarUtil.show(this, R.string.richdocuments_failed_to_load_document); finish(); } } @@ -154,7 +156,7 @@ public boolean onShowFileChooser(WebView webView, ValueCallback filePathC activity.startActivityForResult(intent, REQUEST_LOCAL_FILE); } catch (ActivityNotFoundException e) { uploadMessage = null; - DisplayUtils.showSnackMessage(EditorWebView.this, R.string.editor_web_view_cannot_open_file); + SnackbarUtil.show(EditorWebView.this, R.string.editor_web_view_cannot_open_file); return false; } @@ -165,7 +167,7 @@ public boolean onShowFileChooser(WebView webView, ValueCallback filePathC setFile(IntentExtensionsKt.getParcelableArgument(getIntent(), ExternalSiteWebView.EXTRA_FILE, OCFile.class)); if (getFile() == null) { - DisplayUtils.showSnackMessage(this, R.string.richdocuments_failed_to_load_document); + SnackbarUtil.show(this, R.string.richdocuments_failed_to_load_document); finish(); } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ErrorsWhileCopyingHandlerActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/ErrorsWhileCopyingHandlerActivity.java index e7452f0acd4c..29f866e06bcb 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/ErrorsWhileCopyingHandlerActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/ErrorsWhileCopyingHandlerActivity.java @@ -28,13 +28,13 @@ import android.widget.TextView; import com.nextcloud.client.account.User; +import com.nextcloud.utils.SnackbarUtil; import com.nextcloud.utils.extensions.IntentExtensionsKt; import com.owncloud.android.R; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.ui.dialog.IndeterminateProgressDialog; -import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.FileStorageUtils; import java.io.File; @@ -259,7 +259,7 @@ protected void onPostExecute(Boolean result) { // nothing else to do in this activity finish(); } else { - DisplayUtils.showSnackMessage(findViewById(android.R.id.content), R.string.foreign_files_fail); + SnackbarUtil.show(findViewById(android.R.id.content), R.string.foreign_files_fail); } } } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java b/app/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java index 96ef2176310c..182d6f0272be 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/ExternalSiteWebView.java @@ -23,6 +23,7 @@ import android.webkit.WebView; import android.widget.ProgressBar; +import com.nextcloud.utils.SnackbarUtil; import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.databinding.ExternalsiteWebviewBinding; @@ -60,7 +61,7 @@ protected final void onCreate(Bundle savedInstanceState) { if (!WebViewUtil.available(this)) { super.onCreate(savedInstanceState); - DisplayUtils.showSnackMessage(this, R.string.webview_not_available); + SnackbarUtil.show(this, R.string.webview_not_available); finish(); return; } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java index a097a6b2d47a..87851fea58b3 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java @@ -39,6 +39,7 @@ import com.nextcloud.client.network.NetworkChangeListener; import com.nextcloud.client.player.ui.PlayerActivity; import com.nextcloud.utils.EditorUtils; +import com.nextcloud.utils.SnackbarUtil; import com.nextcloud.utils.extensions.ActivityExtensionsKt; import com.nextcloud.utils.extensions.BundleExtensionsKt; import com.nextcloud.utils.extensions.FileExtensionsKt; @@ -390,7 +391,7 @@ public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationRe requestCredentialsUpdate(); if (result.getCode() == ResultCode.UNAUTHORIZED) { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()) ); } @@ -410,7 +411,7 @@ public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationRe updateFileFromDB(); } else if (result.getCode() != ResultCode.CANCELLED) { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()) ); } @@ -423,7 +424,7 @@ public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationRe updateFileFromDB(); } else { - DisplayUtils.showSnackMessage(this, + SnackbarUtil.show(this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources())); @@ -500,7 +501,7 @@ public void performCredentialsUpdate(Account account, Context context) { updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); startActivityForResult(updateAccountCredentials, REQUEST_CODE__UPDATE_CREDENTIALS); } catch (com.owncloud.android.lib.common.accounts.AccountUtils.AccountNotFoundException e) { - DisplayUtils.showSnackMessage(this, R.string.auth_account_does_not_exist); + SnackbarUtil.show(this, R.string.auth_account_does_not_exist); } } @@ -534,7 +535,7 @@ private void onSynchronizeFileOperationFinish(SynchronizeFileOperation operation } else { if (!operation.getTransferWasRequested()) { - DisplayUtils.showSnackMessage(this, ErrorMessageAdapter.getErrorCauseMessage(result, + SnackbarUtil.show(this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources())); } supportInvalidateOptionsMenu(); @@ -727,7 +728,7 @@ public static void showDevSnackbar(Activity activity, } if (latestVersion == -1 || currentVersion == -1) { - DisplayUtils.showSnackMessage(activity, R.string.dev_version_no_information_available, Snackbar.LENGTH_LONG); + SnackbarUtil.show(activity, R.string.dev_version_no_information_available); } if (latestVersion > currentVersion) { String devApkLink = activity.getString(R.string.dev_link) + latestVersion + ".apk"; @@ -740,7 +741,7 @@ public static void showDevSnackbar(Activity activity, } } else { if (!inBackground) { - DisplayUtils.showSnackMessage(activity, R.string.dev_version_no_new_version_available, Snackbar.LENGTH_LONG); + SnackbarUtil.show(activity, R.string.dev_version_no_new_version_available); } } } @@ -804,7 +805,7 @@ private void onUpdateNoteForShareOperationFinish(RemoteOperationResult result) { sharingFragment.onUpdateShareInformation(result); } } else { - DisplayUtils.showSnackMessage(this, R.string.note_could_not_sent); + SnackbarUtil.show(this, R.string.note_could_not_sent); } } @@ -886,7 +887,7 @@ private void onCreateShareViaLinkOperationFinish(CreateShareViaLinkOperation ope if (ocFileListFragment.getAdapterFiles().contains(file)) { ocFileListFragment.updateOCFile(file); } else { - DisplayUtils.showSnackMessage(this, R.string.file_activity_shared_file_cannot_be_updated); + SnackbarUtil.show(this, R.string.file_activity_shared_file_cannot_be_updated); } } } else { @@ -965,7 +966,7 @@ protected void onNewIntent(Intent intent) { if (!existingSharees.contains(shareType + "_" + shareWith)) { doShareWith(shareWith, shareType); } else { - DisplayUtils.showSnackMessage(this, getString(R.string.sharee_already_added_to_file)); + SnackbarUtil.show(this, getString(R.string.sharee_already_added_to_file)); } } } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt index e48cdc9f8912..dcf2c6872458 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt @@ -79,6 +79,7 @@ import com.nextcloud.client.utils.IntentUtil import com.nextcloud.model.OCUploadLocalPathData import com.nextcloud.model.WorkerState.OfflineOperationsCompleted import com.nextcloud.ui.composeActivity.ComposeProcessTextAlias +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.getSerializableArgument import com.nextcloud.utils.extensions.isActive @@ -492,7 +493,7 @@ class FileDisplayActivity : optionalCapability.get().hasValidSubscription.isTrue ) ) { - DisplayUtils.showServerOutdatedSnackbar(this, Snackbar.LENGTH_LONG) + SnackbarUtil.showServerOutdated(this, Snackbar.LENGTH_LONG) } } @@ -1061,7 +1062,7 @@ class FileDisplayActivity : } if (!file.renameTo(renamedFile)) { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this@FileDisplayActivity, R.string.error_uploading_direct_camera_upload ) @@ -1136,7 +1137,7 @@ class FileDisplayActivity : ) } if (isValidFolderPath == false) { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this, R.string.file_name_validator_error_contains_reserved_names_or_invalid_characters ) @@ -1161,7 +1162,7 @@ class FileDisplayActivity : } } else { Log_OC.d(TAG, "User clicked on 'Update' with no selection") - DisplayUtils.showSnackMessage(this, R.string.filedisplay_no_file_selected) + SnackbarUtil.show(this, R.string.filedisplay_no_file_selected) } } @@ -1627,7 +1628,7 @@ class FileDisplayActivity : } private fun handleRemovedFolder(syncFolderRemotePath: String?) { - DisplayUtils.showSnackMessage(this, R.string.sync_current_folder_was_removed, syncFolderRemotePath) + SnackbarUtil.show(this, R.string.sync_current_folder_was_removed, syncFolderRemotePath) fileListFragment?.let { it.parentFolderFinder.getParentOnFirstParentRemoved(syncFolderRemotePath, storageManager)?.let { target -> it.listDirectory(target, MainApp.isOnlyOnDevice()) @@ -1780,7 +1781,7 @@ class FileDisplayActivity : } if (renamedInUpload && !uploadedRemotePath.isNullOrBlank()) { val newName = File(uploadedRemotePath).name - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this@FileDisplayActivity, R.string.filedetails_renamed_in_upload_msg, newName @@ -2368,7 +2369,7 @@ class FileDisplayActivity : leftFragment.getFileDetailActivitiesFragment().reload() } } else { - DisplayUtils.showSnackMessage(this, R.string.file_version_restored_error) + SnackbarUtil.show(this, R.string.file_version_restored_error) } } @@ -2381,7 +2382,7 @@ class FileDisplayActivity : private fun onMoveFileOperationFinish(operation: MoveFileOperation?, result: RemoteOperationResult<*>) { if (!result.isSuccess) { try { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()) ) @@ -2403,7 +2404,7 @@ class FileDisplayActivity : refreshGalleryFragmentIfNeeded() } else { try { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()) ) @@ -2423,7 +2424,7 @@ class FileDisplayActivity : val optionalUser = user val renamedFile = operation.file if (!result.isSuccess || optionalUser.isEmpty) { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()) ) @@ -2520,9 +2521,9 @@ class FileDisplayActivity : } else { try { if (RemoteOperationResult.ResultCode.FOLDER_ALREADY_EXISTS == result.code) { - DisplayUtils.showSnackMessage(this, R.string.folder_already_exists) + SnackbarUtil.show(this, R.string.folder_already_exists) } else { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()) ) @@ -3086,7 +3087,7 @@ class FileDisplayActivity : } private fun handleOpenFileViaIntent(intent: Intent) { - DisplayUtils.showSnackMessage(this, getString(R.string.retrieving_file)) + SnackbarUtil.show(this, getString(R.string.retrieving_file)) val userName = intent.getStringExtra(KEY_ACCOUNT) val fileId = intent.getStringExtra(KEY_FILE_ID) @@ -3106,7 +3107,7 @@ class FileDisplayActivity : accountClicked(optionalUser.get()) } } else { - DisplayUtils.showSnackMessage(this, getString(R.string.associated_account_not_found)) + SnackbarUtil.show(this, getString(R.string.associated_account_not_found)) } } } @@ -3118,7 +3119,7 @@ class FileDisplayActivity : if (match == null) { handleDeepLink(uri) } else if (match.users.isEmpty()) { - DisplayUtils.showSnackMessage(this, getString(R.string.associated_account_not_found)) + SnackbarUtil.show(this, getString(R.string.associated_account_not_found)) } else if (match.users.size == SINGLE_USER_SIZE) { openFile(match.users[0], match.fileId) } else { @@ -3210,7 +3211,7 @@ class FileDisplayActivity : private fun onFileRequestError(throwable: Throwable?) { dismissLoadingDialog() - DisplayUtils.showSnackMessage(this, getString(R.string.error_retrieving_file)) + SnackbarUtil.show(this, getString(R.string.error_retrieving_file)) Log_OC.e(TAG, "Requesting file from remote failed!", throwable) } @@ -3253,7 +3254,7 @@ class FileDisplayActivity : file = current updateActionBarTitleAndHomeButton(null) } else { - fragment.view?.let { DisplayUtils.showSnackMessage(it, message) } + fragment.view?.let { SnackbarUtil.show(it, message) } } selectedFile?.let(fragment::onItemClicked) @@ -3273,7 +3274,7 @@ class FileDisplayActivity : val account = accountManager.getUser(accountName).orElse(null) ?: run { Log_OC.w(TAG, "user is not present") - DisplayUtils.showSnackMessage(this@FileDisplayActivity, R.string.account_not_found) + SnackbarUtil.show(this@FileDisplayActivity, R.string.account_not_found) return } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt index 6d1d20947653..a196c3f9c8ee 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.kt @@ -25,6 +25,7 @@ import androidx.lifecycle.lifecycleScope import androidx.localbroadcastmanager.content.LocalBroadcastManager import com.nextcloud.client.account.User import com.nextcloud.client.di.Injectable +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.fileNameValidator.FileNameValidator import com.owncloud.android.R @@ -47,7 +48,6 @@ import com.owncloud.android.ui.fragment.EmptyListState import com.owncloud.android.ui.fragment.FileFragment import com.owncloud.android.ui.fragment.OCFileListFragment import com.owncloud.android.utils.DataHolderUtil -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.ErrorMessageAdapter import com.owncloud.android.utils.FileSortOrder import com.owncloud.android.utils.PathUtils @@ -401,7 +401,7 @@ open class FolderPickerActivity : checkButtonStates(isFolderPathValid) if (!isFolderPathValid) { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this, R.string.file_name_validator_error_contains_reserved_names_or_invalid_characters ) @@ -521,7 +521,7 @@ open class FolderPickerActivity : fileListFragment?.onItemClicked(storageManager.getFileByPath(operation.remotePath)) } else { try { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, resources) ) @@ -623,7 +623,7 @@ open class FolderPickerActivity : } private fun browseRootForRemovedFolder() { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( activity, R.string.sync_current_folder_was_removed, currentFolder?.fileName diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java index d69639d46c39..d2dfc4bee0e3 100755 --- a/app/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java @@ -54,6 +54,7 @@ import com.nextcloud.client.jobs.upload.FileUploadWorker; import com.nextcloud.client.preferences.AppPreferences; import com.nextcloud.model.OCUploadLocalPathData; +import com.nextcloud.utils.SnackbarUtil; import com.nextcloud.utils.extensions.BundleExtensionsKt; import com.nextcloud.utils.extensions.FileExtensionsKt; import com.nextcloud.utils.extensions.IntentExtensionsKt; @@ -260,7 +261,7 @@ protected void onStart() { if (mAccountManager.getAccountsByType(MainApp.getAccountType(this)).length == 0) { final var message = String.format(getString(R.string.uploader_wrn_no_account_text), getString(R.string.app_name)); - DisplayUtils.showSnackMessage(this, message); + SnackbarUtil.show(this, message); return; } @@ -320,13 +321,13 @@ public void selectFile(OCFile file) { String filenameErrorMessage = FileNameValidator.INSTANCE.checkFileName(file.getFileName(), optionalCapabilities.get(), this); if (filenameErrorMessage != null) { - DisplayUtils.showSnackMessage(this, filenameErrorMessage); + SnackbarUtil.show(this, filenameErrorMessage); return; } if (file.isEncrypted() && !FileOperationsHelper.isEndToEndEncryptionSetup(this, getUser().orElseThrow(IllegalAccessError::new))) { - DisplayUtils.showSnackMessage(this, R.string.e2e_not_yet_setup); + SnackbarUtil.show(this, R.string.e2e_not_yet_setup); return; } @@ -937,7 +938,7 @@ public void onSavedCertificate() { private void startSyncFolderOperation(OCFile folder) { if (folder == null) { - DisplayUtils.showSnackMessage(this, R.string.receive_external_files_activity_start_sync_folder_is_not_exists_message); + SnackbarUtil.show(this, R.string.receive_external_files_activity_start_sync_folder_is_not_exists_message); return; } @@ -947,7 +948,7 @@ private void startSyncFolderOperation(OCFile folder) { long currentSyncTime = System.currentTimeMillis(); final var optionalUser = getUser(); if (optionalUser.isEmpty()) { - DisplayUtils.showSnackMessage(this, R.string.user_information_retrieval_error); + SnackbarUtil.show(this, R.string.user_information_retrieval_error); return; } @@ -1037,7 +1038,7 @@ public void uploadFile(String tmpName, String filename) { public void uploadFiles() { if (mStreamsToUpload == null) { - DisplayUtils.showSnackMessage(this, R.string.receive_external_files_activity_unable_to_find_file_to_upload); + SnackbarUtil.show(this, R.string.receive_external_files_activity_unable_to_find_file_to_upload); return; } @@ -1109,7 +1110,7 @@ private void onCreateFolderOperationFinish(CreateFolderOperation operation, Remo populateDirectoryList(null); } else { try { - DisplayUtils.showSnackMessage(this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources())); + SnackbarUtil.show(this, ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources())); } catch (NotFoundException e) { Log_OC.e(TAG, "Error while trying to show fail message ", e); } @@ -1258,7 +1259,7 @@ public void onReceive(Context context, Intent intent) { if (currentDir == null) { // current folder was removed from the server - DisplayUtils.showSnackMessage(getActivity(), R.string.sync_current_folder_was_removed, getCurrentFolder().getFileName()); + SnackbarUtil.show(getActivity(), R.string.sync_current_folder_was_removed, getCurrentFolder().getFileName()); browseToRoot(); } else { if (currentFile == null && !mFile.isFolder()) { diff --git a/app/src/main/java/com/owncloud/android/ui/activity/RequestCredentialsActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/RequestCredentialsActivity.java index 6fa2f78cc603..94d5d1c4fc4e 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/RequestCredentialsActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/RequestCredentialsActivity.java @@ -18,11 +18,11 @@ import android.os.SystemClock; import com.nextcloud.client.preferences.AppPreferencesImpl; +import com.nextcloud.utils.SnackbarUtil; import com.owncloud.android.R; import com.owncloud.android.authentication.PassCodeManager; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.utils.DeviceCredentialUtils; -import com.owncloud.android.utils.DisplayUtils; import androidx.annotation.Nullable; @@ -54,7 +54,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } else if (resultCode == Activity.RESULT_CANCELED) { finishWithResult(KEY_CHECK_RESULT_CANCEL); } else { - DisplayUtils.showSnackMessage(this, R.string.default_credentials_wrong); + SnackbarUtil.show(this, R.string.default_credentials_wrong); requestCredentials(); } } @@ -67,7 +67,7 @@ protected void onResume() { if (DeviceCredentialUtils.areCredentialsAvailable(this)) { requestCredentials(); } else { - DisplayUtils.showSnackMessage(this, R.string.prefs_lock_device_credentials_not_setup); + SnackbarUtil.show(this, R.string.prefs_lock_device_credentials_not_setup); finishWithResult(KEY_CHECK_RESULT_CANCEL); } } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/RichDocumentsEditorWebView.kt b/app/src/main/java/com/owncloud/android/ui/activity/RichDocumentsEditorWebView.kt index 29ce411a6e2c..47805c0f5ab7 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/RichDocumentsEditorWebView.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/RichDocumentsEditorWebView.kt @@ -20,6 +20,7 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.core.net.toUri import com.nextcloud.client.account.CurrentAccountProvider import com.nextcloud.client.network.ClientFactory +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.owncloud.android.R import com.owncloud.android.datamodel.OCFile @@ -28,7 +29,6 @@ import com.owncloud.android.operations.RichDocumentsCreateAssetOperation import com.owncloud.android.ui.asynctasks.PrintAsyncTask import com.owncloud.android.ui.asynctasks.RichDocumentsLoadUrlTask import com.owncloud.android.ui.fragment.OCFileListFragment -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.FileStorageUtils import com.owncloud.android.utils.RichDocumentDownloadAsParser import edu.umd.cs.findbugs.annotations.SuppressFBWarnings @@ -101,7 +101,7 @@ class RichDocumentsEditorWebView : EditorWebView() { ) } } else { - runOnUiThread { DisplayUtils.showSnackMessage(this, "Inserting image failed!") } + runOnUiThread { SnackbarUtil.show(this, "Inserting image failed!") } } }.start() } @@ -128,7 +128,7 @@ class RichDocumentsEditorWebView : EditorWebView() { private fun printFile(url: Uri) { val account = accountManager.currentOwnCloudAccount if (account == null) { - DisplayUtils.showSnackMessage(webView, getString(R.string.failed_to_print)) + SnackbarUtil.show(webView, getString(R.string.failed_to_print)) return } val targetFile = File(FileStorageUtils.getTemporalPath(account.name) + "/print.pdf") diff --git a/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java index 97f2f24fcb00..0a8068054b1b 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java @@ -52,6 +52,7 @@ import com.nextcloud.client.preferences.AppPreferences; import com.nextcloud.client.preferences.AppPreferencesImpl; import com.nextcloud.client.preferences.DarkMode; +import com.nextcloud.utils.SnackbarUtil; import com.nextcloud.utils.extensions.ContextExtensionsKt; import com.nextcloud.utils.mdm.MDMConfig; import com.owncloud.android.BuildConfig; @@ -480,7 +481,7 @@ private void setupE2EPreference(PreferenceCategory preferenceCategoryMore) { i.putExtra("EXTRA_USER", user); startActivityForResult(i, ACTION_E2E); } else { - DisplayUtils.showSnackMessage(this, R.string.e2e_offline); + SnackbarUtil.show(this, R.string.e2e_offline); } return true; @@ -606,7 +607,7 @@ private void setupRenewE2ECertificate(PreferenceCategory preferenceCategoryMore) preference.setOnPreferenceClickListener(p -> { if (!connectivityService.getConnectivity().isConnected()) { - DisplayUtils.showSnackMessage(this, R.string.e2e_offline); + SnackbarUtil.show(this, R.string.e2e_offline); return true; } @@ -632,9 +633,9 @@ private void updateRenewE2ECertificateSummary(Preference preference) { private void onRenewE2ECertificateResult(Preference preference, E2ECertificateRenewalResult result) { if (result instanceof E2ECertificateRenewalResult.Success) { updateRenewE2ECertificateSummary(preference); - DisplayUtils.showSnackMessage(this, R.string.renew_e2e_certificate_success); + SnackbarUtil.show(this, R.string.renew_e2e_certificate_success); } else if (result instanceof E2ECertificateRenewalResult.Failure) { - DisplayUtils.showSnackMessage(this, ((E2ECertificateRenewalResult.Failure) result).getMessageId()); + SnackbarUtil.show(this, ((E2ECertificateRenewalResult.Failure) result).getMessageId()); } } @@ -742,7 +743,7 @@ private void setupCalendarPreference(PreferenceCategory preferenceCategoryMore) launchDavDroidLogin(); } catch (Throwable t) { Log_OC.e(TAG, "Error while setting up DavX5", t); - DisplayUtils.showSnackMessage( + SnackbarUtil.show( activity, R.string.prefs_davx5_setup_error); } @@ -914,9 +915,9 @@ private void enableLock(String lock) { startActivityForResult(i, ACTION_REQUEST_PASSCODE); } else if (LOCK_DEVICE_CREDENTIALS.equals(lock)) { if (!DeviceCredentialUtils.areCredentialsAvailable(getApplicationContext())) { - DisplayUtils.showSnackMessage(this, R.string.prefs_lock_device_credentials_not_setup); + SnackbarUtil.show(this, R.string.prefs_lock_device_credentials_not_setup); } else { - DisplayUtils.showSnackMessage(this, R.string.prefs_lock_device_credentials_enabled); + SnackbarUtil.show(this, R.string.prefs_lock_device_credentials_enabled); changeLockSetting(LOCK_DEVICE_CREDENTIALS); } } @@ -1056,7 +1057,7 @@ private void launchDavDroidLogin() { // no f-droid market app or Play store installed --> launch browser for f-droid url DisplayUtils.startLinkIntent(this, "https://f-droid.org/packages/at.bitfire.davdroid/"); - DisplayUtils.showSnackMessage(this, R.string.prefs_calendar_contacts_no_store_error); + SnackbarUtil.show(this, R.string.prefs_calendar_contacts_no_store_error); } } } @@ -1097,25 +1098,25 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } appPrefs.apply(); changeLockSetting(LOCK_PASSCODE); - DisplayUtils.showSnackMessage(this, R.string.pass_code_stored); + SnackbarUtil.show(this, R.string.pass_code_stored); } } else if (requestCode == ACTION_CONFIRM_PASSCODE && resultCode == RESULT_OK) { if (data.getBooleanExtra(PassCodeActivity.KEY_CHECK_RESULT, false)) { changeLockSetting(LOCK_NONE); - DisplayUtils.showSnackMessage(this, R.string.pass_code_removed); + SnackbarUtil.show(this, R.string.pass_code_removed); if (!LOCK_NONE.equals(pendingLock)) { enableLock(pendingLock); } } } else if (requestCode == ACTION_REQUEST_CODE_DAVDROID_SETUP && resultCode == RESULT_OK) { - DisplayUtils.showSnackMessage(this, R.string.prefs_calendar_contacts_sync_setup_successful); + SnackbarUtil.show(this, R.string.prefs_calendar_contacts_sync_setup_successful); } else if (requestCode == ACTION_CONFIRM_DEVICE_CREDENTIALS && resultCode == RESULT_OK && data.getIntExtra(RequestCredentialsActivity.KEY_CHECK_RESULT, RequestCredentialsActivity.KEY_CHECK_RESULT_FALSE) == RequestCredentialsActivity.KEY_CHECK_RESULT_TRUE) { changeLockSetting(LOCK_NONE); - DisplayUtils.showSnackMessage(this, R.string.credentials_disabled); + SnackbarUtil.show(this, R.string.credentials_disabled); if (!LOCK_NONE.equals(pendingLock)) { enableLock(pendingLock); } @@ -1161,7 +1162,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { @VisibleForTesting public void handleMnemonicRequest(Intent data) { if (data == null) { - DisplayUtils.showSnackMessage(this, "Error retrieving mnemonic!"); + SnackbarUtil.show(this, "Error retrieving mnemonic!"); } else { if (data.getIntExtra(RequestCredentialsActivity.KEY_CHECK_RESULT, RequestCredentialsActivity.KEY_CHECK_RESULT_FALSE) == diff --git a/app/src/main/java/com/owncloud/android/ui/activity/SetupEncryptionActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/SetupEncryptionActivity.kt index 6de75832ce1f..d219e56e1a73 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/SetupEncryptionActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/SetupEncryptionActivity.kt @@ -11,10 +11,10 @@ import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.nextcloud.client.account.User +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.owncloud.android.R import com.owncloud.android.ui.dialog.setupEncryption.SetupEncryptionDialogFragment -import com.owncloud.android.utils.DisplayUtils /** * Only needed for SettingsActivity @@ -26,7 +26,7 @@ class SetupEncryptionActivity : AppCompatActivity() { val user = intent?.getParcelableArgument("EXTRA_USER", User::class.java) if (user == null) { - DisplayUtils.showSnackMessage(this, R.string.error_showing_encryption_dialog) + SnackbarUtil.show(this, R.string.error_showing_encryption_dialog) finish() } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/TextEditorWebView.kt b/app/src/main/java/com/owncloud/android/ui/activity/TextEditorWebView.kt index 752f5720696f..7206179c08f2 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/TextEditorWebView.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/TextEditorWebView.kt @@ -17,10 +17,10 @@ import androidx.webkit.WebViewFeature import com.nextcloud.android.common.ui.util.PlatformThemeUtil import com.nextcloud.client.appinfo.AppInfo import com.nextcloud.client.device.DeviceInfo +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.datamodel.OCFile import com.owncloud.android.ui.asynctasks.TextEditorLoadUrlTask -import com.owncloud.android.utils.DisplayUtils import javax.inject.Inject class TextEditorWebView : EditorWebView() { @@ -50,7 +50,7 @@ class TextEditorWebView : EditorWebView() { super.postOnCreate() if (!user.isPresent) { - DisplayUtils.showSnackMessage(this, R.string.failed_to_start_editor) + SnackbarUtil.show(this, R.string.failed_to_start_editor) finish() } diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/uploadList/UploadListAdapter.kt b/app/src/main/java/com/owncloud/android/ui/adapter/uploadList/UploadListAdapter.kt index 9bfb9f6baaa0..49eaa86821b8 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/uploadList/UploadListAdapter.kt +++ b/app/src/main/java/com/owncloud/android/ui/adapter/uploadList/UploadListAdapter.kt @@ -24,6 +24,7 @@ import com.nextcloud.client.device.PowerManagementService import com.nextcloud.client.jobs.upload.FileUploadHelper import com.nextcloud.client.jobs.upload.FileUploadWorker import com.nextcloud.client.network.ConnectivityService +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getStatusText import com.nextcloud.utils.extensions.isLastResultConflictError import com.nextcloud.utils.extensions.setVisibleIf @@ -235,7 +236,7 @@ class UploadListAdapter( ) if (showNotExistMessage) { withContext(Dispatchers.Main) { - DisplayUtils.showSnackMessage(activity, R.string.upload_action_file_not_exist_message) + SnackbarUtil.show(activity, R.string.upload_action_file_not_exist_message) } } } @@ -478,7 +479,7 @@ class UploadListAdapter( if (file != null) { uploadHelper.retryUpload(item, user.get()) } else { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( activity, R.string.local_file_not_found_message ) diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/uploadList/helper/UploadListAdapterHelper.kt b/app/src/main/java/com/owncloud/android/ui/adapter/uploadList/helper/UploadListAdapterHelper.kt index 68d04c7cb206..d2732f3f8a4e 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/uploadList/helper/UploadListAdapterHelper.kt +++ b/app/src/main/java/com/owncloud/android/ui/adapter/uploadList/helper/UploadListAdapterHelper.kt @@ -11,6 +11,7 @@ import android.content.ActivityNotFoundException import android.content.Intent import android.net.Uri import androidx.core.content.FileProvider +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.datamodel.OCFile import com.owncloud.android.db.OCUpload @@ -19,7 +20,6 @@ import com.owncloud.android.ui.activity.ConflictsResolveActivity import com.owncloud.android.ui.activity.FileActivity import com.owncloud.android.ui.activity.FileDisplayActivity import com.owncloud.android.ui.preview.PreviewImageFragment -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.MimeType import com.owncloud.android.utils.MimeTypeUtil import java.io.File @@ -52,13 +52,13 @@ class UploadListAdapterHelper(private val activity: FileActivity) { return } - DisplayUtils.showSnackMessage(activity, R.string.local_file_not_found_message) + SnackbarUtil.show(activity, R.string.local_file_not_found_message) } fun onUploadedItemClick(upload: OCUpload) { val file = activity.storageManager.getFileByEncryptedRemotePath(upload.remotePath) if (file == null) { - DisplayUtils.showSnackMessage(activity, R.string.error_retrieving_file) + SnackbarUtil.show(activity, R.string.error_retrieving_file) Log_OC.i(TAG, "Could not find uploaded file on remote.") return } @@ -82,7 +82,7 @@ class UploadListAdapterHelper(private val activity: FileActivity) { fun openFileWithDefault(localPath: String) { val uri = contentUriFor(localPath) if (uri == null) { - DisplayUtils.showSnackMessage(activity, R.string.error_retrieving_file) + SnackbarUtil.show(activity, R.string.error_retrieving_file) return } @@ -96,7 +96,7 @@ class UploadListAdapterHelper(private val activity: FileActivity) { } activity.startActivity(intent) } catch (e: ActivityNotFoundException) { - DisplayUtils.showSnackMessage(activity, R.string.file_list_no_app_for_file_type) + SnackbarUtil.show(activity, R.string.file_list_no_app_for_file_type) Log_OC.i(TAG, "Could not find app for opening the local file: $e") } } diff --git a/app/src/main/java/com/owncloud/android/ui/asynctasks/PrintAsyncTask.java b/app/src/main/java/com/owncloud/android/ui/asynctasks/PrintAsyncTask.java index 4e3a5e6db5d2..831b74c7e02b 100644 --- a/app/src/main/java/com/owncloud/android/ui/asynctasks/PrintAsyncTask.java +++ b/app/src/main/java/com/owncloud/android/ui/asynctasks/PrintAsyncTask.java @@ -12,11 +12,11 @@ import android.print.PrintDocumentAdapter; import android.print.PrintManager; +import com.nextcloud.utils.SnackbarUtil; import com.owncloud.android.R; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.ui.activity.RichDocumentsEditorWebView; import com.owncloud.android.ui.adapter.PrintAdapter; -import com.owncloud.android.utils.DisplayUtils; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; @@ -129,7 +129,7 @@ protected void onPostExecute(Boolean result) { PrintManager printManager = (PrintManager) richDocumentsWebView.getSystemService(PRINT_SERVICE); if (!result || printManager == null) { - DisplayUtils.showSnackMessage(richDocumentsWebView, + SnackbarUtil.show(richDocumentsWebView, richDocumentsWebView.getString(R.string.failed_to_print)); return; diff --git a/app/src/main/java/com/owncloud/android/ui/asynctasks/RetrieveHoverCardAsyncTask.kt b/app/src/main/java/com/owncloud/android/ui/asynctasks/RetrieveHoverCardAsyncTask.kt index 7a14f0da52b2..5988e80bf96e 100644 --- a/app/src/main/java/com/owncloud/android/ui/asynctasks/RetrieveHoverCardAsyncTask.kt +++ b/app/src/main/java/com/owncloud/android/ui/asynctasks/RetrieveHoverCardAsyncTask.kt @@ -11,10 +11,10 @@ import androidx.lifecycle.lifecycleScope import com.nextcloud.android.lib.resources.profile.GetHoverCardRemoteOperation import com.nextcloud.client.account.User import com.nextcloud.client.network.ClientFactory +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.ui.fragment.ProfileBottomSheetDialog -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.theme.ViewThemeUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -51,7 +51,7 @@ class RetrieveHoverCardAsyncTask( withContext(Dispatchers.Main) { if (result?.actions.isNullOrEmpty()) { - DisplayUtils.showSnackMessage(activity, R.string.no_actions) + SnackbarUtil.show(activity, R.string.no_actions) return@withContext } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.kt b/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.kt index 1afec56af969..3012216ac1a3 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.kt @@ -24,6 +24,7 @@ import com.nextcloud.client.account.CurrentAccountProvider import com.nextcloud.client.account.User import com.nextcloud.client.di.Injectable import com.nextcloud.client.network.ClientFactory +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.getTypedActivity import com.nextcloud.utils.fileNameValidator.FileNameValidator @@ -43,7 +44,6 @@ import com.owncloud.android.ui.activity.ExternalSiteWebView import com.owncloud.android.ui.activity.RichDocumentsEditorWebView import com.owncloud.android.ui.adapter.RichDocumentsTemplateAdapter import com.owncloud.android.ui.dialog.IndeterminateProgressDialog.Companion.newInstance -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.FileStorageUtils import com.owncloud.android.utils.KeyboardUtils import com.owncloud.android.utils.NextcloudServer @@ -237,15 +237,15 @@ class ChooseRichDocumentsTemplateDialogFragment : override fun onClick(v: View) { val selectedTemplate = adapter?.selectedTemplate - ?: return DisplayUtils.showSnackMessage(binding.list, R.string.select_one_template) + ?: return SnackbarUtil.show(binding.list, R.string.select_one_template) val state = resolveFilenameState() when (state) { is FilenameState.Invalid -> - DisplayUtils.showSnackMessage(requireActivity(), state.errorMessage) + SnackbarUtil.show(requireActivity(), state.errorMessage) is FilenameState.JustExtension -> - DisplayUtils.showSnackMessage(binding.list, R.string.enter_filename) + SnackbarUtil.show(binding.list, R.string.enter_filename) is FilenameState.Valid -> { val name = fileNameText @@ -387,7 +387,7 @@ class ChooseRichDocumentsTemplateDialogFragment : if (!isAdded) return@withContext waitDialog?.dismiss() dismiss() - DisplayUtils.showSnackMessage(requireActivity(), stringRes) + SnackbarUtil.show(requireActivity(), stringRes) } @Suppress("DEPRECATION") @@ -411,7 +411,7 @@ class ChooseRichDocumentsTemplateDialogFragment : withContext(Dispatchers.Main) { if (templateList.isEmpty()) { dismiss() - DisplayUtils.showSnackMessage(requireActivity(), R.string.error_retrieving_templates) + SnackbarUtil.show(requireActivity(), R.string.error_retrieving_templates) return@withContext } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/ChooseTemplateDialogFragment.kt b/app/src/main/java/com/owncloud/android/ui/dialog/ChooseTemplateDialogFragment.kt index 44c8bab6819b..38cdee8b379d 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/ChooseTemplateDialogFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/ChooseTemplateDialogFragment.kt @@ -31,6 +31,7 @@ import com.nextcloud.client.account.User import com.nextcloud.client.di.Injectable import com.nextcloud.client.network.ClientFactory import com.nextcloud.client.network.ClientFactory.CreationException +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.fileNameValidator.FileNameValidator import com.owncloud.android.MainApp @@ -48,7 +49,6 @@ import com.owncloud.android.lib.resources.status.OCCapability import com.owncloud.android.ui.activity.ExternalSiteWebView import com.owncloud.android.ui.activity.TextEditorWebView import com.owncloud.android.ui.adapter.TemplateAdapter -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.FileStorageUtils import com.owncloud.android.utils.KeyboardUtils import com.owncloud.android.utils.theme.ViewThemeUtils @@ -227,11 +227,11 @@ class ChooseTemplateDialogFragment : override fun onClick(v: View) { val selectedTemplate = adapter?.selectedTemplate - ?: return DisplayUtils.showSnackMessage(binding.list, R.string.select_one_template) + ?: return SnackbarUtil.show(binding.list, R.string.select_one_template) val state = resolveFilenameState() if (state !is TemplateFilenameState.Valid) { - state.errorMessage?.let { DisplayUtils.showSnackMessage(requireActivity(), it.toString()) } + state.errorMessage?.let { SnackbarUtil.show(requireActivity(), it.toString()) } return } @@ -340,7 +340,7 @@ class ChooseTemplateDialogFragment : } if (url.isEmpty()) { - DisplayUtils.showSnackMessage(fragment.binding.list, R.string.error_creating_file_from_template) + SnackbarUtil.show(fragment.binding.list, R.string.error_creating_file_from_template) return } @@ -397,7 +397,7 @@ class ChooseTemplateDialogFragment : if (templateList.templates.isEmpty()) { fragment.dismiss() - DisplayUtils.showSnackMessage(fragment.requireActivity(), R.string.error_retrieving_templates) + SnackbarUtil.show(fragment.requireActivity(), R.string.error_retrieving_templates) return } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/CreateAlbumDialogFragment.kt b/app/src/main/java/com/owncloud/android/ui/dialog/CreateAlbumDialogFragment.kt index 0e006daea4ef..4084f996f1f7 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/CreateAlbumDialogFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/CreateAlbumDialogFragment.kt @@ -23,12 +23,12 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.nextcloud.client.account.CurrentAccountProvider import com.nextcloud.client.di.Injectable import com.nextcloud.client.network.ConnectivityService +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.typedActivity import com.owncloud.android.R import com.owncloud.android.databinding.CreateAlbumDialogBinding import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.ui.activity.ComponentsGetter -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.KeyboardUtils import com.owncloud.android.utils.theme.ViewThemeUtils import javax.inject.Inject @@ -159,7 +159,7 @@ class CreateAlbumDialogFragment : } if (errorMessage != null) { - DisplayUtils.showSnackMessage(requireActivity(), errorMessage) + SnackbarUtil.show(requireActivity(), errorMessage) return } @@ -176,7 +176,7 @@ class CreateAlbumDialogFragment : return@isNetworkAndServerAvailable } - DisplayUtils.showSnackMessage(requireActivity(), getString(R.string.offline_mode)) + SnackbarUtil.show(requireActivity(), getString(R.string.offline_mode)) } } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.kt b/app/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.kt index 7188ef4ac677..f2ad73fb513b 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.kt @@ -26,6 +26,7 @@ import com.google.common.collect.Sets import com.nextcloud.client.account.CurrentAccountProvider import com.nextcloud.client.di.Injectable import com.nextcloud.client.network.ConnectivityService +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.autoRename.AutoRename import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.typedActivity @@ -38,7 +39,6 @@ import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.lib.resources.status.OCCapability import com.owncloud.android.ui.activity.ComponentsGetter import com.owncloud.android.ui.activity.FileDisplayActivity -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.KeyboardUtils import com.owncloud.android.utils.theme.ViewThemeUtils import kotlinx.coroutines.Dispatchers @@ -187,7 +187,7 @@ class CreateFolderDialogFragment : FileNameValidator.checkFileName(newFolderName, capabilities, requireContext()) if (errorMessage != null) { - DisplayUtils.showSnackMessage(requireActivity(), errorMessage) + SnackbarUtil.show(requireActivity(), errorMessage) return } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.kt b/app/src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.kt index fee629bf78dc..781b86cb3d9a 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.kt @@ -21,6 +21,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.common.collect.Sets import com.nextcloud.client.account.CurrentAccountProvider import com.nextcloud.client.di.Injectable +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.typedActivity import com.nextcloud.utils.fileNameValidator.FileNameTextWatcher @@ -33,7 +34,6 @@ import com.owncloud.android.lib.resources.status.OCCapability import com.owncloud.android.ui.activity.ComponentsGetter import com.owncloud.android.ui.activity.FileDisplayActivity import com.owncloud.android.ui.dialog.extensions.themeButtons -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.KeyboardUtils import com.owncloud.android.utils.theme.ViewThemeUtils import javax.inject.Inject @@ -147,7 +147,7 @@ class RenameFileDialogFragment : val errorMessage = checkFileName(newFileName, oCCapability, requireContext()) if (errorMessage != null) { - DisplayUtils.showSnackMessage(requireActivity(), errorMessage) + SnackbarUtil.show(requireActivity(), errorMessage) return } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/SendFilesDialog.kt b/app/src/main/java/com/owncloud/android/ui/dialog/SendFilesDialog.kt index 8dcfad3d5f9a..29e31311b0df 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/SendFilesDialog.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/SendFilesDialog.kt @@ -21,12 +21,12 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.client.di.Injectable import com.nextcloud.client.utils.IntentUtil.createSendIntent +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.databinding.SendFilesFragmentBinding import com.owncloud.android.datamodel.OCFile import com.owncloud.android.ui.adapter.sendButton.SendButtonAdapter import com.owncloud.android.ui.adapter.sendButton.SendButtonData -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.theme.ViewThemeUtils import javax.inject.Inject @@ -73,7 +73,7 @@ class SendFilesDialog : if (matches.isEmpty()) { activity?.let { - DisplayUtils.showSnackMessage(it, R.string.no_send_app) + SnackbarUtil.show(it, R.string.no_send_app) } dismiss() return diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.kt b/app/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.kt index 9eb12a7a0d2b..5658cc3f3c89 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.kt @@ -20,13 +20,13 @@ import androidx.fragment.app.DialogFragment import com.google.android.material.button.MaterialButton import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.nextcloud.client.di.Injectable +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.owncloud.android.R import com.owncloud.android.databinding.PasswordDialogBinding import com.owncloud.android.datamodel.OCFile import com.owncloud.android.lib.resources.shares.OCShare import com.owncloud.android.ui.activity.FileActivity -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.KeyboardUtils import com.owncloud.android.utils.theme.ViewThemeUtils import javax.inject.Inject @@ -69,7 +69,7 @@ class SharePasswordDialogFragment : if (sharePassword != null) { val password = sharePassword.toString() if (!askForPassword && password.isBlank()) { - DisplayUtils.showSnackMessage(binding?.root, R.string.share_link_empty_password) + SnackbarUtil.show(binding?.root, R.string.share_link_empty_password) return@setOnClickListener } if (share == null) { diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/TermsOfServiceDialog.kt b/app/src/main/java/com/owncloud/android/ui/dialog/TermsOfServiceDialog.kt index 44f6a9e07cf9..1e7ece209f95 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/TermsOfServiceDialog.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/TermsOfServiceDialog.kt @@ -23,12 +23,12 @@ import com.nextcloud.client.account.UserAccountManager import com.nextcloud.client.di.Injectable import com.nextcloud.client.network.ClientFactory import com.nextcloud.common.NextcloudClient +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.setHtmlContent import com.owncloud.android.R import com.owncloud.android.databinding.DialogShowTosBinding import com.owncloud.android.lib.common.operations.RemoteOperationResult import com.owncloud.android.lib.common.utils.Log_OC -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.theme.ViewThemeUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -141,7 +141,7 @@ class TermsOfServiceDialog : if (!signResult.isSuccess) { withContext(Dispatchers.Main) { - DisplayUtils.showSnackMessage(view, R.string.sign_tos_failed) + SnackbarUtil.show(view, R.string.sign_tos_failed) } } } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictsResolveDialog.kt b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictsResolveDialog.kt index 84f5c4d1b848..d1af116438dd 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictsResolveDialog.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/conflict/ConflictsResolveDialog.kt @@ -18,6 +18,7 @@ import com.google.android.material.button.MaterialButton import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.nextcloud.client.account.User import com.nextcloud.client.di.Injectable +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.getSerializableArgument import com.nextcloud.utils.thumbnail.ThumbnailGenerator @@ -28,7 +29,6 @@ import com.owncloud.android.datamodel.OCFile import com.owncloud.android.datamodel.SyncedFolderProvider import com.owncloud.android.ui.adapter.localFileList.LocalFileThumbnailBinder import com.owncloud.android.ui.dialog.conflict.model.ConflictDialogType -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.MimeTypeUtil import com.owncloud.android.utils.theme.ViewThemeUtils import java.io.File @@ -89,7 +89,7 @@ class ConflictsResolveDialog : if (alertDialog == null) { activity?.let { - DisplayUtils.showSnackMessage(it, R.string.failed_to_create_conflict_dialog) + SnackbarUtil.show(it, R.string.failed_to_create_conflict_dialog) } return } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/setupEncryption/SetupEncryptionDialogFragment.kt b/app/src/main/java/com/owncloud/android/ui/dialog/setupEncryption/SetupEncryptionDialogFragment.kt index ec6ec83a13a4..36c72feeae1b 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/setupEncryption/SetupEncryptionDialogFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/setupEncryption/SetupEncryptionDialogFragment.kt @@ -21,6 +21,7 @@ import com.google.android.material.textfield.TextInputLayout import com.nextcloud.client.account.User import com.nextcloud.client.di.Injectable import com.nextcloud.client.network.ClientFactory +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.e2ee.model.E2EEAction import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.getSerializableArgument @@ -41,7 +42,6 @@ import com.owncloud.android.lib.resources.users.StorePrivateKeyRemoteOperation import com.owncloud.android.ui.dialog.extensions.themeButtons import com.owncloud.android.ui.dialog.setupEncryption.model.DownloadKeyResult import com.owncloud.android.utils.ClipboardUtil -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.EncryptionUtils import com.owncloud.android.utils.crypto.CryptoHelper import com.owncloud.android.utils.theme.ViewThemeUtils @@ -329,7 +329,7 @@ class SetupEncryptionDialogFragment : val descriptionId = result.descriptionId ?: return val description = getString(descriptionId) dismiss() - DisplayUtils.showSnackMessage(requireActivity(), description) + SnackbarUtil.show(requireActivity(), description) } } } diff --git a/app/src/main/java/com/owncloud/android/ui/events/EncryptionEvent.kt b/app/src/main/java/com/owncloud/android/ui/events/EncryptionEvent.kt index a5763af837d8..98474ec56c20 100644 --- a/app/src/main/java/com/owncloud/android/ui/events/EncryptionEvent.kt +++ b/app/src/main/java/com/owncloud/android/ui/events/EncryptionEvent.kt @@ -7,11 +7,11 @@ package com.owncloud.android.ui.events import androidx.lifecycle.lifecycleScope +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.e2ee.model.E2EEAction import com.nextcloud.utils.e2ee.model.E2EEKeyCheck import com.nextcloud.utils.extensions.showEncryptionDialog import com.owncloud.android.ui.fragment.OCFileListFragment -import com.owncloud.android.utils.DisplayUtils import kotlinx.coroutines.launch /** @@ -22,7 +22,7 @@ class EncryptionEvent(val localId: Long, val remoteId: String, val remotePath: S fragment.lifecycleScope.launch { when (val state = fragment.e2eeActionResolver.checkKeys()) { E2EEKeyCheck.NO_NETWORK, E2EEKeyCheck.E2EE_UNAVAILABLE, E2EEKeyCheck.CHECK_FAILED -> { - state.getMessageId(E2EEAction.ENCRYPT)?.let { DisplayUtils.showSnackMessage(fragment, it) } + state.getMessageId(E2EEAction.ENCRYPT)?.let { SnackbarUtil.show(fragment, it) } } E2EEKeyCheck.ONLY_ON_SERVER, E2EEKeyCheck.MISSING_EVERYWHERE -> { diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/ActivitiesFragment.kt b/app/src/main/java/com/owncloud/android/ui/fragment/ActivitiesFragment.kt index 53fed3aad51f..1f964438a79c 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/ActivitiesFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/ActivitiesFragment.kt @@ -19,6 +19,7 @@ import androidx.recyclerview.widget.RecyclerView import com.nextcloud.client.account.UserAccountManager import com.nextcloud.client.network.ConnectivityService import com.nextcloud.common.NextcloudClient +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.databinding.FragmentActivitiesBinding import com.owncloud.android.datamodel.OCFile @@ -35,7 +36,6 @@ import com.owncloud.android.ui.interfaces.ActivityListInterface import com.owncloud.android.ui.navigation.NavigatorActivity import com.owncloud.android.ui.preview.PreviewImageActivity import com.owncloud.android.ui.preview.PreviewImageFragment.Companion.canBePreviewed -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.theme.ViewThemeUtils import javax.inject.Inject @@ -159,7 +159,7 @@ class ActivitiesFragment : connectivityService.isNetworkAndServerAvailable { if (it) { val view = view ?: return@isNetworkAndServerAvailable - DisplayUtils.showSnackMessage(view, error) + SnackbarUtil.show(view, error) } else { showEmptyContent( getString(R.string.server_not_reachable), @@ -186,12 +186,12 @@ class ActivitiesFragment : override fun showActivityDetailUIIsNull() { val view = view ?: return - DisplayUtils.showSnackMessage(view, R.string.file_not_found) + SnackbarUtil.show(view, R.string.file_not_found) } override fun showActivityDetailError(error: String) { val view = view ?: return - DisplayUtils.showSnackMessage(view, error) + SnackbarUtil.show(view, error) } override fun showLoadingMessage() { diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/EncryptedFolderClickHandler.kt b/app/src/main/java/com/owncloud/android/ui/fragment/EncryptedFolderClickHandler.kt index 3a69ec1b7866..905be036e284 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/EncryptedFolderClickHandler.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/EncryptedFolderClickHandler.kt @@ -9,6 +9,7 @@ package com.owncloud.android.ui.fragment import androidx.lifecycle.lifecycleScope import com.google.android.material.snackbar.Snackbar +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.e2ee.model.E2EEAction import com.nextcloud.utils.e2ee.model.E2EEKeyCheck import com.nextcloud.utils.extensions.showEncryptionDialog @@ -18,7 +19,6 @@ import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.ui.activity.FileActivity import com.owncloud.android.ui.activity.FolderPickerActivity import com.owncloud.android.ui.helpers.FileOperationsHelper -import com.owncloud.android.utils.DisplayUtils import kotlinx.coroutines.launch class EncryptedFolderClickHandler(private val fragment: OCFileListFragment) { @@ -33,7 +33,7 @@ class EncryptedFolderClickHandler(private val fragment: OCFileListFragment) { * Executed when user taps the 'New encrypted folder' action. */ fun onNewEncryptedFolder() { - checkingKeysSnackbar = DisplayUtils.createAndShowSnackMessage( + checkingKeysSnackbar = SnackbarUtil.showIndefinite( fragment, R.string.encryption_key_checking_keys ) @@ -43,7 +43,7 @@ class EncryptedFolderClickHandler(private val fragment: OCFileListFragment) { dismissCheckingSnackbar() when (state) { E2EEKeyCheck.NO_NETWORK, E2EEKeyCheck.CHECK_FAILED, E2EEKeyCheck.E2EE_UNAVAILABLE -> { - state.getMessageId(E2EEAction.NEW_FOLDER)?.let { DisplayUtils.showSnackMessage(fragment, it) } + state.getMessageId(E2EEAction.NEW_FOLDER)?.let { SnackbarUtil.show(fragment, it) } } E2EEKeyCheck.ONLY_ON_SERVER, E2EEKeyCheck.MISSING_EVERYWHERE -> { @@ -69,7 +69,7 @@ class EncryptedFolderClickHandler(private val fragment: OCFileListFragment) { return } - checkingKeysSnackbar = DisplayUtils.createAndShowSnackMessage( + checkingKeysSnackbar = SnackbarUtil.showIndefinite( fragment, R.string.encryption_key_checking_keys ) @@ -82,7 +82,7 @@ class EncryptedFolderClickHandler(private val fragment: OCFileListFragment) { when (state) { E2EEKeyCheck.NO_NETWORK, E2EEKeyCheck.CHECK_FAILED, E2EEKeyCheck.E2EE_UNAVAILABLE -> { - state.getMessageId(E2EEAction.OPEN)?.let { DisplayUtils.showSnackMessage(fragment, it) } + state.getMessageId(E2EEAction.OPEN)?.let { SnackbarUtil.show(fragment, it) } } E2EEKeyCheck.ONLY_ON_SERVER -> { @@ -91,7 +91,7 @@ class EncryptedFolderClickHandler(private val fragment: OCFileListFragment) { E2EEKeyCheck.MISSING_EVERYWHERE -> { e2eeActionResolver.markFolderReadOnly(file) - state.getMessageId(E2EEAction.OPEN)?.let { DisplayUtils.showSnackMessage(fragment, it) } + state.getMessageId(E2EEAction.OPEN)?.let { SnackbarUtil.show(fragment, it) } } E2EEKeyCheck.ONLY_ON_DEVICE, E2EEKeyCheck.DIFFERS_FROM_SERVER -> { @@ -103,7 +103,7 @@ class EncryptedFolderClickHandler(private val fragment: OCFileListFragment) { if (e2eeActionResolver.checkFolderMetadataKey(file)) { onFolderKeyVerified(file, position, fileActivity) } else { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( fragment, R.string.encryption_open_key_mismatch ) @@ -119,13 +119,13 @@ class EncryptedFolderClickHandler(private val fragment: OCFileListFragment) { if (fragment.e2eeActionResolver.checkFolderMetadataKey(file)) { onEncryptionSetupComplete(file, fragment.adapter.getItemPosition(file)) } else { - DisplayUtils.showSnackMessage(fragment, R.string.encryption_open_key_mismatch) + SnackbarUtil.show(fragment, R.string.encryption_open_key_mismatch) } } } private fun dismissCheckingSnackbar() { - DisplayUtils.dismissSnackMessage(checkingKeysSnackbar) + SnackbarUtil.dismiss(checkingKeysSnackbar) checkingKeysSnackbar = null } @@ -134,7 +134,7 @@ class EncryptedFolderClickHandler(private val fragment: OCFileListFragment) { val capability = fragment.containerActivity.getStorageManager().getCapability(user.accountName) if (capability.endToEndEncryption.isFalse || capability.endToEndEncryption.isUnknown) { - DisplayUtils.showSnackMessage(fragment, R.string.end_to_end_encryption_not_enabled) + SnackbarUtil.show(fragment, R.string.end_to_end_encryption_not_enabled) return } @@ -151,7 +151,7 @@ class EncryptedFolderClickHandler(private val fragment: OCFileListFragment) { val folderPickerActivity = fragment.containerActivity as? FolderPickerActivity if (folderPickerActivity?.isDoNotEnterEncryptedFolder == true) { - DisplayUtils.showSnackMessage(fragment, R.string.copy_move_to_encrypted_folder_not_supported) + SnackbarUtil.show(fragment, R.string.copy_move_to_encrypted_folder_not_supported) } else { fragment.browseToFolder(file, position) } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java index 8479058c0fe6..e5d3e9e686b0 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -36,6 +36,7 @@ import com.nextcloud.ui.fileactions.FileActionsBottomSheet; import com.nextcloud.ui.tags.TagManagementBottomSheet; import com.nextcloud.utils.MenuUtils; +import com.nextcloud.utils.SnackbarUtil; import com.nextcloud.utils.extensions.BundleExtensionsKt; import com.nextcloud.utils.extensions.FileExtensionsKt; import com.nextcloud.utils.mdm.MDMConfig; @@ -852,13 +853,13 @@ public void initiateSharingProcess(String shareeName, ShareType shareType, boolean secureShare) { if (getFile() == null) { - DisplayUtils.showSnackMessage(requireView(), R.string.file_not_found_cannot_share); + SnackbarUtil.show(requireView(), R.string.file_not_found_cannot_share); return; } final var file = getFile(); if (Objects.equals(file.getOwnerId(), shareeName)) { - DisplayUtils.showSnackMessage(requireView(), R.string.file_detail_share_already_active); + SnackbarUtil.show(requireView(), R.string.file_detail_share_already_active); return; } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.kt b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.kt index b1ef8f903866..ae339ce848c6 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.kt @@ -39,6 +39,7 @@ import com.nextcloud.client.account.UserAccountManager import com.nextcloud.client.di.Injectable import com.nextcloud.client.network.ClientFactory import com.nextcloud.client.utils.IntentUtil +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.mergeDistinctByToken import com.nextcloud.utils.extensions.setVisibleIf @@ -285,7 +286,7 @@ class FileDetailSharingFragment : } hideShimmerAndShowShareContainer() - DisplayUtils.showSnackMessage(this@FileDetailSharingFragment, R.string.error_fetching_sharees) + SnackbarUtil.show(this@FileDetailSharingFragment, R.string.error_fetching_sharees) } } @@ -592,7 +593,7 @@ class FileDetailSharingFragment : return } - DisplayUtils.showSnackMessage(this, R.string.file_detail_sharing_fragment_no_contact_app_message) + SnackbarUtil.show(this, R.string.file_detail_sharing_fragment_no_contact_app_message) } private fun handleContactResult(contactUri: Uri) { @@ -601,7 +602,7 @@ class FileDetailSharingFragment : val cursor = fileActivity?.contentResolver?.query(contactUri, projection, null, null, null) if (cursor == null) { - DisplayUtils.showSnackMessage(this, R.string.email_pick_failed) + SnackbarUtil.show(this, R.string.email_pick_failed) Log_OC.e( TAG, "Failed to pick email address as Cursor is null." @@ -610,7 +611,7 @@ class FileDetailSharingFragment : } if (!cursor.moveToFirst()) { - DisplayUtils.showSnackMessage(this, R.string.email_pick_failed) + SnackbarUtil.show(this, R.string.email_pick_failed) Log_OC.e( TAG, "Failed to pick email address as no Email found." @@ -621,7 +622,7 @@ class FileDetailSharingFragment : // The contact has only one email address, use it. val columnIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS) if (columnIndex == -1) { - DisplayUtils.showSnackMessage(this, R.string.email_pick_failed) + SnackbarUtil.show(this, R.string.email_pick_failed) Log_OC.e(TAG, "Failed to pick email address.") cursor.close() return @@ -712,7 +713,7 @@ class FileDetailSharingFragment : fileDataStorageManager?.updateFileEntity(entity) } } else { - DisplayUtils.showSnackMessage(this, R.string.failed_update_ui) + SnackbarUtil.show(this, R.string.failed_update_ui) } } @@ -732,7 +733,7 @@ class FileDetailSharingFragment : val user = user if (user == null) { - DisplayUtils.showSnackMessage(this, R.string.could_not_retrieve_url) + SnackbarUtil.show(this, R.string.could_not_retrieve_url) return } @@ -876,7 +877,7 @@ class FileDetailSharingFragment : file = file?.fileId?.let { fileDataStorageManager?.getFileById(it) } ?: file internalShareeListAdapter?.removeAll() ?: run { - DisplayUtils.showSnackMessage(this, R.string.could_not_retrieve_shares) + SnackbarUtil.show(this, R.string.could_not_retrieve_shares) return } @@ -902,7 +903,7 @@ class FileDetailSharingFragment : if (isGranted) { pickContactEmail() } else { - DisplayUtils.showSnackMessage(this, R.string.contact_no_permission) + SnackbarUtil.show(this, R.string.contact_no_permission) } } @@ -912,13 +913,13 @@ class FileDetailSharingFragment : if (result.resultCode == Activity.RESULT_OK) { val intent = result.data if (intent == null) { - DisplayUtils.showSnackMessage(this, R.string.email_pick_failed) + SnackbarUtil.show(this, R.string.email_pick_failed) return@registerForActivityResult } val contactUri = intent.data if (contactUri == null) { - DisplayUtils.showSnackMessage(this, R.string.email_pick_failed) + SnackbarUtil.show(this, R.string.email_pick_failed) return@registerForActivityResult } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailsSharingProcessFragment.kt b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailsSharingProcessFragment.kt index 067cba933bd9..0a57cbd62a4e 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailsSharingProcessFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailsSharingProcessFragment.kt @@ -17,6 +17,7 @@ import android.view.ViewGroup import androidx.core.view.isVisible import androidx.fragment.app.Fragment import com.nextcloud.client.di.Injectable +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.getSerializableArgument import com.nextcloud.utils.extensions.isPublicOrMail @@ -39,7 +40,6 @@ import com.owncloud.android.ui.dialog.ExpirationDatePickerDialogFragment import com.owncloud.android.ui.fragment.util.SharePermissionManager import com.owncloud.android.ui.helpers.FileOperationsHelper import com.owncloud.android.utils.ClipboardUtil -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.theme.CapabilityUtils import com.owncloud.android.utils.theme.ViewThemeUtils import java.text.SimpleDateFormat @@ -756,7 +756,7 @@ class FileDetailsSharingProcessFragment : @Suppress("ReturnCount") private fun validateShareProcessFirst() { if (permission == OCShare.NO_PERMISSION) { - DisplayUtils.showSnackMessage(this, R.string.no_share_permission_selected) + SnackbarUtil.show(this, R.string.no_share_permission_selected) return } @@ -766,7 +766,7 @@ class FileDetailsSharingProcessFragment : val needsPasswordEntry = (!hasExistingPassword || passwordModified) if (needsPasswordEntry && enteredPassword.isBlank()) { - DisplayUtils.showSnackMessage(this, R.string.share_link_empty_password) + SnackbarUtil.show(this, R.string.share_link_empty_password) return } } @@ -781,7 +781,7 @@ class FileDetailsSharingProcessFragment : if (binding.shareProcessChangeNameSwitch.isChecked && binding.shareProcessChangeName.text?.isBlank() == true ) { - DisplayUtils.showSnackMessage(this, R.string.label_empty) + SnackbarUtil.show(this, R.string.label_empty) return } @@ -798,13 +798,13 @@ class FileDetailsSharingProcessFragment : @Suppress("ReturnCount") private fun createShareOrUpdateNoteShare() { if (!isAnySharePermissionChecked()) { - DisplayUtils.showSnackMessage(this, R.string.share_option_required) + SnackbarUtil.show(this, R.string.share_option_required) return } val noteText = binding.noteText.text.toString().trim() if (file == null && (share != null && share?.note == noteText)) { - DisplayUtils.showSnackMessage(this, R.string.share_cannot_update_empty_note) + SnackbarUtil.show(this, R.string.share_cannot_update_empty_note) return } @@ -815,7 +815,7 @@ class FileDetailsSharingProcessFragment : } file == null -> { - DisplayUtils.showSnackMessage(this, R.string.file_not_found_cannot_share) + SnackbarUtil.show(this, R.string.file_not_found_cannot_share) return } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FolderEncryption.kt b/app/src/main/java/com/owncloud/android/ui/fragment/FolderEncryption.kt index fc461f90e7dd..cef91faee6df 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/FolderEncryption.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/FolderEncryption.kt @@ -8,6 +8,7 @@ package com.owncloud.android.ui.fragment import com.nextcloud.client.account.User +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.e2ee.E2EVersionHelper import com.owncloud.android.R import com.owncloud.android.datamodel.FileDataStorageManager @@ -17,7 +18,6 @@ import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.lib.resources.e2ee.ToggleEncryptionRemoteOperation import com.owncloud.android.lib.resources.status.E2EVersion import com.owncloud.android.ui.events.EncryptionEvent -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.EncryptionUtils import com.owncloud.android.utils.EncryptionUtilsV2 import kotlinx.coroutines.Dispatchers @@ -157,6 +157,6 @@ class FolderEncryption(private val fragment: OCFileListFragment) { } private suspend fun showSnackbar(messageResId: Int) = withContext(Dispatchers.Main) { - DisplayUtils.showSnackMessage(fragment, messageResId) + SnackbarUtil.show(fragment, messageResId) } } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index 61d8df3fff7a..4b424fd75192 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -55,6 +55,7 @@ import com.nextcloud.ui.fileactions.FileActionsBottomSheet; import com.nextcloud.utils.EditorUtils; import com.nextcloud.utils.ShortcutUtil; +import com.nextcloud.utils.SnackbarUtil; import com.nextcloud.utils.e2ee.E2EEActionResolver; import com.nextcloud.utils.e2ee.E2EEDialogPresenter; import com.nextcloud.utils.extensions.BundleExtensionsKt; @@ -607,7 +608,7 @@ public void directCameraUpload() { FileDisplayActivity fileDisplayActivity = (FileDisplayActivity) getActivity(); if (fileDisplayActivity == null) { - DisplayUtils.showSnackMessage(getView(), getString(R.string.error_starting_direct_camera_upload)); + SnackbarUtil.show(getView(), getString(R.string.error_starting_direct_camera_upload)); return; } @@ -645,7 +646,7 @@ public void scanDocUpload() { } else { Log.w(TAG, "scanDocUpload: Failed to start doc scanning, fileDisplayActivity=" + fileDisplayActivity + ", currentFile=" + currentFile); - DisplayUtils.showSnackMessage(this, R.string.error_starting_doc_scan); + SnackbarUtil.show(this, R.string.error_starting_doc_scan); } } @@ -698,7 +699,7 @@ public void createRichWorkspace() { mContainerActivity.getFileOperationsHelper().openRichWorkspaceWithTextEditor(mFile, url, requireContext()); return Unit.INSTANCE; }, () -> { - DisplayUtils.showSnackMessage(getView(), R.string.failed_to_start_editor); + SnackbarUtil.show(getView(), R.string.failed_to_start_editor); return Unit.INSTANCE; }); } @@ -1159,7 +1160,7 @@ private void folderOnItemClick(OCFile file, int position) { getCapabilities(), requireContext()); if (filenameErrorMessage != null) { - DisplayUtils.showSnackMessage(fpa, filenameErrorMessage); + SnackbarUtil.show(fpa, filenameErrorMessage); return; } } @@ -1411,13 +1412,13 @@ public boolean onFileActionChosen(@IdRes final int itemId, Set checkedFi String invalidFilename = checkInvalidFilenames(checkedFiles); if (invalidFilename != null) { - DisplayUtils.showSnackMessage(requireActivity(), getString(R.string.file_name_validator_rename_before_move_or_copy, invalidFilename)); + SnackbarUtil.show(requireActivity(), getString(R.string.file_name_validator_rename_before_move_or_copy, invalidFilename)); return false; } if (!FileNameValidator.INSTANCE.checkParentRemotePaths(new ArrayList<>(checkedFiles), getCapabilities(), requireContext())) { browseToRoot(); - DisplayUtils.showSnackMessage(requireActivity(), R.string.file_name_validator_current_path_is_invalid); + SnackbarUtil.show(requireActivity(), R.string.file_name_validator_current_path_is_invalid); return false; } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListSearchTask.kt b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListSearchTask.kt index 04a37b8fd439..8afb099edd8e 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListSearchTask.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListSearchTask.kt @@ -15,6 +15,7 @@ import android.content.ContentValues import androidx.lifecycle.lifecycleScope import com.nextcloud.client.account.User import com.nextcloud.client.preferences.AppPreferences +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.share.UnifiedShareSharees import com.owncloud.android.R import com.owncloud.android.datamodel.FileDataStorageManager @@ -32,7 +33,6 @@ import com.owncloud.android.lib.resources.files.model.RemoteFile import com.owncloud.android.operations.RefreshFolderOperation import com.owncloud.android.ui.adapter.OCShareToOCFileConverter import com.owncloud.android.ui.events.SearchEvent -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.FileSortOrder import com.owncloud.android.utils.FileStorageUtils import com.owncloud.android.utils.MimeTypeUtil @@ -103,7 +103,7 @@ class OCFileListSearchTask( private suspend fun showSnackbarError(fragment: OCFileListFragment) { withContext(Dispatchers.Main) { fragment.activity?.let { - DisplayUtils.showSnackMessage(it, R.string.error_fetching_sharees) + SnackbarUtil.show(it, R.string.error_fetching_sharees) } } } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/SharedListFragment.kt b/app/src/main/java/com/owncloud/android/ui/fragment/SharedListFragment.kt index ceeb1c4082fb..d7659229dc8c 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/SharedListFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/SharedListFragment.kt @@ -15,6 +15,7 @@ import com.nextcloud.client.account.User import com.nextcloud.client.di.Injectable import com.nextcloud.client.logger.Logger import com.nextcloud.common.SessionTimeOut +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.nextcloud.utils.share.UnifiedShareSharees import com.owncloud.android.datamodel.OCFile @@ -25,7 +26,6 @@ import com.owncloud.android.lib.resources.files.model.RemoteFile import com.owncloud.android.lib.resources.shares.GetSharesRemoteOperation import com.owncloud.android.ui.activity.FileDisplayActivity import com.owncloud.android.ui.events.SearchEvent -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.FileStorageUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -108,7 +108,7 @@ class SharedListFragment : if (file != null) { block(file) } else { - DisplayUtils.showSnackMessage(requireActivity(), R.string.error_retrieving_file) + SnackbarUtil.show(requireActivity(), R.string.error_retrieving_file) } } } @@ -120,7 +120,7 @@ class SharedListFragment : val files = partialFiles.toMutableSet().mapNotNull { partialFile -> fetchFileData(partialFile).also { fetched -> if (fetched == null) { - DisplayUtils.showSnackMessage(requireActivity(), R.string.error_retrieving_file) + SnackbarUtil.show(requireActivity(), R.string.error_retrieving_file) } } } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/UnifiedSearchFragment.kt b/app/src/main/java/com/owncloud/android/ui/fragment/UnifiedSearchFragment.kt index a0472e9fbe31..d0ce0a55068d 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/UnifiedSearchFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/UnifiedSearchFragment.kt @@ -37,6 +37,7 @@ import com.nextcloud.client.di.ViewModelFactory import com.nextcloud.client.network.ClientFactory import com.nextcloud.client.preferences.AppPreferences import com.nextcloud.common.NextcloudClient +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getTypedActivity import com.nextcloud.utils.extensions.searchFilesByName import com.nextcloud.utils.extensions.setVisibleIf @@ -61,7 +62,6 @@ import com.owncloud.android.ui.unifiedsearch.ProviderID import com.owncloud.android.ui.unifiedsearch.UnifiedSearchSection import com.owncloud.android.ui.unifiedsearch.UnifiedSearchViewModel import com.owncloud.android.ui.unifiedsearch.filterOutHiddenFiles -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.PermissionUtil import com.owncloud.android.utils.theme.ViewThemeUtils import kotlinx.coroutines.Dispatchers @@ -212,7 +212,7 @@ class UnifiedSearchFragment : registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions -> val granted = permissions.entries.all { it.value } if (!granted) { - DisplayUtils.showSnackMessage(binding.root, R.string.unified_search_fragment_permission_needed) + SnackbarUtil.show(binding.root, R.string.unified_search_fragment_permission_needed) } } @@ -351,7 +351,7 @@ class UnifiedSearchFragment : vm.error.observe(viewLifecycleOwner) { error -> if (!error.isNullOrEmpty()) { - DisplayUtils.showSnackMessage(binding.root, error) + SnackbarUtil.show(binding.root, error) } } vm.browserUri.observe(viewLifecycleOwner) { uri -> @@ -369,7 +369,7 @@ class UnifiedSearchFragment : delay(SEARCH_TIMEOUT_MS.milliseconds) val currentBinding = _binding ?: return@launch currentBinding.swipeContainingList.isRefreshing = false - DisplayUtils.showSnackMessage( + SnackbarUtil.show( currentBinding.root, R.string.unified_search_fragment_search_takes_long ) diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/albums/AlbumItemsFragment.kt b/app/src/main/java/com/owncloud/android/ui/fragment/albums/AlbumItemsFragment.kt index 4c4d1cbd8e8f..f779a7d78e36 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/albums/AlbumItemsFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/albums/AlbumItemsFragment.kt @@ -49,6 +49,7 @@ import com.nextcloud.client.utils.IntentUtil import com.nextcloud.client.utils.Throttler import com.nextcloud.ui.albumItemActions.AlbumItemActionsBottomSheet import com.nextcloud.ui.fileactions.FileActionsBottomSheet +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getTypedActivity import com.nextcloud.utils.extensions.isDialogFragmentReady import com.nextcloud.utils.extensions.isLandscape @@ -89,7 +90,6 @@ import com.owncloud.android.ui.helpers.UriUploader import com.owncloud.android.ui.interfaces.OCFileListFragmentInterface import com.owncloud.android.ui.preview.PreviewImageFragment import com.owncloud.android.utils.ClipboardUtil -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.ErrorMessageAdapter import com.owncloud.android.utils.MimeTypeUtil import com.owncloud.android.utils.theme.ViewThemeUtils @@ -738,7 +738,7 @@ class AlbumItemsFragment : withContext(Dispatchers.Main) { if (failedFiles.isNotEmpty() && files.size > SINGLE_SELECTION) { - DisplayUtils.showSnackMessage(requireActivity(), getString(R.string.album_delete_failed_message)) + SnackbarUtil.show(requireActivity(), getString(R.string.album_delete_failed_message)) } dismissLoadingDialog() @@ -762,7 +762,7 @@ class AlbumItemsFragment : if (files.size == SINGLE_SELECTION) { val message = ErrorMessageAdapter.getErrorCauseMessage(result, operation, resources) - withContext(Dispatchers.Main) { DisplayUtils.showSnackMessage(requireActivity(), message) } + withContext(Dispatchers.Main) { SnackbarUtil.show(requireActivity(), message) } } } @@ -815,7 +815,7 @@ class AlbumItemsFragment : val mediaUris = contentIntent.mediaUris() if (mediaUris.isEmpty()) { - DisplayUtils.showSnackMessage(requireActivity(), R.string.album_unsupported_file) + SnackbarUtil.show(requireActivity(), R.string.album_unsupported_file) return } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/albums/AlbumOperationListener.kt b/app/src/main/java/com/owncloud/android/ui/fragment/albums/AlbumOperationListener.kt index 7d92272b5c76..14a5d6626970 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/albums/AlbumOperationListener.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/albums/AlbumOperationListener.kt @@ -8,6 +8,7 @@ package com.owncloud.android.ui.fragment.albums import android.content.res.Resources +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.lib.common.operations.RemoteOperation import com.owncloud.android.lib.common.operations.RemoteOperationResult @@ -18,7 +19,6 @@ import com.owncloud.android.lib.resources.albums.RemoveAlbumRemoteOperation import com.owncloud.android.lib.resources.albums.RenameAlbumRemoteOperation import com.owncloud.android.operations.albums.CopyFileToAlbumOperation import com.owncloud.android.ui.activity.FileDisplayActivity -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.ErrorMessageAdapter class AlbumOperationListener(private val activity: FileDisplayActivity) { @@ -47,7 +47,7 @@ class AlbumOperationListener(private val activity: FileDisplayActivity) { fragment.refreshData() } else { // files added directly from Media tab - DisplayUtils.showSnackMessage( + SnackbarUtil.show( activity, activity.getResources().getString(R.string.album_file_added_message) ) @@ -83,7 +83,7 @@ class AlbumOperationListener(private val activity: FileDisplayActivity) { } else { try { if (RemoteOperationResult.ResultCode.FOLDER_ALREADY_EXISTS == result.code) { - DisplayUtils.showSnackMessage(activity, R.string.album_already_exists) + SnackbarUtil.show(activity, R.string.album_already_exists) } else { showErrorMessage(operation, result) } @@ -116,7 +116,7 @@ class AlbumOperationListener(private val activity: FileDisplayActivity) { } private fun showErrorMessage(operation: RemoteOperation<*>, result: RemoteOperationResult<*>) { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( activity, ErrorMessageAdapter.getErrorCauseMessage(result, operation, activity.getResources()) ) diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/BackupFragment.kt b/app/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/BackupFragment.kt index 35e41faffa8d..918b39ded320 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/BackupFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/BackupFragment.kt @@ -30,6 +30,7 @@ import androidx.lifecycle.lifecycleScope import com.nextcloud.client.account.User import com.nextcloud.client.di.Injectable import com.nextcloud.client.jobs.BackgroundJobManager +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getSerializableArgument import com.nextcloud.utils.extensions.getTypedActivity import com.nextcloud.utils.extensions.setVisibleIf @@ -290,7 +291,7 @@ class BackupFragment : ) { backgroundJobManager.startImmediateCalendarBackup(user) } - DisplayUtils.showSnackMessage(this, R.string.contacts_preferences_backup_scheduled) + SnackbarUtil.show(this, R.string.contacts_preferences_backup_scheduled) } private fun setAutomaticBackup(enabled: Boolean) { @@ -376,12 +377,12 @@ class BackupFragment : private fun openDate(savedDate: Calendar?) { val contactsPreferenceActivity = activity as? ContactsPreferenceActivity ?: run { - activity?.let { DisplayUtils.showSnackMessage(it, R.string.error_choosing_date) } + activity?.let { SnackbarUtil.show(it, R.string.error_choosing_date) } return } val backupFiles = getBackupFiles().sortedBy { it.modificationTimestamp } if (backupFiles.isEmpty()) { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this, R.string.contacts_preferences_something_strange_happened ) @@ -411,7 +412,7 @@ class BackupFragment : @Suppress("ComplexMethod", "MagicNumber", "ReturnCount") override fun onDateSet(view: DatePicker, year: Int, month: Int, dayOfMonth: Int) { val contactsPreferenceActivity = activity as? ContactsPreferenceActivity ?: run { - activity?.let { DisplayUtils.showSnackMessage(it, R.string.error_choosing_date) } + activity?.let { SnackbarUtil.show(it, R.string.error_choosing_date) } return } selectedDate = GregorianCalendar(year, month, dayOfMonth) @@ -420,7 +421,7 @@ class BackupFragment : val backupToRestore = collectFilesForRestore(backupFiles, start, end) if (backupToRestore.isEmpty()) { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( this, R.string.contacts_preferences_no_file_found ) diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/BackupListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/BackupListFragment.java index fd1b2ee25297..841ff7f2ed0e 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/BackupListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/BackupListFragment.java @@ -30,6 +30,7 @@ import com.nextcloud.client.jobs.transfer.TransferManagerConnection; import com.nextcloud.client.jobs.transfer.TransferState; import com.nextcloud.client.network.ClientFactory; +import com.nextcloud.utils.SnackbarUtil; import com.nextcloud.utils.extensions.BundleExtensionsKt; import com.nextcloud.utils.extensions.IntExtensionsKt; import com.owncloud.android.R; @@ -40,7 +41,6 @@ import com.owncloud.android.ui.asynctasks.LoadContactsTask; import com.owncloud.android.ui.events.VCardToggleEvent; import com.owncloud.android.ui.fragment.FileFragment; -import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.MimeTypeUtil; import com.owncloud.android.utils.PermissionUtil; import com.owncloud.android.utils.theme.ViewThemeUtils; @@ -478,7 +478,7 @@ private boolean checkAndAskForCalendarWritePermission() { // endregion private void showPermissionErrorMessage() { - DisplayUtils.showSnackMessage(this, R.string.contactlist_no_permission); + SnackbarUtil.show(this, R.string.contactlist_no_permission); } private Unit onDownloadUpdate(Transfer download) { diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/notifications/NotificationsFragment.kt b/app/src/main/java/com/owncloud/android/ui/fragment/notifications/NotificationsFragment.kt index d8d33b873248..231d93367524 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/notifications/NotificationsFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/notifications/NotificationsFragment.kt @@ -33,6 +33,7 @@ import com.nextcloud.client.preferences.AppPreferences import com.nextcloud.common.NextcloudClient import com.nextcloud.utils.BuildHelper import com.nextcloud.utils.GlideHelper +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getTypedActivity import com.owncloud.android.R import com.owncloud.android.databinding.NotificationsLayoutBinding @@ -48,7 +49,6 @@ import com.owncloud.android.ui.adapter.NotificationListAdapter import com.owncloud.android.ui.asynctasks.NotificationExecuteActionTask import com.owncloud.android.ui.fragment.notifications.model.NotificationsUIState import com.owncloud.android.ui.notifications.NotificationsContract -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.PushUtils import com.owncloud.android.utils.theme.ViewThemeUtils import kotlinx.coroutines.Dispatchers @@ -253,7 +253,7 @@ class NotificationsFragment : else -> return } - DisplayUtils.showSnackMessage(this, messageRes) + SnackbarUtil.show(this, messageRes) } private fun isUsingOldLogin(): Boolean { @@ -329,7 +329,7 @@ class NotificationsFragment : state = NotificationsUIState.Empty } } else { - DisplayUtils.showSnackMessage(requireActivity(), getString(R.string.remove_notification_failed)) + SnackbarUtil.show(requireActivity(), getString(R.string.remove_notification_failed)) } fetchAndSetData(client) @@ -340,7 +340,7 @@ class NotificationsFragment : adapter?.removeAllNotifications() state = NotificationsUIState.Empty } else { - DisplayUtils.showSnackMessage(requireActivity(), getString(R.string.clear_notifications_failed)) + SnackbarUtil.show(requireActivity(), getString(R.string.clear_notifications_failed)) } } @@ -357,7 +357,7 @@ class NotificationsFragment : } } else { adapter?.bindButtons(holder, notification) - DisplayUtils.showSnackMessage(requireActivity(), getString(R.string.notification_action_failed)) + SnackbarUtil.show(requireActivity(), getString(R.string.notification_action_failed)) } } diff --git a/app/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java b/app/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java index 5ef6b9852f8f..74284f878558 100755 --- a/app/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java +++ b/app/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java @@ -37,6 +37,7 @@ import com.nextcloud.client.jobs.upload.FileUploadWorker; import com.nextcloud.client.network.ConnectivityService; import com.nextcloud.utils.EditorUtils; +import com.nextcloud.utils.SnackbarUtil; import com.nextcloud.utils.extensions.OCFileExtensionsKt; import com.owncloud.android.MainApp; import com.owncloud.android.R; @@ -71,7 +72,6 @@ import com.owncloud.android.ui.events.FileLockEvent; import com.owncloud.android.ui.events.SyncEventFinished; import com.owncloud.android.ui.fragment.OCFileListFragment; -import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.EncryptionUtils; import com.owncloud.android.utils.FileStorageUtils; import com.owncloud.android.utils.UriUtils; @@ -201,7 +201,7 @@ public void startSyncForFileAndIntent(OCFile file, Intent intent) { // if offline or walled garden, show old version with warning if (!connectivityService.getConnectivity().isConnected() || connectivityService.isInternetWalled()) { - DisplayUtils.showSnackMessage(fileActivity, R.string.file_not_synced); + SnackbarUtil.show(fileActivity, R.string.file_not_synced); EventBus.getDefault().post(new SyncEventFinished(intent)); return; @@ -248,7 +248,7 @@ private void syncFileOrFolder(OCFile file, User user, FileDataStorageManager sto if (file.isDown()) { FileStorageUtils.checkIfFileFinishedSaving(file); if (!result.isSuccess()) { - DisplayUtils.showSnackMessage(fileActivity, R.string.file_not_synced); + SnackbarUtil.show(fileActivity, R.string.file_not_synced); try { Thread.sleep(3000); } catch (InterruptedException e) { @@ -278,7 +278,7 @@ private void openRichDocumentFileWithoutAvailableApps(@NonNull OCFile file) { capability.getRichDocumentsDirectEditing().isTrue()) { openFileAsRichDocument(file, fileActivity); } else { - DisplayUtils.showSnackMessage(fileActivity, R.string.file_list_no_app_for_file_type); + SnackbarUtil.show(fileActivity, R.string.file_list_no_app_for_file_type); } } @@ -332,13 +332,13 @@ public void openFile(OCFile file) { } if (availableApps.isEmpty()) { - fileActivity.runOnUiThread(() -> DisplayUtils.showSnackMessage(fileActivity, R.string.file_list_no_app_for_file_type)); + fileActivity.runOnUiThread(() -> SnackbarUtil.show(fileActivity, R.string.file_list_no_app_for_file_type)); return; } if (!result.isSuccess()) { - fileActivity.runOnUiThread(() -> DisplayUtils.showSnackMessage(fileActivity, R.string.file_not_synced)); + fileActivity.runOnUiThread(() -> SnackbarUtil.show(fileActivity, R.string.file_not_synced)); // Sleep to show snackbar message try { @@ -353,7 +353,7 @@ public void openFile(OCFile file) { openFileWithIntent.setFlags(openFileWithIntent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK); fileActivity.startActivity(openFileWithIntent); } catch (ActivityNotFoundException exception) { - DisplayUtils.showSnackMessage(fileActivity, R.string.file_list_no_app_for_file_type); + SnackbarUtil.show(fileActivity, R.string.file_list_no_app_for_file_type); } }); }).start(); @@ -416,7 +416,7 @@ public void streamMediaFile(OCFile file) { fileActivity.dismissLoadingDialog(); if (!result.isSuccess()) { - DisplayUtils.showSnackMessage(fileActivity, R.string.stream_not_possible_headline); + SnackbarUtil.show(fileActivity, R.string.stream_not_possible_headline); return; } @@ -855,7 +855,7 @@ public void setPictureAs(OCFile file, View view) { intent.setDataAndType(uri, file.getMimeType()); } catch (ActivityNotFoundException exception) { - DisplayUtils.showSnackMessage(view, R.string.picture_set_as_no_app); + SnackbarUtil.show(view, R.string.picture_set_as_no_app); } } else { Log_OC.wtf(TAG, "Trying to send a NULL OCFile"); @@ -1083,7 +1083,7 @@ public void albumCopyFiles(final List filePaths, final String targetFold } fileActivity.showLoadingDialog(fileActivity.getString(R.string.wait_a_moment)); } else { - DisplayUtils.showSnackMessage(fileActivity, fileActivity.getString(R.string.offline_mode)); + SnackbarUtil.show(fileActivity, fileActivity.getString(R.string.offline_mode)); } return Unit.INSTANCE; }); @@ -1171,7 +1171,7 @@ public void uploadFromCamera(Activity activity, int requestCode, boolean isVideo if (intent.resolveActivity(activity.getPackageManager()) != null) { activity.startActivityForResult(intent, requestCode); } else { - DisplayUtils.showSnackMessage(activity, "No Camera found"); + SnackbarUtil.show(activity, "No Camera found"); } } diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt index 8d0a69ecdc4c..35449d0f843b 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.kt @@ -41,6 +41,7 @@ import com.nextcloud.client.player.ui.MediaNavigator import com.nextcloud.client.player.ui.VideoPictureInPicture import com.nextcloud.client.preferences.AppPreferences import com.nextcloud.model.WorkerState +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.getSerializableArgument import com.nextcloud.utils.extensions.observeWorker @@ -63,7 +64,6 @@ import com.owncloud.android.ui.fragment.FileFragment import com.owncloud.android.ui.fragment.GalleryFragment import com.owncloud.android.ui.fragment.GalleryFragmentBottomSheetDialog.MediaState import com.owncloud.android.ui.preview.model.PreviewImageActivityState -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.MimeTypeUtil import edu.umd.cs.findbugs.annotations.SuppressFBWarnings import kotlinx.coroutines.Job @@ -660,7 +660,7 @@ class PreviewImageActivity : private fun startEditImageActivity(file: OCFile) { if (!file.isDown) { - DisplayUtils.showSnackMessage(this, R.string.preview_image_file_is_not_downloaded) + SnackbarUtil.show(this, R.string.preview_image_file_is_not_downloaded) return } diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.kt index 587fdf35d586..be2028937c4d 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.kt @@ -51,6 +51,7 @@ import com.nextcloud.client.jobs.BackgroundJobManager import com.nextcloud.client.network.ConnectivityService import com.nextcloud.ui.fileactions.FileAction import com.nextcloud.ui.fileactions.FileActionsBottomSheet.Companion.newInstance +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.clickWithDebounce import com.nextcloud.utils.extensions.getBigThumbnailKey import com.nextcloud.utils.extensions.getParcelableArgument @@ -412,7 +413,7 @@ class PreviewImageFragment : onOverflowClick(isManualClick = true) } else { Log_OC.d(TAG, result?.logMessage) - DisplayUtils.showSnackMessage(binding.root, result.getLogMessage(context)) + SnackbarUtil.show(binding.root, result.getLogMessage(context)) } } } diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewPlaybackFragment.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewPlaybackFragment.kt index 9da820b28125..7b79bcacd4c1 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewPlaybackFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewPlaybackFragment.kt @@ -40,6 +40,7 @@ import com.nextcloud.client.player.util.PlayerUtil.isPictureInPictureAllowed import com.nextcloud.client.player.util.PlayerUtil.ownsPlayback import com.nextcloud.ui.fileactions.FileAction import com.nextcloud.ui.fileactions.FileActionsBottomSheet +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.getSerializableArgument import com.owncloud.android.R @@ -49,7 +50,6 @@ import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.operations.FetchRemoteFileOperation import com.owncloud.android.ui.dialog.ConfirmationDialogFragment import com.owncloud.android.ui.dialog.RemoveFilesDialogFragment -import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.MimeTypeUtil import com.owncloud.android.utils.theme.ViewThemeUtils import dagger.android.support.AndroidSupportInjection @@ -219,7 +219,7 @@ class PreviewPlaybackFragment : onOverflowClick(isManualClick = true) } else { Log_OC.d(TAG, result?.logMessage) - DisplayUtils.showSnackMessage(binding.root, result.getLogMessage(context)) + SnackbarUtil.show(binding.root, result.getLogMessage(context)) } } } diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewTextFileFragment.java b/app/src/main/java/com/owncloud/android/ui/preview/PreviewTextFileFragment.java index dd6240c4cf2e..ea17026916ee 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewTextFileFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewTextFileFragment.java @@ -21,6 +21,7 @@ import com.nextcloud.client.account.User; import com.nextcloud.ui.fileactions.FileAction; import com.nextcloud.ui.fileactions.FileActionsBottomSheet; +import com.nextcloud.utils.SnackbarUtil; import com.nextcloud.utils.extensions.BundleExtensionsKt; import com.nextcloud.utils.extensions.FileExtensionsKt; import com.owncloud.android.R; @@ -30,7 +31,6 @@ import com.owncloud.android.ui.activity.TextEditorWebView; import com.owncloud.android.ui.dialog.ConfirmationDialogFragment; import com.owncloud.android.ui.dialog.RemoveFilesDialogFragment; -import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.MimeTypeUtil; import org.mozilla.universalchardet.ReaderFactory; @@ -290,7 +290,7 @@ private void showFileActions(OCFile file) { private void onFileActionChosen(final int itemId) { if (itemId == R.id.action_send_share_file) { if (getFile().isSharedWithMe() && !getFile().canReshare()) { - DisplayUtils.showSnackMessage(this, R.string.resharing_is_not_allowed); + SnackbarUtil.show(this, R.string.resharing_is_not_allowed); } else { containerActivity.getFileOperationsHelper().sendShareFile(getFile()); } diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewTextFragment.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewTextFragment.kt index f57470d71e0a..b744b7528b34 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewTextFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewTextFragment.kt @@ -29,6 +29,7 @@ import com.nextcloud.client.account.UserAccountManager import com.nextcloud.client.device.DeviceInfo import com.nextcloud.client.di.Injectable import com.nextcloud.utils.LinkHelper +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.setHtmlContent import com.owncloud.android.MainApp import com.owncloud.android.R @@ -201,7 +202,7 @@ abstract class PreviewTextFragment : if (LinkHelper.isHttpOrHttpsLink(link)) { DisplayUtils.startLinkIntent(activity, link) } else { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( activity, activity.getString(R.string.link_not_followed_due_to_security_settings) ) diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewTextStringFragment.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewTextStringFragment.kt index a381647ae034..ad367f684176 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewTextStringFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewTextStringFragment.kt @@ -23,10 +23,10 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import com.google.android.material.floatingactionbutton.FloatingActionButton import com.nextcloud.android.lib.richWorkspace.RichWorkspaceDirectEditingRemoteOperation +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.ui.activity.FileActivity import com.owncloud.android.ui.activity.FileDisplayActivity -import com.owncloud.android.utils.DisplayUtils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -123,7 +123,7 @@ class PreviewTextStringFragment : PreviewTextFragment() { } else { withContext(Dispatchers.Main) { activity?.let { - DisplayUtils.showSnackMessage( + SnackbarUtil.show( it, R.string.preview_text_string_fragment_open_rich_text_editor_error_message ) diff --git a/app/src/main/java/com/owncloud/android/ui/preview/pdf/PreviewPdfFragment.kt b/app/src/main/java/com/owncloud/android/ui/preview/pdf/PreviewPdfFragment.kt index 261165207fc9..ec3df1843872 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/pdf/PreviewPdfFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/pdf/PreviewPdfFragment.kt @@ -20,6 +20,7 @@ import com.google.android.material.snackbar.Snackbar import com.nextcloud.client.di.Injectable import com.nextcloud.client.di.ViewModelFactory import com.nextcloud.utils.MenuUtils +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getParcelableArgument import com.owncloud.android.R import com.owncloud.android.databinding.PreviewPdfFragmentBinding @@ -27,7 +28,6 @@ import com.owncloud.android.datamodel.OCFile import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.ui.activity.FileDisplayActivity import com.owncloud.android.ui.preview.PreviewBitmapActivity -import com.owncloud.android.utils.DisplayUtils import javax.inject.Inject class PreviewPdfFragment : @@ -70,7 +70,7 @@ class PreviewPdfFragment : } catch (e: SecurityException) { Log_OC.e(this, "onViewCreated: trying to open password protected PDF", e) parentFragmentManager.popBackStack() - DisplayUtils.showSnackMessage(binding.root, R.string.pdf_password_protected) + SnackbarUtil.show(binding.root, R.string.pdf_password_protected) } } diff --git a/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinFragment.kt b/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinFragment.kt index 87846a52b5b1..ff08d8d75712 100644 --- a/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/trashbin/TrashbinFragment.kt @@ -41,6 +41,7 @@ import com.nextcloud.client.network.ConnectivityService import com.nextcloud.client.preferences.AppPreferences import com.nextcloud.client.utils.Throttler import com.nextcloud.ui.trashbinFileActions.TrashbinFileActionsBottomSheet +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.extensions.getTypedActivity import com.owncloud.android.R import com.owncloud.android.databinding.FragmentTrashbinBinding @@ -118,7 +119,7 @@ class TrashbinFragment : if (targetUser.isPresent) { navigatorActivity.setUser(targetUser.get()) } else { - DisplayUtils.showSnackMessage(this, R.string.associated_account_not_found) + SnackbarUtil.show(this, R.string.associated_account_not_found) activity?.finish() return } diff --git a/app/src/main/java/com/owncloud/android/utils/ClipboardUtil.kt b/app/src/main/java/com/owncloud/android/utils/ClipboardUtil.kt index 9eb61912b872..2d727024c7f9 100644 --- a/app/src/main/java/com/owncloud/android/utils/ClipboardUtil.kt +++ b/app/src/main/java/com/owncloud/android/utils/ClipboardUtil.kt @@ -19,6 +19,7 @@ import androidx.work.Data import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager import com.nextcloud.client.jobs.clipboard.ClipboardClearWorker +import com.nextcloud.utils.SnackbarUtil import com.nextcloud.utils.mdm.MDMConfig import com.owncloud.android.R import com.owncloud.android.lib.common.utils.Log_OC @@ -37,7 +38,7 @@ object ClipboardUtil { } if (TextUtils.isEmpty(text)) { - DisplayUtils.showSnackMessage(activity, R.string.clipboard_no_text_to_copy) + SnackbarUtil.show(activity, R.string.clipboard_no_text_to_copy) return } @@ -48,12 +49,12 @@ object ClipboardUtil { clipboardManager.setPrimaryClip(clip) if (showToast) { - DisplayUtils.showSnackMessage(activity, R.string.copied) + SnackbarUtil.show(activity, R.string.copied) } scheduleClipboardClearWorker(activity, text) } catch (e: Exception) { - DisplayUtils.showSnackMessage(activity, R.string.clipboard_unexpected_error) + SnackbarUtil.show(activity, R.string.clipboard_unexpected_error) Log_OC.e(TAG, "Exception caught while copying to clipboard", e) } } diff --git a/app/src/main/java/com/owncloud/android/utils/DisplayUtils.java b/app/src/main/java/com/owncloud/android/utils/DisplayUtils.java index 49560ab71e08..13f6c936a67f 100644 --- a/app/src/main/java/com/owncloud/android/utils/DisplayUtils.java +++ b/app/src/main/java/com/owncloud/android/utils/DisplayUtils.java @@ -30,8 +30,6 @@ import android.graphics.Point; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.os.Handler; -import android.os.Looper; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.TextUtils; @@ -40,8 +38,8 @@ import android.util.DisplayMetrics; import android.view.View; -import com.google.android.material.snackbar.Snackbar; import com.nextcloud.client.account.User; +import com.nextcloud.utils.SnackbarUtil; import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.datamodel.ThumbnailsCacheManager; @@ -73,7 +71,6 @@ import androidx.appcompat.widget.AppCompatDrawableManager; import androidx.core.content.ContextCompat; import androidx.core.content.res.ResourcesCompat; -import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; @@ -99,7 +96,6 @@ public final class DisplayUtils { private static final int BYTE_SIZE_DIVIDER = 1024; private static final double BYTE_SIZE_DIVIDER_DOUBLE = 1024.0; private static final int DATE_TIME_PARTS_SIZE = 2; - private static final Handler mainLooper = new Handler(Looper.getMainLooper()); public static final String MONTH_YEAR_PATTERN = "MMMM yyyy"; public static final String MONTH_PATTERN = "MMMM"; public static final String YEAR_PATTERN = "yyyy"; @@ -496,148 +492,6 @@ public static String getData(InputStream inputStream) { return text.toString(); } - // region snackbar - public static Snackbar createAndShowSnackMessage(Fragment fragment, @StringRes int messageResource) { - if (fragment == null) { - Log_OC.e(TAG, "snackbar cannot be shown fragment is null"); - return null; - } - - final var activity = fragment.getActivity(); - if (activity == null) { - Log_OC.e(TAG, "snackbar cannot be shown activity is null"); - return null; - } - - final var snackbar = Snackbar.make( - activity.findViewById(android.R.id.content), - messageResource, - Snackbar.LENGTH_INDEFINITE); - - var fab = findFABView(activity); - if (fab != null && fab.getVisibility() == View.VISIBLE) { - snackbar.setAnchorView(fab); - } - - mainLooper.post(snackbar::show); - return snackbar; - } - - public static void dismissSnackMessage(@Nullable Snackbar snackbar) { - if (snackbar == null) { - return; - } - mainLooper.post(snackbar::dismiss); - } - - public static void showSnackMessage(Fragment fragment, @StringRes int messageResource) { - if (fragment == null) { - Log_OC.e(TAG, "snackbar cannot be shown fragment is null"); - return; - } - - final var activity = fragment.getActivity(); - if (activity == null) { - Log_OC.e(TAG, "snackbar cannot be shown activity is null"); - return; - } - - showSnackMessage(activity, messageResource); - } - - public static void showSnackMessage(Activity activity, @StringRes int messageResource) { - if (activity == null) { - Log_OC.e(TAG, "snackbar cannot be shown activity is null"); - return; - } - - showSnackMessage(activity.findViewById(android.R.id.content), messageResource); - } - - public static void showSnackMessage(Activity activity, @StringRes int messageResource, Object... formatArgs) { - if (activity == null) { - Log_OC.e(TAG, "snackbar cannot be shown activity is null"); - return; - } - - showSnackMessage(activity, activity.findViewById(android.R.id.content), messageResource, formatArgs); - } - - public static void showSnackMessage(Context context, View view, @StringRes int messageResource, Object... formatArgs) { - if (context == null || view == null) { - Log_OC.e(TAG, "snackbar cannot be shown view is null"); - return; - } - - final var snackbar = Snackbar.make(view, String.format(context.getString(messageResource, formatArgs)), Snackbar.LENGTH_LONG); - snackbar.show(); - } - - public static void showSnackMessage(Activity activity, String message) { - if (activity == null) { - Log_OC.e(TAG, "snackbar cannot be shown activity is null"); - return; - } - - activity.runOnUiThread(() -> { - final var snackbar = Snackbar.make(activity.findViewById(android.R.id.content), message, Snackbar.LENGTH_LONG); - var fab = findFABView(activity); - if (fab != null && fab.getVisibility() == View.VISIBLE) { - snackbar.setAnchorView(fab); - } - snackbar.show(); - }); - } - - public static void showSnackMessage(View view, @StringRes int messageResource) { - if (view == null) { - Log_OC.e(TAG, "snackbar cannot be shown view is null"); - return; - } - - mainLooper.post(() -> { - final var snackbar = Snackbar.make(view, messageResource, Snackbar.LENGTH_LONG); - var fab = findFABView(view.getRootView()); - if (fab != null && fab.getVisibility() == View.VISIBLE) { - snackbar.setAnchorView(fab); - } - snackbar.show(); - }); - } - - public static void showSnackMessage(View view, String message) { - if (view == null) { - Log_OC.e(TAG, "snackbar cannot be shown view is null"); - return; - } - - mainLooper.post(() -> { - final Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_LONG); - snackbar.show(); - }); - } - // endregion - - private static View findFABView(Activity activity) { - return activity.findViewById(R.id.fab_main); - } - - private static View findFABView(View view) { - return view.findViewById(R.id.fab_main); - } - - - /** - * create a temporary message in a {@link Snackbar} bound to the given view. - * - * @param view The view the {@link Snackbar} is bound to. - * @param messageResource The resource id of the string resource to use. Can be formatted text. - * @return The created {@link Snackbar} - */ - public static Snackbar createSnackbar(View view, @StringRes int messageResource, int length) { - return Snackbar.make(view, messageResource, length); - } - // Solution inspired by https://stackoverflow.com/questions/34936590/why-isnt-my-vector-drawable-scaling-as-expected // Copied from https://raw.githubusercontent.com/nextcloud/talk-android/8ec8606bc61878e87e3ac8ad32c8b72d4680013c/app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.java // under GPL3 @@ -678,14 +532,6 @@ public static boolean isRTL() { return TextUtils.getLayoutDirectionFromLocale(Locale.getDefault()) == View.LAYOUT_DIRECTION_RTL; } - static public void showServerOutdatedSnackbar(Activity activity, int length) { - Snackbar.make(activity.findViewById(android.R.id.content), - R.string.outdated_server, length) - .setAction(R.string.dismiss, v -> { - }) - .show(); - } - static public void startLinkIntent(Activity activity, @StringRes int link) { startLinkIntent(activity, activity.getString(link)); } @@ -705,7 +551,7 @@ static public void startIntentIfAppAvailable(Intent intent, Activity activity, @ if (intent.resolveActivity(activity.getPackageManager()) != null) { activity.startActivity(intent); } else { - DisplayUtils.showSnackMessage(activity, error); + SnackbarUtil.show(activity, error); } } diff --git a/app/src/main/java/com/owncloud/android/utils/RichDocumentDownloader.kt b/app/src/main/java/com/owncloud/android/utils/RichDocumentDownloader.kt index 79e3add6a541..3395178299ed 100644 --- a/app/src/main/java/com/owncloud/android/utils/RichDocumentDownloader.kt +++ b/app/src/main/java/com/owncloud/android/utils/RichDocumentDownloader.kt @@ -14,6 +14,7 @@ import android.os.Environment import android.webkit.CookieManager import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope +import com.nextcloud.utils.SnackbarUtil import com.owncloud.android.R import com.owncloud.android.lib.common.utils.Log_OC import kotlinx.coroutines.Dispatchers @@ -86,7 +87,7 @@ class RichDocumentDownloader(private val activity: AppCompatActivity) { R.string.failed_to_download } - DisplayUtils.showSnackMessage(activity, message) + SnackbarUtil.show(activity, message) } } diff --git a/app/src/main/java/thirdparties/sufficientlysecure/ProcessVEvent.java b/app/src/main/java/thirdparties/sufficientlysecure/ProcessVEvent.java index e72211f677d2..ed74f3f277eb 100644 --- a/app/src/main/java/thirdparties/sufficientlysecure/ProcessVEvent.java +++ b/app/src/main/java/thirdparties/sufficientlysecure/ProcessVEvent.java @@ -270,7 +270,7 @@ public void run() throws Exception { } // TODO show failure in starting context - // DisplayUtils.showSnackMessage(context, msg); + // SnackbarUtil.show(context, msg); } // Munge a VEvent so Android won't reject it, then convert to ContentValues for inserting diff --git a/app/src/main/java/thirdparties/sufficientlysecure/SaveCalendar.java b/app/src/main/java/thirdparties/sufficientlysecure/SaveCalendar.java index 44aff3a566df..f8ad4f846604 100644 --- a/app/src/main/java/thirdparties/sufficientlysecure/SaveCalendar.java +++ b/app/src/main/java/thirdparties/sufficientlysecure/SaveCalendar.java @@ -194,7 +194,7 @@ public void start() throws Exception { msg += "\n" + res.getQuantityString(R.plurals.created_n_uids_to, numberOfCreatedUids, numberOfCreatedUids); } - // TODO replace DisplayUtils.showSnackMessage(activity, msg); + // TODO replace SnackbarUtil.show(activity, msg); upload(fileName); } else {