/*
* Copyright (C) 2015 Drakeet <drakeet.me@gmail.com>
*
* This file is part of Meizhi
*
* Meizhi is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Meizhi is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Meizhi. If not, see <http://www.gnu.org/licenses/>.
*/
package com.smartalk.gank.ui.widget;
import android.content.Context;
import android.os.Build;
import android.support.v7.appcompat.BuildConfig;
import android.util.AttributeSet;
import android.util.Base64;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import java.io.InputStream;
/**
* 来自drakeet的LoveVideoView
*
* @link https://github.com/drakeet/Meizhi/blob/master/app%2Fsrc%2Fmain%2Fjava%2Fme%2Fdrakeet%2Fmeizhi%2Fwidget%2FLoveVideoView.java
* It's a lovely adult video view.
* Created by drakeet on 8/14/15.
*/
public class LoveVideoView extends WebView {
private final Context mContext;
public LoveVideoView(Context context) {
this(context, null);
}
public LoveVideoView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public LoveVideoView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContext = context;
init();
}
void init() {
setWebViewClient(new LoveClient());
WebSettings webSettings = getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setDatabaseEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setSaveFormData(false);
webSettings.setAppCacheEnabled(true);
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
webSettings.setLoadWithOverviewMode(false);
webSettings.setUseWideViewPort(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (BuildConfig.DEBUG) {
WebView.setWebContentsDebuggingEnabled(true);
}
}
}
private class LoveClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 这些视频需要hack CSS才能达到全屏播放的效果
if (url.contains("www.vmovier.com")) {
injectCSS("vmovier.css");
} else if (url.contains("video.weibo.com")) {
injectCSS("weibo.css");
} else if (url.contains("m.miaopai.com")) {
injectCSS("miaopai.css");
}
}
}
// Inject CSS method: read style.css from assets folder
// Append stylesheet to document head
private void injectCSS(String filename) {
try {
InputStream inputStream = mContext.getAssets().open(filename);
byte[] buffer = new byte[inputStream.available()];
inputStream.read(buffer);
inputStream.close();
String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
loadUrl("javascript:(function() {" +
"var parent = document.getElementsByTagName('head').item(0);" +
"var style = document.createElement('style');" +
"style.type = 'text/css';" +
// Tell the browser to BASE64-decode the string into your script !!!
"style.innerHTML = window.atob('" + encoded + "');" +
"parent.appendChild(style)" +
"})()");
} catch (Exception e) {
e.printStackTrace();
}
}
}