From 3324fd7c325ee7f8f16ce7f5e193578cb138879c Mon Sep 17 00:00:00 2001 From: stom79 Date: Sat, 29 Sep 2018 14:11:42 +0200 Subject: [PATCH] Manage peertube videos comments --- .../mastodon/activities/WebviewActivity.java | 56 +++++++++++++++++- .../mastodon/client/Entities/Status.java | 24 ++++++-- .../mastodon/drawers/HowToVideosAdapter.java | 9 +++ .../res/drawable-hdpi/ic_comment_peertube.png | Bin 0 -> 213 bytes .../res/drawable-ldpi/ic_comment_peertube.png | Bin 0 -> 275 bytes .../res/drawable-mdpi/ic_comment_peertube.png | Bin 0 -> 165 bytes .../drawable-xhdpi/ic_comment_peertube.png | Bin 0 -> 189 bytes .../drawable-xxhdpi/ic_comment_peertube.png | Bin 0 -> 270 bytes .../drawable-xxxhdpi/ic_comment_peertube.png | Bin 0 -> 296 bytes app/src/main/res/menu/main_webview.xml | 6 ++ app/src/main/res/values/strings.xml | 1 + 11 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_comment_peertube.png create mode 100644 app/src/main/res/drawable-ldpi/ic_comment_peertube.png create mode 100644 app/src/main/res/drawable-mdpi/ic_comment_peertube.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_comment_peertube.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_comment_peertube.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_comment_peertube.png diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/WebviewActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/WebviewActivity.java index 411a186f0..dcc6c7ef8 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/WebviewActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/WebviewActivity.java @@ -16,10 +16,12 @@ package fr.gouv.etalab.mastodon.activities; import android.Manifest; +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.net.Uri; +import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.support.v4.app.ActivityCompat; @@ -34,6 +36,11 @@ import android.webkit.WebView; import android.widget.FrameLayout; import android.widget.Toast; +import java.lang.ref.WeakReference; +import java.util.List; + +import fr.gouv.etalab.mastodon.client.API; +import fr.gouv.etalab.mastodon.client.Entities.Results; import fr.gouv.etalab.mastodon.helper.Helper; import fr.gouv.etalab.mastodon.webview.MastalabWebChromeClient; import fr.gouv.etalab.mastodon.webview.MastalabWebViewClient; @@ -51,9 +58,10 @@ import static fr.gouv.etalab.mastodon.helper.Helper.manageDownloads; public class WebviewActivity extends BaseActivity { private String url; + private String peertubeLinkToFetch; + private boolean peertubeLink; private WebView webView; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -75,8 +83,11 @@ public class WebviewActivity extends BaseActivity { setContentView(R.layout.activity_webview); Bundle b = getIntent().getExtras(); - if(b != null) + if(b != null) { url = b.getString("url", null); + peertubeLinkToFetch = b.getString("peertubeLinkToFetch", null); + peertubeLink = b.getBoolean("peertubeLink", false); + } if( url == null) finish(); if( getSupportActionBar() != null) @@ -135,6 +146,10 @@ public class WebviewActivity extends BaseActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_webview, menu); + if( peertubeLink ){ + menu.findItem(R.id.action_go).setVisible(false); + menu.findItem(R.id.action_comment).setVisible(true); + } return true; } @Override @@ -151,6 +166,43 @@ public class WebviewActivity extends BaseActivity { Toast.makeText(WebviewActivity.this, R.string.toast_error, Toast.LENGTH_LONG).show(); } return true; + case R.id.action_comment: + Toast.makeText(WebviewActivity.this, R.string.retrieve_remote_status, Toast.LENGTH_LONG).show(); + new AsyncTask() { + + private List remoteStatuses; + private WeakReference contextReference = new WeakReference<>(WebviewActivity.this); + + @Override + protected Void doInBackground(Void... voids) { + + if(url != null) { + Results search = new API(contextReference.get()).search(peertubeLinkToFetch); + if (search != null) { + remoteStatuses = search.getStatuses(); + } + } + return null; + } + + @Override + protected void onPostExecute(Void result) { + Intent intent = new Intent(contextReference.get(), TootActivity.class); + Bundle b = new Bundle(); + if( remoteStatuses == null || remoteStatuses.size() == 0){ + Toast.makeText(contextReference.get(), R.string.toast_error, Toast.LENGTH_SHORT).show(); + return; + } + if( remoteStatuses.get(0).getReblog() != null ) { + b.putParcelable("tootReply", remoteStatuses.get(0).getReblog()); + }else { + b.putParcelable("tootReply", remoteStatuses.get(0)); + } + intent.putExtras(b); //Put your id to your next Intent + contextReference.get().startActivity(intent); + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR ); + return true; default: return super.onOptionsItemSelected(item); } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java index 3f3b3a1df..b99a437da 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/client/Entities/Status.java @@ -59,6 +59,7 @@ import fr.gouv.etalab.mastodon.R; import fr.gouv.etalab.mastodon.activities.HashTagActivity; import fr.gouv.etalab.mastodon.activities.MainActivity; import fr.gouv.etalab.mastodon.activities.ShowAccountActivity; +import fr.gouv.etalab.mastodon.activities.WebviewActivity; import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask; import fr.gouv.etalab.mastodon.helper.CrossActions; import fr.gouv.etalab.mastodon.helper.Helper; @@ -831,7 +832,7 @@ public class Status implements Parcelable{ for (URLSpan span : spans) { spannableStringT.removeSpan(span); } - if( endPosition <= spannableStringT.toString().length() && endPosition >= startPosition) + if( endPosition <= spannableStringT.toString().length() && endPosition >= startPosition) { spannableStringT.setSpan(new ClickableSpan() { @Override public void onClick(View textView) { @@ -844,9 +845,23 @@ public class Status implements Parcelable{ intent.putExtra(SEARCH_URL, url); context.startActivity(intent); }else { - if( !url.startsWith("http://") && ! url.startsWith("https://")) - finalUrl = "http://" + url; - Helper.openBrowser(context, finalUrl); + link = Pattern.compile("(https?:\\/\\/[\\da-z\\.-]+\\.[a-z\\.]{2,10})\\/videos\\/watch\\/(\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12})$"); + matcherLink = link.matcher(url); + if( matcherLink.find()){ //Peertubee video + String peertubeUrl = matcherLink.group(1) + "/videos/embed/" + matcherLink.group(2); + Intent intent = new Intent(context, WebviewActivity.class); + Bundle b = new Bundle(); + b.putString("url", peertubeUrl); + b.putString("peertubeLinkToFetch", url); + b.putBoolean("peertubeLink", true); + intent.putExtras(b); + context.startActivity(intent); + }else { + if( !url.startsWith("http://") && ! url.startsWith("https://")) + finalUrl = "http://" + url; + Helper.openBrowser(context, finalUrl); + } + } } @Override @@ -857,6 +872,7 @@ public class Status implements Parcelable{ }, startPosition, endPosition, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); + } if(endPosition <= spannableStringT.toString().length() && endPosition >= startPosition) spannableStringT.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, (theme==Helper.THEME_DARK||theme==Helper.THEME_BLACK)?R.color.mastodonC2:R.color.mastodonC4)), startPosition, endPosition, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/HowToVideosAdapter.java b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/HowToVideosAdapter.java index b6f91397f..e5ce1df64 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/drawers/HowToVideosAdapter.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/drawers/HowToVideosAdapter.java @@ -33,6 +33,8 @@ import android.widget.TextView; import com.bumptech.glide.Glide; import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import fr.gouv.etalab.mastodon.R; import fr.gouv.etalab.mastodon.activities.ListActivity; @@ -125,6 +127,13 @@ public class HowToVideosAdapter extends BaseAdapter implements OnListActionInter Bundle b = new Bundle(); String finalUrl = "https://peertube.fr" + howToVideo.getEmbedPath(); b.putString("url", finalUrl); + b.putBoolean("peertubeLink", true); + Pattern link = Pattern.compile("(https?:\\/\\/[\\da-z\\.-]+\\.[a-z\\.]{2,10})\\/videos\\/embed\\/(\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12})$"); + Matcher matcherLink = link.matcher(finalUrl); + if( matcherLink.find()) { + String url = matcherLink.group(1) + "/videos/watch/" + matcherLink.group(2); + b.putString("peertubeLinkToFetch", url); + } intent.putExtras(b); context.startActivity(intent); } diff --git a/app/src/main/res/drawable-hdpi/ic_comment_peertube.png b/app/src/main/res/drawable-hdpi/ic_comment_peertube.png new file mode 100644 index 0000000000000000000000000000000000000000..baf9650d23d487bb649692ba856bd09e1bd7bd04 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i0wmS%+S~(Db39!fLn>}1CoHi3asJc(XaDE@ zXXiMy*P-+bN3QArPWGuBxz!#Qwh1qM%fNZ-TSC_FhU4+_1=-dO>NofTVx?!+S$~XY zRJUOa-8|jKJ?Y}NNB^1Td|=JX<^N~?poM?MyA$01WeW~*2blgo(amsb>sm$s*%$wB zPsw1;dh$2FTiwE81M{j}`<1Tl%#pViNPV9i9AP?PDesDlbN{JoGb}Yfp>ALi)eUqf NgQu&X%Q~loCIH>8R+az& literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-ldpi/ic_comment_peertube.png b/app/src/main/res/drawable-ldpi/ic_comment_peertube.png new file mode 100644 index 0000000000000000000000000000000000000000..229361d7c4323e1a2644adb68ba9bd7838397f44 GIT binary patch literal 275 zcmV+u0qp*XP)mZI^9>7s&eFeuNYCB8tMiDn#&nZcVkQRUV z2<@K}lC+kE%Cf8mb#N-MU$ayoO;aDv5JO}T%f6onxq^K0g#@k!iR_;^pCL!C#Ksne z1{>LrIA4Xh1pxuHp{0$1>|gZI6Bf`hn8Twiw1OUVwQ*?*@l0>n!vw~fo$ME9;_V&b z124E4sM{+-HXiygg;|L;+_|GX#0tZ(A%tjF;0=!8kbftZ>$+r@@jQ}1Cn)g!N&hqd$9_h3 zABIy*Qw|!EHX;B3 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_comment_peertube.png b/app/src/main/res/drawable-xhdpi/ic_comment_peertube.png new file mode 100644 index 0000000000000000000000000000000000000000..6becf36765aac8b30165d3bf2ab51ac162fe2ffc GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K8i>HfYNX4zYR~@+;6a-i=MBd!^ znWgc0j^ex3D<>E%ZZ)oR`dzQcVOJoa@~gTc;rP6zoX0f}mrQ$9l#^lnbV9guG2hG0 zUswVity>d}H?jIg28RD;YKrxpwk}Pj+3ZTstac`@B8?L(_AM6oi27Zl7xls~)Twh- mn;sW~D;JYszeYz?YuRg|E6wL#uha&*hr!d;&t;ucLK6T~1w}ys literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_comment_peertube.png b/app/src/main/res/drawable-xxhdpi/ic_comment_peertube.png new file mode 100644 index 0000000000000000000000000000000000000000..62c181e7989df9e36e6d9adc8379a45c46ff83b6 GIT binary patch literal 270 zcmV+p0rCEcP)8B>Hq)$ literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_comment_peertube.png b/app/src/main/res/drawable-xxxhdpi/ic_comment_peertube.png new file mode 100644 index 0000000000000000000000000000000000000000..2e435d3a95e51a4ee35e71fca5b8da974237ea81 GIT binary patch literal 296 zcmV+@0oVSCP)!&kL4L{w5=fxx zd-L`51hf}OAon1<3G}H0+Z_@}Ac1Um6sUWU-8&>u??5Mkx(C@!Ac21E+#^uV21?jK z5gTZT4Hu~Rd|7jWic^|miJe2xr5$8*=4_yPl2=e2$usDk + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 55a959da7..25f1650dc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -632,6 +632,7 @@ The domain is blocked The domain is no longer blocked! Fetching remote status + Comment Never