Compare commits

...

22 Commits

Author SHA1 Message Date
alperozturk 32d0efbb5e Remove unused resources
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-26 16:05:57 +02:00
alperozturk f1e4bdb2ac Remove unused resources
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-26 16:05:57 +02:00
alperozturk 13113f23bf Fix code analytics
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-26 16:05:57 +02:00
alperozturk 4f9580edc0 Use one notification for all downloads
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-26 16:05:57 +02:00
alperozturk 146d20ce3d Simplify download notifications
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-26 16:05:57 +02:00
alperozturk 84bcbee37f Fix notification sync issue
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-26 16:05:57 +02:00
alperozturk 2b14660559 Use one notification for uploads
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-26 16:05:57 +02:00
alperozturk 84d91f6e76 Use one notification for uploads
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-26 16:05:57 +02:00
alperozturk 7a49a3f521 Use one notification for uploads
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-26 16:05:57 +02:00
alperozturk 37dd41a157 Use one notification for uploads
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-26 16:05:57 +02:00
alperozturk 1e420bbeab Make upload notifications dismissable
Signed-off-by: alperozturk <alper_ozturk@proton.me>
2024-04-26 16:05:57 +02:00
Alper Öztürk 20cabd4aab
Merge pull request #12877 from nextcloud/showSnackAboveFAB
Show snackbar above FAB
2024-04-26 16:04:29 +02:00
Unpublished e7badaec39
Improve screen tests?
Signed-off-by: Unpublished <unpublished@gmx.net>
2024-04-26 15:20:39 +02:00
Unpublished 724115de3e
Show snackbar above FAB
Signed-off-by: Unpublished <unpublished@gmx.net>
2024-04-26 15:20:39 +02:00
Andy Scherzinger f2cb841854
Merge pull request #12940 from nextcloud/repo-sync/android-config/master
🔄 synced file(s) with nextcloud/android-config
2024-04-26 10:02:17 +02:00
Nextcloud bot 3644710cc6
Fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2024-04-26 02:45:46 +00:00
nextcloud-android-bot 8567928d16 🔄 synced local '.github/workflows/' with remote 'config/workflows/'
Signed-off-by: nextcloud-android-bot <android@nextcloud.com>
2024-04-26 02:22:05 +00:00
Andy Scherzinger f58e7fc75a
Merge pull request #12938 from nextcloud/chore/spdxLogoFix
Have correct SPDX license header for logo/trademarked items
2024-04-25 18:25:53 +02:00
Andy Scherzinger bbe218a265
Have correct SPDX license header for logo/trademarked items
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-04-25 18:24:16 +02:00
Andy Scherzinger e3a729c2cf
Merge pull request #12925 from nextcloud/changelog-master-stable-3.29.0
Add changelog for 3.29.0
2024-04-25 18:03:36 +02:00
Andy Scherzinger 92392d49a7
fix: spdx header position
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
2024-04-25 18:02:42 +02:00
tobiasKaminsky 0334871f64
Add changelog for 3.29.0
Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
2024-04-24 08:58:20 +02:00
40 changed files with 208 additions and 200 deletions

View File

@ -44,7 +44,7 @@ jobs:
echo "repo=${{ github.event.pull_request.head.repo.full_name }}"
} >> "$GITHUB_OUTPUT"
fi
- uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
with:
repository: ${{ steps.get-vars.outputs.repo }}
ref: ${{ steps.get-vars.outputs.branch }}

View File

@ -33,13 +33,13 @@ jobs:
language: [ 'java' ]
steps:
- name: Checkout repository
uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
- name: Set Swap Space
uses: pierotofy/set-swap-space@49819abfb41bd9b44fb781159c033dba90353a7c # v1.0
with:
swap-size-gb: 10
- name: Initialize CodeQL
uses: github/codeql-action/init@8f596b4ae3cb3c588a5c46780b86dd53fef16c52 # v3.25.2
uses: github/codeql-action/init@d39d31e687223d841ef683f52467bd88e9b21c14 # v3.25.3
with:
languages: ${{ matrix.language }}
- name: Set up JDK 17
@ -53,4 +53,4 @@ jobs:
echo "org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError" > "$HOME/.gradle/gradle.properties"
./gradlew assembleDebug
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@8f596b4ae3cb3c588a5c46780b86dd53fef16c52 # v3.25.2
uses: github/codeql-action/analyze@d39d31e687223d841ef683f52467bd88e9b21c14 # v3.25.3

View File

@ -25,5 +25,5 @@ jobs:
name: "Validation"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
- uses: gradle/wrapper-validation-action@5188e9b5527a0a094cee21e2fe9a8ca44b4629af # v3.3.1
- uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
- uses: gradle/wrapper-validation-action@216d1ad2b3710bf005dc39237337b9673fd8fcd5 # v3.3.2

View File

@ -29,7 +29,7 @@ jobs:
steps:
- name: "Checkout code"
uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
uses: actions/checkout@0ad4b8fadaa221de15dcec353f45205ec38ea70b # v4.1.4
with:
persist-credentials: false
@ -42,6 +42,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@8f596b4ae3cb3c588a5c46780b86dd53fef16c52 # v3.25.2
uses: github/codeql-action/upload-sarif@d39d31e687223d841ef683f52467bd88e9b21c14 # v3.25.3
with:
sarif_file: results.sarif

View File

@ -17,7 +17,7 @@ concurrency:
jobs:
screenshot:
runs-on: macOS-latest
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
@ -48,6 +48,12 @@ jobs:
distribution: "temurin"
java-version: 17
- name: Enable KVM group perms
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: create AVD and generate snapshot for caching
if: steps.avd-cache.outputs.cache-hit != 'true'
uses: reactivecircus/android-emulator-runner@6b0df4b0efb23bb0ec63d881db79aefbc976e4b2 # v2.30.1

View File

