diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 8d958a767743..fa754eb6752f 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -349,6 +349,7 @@ dependencies {
implementation(libs.compose.activity)
implementation(libs.compose.ui.tooling.preview)
implementation(libs.foundation)
+ implementation(libs.material3)
debugImplementation(libs.compose.ui.tooling)
// endregion
diff --git a/app/src/main/java/com/nextcloud/utils/extensions/OwnCloudClientExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/OwnCloudClientExtensions.kt
index 06e4ff1a9b11..8c10d4aecac2 100644
--- a/app/src/main/java/com/nextcloud/utils/extensions/OwnCloudClientExtensions.kt
+++ b/app/src/main/java/com/nextcloud/utils/extensions/OwnCloudClientExtensions.kt
@@ -9,6 +9,7 @@
package com.nextcloud.utils.extensions
import android.content.Context
+import com.nextcloud.android.common.ui.network.api.ApiCredentials
import com.nextcloud.common.NextcloudClient
import com.owncloud.android.lib.common.OwnCloudClient
import com.owncloud.android.lib.common.OwnCloudClientFactory
@@ -27,3 +28,6 @@ fun OwnCloudClient.getPreviewEndpoint(remoteId: String, x: Int, y: Int): String
remoteId +
"&x=" + (x / 2) + "&y=" + (y / 2) +
"&a=1&mode=cover&forceIcon=0"
+
+fun OwnCloudClient.toApiCredentials(baseURL: String): ApiCredentials =
+ ApiCredentials(baseURL, userIdPlain, credentials.authToken)
diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt
index 785a15960000..01a74a62809e 100644
--- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt
+++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt
@@ -298,6 +298,30 @@ class FileDisplayActivity :
startMetadataSyncForRoot()
handleBackPress()
setupDrawer(menuItemId)
+ logOcsCredentials()
+ }
+
+ @Suppress("DEPRECATION")
+ private fun logOcsCredentials() {
+
+ lifecycleScope.launch(Dispatchers.IO) {
+ val user = accountManager.user
+ val serverUrl = user.server.uri.toString()
+ val accountName = user.accountName
+
+ try {
+ val client = clientFactory.create(user)
+ val username = client.userIdPlain
+ val authToken = client.credentials.authToken
+ Log_OC.d(TAG, "OCS credentials — serverUrl=$serverUrl")
+ Log_OC.d(TAG, "OCS credentials — accountName=$accountName username=$username authToken=$authToken")
+
+
+ } catch (e: CreationException) {
+ Log_OC.e(TAG, "OCS credentials — serverUrl=$serverUrl accountName=$accountName (client creation failed)", e)
+ }
+ }
+
}
/**
diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java
index 424f54041076..a224e80ba1a1 100644
--- a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java
+++ b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java
@@ -34,6 +34,7 @@
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
+import com.nextcloud.android.common.ui.share.ShareViewKt;
import com.nextcloud.android.common.ui.theme.utils.ColorRole;
import com.nextcloud.client.account.User;
import com.nextcloud.client.account.UserAccountManager;
@@ -43,6 +44,7 @@
import com.nextcloud.client.utils.IntentUtil;
import com.nextcloud.utils.extensions.BundleExtensionsKt;
import com.nextcloud.utils.extensions.OCShareExtensionsKt;
+import com.nextcloud.utils.extensions.OwnCloudClientExtensionsKt;
import com.nextcloud.utils.extensions.ViewExtensionsKt;
import com.nextcloud.utils.mdm.MDMConfig;
import com.owncloud.android.R;
@@ -208,11 +210,45 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
binding.pickContactEmailBtn.setOnClickListener(v -> checkContactPermission());
// start loading process
- fetchSharees();
-
+ // TODO: REPLACE FAKE CONDITION
+ if (user.getServer().getVersion().isNewerOrEqual(NextcloudVersion.nextcloud_34) || 2 < 4) {
+ showUnifiedShare();
+ } else {
+ fetchSharees();
+ }
setupView();
}
+ private void showUnifiedShare() {
+ if (binding == null) {
+ return;
+ }
+
+ binding.shareContainer.setVisibility(View.GONE);
+ binding.unifiedShare.setVisibility(View.VISIBLE);
+
+ final LinearLayout shimmerLayout = binding.shimmerLayout.getRoot();
+ shimmerLayout.clearAnimation();
+ shimmerLayout.setVisibility(View.GONE);
+
+ new Thread(() -> {{
+ try {
+ final var baseURL = user.getServer().getUri().toString();
+ final var client = clientFactory.create(user);
+ final var apiCredentials = OwnCloudClientExtensionsKt.toApiCredentials(client, baseURL);
+ final var activity = getActivity();
+ if (activity != null) {
+ activity.runOnUiThread(() -> ShareViewKt.setupUnifiedShare(binding.unifiedShare,
+ viewThemeUtils.files.getColorScheme(requireContext()),
+ apiCredentials));
+
+ }
+ } catch (ClientFactory.CreationException e) {
+ Log_OC.e(TAG, "client creation failed");
+ }
+ }}).start();
+ }
+
private void fetchSharees() {
final var activity = fileActivity;
if (activity == null) {
diff --git a/app/src/main/res/layout/file_details_sharing_fragment.xml b/app/src/main/res/layout/file_details_sharing_fragment.xml
index 14a056da8f5c..a03e8e26ba39 100644
--- a/app/src/main/res/layout/file_details_sharing_fragment.xml
+++ b/app/src/main/res/layout/file_details_sharing_fragment.xml
@@ -231,10 +231,17 @@
android:text="@string/show_all" />
+
+
+
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index e2da03d5fef9..606e6a610b92 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -2,7 +2,7 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
[versions]
-androidCommonLibraryVersion = "0.33.2"
+androidCommonLibraryVersion = "e45466a08a"
androidGifDrawableVersion = "1.2.31"
androidImageCropperVersion = "4.7.0"
androidLibraryVersion ="20e8cd17191f337d34b2ed97e0ac61e84a0bfc39"
@@ -85,6 +85,7 @@ stateless4jVersion = "2.6.0"
webkitVersion = "1.15.0"
workRuntime = "2.11.2"
foundationVersion = "1.10.6"
+material3Version = "1.4.0"
[libraries]
# Crypto
@@ -240,6 +241,7 @@ qrcodescanner = { module = "com.github.nextcloud-deps:qrcodescanner", version.re
work-runtime = { module = "androidx.work:work-runtime", version.ref = "workRuntime" }
work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "workRuntime" }
foundation = { group = "androidx.compose.foundation", name = "foundation", version.ref = "foundationVersion" }
+material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "material3Version" }
[bundles]
media3 = ["media3-ui", "media3-session", "media3-exoplayer", "media3-datasource"]
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index c7804dce66d7..d3769bd753fe 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -22291,6 +22291,14 @@
+
+
+
+
+
+
+
+
@@ -22535,6 +22543,14 @@
+
+
+
+
+
+
+
+
@@ -22775,6 +22791,14 @@
+
+
+
+
+
+
+
+