From 810567c2379550b93a23a1009f388097b6d0f706 Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Sat, 21 Mar 2015 21:51:10 +0100 Subject: [PATCH] Add a new preference to select on which network synchronize --- res/values/strings.xml | 9 +++- res/xml/pref_data_sync.xml | 39 +++++++++++++++- .../activities/GeneralSettingsActivity.java | 26 +++++++++-- .../activities/LoginActivity.java | 3 +- .../ConnectivityChanged.java | 6 ++- .../owncloud_sms/defines/DefaultPrefs.java | 11 +++++ .../engine/ConnectivityMonitor.java | 44 ++++++++++++++++++- 7 files changed, 127 insertions(+), 11 deletions(-) create mode 100644 src/fr/unix_experience/owncloud_sms/defines/DefaultPrefs.java diff --git a/res/values/strings.xml b/res/values/strings.xml index 7e02347..95e2087 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -28,7 +28,7 @@ - 5 + 6 ownCloud-SMS @@ -95,6 +95,13 @@ 1440 -1 + + Synchronize in Wi-Fi + Synchronize in 4G + Synchronize in 3G + Synchronize in 2.5G (GPRS) + Synchronize in 2G + Synchronize in other modes Sign in diff --git a/res/xml/pref_data_sync.xml b/res/xml/pref_data_sync.xml index 1ec4d80..c0f2af7 100644 --- a/res/xml/pref_data_sync.xml +++ b/res/xml/pref_data_sync.xml @@ -2,12 +2,49 @@ + + + + + + + diff --git a/src/fr/unix_experience/owncloud_sms/activities/GeneralSettingsActivity.java b/src/fr/unix_experience/owncloud_sms/activities/GeneralSettingsActivity.java index 49696d5..195086b 100644 --- a/src/fr/unix_experience/owncloud_sms/activities/GeneralSettingsActivity.java +++ b/src/fr/unix_experience/owncloud_sms/activities/GeneralSettingsActivity.java @@ -23,6 +23,8 @@ import android.annotation.TargetApi; import android.content.ContentResolver; import android.content.Context; import android.content.PeriodicSync; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; import android.content.res.Configuration; import android.os.Build; import android.os.Bundle; @@ -31,12 +33,14 @@ import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; + import java.util.List; import fr.unix_experience.owncloud_sms.R; public class GeneralSettingsActivity extends PreferenceActivity { private static final boolean ALWAYS_SIMPLE_PREFS = false; + private static Context mContext; static AccountManager mAccountMgr; static String mAccountAuthority; static String mSlowSyncAccountAuthority; @@ -66,6 +70,8 @@ public class GeneralSettingsActivity extends PreferenceActivity { // In the simplified UI, fragments are not used at all and we instead // use the older PreferenceActivity APIs. addPreferencesFromResource(R.xml.pref_data_sync); + + mContext = getBaseContext(); // Bind the summaries of EditText/List/Dialog/Ringtone preferences to // their values. When their values change, their summaries are updated @@ -124,12 +130,13 @@ public class GeneralSettingsActivity extends PreferenceActivity { String prefKey = preference.getKey(); + Account[] myAccountList = mAccountMgr.getAccountsByType(mAccountType); + // Handle sync frequency change - if (prefKey.equals(new String("sync_frequency"))) { - long syncFreq = Long.parseLong((String)value); + if (prefKey.equals("sync_frequency")) { + long syncFreq = Long.parseLong(stringValue); // Get ownCloud SMS account list - Account[] myAccountList = mAccountMgr.getAccountsByType(mAccountType); for (int i = 0; i < myAccountList.length; i++) { // And get all authorities for this account List syncList = ContentResolver.getPeriodicSyncs(myAccountList[i], mAccountAuthority); @@ -153,8 +160,19 @@ public class GeneralSettingsActivity extends PreferenceActivity { mAccountAuthority, b, syncFreq * 60); } } + } + // Network types allowed for sync + else if(prefKey.equals("sync_wifi") || prefKey.equals("sync_2g") || + prefKey.equals("sync_3g") || prefKey.equals("sync_gprs") || + prefKey.equals("sync_4g") || prefKey.equals("sync_others")) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext); + + Editor edit = prefs.edit(); + edit.putBoolean(prefKey, Boolean.parseBoolean(stringValue)); + edit.commit(); + } // Slow Sync frequency - } /*else if (prefKey.equals(new String("slow_sync_frequency"))) { + /*else if (prefKey.equals(new String("slow_sync_frequency"))) { long syncFreq = Long.parseLong((String)value); // Get ownCloud SMS account list diff --git a/src/fr/unix_experience/owncloud_sms/activities/LoginActivity.java b/src/fr/unix_experience/owncloud_sms/activities/LoginActivity.java index 50b1684..bedc6ed 100644 --- a/src/fr/unix_experience/owncloud_sms/activities/LoginActivity.java +++ b/src/fr/unix_experience/owncloud_sms/activities/LoginActivity.java @@ -46,6 +46,7 @@ import com.owncloud.android.lib.common.OwnCloudCredentialsFactory; import fr.unix_experience.owncloud_sms.R; import fr.unix_experience.owncloud_sms.authenticators.OwnCloudAuthenticator; +import fr.unix_experience.owncloud_sms.defines.DefaultPrefs; import fr.unix_experience.owncloud_sms.enums.LoginReturnCode; /** @@ -282,7 +283,7 @@ public class LoginActivity extends Activity { Bundle b = new Bundle(); b.putInt("synctype", 1); - ContentResolver.addPeriodicSync(account, getString(R.string.account_authority), b, 15 * 60); + ContentResolver.addPeriodicSync(account, getString(R.string.account_authority), b, DefaultPrefs.syncInterval * 60); // Then it's finished finish(); diff --git a/src/fr/unix_experience/owncloud_sms/broadcast_receivers/ConnectivityChanged.java b/src/fr/unix_experience/owncloud_sms/broadcast_receivers/ConnectivityChanged.java index 1bb61e9..d0d67c8 100644 --- a/src/fr/unix_experience/owncloud_sms/broadcast_receivers/ConnectivityChanged.java +++ b/src/fr/unix_experience/owncloud_sms/broadcast_receivers/ConnectivityChanged.java @@ -33,11 +33,13 @@ public class ConnectivityChanged extends BroadcastReceiver implements ASyncTask @Override public void onReceive(Context context, Intent intent) { ConnectivityMonitor cMon = new ConnectivityMonitor(context); + + Log.d(TAG, "test"); // If data is available and previous dataConnectionState was false, then we need to sync if (cMon.isValid() && dataConnectionAvailable == false) { dataConnectionAvailable = true; Log.d(TAG,"ConnectivityChanged.onReceive, data conn available"); - checkMessagesToSent(context); + checkMessagesToSend(context); } // No data available and previous dataConnectionState was true else if (dataConnectionAvailable == true && !cMon.isValid()) { @@ -46,7 +48,7 @@ public class ConnectivityChanged extends BroadcastReceiver implements ASyncTask } } - private void checkMessagesToSent(Context context) { + private void checkMessagesToSend(Context context) { // Get last message synced from preferences Long lastMessageSynced = (new OCSMSSharedPrefs(context)).getLastMessageDate(); Log.d(TAG,"Synced Last:" + lastMessageSynced); diff --git a/src/fr/unix_experience/owncloud_sms/defines/DefaultPrefs.java b/src/fr/unix_experience/owncloud_sms/defines/DefaultPrefs.java new file mode 100644 index 0000000..0ccd34f --- /dev/null +++ b/src/fr/unix_experience/owncloud_sms/defines/DefaultPrefs.java @@ -0,0 +1,11 @@ +package fr.unix_experience.owncloud_sms.defines; + +public class DefaultPrefs { + public final static Integer syncInterval = 15; + public final static Boolean syncWifi = true; + public final static Boolean sync2G = true; + public final static Boolean syncGPRS = true; + public final static Boolean sync3G = true; + public final static Boolean sync4G = true; + public final static Boolean syncOthers = true; +} diff --git a/src/fr/unix_experience/owncloud_sms/engine/ConnectivityMonitor.java b/src/fr/unix_experience/owncloud_sms/engine/ConnectivityMonitor.java index d3e3c98..765536c 100644 --- a/src/fr/unix_experience/owncloud_sms/engine/ConnectivityMonitor.java +++ b/src/fr/unix_experience/owncloud_sms/engine/ConnectivityMonitor.java @@ -16,8 +16,13 @@ package fr.unix_experience.owncloud_sms.engine; * You should have received a copy of the GNU Affero General Public License */ +import fr.unix_experience.owncloud_sms.defines.DefaultPrefs; import android.content.Context; +import android.content.SharedPreferences; import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.preference.PreferenceManager; +import android.telephony.TelephonyManager; public class ConnectivityMonitor { public ConnectivityMonitor(Context context) { @@ -28,13 +33,48 @@ public class ConnectivityMonitor { public boolean isValid() { if (_cMgr == null) { _cMgr = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE); - } + } final android.net.NetworkInfo niWiFi = _cMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); final android.net.NetworkInfo niMobile = _cMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); if (niWiFi.isAvailable() || niMobile.isAvailable()) { - return true; + // Load the connectivity manager to determine on which network we are connected + NetworkInfo netInfo = _cMgr.getActiveNetworkInfo(); + + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(_context); + + // Check + switch (netInfo.getType()) { + case ConnectivityManager.TYPE_WIFI: + return prefs.getBoolean("sync_wifi", DefaultPrefs.syncWifi); + case ConnectivityManager.TYPE_MOBILE: + switch (netInfo.getSubtype()) { + case TelephonyManager.NETWORK_TYPE_EDGE: + case TelephonyManager.NETWORK_TYPE_CDMA: + case TelephonyManager.NETWORK_TYPE_1xRTT: + case TelephonyManager.NETWORK_TYPE_IDEN: + return prefs.getBoolean("sync_2g", DefaultPrefs.sync2G); + case TelephonyManager.NETWORK_TYPE_GPRS: + return prefs.getBoolean("sync_gprs", DefaultPrefs.syncGPRS); + case TelephonyManager.NETWORK_TYPE_HSDPA: + case TelephonyManager.NETWORK_TYPE_HSPA: + case TelephonyManager.NETWORK_TYPE_HSUPA: + case TelephonyManager.NETWORK_TYPE_UMTS: + case TelephonyManager.NETWORK_TYPE_EHRPD: + case TelephonyManager.NETWORK_TYPE_EVDO_B: + case TelephonyManager.NETWORK_TYPE_HSPAP: + return prefs.getBoolean("sync_3g", DefaultPrefs.sync3G); + case TelephonyManager.NETWORK_TYPE_LTE: + return prefs.getBoolean("sync_4g", DefaultPrefs.sync3G); + default: + return prefs.getBoolean("sync_others", DefaultPrefs.syncOthers); + } + default: + return prefs.getBoolean("sync_others", DefaultPrefs.syncOthers); + } + + } return false;