Эх сурвалжийг харах

Merge pull request #12287 from nextcloud/refactor/remove-deprecated-argument-passing

Replace Deprecated Argument Passing
Tobias Kaminsky 1 жил өмнө
parent
commit
f430bf18c5
83 өөрчлөгдсөн 317 нэмэгдсэн , 243 устгасан
  1. 0 2
      app/src/androidTest/java/com/nextcloud/client/AuthenticatorActivityIT.java
  2. 0 1
      app/src/androidTest/java/com/nextcloud/client/migrations/MockSharedPreferences.kt
  3. 0 1
      app/src/androidTest/java/com/nmc/android/ui/LauncherActivityIT.kt
  4. 0 1
      app/src/androidTest/java/com/owncloud/android/providers/FileContentProviderVerificationIT.kt
  5. 1 1
      app/src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java
  6. 0 1
      app/src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.java
  7. 0 1
      app/src/androidTest/java/com/owncloud/android/util/ErrorMessageAdapterIT.java
  8. 4 7
      app/src/main/java/com/nextcloud/client/files/downloader/FileTransferService.kt
  9. 0 1
      app/src/main/java/com/nextcloud/client/files/downloader/Registry.kt
  10. 5 3
      app/src/main/java/com/nextcloud/client/media/PlayerService.kt
  11. 0 1
      app/src/main/java/com/nextcloud/client/media/PlayerServiceConnection.kt
  12. 0 1
      app/src/main/java/com/nextcloud/client/network/NetworkModule.java
  13. 2 1
      app/src/main/java/com/nextcloud/ui/ChooseAccountDialogFragment.kt
  14. 6 5
      app/src/main/java/com/nextcloud/ui/ImageDetailFragment.kt
  15. 3 2
      app/src/main/java/com/nextcloud/ui/SetStatusDialogFragment.kt
  16. 2 1
      app/src/main/java/com/nextcloud/utils/extensions/BundleExtensions.kt
  17. 45 0
      app/src/main/java/com/nextcloud/utils/extensions/IntentExtensions.kt
  18. 5 1
      app/src/main/java/com/owncloud/android/authentication/AccountAuthenticatorActivity.java
  19. 15 9
      app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java
  20. 6 1
      app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java
  21. 0 1
      app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.java
  22. 0 1
      app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java
  23. 4 3
      app/src/main/java/com/owncloud/android/files/services/FileDownloader.java
  24. 5 3
      app/src/main/java/com/owncloud/android/files/services/FileUploader.java
  25. 0 1
      app/src/main/java/com/owncloud/android/operations/UpdateOCVersionOperation.java
  26. 7 5
      app/src/main/java/com/owncloud/android/services/OperationsService.java
  27. 0 1
      app/src/main/java/com/owncloud/android/ui/activities/data/activities/ActivitiesServiceApiImpl.java
  28. 1 1
      app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt
  29. 6 4
      app/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java
  30. 2 2
      app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java
  31. 2 1
      app/src/main/java/com/owncloud/android/ui/activity/ErrorsWhileCopyingHandlerActivity.java
  32. 5 3
      app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java
  33. 21 12
      app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java
  34. 2 1
      app/src/main/java/com/owncloud/android/ui/activity/ManageAccountsActivity.java
  35. 4 4
      app/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java
  36. 2 7
      app/src/main/java/com/owncloud/android/ui/activity/RichDocumentsEditorWebView.kt
  37. 2 1
      app/src/main/java/com/owncloud/android/ui/activity/SetupEncryptionActivity.kt
  38. 0 1
      app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.java
  39. 10 6
      app/src/main/java/com/owncloud/android/ui/activity/SsoGrantPermissionActivity.java
  40. 5 2
      app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt
  41. 0 1
      app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java
  42. 4 3
      app/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java
  43. 0 1
      app/src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java
  44. 0 1
      app/src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java
  45. 0 1
      app/src/main/java/com/owncloud/android/ui/adapter/ShareeListAdapter.java
  46. 0 1
      app/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java
  47. 0 1
      app/src/main/java/com/owncloud/android/ui/asynctasks/RichDocumentsLoadUrlTask.java
  48. 2 2
      app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.java
  49. 3 2
      app/src/main/java/com/owncloud/android/ui/dialog/ChooseTemplateDialogFragment.kt
  50. 7 7
      app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.java
  51. 3 2
      app/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.kt
  52. 3 2
      app/src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java
  53. 2 1
      app/src/main/java/com/owncloud/android/ui/dialog/RenamePublicShareDialogFragment.java
  54. 2 8
      app/src/main/java/com/owncloud/android/ui/dialog/SendShareDialog.kt
  55. 2 7
      app/src/main/java/com/owncloud/android/ui/dialog/SetupEncryptionDialogFragment.kt
  56. 3 2
      app/src/main/java/com/owncloud/android/ui/dialog/ShareLinkToDialog.java
  57. 3 14
      app/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.kt
  58. 2 8
      app/src/main/java/com/owncloud/android/ui/dialog/SyncFileNotEnoughSpaceDialogFragment.kt
  59. 2 7
      app/src/main/java/com/owncloud/android/ui/dialog/SyncedFolderPreferencesDialogFragment.kt
  60. 0 1
      app/src/main/java/com/owncloud/android/ui/dialog/parcel/SyncedFolderParcelable.java
  61. 6 1
      app/src/main/java/com/owncloud/android/ui/fragment/FeatureFragment.java
  62. 5 4
      app/src/main/java/com/owncloud/android/ui/fragment/FileDetailActivitiesFragment.java
  63. 6 5
      app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java
  64. 6 4
      app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java
  65. 4 1
      app/src/main/java/com/owncloud/android/ui/fragment/FileFragment.java
  66. 4 3
      app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java
  67. 16 13
      app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java
  68. 4 3
      app/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/BackupListFragment.java
  69. 0 1
      app/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/BackupListHeaderViewHolder.kt
  70. 5 4
      app/src/main/java/com/owncloud/android/ui/preview/FileDownloadFragment.java
  71. 3 2
      app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.java
  72. 3 2
      app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java
  73. 5 6
      app/src/main/java/com/owncloud/android/ui/preview/PreviewMediaFragment.java
  74. 5 4
      app/src/main/java/com/owncloud/android/ui/preview/PreviewTextFileFragment.java
  75. 2 1
      app/src/main/java/com/owncloud/android/ui/preview/pdf/PreviewPdfFragment.kt
  76. 0 1
      app/src/main/java/com/owncloud/android/utils/DisplayUtils.java
  77. 23 4
      app/src/main/java/com/owncloud/android/utils/FileStorageUtils.java
  78. 0 4
      app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java
  79. 5 1
      app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt
  80. 4 3
      app/src/main/java/com/owncloud/android/utils/theme/ThemeUtils.java
  81. 0 1
      app/src/main/res/layout/dialog_scan_export_type.xml
  82. 0 1
      app/src/test/java/com/owncloud/android/ui/activity/SyncedFoldersActivityTest.java
  83. 1 1
      scripts/analysis/lint-results.txt

+ 0 - 2
app/src/androidTest/java/com/nextcloud/client/AuthenticatorActivityIT.java

@@ -34,8 +34,6 @@ import org.junit.rules.TestRule;
 
 
 import androidx.test.espresso.intent.rule.IntentsTestRule;
 import androidx.test.espresso.intent.rule.IntentsTestRule;
 
 
-import static androidx.test.espresso.matcher.ViewMatchers.withId;
-
 
 
 public class AuthenticatorActivityIT extends AbstractIT {
 public class AuthenticatorActivityIT extends AbstractIT {
     private static final String URL = "cloud.nextcloud.com";
     private static final String URL = "cloud.nextcloud.com";

+ 0 - 1
app/src/androidTest/java/com/nextcloud/client/migrations/MockSharedPreferences.kt

@@ -20,7 +20,6 @@
 package com.nextcloud.client.migrations
 package com.nextcloud.client.migrations
 
 
 import android.content.SharedPreferences
 import android.content.SharedPreferences
-import java.lang.UnsupportedOperationException
 import java.util.TreeMap
 import java.util.TreeMap
 
 
 /**
 /**

+ 0 - 1
app/src/androidTest/java/com/nmc/android/ui/LauncherActivityIT.kt

@@ -34,7 +34,6 @@ import com.owncloud.android.R
 import org.junit.Rule
 import org.junit.Rule
 import org.junit.Test
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runner.RunWith
-import org.mockito.AdditionalMatchers.not
 
 
 @RunWith(AndroidJUnit4::class)
 @RunWith(AndroidJUnit4::class)
 class LauncherActivityIT : AbstractIT() {
 class LauncherActivityIT : AbstractIT() {

+ 0 - 1
app/src/androidTest/java/com/owncloud/android/providers/FileContentProviderVerificationIT.kt

@@ -25,7 +25,6 @@ import android.content.ContentValues
 import com.owncloud.android.db.ProviderMeta
 import com.owncloud.android.db.ProviderMeta
 import com.owncloud.android.utils.MimeTypeUtil
 import com.owncloud.android.utils.MimeTypeUtil
 import org.junit.Test
 import org.junit.Test
-import java.lang.IllegalArgumentException
 
 
 @Suppress("FunctionNaming")
 @Suppress("FunctionNaming")
 class FileContentProviderVerificationIT {
 class FileContentProviderVerificationIT {

+ 1 - 1
app/src/androidTest/java/com/owncloud/android/ui/activity/DrawerActivityIT.java

@@ -27,10 +27,10 @@ import android.accounts.AccountManager;
 import android.net.Uri;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Bundle;
 
 
-import com.nextcloud.test.RetryTestRule;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.account.UserAccountManagerImpl;
 import com.nextcloud.client.account.UserAccountManagerImpl;
+import com.nextcloud.test.RetryTestRule;
 import com.owncloud.android.AbstractIT;
 import com.owncloud.android.AbstractIT;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;

+ 0 - 1
app/src/androidTest/java/com/owncloud/android/ui/dialog/DialogFragmentIT.java

@@ -92,7 +92,6 @@ import androidx.activity.result.contract.ActivityResultContract;
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.DialogFragment;
 import androidx.test.espresso.intent.rule.IntentsTestRule;
 import androidx.test.espresso.intent.rule.IntentsTestRule;
-import androidx.test.rule.GrantPermissionRule;
 import kotlin.Unit;
 import kotlin.Unit;
 
 
 import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
 import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;

+ 0 - 1
app/src/androidTest/java/com/owncloud/android/util/ErrorMessageAdapterIT.java

@@ -21,7 +21,6 @@
 
 
 package com.owncloud.android.util;
 package com.owncloud.android.util;
 
 
-import android.accounts.Account;
 import android.content.Context;
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.Resources;
 
 

+ 4 - 7
app/src/main/java/com/nextcloud/client/files/downloader/FileTransferService.kt

@@ -32,6 +32,7 @@ import com.nextcloud.client.network.ClientFactory
 import com.nextcloud.client.network.ConnectivityService
 import com.nextcloud.client.network.ConnectivityService
 import com.nextcloud.client.notifications.AppNotificationManager
 import com.nextcloud.client.notifications.AppNotificationManager
 import com.nextcloud.utils.ForegroundServiceHelper
 import com.nextcloud.utils.ForegroundServiceHelper
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.datamodel.FileDataStorageManager
 import com.owncloud.android.datamodel.FileDataStorageManager
 import com.owncloud.android.datamodel.ForegroundServiceType
 import com.owncloud.android.datamodel.ForegroundServiceType
 import com.owncloud.android.datamodel.UploadsStorageManager
 import com.owncloud.android.datamodel.UploadsStorageManager
@@ -117,7 +118,7 @@ class FileTransferService : Service() {
             )
             )
         }
         }
 
 
-        val request: Request = intent.getParcelableExtra(EXTRA_REQUEST)!!
+        val request: Request = intent.getParcelableArgument(EXTRA_REQUEST, Request::class.java)!!
         val transferManager = getTransferManager(request.user)
         val transferManager = getTransferManager(request.user)
         transferManager.enqueue(request)
         transferManager.enqueue(request)
 
 
@@ -127,12 +128,8 @@ class FileTransferService : Service() {
     }
     }
 
 
     override fun onBind(intent: Intent?): IBinder? {
     override fun onBind(intent: Intent?): IBinder? {
-        val user = intent?.getParcelableExtra<User>(EXTRA_USER)
-        if (user != null) {
-            return Binder(getTransferManager(user), this)
-        } else {
-            return null
-        }
+        val user = intent?.getParcelableArgument(EXTRA_USER, User::class.java) ?: return null
+        return Binder(getTransferManager(user), this)
     }
     }
 
 
     private fun onTransferUpdate(transfer: Transfer) {
     private fun onTransferUpdate(transfer: Transfer) {

+ 0 - 1
app/src/main/java/com/nextcloud/client/files/downloader/Registry.kt

@@ -20,7 +20,6 @@
 package com.nextcloud.client.files.downloader
 package com.nextcloud.client.files.downloader
 
 
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.datamodel.OCFile
-import java.util.LinkedHashMap
 import java.util.UUID
 import java.util.UUID
 import kotlin.math.max
 import kotlin.math.max
 import kotlin.math.min
 import kotlin.math.min

+ 5 - 3
app/src/main/java/com/nextcloud/client/media/PlayerService.kt

@@ -32,6 +32,7 @@ import androidx.core.app.NotificationCompat
 import com.nextcloud.client.account.User
 import com.nextcloud.client.account.User
 import com.nextcloud.client.network.ClientFactory
 import com.nextcloud.client.network.ClientFactory
 import com.nextcloud.utils.ForegroundServiceHelper
 import com.nextcloud.utils.ForegroundServiceHelper
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.datamodel.ForegroundServiceType
 import com.owncloud.android.datamodel.ForegroundServiceType
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.datamodel.OCFile
@@ -144,8 +145,8 @@ class PlayerService : Service() {
     }
     }
 
 
     private fun onActionPlay(intent: Intent) {
     private fun onActionPlay(intent: Intent) {
-        val user: User = intent.getParcelableExtra(EXTRA_USER)!!
-        val file: OCFile = intent.getParcelableExtra(EXTRA_FILE)!!
+        val user: User = intent.getParcelableArgument(EXTRA_USER, User::class.java)!!
+        val file: OCFile = intent.getParcelableArgument(EXTRA_FILE, OCFile::class.java)!!
         val startPos = intent.getLongExtra(EXTRA_START_POSITION_MS, 0)
         val startPos = intent.getLongExtra(EXTRA_START_POSITION_MS, 0)
         val autoPlay = intent.getBooleanExtra(EXTRA_AUTO_PLAY, true)
         val autoPlay = intent.getBooleanExtra(EXTRA_AUTO_PLAY, true)
         val item = PlaylistItem(file = file, startPositionMs = startPos, autoPlay = autoPlay, user = user)
         val item = PlaylistItem(file = file, startPositionMs = startPos, autoPlay = autoPlay, user = user)
@@ -157,7 +158,8 @@ class PlayerService : Service() {
     }
     }
 
 
     private fun onActionStopFile(args: Bundle?) {
     private fun onActionStopFile(args: Bundle?) {
-        val file: OCFile = args?.getParcelable(EXTRA_FILE) ?: throw IllegalArgumentException("Missing file argument")
+        val file: OCFile = args?.getParcelableArgument(EXTRA_FILE, OCFile::class.java)
+            ?: throw IllegalArgumentException("Missing file argument")
         stopServiceAndRemoveNotification(file)
         stopServiceAndRemoveNotification(file)
     }
     }
 
 

+ 0 - 1
app/src/main/java/com/nextcloud/client/media/PlayerServiceConnection.kt

@@ -28,7 +28,6 @@ import android.os.IBinder
 import android.widget.MediaController
 import android.widget.MediaController
 import com.nextcloud.client.account.User
 import com.nextcloud.client.account.User
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.datamodel.OCFile
-import java.lang.IllegalStateException
 
 
 @Suppress("TooManyFunctions") // implementing large interface
 @Suppress("TooManyFunctions") // implementing large interface
 class PlayerServiceConnection(private val context: Context) : MediaController.MediaPlayerControl {
 class PlayerServiceConnection(private val context: Context) : MediaController.MediaPlayerControl {

+ 0 - 1
app/src/main/java/com/nextcloud/client/network/NetworkModule.java

@@ -22,7 +22,6 @@ package com.nextcloud.client.network;
 
 
 import android.content.Context;
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.ConnectivityManager;
-import android.os.Build;
 
 
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.account.UserAccountManager;
 
 

+ 2 - 1
app/src/main/java/com/nextcloud/ui/ChooseAccountDialogFragment.kt

@@ -35,6 +35,7 @@ import com.nextcloud.client.account.User
 import com.nextcloud.client.account.UserAccountManager
 import com.nextcloud.client.account.UserAccountManager
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.network.ClientFactory
 import com.nextcloud.client.network.ClientFactory
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.databinding.DialogChooseAccountBinding
 import com.owncloud.android.databinding.DialogChooseAccountBinding
 import com.owncloud.android.datamodel.FileDataStorageManager
 import com.owncloud.android.datamodel.FileDataStorageManager
@@ -76,7 +77,7 @@ class ChooseAccountDialogFragment :
     override fun onCreate(savedInstanceState: Bundle?) {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         super.onCreate(savedInstanceState)
         arguments?.let {
         arguments?.let {
-            currentUser = it.getParcelable(ARG_CURRENT_USER_PARAM)
+            currentUser = it.getParcelableArgument(ARG_CURRENT_USER_PARAM, User::class.java)
         }
         }
     }
     }
 
 

+ 6 - 5
app/src/main/java/com/nextcloud/ui/ImageDetailFragment.kt

@@ -37,6 +37,7 @@ import com.nextcloud.android.common.ui.theme.utils.ColorRole
 import com.nextcloud.client.NominatimClient
 import com.nextcloud.client.NominatimClient
 import com.nextcloud.client.account.User
 import com.nextcloud.client.account.User
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.di.Injectable
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.MainApp
 import com.owncloud.android.MainApp
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.databinding.PreviewImageDetailsFragmentBinding
 import com.owncloud.android.databinding.PreviewImageDetailsFragmentBinding
@@ -95,13 +96,13 @@ class ImageDetailFragment : Fragment(), Injectable {
         )
         )
 
 
         val arguments = arguments ?: throw IllegalStateException("arguments are mandatory")
         val arguments = arguments ?: throw IllegalStateException("arguments are mandatory")
-        file = arguments.getParcelable(ARG_FILE)!!
-        user = arguments.getParcelable(ARG_USER)!!
+        file = arguments.getParcelableArgument(ARG_FILE, OCFile::class.java)!!
+        user = arguments.getParcelableArgument(ARG_USER, User::class.java)!!
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
-            file = savedInstanceState.getParcelable(ARG_FILE)!!
-            user = savedInstanceState.getParcelable(ARG_USER)!!
-            metadata = savedInstanceState.getParcelable(ARG_METADATA)!!
+            file = savedInstanceState.getParcelableArgument(ARG_FILE, OCFile::class.java)!!
+            user = savedInstanceState.getParcelableArgument(ARG_USER, User::class.java)!!
+            metadata = savedInstanceState.getParcelableArgument(ARG_METADATA, ImageMetadata::class.java)!!
         }
         }
 
 
         nominatimClient = NominatimClient(
         nominatimClient = NominatimClient(

+ 3 - 2
app/src/main/java/com/nextcloud/ui/SetStatusDialogFragment.kt

@@ -46,6 +46,7 @@ import com.nextcloud.client.account.UserAccountManager
 import com.nextcloud.client.core.AsyncRunner
 import com.nextcloud.client.core.AsyncRunner
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.network.ClientFactory
 import com.nextcloud.client.network.ClientFactory
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.databinding.DialogSetStatusBinding
 import com.owncloud.android.databinding.DialogSetStatusBinding
 import com.owncloud.android.datamodel.ArbitraryDataProvider
 import com.owncloud.android.datamodel.ArbitraryDataProvider
@@ -119,8 +120,8 @@ class SetStatusDialogFragment :
     override fun onCreate(savedInstanceState: Bundle?) {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         super.onCreate(savedInstanceState)
         arguments?.let {
         arguments?.let {
-            currentUser = it.getParcelable(ARG_CURRENT_USER_PARAM)
-            currentStatus = it.getParcelable(ARG_CURRENT_STATUS_PARAM)
+            currentUser = it.getParcelableArgument(ARG_CURRENT_USER_PARAM, User::class.java)
+            currentStatus = it.getParcelableArgument(ARG_CURRENT_STATUS_PARAM, Status::class.java)
 
 
             val json = arbitraryDataProvider.getValue(currentUser, ArbitraryDataProvider.PREDEFINED_STATUS)
             val json = arbitraryDataProvider.getValue(currentUser, ArbitraryDataProvider.PREDEFINED_STATUS)
 
 

+ 2 - 1
app/src/main/java/com/nextcloud/utils/extensions/BundleExtensions.kt

@@ -30,7 +30,7 @@ fun <T : Serializable?> Bundle.getSerializableArgument(key: String, type: Class<
     return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
     return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
         this.getSerializable(key, type)
         this.getSerializable(key, type)
     } else {
     } else {
-        @Suppress("UNCHECKED_CAST")
+        @Suppress("UNCHECKED_CAST", "DEPRECATION")
         this.getSerializable(key) as T
         this.getSerializable(key) as T
     }
     }
 }
 }
@@ -39,6 +39,7 @@ fun <T : Parcelable?> Bundle.getParcelableArgument(key: String, type: Class<T>):
     return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
     return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
         this.getParcelable(key, type)
         this.getParcelable(key, type)
     } else {
     } else {
+        @Suppress("DEPRECATION")
         this.getParcelable(key)
         this.getParcelable(key)
     }
     }
 }
 }

+ 45 - 0
app/src/main/java/com/nextcloud/utils/extensions/IntentExtensions.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 <https://www.gnu.org/licenses/>.
+ */
+
+package com.nextcloud.utils.extensions
+
+import android.content.Intent
+import android.os.Build
+import android.os.Parcelable
+import java.io.Serializable
+
+fun <T : Serializable?> Intent.getSerializableArgument(key: String, type: Class<T>): T? {
+    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+        this.getSerializableExtra(key, type)
+    } else {
+        @Suppress("UNCHECKED_CAST", "DEPRECATION")
+        this.getSerializableExtra(key) as T
+    }
+}
+
+fun <T : Parcelable?> Intent.getParcelableArgument(key: String, type: Class<T>): T? {
+    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+        this.getParcelableExtra(key, type)
+    } else {
+        @Suppress("DEPRECATION")
+        this.getParcelableExtra(key)
+    }
+}

