Loading app/build.gradle +2 −0 Original line number Diff line number Diff line Loading @@ -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') Loading app/src/main/java/app/fedilab/android/BaseMainActivity.java +102 −95 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()) { Loading @@ -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() Loading @@ -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(); Loading @@ -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); Loading Loading
app/build.gradle +2 −0 Original line number Diff line number Diff line Loading @@ -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') Loading
app/src/main/java/app/fedilab/android/BaseMainActivity.java +102 −95 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()) { Loading @@ -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() Loading @@ -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(); Loading @@ -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); Loading