package com.mgw.member.ui.fragment; import java.io.File; import java.util.HashMap; import java.util.Map; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.os.SystemClock; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnKeyListener; import android.view.ViewGroup; import android.webkit.WebSettings; import android.webkit.WebSettings.LayoutAlgorithm; import android.webkit.WebView; import android.widget.FrameLayout; import android.widget.LinearLayout; import com.mgw.member.R; import com.mgw.member.constant.imp_Define; import com.mgw.member.factory.FragmentFactory; import com.mgw.member.factory.MgwWebViewFactory; import com.mgw.member.manager.BaseApplication; import com.mgw.member.ui.activity.MGWBaseActivity; import com.mgw.member.ui.activity.MainActivity; import com.mgw.member.ui.activity.login.LoginActivity; import com.mgw.member.uitls.AppManager; import com.mgw.member.uitls.DialogUtils; import com.mgw.member.uitls.FileUtils; import com.mgw.member.uitls.LogUtils; import com.mgw.member.uitls.NetworkProber; import com.mgw.member.uitls.UIUtils; @SuppressLint({ "SetJavaScriptEnabled", "NewApi" }) public abstract class BaseFragment extends Fragment implements imp_Define { private final String TAG = BaseFragment.class.getSimpleName(); private static final String APP_CACAHE_DIRNAME = "/webcache"; public DialogUtils mDialogUtils; public View view; public Context context; protected Dialog dialog; boolean mShowExit = false; protected MgwWebViewFactory mWebViewFactory; /** 标记第一次显示用 */ private int count = 0; protected BackHandledInterface mBackHandledInterface; /** * 所有继承BackHandledFragment的子类都将在这个方法中实现物理Back键按下后的逻辑 * FragmentActivity捕捉到物理返回键点击事件后会首先询问Fragment是否消费该事件 * 如果没有Fragment消息时FragmentActivity自己才会消费该事件 */ public abstract boolean onBackPressed(); @Override public void onHiddenChanged(boolean hidden) { // TODO Auto-generated method stub super.onHiddenChanged(hidden); if (!hidden) { com.mgw.member.uitls.LogUtils.i(TAG + "onHiddenChanged+..." + this + context); // 将当前显示的fragment显示注册到BackHandledInterface中 mBackHandledInterface.setSelectedFragment(this); } } @Override public void onStart() { // 第一次将HomeFragment注册到BackHandledInterface if (count == 0) { mBackHandledInterface.setSelectedFragment(FragmentFactory.createFragment(FragmentFactory.TAB_HOME)); com.mgw.member.uitls.LogUtils.i(TAG + "onHiddenChanged+---onStart..." + this + "count=" + count); count++; } count++; super.onStart(); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initData(); mWebViewFactory = MgwWebViewFactory.getInstance(context); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = getActivity(); if (!(getActivity() instanceof BackHandledInterface)) { throw new ClassCastException("Hosting Activity must implement BackHandledInterface"); } else { this.mBackHandledInterface = (BackHandledInterface) getActivity(); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // 设计进度条 mDialogUtils = DialogUtils.getDialogUtils(getActivity()); // mDialogUtils.createLoadingDialog("美顾问为您卖力加载中...", getActivity()); view = initView(inflater); return view; } public View getRootView() { return view; } /** * 初始化view * * @param inflater * @return Created by huyan */ public abstract View initView(LayoutInflater inflater); /** * 初始化数据 Created by huyan */ public abstract void initData(); /** * 在本fragment 打开一个webview展示 * * @param view * @param url * Created by huyan */ public abstract void showTwoPage(WebView view, String url); /** * 关闭本fragment中的webview 并清空webview栈 */ public abstract void hideErrorPage(); /** * 打开连接到新开的activist中显示 * * @param url * @param intent * Created by huyan */ public abstract void open2OhterActivitye(Intent intent); /** * 开启activist * * @param intent * 意图 * @param forResut * true(forreslut) Created by HUYAN */ public void open2OhterActivitye(Intent intent, boolean forResut) { } /** * 直接在本fragment的webview加载 */ protected abstract void openWebview(WebView view, String url); /** * webviewSettings设置 * * @param webview * @param OnKeyListener * 对回退键的监听处理 Created by huyan */ protected void webViewSetting( WebView webview, OnKeyListener listener) { WebSettings settings = webview.getSettings(); // // 适应屏幕设置webview推荐使用的窗口,设置为true settings.setUseWideViewPort(true); settings.setSupportZoom(true); settings.setLayoutAlgorithm(LayoutAlgorithm.NORMAL); settings.setJavaScriptEnabled(true); // webview.removeJavascriptInterface("searchBoxJavaBridge_"); settings.setLoadWithOverviewMode(true); FrameLayout.LayoutParams mWebViewLP = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); webview.setLayoutParams(mWebViewLP); webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); webview.setOnKeyListener(listener); // settings.setCacheMode(WebSettings.LOAD_DEFAULT); //设置 缓存模式 // // 开启 DOM storage API 功能 // settings.setDomStorageEnabled(true); // //开启 database storage API 功能 // settings.setDatabaseEnabled(true); // String cacheDirPath = // getActivity().getFilesDir().getAbsolutePath()+APP_CACAHE_DIRNAME; // // String cacheDirPath = // getCacheDir().getAbsolutePath()+Constant.APP_DB_DIRNAME; // Log.i(TAG, "cacheDirPath="+cacheDirPath); // //设置数据库缓存路径 // settings.setDatabasePath(cacheDirPath); // //设置 Application Caches 缓存目录 // settings.setAppCachePath(cacheDirPath); // //开启 Application Caches 功能 // settings.setAppCacheEnabled(true); } /** * 跳转到登录页面 * * @param activity * Created by Administrator */ protected void go2LoginActivity(Context context) { UIUtils.startActivity(new Intent(context, LoginActivity.class)); AppManager.getAppManager().finishActivity(MainActivity.class); } /** * 返回html解析的结构 * * @param data * html内容 * @return map parentPage(含有此标签true ,找不到网页true) Created by huyan */ protected Map<String, Boolean> parseHtmlForIsRootPage(String data) { Map<String, String> mapss = parseHtml2GetParentValue(data); HashMap<String, Boolean> maps = new HashMap<>(); maps.put("parentPage", !(mapss.get("parentPage") == "")); maps.put("errorPage", data.contains("找不到网页")); return maps; } protected Map<String, String> parseHtml2GetParentValue(String data) { HashMap<String, String> maps = new HashMap<>(); long a = SystemClock.currentThreadTimeMillis(); Document parse = Jsoup.parse(data); String val = ""; Element elementById = parse.getElementById("parentPage"); if (elementById != null) { val = elementById.val(); } long b = SystemClock.currentThreadTimeMillis() - a; LogUtils.i(TAG + "解析html耗时time =" + b + "ms,value=" + val); parse = null; maps.put("parentPage", val); maps.put("errorPage", data.contains("找不到网页") ? "yes" : "no"); return maps; } public synchronized void showLoadingDialog(Context con, Class clazz) { if ((MainActivity.mainActivity) == null) return; int click_m_index = ((MainActivity.mainActivity)).click_m_index; Class class1 = ((MainActivity.mainActivity)).fragmentClass[click_m_index - 1]; if (class1 == clazz) { // 如果当前是哪个fragment 就显示哪个dialog if ((MainActivity.mainActivity) != null && !((MainActivity.mainActivity)).isFinishing()) { if (dialog == null) { dialog = new Dialog(con, R.style.MyDialogStyle); dialog.setContentView(R.layout.dialog); dialog.show(); return; } if (dialog != null && !dialog.isShowing()) { dialog.show(); } } } else { } } public synchronized void dismissLoadingDialog() { if ((MainActivity.mainActivity) != null && !((MainActivity.mainActivity)).isFinishing()) { if (dialog != null && dialog.isShowing()) { dialog.dismiss(); dialog = null; } } // if ((MainActivity) getActivity() != null && !((MainActivity) // getActivity()).isFinishing()) { // // if (dialog != null && dialog.isShowing()) { // dialog.dismiss(); // dialog = null; // } // } } @Override public void onDestroyView() { // TODO Auto-generated method stub super.onDestroyView(); dismissLoadingDialog(); } /** * 清除WebView缓存 */ public void clearWebViewCache() { // 清理Webview缓存数据库 try { getActivity().deleteDatabase("webview.db"); getActivity().deleteDatabase("webviewCache.db"); } catch (Exception e) { e.printStackTrace(); } // WebView 缓存文件 File appCacheDir = new File(getActivity().getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME); Log.e(TAG, "appCacheDir path=" + appCacheDir.getAbsolutePath()); File webviewCacheDir = new File(getActivity().getCacheDir().getAbsolutePath() + "/webviewCache"); Log.e(TAG, "webviewCacheDir path=" + webviewCacheDir.getAbsolutePath()); // 删除webview 缓存目录 if (webviewCacheDir.exists()) { FileUtils.deleteFile(webviewCacheDir); } // 删除webview 缓存 缓存目录 if (appCacheDir.exists()) { FileUtils.deleteFile(appCacheDir); } } }