diff --git a/CHANGELOG.md b/CHANGELOG.md
index 629b7f1cf36..f884e0cf7e7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,6 +17,7 @@ Summary
 * Enhancement - Delete old logs every week: [#3328](https://github.com/owncloud/android/issues/3328)
 * Enhancement - Instant upload only when charging: [#465](https://github.com/owncloud/android/issues/465)
 * Enhancement - New Logging Screen 2.0: [#3333](https://github.com/owncloud/android/issues/3333)
+* Enhancement - New Splash Screen: [#3391](https://github.com/owncloud/android/issues/3391)
 
 Details
 -------
@@ -97,6 +98,13 @@ Details
    https://github.com/owncloud/android/issues/3333
    https://github.com/owncloud/android/pull/3408
 
+* Enhancement - New Splash Screen: [#3391](https://github.com/owncloud/android/issues/3391)
+
+   A new splash screen has been developed for devices with Android 12 (S) version.
+
+   https://github.com/owncloud/android/issues/3391
+   https://github.com/owncloud/android/pull/3421
+
 Changelog for ownCloud Android Client [2.18.3] (2021-10-27)
 =======================================
 The following sections list the changes in ownCloud Android Client 2.18.3 relevant to
diff --git a/build.gradle b/build.gradle
index 8589df93ca1..24c5bf700e2 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,7 @@
 buildscript {
     ext {
         // SDK
-        sdkCompileVersion = 29
+        sdkCompileVersion = 31
         sdkMinVersion = 21
         sdkTargetVersion = 29
 
diff --git a/changelog/unreleased/3421 b/changelog/unreleased/3421
new file mode 100644
index 00000000000..0bb96712c07
--- /dev/null
+++ b/changelog/unreleased/3421
@@ -0,0 +1,7 @@
+Enhancement: New Splash Screen
+
+A new splash screen has been developed for devices
+with Android 12 (S) version.
+
+https://github.com/owncloud/android/issues/3391
+https://github.com/owncloud/android/pull/3421
diff --git a/owncloudApp/build.gradle b/owncloudApp/build.gradle
index 8a4221f4a0e..ea53f1f0376 100644
--- a/owncloudApp/build.gradle
+++ b/owncloudApp/build.gradle
@@ -61,6 +61,9 @@ dependencies {
     // Preferences
     implementation 'androidx.preference:preference-ktx:1.1.1'
 
+    //SplashScreen
+    implementation 'androidx.core:core-splashscreen:1.0.0-alpha02'
+
     // Tests
     testImplementation project(':owncloudTestUtil')
     testImplementation "junit:junit:$junitVersion"
diff --git a/owncloudApp/src/main/AndroidManifest.xml b/owncloudApp/src/main/AndroidManifest.xml
index 848c3b43f50..27879db0655 100644
--- a/owncloudApp/src/main/AndroidManifest.xml
+++ b/owncloudApp/src/main/AndroidManifest.xml
@@ -67,11 +67,11 @@
         android:supportsPictureInPicture="false"
         android:theme="@style/Theme.ownCloud.Toolbar"
         tools:targetApi="n">
-        
-        
+        
+        
         
+            android:theme="@style/Theme.App.Starting">
             
                 
                 
diff --git a/owncloudApp/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.kt b/owncloudApp/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.kt
index f81e80cdccc..0cae789112c 100644
--- a/owncloudApp/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.kt
+++ b/owncloudApp/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.kt
@@ -123,7 +123,7 @@ class DocumentsStorageProvider : DocumentsProvider() {
 
         if (!isWrite) return ParcelFileDescriptor.open(fileToOpen, accessMode)
 
-        val handler = Handler(context?.mainLooper)
+        val handler = context?.mainLooper?.let { Handler(it) }
         // Attach a close listener if the document is opened in write mode.
         try {
             return ParcelFileDescriptor.open(fileToOpen, accessMode, handler) {
diff --git a/owncloudApp/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt b/owncloudApp/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt
index b0d71f6dba3..aa70eae582e 100644
--- a/owncloudApp/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt
+++ b/owncloudApp/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt
@@ -936,7 +936,7 @@ class FileDisplayActivity : FileActivity(), FileFragment.ContainerActivity, OnEn
 
             if (sameAccount && sameFile) {
                 if (success) {
-                    file = storageManager.getFileByPath(uploadedRemotePath)
+                    file = uploadedRemotePath?.let { storageManager.getFileByPath(it) }
                 }
                 refreshSecondFragment(
                     intent.action,
@@ -1007,11 +1007,13 @@ class FileDisplayActivity : FileActivity(), FileFragment.ContainerActivity, OnEn
                 if (linkedToRemotePath == null || isAscendant(linkedToRemotePath)) {
                     refreshListOfFilesFragment(true)
                 }
-                refreshSecondFragment(
-                    intent.action,
-                    downloadedRemotePath,
-                    intent.getBooleanExtra(Extras.EXTRA_DOWNLOAD_RESULT, false)
-                )
+                downloadedRemotePath?.let {
+                    refreshSecondFragment(
+                        intent.action,
+                        it,
+                        intent.getBooleanExtra(Extras.EXTRA_DOWNLOAD_RESULT, false)
+                    )
+                }
                 invalidateOptionsMenu()
             }
 
diff --git a/owncloudApp/src/main/java/com/owncloud/android/ui/activity/SplashActivity.kt b/owncloudApp/src/main/java/com/owncloud/android/ui/activity/SplashActivity.kt
index c2cc5f8fa66..98844c2034a 100644
--- a/owncloudApp/src/main/java/com/owncloud/android/ui/activity/SplashActivity.kt
+++ b/owncloudApp/src/main/java/com/owncloud/android/ui/activity/SplashActivity.kt
@@ -23,11 +23,13 @@ package com.owncloud.android.ui.activity
 import android.content.Intent
 import androidx.appcompat.app.AppCompatActivity
 import android.os.Bundle
+import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
 
 class SplashActivity : AppCompatActivity() {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        installSplashScreen()
         startActivity(Intent(this, FileDisplayActivity::class.java))
         finish()
     }
diff --git a/owncloudApp/src/main/res/values-v31/styles.xml b/owncloudApp/src/main/res/values-v31/styles.xml
new file mode 100644
index 00000000000..4932fa409d5
--- /dev/null
+++ b/owncloudApp/src/main/res/values-v31/styles.xml
@@ -0,0 +1,27 @@
+
+
+
+
+    
+
diff --git a/owncloudApp/src/main/res/values/styles.xml b/owncloudApp/src/main/res/values/styles.xml
index 6742ff34afd..60f3f7a7a1d 100644
--- a/owncloudApp/src/main/res/values/styles.xml
+++ b/owncloudApp/src/main/res/values/styles.xml
@@ -48,7 +48,7 @@
     
 
     
-