Skip to content

Commit

Permalink
Fix #4760 In Terms of Service the website should be displayed as link…
Browse files Browse the repository at this point in the history
… and should be clickable. (#5213)

## Explanation
Fix #4760 In Terms of Service the website should be displayed as link
and should be clickable
This Solution uses SpannableString to solve the the issue. We get the
url from html spannable using regex and then set a span around it to
make the link clickable.
## Essential Checklist
<!-- Please tick the relevant boxes by putting an "x" in them. -->
- [x] The PR title and explanation each start with "Fix #bugnum: " (If
this PR fixes part of an issue, prefix the title with "Fix part of
#bugnum: ...".)
- [x] Any changes to
[scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets)
files have their rationale included in the PR explanation.
- [x] The PR follows the [style
guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide).
- [x] The PR does not contain any unnecessary code changes from Android
Studio
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)).
- [x] The PR is made from a branch that's **not** called "develop" and
is up-to-date with "develop".
- [x] The PR is **assigned** to the appropriate reviewers
([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)).

## For UI-specific PRs only
<!-- Delete these section if this PR does not include UI-related
changes. -->
If your PR includes UI-related changes, then:
- Add screenshots for portrait/landscape for both a tablet & phone of
the before & after UI changes
- For the screenshots above, include both English and pseudo-localized
(RTL) screenshots (see [RTL
guide](https://github.com/oppia/oppia-android/wiki/RTL-Guidelines))
- Add a video showing the full UX flow with a screen reader enabled (see
[accessibility
guide](https://github.com/oppia/oppia-android/wiki/Accessibility-A11y-Guide))
- For PRs introducing new UI elements or color changes, both light and
dark mode screenshots must be included
- Add a screenshot demonstrating that you ran affected Espresso tests
locally & that they're passing
## Demo Video

[oppia-.webm](https://github.com/oppia/oppia-android/assets/110051718/2d5b5bf5-3aad-43da-8b41-7146620e75ab)

---------

Co-authored-by: Tejas-67 <[email protected]>
Co-authored-by: Adhiambo Peres <[email protected]>
  • Loading branch information
3 people authored Dec 6, 2023
1 parent 3dee20b commit 0f8eb69
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,10 @@ class PoliciesFragmentPresenter @Inject constructor(
var policyWebLink = ""

if (policyPage == PolicyPage.PRIVACY_POLICY) {
policyDescription =
resourceHandler.getStringInLocale(R.string.privacy_policy_content)
policyDescription = resourceHandler.getStringInLocale(R.string.privacy_policy_content)
policyWebLink = resourceHandler.getStringInLocale(R.string.privacy_policy_web_link)
} else if (policyPage == PolicyPage.TERMS_OF_SERVICE) {
policyDescription =
resourceHandler.getStringInLocale(R.string.terms_of_service_content)
policyDescription = resourceHandler.getStringInLocale(R.string.terms_of_service_content)
policyWebLink = resourceHandler.getStringInLocale(R.string.terms_of_service_web_link)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@ import android.app.Application
import android.content.Context
import android.text.Spannable
import android.text.SpannableStringBuilder
import android.text.Spanned
import android.text.method.LinkMovementMethod
import android.text.style.URLSpan
import android.text.util.Linkify
import android.util.Patterns
import android.view.View
import android.widget.TextView
import androidx.core.text.util.LinkifyCompat
Expand Down Expand Up @@ -128,6 +131,16 @@ class HtmlParser private constructor(
htmlContent, imageGetter, computeCustomTagHandlers(supportsConceptCards, htmlContentTextView)
)

val urlPattern = Patterns.WEB_URL
val matcher = urlPattern.matcher(htmlSpannable)
while (matcher.find()) {
val start = matcher.start()
val end = matcher.end()
val url = htmlSpannable.subSequence(start, end).toString()
val urlSpan = URLSpan(url)
htmlSpannable.setSpan(urlSpan, start, end, Spanned.SPAN_EXCLUSIVE_INCLUSIVE)
}

return ensureNonEmpty(trimSpannable(htmlSpannable as SpannableStringBuilder))
}

Expand Down

0 comments on commit 0f8eb69

Please sign in to comment.