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 @@ + + + + + + + +