/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package com.linkbubble.webrender; import android.content.Context; import android.graphics.Bitmap; import android.view.View; import android.webkit.WebView; import com.linkbubble.articlerender.ArticleContent; import com.linkbubble.util.YouTubeEmbedHelper; import java.net.MalformedURLException; import java.net.URL; public abstract class WebRenderer { public interface GetGeolocationCallback { public void onAllow(); } public interface Controller { public void resetBubblePanelAdjustment(); public void adjustBubblesPanel(int newY, int oldY, boolean afterTouchAdjust); public boolean shouldAdBlockUrl(String baseHost, String urlStr, String filterOption); public boolean shouldTrackingProtectionBlockUrl(String baseHost, String host); public String adInsertionList(String baseHost); public String getHTTPSUrl(String originalUrl); public boolean shouldOverrideUrlLoading(String urlAsString, boolean viaUserInput); public void doUpdateVisitedHistory (String url, boolean isReload, boolean unknownClick); public void onLoadUrl(String urlAsString); // may or may not be called public void onReceivedError(); public void onPageStarted(String urlAsString, Bitmap favIcon); public void onPageFinished(String urlAsString); public void onDownloadStart(String urlAsString); public void onReceivedTitle(String url, String title); public void onReceivedIcon(Bitmap bitmap); public void onProgressChanged(int progress, String urlAsString); public boolean onBackPressed(); public void onUrlLongClick(WebView webView, String url, int type); public void onShowBrowserPrompt(); public void onCloseWindow(); public void onGeolocationPermissionsShowPrompt(String origin, GetGeolocationCallback callback); public void onPageInspectorYouTubeEmbedFound(); public void onPageInspectorTouchIconLoaded(Bitmap bitmap, String pageUrl); public void onPageInspectorDropDownWarningClick(); void onPagedInspectorThemeColorFound(int color); public void onArticleContentReady(ArticleContent articleContent); } public enum Type { Stub, WebView, }; public static WebRenderer create(Type type, Context context, Controller controller, View webRendererPlaceholder, String TAG) { switch (type) { case Stub: return new StubRenderer(context, controller, webRendererPlaceholder, TAG); case WebView: return new WebViewRenderer(context, controller, webRendererPlaceholder, TAG); } throw new IllegalArgumentException("Invalid type"); } public enum Mode { Web, Article, } protected Mode mMode; protected Controller mController; protected URL mUrl; WebRendererContextWrapper mContext; WebRenderer(Context context, Controller controller, View webRendererPlaceholder) { super(); mContext = new WebRendererContextWrapper(context); mController = controller; } public abstract void destroy(); public abstract View getView(); public abstract void updateIncognitoMode(boolean incognito); public abstract void loadUrl(URL url, Mode mode); public abstract void reload(); public abstract void stopLoading(); public abstract void hidePopups(); public abstract void resetPageInspector(); public void runPageInspector(String adInsert) {} public abstract YouTubeEmbedHelper getPageInspectorYouTubeEmbedHelper(); public abstract String getUserAgentString(Context context); public abstract void setUserAgentString(String userAgentString); public abstract void resumeOnSetActive(); public abstract void pauseOnSetInactive(); public void onPageLoadComplete() {} public URL getUrl() { return mUrl; } public void setUrl(String urlAsString) throws MalformedURLException { mUrl = new URL(urlAsString); } public void setUrl(URL url) { mUrl = url; } public Mode getMode() { return mMode; } public ArticleContent getArticleContent() { return null; } }