package cn.mutils.app.ui.web; import android.content.Context; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import cn.mutils.core.json.JsonUtil; import cn.mutils.core.log.Logs; /** * Implements {@link IWebMessageManager} */ @SuppressWarnings({"rawtypes", "unchecked", "UnusedAssignment"}) public class WebMessageManager implements IWebMessageManager { protected List<Class<? extends IWebMessageDispatcher<?>>> mDispatchers; protected IWebFrame mWebFrame; @Override public Context getContext() { return mWebFrame == null ? null : mWebFrame.getContext(); } @Override public void add(Class<? extends IWebMessageDispatcher<?>> dispatcherClass) { if (mDispatchers == null) { mDispatchers = new CopyOnWriteArrayList<Class<? extends IWebMessageDispatcher<?>>>(); } mDispatchers.add(dispatcherClass); } @Override public void dispatchMessage(String message) { if (mDispatchers == null) { return; } Object json = null; try { json = JsonUtil.fromString(message); } catch (Exception e) { return; } boolean dispatched = false; for (Class<? extends IWebMessageDispatcher<?>> dispatcherClass : mDispatchers) { IWebMessageDispatcher dispatcher = null; try { dispatcher = JsonUtil.fromJson(json, dispatcherClass); dispatcher.setManager(this); if (!dispatcher.preTranslateMessage()) { Object msg = dispatcher.translateMessage(); if (msg != null) { dispatcher.onMessage(msg); dispatched = true; } } } catch (Exception e) { // Unknown Exception } finally { if (dispatcher != null) { dispatcher.setManager(null); } } } if (dispatched) { Logs.i("WebMessageManager", message); } else { Logs.e("WebMessageManager", message); } } @Override public void onMessage(String message) { if (mWebFrame == null) { return; } mWebFrame.onMessage(message); } @Override public IWebFrame getWebFrame() { return mWebFrame; } @Override public void setWebFrame(IWebFrame webFrame) { mWebFrame = webFrame; } @Override public void clear() { mWebFrame = null; if (mDispatchers != null) { mDispatchers.clear(); } } }