Moved handleWebUrl to its own utility class

This commit is contained in:
Paul Hawke 2025-07-02 16:13:14 -05:00
parent 181bd3dfa4
commit b37948ec39
18 changed files with 82 additions and 72 deletions

View file

@ -19,7 +19,7 @@ import fr.free.nrw.commons.theme.BaseActivity
import fr.free.nrw.commons.utils.ConfigUtils.getVersionNameWithSha import fr.free.nrw.commons.utils.ConfigUtils.getVersionNameWithSha
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
import fr.free.nrw.commons.utils.Utils import fr.free.nrw.commons.utils.Utils
import fr.free.nrw.commons.utils.Utils.handleWebUrl import fr.free.nrw.commons.utils.UrlUtils.handleWebUrl
import java.util.Collections import java.util.Collections
import androidx.core.net.toUri import androidx.core.net.toUri
@ -116,7 +116,7 @@ class AboutActivity : BaseActivity() {
intent.setPackage(Urls.FACEBOOK_PACKAGE_NAME) intent.setPackage(Urls.FACEBOOK_PACKAGE_NAME)
startActivity(intent) startActivity(intent)
} catch (e: Exception) { } catch (e: Exception) {
Utils.handleWebUrl(this, Uri.parse(Urls.FACEBOOK_WEB_URL)) handleWebUrl(this, parse(Urls.FACEBOOK_WEB_URL))
} }
} }
@ -127,12 +127,12 @@ class AboutActivity : BaseActivity() {
intent.setPackage(Urls.GITHUB_PACKAGE_NAME) intent.setPackage(Urls.GITHUB_PACKAGE_NAME)
startActivity(intent) startActivity(intent)
} catch (e: Exception) { } catch (e: Exception) {
Utils.handleWebUrl(this, Uri.parse(Urls.GITHUB_REPO_URL)) handleWebUrl(this, parse(Urls.GITHUB_REPO_URL))
} }
} }
fun launchWebsite(view: View?) { fun launchWebsite(view: View?) {
Utils.handleWebUrl(this, Uri.parse(Urls.WEBSITE_URL)) handleWebUrl(this, parse(Urls.WEBSITE_URL))
} }
fun launchRatings(view: View?) { fun launchRatings(view: View?) {
@ -149,19 +149,19 @@ class AboutActivity : BaseActivity() {
} }
fun launchCredits(view: View?) { fun launchCredits(view: View?) {
Utils.handleWebUrl(this, Uri.parse(Urls.CREDITS_URL)) handleWebUrl(this, parse(Urls.CREDITS_URL))
} }
fun launchUserGuide(view: View?) { fun launchUserGuide(view: View?) {
Utils.handleWebUrl(this, Uri.parse(Urls.USER_GUIDE_URL)) handleWebUrl(this, parse(Urls.USER_GUIDE_URL))
} }
fun launchPrivacyPolicy(view: View?) { fun launchPrivacyPolicy(view: View?) {
Utils.handleWebUrl(this, Uri.parse(BuildConfig.PRIVACY_POLICY_URL)) handleWebUrl(this, parse(BuildConfig.PRIVACY_POLICY_URL))
} }
fun launchFrequentlyAskedQuesions(view: View?) { fun launchFrequentlyAskedQuesions(view: View?) {
Utils.handleWebUrl(this, Uri.parse(Urls.FAQ_URL)) handleWebUrl(this, parse(Urls.FAQ_URL))
} }
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
@ -208,7 +208,7 @@ class AboutActivity : BaseActivity() {
val positiveButtonRunnable = Runnable { val positiveButtonRunnable = Runnable {
val langCode = instance.languageLookUpTable!!.getCodes()[spinner.selectedItemPosition] val langCode = instance.languageLookUpTable!!.getCodes()[spinner.selectedItemPosition]
Utils.handleWebUrl(this@AboutActivity, Uri.parse(Urls.TRANSLATE_WIKI_URL + langCode)) handleWebUrl(this@AboutActivity, parse(Urls.TRANSLATE_WIKI_URL + langCode))
} }
showAlertDialog( showAlertDialog(
this, this,

View file

@ -7,6 +7,7 @@ import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.PagerAdapter;
import fr.free.nrw.commons.utils.UrlUtils;
import fr.free.nrw.commons.utils.Utils; import fr.free.nrw.commons.utils.Utils;
public class WelcomePagerAdapter extends PagerAdapter { public class WelcomePagerAdapter extends PagerAdapter {
@ -48,7 +49,7 @@ public class WelcomePagerAdapter extends PagerAdapter {
// Add link to more information // Add link to more information
TextView moreInfo = layout.findViewById(R.id.welcomeInfo); TextView moreInfo = layout.findViewById(R.id.welcomeInfo);
Utils.setUnderlinedText(moreInfo, R.string.welcome_help_button_text, container.getContext()); Utils.setUnderlinedText(moreInfo, R.string.welcome_help_button_text, container.getContext());
moreInfo.setOnClickListener(view -> Utils.handleWebUrl( moreInfo.setOnClickListener(view -> UrlUtils.handleWebUrl(
container.getContext(), container.getContext(),
Uri.parse("https://commons.wikimedia.org/wiki/Help:Contents") Uri.parse("https://commons.wikimedia.org/wiki/Help:Contents")
)); ));

View file

@ -25,7 +25,6 @@ import androidx.core.content.ContextCompat
import fr.free.nrw.commons.BuildConfig import fr.free.nrw.commons.BuildConfig
import fr.free.nrw.commons.CommonsApplication import fr.free.nrw.commons.CommonsApplication
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.utils.Utils
import fr.free.nrw.commons.auth.login.LoginCallback import fr.free.nrw.commons.auth.login.LoginCallback
import fr.free.nrw.commons.auth.login.LoginClient import fr.free.nrw.commons.auth.login.LoginClient
import fr.free.nrw.commons.auth.login.LoginResult import fr.free.nrw.commons.auth.login.LoginResult
@ -37,6 +36,7 @@ import fr.free.nrw.commons.utils.AbstractTextWatcher
import fr.free.nrw.commons.utils.ActivityUtils.startActivityWithFlags import fr.free.nrw.commons.utils.ActivityUtils.startActivityWithFlags
import fr.free.nrw.commons.utils.ConfigUtils.isBetaFlavour import fr.free.nrw.commons.utils.ConfigUtils.isBetaFlavour
import fr.free.nrw.commons.utils.SystemThemeUtils import fr.free.nrw.commons.utils.SystemThemeUtils
import fr.free.nrw.commons.utils.UrlUtils
import fr.free.nrw.commons.utils.ViewUtil.hideKeyboard import fr.free.nrw.commons.utils.ViewUtil.hideKeyboard
import io.reactivex.disposables.CompositeDisposable import io.reactivex.disposables.CompositeDisposable
import timber.log.Timber import timber.log.Timber
@ -254,10 +254,10 @@ class LoginActivity : AccountAuthenticatorActivity() {
} }
private fun forgotPassword() = private fun forgotPassword() =
Utils.handleWebUrl(this, Uri.parse(BuildConfig.FORGOT_PASSWORD_URL)) UrlUtils.handleWebUrl(this, Uri.parse(BuildConfig.FORGOT_PASSWORD_URL))
private fun onPrivacyPolicyClicked() = private fun onPrivacyPolicyClicked() =
Utils.handleWebUrl(this, Uri.parse(BuildConfig.PRIVACY_POLICY_URL)) UrlUtils.handleWebUrl(this, Uri.parse(BuildConfig.PRIVACY_POLICY_URL))
private fun signUp() = private fun signUp() =
startActivity(Intent(this, SignupActivity::class.java)) startActivity(Intent(this, SignupActivity::class.java))

View file

@ -7,7 +7,6 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.utils.Utils
import fr.free.nrw.commons.campaigns.models.Campaign import fr.free.nrw.commons.campaigns.models.Campaign
import fr.free.nrw.commons.contributions.MainActivity import fr.free.nrw.commons.contributions.MainActivity
import fr.free.nrw.commons.databinding.LayoutCampaginBinding import fr.free.nrw.commons.databinding.LayoutCampaginBinding
@ -15,6 +14,7 @@ import fr.free.nrw.commons.theme.BaseActivity
import fr.free.nrw.commons.utils.CommonsDateUtil.getIso8601DateFormatShort import fr.free.nrw.commons.utils.CommonsDateUtil.getIso8601DateFormatShort
import fr.free.nrw.commons.utils.DateUtil.getExtraShortDateString import fr.free.nrw.commons.utils.DateUtil.getExtraShortDateString
import fr.free.nrw.commons.utils.SwipableCardView import fr.free.nrw.commons.utils.SwipableCardView
import fr.free.nrw.commons.utils.UrlUtils
import fr.free.nrw.commons.utils.ViewUtil.showLongToast import fr.free.nrw.commons.utils.ViewUtil.showLongToast
import timber.log.Timber import timber.log.Timber
import java.text.ParseException import java.text.ParseException
@ -74,7 +74,7 @@ class CampaignView : SwipableCardView {
if (it.isWLMCampaign) { if (it.isWLMCampaign) {
((context) as MainActivity).showNearby() ((context) as MainActivity).showNearby()
} else { } else {
Utils.handleWebUrl(context, Uri.parse(it.link)) UrlUtils.handleWebUrl(context, Uri.parse(it.link))
} }
} }
} }

View file

@ -16,7 +16,6 @@ import androidx.lifecycle.repeatOnLifecycle
import fr.free.nrw.commons.BuildConfig.COMMONS_URL import fr.free.nrw.commons.BuildConfig.COMMONS_URL
import fr.free.nrw.commons.Media import fr.free.nrw.commons.Media
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.utils.Utils
import fr.free.nrw.commons.ViewPagerAdapter import fr.free.nrw.commons.ViewPagerAdapter
import fr.free.nrw.commons.databinding.ActivityCategoryDetailsBinding import fr.free.nrw.commons.databinding.ActivityCategoryDetailsBinding
import fr.free.nrw.commons.explore.categories.media.CategoriesMediaFragment import fr.free.nrw.commons.explore.categories.media.CategoriesMediaFragment
@ -24,6 +23,7 @@ import fr.free.nrw.commons.explore.categories.parent.ParentCategoriesFragment
import fr.free.nrw.commons.explore.categories.sub.SubCategoriesFragment import fr.free.nrw.commons.explore.categories.sub.SubCategoriesFragment
import fr.free.nrw.commons.media.MediaDetailPagerFragment import fr.free.nrw.commons.media.MediaDetailPagerFragment
import fr.free.nrw.commons.theme.BaseActivity import fr.free.nrw.commons.theme.BaseActivity
import fr.free.nrw.commons.utils.UrlUtils
import fr.free.nrw.commons.wikidata.model.WikiSite import fr.free.nrw.commons.wikidata.model.WikiSite
import fr.free.nrw.commons.wikidata.model.page.PageTitle import fr.free.nrw.commons.wikidata.model.page.PageTitle
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -204,7 +204,7 @@ class CategoryDetailsActivity : BaseActivity(),
R.id.menu_browser_current_category -> { R.id.menu_browser_current_category -> {
val title = PageTitle(CATEGORY_PREFIX + categoryName, WikiSite(COMMONS_URL)) val title = PageTitle(CATEGORY_PREFIX + categoryName, WikiSite(COMMONS_URL))
Utils.handleWebUrl(this, Uri.parse(title.canonicalUri)) UrlUtils.handleWebUrl(this, Uri.parse(title.canonicalUri))
true true
} }

View file

@ -40,6 +40,7 @@ import fr.free.nrw.commons.media.MediaClient
import fr.free.nrw.commons.profile.ProfileActivity import fr.free.nrw.commons.profile.ProfileActivity
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
import fr.free.nrw.commons.utils.SystemThemeUtils import fr.free.nrw.commons.utils.SystemThemeUtils
import fr.free.nrw.commons.utils.UrlUtils
import fr.free.nrw.commons.utils.ViewUtil.showShortToast import fr.free.nrw.commons.utils.ViewUtil.showShortToast
import fr.free.nrw.commons.wikidata.model.WikiSite import fr.free.nrw.commons.wikidata.model.WikiSite
import org.apache.commons.lang3.StringUtils import org.apache.commons.lang3.StringUtils
@ -534,7 +535,7 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
val url = val url =
languageWikipediaSite!!.mobileUrl() + "/wiki/" + (contribution!!.wikidataPlace languageWikipediaSite!!.mobileUrl() + "/wiki/" + (contribution!!.wikidataPlace
?.getWikipediaPageTitle()) ?.getWikipediaPageTitle())
Utils.handleWebUrl(context, Uri.parse(url)) UrlUtils.handleWebUrl(context, Uri.parse(url))
} }
fun getContributionStateAt(position: Int): Int { fun getContributionStateAt(position: Int): Int {

View file

@ -13,7 +13,7 @@ import androidx.fragment.app.FragmentManager;
import com.google.android.material.snackbar.Snackbar; import com.google.android.material.snackbar.Snackbar;
import fr.free.nrw.commons.Media; import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.utils.Utils; import fr.free.nrw.commons.utils.UrlUtils;
import fr.free.nrw.commons.ViewPagerAdapter; import fr.free.nrw.commons.ViewPagerAdapter;
import fr.free.nrw.commons.bookmarks.items.BookmarkItemsDao; import fr.free.nrw.commons.bookmarks.items.BookmarkItemsDao;
import fr.free.nrw.commons.category.CategoryImagesCallback; import fr.free.nrw.commons.category.CategoryImagesCallback;
@ -245,7 +245,7 @@ public class WikidataItemDetailsActivity extends BaseActivity implements MediaDe
case R.id.browser_actions_menu_items: case R.id.browser_actions_menu_items:
String entityId=getIntent().getStringExtra("entityId"); String entityId=getIntent().getStringExtra("entityId");
Uri uri = Uri.parse("https://www.wikidata.org/wiki/" + entityId); Uri uri = Uri.parse("https://www.wikidata.org/wiki/" + entityId);
Utils.handleWebUrl(this, uri); UrlUtils.handleWebUrl(this, uri);
return true; return true;
case R.id.menu_bookmark_current_item: case R.id.menu_bookmark_current_item:

View file

@ -37,7 +37,7 @@ import fr.free.nrw.commons.MapController;
import fr.free.nrw.commons.Media; import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.utils.GeoCoordinates; import fr.free.nrw.commons.utils.GeoCoordinates;
import fr.free.nrw.commons.utils.Utils; import fr.free.nrw.commons.utils.UrlUtils;
import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao; import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao;
import fr.free.nrw.commons.contributions.MainActivity; import fr.free.nrw.commons.contributions.MainActivity;
import fr.free.nrw.commons.databinding.FragmentExploreMapBinding; import fr.free.nrw.commons.databinding.FragmentExploreMapBinding;
@ -646,7 +646,7 @@ public class ExploreMapFragment extends CommonsDaggerSupportFragment
binding.bottomSheetDetailsBinding.commonsButton.setVisibility( binding.bottomSheetDetailsBinding.commonsButton.setVisibility(
place.hasCommonsLink() ? View.VISIBLE : View.GONE); place.hasCommonsLink() ? View.VISIBLE : View.GONE);
binding.bottomSheetDetailsBinding.commonsButton.setOnClickListener( binding.bottomSheetDetailsBinding.commonsButton.setOnClickListener(
view -> Utils.handleWebUrl(getContext(), place.siteLinks.getCommonsLink())); view -> UrlUtils.handleWebUrl(getContext(), place.siteLinks.getCommonsLink()));
int index = 0; int index = 0;
for (Media media : mediaList) { for (Media media : mediaList) {

View file

@ -117,6 +117,7 @@ import fr.free.nrw.commons.utils.LangCodeUtils.getLocalizedResources
import fr.free.nrw.commons.utils.PermissionUtils.PERMISSIONS_STORAGE import fr.free.nrw.commons.utils.PermissionUtils.PERMISSIONS_STORAGE
import fr.free.nrw.commons.utils.PermissionUtils.checkPermissionsAndPerformAction import fr.free.nrw.commons.utils.PermissionUtils.checkPermissionsAndPerformAction
import fr.free.nrw.commons.utils.PermissionUtils.hasPermission import fr.free.nrw.commons.utils.PermissionUtils.hasPermission
import fr.free.nrw.commons.utils.UrlUtils
import fr.free.nrw.commons.utils.ViewUtil import fr.free.nrw.commons.utils.ViewUtil
import fr.free.nrw.commons.utils.ViewUtil.showShortToast import fr.free.nrw.commons.utils.ViewUtil.showShortToast
import fr.free.nrw.commons.utils.ViewUtilWrapper import fr.free.nrw.commons.utils.ViewUtilWrapper
@ -910,7 +911,7 @@ class MediaDetailFragment : CommonsDaggerSupportFragment(), CategoryEditHelper.C
private fun onMediaDetailLicenceClicked() { private fun onMediaDetailLicenceClicked() {
val url: String? = media!!.licenseUrl val url: String? = media!!.licenseUrl
if (!StringUtils.isBlank(url) && activity != null) { if (!StringUtils.isBlank(url) && activity != null) {
Utils.handleWebUrl(activity, Uri.parse(url)) UrlUtils.handleWebUrl(activity, Uri.parse(url))
} else { } else {
viewUtil.showShortToast(requireActivity(), getString(R.string.null_url)) viewUtil.showShortToast(requireActivity(), getString(R.string.null_url))
} }
@ -1766,7 +1767,7 @@ class MediaDetailFragment : CommonsDaggerSupportFragment(), CategoryEditHelper.C
private fun onSeeMoreClicked() { private fun onSeeMoreClicked() {
if (binding.nominatedDeletionBanner.visibility == View.VISIBLE && activity != null) { if (binding.nominatedDeletionBanner.visibility == View.VISIBLE && activity != null) {
Utils.handleWebUrl(activity, Uri.parse(media!!.pageTitle.mobileUri)) UrlUtils.handleWebUrl(activity, Uri.parse(media!!.pageTitle.mobileUri))
} }
} }

View file

@ -1,6 +1,6 @@
package fr.free.nrw.commons.media; package fr.free.nrw.commons.media;
import static fr.free.nrw.commons.utils.Utils.handleWebUrl; import static fr.free.nrw.commons.utils.UrlUtils.handleWebUrl;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;

View file

@ -10,13 +10,13 @@ import androidx.activity.result.ActivityResultLauncher
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.PopupMenu import androidx.appcompat.widget.PopupMenu
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.utils.Utils
import fr.free.nrw.commons.auth.LoginActivity import fr.free.nrw.commons.auth.LoginActivity
import fr.free.nrw.commons.contributions.ContributionController import fr.free.nrw.commons.contributions.ContributionController
import fr.free.nrw.commons.kvstore.JsonKvStore import fr.free.nrw.commons.kvstore.JsonKvStore
import fr.free.nrw.commons.nearby.Place import fr.free.nrw.commons.nearby.Place
import fr.free.nrw.commons.utils.ActivityUtils import fr.free.nrw.commons.utils.ActivityUtils
import fr.free.nrw.commons.utils.GeoCoordinates import fr.free.nrw.commons.utils.GeoCoordinates
import fr.free.nrw.commons.utils.UrlUtils
import fr.free.nrw.commons.wikidata.WikidataConstants import fr.free.nrw.commons.wikidata.WikidataConstants
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
@ -114,7 +114,7 @@ class CommonPlaceClickActions
} }
private fun openWebView(link: Uri): Boolean { private fun openWebView(link: Uri): Boolean {
Utils.handleWebUrl(activity, link) UrlUtils.handleWebUrl(activity, link)
return true return true
} }

View file

@ -104,6 +104,7 @@ import fr.free.nrw.commons.utils.NearbyFABUtils.addAnchorToSmallFABs
import fr.free.nrw.commons.utils.NearbyFABUtils.removeAnchorFromFAB import fr.free.nrw.commons.utils.NearbyFABUtils.removeAnchorFromFAB
import fr.free.nrw.commons.utils.NetworkUtils.isInternetConnectionEstablished import fr.free.nrw.commons.utils.NetworkUtils.isInternetConnectionEstablished
import fr.free.nrw.commons.utils.SystemThemeUtils import fr.free.nrw.commons.utils.SystemThemeUtils
import fr.free.nrw.commons.utils.UrlUtils
import fr.free.nrw.commons.utils.ViewUtil.showLongToast import fr.free.nrw.commons.utils.ViewUtil.showLongToast
import fr.free.nrw.commons.wikidata.WikidataConstants import fr.free.nrw.commons.wikidata.WikidataConstants
import fr.free.nrw.commons.wikidata.WikidataEditListener import fr.free.nrw.commons.wikidata.WikidataEditListener
@ -2860,7 +2861,7 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(),
R.drawable.ic_wikidata_logo_24dp -> { R.drawable.ic_wikidata_logo_24dp -> {
selectedPlace?.siteLinks?.wikidataLink?.let { selectedPlace?.siteLinks?.wikidataLink?.let {
Utils.handleWebUrl(this.context, it) UrlUtils.handleWebUrl(this.context, it)
} }
} }
@ -2878,13 +2879,13 @@ class NearbyParentFragment : CommonsDaggerSupportFragment(),
R.drawable.ic_wikipedia_logo_24dp -> { R.drawable.ic_wikipedia_logo_24dp -> {
selectedPlace?.siteLinks?.wikipediaLink?.let { selectedPlace?.siteLinks?.wikipediaLink?.let {
Utils.handleWebUrl(this.context, it) UrlUtils.handleWebUrl(this.context, it)
} }
} }
R.drawable.ic_commons_icon_vector -> { R.drawable.ic_commons_icon_vector -> {
selectedPlace?.siteLinks?.commonsLink?.let { selectedPlace?.siteLinks?.commonsLink?.let {
Utils.handleWebUrl(this.context, it) UrlUtils.handleWebUrl(this.context, it)
} }
} }

View file

@ -13,7 +13,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import fr.free.nrw.commons.CommonsApplication import fr.free.nrw.commons.CommonsApplication
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.utils.Utils
import fr.free.nrw.commons.auth.SessionManager import fr.free.nrw.commons.auth.SessionManager
import fr.free.nrw.commons.auth.csrf.InvalidLoginTokenException import fr.free.nrw.commons.auth.csrf.InvalidLoginTokenException
import fr.free.nrw.commons.databinding.ActivityNotificationBinding import fr.free.nrw.commons.databinding.ActivityNotificationBinding
@ -21,6 +20,7 @@ import fr.free.nrw.commons.notification.models.Notification
import fr.free.nrw.commons.notification.models.NotificationType import fr.free.nrw.commons.notification.models.NotificationType
import fr.free.nrw.commons.theme.BaseActivity import fr.free.nrw.commons.theme.BaseActivity
import fr.free.nrw.commons.utils.NetworkUtils import fr.free.nrw.commons.utils.NetworkUtils
import fr.free.nrw.commons.utils.UrlUtils
import fr.free.nrw.commons.utils.ViewUtil import fr.free.nrw.commons.utils.ViewUtil
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
@ -197,7 +197,7 @@ class NotificationActivity : BaseActivity() {
private fun handleUrl(url: String?) { private fun handleUrl(url: String?) {
if (url.isNullOrEmpty()) return if (url.isNullOrEmpty()) return
Utils.handleWebUrl(this, Uri.parse(url)) UrlUtils.handleWebUrl(this, Uri.parse(url))
} }
private fun setItems(notificationList: List<Notification>?) { private fun setItems(notificationList: List<Notification>?) {

View file

@ -15,7 +15,6 @@ import com.google.android.material.badge.BadgeDrawable
import com.google.android.material.badge.BadgeUtils import com.google.android.material.badge.BadgeUtils
import com.google.android.material.badge.ExperimentalBadgeUtils import com.google.android.material.badge.ExperimentalBadgeUtils
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.utils.Utils
import fr.free.nrw.commons.auth.SessionManager import fr.free.nrw.commons.auth.SessionManager
import fr.free.nrw.commons.databinding.FragmentAchievementsBinding import fr.free.nrw.commons.databinding.FragmentAchievementsBinding
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment import fr.free.nrw.commons.di.CommonsDaggerSupportFragment
@ -25,6 +24,7 @@ import fr.free.nrw.commons.profile.ProfileActivity
import fr.free.nrw.commons.profile.achievements.LevelController.LevelInfo.Companion.from import fr.free.nrw.commons.profile.achievements.LevelController.LevelInfo.Companion.from
import fr.free.nrw.commons.utils.ConfigUtils.isBetaFlavour import fr.free.nrw.commons.utils.ConfigUtils.isBetaFlavour
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
import fr.free.nrw.commons.utils.UrlUtils
import fr.free.nrw.commons.utils.ViewUtil.showDismissibleSnackBar import fr.free.nrw.commons.utils.ViewUtil.showDismissibleSnackBar
import fr.free.nrw.commons.utils.ViewUtil.showLongToast import fr.free.nrw.commons.utils.ViewUtil.showLongToast
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
@ -524,7 +524,7 @@ class AchievementsFragment : CommonsDaggerSupportFragment(){
getString(R.string.ok), getString(R.string.ok),
getString(R.string.read_help_link), getString(R.string.read_help_link),
{}, {},
{ Utils.handleWebUrl(requireContext(), Uri.parse(helpLinkUrl)) }, { UrlUtils.handleWebUrl(requireContext(), Uri.parse(helpLinkUrl)) },
null null
) )
} }

View file

@ -34,7 +34,6 @@ import com.karumi.dexter.PermissionToken
import com.karumi.dexter.listener.PermissionRequest import com.karumi.dexter.listener.PermissionRequest
import com.karumi.dexter.listener.multi.MultiplePermissionsListener import com.karumi.dexter.listener.multi.MultiplePermissionsListener
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.utils.Utils
import fr.free.nrw.commons.activity.SingleWebViewActivity import fr.free.nrw.commons.activity.SingleWebViewActivity
import fr.free.nrw.commons.campaigns.CampaignView import fr.free.nrw.commons.campaigns.CampaignView
import fr.free.nrw.commons.contributions.ContributionController import fr.free.nrw.commons.contributions.ContributionController
@ -51,6 +50,7 @@ import fr.free.nrw.commons.upload.LanguagesAdapter
import fr.free.nrw.commons.utils.DialogUtil import fr.free.nrw.commons.utils.DialogUtil
import fr.free.nrw.commons.utils.PermissionUtils import fr.free.nrw.commons.utils.PermissionUtils
import fr.free.nrw.commons.utils.StringUtil import fr.free.nrw.commons.utils.StringUtil
import fr.free.nrw.commons.utils.UrlUtils
import fr.free.nrw.commons.utils.ViewUtil import fr.free.nrw.commons.utils.ViewUtil
import java.util.Locale import java.util.Locale
import javax.inject.Inject import javax.inject.Inject
@ -238,7 +238,10 @@ class SettingsFragment : PreferenceFragmentCompat() {
val betaTesterPreference: Preference? = findPreference("becomeBetaTester") val betaTesterPreference: Preference? = findPreference("becomeBetaTester")
betaTesterPreference?.setOnPreferenceClickListener { betaTesterPreference?.setOnPreferenceClickListener {
Utils.handleWebUrl(requireActivity(), Uri.parse(getString(R.string.beta_opt_in_link))) UrlUtils.handleWebUrl(
requireActivity(),
Uri.parse(getString(R.string.beta_opt_in_link))
)
true true
} }
@ -295,7 +298,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
getString(R.string.ok), getString(R.string.ok),
getString(R.string.read_help_link), getString(R.string.read_help_link),
{ }, { },
{ Utils.handleWebUrl(requireContext(), Uri.parse(GET_CONTENT_PICKER_HELP_URL)) }, { UrlUtils.handleWebUrl(requireContext(), Uri.parse(GET_CONTENT_PICKER_HELP_URL)) },
null null
) )
} }

View file

@ -16,12 +16,12 @@ import android.widget.AdapterView
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import android.widget.TextView import android.widget.TextView
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.utils.Utils
import fr.free.nrw.commons.databinding.FragmentMediaLicenseBinding import fr.free.nrw.commons.databinding.FragmentMediaLicenseBinding
import fr.free.nrw.commons.upload.UploadActivity import fr.free.nrw.commons.upload.UploadActivity
import fr.free.nrw.commons.upload.UploadBaseFragment import fr.free.nrw.commons.upload.UploadBaseFragment
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
import fr.free.nrw.commons.utils.Licenses import fr.free.nrw.commons.utils.Licenses
import fr.free.nrw.commons.utils.UrlUtils
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
@ -185,7 +185,7 @@ class MediaLicenseFragment : UploadBaseFragment(), MediaLicenseContract.View {
} }
private fun launchBrowser(hyperLink: String) = private fun launchBrowser(hyperLink: String) =
Utils.handleWebUrl(context, Uri.parse(hyperLink)) UrlUtils.handleWebUrl(context, Uri.parse(hyperLink))
override fun onDestroyView() { override fun onDestroyView() {
presenter.onDetachView() presenter.onDetachView()

View file

@ -0,0 +1,36 @@
package fr.free.nrw.commons.utils;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import androidx.browser.customtabs.CustomTabColorSchemeParams;
import androidx.browser.customtabs.CustomTabsIntent;
import androidx.core.content.ContextCompat;
import fr.free.nrw.commons.R;
import timber.log.Timber;
public final class UrlUtils {
/**
* Opens Custom Tab Activity with in-app browser for the specified URL.
* Launches intent for web URL
* @param context
* @param url
*/
public static void handleWebUrl(Context context, Uri url) {
Timber.d("Launching web url %s", url.toString());
final CustomTabColorSchemeParams color = new CustomTabColorSchemeParams.Builder()
.setToolbarColor(ContextCompat.getColor(context, R.color.primaryColor))
.setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.primaryDarkColor))
.build();
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
builder.setDefaultColorSchemeParams(color);
builder.setExitAnimations(context, android.R.anim.slide_in_left, android.R.anim.slide_out_right);
CustomTabsIntent customTabsIntent = builder.build();
// Clear previous browser tasks, so that back/exit buttons work as intended.
customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
customTabsIntent.launchUrl(context, url);
}
}

View file

@ -3,23 +3,13 @@ package fr.free.nrw.commons.utils;
import android.content.ClipData; import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.text.SpannableString; import android.text.SpannableString;
import android.text.style.UnderlineSpan; import android.text.style.UnderlineSpan;
import android.widget.TextView; import android.widget.TextView;
import androidx.browser.customtabs.CustomTabColorSchemeParams;
import androidx.browser.customtabs.CustomTabsIntent;
import androidx.core.content.ContextCompat;
import fr.free.nrw.commons.R;
import java.util.Locale; import java.util.Locale;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import timber.log.Timber;
public class Utils { public class Utils {
/** /**
@ -51,29 +41,6 @@ public class Utils {
return title; return title;
} }
/**
* Opens Custom Tab Activity with in-app browser for the specified URL.
* Launches intent for web URL
* @param context
* @param url
*/
public static void handleWebUrl(Context context, Uri url) {
Timber.d("Launching web url %s", url.toString());
final CustomTabColorSchemeParams color = new CustomTabColorSchemeParams.Builder()
.setToolbarColor(ContextCompat.getColor(context, R.color.primaryColor))
.setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.primaryDarkColor))
.build();
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
builder.setDefaultColorSchemeParams(color);
builder.setExitAnimations(context, android.R.anim.slide_in_left, android.R.anim.slide_out_right);
CustomTabsIntent customTabsIntent = builder.build();
// Clear previous browser tasks, so that back/exit buttons work as intended.
customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
customTabsIntent.launchUrl(context, url);
}
/* /*
*Copies the content to the clipboard *Copies the content to the clipboard
* *