diff --git a/src/main/java/com/owncloud/android/syncadapter/FileSyncAdapter.java b/src/main/java/com/owncloud/android/syncadapter/FileSyncAdapter.java index ef59b7ff3eb8..8f5c94e4376a 100644 --- a/src/main/java/com/owncloud/android/syncadapter/FileSyncAdapter.java +++ b/src/main/java/com/owncloud/android/syncadapter/FileSyncAdapter.java @@ -34,8 +34,28 @@ import android.content.SyncResult; import android.os.Bundle; import android.support.annotation.PluralsRes; +import android.preference.PreferenceManager; import android.support.v4.app.NotificationCompat; +import com.owncloud.android.R; +import com.owncloud.android.authentication.AuthenticatorActivity; +import com.owncloud.android.datamodel.FileDataStorageManager; +import com.owncloud.android.datamodel.OCFile; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; +import com.owncloud.android.lib.common.utils.Log_OC; +import com.owncloud.android.operations.RefreshFolderOperation; +import com.owncloud.android.operations.UpdateOCVersionOperation; +import com.owncloud.android.ui.activity.ErrorsWhileCopyingHandlerActivity; + +import org.apache.jackrabbit.webdav.DavException; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import com.owncloud.android.R; import com.owncloud.android.authentication.AuthenticatorActivity; import com.owncloud.android.datamodel.FileDataStorageManager; @@ -141,15 +161,18 @@ public synchronized void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient providerClient, SyncResult syncResult) { + String timeString = PreferenceManager.getDefaultSharedPreferences(getContext()).getString("time_between_sync", "60"); + int timeTillNextSyncInMinutes = Integer.parseInt(timeString); + mCancellation = false; mFailedResultsCounter = 0; mLastFailedResult = null; mConflictsFound = 0; mFailsInFavouritesFound = 0; - mForgottenLocalFiles = new HashMap(); + mForgottenLocalFiles = new HashMap<>(); mSyncResult = syncResult; mSyncResult.fullSyncRequested = false; - mSyncResult.delayUntil = (System.currentTimeMillis()/1000) + 3*60*60; // avoid too many automatic synchronizations + mSyncResult.delayUntil = (System.currentTimeMillis()/1000) + timeTillNextSyncInMinutes*60; // avoid too many automatic synchronizations this.setAccount(account); this.setContentProviderClient(providerClient); diff --git a/src/main/java/com/owncloud/android/ui/activity/Preferences.java b/src/main/java/com/owncloud/android/ui/activity/Preferences.java index eb2fa9cfaee9..4c47b194f82e 100644 --- a/src/main/java/com/owncloud/android/ui/activity/Preferences.java +++ b/src/main/java/com/owncloud/android/ui/activity/Preferences.java @@ -24,6 +24,7 @@ import android.accounts.Account; import android.app.Activity; +import android.content.ContentResolver; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageInfo; @@ -98,6 +99,7 @@ public class Preferences extends PreferenceActivity public final static String PREFERENCE_USE_FINGERPRINT = "use_fingerprint"; public static final String PREFERENCE_EXPERT_MODE = "expert_mode"; + public static final String PREFERENCE_TIME_BETWEEN_SYNC = "time_between_sync"; private static final int ACTION_REQUEST_PASSCODE = 5; private static final int ACTION_CONFIRM_PASSCODE = 6; @@ -119,6 +121,7 @@ public class Preferences extends PreferenceActivity private SwitchPreference mExpertMode; private AppCompatDelegate mDelegate; + private Preference mPrefTimeBetweenSynchronizations; private ListPreference mPrefStoragePath; private String mStoragePath; private String pendingLock; @@ -179,6 +182,25 @@ public void onCreate(Bundle savedInstanceState) { setupDevCategory(accentColor, preferenceScreen); } + @Override + protected void onResume() { + super.onResume(); + + boolean isAutoSyncEnabled = ContentResolver.getSyncAutomatically( + AccountUtils.getCurrentOwnCloudAccount(this), getString(R.string.authority)); + mPrefTimeBetweenSynchronizations.setEnabled(isAutoSyncEnabled); + String summary; + if (isAutoSyncEnabled) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + int minutesBetweenSyncs = Integer.parseInt(prefs.getString("time_between_sync", "60")); + summary = getResources().getQuantityString( + R.plurals.minutes, minutesBetweenSyncs, minutesBetweenSyncs); + } else { + summary = getString(R.string.prefs_time_between_sync_sync_disabled); + } + mPrefTimeBetweenSynchronizations.setSummary(summary); + } + private void setupDevCategory(int accentColor, PreferenceScreen preferenceScreen) { // Dev category PreferenceCategory preferenceCategoryDev = (PreferenceCategory) findPreference("dev_category"); @@ -220,7 +242,6 @@ private void setupAboutCategory(int accentColor, String appVersion) { PreferenceCategory preferenceCategoryAbout = (PreferenceCategory) findPreference("about"); preferenceCategoryAbout.setTitle(ThemeUtils.getColoredTitle(getString(R.string.prefs_category_about), accentColor)); - /* About App */ Preference pAboutApp = findPreference("about_app"); if (pAboutApp != null) { @@ -564,11 +585,36 @@ private void setupDetailsCategory(int accentColor, PreferenceScreen preferenceSc setupExpertModePreference(preferenceCategoryDetails, fSyncedFolderLightEnabled); + setupTimeBetweenSynchronizationsPreference(preferenceCategoryDetails, fSyncedFolderLightEnabled); + if (!fPassCodeEnabled && !fDeviceCredentialsEnabled && !fShowHiddenFilesEnabled && fSyncedFolderLightEnabled) { preferenceScreen.removePreference(preferenceCategoryDetails); } } + private void setupTimeBetweenSynchronizationsPreference( + PreferenceCategory preferenceCategoryDetails, + boolean fSyncedFolderLightEnabled) { + mPrefTimeBetweenSynchronizations = findPreference(PREFERENCE_TIME_BETWEEN_SYNC); + + if (fSyncedFolderLightEnabled) { + preferenceCategoryDetails.removePreference(mPrefTimeBetweenSynchronizations); + } else if (mPrefTimeBetweenSynchronizations != null) { + mPrefTimeBetweenSynchronizations.setOnPreferenceChangeListener((preference, newValueObject) -> { + if (newValueObject instanceof String && ((String) newValueObject).length() > 0) { + int newValue = Integer.parseInt((String) newValueObject); + if (newValue > 0) { + mPrefTimeBetweenSynchronizations.setSummary( + getResources().getQuantityString( + R.plurals.minutes, newValue, newValue)); + return true; + } + } + return false; + }); + } + } + private void setupExpertModePreference(PreferenceCategory preferenceCategoryDetails, boolean fSyncedFolderLightEnabled) { mExpertMode = (SwitchPreference) findPreference(PREFERENCE_EXPERT_MODE); diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 43d64a054174..b00d2c2d368b 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -443,6 +443,14 @@ Details + + Time between synchronization + Automatic synchronization disabled + + One minute + %d minutes + + Sync of %1$s folder could not be completed %1$s shared \"%2$s\" with you diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml index 38364426bca3..b94b4ecc7ebc 100644 --- a/src/main/res/xml/preferences.xml +++ b/src/main/res/xml/preferences.xml @@ -50,6 +50,7 @@ +