Commit fbd9596d authored by Thomas's avatar Thomas
Browse files

Merge pull request 'Fix share feature' (#434) from Augier/Fedilab:fix-share into develop

parents 95f0db64 32ea2cdb
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -95,6 +95,8 @@ dependencies {
    implementation "com.github.bumptech.glide:glide:4.12.0"
    implementation "com.github.bumptech.glide:okhttp3-integration:4.12.0"

    implementation "org.jsoup:jsoup:1.15.1"

    implementation 'com.github.mergehez:ArgPlayer:v3.1'
    implementation project(path: ':mytransl')
    implementation project(path: ':ratethisapp')
+102 −95
Original line number Diff line number Diff line
@@ -79,6 +79,10 @@ import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.tabs.TabLayout;
import com.jaredrummler.cyanea.Cyanea;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -852,15 +856,9 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
                    boolean fetchSharedMedia = sharedpreferences.getBoolean(getString(R.string.SET_RETRIEVE_METADATA_IF_URL_FROM_EXTERAL), true);
                    boolean fetchShareContent = sharedpreferences.getBoolean(getString(R.string.SET_SHARE_DETAILS), true);
                    if (url[0] != null && count == 1 && (fetchShareContent || fetchSharedMedia)) {
                        if (!url[0].trim().equalsIgnoreCase(sharedText.trim())) {
                            Bundle b = new Bundle();
                            b.putString(Helper.ARG_SHARE_TITLE, sharedSubject);
                            b.putString(Helper.ARG_SHARE_DESCRIPTION, sharedText);
                            CrossActionHelper.doCrossShare(BaseMainActivity.this, b);
                        } else {
                        String originalUrl = url[0];
                        new Thread(() -> {
                                if (url[0].startsWith("www."))
                                    url[0] = "http://" + url[0];
                            if (!url[0].matches("^https?://.*")) url[0] = "http://" + url[0];
                            Matcher matcherPattern = Patterns.WEB_URL.matcher(url[0]);
                            String potentialUrl = null;
                            while (matcherPattern.find()) {
@@ -871,9 +869,7 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
                            }
                            // If we actually have a URL then make use of it.
                            if (potentialUrl != null && potentialUrl.length() > 0) {
                                    Pattern titlePattern = Pattern.compile("<meta [^>]*property=[\"']og:title[\"'] [^>]*content=[\"']([^'^\"]+?)[\"'][^>]*>");
                                    Pattern descriptionPattern = Pattern.compile("<meta [^>]*property=[\"']og:description[\"'] [^>]*content=[\"']([^'^\"]+?)[\"'][^>]*>");
                                    Pattern imagePattern = Pattern.compile("<meta [^>]*property=[\"']og:image[\"'] [^>]*content=[\"']([^'^\"]+?)[\"'][^>]*>");


                                try {
                                    OkHttpClient client = new OkHttpClient.Builder()
@@ -896,40 +892,53 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt
                                            if (response.isSuccessful()) {
                                                try {
                                                    String data = response.body().string();
                                                        Matcher matcherTitle;
                                                        matcherTitle = titlePattern.matcher(data);
                                                        Matcher matcherDescription = descriptionPattern.matcher(data);
                                                        Matcher matcherImage = imagePattern.matcher(data);
                                                        String titleEncoded = null;
                                                        String descriptionEncoded = null;
                                                        if (fetchShareContent) {
                                                            while (matcherTitle.find())
                                                                titleEncoded = matcherTitle.group(1);
                                                            while (matcherDescription.find())
                                                                descriptionEncoded = matcherDescription.group(1);
                                                        }
                                                        String image = null;
                                                        if (fetchSharedMedia) {
                                                            while (matcherImage.find())
                                                                image = matcherImage.group(1);
                                                        }
                                                        String title = null;
                                                        String description = null;
                                                    Document html = Jsoup.parse(data);

                                                    Element titleEl = html.selectFirst("meta[property='og:title']");
                                                    Element descriptionEl = html.selectFirst("meta[property='og:description']");
                                                    Element imageUrlEl = html.selectFirst("meta[property='og:image']");

                                                    String title = "";
                                                    String description = "";

                                                    if(titleEl != null) {
                                                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                                                            if (titleEncoded != null)
                                                                title = Html.fromHtml(titleEncoded, Html.FROM_HTML_MODE_LEGACY).toString();
                                                            if (descriptionEncoded != null)
                                                                description = Html.fromHtml(descriptionEncoded, Html.FROM_HTML_MODE_LEGACY).toString();
                                                            title = Html.fromHtml(titleEl.attr("content"), Html.FROM_HTML_MODE_LEGACY).toString();
                                                        } else {
                                                            if (titleEncoded != null)
                                                                title = Html.fromHtml(titleEncoded).toString();
                                                            if (descriptionEncoded != null)
                                                                description = Html.fromHtml(descriptionEncoded).toString();
                                                            title = Html.fromHtml(titleEl.attr("content")).toString();
                                                        }
                                                    }
                                                        String finalImage = image;
                                                        String finalTitle = title;
                                                        String finalDescription = description;

                                                    if(descriptionEl != null) {
                                                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                                                            description = Html.fromHtml(descriptionEl.attr("content"), Html.FROM_HTML_MODE_LEGACY).toString();
                                                        } else {
                                                            description = Html.fromHtml(descriptionEl.attr("content")).toString();
                                                        }
                                                    }

                                                    String imageUrl = "";
                                                    if(imageUrlEl != null) {
                                                        imageUrl = imageUrlEl.attr("content");
                                                    }

                                                    StringBuilder titleBuilder = new StringBuilder();

                                                    if(!originalUrl.trim().equalsIgnoreCase(sharedText.trim())) {
                                                        // If the shared text is not just the URL, add it to the top
                                                        String toAppend = sharedText.replaceAll("\\s*" + Pattern.quote(originalUrl) + "\\s*", "");
                                                        titleBuilder.append(toAppend);
                                                    }

                                                    if (title.length() > 0) {
                                                        // OG title fetched from source
                                                        if(titleBuilder.length() > 0) titleBuilder.append("\n\n");
                                                        titleBuilder.append(title);
                                                    }

                                                    String finalImage = imageUrl;
                                                    String finalTitle = titleBuilder.toString();
                                                    String finalDescription = description;

                                                    runOnUiThread(() -> {
                                                        Bundle b = new Bundle();
@@ -955,8 +964,6 @@ public abstract class BaseMainActivity extends BaseActivity implements NetworkSt

                            }
                        }).start();
                        }

                    } else {
                        Bundle b = new Bundle();
                        b.putString(Helper.ARG_SHARE_TITLE, sharedSubject);