|
|
@ -67,8 +67,7 @@ public class LightningView { |
|
|
|
|
|
|
|
|
|
|
|
@SuppressWarnings("deprecation") |
|
|
|
@SuppressWarnings("deprecation") |
|
|
|
@SuppressLint("NewApi") |
|
|
|
@SuppressLint("NewApi") |
|
|
|
public LightningView(Activity activity, String url, |
|
|
|
public LightningView(Activity activity, String url, CookieManager cookieManager) { |
|
|
|
CookieManager cookieManager) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mActivity = activity; |
|
|
|
mActivity = activity; |
|
|
|
mWebView = new WebView(activity); |
|
|
|
mWebView = new WebView(activity); |
|
|
@ -81,8 +80,7 @@ public class LightningView { |
|
|
|
try { |
|
|
|
try { |
|
|
|
mBrowserController = (BrowserController) activity; |
|
|
|
mBrowserController = (BrowserController) activity; |
|
|
|
} catch (ClassCastException e) { |
|
|
|
} catch (ClassCastException e) { |
|
|
|
throw new ClassCastException(activity |
|
|
|
throw new ClassCastException(activity + " must implement BrowserController"); |
|
|
|
+ " must implement BrowserController"); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
mIntentUtils = new IntentUtils(mBrowserController); |
|
|
|
mIntentUtils = new IntentUtils(mBrowserController); |
|
|
|
mWebView.setDrawingCacheBackgroundColor(0x00000000); |
|
|
|
mWebView.setDrawingCacheBackgroundColor(0x00000000); |
|
|
@ -90,8 +88,7 @@ public class LightningView { |
|
|
|
mWebView.setFocusable(true); |
|
|
|
mWebView.setFocusable(true); |
|
|
|
mWebView.setAnimationCacheEnabled(false); |
|
|
|
mWebView.setAnimationCacheEnabled(false); |
|
|
|
mWebView.setDrawingCacheEnabled(true); |
|
|
|
mWebView.setDrawingCacheEnabled(true); |
|
|
|
mWebView.setBackgroundColor(activity.getResources().getColor( |
|
|
|
mWebView.setBackgroundColor(activity.getResources().getColor(android.R.color.white)); |
|
|
|
android.R.color.white)); |
|
|
|
|
|
|
|
if (API > 15) { |
|
|
|
if (API > 15) { |
|
|
|
mWebView.getRootView().setBackground(null); |
|
|
|
mWebView.getRootView().setBackground(null); |
|
|
|
} else { |
|
|
|
} else { |
|
|
@ -105,8 +102,7 @@ public class LightningView { |
|
|
|
mWebView.setWebChromeClient(new LightningChromeClient(activity)); |
|
|
|
mWebView.setWebChromeClient(new LightningChromeClient(activity)); |
|
|
|
mWebView.setWebViewClient(new LightningWebClient(activity)); |
|
|
|
mWebView.setWebViewClient(new LightningWebClient(activity)); |
|
|
|
mWebView.setDownloadListener(new LightningDownloadListener(activity)); |
|
|
|
mWebView.setDownloadListener(new LightningDownloadListener(activity)); |
|
|
|
mGestureDetector = new GestureDetector(activity, |
|
|
|
mGestureDetector = new GestureDetector(activity, new CustomGestureListener()); |
|
|
|
new CustomGestureListener()); |
|
|
|
|
|
|
|
mWebView.setOnTouchListener(new OnTouchListener() { |
|
|
|
mWebView.setOnTouchListener(new OnTouchListener() { |
|
|
|
|
|
|
|
|
|
|
|
float mLocation; |
|
|
|
float mLocation; |
|
|
@ -115,6 +111,7 @@ public class LightningView { |
|
|
|
|
|
|
|
|
|
|
|
int mAction; |
|
|
|
int mAction; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@SuppressLint("ClickableViewAccessibility") |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public boolean onTouch(View view, MotionEvent arg1) { |
|
|
|
public boolean onTouch(View view, MotionEvent arg1) { |
|
|
|
if (view != null && !view.hasFocus()) { |
|
|
|
if (view != null && !view.hasFocus()) { |
|
|
@ -213,14 +210,16 @@ public class LightningView { |
|
|
|
case 7: |
|
|
|
case 7: |
|
|
|
// DUCK_SEARCH;
|
|
|
|
// DUCK_SEARCH;
|
|
|
|
home = home + "file:///android_asset/duckduckgo.png"; |
|
|
|
home = home + "file:///android_asset/duckduckgo.png"; |
|
|
|
// + "https://duckduckgo.com/assets/logo_homepage.normal.v101.png";
|
|
|
|
// +
|
|
|
|
|
|
|
|
// "https://duckduckgo.com/assets/logo_homepage.normal.v101.png";
|
|
|
|
home = home + HomepageVariables.MIDDLE; |
|
|
|
home = home + HomepageVariables.MIDDLE; |
|
|
|
home = home + Constants.DUCK_SEARCH; |
|
|
|
home = home + Constants.DUCK_SEARCH; |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 8: |
|
|
|
case 8: |
|
|
|
// DUCK_LITE_SEARCH;
|
|
|
|
// DUCK_LITE_SEARCH;
|
|
|
|
home = home + "file:///android_asset/duckduckgo.png"; |
|
|
|
home = home + "file:///android_asset/duckduckgo.png"; |
|
|
|
// + "https://duckduckgo.com/assets/logo_homepage.normal.v101.png";
|
|
|
|
// +
|
|
|
|
|
|
|
|
// "https://duckduckgo.com/assets/logo_homepage.normal.v101.png";
|
|
|
|
home = home + HomepageVariables.MIDDLE; |
|
|
|
home = home + HomepageVariables.MIDDLE; |
|
|
|
home = home + Constants.DUCK_LITE_SEARCH; |
|
|
|
home = home + Constants.DUCK_LITE_SEARCH; |
|
|
|
break; |
|
|
|
break; |
|
|
@ -259,21 +258,18 @@ public class LightningView { |
|
|
|
@SuppressWarnings("deprecation") |
|
|
|
@SuppressWarnings("deprecation") |
|
|
|
@SuppressLint({ "NewApi", "SetJavaScriptEnabled" }) |
|
|
|
@SuppressLint({ "NewApi", "SetJavaScriptEnabled" }) |
|
|
|
public synchronized void initializePreferences(Context context) { |
|
|
|
public synchronized void initializePreferences(Context context) { |
|
|
|
mPreferences = context.getSharedPreferences( |
|
|
|
mPreferences = context.getSharedPreferences(PreferenceConstants.PREFERENCES, 0); |
|
|
|
PreferenceConstants.PREFERENCES, 0); |
|
|
|
mHomepage = mPreferences.getString(PreferenceConstants.HOMEPAGE, Constants.HOMEPAGE); |
|
|
|
mHomepage = mPreferences.getString(PreferenceConstants.HOMEPAGE, |
|
|
|
|
|
|
|
Constants.HOMEPAGE); |
|
|
|
|
|
|
|
mAdBlock.updatePreference(); |
|
|
|
mAdBlock.updatePreference(); |
|
|
|
if (mSettings == null && mWebView != null) { |
|
|
|
if (mSettings == null && mWebView != null) { |
|
|
|
mSettings = mWebView.getSettings(); |
|
|
|
mSettings = mWebView.getSettings(); |
|
|
|
} else if (mSettings == null) { |
|
|
|
} else if (mSettings == null) { |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
mSettings.setGeolocationEnabled(mPreferences.getBoolean( |
|
|
|
mSettings.setGeolocationEnabled(mPreferences |
|
|
|
PreferenceConstants.LOCATION, false)); |
|
|
|
.getBoolean(PreferenceConstants.LOCATION, false)); |
|
|
|
if (API < 19) { |
|
|
|
if (API < 19) { |
|
|
|
switch (mPreferences.getInt( |
|
|
|
switch (mPreferences.getInt(PreferenceConstants.ADOBE_FLASH_SUPPORT, 0)) { |
|
|
|
PreferenceConstants.ADOBE_FLASH_SUPPORT, 0)) { |
|
|
|
|
|
|
|
case 0: |
|
|
|
case 0: |
|
|
|
mSettings.setPluginState(PluginState.OFF); |
|
|
|
mSettings.setPluginState(PluginState.OFF); |
|
|
|
break; |
|
|
|
break; |
|
|
@ -291,8 +287,7 @@ public class LightningView { |
|
|
|
switch (mPreferences.getInt(PreferenceConstants.USER_AGENT, 1)) { |
|
|
|
switch (mPreferences.getInt(PreferenceConstants.USER_AGENT, 1)) { |
|
|
|
case 1: |
|
|
|
case 1: |
|
|
|
if (API > 16) { |
|
|
|
if (API > 16) { |
|
|
|
mSettings.setUserAgentString(WebSettings |
|
|
|
mSettings.setUserAgentString(WebSettings.getDefaultUserAgent(context)); |
|
|
|
.getDefaultUserAgent(context)); |
|
|
|
|
|
|
|
} else { |
|
|
|
} else { |
|
|
|
mSettings.setUserAgentString(mDefaultUserAgent); |
|
|
|
mSettings.setUserAgentString(mDefaultUserAgent); |
|
|
|
} |
|
|
|
} |
|
|
@ -316,25 +311,26 @@ public class LightningView { |
|
|
|
mSettings.setSaveFormData(true); |
|
|
|
mSettings.setSaveFormData(true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (mPreferences.getBoolean("java", true)) { |
|
|
|
if (mPreferences.getBoolean(PreferenceConstants.JAVASCRIPT, true)) { |
|
|
|
mSettings.setJavaScriptEnabled(true); |
|
|
|
mSettings.setJavaScriptEnabled(true); |
|
|
|
mSettings.setJavaScriptCanOpenWindowsAutomatically(true); |
|
|
|
mSettings.setJavaScriptCanOpenWindowsAutomatically(true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (mPreferences.getBoolean("textreflow", false)) { |
|
|
|
if (mPreferences.getBoolean(PreferenceConstants.TEXT_REFLOW, false)) { |
|
|
|
mSettings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); |
|
|
|
mSettings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); |
|
|
|
|
|
|
|
} else if (API >= android.os.Build.VERSION_CODES.KITKAT) { |
|
|
|
|
|
|
|
mSettings.setLayoutAlgorithm(LayoutAlgorithm.TEXT_AUTOSIZING); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
mSettings.setLayoutAlgorithm(LayoutAlgorithm.NORMAL); |
|
|
|
mSettings.setLayoutAlgorithm(LayoutAlgorithm.NORMAL); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
mSettings.setBlockNetworkImage(mPreferences.getBoolean( |
|
|
|
mSettings.setBlockNetworkImage(mPreferences.getBoolean(PreferenceConstants.BLOCK_IMAGES, |
|
|
|
PreferenceConstants.BLOCK_IMAGES, false)); |
|
|
|
false)); |
|
|
|
mSettings.setSupportMultipleWindows(mPreferences.getBoolean( |
|
|
|
mSettings.setSupportMultipleWindows(mPreferences.getBoolean(PreferenceConstants.POPUPS, |
|
|
|
PreferenceConstants.POPUPS, true)); |
|
|
|
true)); |
|
|
|
mSettings.setUseWideViewPort(mPreferences.getBoolean( |
|
|
|
mSettings.setUseWideViewPort(mPreferences.getBoolean(PreferenceConstants.USE_WIDE_VIEWPORT, |
|
|
|
PreferenceConstants.USE_WIDE_VIEWPORT, true)); |
|
|
|
true)); |
|
|
|
mWideViewPort = mPreferences.getBoolean( |
|
|
|
mWideViewPort = mPreferences.getBoolean(PreferenceConstants.USE_WIDE_VIEWPORT, true); |
|
|
|
PreferenceConstants.USE_WIDE_VIEWPORT, true); |
|
|
|
|
|
|
|
mSettings.setLoadWithOverviewMode(mPreferences.getBoolean( |
|
|
|
mSettings.setLoadWithOverviewMode(mPreferences.getBoolean( |
|
|
|
PreferenceConstants.OVERVIEW_MODE, true)); |
|
|
|
PreferenceConstants.OVERVIEW_MODE, true)); |
|
|
|
switch (mPreferences.getInt(PreferenceConstants.TEXT_SIZE, 3)) { |
|
|
|
switch (mPreferences.getInt(PreferenceConstants.TEXT_SIZE, 3)) { |
|
|
@ -369,15 +365,13 @@ public class LightningView { |
|
|
|
settings.setMediaPlaybackRequiresUserGesture(true); |
|
|
|
settings.setMediaPlaybackRequiresUserGesture(true); |
|
|
|
} |
|
|
|
} |
|
|
|
if (API < 19) { |
|
|
|
if (API < 19) { |
|
|
|
settings.setDatabasePath(context.getFilesDir().getAbsolutePath() |
|
|
|
settings.setDatabasePath(context.getFilesDir().getAbsolutePath() + "/databases"); |
|
|
|
+ "/databases"); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
settings.setDomStorageEnabled(true); |
|
|
|
settings.setDomStorageEnabled(true); |
|
|
|
settings.setAppCachePath(context.getCacheDir().toString()); |
|
|
|
settings.setAppCachePath(context.getCacheDir().toString()); |
|
|
|
settings.setAppCacheEnabled(true); |
|
|
|
settings.setAppCacheEnabled(true); |
|
|
|
settings.setCacheMode(WebSettings.LOAD_DEFAULT); |
|
|
|
settings.setCacheMode(WebSettings.LOAD_DEFAULT); |
|
|
|
settings.setGeolocationDatabasePath(context.getCacheDir() |
|
|
|
settings.setGeolocationDatabasePath(context.getCacheDir().getAbsolutePath()); |
|
|
|
.getAbsolutePath()); |
|
|
|
|
|
|
|
settings.setAllowFileAccess(true); |
|
|
|
settings.setAllowFileAccess(true); |
|
|
|
settings.setDatabaseEnabled(true); |
|
|
|
settings.setDatabaseEnabled(true); |
|
|
|
settings.setSupportZoom(true); |
|
|
|
settings.setSupportZoom(true); |
|
|
@ -564,15 +558,13 @@ public class LightningView { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public WebResourceResponse shouldInterceptRequest(WebView view, |
|
|
|
public WebResourceResponse shouldInterceptRequest(WebView view, String url) { |
|
|
|
String url) { |
|
|
|
|
|
|
|
if (mAdBlock.isAd(url)) { |
|
|
|
if (mAdBlock.isAd(url)) { |
|
|
|
ByteArrayInputStream EMPTY = new ByteArrayInputStream("".getBytes()); |
|
|
|
ByteArrayInputStream EMPTY = new ByteArrayInputStream("".getBytes()); |
|
|
|
return new WebResourceResponse("text/plain", "utf-8", EMPTY); |
|
|
|
return new WebResourceResponse("text/plain", "utf-8", EMPTY); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
boolean useProxy = mPreferences.getBoolean( |
|
|
|
boolean useProxy = mPreferences.getBoolean(PreferenceConstants.USE_PROXY, false); |
|
|
|
PreferenceConstants.USE_PROXY, false); |
|
|
|
|
|
|
|
boolean mDoLeakHardening = false; |
|
|
|
boolean mDoLeakHardening = false; |
|
|
|
|
|
|
|
|
|
|
|
if (!useProxy) { |
|
|
|
if (!useProxy) { |
|
|
@ -590,19 +582,15 @@ public class LightningView { |
|
|
|
|
|
|
|
|
|
|
|
Proxy proxy = null; |
|
|
|
Proxy proxy = null; |
|
|
|
|
|
|
|
|
|
|
|
String host = mPreferences.getString( |
|
|
|
String host = mPreferences.getString(PreferenceConstants.USE_PROXY_HOST, |
|
|
|
PreferenceConstants.USE_PROXY_HOST, "localhost"); |
|
|
|
"localhost"); |
|
|
|
int port = mPreferences.getInt( |
|
|
|
int port = mPreferences.getInt(PreferenceConstants.USE_PROXY_PORT, 8118); |
|
|
|
PreferenceConstants.USE_PROXY_PORT, 8118); |
|
|
|
proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, port)); |
|
|
|
proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(host, |
|
|
|
|
|
|
|
port)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HttpURLConnection.setFollowRedirects(true); |
|
|
|
HttpURLConnection.setFollowRedirects(true); |
|
|
|
HttpURLConnection conn = (HttpURLConnection) uURl |
|
|
|
HttpURLConnection conn = (HttpURLConnection) uURl.openConnection(proxy); |
|
|
|
.openConnection(proxy); |
|
|
|
|
|
|
|
conn.setInstanceFollowRedirects(true); |
|
|
|
conn.setInstanceFollowRedirects(true); |
|
|
|
conn.setRequestProperty("User-Agent", |
|
|
|
conn.setRequestProperty("User-Agent", mSettings.getUserAgentString()); |
|
|
|
mSettings.getUserAgentString()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// conn.setRequestProperty("Transfer-Encoding", "chunked");
|
|
|
|
// conn.setRequestProperty("Transfer-Encoding", "chunked");
|
|
|
|
// conn.setUseCaches(false);
|
|
|
|
// conn.setUseCaches(false);
|
|
|
@ -633,8 +621,7 @@ public class LightningView { |
|
|
|
if (cType != null && cType.startsWith("text")) { |
|
|
|
if (cType != null && cType.startsWith("text")) { |
|
|
|
InputStream fStream; |
|
|
|
InputStream fStream; |
|
|
|
|
|
|
|
|
|
|
|
BufferedInputStream bis = new BufferedInputStream( |
|
|
|
BufferedInputStream bis = new BufferedInputStream(conn.getInputStream()); |
|
|
|
conn.getInputStream()); |
|
|
|
|
|
|
|
ByteArrayBuffer baf = new ByteArrayBuffer(connLen); |
|
|
|
ByteArrayBuffer baf = new ByteArrayBuffer(connLen); |
|
|
|
int read; |
|
|
|
int read; |
|
|
|
int bufSize = 2048; |
|
|
|
int bufSize = 2048; |
|
|
@ -650,17 +637,16 @@ public class LightningView { |
|
|
|
|
|
|
|
|
|
|
|
fStream = new ByteArrayInputStream(plainText); |
|
|
|
fStream = new ByteArrayInputStream(plainText); |
|
|
|
|
|
|
|
|
|
|
|
fStream = new ReplacingInputStream( |
|
|
|
fStream = new ReplacingInputStream(new ByteArrayInputStream(plainText), |
|
|
|
new ByteArrayInputStream(plainText), |
|
|
|
|
|
|
|
"poster=".getBytes(), "foo=".getBytes()); |
|
|
|
"poster=".getBytes(), "foo=".getBytes()); |
|
|
|
fStream = new ReplacingInputStream(fStream, |
|
|
|
fStream = new ReplacingInputStream(fStream, "Poster=".getBytes(), |
|
|
|
"Poster=".getBytes(), "foo=".getBytes()); |
|
|
|
"foo=".getBytes()); |
|
|
|
fStream = new ReplacingInputStream(fStream, |
|
|
|
fStream = new ReplacingInputStream(fStream, "Poster=".getBytes(), |
|
|
|
"Poster=".getBytes(), "foo=".getBytes()); |
|
|
|
"foo=".getBytes()); |
|
|
|
fStream = new ReplacingInputStream(fStream, |
|
|
|
fStream = new ReplacingInputStream(fStream, ".poster".getBytes(), |
|
|
|
".poster".getBytes(), ".foo".getBytes()); |
|
|
|
".foo".getBytes()); |
|
|
|
fStream = new ReplacingInputStream(fStream, |
|
|
|
fStream = new ReplacingInputStream(fStream, "\"poster\"".getBytes(), |
|
|
|
"\"poster\"".getBytes(), "\"foo\"".getBytes()); |
|
|
|
"\"foo\"".getBytes()); |
|
|
|
|
|
|
|
|
|
|
|
return new WebResourceResponse(cType, cEnc, fStream); |
|
|
|
return new WebResourceResponse(cType, cEnc, fStream); |
|
|
|
}/** |
|
|
|
}/** |
|
|
@ -676,8 +662,7 @@ public class LightningView { |
|
|
|
} |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
} catch (Exception e) { |
|
|
|
Log.e(Constants.TAG, "Error filtering stream", e); |
|
|
|
Log.e(Constants.TAG, "Error filtering stream", e); |
|
|
|
ByteArrayInputStream EMPTY = new ByteArrayInputStream( |
|
|
|
ByteArrayInputStream EMPTY = new ByteArrayInputStream("".getBytes()); |
|
|
|
"".getBytes()); |
|
|
|
|
|
|
|
return new WebResourceResponse("text/plain", "utf-8", EMPTY); |
|
|
|
return new WebResourceResponse("text/plain", "utf-8", EMPTY); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -711,9 +696,8 @@ public class LightningView { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onReceivedHttpAuthRequest(final WebView view, |
|
|
|
public void onReceivedHttpAuthRequest(final WebView view, final HttpAuthHandler handler, |
|
|
|
final HttpAuthHandler handler, final String host, |
|
|
|
final String host, final String realm) { |
|
|
|
final String realm) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); |
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); |
|
|
|
final EditText name = new EditText(mActivity); |
|
|
|
final EditText name = new EditText(mActivity); |
|
|
@ -731,12 +715,10 @@ public class LightningView { |
|
|
|
builder.setTitle(mActivity.getString(R.string.title_sign_in)); |
|
|
|
builder.setTitle(mActivity.getString(R.string.title_sign_in)); |
|
|
|
builder.setView(passLayout); |
|
|
|
builder.setView(passLayout); |
|
|
|
builder.setCancelable(true) |
|
|
|
builder.setCancelable(true) |
|
|
|
.setPositiveButton( |
|
|
|
.setPositiveButton(mActivity.getString(R.string.title_sign_in), |
|
|
|
mActivity.getString(R.string.title_sign_in), |
|
|
|
|
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onClick(DialogInterface dialog, |
|
|
|
public void onClick(DialogInterface dialog, int id) { |
|
|
|
int id) { |
|
|
|
|
|
|
|
String user = name.getText().toString(); |
|
|
|
String user = name.getText().toString(); |
|
|
|
String pass = password.getText().toString(); |
|
|
|
String pass = password.getText().toString(); |
|
|
|
handler.proceed(user.trim(), pass.trim()); |
|
|
|
handler.proceed(user.trim(), pass.trim()); |
|
|
@ -744,12 +726,10 @@ public class LightningView { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
.setNegativeButton( |
|
|
|
.setNegativeButton(mActivity.getString(R.string.action_cancel), |
|
|
|
mActivity.getString(R.string.action_cancel), |
|
|
|
|
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onClick(DialogInterface dialog, |
|
|
|
public void onClick(DialogInterface dialog, int id) { |
|
|
|
int id) { |
|
|
|
|
|
|
|
handler.cancel(); |
|
|
|
handler.cancel(); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
@ -767,27 +747,22 @@ public class LightningView { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onReceivedSslError(WebView view, |
|
|
|
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) { |
|
|
|
final SslErrorHandler handler, SslError error) { |
|
|
|
|
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); |
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); |
|
|
|
builder.setTitle(mActivity.getString(R.string.title_warning)); |
|
|
|
builder.setTitle(mActivity.getString(R.string.title_warning)); |
|
|
|
builder.setMessage( |
|
|
|
builder.setMessage(mActivity.getString(R.string.message_untrusted_certificate)) |
|
|
|
mActivity.getString(R.string.message_untrusted_certificate)) |
|
|
|
|
|
|
|
.setCancelable(true) |
|
|
|
.setCancelable(true) |
|
|
|
.setPositiveButton( |
|
|
|
.setPositiveButton(mActivity.getString(R.string.action_yes), |
|
|
|
mActivity.getString(R.string.action_yes), |
|
|
|
|
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onClick(DialogInterface dialog, |
|
|
|
public void onClick(DialogInterface dialog, int id) { |
|
|
|
int id) { |
|
|
|
|
|
|
|
handler.proceed(); |
|
|
|
handler.proceed(); |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
.setNegativeButton(mActivity.getString(R.string.action_no), |
|
|
|
.setNegativeButton(mActivity.getString(R.string.action_no), |
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onClick(DialogInterface dialog, |
|
|
|
public void onClick(DialogInterface dialog, int id) { |
|
|
|
int id) { |
|
|
|
|
|
|
|
handler.cancel(); |
|
|
|
handler.cancel(); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
@ -801,29 +776,23 @@ public class LightningView { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onFormResubmission(WebView view, final Message dontResend, |
|
|
|
public void onFormResubmission(WebView view, final Message dontResend, final Message resend) { |
|
|
|
final Message resend) { |
|
|
|
|
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); |
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); |
|
|
|
builder.setTitle(mActivity |
|
|
|
builder.setTitle(mActivity.getString(R.string.title_form_resubmission)); |
|
|
|
.getString(R.string.title_form_resubmission)); |
|
|
|
builder.setMessage(mActivity.getString(R.string.message_form_resubmission)) |
|
|
|
builder.setMessage( |
|
|
|
|
|
|
|
mActivity.getString(R.string.message_form_resubmission)) |
|
|
|
|
|
|
|
.setCancelable(true) |
|
|
|
.setCancelable(true) |
|
|
|
.setPositiveButton( |
|
|
|
.setPositiveButton(mActivity.getString(R.string.action_yes), |
|
|
|
mActivity.getString(R.string.action_yes), |
|
|
|
|
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onClick(DialogInterface dialog, |
|
|
|
public void onClick(DialogInterface dialog, int id) { |
|
|
|
int id) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
resend.sendToTarget(); |
|
|
|
resend.sendToTarget(); |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
.setNegativeButton("No", |
|
|
|
.setNegativeButton(mActivity.getString(R.string.action_no), |
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onClick(DialogInterface dialog, |
|
|
|
public void onClick(DialogInterface dialog, int id) { |
|
|
|
int id) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dontResend.sendToTarget(); |
|
|
|
dontResend.sendToTarget(); |
|
|
|
} |
|
|
|
} |
|
|
@ -839,8 +808,8 @@ public class LightningView { |
|
|
|
} |
|
|
|
} |
|
|
|
if (url.contains("mailto:")) { |
|
|
|
if (url.contains("mailto:")) { |
|
|
|
MailTo mailTo = MailTo.parse(url); |
|
|
|
MailTo mailTo = MailTo.parse(url); |
|
|
|
Intent i = Utils.newEmailIntent(mActivity, mailTo.getTo(), |
|
|
|
Intent i = Utils.newEmailIntent(mActivity, mailTo.getTo(), mailTo.getSubject(), |
|
|
|
mailTo.getSubject(), mailTo.getBody(), mailTo.getCc()); |
|
|
|
mailTo.getBody(), mailTo.getCc()); |
|
|
|
mActivity.startActivity(i); |
|
|
|
mActivity.startActivity(i); |
|
|
|
view.reload(); |
|
|
|
view.reload(); |
|
|
|
return true; |
|
|
|
return true; |
|
|
@ -908,24 +877,19 @@ public class LightningView { |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
org = origin; |
|
|
|
org = origin; |
|
|
|
} |
|
|
|
} |
|
|
|
builder.setMessage( |
|
|
|
builder.setMessage(org + mActivity.getString(R.string.message_location)) |
|
|
|
org + mActivity.getString(R.string.message_location)) |
|
|
|
|
|
|
|
.setCancelable(true) |
|
|
|
.setCancelable(true) |
|
|
|
.setPositiveButton( |
|
|
|
.setPositiveButton(mActivity.getString(R.string.action_allow), |
|
|
|
mActivity.getString(R.string.action_allow), |
|
|
|
|
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onClick(DialogInterface dialog, |
|
|
|
public void onClick(DialogInterface dialog, int id) { |
|
|
|
int id) { |
|
|
|
|
|
|
|
callback.invoke(origin, true, remember); |
|
|
|
callback.invoke(origin, true, remember); |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
.setNegativeButton( |
|
|
|
.setNegativeButton(mActivity.getString(R.string.action_dont_allow), |
|
|
|
mActivity.getString(R.string.action_dont_allow), |
|
|
|
|
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
new DialogInterface.OnClickListener() { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onClick(DialogInterface dialog, |
|
|
|
public void onClick(DialogInterface dialog, int id) { |
|
|
|
int id) { |
|
|
|
|
|
|
|
callback.invoke(origin, false, remember); |
|
|
|
callback.invoke(origin, false, remember); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
@ -935,8 +899,8 @@ public class LightningView { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public boolean onCreateWindow(WebView view, boolean isDialog, |
|
|
|
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, |
|
|
|
boolean isUserGesture, Message resultMsg) { |
|
|
|
Message resultMsg) { |
|
|
|
mBrowserController.onCreateWindow(isUserGesture, resultMsg); |
|
|
|
mBrowserController.onCreateWindow(isUserGesture, resultMsg); |
|
|
|
return isUserGesture; |
|
|
|
return isUserGesture; |
|
|
|
} |
|
|
|
} |
|
|
@ -951,13 +915,11 @@ public class LightningView { |
|
|
|
mBrowserController.openFileChooser(uploadMsg); |
|
|
|
mBrowserController.openFileChooser(uploadMsg); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void openFileChooser(ValueCallback<Uri> uploadMsg, |
|
|
|
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) { |
|
|
|
String acceptType) { |
|
|
|
|
|
|
|
mBrowserController.openFileChooser(uploadMsg); |
|
|
|
mBrowserController.openFileChooser(uploadMsg); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void openFileChooser(ValueCallback<Uri> uploadMsg, |
|
|
|
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) { |
|
|
|
String acceptType, String capture) { |
|
|
|
|
|
|
|
mBrowserController.openFileChooser(uploadMsg); |
|
|
|
mBrowserController.openFileChooser(uploadMsg); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -980,7 +942,8 @@ public class LightningView { |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onShowCustomView(View view, CustomViewCallback callback) { |
|
|
|
public void onShowCustomView(View view, CustomViewCallback callback) { |
|
|
|
// While these lines might look like they work, in practice,
|
|
|
|
// While these lines might look like they work, in practice,
|
|
|
|
// Full-screen videos won't work correctly. I may test this out some more
|
|
|
|
// Full-screen videos won't work correctly. I may test this out some
|
|
|
|
|
|
|
|
// more
|
|
|
|
// if (view instanceof FrameLayout) {
|
|
|
|
// if (view instanceof FrameLayout) {
|
|
|
|
// FrameLayout frame = (FrameLayout) view;
|
|
|
|
// FrameLayout frame = (FrameLayout) view;
|
|
|
|
// if (frame.getFocusedChild() instanceof VideoView) {
|
|
|
|
// if (frame.getFocusedChild() instanceof VideoView) {
|
|
|
@ -991,8 +954,7 @@ public class LightningView { |
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// } else {
|
|
|
|
// } else {
|
|
|
|
Activity activity = mBrowserController.getActivity(); |
|
|
|
Activity activity = mBrowserController.getActivity(); |
|
|
|
mBrowserController.onShowCustomView(view, |
|
|
|
mBrowserController.onShowCustomView(view, activity.getRequestedOrientation(), callback); |
|
|
|
activity.getRequestedOrientation(), callback); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
@ -1004,7 +966,8 @@ public class LightningView { |
|
|
|
public void onShowCustomView(View view, int requestedOrientation, |
|
|
|
public void onShowCustomView(View view, int requestedOrientation, |
|
|
|
CustomViewCallback callback) { |
|
|
|
CustomViewCallback callback) { |
|
|
|
// While these lines might look like they work, in practice,
|
|
|
|
// While these lines might look like they work, in practice,
|
|
|
|
// Full-screen videos won't work correctly. I may test this out some more
|
|
|
|
// Full-screen videos won't work correctly. I may test this out some
|
|
|
|
|
|
|
|
// more
|
|
|
|
// if (view instanceof FrameLayout) {
|
|
|
|
// if (view instanceof FrameLayout) {
|
|
|
|
// FrameLayout frame = (FrameLayout) view;
|
|
|
|
// FrameLayout frame = (FrameLayout) view;
|
|
|
|
// if (frame.getFocusedChild() instanceof VideoView) {
|
|
|
|
// if (frame.getFocusedChild() instanceof VideoView) {
|
|
|
@ -1014,8 +977,7 @@ public class LightningView { |
|
|
|
// video.setVisibility(View.GONE);
|
|
|
|
// video.setVisibility(View.GONE);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// } else {
|
|
|
|
// } else {
|
|
|
|
mBrowserController.onShowCustomView(view, requestedOrientation, |
|
|
|
mBrowserController.onShowCustomView(view, requestedOrientation, callback); |
|
|
|
callback); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|