mirror of
https://github.com/moparisthebest/k-9
synced 2024-11-27 19:52:17 -05:00
Refactor network data blocking out of the main K9 class and into the MessageView class.
This commit is contained in:
parent
f14c7ecd9b
commit
77c01c65dd
@ -22,7 +22,6 @@ import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.text.format.Time;
|
||||
import android.util.Log;
|
||||
import android.webkit.WebSettings;
|
||||
|
||||
import com.fsck.k9.activity.MessageCompose;
|
||||
import com.fsck.k9.controller.MessagingController;
|
||||
@ -180,13 +179,6 @@ public class K9 extends Application
|
||||
private static boolean useGalleryBugWorkaround = false;
|
||||
private static boolean galleryBuggy;
|
||||
|
||||
/**
|
||||
* We use WebSettings.getBlockNetworkLoads() to prevent the WebView that displays email
|
||||
* bodies from loading external resources over the network. Unfortunately this method
|
||||
* isn't exposed via the official Android API. That's why we use reflection to be able
|
||||
* to call the method.
|
||||
*/
|
||||
private static final Method mGetBlockNetworkLoads = getMethod(WebSettings.class, "setBlockNetworkLoads");
|
||||
|
||||
/**
|
||||
* The MIME type(s) of attachments we're willing to view.
|
||||
@ -948,12 +940,11 @@ public class K9 extends Application
|
||||
mMessageViewReturnToList = messageViewReturnToList;
|
||||
}
|
||||
|
||||
private static Method getMethod(Class<?> classObject, String methodName)
|
||||
public static Method getMethod(Class<?> classObject, String methodName)
|
||||
{
|
||||
try
|
||||
{
|
||||
Method method = classObject.getMethod(methodName, boolean.class);
|
||||
return method;
|
||||
return classObject.getMethod(methodName, boolean.class);
|
||||
}
|
||||
catch (NoSuchMethodException e)
|
||||
{
|
||||
@ -968,21 +959,6 @@ public class K9 extends Application
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void setBlockNetworkLoads(WebSettings webSettings, boolean state)
|
||||
{
|
||||
if (mGetBlockNetworkLoads != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
mGetBlockNetworkLoads.invoke(webSettings, state);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.e(K9.LOG_TAG, "Error on invoking WebSettings.setBlockNetworkLoads()", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static FontSizes getFontSizes()
|
||||
{
|
||||
return fontSizes;
|
||||
|
@ -6,6 +6,7 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
@ -100,6 +101,14 @@ public class MessageView extends K9Activity implements OnClickListener
|
||||
private static final String SHOW_PICTURES = "showPictures";
|
||||
private static final String STATE_PGP_DATA = "pgpData";
|
||||
|
||||
/**
|
||||
* We use WebSettings.getBlockNetworkLoads() to prevent the WebView that displays email
|
||||
* bodies from loading external resources over the network. Unfortunately this method
|
||||
* isn't exposed via the official Android API. That's why we use reflection to be able
|
||||
* to call the method.
|
||||
*/
|
||||
private static final Method mGetBlockNetworkLoads = K9.getMethod(WebSettings.class, "setBlockNetworkLoads");
|
||||
|
||||
private static final int ACTIVITY_CHOOSE_FOLDER_MOVE = 1;
|
||||
private static final int ACTIVITY_CHOOSE_FOLDER_COPY = 2;
|
||||
|
||||
@ -1867,8 +1876,7 @@ public class MessageView extends K9Activity implements OnClickListener
|
||||
*/
|
||||
private void setLoadPictures(boolean enable)
|
||||
{
|
||||
K9.setBlockNetworkLoads(mMessageContentView.getSettings(), !enable);
|
||||
mMessageContentView.getSettings().setBlockNetworkImage(!enable);
|
||||
blockNetworkDataInWebView(mMessageContentView, !enable);
|
||||
mShowPictures = enable;
|
||||
mHandler.showShowPictures(false);
|
||||
}
|
||||
@ -2807,6 +2815,39 @@ public class MessageView extends K9Activity implements OnClickListener
|
||||
|
||||
webSettings.setTextSize(K9.getFontSizes().getMessageViewContent());
|
||||
|
||||
// Disable network images by default. This is overriden by preferences.
|
||||
blockNetworkDataInWebView(view, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure a web view to load or not load network data. A <b>true</b> setting here means that
|
||||
* network data will be blocked.
|
||||
* @param view {@link android.webkit.WebView} to adjust network data settings on.
|
||||
* @param shouldBlockNetworkData True if network data should be blocked, false to allow network data.
|
||||
*/
|
||||
public static void blockNetworkDataInWebView(final WebView view, final boolean shouldBlockNetworkData)
|
||||
{
|
||||
// Sanity check to make sure we don't blow up.
|
||||
if (view == null || view.getSettings() == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Block network loads.
|
||||
if (mGetBlockNetworkLoads != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
mGetBlockNetworkLoads.invoke(view.getSettings(), shouldBlockNetworkData);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.e(K9.LOG_TAG, "Error on invoking WebSettings.setBlockNetworkLoads()", e);
|
||||
}
|
||||
}
|
||||
|
||||
// Block network images.
|
||||
view.getSettings().setBlockNetworkImage(shouldBlockNetworkData);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user