+ 5 - 1
app/src/main/java/com/owncloud/android/authentication/AccountAuthenticatorActivity.java

@@ -20,6 +20,8 @@ import android.accounts.AccountAuthenticatorResponse;
 import android.accounts.AccountManager;
 import android.accounts.AccountManager;
 import android.os.Bundle;
 import android.os.Bundle;
 
 
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
+
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.appcompat.app.AppCompatActivity;
 
 
 /*
 /*
@@ -59,7 +61,9 @@ public abstract class AccountAuthenticatorActivity extends AppCompatActivity {
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
 
 
         mAccountAuthenticatorResponse =
         mAccountAuthenticatorResponse =
-                getIntent().getParcelableExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE);
+            IntentExtensionsKt.getParcelableArgument(getIntent(),
+                                                     AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE,
+                                                     AccountAuthenticatorResponse.class);
 
 
         if (mAccountAuthenticatorResponse != null) {
         if (mAccountAuthenticatorResponse != null) {
             mAccountAuthenticatorResponse.onRequestContinued();
             mAccountAuthenticatorResponse.onRequestContinued();

+ 15 - 9
app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java

@@ -60,6 +60,7 @@ import android.os.Bundle;
 import android.os.Handler;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.IBinder;
 import android.preference.PreferenceManager;
 import android.preference.PreferenceManager;
+import android.text.Editable;
 import android.text.TextUtils;
 import android.text.TextUtils;
 import android.util.AndroidRuntimeException;
 import android.util.AndroidRuntimeException;
 import android.view.KeyEvent;
 import android.view.KeyEvent;
@@ -86,6 +87,7 @@ import com.nextcloud.client.onboarding.FirstRunActivity;
 import com.nextcloud.client.onboarding.OnboardingService;
 import com.nextcloud.client.onboarding.OnboardingService;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.java.util.Optional;
 import com.nextcloud.java.util.Optional;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.AccountSetupBinding;
 import com.owncloud.android.databinding.AccountSetupBinding;
@@ -142,6 +144,7 @@ import androidx.annotation.ColorInt;
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.ActionBar;
 import androidx.core.content.ContextCompat;
 import androidx.core.content.ContextCompat;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.Fragment;
@@ -284,11 +287,12 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
 
 
         // Workaround, for fixing a problem with Android Library Support v7 19
         // Workaround, for fixing a problem with Android Library Support v7 19
         //getWindow().requestFeature(Window.FEATURE_NO_TITLE);
         //getWindow().requestFeature(Window.FEATURE_NO_TITLE);
-        if (getSupportActionBar() != null) {
-            getSupportActionBar().hide();
-            getSupportActionBar().setDisplayHomeAsUpEnabled(false);
-            getSupportActionBar().setDisplayShowHomeEnabled(false);
-            getSupportActionBar().setDisplayShowTitleEnabled(false);
+        ActionBar actionBar = getSupportActionBar();
+        if (actionBar != null) {
+            actionBar.hide();
+            actionBar.setDisplayHomeAsUpEnabled(false);
+            actionBar.setDisplayShowHomeEnabled(false);
+            actionBar.setDisplayShowTitleEnabled(false);
         }
         }
 
 
         mIsFirstAuthAttempt = true;
         mIsFirstAuthAttempt = true;
@@ -302,7 +306,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
         Bundle extras = getIntent().getExtras();
         Bundle extras = getIntent().getExtras();
 
 
         if (extras != null) {
         if (extras != null) {
-            mAccount = extras.getParcelable(EXTRA_ACCOUNT);
+            mAccount = BundleExtensionsKt.getParcelableArgument(extras, EXTRA_ACCOUNT, Account.class);
         }
         }
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
@@ -763,9 +767,11 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
 
 
     private void checkOcServer() {
     private void checkOcServer() {
         String uri;
         String uri;
-        if (accountSetupBinding != null && accountSetupBinding.hostUrlInput.getText() != null &&
-            !accountSetupBinding.hostUrlInput.getText().toString().isEmpty()) {
-            uri = accountSetupBinding.hostUrlInput.getText().toString().trim();
+        Editable hostUrlInput = accountSetupBinding.hostUrlInput.getText();
+
+        if (accountSetupBinding != null && hostUrlInput != null &&
+            !hostUrlInput.toString().isEmpty()) {
+            uri = hostUrlInput.toString().trim();
         } else {
         } else {
             uri = mServerInfo.mBaseUrl;
             uri = mServerInfo.mBaseUrl;
         }
         }

+ 6 - 1
app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java

@@ -1208,7 +1208,12 @@ public class FileDataStorageManager {
         ContentValues contentValues = new ContentValues();
         ContentValues contentValues = new ContentValues();
         contentValues.put(ProviderTableMeta.OCSHARES_FILE_SOURCE, share.getFileSource());
         contentValues.put(ProviderTableMeta.OCSHARES_FILE_SOURCE, share.getFileSource());
         contentValues.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE, share.getItemSource());
         contentValues.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE, share.getItemSource());
-        contentValues.put(ProviderTableMeta.OCSHARES_SHARE_TYPE, share.getShareType().getValue());
+
+        ShareType shareType = share.getShareType();
+        if (shareType != null) {
+            contentValues.put(ProviderTableMeta.OCSHARES_SHARE_TYPE, shareType.getValue());
+        }
+
         contentValues.put(ProviderTableMeta.OCSHARES_SHARE_WITH, share.getShareWith());
         contentValues.put(ProviderTableMeta.OCSHARES_SHARE_WITH, share.getShareWith());
         contentValues.put(ProviderTableMeta.OCSHARES_PATH, share.getPath());
         contentValues.put(ProviderTableMeta.OCSHARES_PATH, share.getPath());
         contentValues.put(ProviderTableMeta.OCSHARES_PERMISSIONS, share.getPermissions());
         contentValues.put(ProviderTableMeta.OCSHARES_PERMISSIONS, share.getPermissions());

+ 0 - 1
app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.java

@@ -20,7 +20,6 @@
  */
  */
 package com.owncloud.android.datamodel;
 package com.owncloud.android.datamodel;
 
 
-import android.accounts.Account;
 import android.content.ContentResolver;
 import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Context;

+ 0 - 1
app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java

@@ -83,7 +83,6 @@ import java.util.List;
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import androidx.annotation.VisibleForTesting;
-import androidx.core.content.ContextCompat;
 import androidx.core.content.res.ResourcesCompat;
 import androidx.core.content.res.ResourcesCompat;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import kotlin.text.Charsets;
 import kotlin.text.Charsets;

+ 4 - 3
app/src/main/java/com/owncloud/android/files/services/FileDownloader.java

@@ -43,6 +43,7 @@ import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.files.downloader.DownloadTask;
 import com.nextcloud.client.files.downloader.DownloadTask;
 import com.nextcloud.java.util.Optional;
 import com.nextcloud.java.util.Optional;
 import com.nextcloud.utils.ForegroundServiceHelper;
 import com.nextcloud.utils.ForegroundServiceHelper;
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AuthenticatorActivity;
 import com.owncloud.android.authentication.AuthenticatorActivity;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.FileDataStorageManager;
@@ -208,13 +209,13 @@ public class FileDownloader extends Service
             Log_OC.e(TAG, "Not enough information provided in intent");
             Log_OC.e(TAG, "Not enough information provided in intent");
             return START_NOT_STICKY;
             return START_NOT_STICKY;
         } else {
         } else {
-            final User user = intent.getParcelableExtra(EXTRA_USER);
-            final OCFile file = intent.getParcelableExtra(EXTRA_FILE);
+            final User user = IntentExtensionsKt.getParcelableArgument(intent, EXTRA_USER, User.class);
+            final OCFile file = IntentExtensionsKt.getParcelableArgument(intent, EXTRA_FILE, OCFile.class);
             final String behaviour = intent.getStringExtra(OCFileListFragment.DOWNLOAD_BEHAVIOUR);
             final String behaviour = intent.getStringExtra(OCFileListFragment.DOWNLOAD_BEHAVIOUR);
 
 
             DownloadType downloadType = DownloadType.DOWNLOAD;
             DownloadType downloadType = DownloadType.DOWNLOAD;
             if (intent.hasExtra(DOWNLOAD_TYPE)) {
             if (intent.hasExtra(DOWNLOAD_TYPE)) {
-                downloadType = (DownloadType) intent.getSerializableExtra(DOWNLOAD_TYPE);
+                downloadType = IntentExtensionsKt.getSerializableArgument(intent, DOWNLOAD_TYPE, DownloadType.class);
             }
             }
             String activityName = intent.getStringExtra(SendShareDialog.ACTIVITY_NAME);
             String activityName = intent.getStringExtra(SendShareDialog.ACTIVITY_NAME);
             String packageName = intent.getStringExtra(SendShareDialog.PACKAGE_NAME);
             String packageName = intent.getStringExtra(SendShareDialog.PACKAGE_NAME);

+ 5 - 3
app/src/main/java/com/owncloud/android/files/services/FileUploader.java

@@ -59,6 +59,7 @@ import com.nextcloud.client.network.ConnectivityService;
 import com.nextcloud.client.utils.FileUploaderDelegate;
 import com.nextcloud.client.utils.FileUploaderDelegate;
 import com.nextcloud.java.util.Optional;
 import com.nextcloud.java.util.Optional;
 import com.nextcloud.utils.ForegroundServiceHelper;
 import com.nextcloud.utils.ForegroundServiceHelper;
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AuthenticatorActivity;
 import com.owncloud.android.authentication.AuthenticatorActivity;
@@ -329,7 +330,7 @@ public class FileUploader extends Service
             return Service.START_NOT_STICKY;
             return Service.START_NOT_STICKY;
         }
         }
 
 
-        final Account account = intent.getParcelableExtra(KEY_ACCOUNT);
+        final Account account = IntentExtensionsKt.getParcelableArgument(intent, KEY_ACCOUNT, Account.class);
         if (account == null) {
         if (account == null) {
             return Service.START_NOT_STICKY;
             return Service.START_NOT_STICKY;
         }
         }
@@ -436,7 +437,7 @@ public class FileUploader extends Service
         }
         }
         // at this point variable "OCFile[] files" is loaded correctly.
         // at this point variable "OCFile[] files" is loaded correctly.
 
 
