From: David A. Velasco Date: Wed, 17 Sep 2014 15:18:09 +0000 (+0200) Subject: Merge pull request #628 from owncloud/enforce_folder_refresh_even_though_etag_is_not_... X-Git-Tag: oc-android-1.7.0_signed~178 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/71e64fdd455d5b1ff0f8ac0e627f8393b46afa1a?hp=c20c9100e56177531a1b962784421085f7c206bf Merge pull request #628 from owncloud/enforce_folder_refresh_even_though_etag_is_not_updated_in_pull_to_refresh Enforce refresh even though ETag didn't changed when user pulls down the list of files (security blanket) --- diff --git a/src/com/owncloud/android/operations/SynchronizeFolderOperation.java b/src/com/owncloud/android/operations/SynchronizeFolderOperation.java index fc4a74e8..60f35a5d 100644 --- a/src/com/owncloud/android/operations/SynchronizeFolderOperation.java +++ b/src/com/owncloud/android/operations/SynchronizeFolderOperation.java @@ -109,6 +109,9 @@ public class SynchronizeFolderOperation extends RemoteOperation { /** 'True' means that the remote folder changed from last synchronization and should be fetched */ private boolean mRemoteFolderChanged; + /** 'True' means that Etag will be ignored */ + private boolean mIgnoreETag; + /** * Creates a new instance of {@link SynchronizeFolderOperation}. @@ -126,6 +129,7 @@ public class SynchronizeFolderOperation extends RemoteOperation { long currentSyncTime, boolean syncFullAccount, boolean isShareSupported, + boolean ignoreETag, FileDataStorageManager dataStorageManager, Account account, Context context ) { @@ -138,6 +142,7 @@ public class SynchronizeFolderOperation extends RemoteOperation { mContext = context; mForgottenLocalFiles = new HashMap(); mRemoteFolderChanged = false; + mIgnoreETag = ignoreETag; } @@ -215,7 +220,7 @@ public class SynchronizeFolderOperation extends RemoteOperation { private RemoteOperationResult checkForChanges(OwnCloudClient client) { - mRemoteFolderChanged = false; + mRemoteFolderChanged = true; RemoteOperationResult result = null; String remotePath = null; @@ -227,10 +232,12 @@ public class SynchronizeFolderOperation extends RemoteOperation { result = operation.execute(client); if (result.isSuccess()){ OCFile remoteFolder = FileStorageUtils.fillOCFile((RemoteFile) result.getData().get(0)); - - // check if remote and local folder are different - mRemoteFolderChanged = !(remoteFolder.getEtag().equalsIgnoreCase(mLocalFolder.getEtag())); - + + if (!mIgnoreETag) { + // check if remote and local folder are different + mRemoteFolderChanged = !(remoteFolder.getEtag().equalsIgnoreCase(mLocalFolder.getEtag())); + } + result = new RemoteOperationResult(ResultCode.OK); Log_OC.i(TAG, "Checked " + mAccount.name + remotePath + " : " + (mRemoteFolderChanged ? "changed" : "not changed")); diff --git a/src/com/owncloud/android/syncadapter/FileSyncAdapter.java b/src/com/owncloud/android/syncadapter/FileSyncAdapter.java index 2ac89835..80964041 100644 --- a/src/com/owncloud/android/syncadapter/FileSyncAdapter.java +++ b/src/com/owncloud/android/syncadapter/FileSyncAdapter.java @@ -264,6 +264,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter { mCurrentSyncTime, true, mIsShareSupported, + true, getStorageManager(), getAccount(), getContext() diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java index 63298334..c52845f5 100644 --- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -21,8 +21,6 @@ package com.owncloud.android.ui.activity; import java.io.File; import java.io.IOException; -import org.apache.commons.httpclient.methods.PostMethod; - import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.AuthenticatorException; @@ -50,7 +48,6 @@ import android.provider.MediaStore; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; -import android.support.v4.widget.SwipeRefreshLayout; import android.util.Log; import android.view.View; import android.view.ViewGroup; @@ -114,7 +111,7 @@ import com.owncloud.android.utils.Log_OC; public class FileDisplayActivity extends HookActivity implements FileFragment.ContainerActivity, OnNavigationListener, -OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener { +OnSslUntrustedCertListener, OnEnforceableRefreshListener { private ArrayAdapter mDirectories; @@ -251,7 +248,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener { Log_OC.e(TAG, "Initializing Fragments in onAccountChanged.."); initFragmentsWithFile(); if (file.isFolder()) { - startSyncFolderOperation(file); + startSyncFolderOperation(file, false); } } else { @@ -1153,7 +1150,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener { OCFile root = getStorageManager().getFileByPath(OCFile.ROOT_PATH); listOfFiles.listDirectory(root); setFile(listOfFiles.getCurrentFile()); - startSyncFolderOperation(root); + startSyncFolderOperation(root, false); } cleanSecondFragment(); } @@ -1168,7 +1165,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener { setNavigationListWithFolder(folder); listOfFiles.listDirectory(folder); setFile(listOfFiles.getCurrentFile()); - startSyncFolderOperation(folder); + startSyncFolderOperation(folder, false); } else { Log_OC.e(TAG, "Unexpected null when accessing list fragment"); } @@ -1187,7 +1184,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener { cleanSecondFragment(); // Sync Folder - startSyncFolderOperation(directory); + startSyncFolderOperation(directory, false); } @@ -1304,7 +1301,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener { @Override public void onSavedCertificate() { - startSyncFolderOperation(getCurrentDir()); + startSyncFolderOperation(getCurrentDir(), false); } @@ -1592,7 +1589,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener { return null; } - public void startSyncFolderOperation(OCFile folder) { + public void startSyncFolderOperation(OCFile folder, boolean ignoreETag) { long currentSyncTime = System.currentTimeMillis(); mSyncInProgress = true; @@ -1602,6 +1599,7 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener { currentSyncTime, false, getFileOperationsHelper().isSharedSupported(), + ignoreETag, getStorageManager(), getAccount(), getApplicationContext() @@ -1714,16 +1712,24 @@ OnSslUntrustedCertListener, SwipeRefreshLayout.OnRefreshListener { } @Override + public void onRefresh(boolean ignoreETag) { + refreshList(ignoreETag); + } + + @Override public void onRefresh() { + refreshList(true); + } + + private void refreshList(boolean ignoreETag) { OCFileListFragment listOfFiles = getListOfFilesFragment(); if (listOfFiles != null) { OCFile folder = listOfFiles.getCurrentFile(); if (folder != null) { /*mFile = mContainerActivity.getStorageManager().getFileById(mFile.getFileId()); listDirectory(mFile);*/ - startSyncFolderOperation(folder); + startSyncFolderOperation(folder, ignoreETag); } } } - } diff --git a/src/com/owncloud/android/ui/activity/MoveActivity.java b/src/com/owncloud/android/ui/activity/MoveActivity.java index be8fce1a..18633706 100644 --- a/src/com/owncloud/android/ui/activity/MoveActivity.java +++ b/src/com/owncloud/android/ui/activity/MoveActivity.java @@ -145,7 +145,7 @@ public class MoveActivity extends HookActivity implements FileFragment.Container OCFileListFragment listOfFolders = getListOfFilesFragment(); listOfFolders.listDirectory(folder); - startSyncFolderOperation(folder); + startSyncFolderOperation(folder, false); } updateNavigationElementsInActionBar(); @@ -201,12 +201,12 @@ public class MoveActivity extends HookActivity implements FileFragment.Container setFile(directory); updateNavigationElementsInActionBar(); // Sync Folder - startSyncFolderOperation(directory); + startSyncFolderOperation(directory, false); } - public void startSyncFolderOperation(OCFile folder) { + public void startSyncFolderOperation(OCFile folder, boolean ignoreETag) { long currentSyncTime = System.currentTimeMillis(); mSyncInProgress = true; @@ -216,6 +216,7 @@ public class MoveActivity extends HookActivity implements FileFragment.Container currentSyncTime, false, getFileOperationsHelper().isSharedSupported(), + ignoreETag, getStorageManager(), getAccount(), getApplicationContext() @@ -323,7 +324,7 @@ public class MoveActivity extends HookActivity implements FileFragment.Container listOfFiles.listDirectory(root); setFile(listOfFiles.getCurrentFile()); updateNavigationElementsInActionBar(); - startSyncFolderOperation(root); + startSyncFolderOperation(root, false); } } @@ -560,7 +561,7 @@ public class MoveActivity extends HookActivity implements FileFragment.Container if (listOfFiles != null) { OCFile folder = listOfFiles.getCurrentFile(); if (folder != null) { - startSyncFolderOperation(folder); + startSyncFolderOperation(folder, true); } } } diff --git a/src/com/owncloud/android/ui/activity/OnEnforceableRefreshListener.java b/src/com/owncloud/android/ui/activity/OnEnforceableRefreshListener.java new file mode 100644 index 00000000..22bdb18b --- /dev/null +++ b/src/com/owncloud/android/ui/activity/OnEnforceableRefreshListener.java @@ -0,0 +1,10 @@ +package com.owncloud.android.ui.activity; + +import android.support.v4.widget.SwipeRefreshLayout; + + public interface OnEnforceableRefreshListener extends SwipeRefreshLayout.OnRefreshListener { + + public void onRefresh(boolean enforced); + + } + diff --git a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java index abd53d3a..85b04b22 100644 --- a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -34,13 +34,14 @@ import android.widget.TextView; import com.actionbarsherlock.app.SherlockFragment; import com.owncloud.android.R; import com.owncloud.android.ui.ExtendedListView; +import com.owncloud.android.ui.activity.OnEnforceableRefreshListener; import com.owncloud.android.utils.Log_OC; /** * TODO extending SherlockListFragment instead of SherlockFragment */ public class ExtendedListFragment extends SherlockFragment -implements OnItemClickListener, SwipeRefreshLayout.OnRefreshListener { +implements OnItemClickListener, OnEnforceableRefreshListener { private static final String TAG = ExtendedListFragment.class.getSimpleName(); @@ -63,7 +64,7 @@ implements OnItemClickListener, SwipeRefreshLayout.OnRefreshListener { private ArrayList mTops; private int mHeightCell = 0; - private SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = null; + private OnEnforceableRefreshListener mOnRefreshListener = null; public void setListAdapter(ListAdapter listAdapter) { @@ -240,7 +241,7 @@ implements OnItemClickListener, SwipeRefreshLayout.OnRefreshListener { } } - public void setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener) { + public void setOnRefreshListener(OnEnforceableRefreshListener listener) { mOnRefreshListener = listener; } @@ -300,4 +301,13 @@ implements OnItemClickListener, SwipeRefreshLayout.OnRefreshListener { refreshLayout.setOnRefreshListener(this); } + @Override + public void onRefresh(boolean ignoreETag) { + mRefreshLayout.setRefreshing(false); + mRefreshEmptyLayout.setRefreshing(false); + + if (mOnRefreshListener != null) { + mOnRefreshListener.onRefresh(ignoreETag); + } + } } diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index c11e864e..4e768535 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -36,6 +36,7 @@ import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.files.FileMenuFilter; import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.activity.MoveActivity; +import com.owncloud.android.ui.activity.OnEnforceableRefreshListener; import com.owncloud.android.ui.adapter.FileListListAdapter; import com.owncloud.android.ui.dialog.ConfirmationDialogFragment; import com.owncloud.android.ui.dialog.RemoveFileDialogFragment; @@ -88,7 +89,7 @@ public class OCFileListFragment extends ExtendedListFragment { FileFragment.ContainerActivity.class.getSimpleName()); } try { - setOnRefreshListener((SwipeRefreshLayout.OnRefreshListener) activity); + setOnRefreshListener((OnEnforceableRefreshListener) activity); } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement " + @@ -174,7 +175,7 @@ public class OCFileListFragment extends ExtendedListFragment { listDirectory(mFile); - onRefresh(); + onRefresh(false); // restore index and top position restoreIndexAndTopPosition();