@ -20,8 +20,8 @@ Copyright: 2015-2016 ownCloud Inc.
License: GPL-2.0-only
Files: app/src/*/res/mipmap-*dpi/ic_launcher.png app/src/*/ic_launcher-web.png src/generic/fastlane/metadata/android/en-US/images/icon.png src/versionDev/fastlane/metadata/android/en-US/images/icon.png app/src/main/ic_launcher-web-round.png
Copyright: 2017-2024 Nextcloud GmbH. All rights reserved. Trademarks apply, see https://nextcloud.com/trademarks/
License: AGPL-3.0-or-later
Copyright: 2017-2024 Nextcloud GmbH <https://nextcloud.com/trademarks/>
License: LicenseRef-NextcloudTrademarks
Files: .idea/* app/schemas/com.nextcloud.client.database.NextcloudDatabase/*.json app/screenshots/gplay/debug/*.png app/src/main/res/values-*/strings.xml src/*/fastlane/metadata/android/*/*.txt src/versionDev/fastlane/metadata/android/*/changelogs/*.txt app/src/androidTest/assets/* app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker app/src/*/google-services.json app/src/main/res/drawable-*dpi/checker_16_16.png app/src/main/res/raw/encryption_key_words.txt app/src/main/resources/ical4j.properties app/src/main/res/drawable-*dpi/apk.png app/src/main/res/drawable-*dpi/fdroid.png app/src/main/res/drawable-*dpi/playstore.png app/src/main/res/drawable-*dpi/background.png app/src/main/res/drawable-*dpi/background_nc18.png
Copyright: 2016-2024 Nextcloud GmbH and Nextcloud contributors

View File

@ -1,17 +1,29 @@
<!--
~ SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
~ SPDX-FileCopyrightText: 2016-2024 Tobias Kaminsky <tobias@kaminsky.me>
~ SPDX-License-Identifier: AGPL-3.0-or-later
-->
## 3.29.0 (April 24, 2024)
- NC Assistant
- Client certificates
- Personal files view
- REUSE compliance
- Bugfixes
Minimum: NC 16 Server, Android 7.0 Nougat
For a full list, please see https://github.com/nextcloud/android/milestone/89
## 3.28.2 (April 4th, 2024)
- Bugfixes
Minimum: NC 16 Server, Android 7.0 Nougat
For a full list, please see https://github.com/nextcloud/android/milestone/90
<!--
~ SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
~ SPDX-License-Identifier: AGPL-3.0-or-later
-->
## 3.28.1 (March 25th, 2024)
- Bugfixes
@ -25,7 +37,6 @@ For a full list, please see https://github.com/nextcloud/android/milestone/90
- E2E sharing
- Bugfixes
Minimum: NC 16 Server, Android 7.0 Nougat
For a full list, please see https://github.com/nextcloud/android/milestone/88

View File

