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.setTitle(resobj.get("title").toString());
card.setDescription(resobj.get("description").toString()); card.setDescription(resobj.get("description").toString());
card.setImage(resobj.get("image").toString()); card.setImage(resobj.get("image").toString());
card.setHtml(resobj.get("html").toString());
card.setType(resobj.get("type").toString()); card.setType(resobj.get("type").toString());
} catch (JSONException e) { } catch (JSONException e) {
card = null; card = null;

View File

@ -29,6 +29,7 @@ public class Card{
private String description; private String description;
private String image; private String image;
private String type; private String type;
private String html;
public Card(){} 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>. */ * see <http://www.gnu.org/licenses>. */
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.os.Handler; import android.os.Handler;
@ -47,8 +48,11 @@ import android.view.LayoutInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button; import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ProgressBar; 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.OnRetrieveEmojiInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface; import fr.gouv.etalab.mastodon.interfaces.OnRetrieveFeedsInterface;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveRepliesInterface; 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.activities.MainActivity.currentLocale;
import static fr.gouv.etalab.mastodon.helper.Helper.THEME_DARK; 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; LinearLayout status_cardview;
ImageView status_cardview_image; ImageView status_cardview_image;
TextView status_cardview_title, status_cardview_content, status_cardview_url; TextView status_cardview_title, status_cardview_content, status_cardview_url;
FrameLayout status_cardview_video;
WebView status_cardview_webview;
public View getView(){ public View getView(){
return itemView; 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_title = itemView.findViewById(R.id.status_cardview_title);
status_cardview_content = itemView.findViewById(R.id.status_cardview_content); status_cardview_content = itemView.findViewById(R.id.status_cardview_content);
status_cardview_url = itemView.findViewById(R.id.status_cardview_url); 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 @Override
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, @SuppressLint("RecyclerView") final int position) { 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 else
holder.main_container.setBackgroundResource(R.color.mastodonC1___); holder.main_container.setBackgroundResource(R.color.mastodonC1___);
if( status.getCard() != null){ if( status.getCard() != null){
holder.status_cardview_content.setText(status.getCard().getDescription()); holder.status_cardview_content.setText(status.getCard().getDescription());
holder.status_cardview_title.setText(status.getCard().getTitle()); holder.status_cardview_title.setText(status.getCard().getTitle());
holder.status_cardview_url.setText(status.getCard().getUrl()); 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); .into(holder.status_cardview_image);
}else }else
holder.status_cardview_image.setVisibility(View.GONE); holder.status_cardview_image.setVisibility(View.GONE);
holder.status_cardview.setVisibility(View.VISIBLE); if( !status.getCard().getType().equals("video")) {
holder.status_cardview.setOnClickListener(new View.OnClickListener() { holder.status_cardview.setVisibility(View.VISIBLE);
@Override holder.status_cardview_video.setVisibility(View.GONE);
public void onClick(View view) { holder.status_cardview.setOnClickListener(new View.OnClickListener() {
Intent intent = new Intent(context, WebviewActivity.class); @Override
Bundle b = new Bundle(); public void onClick(View view) {
b.putString("url", status.getCard().getUrl()); Intent intent = new Intent(context, WebviewActivity.class);
intent.putExtras(b); Bundle b = new Bundle();
context.startActivity(intent); 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 { }else {
holder.status_cardview.setVisibility(View.GONE); holder.status_cardview.setVisibility(View.GONE);
holder.status_cardview_video.setVisibility(View.GONE);
} }
}else { }else {

View File

@ -244,6 +244,16 @@
android:layout_height="wrap_content" /> android:layout_height="wrap_content" />
</LinearLayout> </LinearLayout>
</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 <LinearLayout
android:id="@+id/status_document_container" android:id="@+id/status_document_container"