-        NameCollisionPolicy nameCollisionPolicy = (NameCollisionPolicy) intent.getSerializableExtra(KEY_NAME_COLLISION_POLICY);
+        NameCollisionPolicy nameCollisionPolicy = IntentExtensionsKt.getSerializableArgument(intent, KEY_NAME_COLLISION_POLICY, NameCollisionPolicy.class);
         if (nameCollisionPolicy == null) {
         if (nameCollisionPolicy == null) {
             nameCollisionPolicy = NameCollisionPolicy.DEFAULT;
             nameCollisionPolicy = NameCollisionPolicy.DEFAULT;
         }
         }
@@ -543,7 +544,8 @@ public class FileUploader extends Service
     private void retryUploads(Intent intent, User user, List<String> requestedUploads) {
     private void retryUploads(Intent intent, User user, List<String> requestedUploads) {
         boolean onWifiOnly;
         boolean onWifiOnly;
         boolean whileChargingOnly;
         boolean whileChargingOnly;
-        OCUpload upload = intent.getParcelableExtra(KEY_RETRY_UPLOAD);
+
+        OCUpload upload = IntentExtensionsKt.getParcelableArgument(intent, KEY_RETRY_UPLOAD, OCUpload.class);
 
 
         onWifiOnly = upload.isUseWifiOnly();
         onWifiOnly = upload.isUseWifiOnly();
         whileChargingOnly = upload.isWhileChargingOnly();
         whileChargingOnly = upload.isWhileChargingOnly();

+ 0 - 1
app/src/main/java/com/owncloud/android/operations/UpdateOCVersionOperation.java

@@ -20,7 +20,6 @@
 
 
 package com.owncloud.android.operations;
 package com.owncloud.android.operations;
 
 
-import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.AccountManager;
 import android.content.Context;
 import android.content.Context;
 
 

+ 7 - 5
app/src/main/java/com/owncloud/android/services/OperationsService.java

@@ -42,6 +42,7 @@ import android.util.Pair;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.java.util.Optional;
 import com.nextcloud.java.util.Optional;
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
@@ -190,7 +191,8 @@ public class OperationsService extends Service {
                 Log_OC.e(TAG, "Not enough information provided in intent");
                 Log_OC.e(TAG, "Not enough information provided in intent");
                 return START_NOT_STICKY;
                 return START_NOT_STICKY;
             }
             }
-            Account account = intent.getParcelableExtra(EXTRA_ACCOUNT);
+
+            Account account = IntentExtensionsKt.getParcelableArgument(intent, EXTRA_ACCOUNT, Account.class);
             String remotePath = intent.getStringExtra(EXTRA_REMOTE_PATH);
             String remotePath = intent.getStringExtra(EXTRA_REMOTE_PATH);
 
 
             Pair<Account, String> itemSyncKey = new Pair<>(account, remotePath);
             Pair<Account, String> itemSyncKey = new Pair<>(account, remotePath);
@@ -497,7 +499,7 @@ public class OperationsService extends Service {
                 Log_OC.e(TAG, "Not enough information provided in intent");
                 Log_OC.e(TAG, "Not enough information provided in intent");
 
 
             } else {
             } else {
-                Account account = operationIntent.getParcelableExtra(EXTRA_ACCOUNT);
+                Account account = IntentExtensionsKt.getParcelableArgument(operationIntent, EXTRA_ACCOUNT, Account.class);
                 User user = toUser(account);
                 User user = toUser(account);
                 String serverUrl = operationIntent.getStringExtra(EXTRA_SERVER_URL);
                 String serverUrl = operationIntent.getStringExtra(EXTRA_SERVER_URL);
                 target = new Target(account, (serverUrl == null) ? null : Uri.parse(serverUrl));
                 target = new Target(account, (serverUrl == null) ? null : Uri.parse(serverUrl));
@@ -590,7 +592,7 @@ public class OperationsService extends Service {
                     case ACTION_CREATE_SHARE_WITH_SHAREE:
                     case ACTION_CREATE_SHARE_WITH_SHAREE:
                         remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
                         remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH);
                         String shareeName = operationIntent.getStringExtra(EXTRA_SHARE_WITH);
                         String shareeName = operationIntent.getStringExtra(EXTRA_SHARE_WITH);
-                        shareType = (ShareType) operationIntent.getSerializableExtra(EXTRA_SHARE_TYPE);
+                        shareType = IntentExtensionsKt.getSerializableArgument(operationIntent, EXTRA_SHARE_TYPE, ShareType.class);
                         int permissions = operationIntent.getIntExtra(EXTRA_SHARE_PERMISSIONS, -1);
                         int permissions = operationIntent.getIntExtra(EXTRA_SHARE_PERMISSIONS, -1);
                         String noteMessage = operationIntent.getStringExtra(EXTRA_SHARE_NOTE);
                         String noteMessage = operationIntent.getStringExtra(EXTRA_SHARE_NOTE);
                         String sharePassword = operationIntent.getStringExtra(EXTRA_SHARE_PASSWORD);
                         String sharePassword = operationIntent.getStringExtra(EXTRA_SHARE_PASSWORD);
@@ -672,7 +674,7 @@ public class OperationsService extends Service {
 
 
                     case ACTION_REMOVE:
                     case ACTION_REMOVE:
                         // Remove file or folder
                         // Remove file or folder
-                        OCFile file = operationIntent.getParcelableExtra(EXTRA_FILE);
+                        OCFile file = IntentExtensionsKt.getParcelableArgument(operationIntent, EXTRA_FILE, OCFile.class);
                         boolean onlyLocalCopy = operationIntent.getBooleanExtra(EXTRA_REMOVE_ONLY_LOCAL, false);
                         boolean onlyLocalCopy = operationIntent.getBooleanExtra(EXTRA_REMOVE_ONLY_LOCAL, false);
                         boolean inBackground = operationIntent.getBooleanExtra(EXTRA_IN_BACKGROUND, false);
                         boolean inBackground = operationIntent.getBooleanExtra(EXTRA_IN_BACKGROUND, false);
                         operation = new RemoveFileOperation(file,
                         operation = new RemoveFileOperation(file,
@@ -729,7 +731,7 @@ public class OperationsService extends Service {
                         break;
                         break;
 
 
                     case ACTION_RESTORE_VERSION:
                     case ACTION_RESTORE_VERSION:
-                        FileVersion fileVersion = operationIntent.getParcelableExtra(EXTRA_FILE_VERSION);
+                        FileVersion fileVersion = IntentExtensionsKt.getParcelableArgument(operationIntent, EXTRA_FILE_VERSION, FileVersion.class);
                         operation = new RestoreFileVersionRemoteOperation(fileVersion.getLocalId(),
                         operation = new RestoreFileVersionRemoteOperation(fileVersion.getLocalId(),
                                                                           fileVersion.getFileName());
                                                                           fileVersion.getFileName());
                         break;
                         break;

+ 0 - 1
app/src/main/java/com/owncloud/android/ui/activities/data/activities/ActivitiesServiceApiImpl.java

@@ -22,7 +22,6 @@
  */
  */
 package com.owncloud.android.ui.activities.data.activities;
 package com.owncloud.android.ui.activities.data.activities;
 
 
-import android.accounts.Account;
 import android.accounts.AuthenticatorException;
 import android.accounts.AuthenticatorException;
 import android.accounts.OperationCanceledException;
 import android.accounts.OperationCanceledException;
 import android.content.Context;
 import android.content.Context;

+ 1 - 1
app/src/main/java/com/owncloud/android/ui/activity/ConflictsResolveActivity.kt

@@ -78,7 +78,7 @@ class ConflictsResolveActivity : FileActivity(), OnConflictDecisionMadeListener
             localBehaviour = savedInstanceState.getInt(EXTRA_LOCAL_BEHAVIOUR)
             localBehaviour = savedInstanceState.getInt(EXTRA_LOCAL_BEHAVIOUR)
         } else {
         } else {
             conflictUploadId = intent.getLongExtra(EXTRA_CONFLICT_UPLOAD_ID, -1)
             conflictUploadId = intent.getLongExtra(EXTRA_CONFLICT_UPLOAD_ID, -1)
-            existingFile = intent.getParcelableExtra(EXTRA_EXISTING_FILE)
+            existingFile = intent.getParcelableArgument(EXTRA_EXISTING_FILE, OCFile::class.java)
             localBehaviour = intent.getIntExtra(EXTRA_LOCAL_BEHAVIOUR, localBehaviour)
             localBehaviour = intent.getIntExtra(EXTRA_LOCAL_BEHAVIOUR, localBehaviour)
         }
         }
     }
     }

+ 6 - 4
app/src/main/java/com/owncloud/android/ui/activity/ContactsPreferenceActivity.java

@@ -28,6 +28,7 @@ import android.os.Bundle;
 
 
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.jobs.BackgroundJobManager;
 import com.nextcloud.client.jobs.BackgroundJobManager;
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.ui.fragment.FileFragment;
 import com.owncloud.android.ui.fragment.FileFragment;
@@ -104,13 +105,14 @@ public class ContactsPreferenceActivity extends FileActivity implements FileFrag
         Intent intent = getIntent();
         Intent intent = getIntent();
         if (savedInstanceState == null) {
         if (savedInstanceState == null) {
             FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
             FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
-            if (intent == null || intent.getParcelableExtra(EXTRA_FILE) == null ||
-                intent.getParcelableExtra(EXTRA_USER) == null) {
+            if (intent == null ||
+                IntentExtensionsKt.getParcelableArgument(intent, EXTRA_FILE, OCFile.class) == null ||
+                IntentExtensionsKt.getParcelableArgument(intent, EXTRA_USER, User.class) == null) {
                 BackupFragment fragment = BackupFragment.create(showSidebar);
                 BackupFragment fragment = BackupFragment.create(showSidebar);
                 transaction.add(R.id.frame_container, fragment);
                 transaction.add(R.id.frame_container, fragment);
             } else {
             } else {
-                OCFile file = intent.getParcelableExtra(EXTRA_FILE);
-                User user = intent.getParcelableExtra(EXTRA_USER);
+                OCFile file = IntentExtensionsKt.getParcelableArgument(intent, EXTRA_FILE, OCFile.class);
+                User user =  IntentExtensionsKt.getParcelableArgument(intent, EXTRA_USER, User.class);
                 BackupListFragment contactListFragment = BackupListFragment.newInstance(file, user);
                 BackupListFragment contactListFragment = BackupListFragment.newInstance(file, user);
                 transaction.add(R.id.frame_container, contactListFragment);
                 transaction.add(R.id.frame_container, contactListFragment);
             }
             }

+ 2 - 2
app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java

@@ -40,8 +40,8 @@ import android.widget.Toast;
 
 
 import com.google.android.material.snackbar.Snackbar;
 import com.google.android.material.snackbar.Snackbar;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.User;
-import com.nextcloud.client.preferences.DarkMode;
 import com.nextcloud.java.util.Optional;
 import com.nextcloud.java.util.Optional;
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.RichdocumentsWebviewBinding;
 import com.owncloud.android.databinding.RichdocumentsWebviewBinding;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
@@ -144,7 +144,7 @@ public abstract class EditorWebView extends ExternalSiteWebView {
             }
             }
         });
         });
 
 