@ -0,0 +1,9 @@
The Nextcloud marks
Nextcloud and the Nextcloud logo is a registered trademark of Nextcloud GmbH in Germany and/or other countries.
These guidelines cover the following marks pertaining both to the product names and the logo: “Nextcloud”
and the blue/white cloud logo with or without the word Nextcloud; the service “Nextcloud Enterprise”;
and our products: “Nextcloud Files”; “Nextcloud Groupware” and “Nextcloud Talk”.
This set of marks is collectively referred to as the “Nextcloud marks.”
Use of Nextcloud logos and other marks is only permitted under the guidelines provided by the Nextcloud GmbH.
A copy can be found at https://nextcloud.com/trademarks/

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -18,7 +18,6 @@ import android.os.Handler
import android.os.Looper
import androidx.core.app.NotificationCompat
import com.owncloud.android.R
import com.owncloud.android.lib.resources.files.FileUtils
import com.owncloud.android.operations.DownloadFileOperation
import com.owncloud.android.ui.notifications.NotificationUtils
import com.owncloud.android.utils.theme.ViewThemeUtils
@ -29,15 +28,11 @@ import java.security.SecureRandom
class DownloadNotificationManager(
private val id: Int,
private val context: Context,
private val viewThemeUtils: ViewThemeUtils
viewThemeUtils: ViewThemeUtils
) {
private var notification: Notification
private var notificationBuilder: NotificationCompat.Builder
private val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
init {
notificationBuilder = NotificationUtils.newNotificationBuilder(context, viewThemeUtils).apply {
setContentTitle(context.getString(R.string.downloader_download_in_progress_ticker))
private var currentOperationTitle: String? = null
private var notificationBuilder: NotificationCompat.Builder =
NotificationUtils.newNotificationBuilder(context, viewThemeUtils).apply {
setTicker(context.getString(R.string.downloader_download_in_progress_ticker))
setSmallIcon(R.drawable.notification_icon)
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.notification_icon))
@ -46,32 +41,24 @@ class DownloadNotificationManager(
setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_DOWNLOAD)
}
}
notification = notificationBuilder.build()
}
private val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
@Suppress("MagicNumber")
fun prepareForStart(operation: DownloadFileOperation) {
notificationBuilder = NotificationUtils.newNotificationBuilder(context, viewThemeUtils).apply {
setSmallIcon(R.drawable.notification_icon)
setOngoing(true)
fun prepareForStart(operation: DownloadFileOperation, currentDownloadIndex: Int, totalDownloadSize: Int) {
currentOperationTitle = String.format(
context.getString(R.string.downloader_notification_manager_download_text),
currentDownloadIndex,
totalDownloadSize,
File(operation.savePath).name
)
notificationBuilder.run {
setContentTitle(currentOperationTitle)
setOngoing(false)
setProgress(100, 0, operation.size < 0)
setContentText(
String.format(
context.getString(R.string.downloader_download_in_progress), 0,
File(operation.savePath).name
)
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_DOWNLOAD)
}
notificationManager.notify(
id,
this.build()
)
}
showNotification()
}
fun prepareForResult() {
@ -82,16 +69,19 @@ class DownloadNotificationManager(
}
@Suppress("MagicNumber")
fun updateDownloadProgress(filePath: String, percent: Int, totalToTransfer: Long) {
fun updateDownloadProgress(percent: Int, totalToTransfer: Long) {
val progressText = String.format(
context.getString(R.string.downloader_notification_manager_in_progress_text),
percent
)
notificationBuilder.run {
setProgress(100, percent, totalToTransfer < 0)
val fileName: String = filePath.substring(filePath.lastIndexOf(FileUtils.PATH_SEPARATOR) + 1)
val text =
String.format(context.getString(R.string.downloader_download_in_progress), percent, fileName)
val title =
context.getString(R.string.downloader_download_in_progress_ticker)
updateNotificationText(title, text)
setContentTitle(currentOperationTitle)
setContentText(progressText)
}
showNotification()
}
@Suppress("MagicNumber")
@ -106,24 +96,12 @@ class DownloadNotificationManager(
notificationBuilder.run {
setProgress(0, 0, false)
setContentTitle(null)
setContentText(text)
setContentTitle(text)
setOngoing(false)
notificationManager.notify(notifyId, this.build())
}
}
private fun updateNotificationText(title: String?, text: String) {
notificationBuilder.run {
title?.let {
setContentTitle(title)
}
setContentText(text)
notificationManager.notify(id, this.build())
}
}
fun setContentIntent(intent: Intent, flag: Int) {
notificationBuilder.setContentIntent(
PendingIntent.getActivity(
@ -135,6 +113,10 @@ class DownloadNotificationManager(
)
}
private fun showNotification() {
notificationManager.notify(id, notificationBuilder.build())
}
fun getId(): Int {
return id
}

View File

@ -126,8 +126,8 @@ class FileDownloadWorker(
)
setForegroundAsync(foregroundInfo)
requestDownloads.forEach {
downloadFile(it)
requestDownloads.forEachIndexed { currentDownloadIndex, requestedDownload ->
downloadFile(requestedDownload, currentDownloadIndex, requestDownloads.size)
}
downloadError?.let {
@ -254,7 +254,7 @@ class FileDownloadWorker(
}
@Suppress("TooGenericExceptionCaught", "DEPRECATION")
private fun downloadFile(downloadKey: String) {
private fun downloadFile(downloadKey: String, currentDownloadIndex: Int, totalDownloadSize: Int) {
currentDownload = pendingDownloads.get(downloadKey)
if (currentDownload == null) {
@ -270,7 +270,13 @@ class FileDownloadWorker(
return
}
notifyDownloadStart(currentDownload!!)
lastPercent = 0
notificationManager.run {
prepareForStart(currentDownload!!, currentDownloadIndex + 1, totalDownloadSize)
setContentIntent(intents.detailsIntent(currentDownload!!), PendingIntent.FLAG_IMMUTABLE)
}
var downloadResult: RemoteOperationResult<*>? = null
try {
val ocAccount = getOCAccountForDownload()
@ -291,15 +297,6 @@ class FileDownloadWorker(
}
}
private fun notifyDownloadStart(download: DownloadFileOperation) {
lastPercent = 0
notificationManager.run {
prepareForStart(download)
setContentIntent(intents.detailsIntent(download), PendingIntent.FLAG_IMMUTABLE)
}
}
@Suppress("DEPRECATION")
private fun getOCAccountForDownload(): OwnCloudAccount {
val currentDownloadAccount = currentDownload?.user?.toPlatformAccount()
@ -368,6 +365,7 @@ class FileDownloadWorker(
FileDownloadError.Cancelled -> {
context.getString(R.string.downloader_file_download_cancelled)
}
FileDownloadError.Failed -> {
context.getString(R.string.downloader_file_download_failed)
}
@ -418,7 +416,7 @@ class FileDownloadWorker(
if (percent != lastPercent) {
notificationManager.run {
updateDownloadProgress(filePath, percent, totalToTransfer)
updateDownloadProgress(percent, totalToTransfer)
}
}

View File

@ -101,7 +101,7 @@ class FileUploadWorker(
backgroundJobManager.logEndOfWorker(BackgroundJobManagerImpl.formatClassTag(this::class), result)
result
} catch (t: Throwable) {
Log_OC.e(TAG, "Error caught at FileUploadWorker " + t.localizedMessage)
Log_OC.e(TAG, "Error caught at FileUploadWorker $t")
Result.failure()
}
}
@ -159,27 +159,41 @@ class FileUploadWorker(
val user = userAccountManager.getUser(accountName)
setWorkerState(user.get(), uploads)
for (upload in uploads) {
if (isStopped) {
break
}
run uploads@{
uploads.forEachIndexed { currentUploadIndex, upload ->
if (isStopped) {
return@uploads
}
if (user.isPresent) {
val uploadFileOperation = createUploadFileOperation(upload, user.get())
if (user.isPresent) {
val uploadFileOperation = createUploadFileOperation(upload, user.get())
currentUploadFileOperation = uploadFileOperation
val result = upload(uploadFileOperation, user.get())
currentUploadFileOperation = null
currentUploadFileOperation = uploadFileOperation
fileUploaderDelegate.sendBroadcastUploadFinished(
uploadFileOperation,
result,
uploadFileOperation.oldFile?.storagePath,
context,
localBroadcastManager
)
} else {
uploadsStorageManager.removeUpload(upload.uploadId)
notificationManager.prepareForStart(
uploadFileOperation,
cancelPendingIntent = intents.startIntent(uploadFileOperation),
startIntent = intents.notificationStartIntent(uploadFileOperation),
currentUploadIndex = currentUploadIndex + 1,
totalUploadSize = uploads.size
)
val result = upload(uploadFileOperation, user.get())
currentUploadFileOperation = null
fileUploaderDelegate.sendBroadcastUploadFinished(
uploadFileOperation,
result,
uploadFileOperation.oldFile?.storagePath,
context,
localBroadcastManager
)
} else {
uploadsStorageManager.removeUpload(upload.uploadId)
}
notificationManager.dismissWorkerNotifications()
}
}
}
@ -208,12 +222,6 @@ class FileUploadWorker(
private fun upload(uploadFileOperation: UploadFileOperation, user: User): RemoteOperationResult<Any?> {
lateinit var result: RemoteOperationResult<Any?>
notificationManager.prepareForStart(
uploadFileOperation,
cancelPendingIntent = intents.startIntent(uploadFileOperation),
intents.notificationStartIntent(uploadFileOperation)
)
try {
val storageManager = uploadFileOperation.storageManager
val ocAccount = OwnCloudAccount(user.toPlatformAccount(), context)
@ -300,8 +308,13 @@ class FileUploadWorker(
null
}
notifyForFailedResult(uploadResult.code, conflictResolveIntent, credentialIntent, errorMessage)
showNewNotification(uploadFileOperation)
notifyForFailedResult(
uploadFileOperation,
uploadResult.code,
conflictResolveIntent,
credentialIntent,
errorMessage
)
}
}
@ -317,14 +330,14 @@ class FileUploadWorker(
notificationManager.run {
val accountName = currentUploadFileOperation?.user?.accountName
val remotePath = currentUploadFileOperation?.remotePath
val filename = currentUploadFileOperation?.fileName ?: ""
updateUploadProgress(filename, percent, currentUploadFileOperation)
updateUploadProgress(percent, currentUploadFileOperation)
if (accountName != null && remotePath != null) {
val key: String =
FileUploadHelper.buildRemoteName(accountName, remotePath)
val boundListener = FileUploadHelper.mBoundListeners[key]
val filename = currentUploadFileOperation?.fileName ?: ""
boundListener?.onTransferProgress(
progressRate,

View File

@ -7,7 +7,6 @@
*/
package com.nextcloud.client.jobs.upload
import android.app.Notification
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
@ -25,10 +24,9 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
private const val ID = 411
}
private var notification: Notification? = null
private var notificationBuilder: NotificationCompat.Builder =
NotificationUtils.newNotificationBuilder(context, viewThemeUtils).apply {
setContentTitle(context.getString(R.string.foreground_service_upload))
setTicker(context.getString(R.string.foreground_service_upload))
setSmallIcon(R.drawable.notification_icon)
setLargeIcon(BitmapFactory.decodeResource(context.resources, R.drawable.notification_icon))
@ -36,30 +34,34 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_UPLOAD)
}
}
private val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
init {
notification = notificationBuilder.build()
}
private val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
private var currentOperationTitle: String? = "null"
@Suppress("MagicNumber")
fun prepareForStart(
uploadFileOperation: UploadFileOperation,
cancelPendingIntent: PendingIntent,
startIntent: PendingIntent
startIntent: PendingIntent,
currentUploadIndex: Int,
totalUploadSize: Int
) {
currentOperationTitle = String.format(
context.getString(R.string.upload_notification_manager_start_text),
currentUploadIndex,
totalUploadSize,
uploadFileOperation.fileName
)
val progressText = String.format(
context.getString(R.string.upload_notification_manager_upload_in_progress_text),
0
)
notificationBuilder.run {
setContentTitle(context.getString(R.string.uploader_upload_in_progress_ticker))
setContentText(
String.format(
context.getString(R.string.uploader_upload_in_progress),
0,
uploadFileOperation.fileName
)
)
setTicker(context.getString(R.string.foreground_service_upload))
setProgress(100, 0, false)
setOngoing(true)
setContentTitle(currentOperationTitle)
setContentText(progressText)
setOngoing(false)
clearActions()
addAction(
@ -76,13 +78,31 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
}
}
@Suppress("MagicNumber")
fun updateUploadProgress(percent: Int, currentOperation: UploadFileOperation?) {
val progressText = String.format(
context.getString(R.string.upload_notification_manager_upload_in_progress_text),
percent
)
notificationBuilder.run {
setProgress(100, percent, false)
setContentTitle(currentOperationTitle)
setContentText(progressText)
showNotification()
dismissOldErrorNotification(currentOperation)
}
}
fun notifyForFailedResult(
uploadFileOperation: UploadFileOperation,
resultCode: RemoteOperationResult.ResultCode,
conflictsResolveIntent: PendingIntent?,
credentialIntent: PendingIntent?,
errorMessage: String
) {
val textId = resultTitle(resultCode)
val textId = getFailedResultTitleId(resultCode)
notificationBuilder.run {
setTicker(context.getString(textId))
@ -106,9 +126,11 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
setContentText(errorMessage)
}
showNewNotification(uploadFileOperation)
}
private fun resultTitle(resultCode: RemoteOperationResult.ResultCode): Int {
private fun getFailedResultTitleId(resultCode: RemoteOperationResult.ResultCode): Int {
val needsToUpdateCredentials = (resultCode == RemoteOperationResult.ResultCode.UNAUTHORIZED)
return if (needsToUpdateCredentials) {
@ -128,7 +150,7 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
)
}
fun showNewNotification(operation: UploadFileOperation) {
private fun showNewNotification(operation: UploadFileOperation) {
notificationManager.notify(
NotificationUtils.createUploadNotificationTag(operation.file),
FileUploadWorker.NOTIFICATION_ERROR_ID,
@ -140,18 +162,6 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
notificationManager.notify(ID, notificationBuilder.build())
}
@Suppress("MagicNumber")
fun updateUploadProgress(filename: String, percent: Int, currentOperation: UploadFileOperation?) {
notificationBuilder.run {
setProgress(100, percent, false)
val text = String.format(context.getString(R.string.uploader_upload_in_progress), percent, filename)
setContentText(text)
showNotification()
dismissOldErrorNotification(currentOperation)
}
}
fun dismissOldErrorNotification(operation: UploadFileOperation?) {
if (operation == null) {
return
@ -176,10 +186,10 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi
}
fun notifyPaused(intent: PendingIntent) {
notificationBuilder.apply {
notificationBuilder.run {
setContentTitle(context.getString(R.string.upload_global_pause_title))
setTicker(context.getString(R.string.upload_global_pause_title))
setOngoing(true)
setOngoing(false)
setAutoCancel(false)
setProgress(0, 0, false)
clearActions()

View File

@ -650,10 +650,22 @@ public final class DisplayUtils {
*/
public static Snackbar showSnackMessage(Activity activity, String message) {
final Snackbar 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();
return snackbar;
}
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);
}
/**
* Show a temporary message in a {@link Snackbar} bound to the given view.
*
@ -663,6 +675,10 @@ public final class DisplayUtils {
*/
public static Snackbar showSnackMessage(View view, @StringRes int messageResource) {
final Snackbar 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();
return snackbar;
}

View File

@ -1,9 +1,8 @@
<!--
~ Nextcloud - Android Client
~
~ SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH, all rights reserved
~ SPDX-FileCopyrightText: 2023-2024 Tobias Kaminsky <tobias@kaminsky.me>
~ SPDX-License-Identifier: AGPL-3.0-or-later
~ SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH <https://nextcloud.com/trademarks/>
~ SPDX-License-Identifier: LicenseRef-NextcloudTrademarks
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"

View File

@ -1,9 +1,8 @@
<!--
~ Nextcloud - Android Client
~
~ SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH, all rights reserved
~ SPDX-FileCopyrightText: 2021 Tobias Kaminsky <tobias@kaminsky.me>
~ SPDX-License-Identifier: AGPL-3.0-or-later
~ SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH <https://nextcloud.com/trademarks/>
~ SPDX-License-Identifier: LicenseRef-NextcloudTrademarks
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="200dp"

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">فشل التنزيل، قم بتسجيل الدخول مرة أخرى</string>
<string name="downloader_download_failed_ticker">فشل التحميل</string>
<string name="downloader_download_file_not_found">الملف غير متوفر في الخادم</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% تحميل %2$s</string>
<string name="downloader_download_in_progress_ticker">جارِ التنزيل …</string>
<string name="downloader_download_succeeded_content">%1$s مُنزَّلَة</string>
@ -970,7 +969,6 @@
<string name="uploader_upload_files_behaviour_only_upload">الإبقاء على الملف في المجلد الأصلي</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">إحذف الملف من المجلد الأصلي</string>
<string name="uploader_upload_forbidden_permissions">للرفع إلى هذا المجلد</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% رفع %2$s</string>
<string name="uploader_upload_in_progress_ticker">يتم الرفع…</string>
<string name="uploader_upload_succeeded_content_single">تم رفع %1$s</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">Download failed, log in again</string>
<string name="downloader_download_failed_ticker">Download failed</string>
<string name="downloader_download_file_not_found">The file is no longer available on the server</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Downloading %2$s</string>
<string name="downloader_download_in_progress_ticker">Downloading…</string>
<string name="downloader_download_succeeded_content">%1$s downloaded</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Keep file in source folder</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Delete file from source folder</string>
<string name="uploader_upload_forbidden_permissions">to upload to this folder</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Uploading %2$s</string>
<string name="uploader_upload_in_progress_ticker">Uploading…</string>
<string name="uploader_upload_succeeded_content_single">%1$s uploaded</string>

View File

@ -227,7 +227,6 @@
<string name="downloader_download_failed_credentials_error">Stahování se nezdařilo, přihlaste se znovu</string>
<string name="downloader_download_failed_ticker">Stahování se nezdařilo</string>
<string name="downloader_download_file_not_found">Tento soubor už není na serveru k dispozici</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Stahuje se %2$s</string>
<string name="downloader_download_in_progress_ticker">Stahování…</string>
<string name="downloader_download_succeeded_content">%1$s staženo</string>
@ -901,7 +900,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Ponechat soubor ve zdrojové složce</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Vymazat soubor ze zdrojové složky</string>
<string name="uploader_upload_forbidden_permissions">pro nahrávání do této složky</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Odesílání %2$s</string>
<string name="uploader_upload_in_progress_ticker">Nahrávání…</string>
<string name="uploader_upload_succeeded_content_single">%1$s nahráno</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">Herunterladen fehlgeschlagen, erneute Anmeldung erforderlich</string>
<string name="downloader_download_failed_ticker">Herunterladen fehlgeschlagen</string>
<string name="downloader_download_file_not_found">Diese Datei steht auf dem Server nicht mehr zur Verfügung</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Herunterladen %2$s</string>
<string name="downloader_download_in_progress_ticker">Lade herunter…</string>
<string name="downloader_download_succeeded_content">%1$s heruntergeladen</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Hochladen und im Quellordner behalten</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Hochladen und Datei im Quellordner löschen</string>
<string name="uploader_upload_forbidden_permissions">diesen Ordner hochzuladen</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Hochladen %2$s</string>
<string name="uploader_upload_in_progress_ticker">Lade hoch…</string>
<string name="uploader_upload_succeeded_content_single">%1$s hochgeladen</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">La descarga falló, inicia sesión de nuevo</string>
<string name="downloader_download_failed_ticker">Falla en la descarga</string>
<string name="downloader_download_file_not_found">El archivo ya no se encuentra disponible en el servidor</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Descargando %2$s</string>
<string name="downloader_download_in_progress_ticker">Descargando…</string>
<string name="downloader_download_succeeded_content">%1$s descargado</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Mantener el archivo en la carpeta de origen</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Borrar el archivo de la carpeta de origen</string>
<string name="uploader_upload_forbidden_permissions">para cargar a esta carpeta</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Cargando %2$s</string>
<string name="uploader_upload_in_progress_ticker">Cargando</string>
<string name="uploader_upload_succeeded_content_single">%1$s cargado</string>

View File

@ -230,7 +230,6 @@
<string name="downloader_download_failed_credentials_error">Descarga fallida, vuelve a iniciar sesión</string>
<string name="downloader_download_failed_ticker">Fallo al descargar</string>
<string name="downloader_download_file_not_found">Este archivo ya no se encuentra en el servidor</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Descargado de %2$s</string>
<string name="downloader_download_in_progress_ticker">Descargando…</string>
<string name="downloader_download_succeeded_content">%1$s descargado</string>
@ -908,7 +907,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Mantener el archivo en la carpeta original</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Borrar archivo de la carpeta original</string>
<string name="uploader_upload_forbidden_permissions">para subir archivos a esta carpeta</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Subiendo %2$s</string>
<string name="uploader_upload_in_progress_ticker">Subiendo…</string>
<string name="uploader_upload_succeeded_content_single">%1$s subido</string>

View File

@ -231,7 +231,6 @@
<string name="downloader_download_failed_credentials_error">Deskargak huts egin du, hasi saioa berriz</string>
<string name="downloader_download_failed_ticker">Deskargak huts egin du</string>
<string name="downloader_download_file_not_found">Fitxategia jadanik ez dago eskuragarri zerbitzarian</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Deskargatzen %2$s</string>
<string name="downloader_download_in_progress_ticker">Deskargatzen…</string>
<string name="downloader_download_succeeded_content">%1$s deskargatuta</string>
@ -929,7 +928,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Mantendu fitxategia jatorrizko karpetan</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Ezabatu fitxategia jatorrizko karpetatik</string>
<string name="uploader_upload_forbidden_permissions">kargatzeko karpeta honetara</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Igotzen %2$s</string>
<string name="uploader_upload_in_progress_ticker">Kargatzen…</string>
<string name="uploader_upload_succeeded_content_single">%1$s igota</string>

View File

@ -226,7 +226,6 @@
<string name="downloader_download_failed_credentials_error">بارگیری شکست خورد. دوباره وارد شوید</string>
<string name="downloader_download_failed_ticker">دانلود ناموفق</string>
<string name="downloader_download_file_not_found">این فایل دیگر روی سرور وجود ندارد</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% در حال دانلود %2$s</string>
<string name="downloader_download_in_progress_ticker">بارگیری…</string>
<string name="downloader_download_succeeded_content">%1$sدانلود شده </string>
@ -923,7 +922,6 @@
<string name="uploader_upload_files_behaviour_only_upload">نگهداری فایل در پوشه منبع</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">حذف فایل از پوشه منبع</string>
<string name="uploader_upload_forbidden_permissions">برای بارگذاری در این پوشه</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% در حال آپلود%2$s</string>
<string name="uploader_upload_in_progress_ticker">بارگذاری…</string>
<string name="uploader_upload_succeeded_content_single">%1$s آپلود شده</string>

View File

@ -241,7 +241,6 @@
<string name="downloader_download_failed_credentials_error">Téléchargement échoué, reconnectez-vous</string>
<string name="downloader_download_failed_ticker">Le téléchargement a échoué</string>
<string name="downloader_download_file_not_found">Ce fichier nest plus disponible sur le serveur</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">Téléchargement de %2$s : %1$d%% effectués</string>
<string name="downloader_download_in_progress_ticker">Réception en cours…</string>
<string name="downloader_download_succeeded_content">%1$s reçu</string>
@ -941,7 +940,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Conserver le fichier dans le dossier original</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Supprimer le fichier du dossier original</string>
<string name="uploader_upload_forbidden_permissions">d\'envoyer dans ce dossier</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">Téléversement de %2$s : %1$d%%</string>
<string name="uploader_upload_in_progress_ticker">Téléversement en cours…</string>
<string name="uploader_upload_succeeded_content_single">%1$s envoyé</string>

View File

@ -221,7 +221,6 @@
<string name="downloader_download_failed_credentials_error">Scaricamento non riuscito, effettua nuovamente l\'accesso</string>
<string name="downloader_download_failed_ticker">Scaricamento non riuscito</string>
<string name="downloader_download_file_not_found">Il file non è più disponibile sul server</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Scaricamento di %2$s</string>
<string name="downloader_download_in_progress_ticker">Scaricamento in corso…</string>
<string name="downloader_download_succeeded_content">%1$s scaricato</string>
@ -885,7 +884,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Mantieni il file nella cartella di origine</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Elimina il file dalla cartella di origine</string>
<string name="uploader_upload_forbidden_permissions">per caricare in questa cartella</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Caricamento di %2$s</string>
<string name="uploader_upload_in_progress_ticker">Caricamento in corso…</string>
<string name="uploader_upload_succeeded_content_single">%1$s caricato</string>

View File

@ -241,7 +241,6 @@
<string name="downloader_download_failed_credentials_error">Nedlasting mislyktes, prøv igjen</string>
<string name="downloader_download_failed_ticker">Nedlasting mislyktes</string>
<string name="downloader_download_file_not_found">Filen finnes ikke på serveren lenger</string>
<string name="downloader_download_in_progress">%1$d %% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Laster ned %2$s</string>
<string name="downloader_download_in_progress_ticker">Laster ned…</string>
<string name="downloader_download_succeeded_content">%1$s lastet ned</string>
@ -942,7 +941,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Behold filen i kildemappe</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Slett filen fra kildemappen</string>
<string name="uploader_upload_forbidden_permissions">å laste opp i denne mappen</string>
<string name="uploader_upload_in_progress">%1$d %% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Laster opp %2$s</string>
<string name="uploader_upload_in_progress_ticker">Laster opp…</string>
<string name="uploader_upload_succeeded_content_single">%1$s lastet opp</string>

View File

@ -234,7 +234,6 @@
<string name="downloader_download_failed_credentials_error">Downloaden mislukt, je moet opnieuw inloggen</string>
<string name="downloader_download_failed_ticker">Downloaden mislukt</string>
<string name="downloader_download_file_not_found">Dit bestand is niet langer beschikbaar op de server</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Downloaden van %2$s</string>
<string name="downloader_download_in_progress_ticker">Downloaden…</string>
<string name="downloader_download_succeeded_content">%1$s gedownload.</string>
@ -883,7 +882,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Bewaar het bestand in de bronmap</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Verwijder bestand uit bronmap</string>
<string name="uploader_upload_forbidden_permissions">om dit bestand in deze map te uploaden</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Uploaden van %2$s</string>
<string name="uploader_upload_in_progress_ticker">Uploaden…</string>
<string name="uploader_upload_succeeded_content_single">%1$s geüpload</string>

View File

@ -241,7 +241,6 @@
<string name="downloader_download_failed_credentials_error">Download falhou, logue-se novamente</string>
<string name="downloader_download_failed_ticker">Download falhou</string>
<string name="downloader_download_file_not_found">Este arquivo não está mais disponível neste servidor</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Baixando %2$s</string>
<string name="downloader_download_in_progress_ticker">Baixando…</string>
<string name="downloader_download_succeeded_content">%1$s baixado</string>
@ -942,7 +941,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Manter arquivo na pasta de origem</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Excluir arquivo da pasta de origem</string>
<string name="uploader_upload_forbidden_permissions">para enviar a esta pasta</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% enviando %2$s</string>
<string name="uploader_upload_in_progress_ticker">Enviando…</string>
<string name="uploader_upload_succeeded_content_single">%1$s enviado</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">Ошибка скачивания, необходимо авторизоваться</string>
<string name="downloader_download_failed_ticker">Сбой при скачивании</string>
<string name="downloader_download_file_not_found">Этот файл больше недоступен на сервере</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Скачивается %2$s</string>
<string name="downloader_download_in_progress_ticker">Скачивается…</string>
<string name="downloader_download_succeeded_content">%1$s скачано</string>
@ -944,7 +943,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Оставить файл в исходной папке</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Удалить файл из исходной папки</string>
<string name="uploader_upload_forbidden_permissions">для передачи в эту папку</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% «%2$s»</string>
<string name="uploader_upload_in_progress_ticker">Передача…</string>
<string name="uploader_upload_succeeded_content_single">Передача файла «%1$s» завершена</string>

View File

@ -239,7 +239,6 @@
<string name="downloader_download_failed_credentials_error">Sťahovanie neúspešné, je potrebné sa znovu prihlásiť</string>
<string name="downloader_download_failed_ticker">Stiahnutie zlyhalo</string>
<string name="downloader_download_file_not_found">Súbor už na serveri nie je dostupný</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Sťahovanie %2$s</string>
<string name="downloader_download_in_progress_ticker">Sťahujem…</string>
<string name="downloader_download_succeeded_content">%1$s stiahnuté</string>
@ -940,7 +939,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Ponechaj súbor v pôvodnom priečinku</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Odstráň súbor z pôvodného priečinka</string>
<string name="uploader_upload_forbidden_permissions">nahrávať do tohto priečinka</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Odosielam %2$s</string>
<string name="uploader_upload_in_progress_ticker">Nahrávanie…</string>
<string name="uploader_upload_succeeded_content_single">%1$s odoslané</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">Неуспешно преузимање. Поново се пријавите</string>
<string name="downloader_download_failed_ticker">Преузимање није успело</string>
<string name="downloader_download_file_not_found">Фајл није више доступан на серверу</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% преузимам %2$s</string>
<string name="downloader_download_in_progress_ticker">Преузимам…</string>
<string name="downloader_download_succeeded_content">%1$s преузето</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Остави фајл у изворној фасцикли</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Избриши фајл из изворне фасцикле</string>
<string name="uploader_upload_forbidden_permissions">да отпремите ову фасциклу</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Отпремање %2$s</string>
<string name="uploader_upload_in_progress_ticker">Отпремам…</string>
<string name="uploader_upload_succeeded_content_single">%1$s отпремљено</string>

View File

@ -241,7 +241,6 @@
<string name="downloader_download_failed_credentials_error">Hämtningen misslyckades, logga in igen</string>
<string name="downloader_download_failed_ticker">Hämtning misslyckades</string>
<string name="downloader_download_file_not_found">Filen är inte längre tillgänglig på servern</string>
<string name="downloader_download_in_progress">%1$d%%%2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Hämtar %2$s</string>
<string name="downloader_download_in_progress_ticker">Hämtar…</string>
<string name="downloader_download_succeeded_content">%1$s hämtad</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Behåll fil i källmappen</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Ta bort fil från källmappen</string>
<string name="uploader_upload_forbidden_permissions">att ladda upp denna mapp</string>
<string name="uploader_upload_in_progress">%1$d%%%2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Laddar upp %2$s</string>
<string name="uploader_upload_in_progress_ticker">Laddar upp…</string>
<string name="uploader_upload_succeeded_content_single">%1$s uppladdad</string>

View File

@ -57,7 +57,7 @@
<string name="assistant_screen_top_bar_title">Yardımcı</string>
<string name="assistant_screen_unknown_task_status_text">Bilinmiyor</string>
<string name="assistant_task_detail_screen_input_button_title">Giriş</string>
<string name="assistant_task_detail_screen_output_button_title">Çıktı</string>
<string name="assistant_task_detail_screen_output_button_title">Çıkış</string>
<string name="associated_account_not_found">İlişkili hesap bulunamadı!</string>
<string name="auth_access_failed">Erişilemedi: %1$s</string>
<string name="auth_account_does_not_exist">Aygıt üzerinde henüz bu hesap açılmamış</string>
@ -172,6 +172,7 @@
<string name="confirmation_remove_folder_alert">%1$s klasörünü ve içindekileri silmek istediğinize emin misiniz?</string>
<string name="confirmation_remove_folders_alert">Seçilmiş ögeleri ve içindekileri silmek istediğinize emin misiniz?</string>
<string name="confirmation_remove_local">Yalnızca yerel</string>
<string name="conflict_dialog_error">Çakışma çözümleme penceresi oluşturulamadı</string>
<string name="conflict_file_headline">%1$s dosyası çakışıyor</string>
<string name="conflict_local_file">Yerel dosya</string>
<string name="conflict_message_description">İki sürümü de saklamayı seçerseniz, yerel dosyanın adına bir numara eklenecek.</string>
@ -241,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">İndirilemedi, yeniden oturum açmalısınız</string>
<string name="downloader_download_failed_ticker">İndirilemedi</string>
<string name="downloader_download_file_not_found">Bu dosya artık sunucuda yok</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%%%1$d İndirilen: %2$s</string>
<string name="downloader_download_in_progress_ticker">İndiriliyor …</string>
<string name="downloader_download_succeeded_content">%1$s indirildi</string>
@ -942,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">Kaynak klasördeki dosya tutulsun</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">Dosya kaynak klasörden silinsin</string>
<string name="uploader_upload_forbidden_permissions">bu klasöre yükleyemezsiniz</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%%%1$d Yüklenen: %2$s</string>
<string name="uploader_upload_in_progress_ticker">Yükleniyor …</string>
<string name="uploader_upload_succeeded_content_single">%1$s yüklendi</string>

View File

@ -254,7 +254,7 @@
<string name="drawer_community">Спільнота</string>
<string name="drawer_header_background">Зображення тла верхньої панелі</string>
<string name="drawer_item_activities">Події</string>
<string name="drawer_item_all_files">Усі файли</string>
<string name="drawer_item_all_files">Усі документи</string>
<string name="drawer_item_assistant">Помічник</string>
<string name="drawer_item_favorites">Із зірочкою</string>
<string name="drawer_item_gallery">Зображення та відео</string>
@ -354,7 +354,7 @@
<string name="file_list_empty_favorite_headline">Поки що ви нічого не позначили зірочкою</string>
<string name="file_list_empty_favorites_filter_list">Тут можна буде знайти файли та каталоги, які ви позначити зірочкою.</string>
<string name="file_list_empty_gallery">Не знайдено ані зображень, ані відео</string>
<string name="file_list_empty_headline">Тут немає файлів</string>
<string name="file_list_empty_headline">Тут відсутні файли</string>
<string name="file_list_empty_headline_search">Жодного збігу у цьому каталозі</string>
<string name="file_list_empty_headline_server_search">Жодного збігу</string>
<string name="file_list_empty_moving">Тут нічого немає. Ви можете створити каталог.</string>

View File

@ -230,7 +230,6 @@
<string name="downloader_download_failed_credentials_error">下载失败,请重新登录</string>
<string name="downloader_download_failed_ticker">下载失败</string>
<string name="downloader_download_file_not_found">该文件在服务器上不可用</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% 正在下载 %2$s</string>
<string name="downloader_download_in_progress_ticker">正在下载…</string>
<string name="downloader_download_succeeded_content">已下载了 %1$s</string>
@ -951,7 +950,6 @@ Nextcloud 是一个私有文件同步、共享和通信服务器。它是自由
<string name="uploader_upload_files_behaviour_only_upload">在原文件夹中保留文件</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">从原文件夹中删除文件</string>
<string name="uploader_upload_forbidden_permissions">上传到此文件夹</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% 正在上传 %2$s</string>
<string name="uploader_upload_in_progress_ticker">正在上传…</string>
<string name="uploader_upload_succeeded_content_single">已上传了 %1$s</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">下載失敗,再重新登入</string>
<string name="downloader_download_failed_ticker">下載失敗</string>
<string name="downloader_download_file_not_found">這個檔案已經不存在於伺服器中</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% 下載中 %2$s</string>
<string name="downloader_download_in_progress_ticker">下載中…</string>
<string name="downloader_download_succeeded_content">%1$s 已下載</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">在來源資料夾保留檔案</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">刪除來源資料夾中的檔案</string>
<string name="uploader_upload_forbidden_permissions">上傳至此資料夾</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% 上傳 %2$s 中</string>
<string name="uploader_upload_in_progress_ticker">上傳中…</string>
<string name="uploader_upload_succeeded_content_single">%1$s 已上傳</string>

View File

@ -242,7 +242,6 @@
<string name="downloader_download_failed_credentials_error">下載失敗,再重新登入</string>
<string name="downloader_download_failed_ticker">下載失敗</string>
<string name="downloader_download_file_not_found">這個檔案已經不存在於伺服器中</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% 下載中 %2$s</string>
<string name="downloader_download_in_progress_ticker">正在下載……</string>
<string name="downloader_download_succeeded_content">%1$s 已下載</string>
@ -943,7 +942,6 @@
<string name="uploader_upload_files_behaviour_only_upload">在來源資料夾保留檔案</string>
<string name="uploader_upload_files_behaviour_upload_and_delete_from_source">刪除來源資料夾中的檔案</string>
<string name="uploader_upload_forbidden_permissions">上傳至此資料夾</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% 上傳 %2$s 中</string>
<string name="uploader_upload_in_progress_ticker">正在上傳……</string>
<string name="uploader_upload_succeeded_content_single">%1$s 已上傳</string>

View File

@ -181,8 +181,11 @@
<string name="active_user">Active user</string>
<string name="upload_chooser_title">Upload from…</string>
<string name="uploader_info_dirname">Folder name</string>
<string name="upload_notification_manager_start_text" translatable="false">%1$d / %2$d - %3$s</string>
<string name="upload_notification_manager_upload_in_progress_text" translatable="false">%1$d%%</string>
<string name="uploader_upload_in_progress_ticker">Uploading…</string>
<string name="uploader_upload_in_progress">%1$d%% %2$s</string>
<string name="uploader_upload_in_progress_content">%1$d%% Uploading %2$s</string>
<string name="uploader_upload_succeeded_content_single">%1$s uploaded</string>
<string name="uploader_upload_failed_ticker">Upload failed</string>
@ -211,8 +214,11 @@
<string name="uploads_view_upload_status_fetching_server_version">Fetching server version…</string>
<string name="uploads_view_later_waiting_to_upload">Waiting to upload</string>
<string name="uploads_view_group_header" translatable="false">%1$s (%2$d)</string>
<string name="downloader_notification_manager_download_text" translatable="false">%1$d / %2$d - %3$s</string>
<string name="downloader_notification_manager_in_progress_text" translatable="false">%1$d%%</string>
<string name="downloader_download_in_progress_ticker">Downloading…</string>
<string name="downloader_download_in_progress">%1$d%% %2$s</string>
<string name="downloader_download_in_progress_content">%1$d%% Downloading %2$s</string>
<string name="downloader_download_succeeded_ticker">Downloaded</string>
<string name="downloader_download_succeeded_content">%1$s downloaded</string>