diff --git a/app/src/main/java/fr/free/nrw/commons/Utils.java b/app/src/main/java/fr/free/nrw/commons/Utils.java index 7ea05c668..0b2bbe0a0 100644 --- a/app/src/main/java/fr/free/nrw/commons/Utils.java +++ b/app/src/main/java/fr/free/nrw/commons/Utils.java @@ -188,6 +188,7 @@ public class Utils { } /** + * Opens Custom Tab Activity with in-app browser for the specified URL. * Launches intent for web URL * @param context * @param url @@ -206,7 +207,8 @@ public class Utils { builder.setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.primaryDarkColor)); builder.setExitAnimations(context, android.R.anim.slide_in_left, android.R.anim.slide_out_right); CustomTabsIntent customTabsIntent = builder.build(); - customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + // Clear previous browser tasks, so that back/exit buttons work as intended. + customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); customTabsIntent.launchUrl(context, url); } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java index 5c782dc2c..26aa6b806 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java @@ -15,8 +15,11 @@ import android.support.v7.widget.CardView; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.Html; +import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.method.LinkMovementMethod; +import android.text.style.ClickableSpan; +import android.text.style.URLSpan; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; @@ -143,6 +146,7 @@ public class UploadActivity extends AuthenticatedActivity implements UploadView, configureNavigationButtons(); configureCategories(); configureLicenses(); + configurePolicy(); presenter.init(); @@ -255,13 +259,10 @@ public class UploadActivity extends AuthenticatedActivity implements UploadView, @SuppressLint("StringFormatInvalid") @Override public void updateLicenseSummary(String selectedLicense, int imageCount) { - String licenseHyperLink = "" + + String licenseHyperLink = "" + getString(Utils.licenseNameFor(selectedLicense)) + "
"; - licenseSummary.setMovementMethod(LinkMovementMethod.getInstance()); - licenseSummary.setText( - Html.fromHtml( - getResources().getQuantityString(R.plurals.share_license_summary, - imageCount, licenseHyperLink))); + + setTextViewHTML(licenseSummary, getResources().getQuantityString(R.plurals.share_license_summary, imageCount, licenseHyperLink)); } @Override @@ -437,6 +438,47 @@ public class UploadActivity extends AuthenticatedActivity implements UploadView, finish(); } + /** + * Parses links from HTML string, and makes the links clickable in the specified TextView.
+ * Uses {@link #makeLinkClickable(SpannableStringBuilder, URLSpan)}. + * @see Source + */ + private void setTextViewHTML(TextView text, String html) + { + CharSequence sequence = Html.fromHtml(html); + SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence); + URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class); + for (URLSpan span : urls) { + makeLinkClickable(strBuilder, span); + } + text.setText(strBuilder); + text.setMovementMethod(LinkMovementMethod.getInstance()); + } + + /** + * Sets onClick handler to launch browser for the specified URLSpan. + * @see Source + */ + private void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span) + { + int start = strBuilder.getSpanStart(span); + int end = strBuilder.getSpanEnd(span); + int flags = strBuilder.getSpanFlags(span); + ClickableSpan clickable = new ClickableSpan() { + public void onClick(View view) { + // Handle hyperlink click + String hyperLink = span.getURL(); + launchBrowser(hyperLink); + } + }; + strBuilder.setSpan(clickable, start, end, flags); + strBuilder.removeSpan(span); + } + + private void launchBrowser(String hyperLink) { + Utils.handleWebUrl(this, Uri.parse(hyperLink)); + } + private void configureLicenses() { licenseSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override @@ -515,6 +557,10 @@ public class UploadActivity extends AuthenticatedActivity implements UploadView, categoriesList.setAdapter(categoriesAdapter); } + private void configurePolicy() { + setTextViewHTML(licensePolicy, getString(R.string.media_upload_policy)); + } + @SuppressLint("CheckResult") private void updateCategoryList(String filter) { List imageTitleList = presenter.getImageTitleList();