/* * Copyright (C) 2014 The AppCan Open Source Project. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * This program 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 Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package org.zywx.wbpalmstar.engine; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.webkit.ConsoleMessage; import android.webkit.GeolocationPermissions; import android.webkit.WebStorage.QuotaUpdater; import android.widget.FrameLayout; import org.zywx.wbpalmstar.base.BConstant; import org.zywx.wbpalmstar.base.BDebug; import org.zywx.wbpalmstar.base.WebViewSdkCompat; import org.zywx.wbpalmstar.engine.universalex.EUExUtil; import org.zywx.wbpalmstar.widgetone.dataservice.WDataManager; import org.zywx.wbpalmstar.widgetone.dataservice.WWidgetData; public class CBrowserMainFrame7 extends CBrowserMainFrame { final long MAX_QUOTA = 104857600L; /** * android version < 2.1 use * * @param context */ public CBrowserMainFrame7(Context context) { super(context); } // private ValueCallback<Uri> mFile; public void onHideCustomView() { ((EBrowserActivity) mContext).hideCustomView(); } @Override public Bitmap getDefaultVideoPoster() { String packg = mContext.getPackageName(); Resources res = mContext.getResources(); int id = res.getIdentifier("plugin_file_video", "drawable", packg); Bitmap map = BitmapFactory.decodeResource(res, id); return map; } @Override public View getVideoLoadingProgressView() { EBrowserToast progress = new EBrowserToast(mContext); progress.setMsg(mContext.getString(EUExUtil.getResStringID("platform_myspace_loading"))); progress.setInLargeModul(); progress.showProgress(); return progress; } public void onShowCustomView(View view, int requestedOrientation, final CustomViewCallback callback) { FrameLayout container = new FrameLayout(mContext); container.setBackgroundColor(0xff000000); FrameLayout.LayoutParams parm = new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); container.setLayoutParams(parm); container.setClickable(true); container.addView(view); // ((EBrowserActivity)mContext).requestWindowFeature() WebViewSdkCompat.CustomViewCallback compatCallback=new WebViewSdkCompat.CustomViewCallback() { @Override public void onCustomViewHidden() { callback.onCustomViewHidden(); } }; ((EBrowserActivity) mContext).showCustomView(container, compatCallback); } @Override public void onShowCustomView(View view, final CustomViewCallback callback) { FullscreenHolder container = new FullscreenHolder(mContext); FrameLayout.LayoutParams parm = new FrameLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); container.setLayoutParams(parm); container.addView(view); WebViewSdkCompat.CustomViewCallback compatCallback=new WebViewSdkCompat.CustomViewCallback() { @Override public void onCustomViewHidden() { callback.onCustomViewHidden(); } }; ((EBrowserActivity) mContext).showCustomView(container, compatCallback); } @Override public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, QuotaUpdater quotaUpdater) { if (estimatedSize < MAX_QUOTA) { long newQuota = estimatedSize; quotaUpdater.updateQuota(newQuota * 2); } else { quotaUpdater.updateQuota(currentQuota); } } static class FullscreenHolder extends FrameLayout { public FullscreenHolder(Context ctx) { super(ctx); setBackgroundColor(0xFF000000); } @Override public boolean onTouchEvent(MotionEvent evt) { return true; } } // public void openFileChooser(ValueCallback<Uri> uploadFile) { // if(null != mFile){ // return; // } // mFile = uploadFile; // Intent intent = new Intent(Intent.ACTION_GET_CONTENT); // intent.addCategory(Intent.CATEGORY_OPENABLE); // intent.setType("*/*"); // ((Activity)m_eContext).startActivityForResult(Intent.createChooser(intent, ""), EBrowser.F_ACT_REQ_CODE_UEX_NATIVE_FILE_EXPLORER); // } // // public void openFileCallBack(Uri uri){ // mFile.onReceiveValue(uri); // mFile = null; // } @Override public void onGeolocationPermissionsHidePrompt() { super.onGeolocationPermissionsHidePrompt(); } @Override public void onGeolocationPermissionsShowPrompt(final String origin, final GeolocationPermissions.Callback callback) { AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setMessage("是否允许获取您的位置信息?"); DialogInterface.OnClickListener dialogButtonOnClickListener = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int clickedButton) { if (DialogInterface.BUTTON_POSITIVE == clickedButton) { callback.invoke(origin, true, true); } else if (DialogInterface.BUTTON_NEGATIVE == clickedButton) { callback.invoke(origin, false, false); } } }; builder.setPositiveButton("允许", dialogButtonOnClickListener); builder.setNegativeButton("拒绝", dialogButtonOnClickListener); builder.show(); super.onGeolocationPermissionsShowPrompt(origin, callback); } @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { if (WDataManager.sRootWgt!=null&&WDataManager.sRootWgt.m_appdebug==1 && !TextUtils.isEmpty(WDataManager.sRootWgt.m_logServerIp)) { if (consoleMessage.messageLevel() != ConsoleMessage.MessageLevel.WARNING) {//过滤掉warning BDebug.sendUDPLog(formatConsole(consoleMessage)); } } return super.onConsoleMessage(consoleMessage); } private static String formatConsole(ConsoleMessage consoleMessage){ StringBuilder stringBuilder=new StringBuilder(); stringBuilder.append("[ ") .append(simpleSourceInfo(consoleMessage.sourceId())) .append(" line : ") .append(consoleMessage.lineNumber()) .append(" ") .append(consoleMessage.messageLevel().toString().toLowerCase()) .append(" ]\n") .append(consoleMessage.message()) .append("\n"); return stringBuilder.toString(); } private static String simpleSourceInfo(String source){ if (TextUtils.isEmpty(source)){ return ""; } if (source.contains("/")){ return source.substring(source.lastIndexOf("/")+1); } return source; } }