diff --git a/app/src/main/java/com/nextcloud/client/files/downloader/FileTransferService.kt b/app/src/main/java/com/nextcloud/client/files/downloader/FileTransferService.kt
index 87ff143f05..220230d43b 100644
--- a/app/src/main/java/com/nextcloud/client/files/downloader/FileTransferService.kt
+++ b/app/src/main/java/com/nextcloud/client/files/downloader/FileTransferService.kt
@@ -22,8 +22,6 @@ package com.nextcloud.client.files.downloader
import android.app.Service
import android.content.Context
import android.content.Intent
-import android.content.pm.ServiceInfo
-import android.os.Build
import android.os.IBinder
import com.nextcloud.client.account.User
import com.nextcloud.client.core.AsyncRunner
@@ -33,7 +31,9 @@ import com.nextcloud.client.logger.Logger
import com.nextcloud.client.network.ClientFactory
import com.nextcloud.client.network.ConnectivityService
import com.nextcloud.client.notifications.AppNotificationManager
+import com.nextcloud.utils.ForegroundServiceHelper
import com.owncloud.android.datamodel.FileDataStorageManager
+import com.owncloud.android.datamodel.ForegroundServiceType
import com.owncloud.android.datamodel.UploadsStorageManager
import dagger.android.AndroidInjection
import javax.inject.Inject
@@ -109,18 +109,12 @@ class FileTransferService : Service() {
}
if (!isRunning) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
- startForeground(
- AppNotificationManager.TRANSFER_NOTIFICATION_ID,
- notificationsManager.buildDownloadServiceForegroundNotification(),
- ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
- )
- } else {
- startForeground(
- AppNotificationManager.TRANSFER_NOTIFICATION_ID,
- notificationsManager.buildDownloadServiceForegroundNotification()
- )
- }
+ ForegroundServiceHelper.startService(
+ this,
+ AppNotificationManager.TRANSFER_NOTIFICATION_ID,
+ notificationsManager.buildDownloadServiceForegroundNotification(),
+ ForegroundServiceType.DataSync
+ )
}
val request: Request = intent.getParcelableExtra(EXTRA_REQUEST)!!
diff --git a/app/src/main/java/com/nextcloud/client/media/PlayerService.kt b/app/src/main/java/com/nextcloud/client/media/PlayerService.kt
index 3cfd22c9c6..5b2b190975 100644
--- a/app/src/main/java/com/nextcloud/client/media/PlayerService.kt
+++ b/app/src/main/java/com/nextcloud/client/media/PlayerService.kt
@@ -22,7 +22,6 @@ package com.nextcloud.client.media
import android.app.PendingIntent
import android.app.Service
import android.content.Intent
-import android.content.pm.ServiceInfo
import android.media.AudioManager
import android.os.Build
import android.os.Bundle
@@ -32,7 +31,9 @@ import android.widget.Toast
import androidx.core.app.NotificationCompat
import com.nextcloud.client.account.User
import com.nextcloud.client.network.ClientFactory
+import com.nextcloud.utils.ForegroundServiceHelper
import com.owncloud.android.R
+import com.owncloud.android.datamodel.ForegroundServiceType
import com.owncloud.android.datamodel.OCFile
import com.owncloud.android.ui.notifications.NotificationUtils
import com.owncloud.android.utils.theme.ViewThemeUtils
@@ -173,15 +174,12 @@ class PlayerService : Service() {
notificationBuilder.setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_MEDIA)
}
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
- startForeground(
- R.string.media_notif_ticker,
- notificationBuilder.build(),
- ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- )
- } else {
- startForeground(R.string.media_notif_ticker, notificationBuilder.build())
- }
+ ForegroundServiceHelper.startService(
+ this,
+ R.string.media_notif_ticker,
+ notificationBuilder.build(),
+ ForegroundServiceType.MediaPlayback
+ )
isRunning = true
}
diff --git a/app/src/main/java/com/nextcloud/utils/ForegroundServiceHelper.kt b/app/src/main/java/com/nextcloud/utils/ForegroundServiceHelper.kt
new file mode 100644
index 0000000000..9dd7d8008c
--- /dev/null
+++ b/app/src/main/java/com/nextcloud/utils/ForegroundServiceHelper.kt
@@ -0,0 +1,48 @@
+/*
+ * Nextcloud Android client application
+ *
+ * @author Alper Ozturk
+ * Copyright (C) 2023 Alper Ozturk
+ * Copyright (C) 2023 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package com.nextcloud.utils
+
+import android.app.Notification
+import android.app.Service
+import android.os.Build
+import androidx.core.app.ServiceCompat
+import com.owncloud.android.datamodel.ForegroundServiceType
+
+object ForegroundServiceHelper {
+ fun startService(
+ service: Service,
+ id: Int,
+ notification: Notification,
+ foregroundServiceType: ForegroundServiceType
+ ) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ ServiceCompat.startForeground(
+ service,
+ id,
+ notification,
+ foregroundServiceType.getId()
+ )
+ } else {
+ service.startForeground(id, notification)
+ }
+ }
+}
diff --git a/app/src/main/java/com/owncloud/android/datamodel/ForegroundServiceType.kt b/app/src/main/java/com/owncloud/android/datamodel/ForegroundServiceType.kt
new file mode 100644
index 0000000000..986197ea36
--- /dev/null
+++ b/app/src/main/java/com/owncloud/android/datamodel/ForegroundServiceType.kt
@@ -0,0 +1,45 @@
+/*
+ * Nextcloud Android client application
+ *
+ * @author Alper Ozturk
+ * Copyright (C) 2023 Alper Ozturk
+ * Copyright (C) 2023 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package com.owncloud.android.datamodel
+
+import android.content.pm.ServiceInfo
+import android.os.Build
+import androidx.annotation.RequiresApi
+
+/**
+ * Enum to specify the type of foreground service.
+ * Use this enum when starting a foreground service to indicate its purpose.
+ * Note: Foreground service type is not available for older Android versions.
+ * This wrapper is designed for compatibility on those versions.
+ */
+enum class ForegroundServiceType {
+ DataSync, MediaPlayback;
+
+ @RequiresApi(Build.VERSION_CODES.Q)
+ fun getId(): Int {
+ return if (this == DataSync) {
+ ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
+ } else {
+ ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
+ }
+ }
+}
diff --git a/app/src/main/java/com/owncloud/android/files/services/FileDownloader.java b/app/src/main/java/com/owncloud/android/files/services/FileDownloader.java
index 288436788f..1533cd5346 100644
--- a/app/src/main/java/com/owncloud/android/files/services/FileDownloader.java
+++ b/app/src/main/java/com/owncloud/android/files/services/FileDownloader.java
@@ -28,10 +28,8 @@ import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
-import android.content.pm.ServiceInfo;
import android.graphics.BitmapFactory;
import android.os.Binder;
-import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
@@ -44,9 +42,11 @@ import com.nextcloud.client.account.User;
import com.nextcloud.client.account.UserAccountManager;
import com.nextcloud.client.files.downloader.DownloadTask;
import com.nextcloud.java.util.Optional;
+import com.nextcloud.utils.ForegroundServiceHelper;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AuthenticatorActivity;
import com.owncloud.android.datamodel.FileDataStorageManager;
+import com.owncloud.android.datamodel.ForegroundServiceType;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.datamodel.UploadsStorageManager;
import com.owncloud.android.lib.common.OwnCloudAccount;
@@ -83,7 +83,6 @@ import java.util.Vector;
import javax.inject.Inject;
import androidx.core.app.NotificationCompat;
-import androidx.core.app.ServiceCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import dagger.android.AndroidInjection;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -156,7 +155,7 @@ public class FileDownloader extends Service
mBinder = new FileDownloaderBinder();
NotificationCompat.Builder builder = NotificationUtils.newNotificationBuilder(this, viewThemeUtils).setContentTitle(
- getApplicationContext().getResources().getString(R.string.app_name))
+ getApplicationContext().getResources().getString(R.string.app_name))
.setContentText(getApplicationContext().getResources().getString(R.string.foreground_service_download))
.setSmallIcon(R.drawable.notification_icon)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.notification_icon));
@@ -195,23 +194,15 @@ public class FileDownloader extends Service
/**
* Entry point to add one or several files to the queue of downloads.
- *
- * New downloads are added calling to startService(), resulting in a call to this method.
- * This ensures the service will keep on working although the caller activity goes away.
+ *
+ * New downloads are added calling to startService(), resulting in a call to this method. This ensures the service
+ * will keep on working although the caller activity goes away.
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log_OC.d(TAG, "Starting command with id " + startId);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
- ServiceCompat.startForeground(
- this,
- FOREGROUND_SERVICE_ID,
- mNotification,
- ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC);
- } else {
- startForeground(FOREGROUND_SERVICE_ID, mNotification);
- }
+ ForegroundServiceHelper.INSTANCE.startService(this, FOREGROUND_SERVICE_ID, mNotification, ForegroundServiceType.DataSync);
if (intent == null || !intent.hasExtra(EXTRA_USER) || !intent.hasExtra(EXTRA_FILE)) {
Log_OC.e(TAG, "Not enough information provided in intent");
diff --git a/app/src/main/java/com/owncloud/android/files/services/FileUploader.java b/app/src/main/java/com/owncloud/android/files/services/FileUploader.java
index a377e16ed7..51e6e55b15 100644
--- a/app/src/main/java/com/owncloud/android/files/services/FileUploader.java
+++ b/app/src/main/java/com/owncloud/android/files/services/FileUploader.java
@@ -37,7 +37,6 @@ import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.ServiceInfo;
import android.graphics.BitmapFactory;
import android.os.Binder;
import android.os.Build;
@@ -59,10 +58,12 @@ import com.nextcloud.client.network.Connectivity;
import com.nextcloud.client.network.ConnectivityService;
import com.nextcloud.client.utils.FileUploaderDelegate;
import com.nextcloud.java.util.Optional;
+import com.nextcloud.utils.ForegroundServiceHelper;
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.authentication.AuthenticatorActivity;
import com.owncloud.android.datamodel.FileDataStorageManager;
+import com.owncloud.android.datamodel.ForegroundServiceType;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.datamodel.ThumbnailsCacheManager;
import com.owncloud.android.datamodel.UploadsStorageManager;
@@ -315,11 +316,7 @@ public class FileUploader extends Service
public int onStartCommand(Intent intent, int flags, int startId) {
Log_OC.d(TAG, "Starting command with id " + startId);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
- startForeground(FOREGROUND_SERVICE_ID, mNotification, ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC);
- } else {
- startForeground(FOREGROUND_SERVICE_ID, mNotification);
- }
+ ForegroundServiceHelper.INSTANCE.startService(this, FOREGROUND_SERVICE_ID, mNotification, ForegroundServiceType.DataSync);
if (intent == null) {
Log_OC.e(TAG, "Intent is null");
@@ -389,7 +386,7 @@ public class FileUploader extends Service
List requestedUploads,
boolean onWifiOnly,
boolean whileChargingOnly
- ) {
+ ) {
String[] localPaths = null;
String[] remotePaths = null;
String[] mimeTypes = null;
@@ -428,7 +425,7 @@ public class FileUploader extends Service
remotePaths[i],
localPaths[i],
mimeTypes != null ? mimeTypes[i] : null
- );
+ );
if (files[i] == null) {
Log_OC.e(TAG, "obtainNewOCFileToUpload() returned null for remotePaths[i]:" + remotePaths[i]
+ " and localPaths[i]:" + localPaths[i]);
@@ -528,7 +525,7 @@ public class FileUploader extends Service
user.getAccountName(),
file.getRemotePath(),
newUpload
- );
+ );
if (putResult != null) {
requestedUploads.add(putResult.first);
@@ -575,7 +572,7 @@ public class FileUploader extends Service
user.getAccountName(),
upload.getRemotePath(),
newUpload
- );
+ );
if (putResult != null) {
String uploadKey = putResult.first;
requestedUploads.add(uploadKey);
@@ -717,12 +714,12 @@ public class FileUploader extends Service
*/
private void notifyUploadStart(UploadFileOperation upload) {
// / create status notification with a progress bar
- Intent notificationActionIntent = new Intent(getApplicationContext(),UploadNotificationActionReceiver.class);
- notificationActionIntent.putExtra(EXTRA_ACCOUNT_NAME,upload.getUser().getAccountName());
- notificationActionIntent.putExtra(EXTRA_REMOTE_PATH,upload.getRemotePath());
+ Intent notificationActionIntent = new Intent(getApplicationContext(), UploadNotificationActionReceiver.class);
+ notificationActionIntent.putExtra(EXTRA_ACCOUNT_NAME, upload.getUser().getAccountName());
+ notificationActionIntent.putExtra(EXTRA_REMOTE_PATH, upload.getRemotePath());
notificationActionIntent.setAction(ACTION_CANCEL_BROADCAST);
- PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),secureRandomGenerator.nextInt(),notificationActionIntent, PendingIntent.FLAG_IMMUTABLE);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), secureRandomGenerator.nextInt(), notificationActionIntent, PendingIntent.FLAG_IMMUTABLE);
mLastPercent = 0;
mNotificationBuilder = NotificationUtils.newNotificationBuilder(this, viewThemeUtils);
mNotificationBuilder
@@ -735,7 +732,7 @@ public class FileUploader extends Service
String.format(getString(R.string.uploader_upload_in_progress_content), 0, upload.getFileName())
)
.clearActions() // to make sure there is only one action
- .addAction(R.drawable.ic_action_cancel_grey,getApplicationContext().getString(R.string.common_cancel),pendingIntent);
+ .addAction(R.drawable.ic_action_cancel_grey, getApplicationContext().getString(R.string.common_cancel), pendingIntent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
@@ -773,7 +770,7 @@ public class FileUploader extends Service
long totalTransferredSoFar,
long totalToTransfer,
String filePath
- ) {
+ ) {
int percent = (int) (100.0 * ((double) totalTransferredSoFar) / ((double) totalToTransfer));
if (percent != mLastPercent) {
mNotificationBuilder.setProgress(100, percent, false);
@@ -839,11 +836,11 @@ public class FileUploader extends Service
Intent updateAccountCredentials = new Intent(this, AuthenticatorActivity.class);
updateAccountCredentials.putExtra(
AuthenticatorActivity.EXTRA_ACCOUNT, upload.getUser().toPlatformAccount()
- );
+ );
updateAccountCredentials.putExtra(
AuthenticatorActivity.EXTRA_ACTION,
AuthenticatorActivity.ACTION_UPDATE_EXPIRED_TOKEN
- );
+ );
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
updateAccountCredentials.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
@@ -853,7 +850,7 @@ public class FileUploader extends Service
(int) System.currentTimeMillis(),
updateAccountCredentials,
PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE
- ));
+ ));
} else {
Intent intent;
if (uploadResult.getCode() == ResultCode.SYNC_CONFLICT) {
@@ -1179,11 +1176,11 @@ public class FileUploader extends Service
*/
public void cancel(String accountName, String remotePath, @Nullable ResultCode resultCode) {
// Cancel for Android version >= Android 11
- if (useFilesUploadWorker(getApplicationContext())){
- try{
+ if (useFilesUploadWorker(getApplicationContext())) {
+ try {
new FilesUploadHelper().cancelFileUpload(remotePath, accountManager.getUser(accountName).get());
- }catch(NoSuchElementException e){
- Log_OC.e(TAG,"Error cancelling current upload because user does not exist!");
+ } catch (NoSuchElementException e) {
+ Log_OC.e(TAG, "Error cancelling current upload because user does not exist!");
}
} else {
// Cancel for Android version <= Android 10
@@ -1222,7 +1219,7 @@ public class FileUploader extends Service
cancelPendingUploads(accountName);
if (useFilesUploadWorker(getApplicationContext())) {
new FilesUploadHelper().restartUploadJob(accountManager.getUser(accountName).get());
- }else{
+ } else {
if (mCurrentUpload != null && mCurrentUpload.getUser().nameEquals(accountName)) {
mCurrentUpload.cancel(ResultCode.CANCELLED);
}
@@ -1273,7 +1270,7 @@ public class FileUploader extends Service
OnDatatransferProgressListener listener,
User user,
OCFile file
- ) {
+ ) {
if (user == null || file == null || listener == null) {
return;
}
@@ -1291,7 +1288,7 @@ public class FileUploader extends Service
public void addDatatransferProgressListener(
OnDatatransferProgressListener listener,
OCUpload ocUpload
- ) {
+ ) {
if (ocUpload == null || listener == null) {
return;
}
@@ -1311,7 +1308,7 @@ public class FileUploader extends Service
OnDatatransferProgressListener listener,
User user,
OCFile file
- ) {
+ ) {
if (user == null || file == null || listener == null) {
return;
}
@@ -1331,7 +1328,7 @@ public class FileUploader extends Service
public void removeDatatransferProgressListener(
OnDatatransferProgressListener listener,
OCUpload ocUpload
- ) {
+ ) {
if (ocUpload == null || listener == null) {
return;
}
@@ -1348,7 +1345,7 @@ public class FileUploader extends Service
long totalTransferredSoFar,
long totalToTransfer,
String fileName
- ) {
+ ) {
String key = buildRemoteName(mCurrentUpload.getUser().getAccountName(), mCurrentUpload.getFile().getRemotePath());
OnDatatransferProgressListener boundListener = mBoundListeners.get(key);
@@ -1373,7 +1370,7 @@ public class FileUploader extends Service
mCurrentUpload.getUser().getAccountName(),
mCurrentUpload.getFile().getRemotePath(),
cancelReason
- );
+ );
}
}
}
@@ -1444,11 +1441,13 @@ public class FileUploader extends Service
if (ACTION_CANCEL_BROADCAST.equals(action)) {
Log_OC.d(TAG, "Cancel broadcast received for file " + remotePath + " at " + System.currentTimeMillis());
- if (accountName == null || remotePath == null) return;
+ if (accountName == null || remotePath == null) {
+ return;
+ }
FileUploaderBinder uploadBinder = (FileUploaderBinder) mBinder;
uploadBinder.cancel(accountName, remotePath, null);
- }else if(ACTION_PAUSE_BROADCAST.equals(action)){
+ } else if (ACTION_PAUSE_BROADCAST.equals(action)) {
} else {
Log_OC.d(TAG, "Unknown action to perform as UploadNotificationActionReceiver.");
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 7a1b96cf4a..3d4aa776eb 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
@@ -66,6 +66,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.lib.resources.files.model.ServerFileInterface;
import com.owncloud.android.lib.resources.shares.OCShare;
import com.owncloud.android.lib.resources.shares.ShareType;
import com.owncloud.android.operations.CreateShareViaLinkOperation;
@@ -709,7 +710,7 @@ public abstract class FileActivity extends DrawerActivity
snackbar.show();
}
- public static void showShareLinkDialog(FileActivity activity, OCFile file, String link) {
+ public static void showShareLinkDialog(FileActivity activity, ServerFileInterface file, String link) {
// Create dialog to allow the user choose an app to send the link
Intent intentToShareLink = new Intent(Intent.ACTION_SEND);
@@ -780,9 +781,11 @@ public abstract class FileActivity extends DrawerActivity
}
public void refreshList() {
- final Fragment fileListFragment = getSupportFragmentManager().findFragmentByTag(FileDisplayActivity.TAG_LIST_OF_FILES);
- if (fileListFragment != null) {
- ((OCFileListFragment) fileListFragment).onRefresh();
+ final Fragment fragment = getSupportFragmentManager().findFragmentByTag(FileDisplayActivity.TAG_LIST_OF_FILES);
+ if (fragment instanceof OCFileListFragment listFragment) {
+ listFragment.onRefresh();
+ } else if (fragment instanceof FileDetailFragment detailFragment) {
+ detailFragment.goBackToOCFileListFragment();
}
}
@@ -864,8 +867,7 @@ public abstract class FileActivity extends DrawerActivity
if (fragment instanceof FileDetailSharingFragment) {
return (FileDetailSharingFragment) fragment;
- } else if (fragment instanceof FileDetailFragment) {
- FileDetailFragment fileDetailFragment = (FileDetailFragment) fragment;
+ } else if (fragment instanceof FileDetailFragment fileDetailFragment) {
return fileDetailFragment.getFileDetailSharingFragment();
} else {
return null;
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java
index 5b0908e037..11957f635b 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java
+++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java
@@ -844,7 +844,6 @@ public class FileDisplayActivity extends FileActivity
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-
if (requestCode == REQUEST_CODE__SELECT_CONTENT_FROM_APPS &&
(resultCode == RESULT_OK ||
resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)) {
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 5a16f99fb6..79ecee98d9 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
@@ -195,6 +195,10 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
return ((FileDetailTabAdapter) binding.pager.getAdapter()).getFileDetailActivitiesFragment();
}
+ public void goBackToOCFileListFragment() {
+ requireActivity().onBackPressed();
+ }
+
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml
index d065216c0d..0022382a96 100644
--- a/app/src/main/res/values-sk-rSK/strings.xml
+++ b/app/src/main/res/values-sk-rSK/strings.xml
@@ -18,6 +18,7 @@
Kopírovať
Nový priečinok
Presunúť
+ Presunúť alebo Kopírovať
Otvoriť pomocou
Hľadať
Podrobnosti
@@ -32,6 +33,7 @@
Aktivita
Pridať ďalší odkaz
Pridajte nový odkaz na verejné zdieľanie
+ Pridať nový zabezpečený file drop
Pridaj do %1$s
Rozšírené nastavenia
Povoliť sprístupňovanie ďalej
@@ -157,6 +159,8 @@
Lokálny súbor
Ak vyberiete obe verzie, miestny súbor bude mať k svojmu názvu pridané číslo.
Súbor na serveri
+ Záloha kontaktov
+ Vyžaduje sa prístup ku kontaktom
Používateľská ikona pre zoznam kontaktov
Žiadne povolenia neboli udelené, nič nebolo importnuté.
Kontakty
@@ -202,14 +206,21 @@
Nekontrolovať duplicity
Algoritmus digest nie je na vašom telefóne dostupný.
Prihlásenie pomocou priameho odkazu zlyhalo!
+ Prihlásiť sa s %1$s do %2$s
Zakázať
Odmietnuť
Odmietnuť upozornenie
Zobrazí vaše prístupové heslo o 12-tich slovách
Nerušiť
+ Viacero obrázkov
+ PDF súbor
+ Vyberte typ exportu
+ Generovanie PDF zlyhalo
+ Generuje sa PDF...
Hotové
Nemazať
Nieje možné vytvoriť lokálny súbor
+ Nesprávny názov pre lokálny súbor
Stiahnuť poslednú vývojársku verziu
Nepodarilo sa stiahnuť %1$s
Sťahovanie neúspešné, je potrebné sa znovu prihlásiť
@@ -227,6 +238,7 @@
Všetky súbory
Obľúbené
Média
+ Skupinové priečinky
Domov
Upozornenia
V zariadení
@@ -240,10 +252,14 @@
%1$s použitých
Automatické nahratie
E2E zatiaľ nie je nastavené
+ Nie je možné bez internetového pripojenia
Viac
Poznámky
Rozhovor
+ Ďalšie Nextcloud aplikácie
Nextcloud poznámky
+ Nextcloud Talk
+ Nepodarilo sa vybrať e-mailovú adresu.
Nastaviť ako zašifrované
Nastavenie šifrovania
Dešifrujem…
@@ -274,7 +290,9 @@
Nahlásiť chybu? (vyžaduje účet na Githube)
Chyba pri získavaní súboru
Chyba pri načítaní šablón
+ Chyba pri zobrazovaní dialogu nastavenia šifrovania!
Chyba pri otváraní fotoaparátu
+ Chyba pri spustení skenovania dokumentu
Účty
Názov úlohy
Pokrok
@@ -371,12 +389,14 @@
Názov súboru
Majte svoje dáta pod vlastnou kontrolou a zabezpečené
Bezpečná kolaborácia&výmena súborov
+ Jednoduchý webmail, kalendár & kontakty
Zdieľanie obrazovky, online meetingy & web konferencie
Priečinok už existuje
Vytvoriť
Nie sú tu žiadne priečinky
Vybrať
Vyberte cieľový priečinok
+ Kopírovať
Presunúť
Nemáte oprávnenie %s
kopírovať súbor
@@ -402,6 +422,19 @@
Ikona pre prázdny zoznam
Ikona widgetu na hlavnom paneli
Ikona položky ovládacieho panelu
+ upravené
+ Preklopiť horizontálne
+ Preklopiť vertikálne
+ Otočť v protismere hodinových ručičiek
+ Otočiť v smere hodinových ručičiek
+ Nie je možné upraviť obrázok
+ Detaily súboru
+ Podmienky snímania
+ ƒ/%s
+ ISO %s
+ %s MP
+ %s mm
+ %s s
v priečinku %1$s
Nahrať aj existujúce súbory
Nahrať iba počas nabíjania
@@ -429,6 +462,7 @@
Zamknuté od aplikácie %1$s
%1$s Android app logs
Aplikácia na odoslanie logov nenájdená. Prosím nainštalujte emailovú aplikáciu.
+ Prihlásený ako %1$s
Prihlásiť sa
Odkaz k vašemu %1$s webovému rozhraniu keď ho otvoríte v prehliadači.
Zmazať záznamy
@@ -481,6 +515,7 @@
Neexistuje žiadny kalendár
Aplikácia pre prácu s e-mailovými adresami nenájdená
Žiadne položky
+ Nie je dostupná žiadna aplikácia na spracovanie máp.
Povolený je iba jeden účet
Aplikácia na prácu s PDF nenájdená
Nie je k dispozícii žiadna aplikácia na odosielanie vybratých súborov
@@ -519,6 +554,7 @@
Bezpečnostný kód odstránený
Bezpečnostný kód uložený
Nesprávne heslo
+ Nepodarilo sa otvoriť heslom chránený PDF súbor. Prosím, použite externý PDF prehliadač.
Klepnutím na stránku priblížite
Povoliť
Odmietnuť
@@ -555,6 +591,7 @@
Viac
Denná záloha vašeho kalendára & kontaktov
Denná záloha vašich kontaktov
+ Neočakávaná chyba pri nastavovaní DAVx5 (predtým známy ako DAVdroid)
End-to-end šifrovanie je nastavené!
E2E mnemotechnické
Pre zobrazenie mnemotechnické, zapnite prihlasovacie údaje zariadenia.
@@ -565,7 +602,9 @@
Podmienky používania
Pôvodný súbor bude…
Pôvodný súbor bude…
+ Uložiť v podpriečinkoch podľa dátumu
Použi podpriečinky
+ Možnosti podpriečinka
Pridať end-to-end šifrovanie do tohto klienta
Licencia
Prístupový kód apky
@@ -579,6 +618,8 @@
Odporučiť priateľom
Lokálne odstrániť šifrovanie
Nastaviť šifrovanie end-to-end
+ Zobraziť prepínač aplikácií
+ Návrhy Nextcloud aplikácií v navigačnom záhlaví
Zobraziť skryté súbory
Získajte zdrojový kód
Priečinok dátového úložiska
@@ -606,7 +647,11 @@
Znovu načítať
(vzdialené)
Nepodarilo sa nájsť súbor
+ Môžete odstrániť end-to-end šifrovanie lokálne na tomto klientovi.
+ Môžete odstrániť end-to-end šifrovanie lokálne na tomto klientovi. Šifrované súbory zostanú na serveri, ale už nebudú synchronizované s týmto počítačom.
Zmazanie zlyhalo
+ Odstrániť lokálny účet
+ Odstrániť účet zo zariadenia a odstrániť všetky lokálne súbory
Odstránenie upozornenia zlyhalo.
Odstrániť
Zmazané
@@ -614,6 +659,8 @@
Nepodarilo sa premenovať lokálnu kópiu, skúste iné meno
Premenovanie sa nepodarilo, meno sa už používa
Žiadosť o zmazanie účtu
+ Žiadosť o zmazanie
+ Žiadosť o trvalé odstránenie účtu poskytovateľom
Opätovné sprístupňovanie nie je povolené
Sprístupnenie už sprístupnenej položky nie je povolené
Obrázok v inom rozlíšení nedostupný. Stiahnuť pôvodný obrázok?
@@ -624,6 +671,7 @@
Získava sa súbor…
Nepodarilo sa načítať dokument!
Prihlásiť sa pomocou QR kódu
+ Skenovať stránku
Chránte vaše údaje
Nástroje pre produktivitu s vlastným hosťovaním
Prehliadajte a zdieľajte
@@ -650,6 +698,7 @@
Použiť obrázok ako
Nastaviť stav
Nastaviť správu o stave
+ Počas nastavovania end-to-end šifrovania dostanete náhodný 12-slovový mnemotechnický záznam, ktorý budete potrebovať na otvorenie svojich súborov na iných zariadeniach. Tento záznam bude uložený iba na tomto zariadení a môže byť znovu zobrazený na tejto obrazovke. Prosím, zapíšte si ho na bezpečné miesto!
Zdieľať
Zdieľať & Kopírovať Odkaz
Sprístupnenie
@@ -674,6 +723,7 @@
Chránené heslom
Môže upravovať
Vložiť súbor
+ Zabezpečený file drop
Iba pre čítanie
Zdieľať oprávnenia
%1$s (vzdialený)
@@ -749,6 +799,8 @@
Vnútorné streamovanie nie je možné
Médium si namiesto toho stiahnite alebo použite externú aplikáciu.
Striktný mód: HTTP spojenie nie je povolené!
+ Rok/Mesiac/Deň
+ Rok/Mesiac
Rok
\"%1$s\" vám bol sprístupnený
%1$s vám sprístupnil \"%2$s\"
@@ -788,6 +840,7 @@
Náhľad
Náhľad existujúceho súboru
Náhľad nového súboru
+ Načítavanie trvá dlhšie ako sa očakávalo
Dnes
Zmazané súbory
Žiadne zmazané súbory
@@ -831,6 +884,7 @@
Uzamknutie priečinka zlyhalo
Šifrovanie je možné iba pri >= Android 5.0
Pre skopírovanie vybratých súborov do adresára %1$s nie je dostatok voľného miesta. Chcete ich namiesto toho presunúť?
+ Kapacita úložiska prekročená
Naskenujte dokument z fotoaparátu
Chyba synchronizácie, prosím vyriešte manuálne
Neznáma chyba
@@ -899,7 +953,9 @@
Počkajte chvíľu…
Overujem uložené prihlasovacie údaje
Kopírovanie súboru z privátneho úložiska
+ Pre prihlásenie prosím aktualizujte aplikáciu Android System WebView
Aktualizovať
+ Aktualizujte Android System WebView
Obrázok čo je nové
Preskočiť
Nové v %1$s
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index acd01625d1..f23fe21848 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -885,6 +885,7 @@
Misslyckades låsa mappen
Kryptering är endast möjlig med >= Android 5.0
Otillräckligt utrymme förhindrar kopiering av de valda filerna till %1$s -mappen. Vill du flytta dem dit i stället?
+ Lagringskvot överskriden
Slams dokument från kamera
Synkroniseringskonflikt, lös problemet manuellt
Okänt fel
diff --git a/scripts/analysis/lint-results.txt b/scripts/analysis/lint-results.txt
index a5b71a08f0..fa17990697 100644
--- a/scripts/analysis/lint-results.txt
+++ b/scripts/analysis/lint-results.txt
@@ -1,2 +1,2 @@
DO NOT TOUCH; GENERATED BY DRONE
- Lint Report: 9 errors and 75 warnings
+ Lint Report: 3 errors and 75 warnings