-        setFile(getIntent().getParcelableExtra(ExternalSiteWebView.EXTRA_FILE));
+        setFile(IntentExtensionsKt.getParcelableArgument(getIntent(), ExternalSiteWebView.EXTRA_FILE, OCFile.class));
 
 
         if (getFile() == null) {
         if (getFile() == null) {
             Toast.makeText(getApplicationContext(),
             Toast.makeText(getApplicationContext(),

+ 2 - 1
app/src/main/java/com/owncloud/android/ui/activity/ErrorsWhileCopyingHandlerActivity.java

@@ -36,6 +36,7 @@ import android.widget.ListView;
 import android.widget.TextView;
 import android.widget.TextView;
 
 
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.User;
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
@@ -91,7 +92,7 @@ public class ErrorsWhileCopyingHandlerActivity  extends AppCompatActivity implem
 
 
                 /// read extra parameters in intent
                 /// read extra parameters in intent
         Intent intent = getIntent();
         Intent intent = getIntent();
-        user = intent.getParcelableExtra(EXTRA_USER);
+        user = IntentExtensionsKt.getParcelableArgument(intent, EXTRA_USER, User.class);
         mRemotePaths = intent.getStringArrayListExtra(EXTRA_REMOTE_PATHS);
         mRemotePaths = intent.getStringArrayListExtra(EXTRA_REMOTE_PATHS);
         mLocalPaths = intent.getStringArrayListExtra(EXTRA_LOCAL_PATHS);
         mLocalPaths = intent.getStringArrayListExtra(EXTRA_LOCAL_PATHS);
         mStorageManager = new FileDataStorageManager(user, getContentResolver());
         mStorageManager = new FileDataStorageManager(user, getContentResolver());

+ 5 - 3
app/src/main/java/com/owncloud/android/ui/activity/FileActivity.java

@@ -46,6 +46,8 @@ import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.jobs.BackgroundJobManager;
 import com.nextcloud.client.jobs.BackgroundJobManager;
 import com.nextcloud.client.network.ConnectivityService;
 import com.nextcloud.client.network.ConnectivityService;
 import com.nextcloud.utils.EditorUtils;
 import com.nextcloud.utils.EditorUtils;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AuthenticatorActivity;
 import com.owncloud.android.authentication.AuthenticatorActivity;
@@ -206,7 +208,7 @@ public abstract class FileActivity extends DrawerActivity
         mFileOperationsHelper = new FileOperationsHelper(this, getUserAccountManager(), connectivityService, editorUtils);
         mFileOperationsHelper = new FileOperationsHelper(this, getUserAccountManager(), connectivityService, editorUtils);
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
-            mFile = savedInstanceState.getParcelable(FileActivity.EXTRA_FILE);
+            mFile = BundleExtensionsKt.getParcelableArgument(savedInstanceState, FileActivity.EXTRA_FILE, OCFile.class);
             mFromNotification = savedInstanceState.getBoolean(FileActivity.EXTRA_FROM_NOTIFICATION);
             mFromNotification = savedInstanceState.getBoolean(FileActivity.EXTRA_FROM_NOTIFICATION);
             mFileOperationsHelper.setOpIdWaitingFor(
             mFileOperationsHelper.setOpIdWaitingFor(
                 savedInstanceState.getLong(KEY_WAITING_FOR_OP_ID, Long.MAX_VALUE)
                 savedInstanceState.getLong(KEY_WAITING_FOR_OP_ID, Long.MAX_VALUE)
@@ -216,8 +218,8 @@ public abstract class FileActivity extends DrawerActivity
                 viewThemeUtils.files.themeActionBar(this, actionBar, savedInstanceState.getString(KEY_ACTION_BAR_TITLE));
                 viewThemeUtils.files.themeActionBar(this, actionBar, savedInstanceState.getString(KEY_ACTION_BAR_TITLE));
             }
             }
         } else {
         } else {
-            User user = getIntent().getParcelableExtra(FileActivity.EXTRA_USER);
-            mFile = getIntent().getParcelableExtra(FileActivity.EXTRA_FILE);
+            User user = IntentExtensionsKt.getParcelableArgument(getIntent(), FileActivity.EXTRA_USER, User.class);
+            mFile = IntentExtensionsKt.getParcelableArgument(getIntent(), FileActivity.EXTRA_FILE, OCFile.class);
             mFromNotification = getIntent().getBooleanExtra(FileActivity.EXTRA_FROM_NOTIFICATION,
             mFromNotification = getIntent().getBooleanExtra(FileActivity.EXTRA_FROM_NOTIFICATION,
                     false);
                     false);
             if (user != null) {
             if (user != null) {

+ 21 - 12
app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -71,6 +71,9 @@ import com.nextcloud.client.network.ConnectivityService;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.client.utils.IntentUtil;
 import com.nextcloud.client.utils.IntentUtil;
 import com.nextcloud.java.util.Optional;
 import com.nextcloud.java.util.Optional;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.nextcloud.utils.view.FastScrollUtils;
 import com.nextcloud.utils.view.FastScrollUtils;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
@@ -252,7 +255,6 @@ public class FileDisplayActivity extends FileActivity implements FileFragment.Co
 
 
     @Override
     @Override
     protected void onCreate(Bundle savedInstanceState) {
     protected void onCreate(Bundle savedInstanceState) {
-
         Log_OC.v(TAG, "onCreate() start");
         Log_OC.v(TAG, "onCreate() start");
         // Set the default theme to replace the launch screen theme.
         // Set the default theme to replace the launch screen theme.
         setTheme(R.style.Theme_ownCloud_Toolbar_Drawer);
         setTheme(R.style.Theme_ownCloud_Toolbar_Drawer);
@@ -284,10 +286,10 @@ public class FileDisplayActivity extends FileActivity implements FileFragment.Co
     @SuppressWarnings("unchecked")
     @SuppressWarnings("unchecked")
     private void loadSavedInstanceState(Bundle savedInstanceState) {
     private void loadSavedInstanceState(Bundle savedInstanceState) {
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
-            previousSortGroupState = (Stack<Boolean>) savedInstanceState.getSerializable(KEY_SORT_GROUP_STATE);
-            mWaitingToPreview = savedInstanceState.getParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW);
+            previousSortGroupState = BundleExtensionsKt.getSerializableArgument(savedInstanceState, KEY_SORT_GROUP_STATE, Stack.class);
+            mWaitingToPreview = BundleExtensionsKt.getParcelableArgument(savedInstanceState, KEY_WAITING_TO_PREVIEW, OCFile.class);
             mSyncInProgress = savedInstanceState.getBoolean(KEY_SYNC_IN_PROGRESS);
             mSyncInProgress = savedInstanceState.getBoolean(KEY_SYNC_IN_PROGRESS);
-            mWaitingToSend = savedInstanceState.getParcelable(FileDisplayActivity.KEY_WAITING_TO_SEND);
+            mWaitingToSend = BundleExtensionsKt.getParcelableArgument(savedInstanceState, KEY_WAITING_TO_SEND, OCFile.class);
             searchQuery = savedInstanceState.getString(KEY_SEARCH_QUERY);
             searchQuery = savedInstanceState.getString(KEY_SEARCH_QUERY);
             searchOpen = savedInstanceState.getBoolean(FileDisplayActivity.KEY_IS_SEARCH_OPEN, false);
             searchOpen = savedInstanceState.getBoolean(FileDisplayActivity.KEY_IS_SEARCH_OPEN, false);
         } else {
         } else {
@@ -372,7 +374,7 @@ public class FileDisplayActivity extends FileActivity implements FileFragment.Co
             PermissionUtil.requestExternalStoragePermission(this, viewThemeUtils);
             PermissionUtil.requestExternalStoragePermission(this, viewThemeUtils);
         }
         }
 
 
-        if (getIntent().getParcelableExtra(OCFileListFragment.SEARCH_EVENT) != null) {
+        if (IntentExtensionsKt.getParcelableArgument(getIntent(), OCFileListFragment.SEARCH_EVENT, SearchEvent.class) != null) {
             switchToSearchFragment(savedInstanceState);
             switchToSearchFragment(savedInstanceState);
 
 
             int menuId = getIntent().getIntExtra(DRAWER_MENU_ID, -1);
             int menuId = getIntent().getIntExtra(DRAWER_MENU_ID, -1);
@@ -465,7 +467,10 @@ public class FileDisplayActivity extends FileActivity implements FileFragment.Co
             OCFileListFragment listOfFiles = new OCFileListFragment();
             OCFileListFragment listOfFiles = new OCFileListFragment();
             Bundle args = new Bundle();
             Bundle args = new Bundle();
 
 
-            args.putParcelable(OCFileListFragment.SEARCH_EVENT, getIntent().getParcelableExtra(OCFileListFragment.SEARCH_EVENT));
+            args.putParcelable(OCFileListFragment.SEARCH_EVENT,
+                               IntentExtensionsKt.getParcelableArgument(getIntent(),
+                                                                        OCFileListFragment.SEARCH_EVENT,
+                                                                        SearchEvent.class));
             args.putBoolean(OCFileListFragment.ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
             args.putBoolean(OCFileListFragment.ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
 
 
             listOfFiles.setArguments(args);
             listOfFiles.setArguments(args);
@@ -511,10 +516,9 @@ public class FileDisplayActivity extends FileActivity implements FileFragment.Co
         setIntent(intent);
         setIntent(intent);
 
 
         if (ACTION_DETAILS.equalsIgnoreCase(intent.getAction())) {
         if (ACTION_DETAILS.equalsIgnoreCase(intent.getAction())) {
-            OCFile file = intent.getParcelableExtra(EXTRA_FILE);
+            OCFile file = IntentExtensionsKt.getParcelableArgument(intent, EXTRA_FILE, OCFile.class);
             setFile(file);
             setFile(file);
             setIntent(intent);
             setIntent(intent);
-            setFile(intent.getParcelableExtra(EXTRA_FILE));
             showDetails(file);
             showDetails(file);
         } else if (Intent.ACTION_VIEW.equals(intent.getAction())) {
         } else if (Intent.ACTION_VIEW.equals(intent.getAction())) {
             handleOpenFileViaIntent(intent);
             handleOpenFileViaIntent(intent);
@@ -527,7 +531,7 @@ public class FileDisplayActivity extends FileActivity implements FileFragment.Co
             if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
             if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
                 setIntent(intent);
                 setIntent(intent);
 
 
-                SearchEvent searchEvent = intent.getParcelableExtra(OCFileListFragment.SEARCH_EVENT);
+                SearchEvent searchEvent = IntentExtensionsKt.getParcelableArgument(intent, OCFileListFragment.SEARCH_EVENT, SearchEvent.class);
                 if (searchEvent != null) {
                 if (searchEvent != null) {
                     if (SearchRemoteOperation.SearchType.PHOTO_SEARCH == searchEvent.getSearchType()) {
                     if (SearchRemoteOperation.SearchType.PHOTO_SEARCH == searchEvent.getSearchType()) {
                         Log_OC.d(this, "Switch to photo search fragment");
                         Log_OC.d(this, "Switch to photo search fragment");
@@ -1076,8 +1080,12 @@ public class FileDisplayActivity extends FileActivity implements FileFragment.Co
         syncAndUpdateFolder(false, true);
         syncAndUpdateFolder(false, true);
 
 
         OCFile startFile = null;
         OCFile startFile = null;
-        if (getIntent() != null && getIntent().getParcelableExtra(EXTRA_FILE) != null) {
-            startFile = getIntent().getParcelableExtra(EXTRA_FILE);
+        if (getIntent() != null) {
+            OCFile fileArgs = IntentExtensionsKt.getParcelableArgument(getIntent(), EXTRA_FILE, OCFile.class);
+            if (fileArgs != null) {
+                startFile = fileArgs;
+                setFile(startFile);
+            }
             setFile(startFile);
             setFile(startFile);
         }
         }
 
 
@@ -1571,7 +1579,8 @@ public class FileDisplayActivity extends FileActivity implements FileFragment.Co
             // a new chance to get the mDownloadBinder through
             // a new chance to get the mDownloadBinder through
             // getFileDownloadBinder() - THIS IS A MESS
             // getFileDownloadBinder() - THIS IS A MESS
             OCFileListFragment listOfFiles = getListOfFilesFragment();
             OCFileListFragment listOfFiles = getListOfFilesFragment();
-            if (listOfFiles != null && (getIntent() == null || (getIntent() != null && getIntent().getParcelableExtra(EXTRA_FILE) == null))) {
+            if (listOfFiles != null && (getIntent() == null || (getIntent() != null &&
+                IntentExtensionsKt.getParcelableArgument(getIntent(), EXTRA_FILE, OCFile.class) == null))) {
                 listOfFiles.listDirectory(MainApp.isOnlyOnDevice(), false);
                 listOfFiles.listDirectory(MainApp.isOnlyOnDevice(), false);
             }
             }
             Fragment leftFragment = getLeftFragment();
             Fragment leftFragment = getLeftFragment();

+ 2 - 1
app/src/main/java/com/owncloud/android/ui/activity/ManageAccountsActivity.java

@@ -44,6 +44,7 @@ import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.jobs.BackgroundJobManager;
 import com.nextcloud.client.jobs.BackgroundJobManager;
 import com.nextcloud.client.onboarding.FirstRunActivity;
 import com.nextcloud.client.onboarding.FirstRunActivity;
 import com.nextcloud.java.util.Optional;
 import com.nextcloud.java.util.Optional;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AuthenticatorActivity;
 import com.owncloud.android.authentication.AuthenticatorActivity;
@@ -168,7 +169,7 @@ public class ManageAccountsActivity extends FileActivity implements UserListAdap
         if (resultCode == KEY_DELETE_CODE && data != null) {
         if (resultCode == KEY_DELETE_CODE && data != null) {
             Bundle bundle = data.getExtras();
             Bundle bundle = data.getExtras();
             if (bundle != null && bundle.containsKey(UserInfoActivity.KEY_ACCOUNT)) {
             if (bundle != null && bundle.containsKey(UserInfoActivity.KEY_ACCOUNT)) {
-                final Account account = bundle.getParcelable(UserInfoActivity.KEY_ACCOUNT);
+                final Account account = BundleExtensionsKt.getParcelableArgument(bundle, UserInfoActivity.KEY_ACCOUNT, Account.class);
                 if (account != null) {
                 if (account != null) {
                     User user = accountManager.getUser(account.name).orElseThrow(RuntimeException::new);
                     User user = accountManager.getUser(account.name).orElseThrow(RuntimeException::new);
                     accountName = account.name;
                     accountName = account.name;

+ 4 - 4
app/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java

@@ -49,7 +49,6 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewGroup;
 import android.view.WindowManager.LayoutParams;
 import android.view.WindowManager.LayoutParams;
 import android.widget.AdapterView;
 import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
 import android.widget.ArrayAdapter;
 import android.widget.ArrayAdapter;
 import android.widget.EditText;
 import android.widget.EditText;
 import android.widget.ImageView;
 import android.widget.ImageView;
@@ -61,6 +60,8 @@ import com.google.android.material.button.MaterialButton;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.client.preferences.AppPreferences;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.ReceiveExternalFilesBinding;
 import com.owncloud.android.databinding.ReceiveExternalFilesBinding;
@@ -104,7 +105,6 @@ import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Calendar;
 import java.util.List;
 import java.util.List;
 import java.util.Stack;
 import java.util.Stack;
-import java.util.Vector;
 
 
 import javax.inject.Inject;
 import javax.inject.Inject;
 
 
@@ -182,7 +182,7 @@ public class ReceiveExternalFilesActivity extends FileActivity
                 mParents.addAll(Arrays.asList(parentPath.split(OCFile.PATH_SEPARATOR)));
                 mParents.addAll(Arrays.asList(parentPath.split(OCFile.PATH_SEPARATOR)));
             }
             }
 
 
-            mFile = savedInstanceState.getParcelable(KEY_FILE);
+            mFile = BundleExtensionsKt.getParcelableArgument(savedInstanceState, KEY_FILE, OCFile.class);
         }
         }
         mAccountManager = (AccountManager) getSystemService(Context.ACCOUNT_SERVICE);
         mAccountManager = (AccountManager) getSystemService(Context.ACCOUNT_SERVICE);
 
 
@@ -851,7 +851,7 @@ public class ReceiveExternalFilesActivity extends FileActivity
 
 
         if (Intent.ACTION_SEND.equals(intent.getAction())) {
         if (Intent.ACTION_SEND.equals(intent.getAction())) {
             mStreamsToUpload = new ArrayList<>();
             mStreamsToUpload = new ArrayList<>();
-            mStreamsToUpload.add(intent.getParcelableExtra(Intent.EXTRA_STREAM));
+            mStreamsToUpload.add(IntentExtensionsKt.getParcelableArgument(intent, Intent.EXTRA_STREAM, Parcelable.class));
         } else if (Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) {
         } else if (Intent.ACTION_SEND_MULTIPLE.equals(intent.getAction())) {
             mStreamsToUpload = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
             mStreamsToUpload = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
         }
         }

+ 2 - 7
app/src/main/java/com/owncloud/android/ui/activity/RichDocumentsEditorWebView.kt

@@ -25,7 +25,6 @@ package com.owncloud.android.ui.activity
 
 
 import android.content.Intent
 import android.content.Intent
 import android.net.Uri
 import android.net.Uri
-import android.os.Build
 import android.os.Bundle
 import android.os.Bundle
 import android.text.TextUtils
 import android.text.TextUtils
 import android.view.KeyEvent
 import android.view.KeyEvent
@@ -35,6 +34,7 @@ import androidx.activity.result.ActivityResultLauncher
 import androidx.activity.result.contract.ActivityResultContracts
 import androidx.activity.result.contract.ActivityResultContracts
 import com.nextcloud.client.account.CurrentAccountProvider
 import com.nextcloud.client.account.CurrentAccountProvider
 import com.nextcloud.client.network.ClientFactory
 import com.nextcloud.client.network.ClientFactory
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.lib.common.utils.Log_OC
 import com.owncloud.android.lib.common.utils.Log_OC
@@ -100,12 +100,7 @@ class RichDocumentsEditorWebView : EditorWebView() {
     }
     }
 
 
     private fun handleRemoteFile(data: Intent) {
     private fun handleRemoteFile(data: Intent) {
-        val file = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-            data.getParcelableExtra(FolderPickerActivity.EXTRA_FILES, OCFile::class.java)
-        } else {
-            @Suppress("DEPRECATION")
-            data.getParcelableExtra(FolderPickerActivity.EXTRA_FILES)
-        }
+        val file = FolderPickerActivity.EXTRA_FILES?.let { data.getParcelableArgument(it, OCFile::class.java) }
 
 
         Thread {
         Thread {
             val user = currentAccountProvider?.user
             val user = currentAccountProvider?.user

+ 2 - 1
app/src/main/java/com/owncloud/android/ui/activity/SetupEncryptionActivity.kt

@@ -27,6 +27,7 @@ import android.os.Bundle
 import android.widget.Toast
 import android.widget.Toast
 import androidx.appcompat.app.AppCompatActivity
 import androidx.appcompat.app.AppCompatActivity
 import com.nextcloud.client.account.User
 import com.nextcloud.client.account.User
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.ui.dialog.SetupEncryptionDialogFragment
 import com.owncloud.android.ui.dialog.SetupEncryptionDialogFragment
 
 
@@ -34,7 +35,7 @@ class SetupEncryptionActivity : AppCompatActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         super.onCreate(savedInstanceState)
 
 
-        val user = intent?.getParcelableExtra("EXTRA_USER") as User?
+        val user = intent?.getParcelableArgument("EXTRA_USER", User::class.java)
 
 
         if (user == null) {
         if (user == null) {
             Toast.makeText(this, getString(R.string.error_showing_encryption_dialog), Toast.LENGTH_LONG).show()
             Toast.makeText(this, getString(R.string.error_showing_encryption_dialog), Toast.LENGTH_LONG).show()

+ 0 - 1
app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.java

@@ -27,7 +27,6 @@ import android.graphics.drawable.LayerDrawable;
 import android.os.Bundle;
 import android.os.Bundle;
 
 
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.User;
-import com.nextcloud.client.preferences.DarkMode;
 import com.nextcloud.java.util.Optional;
 import com.nextcloud.java.util.Optional;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.ShareActivityBinding;
 import com.owncloud.android.databinding.ShareActivityBinding;

+ 10 - 6
app/src/main/java/com/owncloud/android/ui/activity/SsoGrantPermissionActivity.java

@@ -40,6 +40,7 @@ import android.text.style.StyleSpan;
 
 
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import com.nextcloud.android.sso.Constants;
 import com.nextcloud.android.sso.Constants;
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.DialogSsoGrantPermissionBinding;
 import com.owncloud.android.databinding.DialogSsoGrantPermissionBinding;
@@ -92,13 +93,16 @@ public class SsoGrantPermissionActivity extends BaseActivity {
         if (callingActivity != null) {
         if (callingActivity != null) {
             packageName = callingActivity.getPackageName();
             packageName = callingActivity.getPackageName();
             final String appName = getAppNameForPackage(packageName);
             final String appName = getAppNameForPackage(packageName);
-            account = getIntent().getParcelableExtra(NEXTCLOUD_FILES_ACCOUNT);
+            account = IntentExtensionsKt.getParcelableArgument(getIntent(), NEXTCLOUD_FILES_ACCOUNT, Account.class);
+
+            if (account != null) {
+                final SpannableStringBuilder dialogText = makeSpecialPartsBold(
+                    getString(R.string.single_sign_on_request_token, appName, account.name),
+                    appName,
+                    account.name);
+                binding.permissionText.setText(dialogText);
+            }
 
 
-            final SpannableStringBuilder dialogText = makeSpecialPartsBold(
-                getString(R.string.single_sign_on_request_token, appName, account.name),
-                appName,
-                account.name);
-            binding.permissionText.setText(dialogText);
             try {
             try {
                 if (packageName != null) {
                 if (packageName != null) {
                     Drawable appIcon = getPackageManager().getApplicationIcon(packageName);
                     Drawable appIcon = getPackageManager().getApplicationIcon(packageName);

+ 5 - 2
app/src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.kt

@@ -45,6 +45,7 @@ import com.nextcloud.client.jobs.MediaFoldersDetectionWork
 import com.nextcloud.client.jobs.NotificationWork
 import com.nextcloud.client.jobs.NotificationWork
 import com.nextcloud.client.preferences.AppPreferences
 import com.nextcloud.client.preferences.AppPreferences
 import com.nextcloud.client.preferences.SubFolderRule
 import com.nextcloud.client.preferences.SubFolderRule
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.BuildConfig
 import com.owncloud.android.BuildConfig
 import com.owncloud.android.MainApp
 import com.owncloud.android.MainApp
 import com.owncloud.android.R
 import com.owncloud.android.R
@@ -630,8 +631,10 @@ class SyncedFoldersActivity :
         if (requestCode == SyncedFolderPreferencesDialogFragment.REQUEST_CODE__SELECT_REMOTE_FOLDER &&
         if (requestCode == SyncedFolderPreferencesDialogFragment.REQUEST_CODE__SELECT_REMOTE_FOLDER &&
             resultCode == RESULT_OK && syncedFolderPreferencesDialogFragment != null
             resultCode == RESULT_OK && syncedFolderPreferencesDialogFragment != null
         ) {
         ) {
-            val chosenFolder: OCFile = data!!.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER)!!
-            syncedFolderPreferencesDialogFragment!!.setRemoteFolderSummary(chosenFolder.remotePath)
+            val chosenFolder: OCFile? = FolderPickerActivity.EXTRA_FOLDER?.let {
+                data?.getParcelableArgument(it, OCFile::class.java)
+            }
+            syncedFolderPreferencesDialogFragment?.setRemoteFolderSummary(chosenFolder?.remotePath)
         } else if (
         } else if (
             requestCode == SyncedFolderPreferencesDialogFragment.REQUEST_CODE__SELECT_LOCAL_FOLDER &&
             requestCode == SyncedFolderPreferencesDialogFragment.REQUEST_CODE__SELECT_LOCAL_FOLDER &&
             resultCode == RESULT_OK && syncedFolderPreferencesDialogFragment != null
             resultCode == RESULT_OK && syncedFolderPreferencesDialogFragment != null

+ 0 - 1
app/src/main/java/com/owncloud/android/ui/activity/ToolbarActivity.java

@@ -53,7 +53,6 @@ import javax.inject.Inject;
 
 
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
 import androidx.annotation.StringRes;
 import androidx.annotation.StringRes;
-import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.widget.AppCompatSpinner;
 import androidx.appcompat.widget.AppCompatSpinner;
 
 

+ 4 - 3
app/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java

@@ -47,6 +47,7 @@ import com.nextcloud.client.account.User;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.common.NextcloudClient;
 import com.nextcloud.common.NextcloudClient;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.UserInfoDetailsTableItemBinding;
 import com.owncloud.android.databinding.UserInfoDetailsTableItemBinding;
 import com.owncloud.android.databinding.UserInfoLayoutBinding;
 import com.owncloud.android.databinding.UserInfoLayoutBinding;
@@ -106,16 +107,16 @@ public class UserInfoActivity extends DrawerActivity implements Injectable {
             return;
             return;
         }
         }
 
 
-        user = bundle.getParcelable(KEY_ACCOUNT);
+        user = BundleExtensionsKt.getParcelableArgument(bundle, KEY_ACCOUNT, User.class);
         if(user == null) {
         if(user == null) {
             finish();
             finish();
             return;
             return;
         }
         }
 
 
         if (savedInstanceState != null && savedInstanceState.containsKey(KEY_USER_DATA)) {
         if (savedInstanceState != null && savedInstanceState.containsKey(KEY_USER_DATA)) {
-            userInfo = savedInstanceState.getParcelable(KEY_USER_DATA);
+            userInfo = BundleExtensionsKt.getParcelableArgument(savedInstanceState, KEY_USER_DATA, UserInfo.class);
         } else if (bundle.containsKey(KEY_ACCOUNT)) {
         } else if (bundle.containsKey(KEY_ACCOUNT)) {
-            userInfo = bundle.getParcelable(KEY_USER_DATA);
+            userInfo =  BundleExtensionsKt.getParcelableArgument(bundle, KEY_USER_DATA, UserInfo.class);
         }
         }
 
 
         mCurrentAccountAvatarRadiusDimension = getResources().getDimension(R.dimen.user_icon_radius);
         mCurrentAccountAvatarRadiusDimension = getResources().getDimension(R.dimen.user_icon_radius);

+ 0 - 1
app/src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java

@@ -80,7 +80,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Locale;
 
 
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
-import androidx.core.content.ContextCompat;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.RecyclerView;
 
 
 /**
 /**

+ 0 - 1
app/src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java

@@ -54,7 +54,6 @@ import java.util.concurrent.Executors;
 
 
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
 import androidx.annotation.VisibleForTesting;
-import androidx.core.content.ContextCompat;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.RecyclerView;
 
 
 /**
 /**

+ 0 - 1
app/src/main/java/com/owncloud/android/ui/adapter/ShareeListAdapter.java

@@ -45,7 +45,6 @@ import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.theme.ViewThemeUtils;
 import com.owncloud.android.utils.theme.ViewThemeUtils;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.List;
 
 
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;

+ 0 - 1
app/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java

@@ -48,7 +48,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 
 
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
-import androidx.core.content.ContextCompat;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.RecyclerView;
 
 
 import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR;
 import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR;

+ 0 - 1
app/src/main/java/com/owncloud/android/ui/asynctasks/RichDocumentsLoadUrlTask.java

@@ -21,7 +21,6 @@
  */
  */
 package com.owncloud.android.ui.asynctasks;
 package com.owncloud.android.ui.asynctasks;
 
 
-import android.accounts.Account;
 import android.os.AsyncTask;
 import android.os.AsyncTask;
 
 
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.User;

+ 2 - 2
app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.java

@@ -33,7 +33,6 @@ import android.text.Editable;
 import android.text.TextWatcher;
 import android.text.TextWatcher;
 import android.view.LayoutInflater;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View;
-import android.widget.Button;
 
 
 import com.google.android.material.button.MaterialButton;
 import com.google.android.material.button.MaterialButton;
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@@ -42,6 +41,7 @@ import com.nextcloud.client.account.CurrentAccountProvider;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.network.ClientFactory;
 import com.nextcloud.client.network.ClientFactory;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.ChooseTemplateBinding;
 import com.owncloud.android.databinding.ChooseTemplateBinding;
@@ -168,7 +168,7 @@ public class ChooseRichDocumentsTemplateDialogFragment extends DialogFragment im
             throw new RuntimeException(e); // we'll NPE without the client
             throw new RuntimeException(e); // we'll NPE without the client
         }
         }
 
 
-        parentFolder = arguments.getParcelable(ARG_PARENT_FOLDER);
+        parentFolder = BundleExtensionsKt.getParcelableArgument(arguments, ARG_PARENT_FOLDER, OCFile.class);
         List<OCFile> folderContent = fileDataStorageManager.getFolderContent(parentFolder, false);
         List<OCFile> folderContent = fileDataStorageManager.getFolderContent(parentFolder, false);
         fileNames = Sets.newHashSetWithExpectedSize(folderContent.size());
         fileNames = Sets.newHashSetWithExpectedSize(folderContent.size());
 
 

+ 3 - 2
app/src/main/java/com/owncloud/android/ui/dialog/ChooseTemplateDialogFragment.kt

@@ -44,6 +44,7 @@ import com.nextcloud.client.account.User
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.network.ClientFactory
 import com.nextcloud.client.network.ClientFactory
 import com.nextcloud.client.network.ClientFactory.CreationException
 import com.nextcloud.client.network.ClientFactory.CreationException
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.MainApp
 import com.owncloud.android.MainApp
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.databinding.ChooseTemplateBinding
 import com.owncloud.android.databinding.ChooseTemplateBinding
@@ -127,8 +128,8 @@ class ChooseTemplateDialogFragment : DialogFragment(), View.OnClickListener, Tem
         val arguments = arguments ?: throw IllegalArgumentException("Arguments may not be null")
         val arguments = arguments ?: throw IllegalArgumentException("Arguments may not be null")
         val activity = activity ?: throw IllegalArgumentException("Activity may not be null")
         val activity = activity ?: throw IllegalArgumentException("Activity may not be null")
 
 
-        parentFolder = arguments.getParcelable(ARG_PARENT_FOLDER)
-        creator = arguments.getParcelable(ARG_CREATOR)
+        parentFolder = arguments.getParcelableArgument(ARG_PARENT_FOLDER, OCFile::class.java)
+        creator = arguments.getParcelableArgument(ARG_CREATOR, Creator::class.java)
 
 
         title = arguments.getString(ARG_HEADLINE, getString(R.string.select_template))
         title = arguments.getString(ARG_HEADLINE, getString(R.string.select_template))
         title = when (savedInstanceState) {
         title = when (savedInstanceState) {

+ 7 - 7
app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.java

@@ -26,13 +26,13 @@ import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface;
 import android.os.Bundle;
 import android.os.Bundle;
 import android.view.View;
 import android.view.View;
-import android.widget.Button;
 import android.widget.Toast;
 import android.widget.Toast;
 
 
 import com.google.android.material.button.MaterialButton;
 import com.google.android.material.button.MaterialButton;
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.di.Injectable;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.ConflictResolveDialogBinding;
 import com.owncloud.android.databinding.ConflictResolveDialogBinding;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.FileDataStorageManager;
@@ -133,13 +133,13 @@ public class ConflictsResolveDialog extends DialogFragment implements Injectable
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
-            existingFile = savedInstanceState.getParcelable(KEY_EXISTING_FILE);
-            newFile = (File) savedInstanceState.getSerializable(KEY_NEW_FILE);
-            user = savedInstanceState.getParcelable(KEY_USER);
+            existingFile = BundleExtensionsKt.getParcelableArgument(savedInstanceState, KEY_EXISTING_FILE, OCFile.class);
+            newFile = BundleExtensionsKt.getSerializableArgument(savedInstanceState, KEY_NEW_FILE, File.class);
+            user = BundleExtensionsKt.getParcelableArgument(savedInstanceState, KEY_USER, User.class);
         } else if (getArguments() != null) {
         } else if (getArguments() != null) {
-            existingFile = getArguments().getParcelable(KEY_EXISTING_FILE);
-            newFile = (File) getArguments().getSerializable(KEY_NEW_FILE);
-            user = getArguments().getParcelable(KEY_USER);
+            existingFile = BundleExtensionsKt.getParcelableArgument(getArguments(), KEY_EXISTING_FILE, OCFile.class);
+            newFile = BundleExtensionsKt.getSerializableArgument(getArguments(), KEY_NEW_FILE, File.class);
+            user = BundleExtensionsKt.getParcelableArgument(getArguments(), KEY_USER, User.class);
         } else {
         } else {
             Toast.makeText(getContext(), "Failed to create conflict dialog", Toast.LENGTH_LONG).show();
             Toast.makeText(getContext(), "Failed to create conflict dialog", Toast.LENGTH_LONG).show();
         }
         }

+ 3 - 2
app/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.kt

@@ -33,6 +33,7 @@ import com.google.android.material.button.MaterialButton
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.google.common.collect.Sets
 import com.google.common.collect.Sets
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.di.Injectable
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.databinding.EditBoxDialogBinding
 import com.owncloud.android.databinding.EditBoxDialogBinding
 import com.owncloud.android.datamodel.FileDataStorageManager
 import com.owncloud.android.datamodel.FileDataStorageManager
@@ -92,7 +93,7 @@ class CreateFolderDialogFragment : DialogFragment(), DialogInterface.OnClickList
 
 
     @Suppress("EmptyFunctionBlock")
     @Suppress("EmptyFunctionBlock")
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
-        mParentFolder = arguments?.getParcelable(ARG_PARENT_FOLDER)
+        mParentFolder = arguments?.getParcelableArgument(ARG_PARENT_FOLDER, OCFile::class.java)
 
 
         // Inflate the layout for the dialog
         // Inflate the layout for the dialog
         val inflater = requireActivity().layoutInflater
         val inflater = requireActivity().layoutInflater
@@ -103,7 +104,7 @@ class CreateFolderDialogFragment : DialogFragment(), DialogInterface.OnClickList
         binding.userInput.setText("")
         binding.userInput.setText("")
         viewThemeUtils?.material?.colorTextInputLayout(binding.userInputContainer)
         viewThemeUtils?.material?.colorTextInputLayout(binding.userInputContainer)
 
 
-        val parentFolder = requireArguments().getParcelable<OCFile>(ARG_PARENT_FOLDER)
+        val parentFolder = requireArguments().getParcelableArgument(ARG_PARENT_FOLDER, OCFile::class.java)
 
 
         val folderContent = fileDataStorageManager!!.getFolderContent(parentFolder, false)
         val folderContent = fileDataStorageManager!!.getFolderContent(parentFolder, false)
         val fileNames: MutableSet<String> = Sets.newHashSetWithExpectedSize(folderContent.size)
         val fileNames: MutableSet<String> = Sets.newHashSetWithExpectedSize(folderContent.size)

+ 3 - 2
app/src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java

@@ -39,6 +39,7 @@ import com.google.android.material.button.MaterialButton;
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import com.google.common.collect.Sets;
 import com.google.common.collect.Sets;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.di.Injectable;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.EditBoxDialogBinding;
 import com.owncloud.android.databinding.EditBoxDialogBinding;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.FileDataStorageManager;
@@ -109,7 +110,7 @@ public class RenameFileDialogFragment
     @NonNull
     @NonNull
     @Override
     @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
     public Dialog onCreateDialog(Bundle savedInstanceState) {
-        mTargetFile = requireArguments().getParcelable(ARG_TARGET_FILE);
+        mTargetFile = BundleExtensionsKt.getParcelableArgument(requireArguments(), ARG_TARGET_FILE, OCFile.class);
 
 
         // Inflate the layout for the dialog
         // Inflate the layout for the dialog
         LayoutInflater inflater = requireActivity().getLayoutInflater();
         LayoutInflater inflater = requireActivity().getLayoutInflater();
@@ -124,7 +125,7 @@ public class RenameFileDialogFragment
         int selectionEnd = extensionStart >= 0 ? extensionStart : currentName.length();
         int selectionEnd = extensionStart >= 0 ? extensionStart : currentName.length();
         binding.userInput.setSelection(0, selectionEnd);
         binding.userInput.setSelection(0, selectionEnd);
 
 
-        OCFile parentFolder = requireArguments().getParcelable(ARG_PARENT_FOLDER);
+        OCFile parentFolder = BundleExtensionsKt.getParcelableArgument(getArguments(), ARG_PARENT_FOLDER, OCFile.class);
         List<OCFile> folderContent = fileDataStorageManager.getFolderContent(parentFolder, false);
         List<OCFile> folderContent = fileDataStorageManager.getFolderContent(parentFolder, false);
         fileNames = Sets.newHashSetWithExpectedSize(folderContent.size());
         fileNames = Sets.newHashSetWithExpectedSize(folderContent.size());
 
 

+ 2 - 1
app/src/main/java/com/owncloud/android/ui/dialog/RenamePublicShareDialogFragment.java

@@ -31,6 +31,7 @@ import android.view.View;
 import com.google.android.material.button.MaterialButton;
 import com.google.android.material.button.MaterialButton;
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.di.Injectable;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.EditBoxDialogBinding;
 import com.owncloud.android.databinding.EditBoxDialogBinding;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.OCShare;
@@ -90,7 +91,7 @@ public class RenamePublicShareDialogFragment
     @NonNull
     @NonNull
     @Override
     @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
     public Dialog onCreateDialog(Bundle savedInstanceState) {
-        publicShare = requireArguments().getParcelable(ARG_PUBLIC_SHARE);
+        publicShare = BundleExtensionsKt.getParcelableArgument(requireArguments(), ARG_PUBLIC_SHARE, OCShare.class);
 
 
         // Inflate the layout for the dialog
         // Inflate the layout for the dialog
         LayoutInflater inflater = requireActivity().getLayoutInflater();
         LayoutInflater inflater = requireActivity().getLayoutInflater();

+ 2 - 8
app/src/main/java/com/owncloud/android/ui/dialog/SendShareDialog.kt

@@ -3,7 +3,6 @@ package com.owncloud.android.ui.dialog
 import android.content.ComponentName
 import android.content.ComponentName
 import android.content.Intent
 import android.content.Intent
 import android.graphics.drawable.Drawable
 import android.graphics.drawable.Drawable
-import android.os.Build
 import android.os.Bundle
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.LayoutInflater
 import android.view.View
 import android.view.View
@@ -16,6 +15,7 @@ import com.google.android.material.snackbar.Snackbar
 import com.nextcloud.android.common.ui.theme.utils.ColorRole
 import com.nextcloud.android.common.ui.theme.utils.ColorRole
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.utils.IntentUtil.createSendIntent
 import com.nextcloud.client.utils.IntentUtil.createSendIntent
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.databinding.SendShareFragmentBinding
 import com.owncloud.android.databinding.SendShareFragmentBinding
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.datamodel.OCFile
@@ -73,13 +73,7 @@ class SendShareDialog : BottomSheetDialogFragment(R.layout.send_share_fragment),
         retainInstance = true
         retainInstance = true
         val arguments = requireArguments()
         val arguments = requireArguments()
 
 
-        file = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-            arguments.getParcelable(KEY_OCFILE, OCFile::class.java)
-        } else {
-            @Suppress("DEPRECATION")
-            arguments.getParcelable(KEY_OCFILE)
-        }
-
+        file = arguments.getParcelableArgument(KEY_OCFILE, OCFile::class.java)
         hideNcSharingOptions = arguments.getBoolean(KEY_HIDE_NCSHARING_OPTIONS, false)
         hideNcSharingOptions = arguments.getBoolean(KEY_HIDE_NCSHARING_OPTIONS, false)
         sharingPublicPasswordEnforced = arguments.getBoolean(KEY_SHARING_PUBLIC_PASSWORD_ENFORCED, false)
         sharingPublicPasswordEnforced = arguments.getBoolean(KEY_SHARING_PUBLIC_PASSWORD_ENFORCED, false)
         sharingPublicAskForPassword = arguments.getBoolean(KEY_SHARING_PUBLIC_ASK_FOR_PASSWORD)
         sharingPublicAskForPassword = arguments.getBoolean(KEY_SHARING_PUBLIC_ASK_FOR_PASSWORD)

+ 2 - 7
app/src/main/java/com/owncloud/android/ui/dialog/SetupEncryptionDialogFragment.kt

@@ -29,7 +29,6 @@ import android.content.Context
 import android.content.DialogInterface
 import android.content.DialogInterface
 import android.content.Intent
 import android.content.Intent
 import android.os.AsyncTask
 import android.os.AsyncTask
-import android.os.Build
 import android.os.Bundle
 import android.os.Bundle
 import android.view.View
 import android.view.View
 import androidx.annotation.VisibleForTesting
 import androidx.annotation.VisibleForTesting
@@ -39,6 +38,7 @@ import com.google.android.material.button.MaterialButton
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.nextcloud.client.account.User
 import com.nextcloud.client.account.User
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.di.Injectable
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.databinding.SetupEncryptionDialogBinding
 import com.owncloud.android.databinding.SetupEncryptionDialogBinding
 import com.owncloud.android.datamodel.ArbitraryDataProvider
 import com.owncloud.android.datamodel.ArbitraryDataProvider
@@ -109,12 +109,7 @@ class SetupEncryptionDialogFragment : DialogFragment(), Injectable {
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
         checkNotNull(arguments) { "Arguments may not be null" }
         checkNotNull(arguments) { "Arguments may not be null" }
 
 
-        user = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-            requireArguments().getParcelable(ARG_USER, User::class.java)
-        } else {
-            @Suppress("DEPRECATION")
-            requireArguments().getParcelable(ARG_USER)
-        }
+        user = requireArguments().getParcelableArgument(ARG_USER, User::class.java)
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
             keyWords = savedInstanceState.getStringArrayList(EncryptionUtils.MNEMONIC)
             keyWords = savedInstanceState.getStringArrayList(EncryptionUtils.MNEMONIC)

+ 3 - 2
app/src/main/java/com/owncloud/android/ui/dialog/ShareLinkToDialog.java

@@ -37,6 +37,7 @@ import android.widget.ImageView;
 import android.widget.TextView;
 import android.widget.TextView;
 
 
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
 import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.activity.CopyToClipboardActivity;
 import com.owncloud.android.ui.activity.CopyToClipboardActivity;
@@ -84,12 +85,12 @@ public class ShareLinkToDialog  extends DialogFragment {
     @Override
     @Override
     @NonNull
     @NonNull
     public Dialog onCreateDialog(Bundle savedInstanceState) {
     public Dialog onCreateDialog(Bundle savedInstanceState) {
-        mIntent = getArguments().getParcelable(ARG_INTENT);
+        mIntent = BundleExtensionsKt.getParcelableArgument(getArguments(), ARG_INTENT, Intent.class);
         String[] packagesToExclude = getArguments().getStringArray(ARG_PACKAGES_TO_EXCLUDE);
         String[] packagesToExclude = getArguments().getStringArray(ARG_PACKAGES_TO_EXCLUDE);
         List<String> packagesToExcludeList = Arrays.asList(packagesToExclude != null ?
         List<String> packagesToExcludeList = Arrays.asList(packagesToExclude != null ?
                 packagesToExclude : new String[0]);
                 packagesToExclude : new String[0]);
 
 
-        PackageManager pm= getActivity().getPackageManager();
+        PackageManager pm = getActivity().getPackageManager();
         List<ResolveInfo> activities = pm.queryIntentActivities(mIntent, PackageManager.MATCH_DEFAULT_ONLY);
         List<ResolveInfo> activities = pm.queryIntentActivities(mIntent, PackageManager.MATCH_DEFAULT_ONLY);
         Iterator<ResolveInfo> it = activities.iterator();
         Iterator<ResolveInfo> it = activities.iterator();
         ResolveInfo resolveInfo;
         ResolveInfo resolveInfo;

+ 3 - 14
app/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.kt

@@ -22,7 +22,6 @@ package com.owncloud.android.ui.dialog
 
 
 import android.app.Dialog
 import android.app.Dialog
 import android.content.DialogInterface
 import android.content.DialogInterface
-import android.os.Build
 import android.os.Bundle
 import android.os.Bundle
 import android.text.TextUtils
 import android.text.TextUtils
 import androidx.appcompat.app.AlertDialog
 import androidx.appcompat.app.AlertDialog
@@ -31,6 +30,7 @@ import androidx.fragment.app.DialogFragment
 import com.google.android.material.button.MaterialButton
 import com.google.android.material.button.MaterialButton
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.di.Injectable
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.databinding.PasswordDialogBinding
 import com.owncloud.android.databinding.PasswordDialogBinding
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.datamodel.OCFile
@@ -110,19 +110,8 @@ class SharePasswordDialogFragment : DialogFragment(), Injectable {
     }
     }
 
 
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
-        file = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-            requireArguments().getParcelable(ARG_FILE, OCFile::class.java)
-        } else {
-            @Suppress("DEPRECATION")
-            requireArguments().getParcelable(ARG_FILE)
-        }
-
-        share = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-            requireArguments().getParcelable(ARG_SHARE, OCShare::class.java)
-        } else {
-            @Suppress("DEPRECATION")
-            requireArguments().getParcelable(ARG_SHARE)
-        }
+        file = requireArguments().getParcelableArgument(ARG_FILE, OCFile::class.java)
+        share = requireArguments().getParcelableArgument(ARG_SHARE, OCShare::class.java)
 
 
         createShare = requireArguments().getBoolean(ARG_CREATE_SHARE, false)
         createShare = requireArguments().getBoolean(ARG_CREATE_SHARE, false)
         askForPassword = requireArguments().getBoolean(ARG_ASK_FOR_PASSWORD, false)
         askForPassword = requireArguments().getBoolean(ARG_ASK_FOR_PASSWORD, false)

+ 2 - 8
app/src/main/java/com/owncloud/android/ui/dialog/SyncFileNotEnoughSpaceDialogFragment.kt

@@ -24,6 +24,7 @@ import android.os.Build
 import android.os.Bundle
 import android.os.Bundle
 import android.os.storage.StorageManager
 import android.os.storage.StorageManager
 import androidx.annotation.RequiresApi
 import androidx.annotation.RequiresApi
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener
 import com.owncloud.android.ui.dialog.ConfirmationDialogFragment.ConfirmationDialogFragmentListener
@@ -40,15 +41,8 @@ class SyncFileNotEnoughSpaceDialogFragment :
     private var targetFile: OCFile? = null
     private var targetFile: OCFile? = null
 
 
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
     override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
-        targetFile = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-            requireArguments().getParcelable(ARG_PASSED_FILE, OCFile::class.java)
-        } else {
-            @Suppress("DEPRECATION")
-            requireArguments().getParcelable(ARG_PASSED_FILE)
-        }
-
+        targetFile = requireArguments().getParcelableArgument(ARG_PASSED_FILE, OCFile::class.java)
         setOnConfirmationListener(this)
         setOnConfirmationListener(this)
-
         return super.onCreateDialog(savedInstanceState)
         return super.onCreateDialog(savedInstanceState)
     }
     }
 
 

+ 2 - 7
app/src/main/java/com/owncloud/android/ui/dialog/SyncedFolderPreferencesDialogFragment.kt

@@ -25,7 +25,6 @@ import android.app.Dialog
 import android.content.DialogInterface
 import android.content.DialogInterface
 import android.content.Intent
 import android.content.Intent
 import android.graphics.Typeface
 import android.graphics.Typeface
-import android.os.Build
 import android.os.Bundle
 import android.os.Bundle
 import android.text.TextUtils
 import android.text.TextUtils
 import android.text.style.StyleSpan
 import android.text.style.StyleSpan
@@ -36,6 +35,7 @@ import androidx.fragment.app.DialogFragment
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.preferences.SubFolderRule
 import com.nextcloud.client.preferences.SubFolderRule
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.databinding.SyncedFoldersSettingsLayoutBinding
 import com.owncloud.android.databinding.SyncedFoldersSettingsLayoutBinding
 import com.owncloud.android.datamodel.MediaFolderType
 import com.owncloud.android.datamodel.MediaFolderType
@@ -91,12 +91,7 @@ class SyncedFolderPreferencesDialogFragment : DialogFragment(), Injectable {
 
 
         val arguments = arguments
         val arguments = arguments
         if (arguments != null) {
         if (arguments != null) {
-            syncedFolder = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-                arguments.getParcelable(SYNCED_FOLDER_PARCELABLE, SyncedFolderParcelable::class.java)
-            } else {
-                @Suppress("DEPRECATION")
-                arguments.getParcelable(SYNCED_FOLDER_PARCELABLE)
-            }
+            syncedFolder = arguments.getParcelableArgument(SYNCED_FOLDER_PARCELABLE, SyncedFolderParcelable::class.java)
         }
         }
 
 
         uploadBehaviorItemStrings = resources.getTextArray(R.array.pref_behaviour_entries)
         uploadBehaviorItemStrings = resources.getTextArray(R.array.pref_behaviour_entries)

+ 0 - 1
app/src/main/java/com/owncloud/android/ui/dialog/parcel/SyncedFolderParcelable.java

@@ -25,7 +25,6 @@ import android.os.Parcelable;
 
 
 import com.nextcloud.client.preferences.SubFolderRule;
 import com.nextcloud.client.preferences.SubFolderRule;
 import com.owncloud.android.datamodel.MediaFolderType;
 import com.owncloud.android.datamodel.MediaFolderType;
-import com.owncloud.android.datamodel.SyncedFolder;
 import com.owncloud.android.datamodel.SyncedFolderDisplayItem;
 import com.owncloud.android.datamodel.SyncedFolderDisplayItem;
 import com.owncloud.android.files.services.FileUploader;
 import com.owncloud.android.files.services.FileUploader;
 import com.owncloud.android.files.services.NameCollisionPolicy;
 import com.owncloud.android.files.services.NameCollisionPolicy;

+ 6 - 1
app/src/main/java/com/owncloud/android/ui/fragment/FeatureFragment.java

@@ -16,6 +16,7 @@ import android.widget.TextView;
 
 
 import com.nextcloud.android.common.ui.theme.utils.ColorRole;
 import com.nextcloud.android.common.ui.theme.utils.ColorRole;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.di.Injectable;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.features.FeatureItem;
 import com.owncloud.android.features.FeatureItem;
 import com.owncloud.android.utils.theme.ViewThemeUtils;
 import com.owncloud.android.utils.theme.ViewThemeUtils;
@@ -45,7 +46,11 @@ public class FeatureFragment extends Fragment implements Injectable {
     public void onCreate(@Nullable Bundle savedInstanceState) {
     public void onCreate(@Nullable Bundle savedInstanceState) {
         viewThemeUtils = viewThemeUtilsFactory.withPrimaryAsBackground();
         viewThemeUtils = viewThemeUtilsFactory.withPrimaryAsBackground();
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
-        item = getArguments() != null ? (FeatureItem) getArguments().getParcelable("feature") : null;
+
+        Bundle bundle = getArguments();
+        if (bundle != null) {
+            item = BundleExtensionsKt.getParcelableArgument(bundle, "feature", FeatureItem.class);
+        }
     }
     }
 
 
     @Nullable
     @Nullable

+ 5 - 4
app/src/main/java/com/owncloud/android/ui/fragment/FileDetailActivitiesFragment.java

@@ -38,6 +38,7 @@ import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.network.ClientFactory;
 import com.nextcloud.client.network.ClientFactory;
 import com.nextcloud.common.NextcloudClient;
 import com.nextcloud.common.NextcloudClient;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.FileDetailsActivitiesFragmentBinding;
 import com.owncloud.android.databinding.FileDetailsActivitiesFragmentBinding;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.FileDataStorageManager;
@@ -130,12 +131,12 @@ public class FileDetailActivitiesFragment extends Fragment implements
         if (arguments == null) {
         if (arguments == null) {
             throw new IllegalStateException("arguments are mandatory");
             throw new IllegalStateException("arguments are mandatory");
         }
         }
-        file = arguments.getParcelable(ARG_FILE);
-        user = arguments.getParcelable(ARG_USER);
+        file = BundleExtensionsKt.getParcelableArgument(arguments, ARG_FILE, OCFile.class);
+        user = BundleExtensionsKt.getParcelableArgument(arguments, ARG_USER, User.class);
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
-            file = savedInstanceState.getParcelable(ARG_FILE);
-            user = savedInstanceState.getParcelable(ARG_USER);
+            file = BundleExtensionsKt.getParcelableArgument(savedInstanceState, ARG_FILE, OCFile.class);
+            user = BundleExtensionsKt.getParcelableArgument(savedInstanceState, ARG_USER, User.class);
         }
         }
 
 
         binding = FileDetailsActivitiesFragmentBinding.inflate(inflater, container, false);
         binding = FileDetailsActivitiesFragmentBinding.inflate(inflater, container, false);

+ 6 - 5
app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java

@@ -50,6 +50,7 @@ import com.nextcloud.client.network.ConnectivityService;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.ui.fileactions.FileActionsBottomSheet;
 import com.nextcloud.ui.fileactions.FileActionsBottomSheet;
 import com.nextcloud.utils.MenuUtils;
 import com.nextcloud.utils.MenuUtils;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.FileDetailsFragmentBinding;
 import com.owncloud.android.databinding.FileDetailsFragmentBinding;
@@ -214,14 +215,14 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
             throw new IllegalArgumentException("Arguments may not be null");
             throw new IllegalArgumentException("Arguments may not be null");
         }
         }
 
 
-        setFile(arguments.getParcelable(ARG_FILE));
-        parentFolder = arguments.getParcelable(ARG_PARENT_FOLDER);
-        user = arguments.getParcelable(ARG_USER);
+        setFile(BundleExtensionsKt.getParcelableArgument(arguments, ARG_FILE, OCFile.class));
+        parentFolder = BundleExtensionsKt.getParcelableArgument(arguments, ARG_PARENT_FOLDER, OCFile.class);
+        user = BundleExtensionsKt.getParcelableArgument(arguments, ARG_USER, User.class);
         activeTab = arguments.getInt(ARG_ACTIVE_TAB, 0);
         activeTab = arguments.getInt(ARG_ACTIVE_TAB, 0);
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
-            setFile(savedInstanceState.getParcelable(ARG_FILE));
-            user = savedInstanceState.getParcelable(ARG_USER);
+            setFile(BundleExtensionsKt.getParcelableArgument(savedInstanceState, ARG_FILE, OCFile.class));
+            user = BundleExtensionsKt.getParcelableArgument(savedInstanceState, ARG_USER, User.class);
         }
         }
 
 
         binding = FileDetailsFragmentBinding.inflate(inflater, container, false);
         binding = FileDetailsFragmentBinding.inflate(inflater, container, false);

+ 6 - 4
app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java

@@ -46,6 +46,7 @@ import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.network.ClientFactory;
 import com.nextcloud.client.network.ClientFactory;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.FileDetailsSharingFragmentBinding;
 import com.owncloud.android.databinding.FileDetailsSharingFragmentBinding;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.FileDataStorageManager;
@@ -122,13 +123,14 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
-            file = savedInstanceState.getParcelable(ARG_FILE);
-            user = savedInstanceState.getParcelable(ARG_USER);
+            file = BundleExtensionsKt.getParcelableArgument(savedInstanceState, ARG_FILE, OCFile.class);
+            user = BundleExtensionsKt.getParcelableArgument(savedInstanceState, ARG_USER, User.class);
         } else {
         } else {
             Bundle arguments = getArguments();
             Bundle arguments = getArguments();
+
             if (arguments != null) {
             if (arguments != null) {
-                file = arguments.getParcelable(ARG_FILE);
-                user = arguments.getParcelable(ARG_USER);
+                file = BundleExtensionsKt.getParcelableArgument(arguments, ARG_FILE, OCFile.class);
+                user = BundleExtensionsKt.getParcelableArgument(arguments, ARG_USER, User.class);
             }
             }
         }
         }
 
 

+ 4 - 1
app/src/main/java/com/owncloud/android/ui/fragment/FileFragment.java

@@ -25,6 +25,7 @@ import android.accounts.Account;
 import android.app.Activity;
 import android.app.Activity;
 import android.os.Bundle;
 import android.os.Bundle;
 
 
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
 import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
@@ -61,7 +62,9 @@ public class FileFragment extends Fragment {
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
 
 
         Bundle bundle = getArguments();
         Bundle bundle = getArguments();
-        setFile(bundle.getParcelable(EXTRA_FILE));
+        if (bundle != null) {
+            setFile(BundleExtensionsKt.getParcelableArgument(bundle, EXTRA_FILE, OCFile.class));
+        }
     }
     }
 
 
     /**
     /**

+ 4 - 3
app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java

@@ -37,6 +37,7 @@ import android.view.MenuItem;
 import android.view.View;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewGroup;
 
 
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
 import com.owncloud.android.BuildConfig;
 import com.owncloud.android.BuildConfig;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.FileDataStorageManager;
@@ -56,7 +57,6 @@ import javax.inject.Inject;
 
 
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.Nullable;
-import androidx.fragment.app.FragmentActivity;
 import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 import androidx.localbroadcastmanager.content.LocalBroadcastManager;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.GridLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.recyclerview.widget.RecyclerView;
@@ -315,8 +315,9 @@ public class GalleryFragment extends OCFileListFragment implements GalleryFragme
 
 
     @Override
     @Override
     public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
     public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
-        if (requestCode == SELECT_LOCATION_REQUEST_CODE && data != null) {
-            OCFile chosenFolder = data.getParcelableExtra(FolderPickerActivity.EXTRA_FOLDER);
+        if (requestCode == SELECT_LOCATION_REQUEST_CODE && data != null && FolderPickerActivity.EXTRA_FOLDER != null) {
+            OCFile chosenFolder = IntentExtensionsKt.getParcelableArgument(data, FolderPickerActivity.EXTRA_FOLDER, OCFile.class);
+
             if (chosenFolder != null) {
             if (chosenFolder != null) {
                 preferences.setLastSelectedMediaFolder(chosenFolder.getRemotePath());
                 preferences.setLastSelectedMediaFolder(chosenFolder.getRemotePath());
                 searchAndDisplayAfterChangingFolder();
                 searchAndDisplayAfterChangingFolder();

+ 16 - 13
app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -67,6 +67,8 @@ import com.nextcloud.common.NextcloudClient;
 import com.nextcloud.ui.fileactions.FileActionsBottomSheet;
 import com.nextcloud.ui.fileactions.FileActionsBottomSheet;
 import com.nextcloud.utils.EditorUtils;
 import com.nextcloud.utils.EditorUtils;
 import com.nextcloud.utils.ShortcutUtil;
 import com.nextcloud.utils.ShortcutUtil;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
 import com.nextcloud.utils.view.FastScrollUtils;
 import com.nextcloud.utils.view.FastScrollUtils;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
@@ -253,9 +255,9 @@ public class OCFileListFragment extends ExtendedListFragment implements
         mMultiChoiceModeListener = new MultiChoiceModeListener();
         mMultiChoiceModeListener = new MultiChoiceModeListener();
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
-            currentSearchType = savedInstanceState.getParcelable(KEY_CURRENT_SEARCH_TYPE);
-            searchEvent = savedInstanceState.getParcelable(OCFileListFragment.SEARCH_EVENT);
-            mFile = savedInstanceState.getParcelable(KEY_FILE);
+            currentSearchType = BundleExtensionsKt.getParcelableArgument(savedInstanceState, KEY_CURRENT_SEARCH_TYPE, SearchType.class);
+            searchEvent = BundleExtensionsKt.getParcelableArgument(savedInstanceState, SEARCH_EVENT, SearchEvent.class);
+            mFile = BundleExtensionsKt.getParcelableArgument(savedInstanceState, KEY_FILE, OCFile.class);
         }
         }
 
 
         searchFragment = currentSearchType != null && isSearchEventSet(searchEvent);
         searchFragment = currentSearchType != null && isSearchEventSet(searchEvent);
@@ -269,8 +271,8 @@ public class OCFileListFragment extends ExtendedListFragment implements
 
 
         Intent intent = getActivity().getIntent();
         Intent intent = getActivity().getIntent();
 
 
-        if (intent.getParcelableExtra(OCFileListFragment.SEARCH_EVENT) != null) {
-            searchEvent = intent.getParcelableExtra(OCFileListFragment.SEARCH_EVENT);
+        if (IntentExtensionsKt.getParcelableArgument(intent, SEARCH_EVENT, SearchEvent.class) != null) {
+            searchEvent = IntentExtensionsKt.getParcelableArgument(intent, SEARCH_EVENT, SearchEvent.class);
         }
         }
 
 
         if (isSearchEventSet(searchEvent)) {
         if (isSearchEventSet(searchEvent)) {
@@ -313,12 +315,13 @@ public class OCFileListFragment extends ExtendedListFragment implements
         Log_OC.i(TAG, "onCreateView() start");
         Log_OC.i(TAG, "onCreateView() start");
         View v = super.onCreateView(inflater, container, savedInstanceState);
         View v = super.onCreateView(inflater, container, savedInstanceState);
 
 
-        if (savedInstanceState != null
-            && savedInstanceState.getParcelable(KEY_CURRENT_SEARCH_TYPE) != null &&
-            savedInstanceState.getParcelable(OCFileListFragment.SEARCH_EVENT) != null) {
+
+        if (savedInstanceState != null &&
+            BundleExtensionsKt.getParcelableArgument(savedInstanceState, KEY_CURRENT_SEARCH_TYPE, SearchType.class) != null &&
+            BundleExtensionsKt.getParcelableArgument(savedInstanceState, SEARCH_EVENT, SearchEvent.class) != null) {
             searchFragment = true;
             searchFragment = true;
-            currentSearchType = savedInstanceState.getParcelable(KEY_CURRENT_SEARCH_TYPE);
-            searchEvent = savedInstanceState.getParcelable(OCFileListFragment.SEARCH_EVENT);
+            currentSearchType = BundleExtensionsKt.getParcelableArgument(savedInstanceState, KEY_CURRENT_SEARCH_TYPE, SearchType.class);
+            searchEvent = BundleExtensionsKt.getParcelableArgument(savedInstanceState, SEARCH_EVENT, SearchEvent.class);
         } else {
         } else {
             currentSearchType = NO_SEARCH;
             currentSearchType = NO_SEARCH;
         }
         }
@@ -372,7 +375,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
         Log_OC.i(TAG, "onActivityCreated() start");
         Log_OC.i(TAG, "onActivityCreated() start");
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
-            mFile = savedInstanceState.getParcelable(KEY_FILE);
+            mFile = BundleExtensionsKt.getParcelableArgument(savedInstanceState, KEY_FILE, OCFile.class);
         }
         }
 
 
         Bundle args = getArguments();
         Bundle args = getArguments();
@@ -396,7 +399,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
             if (getArguments() == null) {
             if (getArguments() == null) {
                 searchEvent = null;
                 searchEvent = null;
             } else {
             } else {
-                searchEvent = getArguments().getParcelable(OCFileListFragment.SEARCH_EVENT);
+                searchEvent = BundleExtensionsKt.getParcelableArgument(getArguments(), SEARCH_EVENT, SearchEvent.class);
             }
             }
         }
         }
         prepareCurrentSearch(searchEvent);
         prepareCurrentSearch(searchEvent);
@@ -1618,7 +1621,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
         super.onViewStateRestored(savedInstanceState);
         super.onViewStateRestored(savedInstanceState);
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
-            searchEvent = savedInstanceState.getParcelable(SEARCH_EVENT);
+            searchEvent = BundleExtensionsKt.getParcelableArgument(savedInstanceState, SEARCH_EVENT, SearchEvent.class);
         }
         }
     }
     }
 
 

+ 4 - 3
app/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/BackupListFragment.java

@@ -45,6 +45,7 @@ import com.nextcloud.client.files.downloader.TransferManagerConnection;
 import com.nextcloud.client.files.downloader.TransferState;
 import com.nextcloud.client.files.downloader.TransferState;
 import com.nextcloud.client.jobs.BackgroundJobManager;
 import com.nextcloud.client.jobs.BackgroundJobManager;
 import com.nextcloud.client.network.ClientFactory;
 import com.nextcloud.client.network.ClientFactory;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.BackuplistFragmentBinding;
 import com.owncloud.android.databinding.BackuplistFragmentBinding;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
@@ -194,8 +195,8 @@ public class BackupListFragment extends FileFragment implements Injectable {
             return view;
             return view;
         }
         }
 
 
-        if (arguments.getParcelable(FILE_NAME) != null) {
-            ocFiles.add(arguments.getParcelable(FILE_NAME));
+        if (BundleExtensionsKt.getParcelableArgument(arguments, FILE_NAME, OCFile.class) != null) {
+            ocFiles.add(BundleExtensionsKt.getParcelableArgument(arguments, FILE_NAME, OCFile.class));
         } else if (arguments.getParcelableArray(FILE_NAMES) != null) {
         } else if (arguments.getParcelableArray(FILE_NAMES) != null) {
             for (Parcelable file : arguments.getParcelableArray(FILE_NAMES)) {
             for (Parcelable file : arguments.getParcelableArray(FILE_NAMES)) {
                 ocFiles.add((OCFile) file);
                 ocFiles.add((OCFile) file);
@@ -204,7 +205,7 @@ public class BackupListFragment extends FileFragment implements Injectable {
             return view;
             return view;
         }
         }
 
 
-        User user = getArguments().getParcelable(USER);
+        User user = BundleExtensionsKt.getParcelableArgument(getArguments(), USER, User.class);
         fileDownloader = new TransferManagerConnection(getActivity(), user);
         fileDownloader = new TransferManagerConnection(getActivity(), user);
         fileDownloader.registerTransferListener(this::onDownloadUpdate);
         fileDownloader.registerTransferListener(this::onDownloadUpdate);
         fileDownloader.bind();
         fileDownloader.bind();

+ 0 - 1
app/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/BackupListHeaderViewHolder.kt

@@ -26,7 +26,6 @@ import android.content.Context
 import android.widget.ArrayAdapter
 import android.widget.ArrayAdapter
 import com.afollestad.sectionedrecyclerview.SectionedViewHolder
 import com.afollestad.sectionedrecyclerview.SectionedViewHolder
 import com.owncloud.android.databinding.BackupListItemHeaderBinding
 import com.owncloud.android.databinding.BackupListItemHeaderBinding
-import java.util.ArrayList
 
 
 class BackupListHeaderViewHolder(
 class BackupListHeaderViewHolder(
     val binding: BackupListItemHeaderBinding,
     val binding: BackupListItemHeaderBinding,

+ 5 - 4
app/src/main/java/com/owncloud/android/ui/preview/FileDownloadFragment.java

@@ -29,6 +29,7 @@ import android.widget.TextView;
 
 
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.di.Injectable;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
 import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
@@ -116,11 +117,11 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene
     public void onCreate(Bundle savedInstanceState) {
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
         Bundle args = getArguments();
         Bundle args = getArguments();
-        setFile(args.getParcelable(ARG_FILE));
+        setFile(BundleExtensionsKt.getParcelableArgument(args, ARG_FILE, OCFile.class));
             // TODO better in super, but needs to check ALL the class extending FileFragment; not right now
             // TODO better in super, but needs to check ALL the class extending FileFragment; not right now
 
 
         mIgnoreFirstSavedState = args.getBoolean(ARG_IGNORE_FIRST);
         mIgnoreFirstSavedState = args.getBoolean(ARG_IGNORE_FIRST);
-        user = args.getParcelable(ARG_USER);
+        user = BundleExtensionsKt.getParcelableArgument(args, ARG_USER, User.class);
     }
     }
 
 
 
 
@@ -131,8 +132,8 @@ public class FileDownloadFragment extends FileFragment implements OnClickListene
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
             if (!mIgnoreFirstSavedState) {
             if (!mIgnoreFirstSavedState) {
-                setFile(savedInstanceState.getParcelable(EXTRA_FILE));
-                user = savedInstanceState.getParcelable(EXTRA_USER);
+                setFile(BundleExtensionsKt.getParcelableArgument(savedInstanceState, EXTRA_FILE, OCFile.class));
+                user = BundleExtensionsKt.getParcelableArgument(savedInstanceState, EXTRA_USER, User.class);
                 mError = savedInstanceState.getBoolean(EXTRA_ERROR);
                 mError = savedInstanceState.getBoolean(EXTRA_ERROR);
             }
             }
             else {
             else {

+ 3 - 2
app/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.java

@@ -39,6 +39,7 @@ import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.editimage.EditImageActivity;
 import com.nextcloud.client.editimage.EditImageActivity;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.java.util.Optional;
 import com.nextcloud.java.util.Optional;
+import com.nextcloud.utils.extensions.IntentExtensionsKt;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.FileDataStorageManager;
@@ -123,7 +124,7 @@ public class PreviewImageActivity extends FileActivity implements
 
 
         setContentView(R.layout.preview_image_activity);
         setContentView(R.layout.preview_image_activity);
 
 
-        livePhotoFile = getIntent().getParcelableExtra(EXTRA_LIVE_PHOTO_FILE);
+        livePhotoFile = IntentExtensionsKt.getParcelableArgument(getIntent(), EXTRA_LIVE_PHOTO_FILE, OCFile.class);
 
 
         // Navigation Drawer
         // Navigation Drawer
         setupDrawer();
         setupDrawer();
@@ -161,7 +162,7 @@ public class PreviewImageActivity extends FileActivity implements
 
 
     private void initViewPager(User user) {
     private void initViewPager(User user) {
         // virtual folder
         // virtual folder
-        final Serializable virtualFolderType = getIntent().getSerializableExtra(EXTRA_VIRTUAL_TYPE);
+        final Serializable virtualFolderType = IntentExtensionsKt.getSerializableArgument(getIntent(), EXTRA_VIRTUAL_TYPE, Serializable.class);
         if (virtualFolderType != null && virtualFolderType != VirtualFolderType.NONE) {
         if (virtualFolderType != null && virtualFolderType != VirtualFolderType.NONE) {
             VirtualFolderType type = (VirtualFolderType) virtualFolderType;
             VirtualFolderType type = (VirtualFolderType) virtualFolderType;
 
 

+ 3 - 2
app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java

@@ -54,6 +54,7 @@ import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.jobs.BackgroundJobManager;
 import com.nextcloud.client.jobs.BackgroundJobManager;
 import com.nextcloud.client.network.ConnectivityService;
 import com.nextcloud.client.network.ConnectivityService;
 import com.nextcloud.ui.fileactions.FileActionsBottomSheet;
 import com.nextcloud.ui.fileactions.FileActionsBottomSheet;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.nextcloud.utils.extensions.ExtensionsKt;
 import com.nextcloud.utils.extensions.ExtensionsKt;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
@@ -175,7 +176,7 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
             throw new IllegalArgumentException("Arguments may not be null!");
             throw new IllegalArgumentException("Arguments may not be null!");
         }
         }
 
 
-        setFile(args.getParcelable(ARG_FILE));
+        setFile(BundleExtensionsKt.getParcelableArgument(args, ARG_FILE, OCFile.class));
         // TODO better in super, but needs to check ALL the class extending FileFragment;
         // TODO better in super, but needs to check ALL the class extending FileFragment;
         // not right now
         // not right now
 
 
@@ -242,7 +243,7 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
         super.onActivityCreated(savedInstanceState);
         super.onActivityCreated(savedInstanceState);
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
             if (!ignoreFirstSavedState) {
             if (!ignoreFirstSavedState) {
-                OCFile file = savedInstanceState.getParcelable(EXTRA_FILE);
+                OCFile file = BundleExtensionsKt.getParcelableArgument(savedInstanceState, EXTRA_FILE, OCFile.class);
                 setFile(file);
                 setFile(file);
                 binding.image.setScale(Math.min(binding.image.getMaximumScale(), savedInstanceState.getFloat(EXTRA_ZOOM)));
                 binding.image.setScale(Math.min(binding.image.getMaximumScale(), savedInstanceState.getFloat(EXTRA_ZOOM)));
             } else {
             } else {

+ 5 - 6
app/src/main/java/com/owncloud/android/ui/preview/PreviewMediaFragment.java

@@ -63,6 +63,7 @@ import com.nextcloud.client.media.PlayerServiceConnection;
 import com.nextcloud.client.network.ClientFactory;
 import com.nextcloud.client.network.ClientFactory;
 import com.nextcloud.common.NextcloudClient;
 import com.nextcloud.common.NextcloudClient;
 import com.nextcloud.ui.fileactions.FileActionsBottomSheet;
 import com.nextcloud.ui.fileactions.FileActionsBottomSheet;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.FragmentPreviewMediaBinding;
 import com.owncloud.android.databinding.FragmentPreviewMediaBinding;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
@@ -94,8 +95,6 @@ import androidx.core.graphics.drawable.DrawableCompat;
 import androidx.drawerlayout.widget.DrawerLayout;
 import androidx.drawerlayout.widget.DrawerLayout;
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentManager;
-import kotlin.Unit;
-import kotlin.jvm.functions.Function0;
 
 
 /**
 /**
  * This fragment shows a preview of a downloaded media file (audio or video).
  * This fragment shows a preview of a downloaded media file (audio or video).
@@ -193,9 +192,9 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
 
 
         Bundle bundle = getArguments();
         Bundle bundle = getArguments();
 
 
-        setFile(bundle.getParcelable(FILE));
+        setFile(BundleExtensionsKt.getParcelableArgument(bundle, FILE, OCFile.class));
+        user = BundleExtensionsKt.getParcelableArgument(bundle, USER, User.class);
 
 
-        user = bundle.getParcelable(USER);
         savedPlaybackPosition = bundle.getLong(PLAYBACK_POSITION);
         savedPlaybackPosition = bundle.getLong(PLAYBACK_POSITION);
         autoplay = bundle.getBoolean(AUTOPLAY);
         autoplay = bundle.getBoolean(AUTOPLAY);
         isLivePhoto = bundle.getBoolean(IS_LIVE_PHOTO);
         isLivePhoto = bundle.getBoolean(IS_LIVE_PHOTO);
@@ -246,9 +245,9 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
                 throw new IllegalStateException("Instanced with a NULL ownCloud Account");
                 throw new IllegalStateException("Instanced with a NULL ownCloud Account");
             }
             }
         } else {
         } else {
-            file = savedInstanceState.getParcelable(EXTRA_FILE);
+            file = BundleExtensionsKt.getParcelableArgument(savedInstanceState, EXTRA_FILE, OCFile.class);
             setFile(file);
             setFile(file);
-            user = savedInstanceState.getParcelable(EXTRA_USER);
+            user = BundleExtensionsKt.getParcelableArgument(savedInstanceState, EXTRA_USER, User.class);
             savedPlaybackPosition = savedInstanceState.getInt(EXTRA_PLAY_POSITION);
             savedPlaybackPosition = savedInstanceState.getInt(EXTRA_PLAY_POSITION);
             autoplay = savedInstanceState.getBoolean(EXTRA_PLAYING);
             autoplay = savedInstanceState.getBoolean(EXTRA_PLAYING);
         }
         }

+ 5 - 4
app/src/main/java/com/owncloud/android/ui/preview/PreviewTextFileFragment.java

@@ -35,6 +35,7 @@ import android.widget.TextView;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.ui.fileactions.FileActionsBottomSheet;
 import com.nextcloud.ui.fileactions.FileActionsBottomSheet;
+import com.nextcloud.utils.extensions.BundleExtensionsKt;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.common.utils.Log_OC;
@@ -117,11 +118,11 @@ public class PreviewTextFileFragment extends PreviewTextFragment {
         Bundle args = getArguments();
         Bundle args = getArguments();
 
 
         if (file == null) {
         if (file == null) {
-            file = args.getParcelable(EXTRA_FILE);
+            file = BundleExtensionsKt.getParcelableArgument(args, EXTRA_FILE, OCFile.class);
         }
         }
 
 
         if (user == null) {
         if (user == null) {
-            user = args.getParcelable(EXTRA_USER);
+            user = BundleExtensionsKt.getParcelableArgument(args, EXTRA_USER, User.class);
         }
         }
 
 
         if (args.containsKey(EXTRA_SEARCH_QUERY)) {
         if (args.containsKey(EXTRA_SEARCH_QUERY)) {
@@ -137,8 +138,8 @@ public class PreviewTextFileFragment extends PreviewTextFragment {
                 throw new IllegalStateException("Instanced with a NULL ownCloud Account");
                 throw new IllegalStateException("Instanced with a NULL ownCloud Account");
             }
             }
         } else {
         } else {
-            file = savedInstanceState.getParcelable(EXTRA_FILE);
-            user = savedInstanceState.getParcelable(EXTRA_USER);
+            file = BundleExtensionsKt.getParcelableArgument(savedInstanceState, EXTRA_FILE, OCFile.class);
+            user = BundleExtensionsKt.getParcelableArgument(savedInstanceState, EXTRA_USER, User.class);
         }
         }
 
 
         handler = new Handler();
         handler = new Handler();

+ 2 - 1
app/src/main/java/com/owncloud/android/ui/preview/pdf/PreviewPdfFragment.kt

@@ -34,6 +34,7 @@ import com.google.android.material.snackbar.Snackbar
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.di.Injectable
 import com.nextcloud.client.di.ViewModelFactory
 import com.nextcloud.client.di.ViewModelFactory
 import com.nextcloud.utils.MenuUtils
 import com.nextcloud.utils.MenuUtils
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.databinding.PreviewPdfFragmentBinding
 import com.owncloud.android.databinding.PreviewPdfFragmentBinding
 import com.owncloud.android.datamodel.OCFile
 import com.owncloud.android.datamodel.OCFile
@@ -75,7 +76,7 @@ class PreviewPdfFragment : Fragment(), Injectable {
 
 
         setupObservers()
         setupObservers()
 
 
-        file = requireArguments().getParcelable(ARG_FILE)!!
+        file = requireArguments().getParcelableArgument(ARG_FILE, OCFile::class.java)!!
         try {
         try {
             viewModel.process(file)
             viewModel.process(file)
         } catch (e: SecurityException) {
         } catch (e: SecurityException) {

+ 0 - 1
app/src/main/java/com/owncloud/android/utils/DisplayUtils.java

@@ -67,7 +67,6 @@ import com.nextcloud.client.account.CurrentAccountProvider;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.network.ClientFactory;
 import com.nextcloud.client.network.ClientFactory;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.nextcloud.client.preferences.AppPreferences;
-import com.nextcloud.client.preferences.DarkMode;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.ArbitraryDataProvider;
 import com.owncloud.android.datamodel.ArbitraryDataProvider;

+ 23 - 4
app/src/main/java/com/owncloud/android/utils/FileStorageUtils.java

@@ -33,7 +33,6 @@ import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.datamodel.SyncedFolder;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.files.model.RemoteFile;
 import com.owncloud.android.lib.resources.files.model.RemoteFile;
 import com.owncloud.android.lib.resources.shares.ShareeUser;
 import com.owncloud.android.lib.resources.shares.ShareeUser;
@@ -421,7 +420,13 @@ public final class FileStorageUtils {
             return false;
             return false;
         }
         }
 
 
-        for (File f : sourceFolder.listFiles()) {
+        File[] listFiles = sourceFolder.listFiles();
+
+        if (listFiles == null) {
+            return false;
+        }
+
+        for (File f : listFiles) {
             if (f.isDirectory()) {
             if (f.isDirectory()) {
                 if (!copyDirs(f, new File(targetFolder, f.getName()))) {
                 if (!copyDirs(f, new File(targetFolder, f.getName()))) {
                     return false;
                     return false;
@@ -436,7 +441,13 @@ public final class FileStorageUtils {
 
 
     public static void deleteRecursively(File file, FileDataStorageManager storageManager) {
     public static void deleteRecursively(File file, FileDataStorageManager storageManager) {
         if (file.isDirectory()) {
         if (file.isDirectory()) {
-            for (File child : file.listFiles()) {
+            File[] listFiles = file.listFiles();
+
+            if (listFiles == null) {
+                return;
+            }
+
+            for (File child : listFiles) {
                 deleteRecursively(child, storageManager);
                 deleteRecursively(child, storageManager);
             }
             }
         }
         }
@@ -447,11 +458,19 @@ public final class FileStorageUtils {
 
 
     public static boolean deleteRecursive(File file) {
     public static boolean deleteRecursive(File file) {
         boolean res = true;
         boolean res = true;
+
         if (file.isDirectory()) {
         if (file.isDirectory()) {
-            for (File c : file.listFiles()) {
+            File[] listFiles = file.listFiles();
+
+            if (listFiles == null) {
+                return true;
+            }
+
+            for (File c : listFiles) {
                 res = deleteRecursive(c) && res;
                 res = deleteRecursive(c) && res;
             }
             }
         }
         }
+
         return file.delete() && res;
         return file.delete() && res;
     }
     }
 
 

+ 0 - 4
app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java

@@ -24,14 +24,11 @@ import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
 import android.graphics.drawable.LayerDrawable;
 import android.net.Uri;
 import android.net.Uri;
-import android.util.DisplayMetrics;
-import android.util.Log;
 import android.webkit.MimeTypeMap;
 import android.webkit.MimeTypeMap;
 
 
 import com.nextcloud.android.common.ui.theme.utils.ColorRole;
 import com.nextcloud.android.common.ui.theme.utils.ColorRole;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.lib.common.network.WebdavEntry;
 import com.owncloud.android.lib.resources.files.model.ServerFileInterface;
 import com.owncloud.android.lib.resources.files.model.ServerFileInterface;
 import com.owncloud.android.utils.theme.ViewThemeUtils;
 import com.owncloud.android.utils.theme.ViewThemeUtils;
 
 
@@ -45,7 +42,6 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Map;
 
 
 import androidx.core.content.ContextCompat;
 import androidx.core.content.ContextCompat;
-import androidx.core.graphics.drawable.DrawableCompat;
 
 
 /**
 /**
  * <p>Helper class for detecting the right icon for a file or folder,
  * <p>Helper class for detecting the right icon for a file or folder,

+ 5 - 1
app/src/main/java/com/owncloud/android/utils/PermissionUtil.kt

@@ -41,6 +41,7 @@ import androidx.core.content.ContextCompat
 import com.google.android.material.snackbar.Snackbar
 import com.google.android.material.snackbar.Snackbar
 import com.nextcloud.client.preferences.AppPreferences
 import com.nextcloud.client.preferences.AppPreferences
 import com.nextcloud.client.preferences.AppPreferencesImpl
 import com.nextcloud.client.preferences.AppPreferencesImpl
+import com.nextcloud.utils.extensions.getParcelableArgument
 import com.owncloud.android.R
 import com.owncloud.android.R
 import com.owncloud.android.ui.dialog.StoragePermissionDialogFragment
 import com.owncloud.android.ui.dialog.StoragePermissionDialogFragment
 import com.owncloud.android.utils.theme.ViewThemeUtils
 import com.owncloud.android.utils.theme.ViewThemeUtils
@@ -231,7 +232,10 @@ object PermissionUtil {
         ) {
         ) {
             val listener: (requestKey: String, result: Bundle) -> Unit = { _, resultBundle ->
             val listener: (requestKey: String, result: Bundle) -> Unit = { _, resultBundle ->
                 val result: StoragePermissionDialogFragment.Result? =
                 val result: StoragePermissionDialogFragment.Result? =
-                    resultBundle.getParcelable(StoragePermissionDialogFragment.RESULT_KEY)
+                    resultBundle.getParcelableArgument(
+                        StoragePermissionDialogFragment.RESULT_KEY,
+                        StoragePermissionDialogFragment.Result::class.java
+                    )
                 if (result != null) {
                 if (result != null) {
                     preferences.isStoragePermissionRequested = true
                     preferences.isStoragePermissionRequested = true
                     when (result) {
                     when (result) {

+ 4 - 3
app/src/main/java/com/owncloud/android/utils/theme/ThemeUtils.java

@@ -23,7 +23,6 @@
 package com.owncloud.android.utils.theme;
 package com.owncloud.android.utils.theme;
 
 
 import android.content.Context;
 import android.content.Context;
-import android.content.res.Configuration;
 
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
@@ -34,8 +33,10 @@ import com.owncloud.android.lib.resources.status.OCCapability;
  */
  */
 public final class ThemeUtils {
 public final class ThemeUtils {
     public boolean themingEnabled(Context context) {
     public boolean themingEnabled(Context context) {
-        return CapabilityUtils.getCapability(context).getServerColor() != null
-            && !CapabilityUtils.getCapability(context).getServerColor().isEmpty();
+        OCCapability capability = CapabilityUtils.getCapability(context);
+
+        return capability.getServerColor() != null
+            && !capability.getServerColor().isEmpty();
     }
     }
 
 
     public String getDefaultDisplayNameForRootFolder(Context context) {
     public String getDefaultDisplayNameForRootFolder(Context context) {

+ 0 - 1
app/src/main/res/layout/dialog_scan_export_type.xml

@@ -20,7 +20,6 @@
   -->
   -->
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:layout_height="match_parent"
     android:clickable="true"
     android:clickable="true"

+ 0 - 1
app/src/test/java/com/owncloud/android/ui/activity/SyncedFoldersActivityTest.java

@@ -24,7 +24,6 @@ package com.owncloud.android.ui.activity;
 
 
 import com.nextcloud.client.preferences.SubFolderRule;
 import com.nextcloud.client.preferences.SubFolderRule;
 import com.owncloud.android.datamodel.MediaFolderType;
 import com.owncloud.android.datamodel.MediaFolderType;
-import com.owncloud.android.datamodel.SyncedFolder;
 import com.owncloud.android.datamodel.SyncedFolderDisplayItem;
 import com.owncloud.android.datamodel.SyncedFolderDisplayItem;
 import com.owncloud.android.files.services.FileUploader;
 import com.owncloud.android.files.services.FileUploader;
 import com.owncloud.android.files.services.NameCollisionPolicy;
 import com.owncloud.android.files.services.NameCollisionPolicy;

+ 1 - 1
scripts/analysis/lint-results.txt

@@ -1,2 +1,2 @@
 DO NOT TOUCH; GENERATED BY DRONE
 DO NOT TOUCH; GENERATED BY DRONE
-      <span class="mdl-layout-title">Lint Report: 3 errors and 70 warnings</span>
+      <span class="mdl-layout-title">Lint Report: 3 errors and 69 warnings</span>