From cb7c4331509e6bcf89569fa4c4de13dfb5d66ec6 Mon Sep 17 00:00:00 2001 From: Matt Sanford Date: Fri, 13 Nov 2015 11:13:22 -0800 Subject: [PATCH] Add upload-on-wifi option, for saving mobile data costs --- loggliest/src/main/AndroidManifest.xml | 1 + .../java/com/inrista/loggliest/Loggly.java | 39 +++++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/loggliest/src/main/AndroidManifest.xml b/loggliest/src/main/AndroidManifest.xml index b38fdf7..cef69ec 100644 --- a/loggliest/src/main/AndroidManifest.xml +++ b/loggliest/src/main/AndroidManifest.xml @@ -1,4 +1,5 @@ + diff --git a/loggliest/src/main/java/com/inrista/loggliest/Loggly.java b/loggliest/src/main/java/com/inrista/loggliest/Loggly.java index c6fb02b..8d9e11d 100644 --- a/loggliest/src/main/java/com/inrista/loggliest/Loggly.java +++ b/loggliest/src/main/java/com/inrista/loggliest/Loggly.java @@ -20,6 +20,8 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; import android.os.Process; import android.os.SystemClock; import android.util.Log; @@ -111,6 +113,7 @@ public class Loggly { private static final int MAX_SIZE_ON_DISK_MIN = 1000; private static final int UPLOAD_INTERVAL_SECS_MIN = 5; private static final int UPLOAD_INTERVAL_SECS_DEFAULT = 900; + private static final boolean UPLOAD_ON_WIFI_ONLY_DEFAULT = false; private static final int UPLOAD_INTERVAL_LOG_COUNT_MIN = 1; private static final int UPLOAD_INTERVAL_LOG_COUNT_DEFAULT = 500; private static final int IDLE_SECS_MIN = 0; @@ -126,6 +129,7 @@ public class Loggly { private static String mToken; private static String mLogglyTag; private static int mUploadIntervalSecs; + private static boolean mUploadOnWifiOnly; private static int mUploadIntervalLogCount; private static int mIdleSecs; private static boolean mAppendDefaultInfo; @@ -153,6 +157,7 @@ public static class Builder { private String logglyTag; private String logglyUrl; private int uploadIntervalSecs = UPLOAD_INTERVAL_SECS_DEFAULT; + private boolean uploadOnWifiOnly = UPLOAD_ON_WIFI_ONLY_DEFAULT; private int uploadIntervalLogCount = UPLOAD_INTERVAL_LOG_COUNT_DEFAULT; private int idleSecs = IDLE_SECS_DEFAULT; private boolean appendDefaultInfo = APPEND_DEFAULT_INFO_DEFAULT; @@ -196,6 +201,15 @@ public Builder uploadIntervalSecs(int seconds) { return this; } + /** + * Set if Loggly uploads should only occur when connected to wifi. + * @param uploadOnWifiOnly If wifi should be required. + */ + public Builder uploadOnWifiOnly(boolean uploadOnWifiOnly) { + this.uploadOnWifiOnly = uploadOnWifiOnly; + return this; + } + /** * Set the interval between Loggly log uploads. Note that small intervals * drains the battery if you log many messages. If not specified this @@ -284,7 +298,7 @@ public Loggly init() { synchronized (Loggly.class) { if (mInstance == null) { mInstance = new Loggly(context, token, logglyTag, logglyUrl, - uploadIntervalSecs, uploadIntervalLogCount, idleSecs, + uploadIntervalSecs, uploadOnWifiOnly, uploadIntervalLogCount, idleSecs, appendDefaultInfo, stickyInfo, maxSizeOnDisk); } } @@ -313,13 +327,14 @@ public static Builder with(Context context, String token) { } private Loggly(Context context, String token, String logglyTag, String logglyUrl, - int uploadIntervalSecs, int uploadIntervalLogCount, int idleSecs, + int uploadIntervalSecs, boolean uploadOnWifiOnly, int uploadIntervalLogCount, int idleSecs, boolean appendDefaultInfo, HashMap stickyInfo, int maxSizeOnDisk) { mContext = context; mToken = token; mLogglyTag = logglyTag; mUploadIntervalSecs = uploadIntervalSecs; + mUploadOnWifiOnly = uploadOnWifiOnly; mUploadIntervalLogCount = uploadIntervalLogCount; mIdleSecs = idleSecs; mAppendDefaultInfo = appendDefaultInfo; @@ -373,8 +388,7 @@ public void run() { logBatch.clear(); } - if((now - mLastUpload) >= mUploadIntervalSecs - || mLogCounter >= mUploadIntervalLogCount) { + if(shouldUpload(now)) { postLogs(); } @@ -394,6 +408,23 @@ public void run() { mThread.start(); } + + private static boolean shouldUpload(long now) { + if (mUploadOnWifiOnly) { + if (mContext == null) { + return false; + } + + ConnectivityManager manager = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo networkInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); + if (networkInfo.isConnected()) { + return false; + } + } + + return (now - mLastUpload) >= mUploadIntervalSecs || + mLogCounter >= mUploadIntervalLogCount; + } private static void log(JSONObject jsonObject) { if(!mThread.isAlive())