Embeds video for cards

This commit is contained in:
stom79 2017-12-26 09:09:51 +01:00
parent 3a36f602d3
commit 582cf9f1f1
4 changed files with 61 additions and 10 deletions

View File

@ -1497,6 +1497,7 @@ public class API {
card.setTitle(resobj.get("title").toString());
card.setDescription(resobj.get("description").toString());
card.setImage(resobj.get("image").toString());
card.setHtml(resobj.get("html").toString());
card.setType(resobj.get("type").toString());
} catch (JSONException e) {
card = null;

View File

@ -29,6 +29,7 @@ public class Card{
private String description;
private String image;
private String type;
private String html;
public Card(){}
@ -74,4 +75,11 @@ public class Card{
}
public String getHtml() {
return html;
}
public void setHtml(String html) {
this.html = html;
}
}

View File

@ -15,6 +15,7 @@ package fr.gouv.etalab.mastodon.drawers;
* see <http://www.gnu.org/licenses>. */
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Typeface;
import android.os.Handler;
@ -47,8 +48,11 @@ import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
@ -95,6 +99,7 @@ import fr.gouv.etalab.mastodon.interfaces.OnPostActionInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveEmojiInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRepliesInterface;
import fr.gouv.etalab.mastodon.webview.MastalabWebViewClient;
import static fr.gouv.etalab.mastodon.activities.MainActivity.currentLocale;
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_DARK;
@ -227,6 +232,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
LinearLayout status_cardview;
ImageView status_cardview_image;
TextView status_cardview_title, status_cardview_content, status_cardview_url;
FrameLayout status_cardview_video;
WebView status_cardview_webview;
public View getView(){
return itemView;
}
@ -281,6 +288,8 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
status_cardview_title = itemView.findViewById(R.id.status_cardview_title);
status_cardview_content = itemView.findViewById(R.id.status_cardview_content);
status_cardview_url = itemView.findViewById(R.id.status_cardview_url);
status_cardview_video = itemView.findViewById(R.id.status_cardview_video);
status_cardview_webview = itemView.findViewById(R.id.status_cardview_webview);
}
}
@ -339,6 +348,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
}
@SuppressLint("SetJavaScriptEnabled")
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, @SuppressLint("RecyclerView") final int position) {
@ -880,6 +890,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
else
holder.main_container.setBackgroundResource(R.color.mastodonC1___);
if( status.getCard() != null){
holder.status_cardview_content.setText(status.getCard().getDescription());
holder.status_cardview_title.setText(status.getCard().getTitle());
holder.status_cardview_url.setText(status.getCard().getUrl());
@ -890,19 +901,40 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
.into(holder.status_cardview_image);
}else
holder.status_cardview_image.setVisibility(View.GONE);
holder.status_cardview.setVisibility(View.VISIBLE);
holder.status_cardview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, WebviewActivity.class);
Bundle b = new Bundle();
b.putString("url", status.getCard().getUrl());
intent.putExtras(b);
context.startActivity(intent);
if( !status.getCard().getType().equals("video")) {
holder.status_cardview.setVisibility(View.VISIBLE);
holder.status_cardview_video.setVisibility(View.GONE);
holder.status_cardview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, WebviewActivity.class);
Bundle b = new Bundle();
b.putString("url", status.getCard().getUrl());
intent.putExtras(b);
context.startActivity(intent);
}
});
}else {
holder.status_cardview.setVisibility(View.GONE);
holder.status_cardview_video.setVisibility(View.VISIBLE);
holder.status_cardview_webview.setWebViewClient(new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
holder.status_cardview_video.setVisibility(View.GONE);
}
});
holder.status_cardview_webview.getSettings().setJavaScriptEnabled(true);
String html = status.getCard().getHtml();
String src = status.getCard().getUrl();
if( html != null){
Matcher matcher = Pattern.compile("src=\"([^\"]+)\"").matcher(html);
if( matcher.find())
src = matcher.group(1);
}
});
holder.status_cardview_webview.loadUrl(src);
}
}else {
holder.status_cardview.setVisibility(View.GONE);
holder.status_cardview_video.setVisibility(View.GONE);
}
}else {

View File

@ -244,6 +244,16 @@
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
<FrameLayout
android:visibility="gone"
android:id="@+id/status_cardview_video"
android:layout_width="match_parent"
android:layout_height="220dp">
<WebView
android:id="@+id/status_cardview_webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
<LinearLayout
android:id="@+id/status_document_container"