Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ import android.view.Menu
import android.view.MenuItem
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.snackbar.Snackbar
import com.nextcloud.client.utils.IntentUtil
import com.nextcloud.utils.SnackbarUtil
import com.owncloud.android.R
import com.owncloud.android.databinding.ActivityShowErrorBinding
import com.owncloud.android.utils.ClipboardUtil
import com.owncloud.android.utils.DisplayUtils

class ShowErrorActivity : AppCompatActivity() {
private lateinit var binding: ActivityShowErrorBinding
Expand Down Expand Up @@ -46,7 +46,7 @@ class ShowErrorActivity : AppCompatActivity() {
private fun reportIssue() {
ClipboardUtil.copyToClipboard(this, binding.textViewError.text.toString(), true)
val issueLink = getString(R.string.report_issue_link)
DisplayUtils.startLinkIntent(this, issueLink)
IntentUtil.startLinkIntent(this, issueLink)
}

override fun onCreateOptionsMenu(menu: Menu): Boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import com.nextcloud.client.account.UserAccountManager
import com.nextcloud.client.appinfo.AppInfo
import com.nextcloud.client.di.Injectable
import com.nextcloud.client.preferences.AppPreferences
import com.nextcloud.client.utils.IntentUtil
import com.nextcloud.utils.SnackbarUtil
import com.nextcloud.utils.mdm.MDMConfig
import com.owncloud.android.BuildConfig
Expand Down Expand Up @@ -157,7 +158,7 @@ class FirstRunActivity :
binding.hostOwnServer.visibility = if (isProviderOrOwnInstallationVisible) View.VISIBLE else View.GONE
if (isProviderOrOwnInstallationVisible) {
binding.hostOwnServer.setOnClickListener {
DisplayUtils.startLinkIntent(
IntentUtil.startLinkIntent(
this,
R.string.url_server_install
)
Expand Down
34 changes: 34 additions & 0 deletions app/src/main/java/com/nextcloud/client/utils/IntentUtil.kt
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
/*
* Nextcloud - Android Client
*
* SPDX-FileCopyrightText: 2026 Alper Ozturk <alper.ozturk@nextcloud.com>
* SPDX-FileCopyrightText: 2026 TSI-mc <surinder.kumar@t-systems.com>
* SPDX-FileCopyrightText: 2022 Álvaro Brey <alvaro@alvarobrey.com>
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH
* SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only
*/
package com.nextcloud.client.utils

import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import androidx.annotation.StringRes
import androidx.core.net.toUri
import androidx.fragment.app.FragmentActivity
import com.nextcloud.utils.SnackbarUtil
import com.owncloud.android.R
import com.owncloud.android.datamodel.OCFile
import com.owncloud.android.ui.activity.FileDisplayActivity
import com.owncloud.android.ui.dialog.ShareLinkToDialog
Expand Down Expand Up @@ -44,6 +50,34 @@ object IntentUtil {
private fun getExposedFileUris(context: Context, files: Array<OCFile>): ArrayList<Uri> =
ArrayList(files.map { it.getExposedFileUri(context) })

@JvmStatic
fun startLinkIntent(activity: Activity, @StringRes link: Int) = startLinkIntent(activity, activity.getString(link))

@JvmStatic
fun startLinkIntent(activity: Activity, url: String?) {
if (url.isNullOrEmpty()) {
return
}

startLinkIntent(activity, url.toUri())
}

@JvmStatic
fun startLinkIntent(activity: Activity, uri: Uri) {
val intent = Intent(Intent.ACTION_VIEW, uri)
startIntentIfAppAvailable(intent, activity, R.string.no_browser_available)
}

@JvmStatic
fun startIntentIfAppAvailable(intent: Intent, activity: Activity, @StringRes error: Int) {
if (intent.resolveActivity(activity.packageManager) == null) {
SnackbarUtil.show(activity, error)
return
}

activity.startActivity(intent)
}

fun showShareLinkDialog(activity: FragmentActivity, link: String?) {
val intent = Intent(Intent.ACTION_SEND).apply {
putExtra(Intent.EXTRA_TEXT, link)
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/com/nextcloud/ui/ClientIntegrationScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ import com.nextcloud.android.lib.resources.clientintegration.LayoutOrientation
import com.nextcloud.android.lib.resources.clientintegration.LayoutRow
import com.nextcloud.android.lib.resources.clientintegration.LayoutText
import com.nextcloud.android.lib.resources.clientintegration.LayoutURL
import com.nextcloud.client.utils.IntentUtil
import com.nextcloud.utils.extensions.getActivity
import com.owncloud.android.R
import com.owncloud.android.lib.resources.status.OCCapability
import com.owncloud.android.utils.DisplayUtils

@Composable
fun ClientIntegrationScreen(clientIntegrationUI: ClientIntegrationUI, baseUrl: String) {
Expand Down Expand Up @@ -103,7 +103,7 @@ private fun DisplayElement(element: Element, baseUrl: String, activity: Activity

private fun openLink(activity: Activity?, baseUrl: String, relativeUrl: String) {
activity?.let {
DisplayUtils.startLinkIntent(activity, baseUrl + relativeUrl)
IntentUtil.startLinkIntent(activity, baseUrl + relativeUrl)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import androidx.exifinterface.media.ExifInterface
import androidx.lifecycle.lifecycleScope
import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.client.NominatimClient
import com.nextcloud.client.utils.IntentUtil
import com.nextcloud.ui.fileInfo.model.ImageMetadata
import com.nextcloud.utils.extensions.getSmallThumbnail
import com.owncloud.android.MainApp
Expand Down Expand Up @@ -269,7 +270,7 @@ class ImageDetailInfo(private val fragment: FileInfoFragment, private val viewTh
object : ItemizedIconOverlay.OnItemGestureListener<OverlayItem> {
override fun onItemSingleTapUp(index: Int, item: OverlayItem): Boolean {
val intent = Intent(Intent.ACTION_VIEW, "geo:0,0?q=$latitude,$longitude".toUri())
DisplayUtils.startIntentIfAppAvailable(intent, fragment.activity, R.string.no_map_app_availble)
IntentUtil.startIntentIfAppAvailable(intent, fragment.requireActivity(), R.string.no_map_app_availble)
return true
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
import com.nextcloud.client.onboarding.FirstRunActivity;
import com.nextcloud.client.player.media3.PlaybackModel;
import com.nextcloud.client.preferences.AppPreferences;
import com.nextcloud.client.utils.IntentUtil;
import com.nextcloud.common.NextcloudClient;
import com.nextcloud.ui.ChooseAccountDialogFragment;
import com.nextcloud.ui.composeActivity.ComposeActivity;
Expand Down Expand Up @@ -829,7 +830,7 @@ private void externalLinkClicked(MenuItem menuItem) {
}

if (link.getRedirect()) {
DisplayUtils.startLinkIntent(DrawerActivity.this, link.getUrl());
IntentUtil.startLinkIntent(DrawerActivity.this, link.getUrl());
} else {
Intent externalWebViewIntent = new Intent(getApplicationContext(), ExternalSiteWebView.class);
externalWebViewIntent.putExtra(ExternalSiteWebView.EXTRA_TITLE, link.getName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import android.webkit.WebView;
import android.widget.ProgressBar;

import com.nextcloud.client.utils.IntentUtil;
import com.nextcloud.utils.SnackbarUtil;
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
Expand Down Expand Up @@ -150,7 +151,7 @@ public void onReceivedError(WebView view, WebResourceRequest request, WebResourc
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (!request.isRedirect()) {
DisplayUtils.startLinkIntent(self, request.getUrl());
IntentUtil.startLinkIntent(self, request.getUrl());
return true;
}
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import com.nextcloud.client.network.ConnectivityService;
import com.nextcloud.client.network.NetworkChangeListener;
import com.nextcloud.client.player.ui.PlayerActivity;
import com.nextcloud.client.utils.IntentUtil;
import com.nextcloud.utils.EditorUtils;
import com.nextcloud.utils.SnackbarUtil;
import com.nextcloud.utils.extensions.ActivityExtensionsKt;
Expand Down Expand Up @@ -97,7 +98,6 @@
import com.owncloud.android.ui.helpers.FileOperationsHelper;
import com.owncloud.android.ui.preview.PreviewImageActivity;
import com.owncloud.android.utils.ClipboardUtil;
import com.owncloud.android.utils.DisplayUtils;
import com.owncloud.android.utils.ErrorMessageAdapter;
import com.owncloud.android.utils.FilesSyncHelper;
import com.owncloud.android.utils.theme.ViewThemeUtils;
Expand Down Expand Up @@ -733,11 +733,11 @@ public static void showDevSnackbar(Activity activity,
if (latestVersion > currentVersion) {
String devApkLink = activity.getString(R.string.dev_link) + latestVersion + ".apk";
if (openDirectly) {
DisplayUtils.startLinkIntent(activity, devApkLink);
IntentUtil.startLinkIntent(activity, devApkLink);
} else {
Snackbar.make(activity.findViewById(android.R.id.content), R.string.dev_version_new_version_available,
Snackbar.LENGTH_LONG)
.setAction(activity.getString(R.string.version_dev_download), v -> DisplayUtils.startLinkIntent(activity, devApkLink)).show();
.setAction(activity.getString(R.string.version_dev_download), v -> IntentUtil.startLinkIntent(activity, devApkLink)).show();
}
} else {
if (!inBackground) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import com.nextcloud.client.preferences.AppPreferences;
import com.nextcloud.client.preferences.AppPreferencesImpl;
import com.nextcloud.client.preferences.DarkMode;
import com.nextcloud.client.utils.IntentUtil;
import com.nextcloud.utils.SnackbarUtil;
import com.nextcloud.utils.extensions.ContextExtensionsKt;
import com.nextcloud.utils.mdm.MDMConfig;
Expand All @@ -77,7 +78,6 @@
import com.owncloud.android.ui.model.ExtendedSettingsActivityDialog;
import com.owncloud.android.utils.ClipboardUtil;
import com.owncloud.android.utils.DeviceCredentialUtils;
import com.owncloud.android.utils.DisplayUtils;
import com.owncloud.android.utils.EncryptionUtils;
import com.owncloud.android.utils.MimeTypeUtil;
import com.owncloud.android.utils.PermissionUtil;
Expand Down Expand Up @@ -251,7 +251,7 @@ private void setupDevCategory(PreferenceScreen preferenceScreen) {
Preference pChangelogLink = findPreference("changelog_link");
if (pChangelogLink != null) {
pChangelogLink.setOnPreferenceClickListener(preference -> {
DisplayUtils.startLinkIntent(this, R.string.dev_changelog);
IntentUtil.startLinkIntent(this, R.string.dev_changelog);
return true;
});
}
Expand Down Expand Up @@ -296,7 +296,7 @@ private void setupAboutCategory(String appVersion) {
if (licenseEnabled) {
licensePreference.setSummary(R.string.prefs_gpl_v2);
licensePreference.setOnPreferenceClickListener(preference -> {
DisplayUtils.startLinkIntent(this, R.string.license_url);
IntentUtil.startLinkIntent(this, R.string.license_url);
return true;
});
} else {
Expand All @@ -317,7 +317,7 @@ private void setupAboutCategory(String appVersion) {
Intent intent;
if (MimeTypeUtil.isPDF(mimeType)) {
intent = new Intent(Intent.ACTION_VIEW, privacyUrl);
DisplayUtils.startIntentIfAppAvailable(intent, this, R.string.no_pdf_app_available);
IntentUtil.startIntentIfAppAvailable(intent, this, R.string.no_pdf_app_available);
} else {
intent = new Intent(getApplicationContext(), ExternalSiteWebView.class);
intent.putExtra(ExternalSiteWebView.EXTRA_TITLE,
Expand All @@ -344,7 +344,7 @@ private void setupAboutCategory(String appVersion) {
if (sourcecodePreference != null) {
if (sourcecodeEnabled) {
sourcecodePreference.setOnPreferenceClickListener(preference -> {
DisplayUtils.startLinkIntent(this, R.string.sourcecode_url);
IntentUtil.startLinkIntent(this, R.string.sourcecode_url);
return true;
});
} else {
Expand Down Expand Up @@ -402,7 +402,7 @@ private void setupImprintPreference(PreferenceCategory preferenceCategoryMore) {
String imprintWeb = getString(R.string.url_imprint);

if (!imprintWeb.isEmpty()) {
DisplayUtils.startLinkIntent(this, imprintWeb);
IntentUtil.startLinkIntent(this, imprintWeb);
}
//ImprintDialog.newInstance(true).show(preference.get, "IMPRINT_DIALOG");
return true;
Expand Down Expand Up @@ -666,7 +666,7 @@ private void setupHelpPreference(PreferenceCategory preferenceCategoryMore) {
if (pHelp != null) {
if (helpEnabled) {
pHelp.setOnPreferenceClickListener(preference -> {
DisplayUtils.startLinkIntent(this, R.string.url_help);
IntentUtil.startLinkIntent(this, R.string.url_help);
return true;
});
} else {
Expand Down Expand Up @@ -1055,7 +1055,7 @@ private void launchDavDroidLogin() {
startActivity(installIntent);
} else {
// no f-droid market app or Play store installed --> launch browser for f-droid url
DisplayUtils.startLinkIntent(this, "https://f-droid.org/packages/at.bitfire.davdroid/");
IntentUtil.startLinkIntent(this, "https://f-droid.org/packages/at.bitfire.davdroid/");

SnackbarUtil.show(this, R.string.prefs_calendar_contacts_no_store_error);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.button.MaterialButton
import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.client.account.CurrentAccountProvider
import com.nextcloud.client.utils.IntentUtil
import com.nextcloud.utils.extensions.setVisibleIf
import com.nextcloud.utils.text.RichSubjectFormatter
import com.nextcloud.utils.text.RichSubjectParam
Expand Down Expand Up @@ -96,7 +97,7 @@ class NotificationListAdapter(
setTypeface(typeface, Typeface.BOLD)
text = subject
setOnClickListener {
DisplayUtils.startLinkIntent(fragment.requireActivity(), notification.getLink())
IntentUtil.startLinkIntent(fragment.requireActivity(), notification.getLink())
}
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import com.nextcloud.client.account.UserAccountManager
import com.nextcloud.client.di.Injectable
import com.nextcloud.client.jobs.BackgroundJobManager
import com.nextcloud.client.player.media3.PlaybackModel
import com.nextcloud.client.utils.IntentUtil
import com.nextcloud.utils.extensions.getParcelableArgument
import com.owncloud.android.R
import com.owncloud.android.databinding.AccountRemovalDialogBinding
Expand Down Expand Up @@ -131,7 +132,7 @@ class AccountRemovalDialog :
user?.let { user ->
stopMediaPlayerAndHidePip()
if (binding.radioRequestDeletion.isChecked) {
DisplayUtils.startLinkIntent(activity, user.server.uri.toString() + DROP_ACCOUNT_URI)
IntentUtil.startLinkIntent(requireActivity(), user.server.uri.toString() + DROP_ACCOUNT_URI)
} else {
backgroundJobManager.startAccountRemovalJob(user.accountName, false)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import com.google.android.material.button.MaterialButton
import com.nextcloud.android.lib.resources.profile.Action
import com.nextcloud.android.lib.resources.profile.HoverCard
import com.nextcloud.client.account.User
import com.nextcloud.client.utils.IntentUtil
import com.owncloud.android.R
import com.owncloud.android.databinding.ProfileBottomSheetFragmentBinding
import com.owncloud.android.utils.DisplayUtils
Expand Down Expand Up @@ -146,7 +147,7 @@ class ProfileBottomSheetDialog(
}

private fun openWebsite(url: String) {
DisplayUtils.startLinkIntent(fileActivity, url)
IntentUtil.startLinkIntent(fileActivity, url)
}

private fun sendEmail(email: String) {
Expand All @@ -155,7 +156,7 @@ class ProfileBottomSheetDialog(
putExtra(Intent.EXTRA_EMAIL, arrayOf(email))
}

DisplayUtils.startIntentIfAppAvailable(intent, fileActivity, R.string.no_email_app_available)
IntentUtil.startIntentIfAppAvailable(intent, fileActivity, R.string.no_email_app_available)
}

private fun openTalk(userId: String, hyperlink: String) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.nextcloud.client.utils.IntentUtil
import com.nextcloud.utils.BuildHelper
import com.nextcloud.utils.extensions.setHtmlContent
import com.owncloud.android.R
import com.owncloud.android.databinding.FragmentCommunityBinding
import com.owncloud.android.utils.DisplayUtils
import com.owncloud.android.utils.theme.ViewThemeUtils
import javax.inject.Inject

Expand Down Expand Up @@ -85,7 +85,7 @@ class CommunityFragment : Fragment() {

binding?.communityTestingReport?.let { viewThemeUtils.material.colorMaterialButtonPrimaryFilled(it) }
binding?.communityTestingReport?.setOnClickListener {
DisplayUtils.startLinkIntent(requireActivity(), R.string.report_issue_empty_link)
IntentUtil.startLinkIntent(requireActivity(), R.string.report_issue_empty_link)
}
}

Expand All @@ -99,7 +99,7 @@ class CommunityFragment : Fragment() {
binding?.communityBetaApk to R.string.beta_apk_link
).forEach { (view, linkRes) ->
view?.setOnClickListener {
DisplayUtils.startLinkIntent(activity, linkRes)
IntentUtil.startLinkIntent(activity, linkRes)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.client.account.UserAccountManager
import com.nextcloud.client.device.DeviceInfo
import com.nextcloud.client.di.Injectable
import com.nextcloud.client.utils.IntentUtil
import com.nextcloud.utils.LinkHelper
import com.nextcloud.utils.SnackbarUtil
import com.nextcloud.utils.extensions.setHtmlContent
Expand All @@ -38,7 +39,6 @@ import com.owncloud.android.datamodel.OCFile
import com.owncloud.android.lib.common.utils.Log_OC
import com.owncloud.android.ui.activity.FileDisplayActivity
import com.owncloud.android.ui.fragment.FileFragment
import com.owncloud.android.utils.DisplayUtils
import com.owncloud.android.utils.MimeTypeUtil
import com.owncloud.android.utils.StringUtils
import com.owncloud.android.utils.theme.ViewThemeUtils
Expand Down Expand Up @@ -200,7 +200,7 @@ abstract class PreviewTextFragment :
override fun configureConfiguration(builder: MarkwonConfiguration.Builder) {
builder.linkResolver { _, link ->
if (LinkHelper.isHttpOrHttpsLink(link)) {
DisplayUtils.startLinkIntent(activity, link)
IntentUtil.startLinkIntent(activity, link)
} else {
SnackbarUtil.show(
activity,
Expand Down
Loading
Loading