mirror of
https://github.com/nextcloud/android.git
synced 2024-11-23 21:55:48 +03:00
Merge branch 'develop' into share_link__unshare_file
This commit is contained in:
commit
ebbc1793e2
11 changed files with 385 additions and 137 deletions
|
@ -1 +1 @@
|
|||
Subproject commit 815fbba48677e40bff2c3c114c4ce8dd1e35bc17
|
||||
Subproject commit 985b005995429f52446dc5bb66abd236595e627e
|
|
@ -8,6 +8,7 @@
|
|||
<string name ="db_name">ownCloud</string>
|
||||
<string name ="data_folder">owncloud</string>
|
||||
<string name ="log_name">Owncloud_</string>
|
||||
<string name ="default_display_name_for_root_folder">/</string>
|
||||
|
||||
<!-- URLs and flags related -->
|
||||
<string name="server_url"></string>
|
||||
|
|
|
@ -790,33 +790,23 @@ public class FileDataStorageManager {
|
|||
cv.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
|
||||
cv.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
|
||||
cv.put(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME, share.getSharedWithDisplayName());
|
||||
cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isDirectory() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
|
||||
cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
|
||||
cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
|
||||
|
||||
boolean samePath = shareExists(share.getPath());
|
||||
if (samePath ||
|
||||
shareExists(share.getId())) { // for renamed files; no more delete and create
|
||||
|
||||
OCShare oldFile = null;
|
||||
if (samePath) {
|
||||
oldFile = getShareByPath(share.getPath());
|
||||
share.setId(oldFile.getId());
|
||||
} else {
|
||||
oldFile = getShareById(share.getId());
|
||||
}
|
||||
if (shareExists(share.getIdRemoteShared())) { // for renamed files; no more delete and create
|
||||
|
||||
overriden = true;
|
||||
if (getContentResolver() != null) {
|
||||
getContentResolver().update(ProviderTableMeta.CONTENT_URI_SHARE, cv,
|
||||
ProviderTableMeta._ID + "=?",
|
||||
new String[] { String.valueOf(share.getId()) });
|
||||
ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
|
||||
new String[] { String.valueOf(share.getIdRemoteShared()) });
|
||||
} else {
|
||||
try {
|
||||
getContentProviderClient().update(ProviderTableMeta.CONTENT_URI_SHARE,
|
||||
cv, ProviderTableMeta._ID + "=?",
|
||||
new String[] { String.valueOf(share.getId()) });
|
||||
cv, ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
|
||||
new String[] { String.valueOf(share.getIdRemoteShared()) });
|
||||
} catch (RemoteException e) {
|
||||
Log_OC.e(TAG,
|
||||
"Fail to insert insert file to database "
|
||||
|
@ -858,6 +848,16 @@ public class FileDataStorageManager {
|
|||
return share;
|
||||
}
|
||||
|
||||
private OCShare getShareByRemoteId(long remoteId) {
|
||||
Cursor c = getShareCursorForValue(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, String.valueOf(remoteId));
|
||||
OCShare share = null;
|
||||
if (c.moveToFirst()) {
|
||||
share = createShareInstance(c);
|
||||
}
|
||||
c.close();
|
||||
return share;
|
||||
}
|
||||
|
||||
public OCShare getShareByPath(String path) {
|
||||
Cursor c = getShareCursorForValue(ProviderTableMeta.OCSHARES_PATH, path);
|
||||
OCShare share = null;
|
||||
|
@ -888,7 +888,7 @@ public class FileDataStorageManager {
|
|||
.getColumnIndex(ProviderTableMeta.OCSHARES_TOKEN)));
|
||||
share.setSharedWithDisplayName(c.getString(c
|
||||
.getColumnIndex(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME)));
|
||||
share.setIsDirectory(c.getInt(
|
||||
share.setIsFolder(c.getInt(
|
||||
c.getColumnIndex(ProviderTableMeta.OCSHARES_IS_DIRECTORY)) == 1 ? true : false);
|
||||
share.setUserId(c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_USER_ID)));
|
||||
share.setIdRemoteShared(c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED)));
|
||||
|
@ -927,14 +927,10 @@ public class FileDataStorageManager {
|
|||
return retval;
|
||||
}
|
||||
|
||||
public boolean shareExists(long id) {
|
||||
return shareExists(ProviderTableMeta._ID, String.valueOf(id));
|
||||
private boolean shareExists(long remoteId) {
|
||||
return shareExists(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, String.valueOf(remoteId));
|
||||
}
|
||||
|
||||
public boolean shareExists(String path) {
|
||||
return shareExists(ProviderTableMeta.OCSHARES_PATH, path);
|
||||
}
|
||||
|
||||
private void cleanSharedFiles() {
|
||||
ContentValues cv = new ContentValues();
|
||||
cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, false);
|
||||
|
@ -955,6 +951,26 @@ public class FileDataStorageManager {
|
|||
}
|
||||
}
|
||||
|
||||
private void cleanSharedFilesInFolder(OCFile folder) {
|
||||
ContentValues cv = new ContentValues();
|
||||
cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, false);
|
||||
cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, "");
|
||||
String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PARENT + "=?";
|
||||
String [] whereArgs = new String[] { mAccount.name , String.valueOf(folder.getFileId()) };
|
||||
|
||||
if (getContentResolver() != null) {
|
||||
getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs);
|
||||
|
||||
} else {
|
||||
try {
|
||||
getContentProviderClient().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs);
|
||||
|
||||
} catch (RemoteException e) {
|
||||
Log_OC.e(TAG, "Exception in cleanSharedFilesInFolder " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void cleanShares() {
|
||||
String where = ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
|
||||
String [] whereArgs = new String[]{mAccount.name};
|
||||
|
@ -990,18 +1006,17 @@ public class FileDataStorageManager {
|
|||
cv.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
|
||||
cv.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
|
||||
cv.put(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME, share.getSharedWithDisplayName());
|
||||
cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isDirectory() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
|
||||
cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
|
||||
cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
|
||||
|
||||
boolean existsByPath = shareExists(share.getPath());
|
||||
if (existsByPath || shareExists(share.getId())) {
|
||||
if (shareExists(share.getIdRemoteShared())) {
|
||||
// updating an existing file
|
||||
operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI_SHARE).
|
||||
withValues(cv).
|
||||
withSelection( ProviderTableMeta._ID + "=?",
|
||||
new String[] { String.valueOf(share.getId()) })
|
||||
withSelection( ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
|
||||
new String[] { String.valueOf(share.getIdRemoteShared()) })
|
||||
.build());
|
||||
|
||||
} else {
|
||||
|
@ -1124,7 +1139,7 @@ public class FileDataStorageManager {
|
|||
for (OCShare share : shares) {
|
||||
// Get the path
|
||||
String path = share.getPath();
|
||||
if (share.isDirectory()) {
|
||||
if (share.isFolder()) {
|
||||
path = path + FileUtils.PATH_SEPARATOR;
|
||||
}
|
||||
|
||||
|
@ -1140,4 +1155,125 @@ public class FileDataStorageManager {
|
|||
|
||||
updateSharedFiles(sharedFiles);
|
||||
}
|
||||
|
||||
|
||||
public void saveSharesInFolder(ArrayList<OCShare> shares, OCFile folder) {
|
||||
cleanSharedFilesInFolder(folder);
|
||||
ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
|
||||
operations = prepareRemoveSharesInFolder(folder, operations);
|
||||
|
||||
if (shares != null) {
|
||||
// prepare operations to insert or update files to save in the given folder
|
||||
for (OCShare share : shares) {
|
||||
ContentValues cv = new ContentValues();
|
||||
cv.put(ProviderTableMeta.OCSHARES_FILE_SOURCE, share.getFileSource());
|
||||
cv.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE, share.getItemSource());
|
||||
cv.put(ProviderTableMeta.OCSHARES_SHARE_TYPE, share.getShareType().getValue());
|
||||
cv.put(ProviderTableMeta.OCSHARES_SHARE_WITH, share.getShareWith());
|
||||
cv.put(ProviderTableMeta.OCSHARES_PATH, share.getPath());
|
||||
cv.put(ProviderTableMeta.OCSHARES_PERMISSIONS, share.getPermissions());
|
||||
cv.put(ProviderTableMeta.OCSHARES_SHARED_DATE, share.getSharedDate());
|
||||
cv.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
|
||||
cv.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
|
||||
cv.put(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME, share.getSharedWithDisplayName());
|
||||
cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
|
||||
cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
|
||||
cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
|
||||
cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
|
||||
|
||||
/*
|
||||
if (shareExists(share.getIdRemoteShared())) {
|
||||
// updating an existing share resource
|
||||
operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI_SHARE).
|
||||
withValues(cv).
|
||||
withSelection( ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
|
||||
new String[] { String.valueOf(share.getIdRemoteShared()) })
|
||||
.build());
|
||||
|
||||
} else {
|
||||
*/
|
||||
// adding a new share resource
|
||||
operations.add(ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI_SHARE).withValues(cv).build());
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
// apply operations in batch
|
||||
if (operations.size() > 0) {
|
||||
@SuppressWarnings("unused")
|
||||
ContentProviderResult[] results = null;
|
||||
Log_OC.d(TAG, "Sending " + operations.size() + " operations to FileContentProvider");
|
||||
try {
|
||||
if (getContentResolver() != null) {
|
||||
results = getContentResolver().applyBatch(MainApp.getAuthority(), operations);
|
||||
|
||||
} else {
|
||||
results = getContentProviderClient().applyBatch(operations);
|
||||
}
|
||||
|
||||
} catch (OperationApplicationException e) {
|
||||
Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
|
||||
|
||||
} catch (RemoteException e) {
|
||||
Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
|
||||
}
|
||||
}
|
||||
//}
|
||||
|
||||
}
|
||||
|
||||
private ArrayList<ContentProviderOperation> prepareRemoveSharesInFolder(OCFile folder, ArrayList<ContentProviderOperation> preparedOperations) {
|
||||
if (folder != null) {
|
||||
String where = ProviderTableMeta.OCSHARES_PATH + "=?" + " AND " + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
|
||||
String [] whereArgs = new String[]{ "", mAccount.name };
|
||||
|
||||
Vector<OCFile> files = getFolderContent(folder);
|
||||
|
||||
for (OCFile file : files) {
|
||||
whereArgs[0] = file.getRemotePath();
|
||||
preparedOperations.add(ContentProviderOperation.newDelete(ProviderTableMeta.CONTENT_URI_SHARE)
|
||||
.withSelection(where, whereArgs)
|
||||
.build());
|
||||
}
|
||||
}
|
||||
return preparedOperations;
|
||||
|
||||
/*
|
||||
if (operations.size() > 0) {
|
||||
try {
|
||||
if (getContentResolver() != null) {
|
||||
getContentResolver().applyBatch(MainApp.getAuthority(), operations);
|
||||
|
||||
} else {
|
||||
getContentProviderClient().applyBatch(operations);
|
||||
}
|
||||
|
||||
} catch (OperationApplicationException e) {
|
||||
Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
|
||||
|
||||
} catch (RemoteException e) {
|
||||
Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
if (getContentResolver() != null) {
|
||||
|
||||
getContentResolver().delete(ProviderTableMeta.CONTENT_URI_SHARE,
|
||||
where,
|
||||
whereArgs);
|
||||
} else {
|
||||
try {
|
||||
getContentProviderClient().delete( ProviderTableMeta.CONTENT_URI_SHARE,
|
||||
where,
|
||||
whereArgs);
|
||||
|
||||
} catch (RemoteException e) {
|
||||
Log_OC.e(TAG, "Exception deleting shares in a folder " + e.getMessage());
|
||||
}
|
||||
}
|
||||
*/
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -94,11 +94,11 @@ public class CreateShareOperation extends SyncOperation {
|
|||
// Update DB with the response
|
||||
if (mPath.endsWith(FileUtils.PATH_SEPARATOR)) {
|
||||
share.setPath(mPath.substring(0, mPath.length()-1));
|
||||
share.setIsDirectory(true);
|
||||
share.setIsFolder(true);
|
||||
|
||||
} else {
|
||||
share.setPath(mPath);
|
||||
share.setIsDirectory(false);
|
||||
share.setIsFolder(false);
|
||||
}
|
||||
share.setPermissions(mPermissions);
|
||||
|
||||
|
|
|
@ -33,14 +33,16 @@ import org.apache.http.HttpStatus;
|
|||
import android.accounts.Account;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
//import android.support.v4.content.LocalBroadcastManager;
|
||||
|
||||
import com.owncloud.android.datamodel.FileDataStorageManager;
|
||||
import com.owncloud.android.datamodel.OCFile;
|
||||
import com.owncloud.android.lib.network.OwnCloudClient;
|
||||
import com.owncloud.android.lib.operations.common.OCShare;
|
||||
import com.owncloud.android.lib.operations.common.RemoteOperation;
|
||||
import com.owncloud.android.lib.operations.common.RemoteOperationResult;
|
||||
import com.owncloud.android.lib.operations.common.RemoteOperationResult.ResultCode;
|
||||
import com.owncloud.android.lib.operations.remote.GetSharesForFileRemoteOperation;
|
||||
import com.owncloud.android.lib.operations.remote.ReadRemoteFileOperation;
|
||||
import com.owncloud.android.lib.operations.remote.ReadRemoteFolderOperation;
|
||||
import com.owncloud.android.lib.operations.common.RemoteFile;
|
||||
|
@ -65,7 +67,8 @@ public class SynchronizeFolderOperation extends RemoteOperation {
|
|||
|
||||
private static final String TAG = SynchronizeFolderOperation.class.getSimpleName();
|
||||
|
||||
public static final String EVENT_SINGLE_FOLDER_SYNCED = SynchronizeFolderOperation.class.getName() + ".EVENT_SINGLE_FOLDER_SYNCED";
|
||||
public static final String EVENT_SINGLE_FOLDER_CONTENTS_SYNCED = SynchronizeFolderOperation.class.getName() + ".EVENT_SINGLE_FOLDER_CONTENTS_SYNCED";
|
||||
public static final String EVENT_SINGLE_FOLDER_SHARES_SYNCED = SynchronizeFolderOperation.class.getName() + ".EVENT_SINGLE_FOLDER_SHARES_SYNCED";
|
||||
|
||||
/** Time stamp for the synchronization process in progress */
|
||||
private long mCurrentSyncTime;
|
||||
|
@ -97,9 +100,12 @@ public class SynchronizeFolderOperation extends RemoteOperation {
|
|||
/** 'True' means that this operation is part of a full account synchronization */
|
||||
private boolean mSyncFullAccount;
|
||||
|
||||
/** 'True' means that Share resources bound to the files into the folder should be refreshed also */
|
||||
private boolean mRefreshShares;
|
||||
|
||||
/** 'True' means that the remote folder changed from last synchronization and should be fetched */
|
||||
private boolean mRemoteFolderChanged;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new instance of {@link SynchronizeFolderOperation}.
|
||||
|
@ -116,12 +122,14 @@ public class SynchronizeFolderOperation extends RemoteOperation {
|
|||
public SynchronizeFolderOperation( OCFile folder,
|
||||
long currentSyncTime,
|
||||
boolean syncFullAccount,
|
||||
boolean refreshShares,
|
||||
FileDataStorageManager dataStorageManager,
|
||||
Account account,
|
||||
Context context ) {
|
||||
mLocalFolder = folder;
|
||||
mCurrentSyncTime = currentSyncTime;
|
||||
mSyncFullAccount = syncFullAccount;
|
||||
mRefreshShares = refreshShares;
|
||||
mStorageManager = dataStorageManager;
|
||||
mAccount = account;
|
||||
mContext = context;
|
||||
|
@ -174,46 +182,57 @@ public class SynchronizeFolderOperation extends RemoteOperation {
|
|||
}
|
||||
|
||||
if (!mSyncFullAccount) {
|
||||
sendLocalBroadcast(mLocalFolder.getRemotePath(), result);
|
||||
sendLocalBroadcast(EVENT_SINGLE_FOLDER_CONTENTS_SYNCED, mLocalFolder.getRemotePath(), result);
|
||||
}
|
||||
|
||||
|
||||
if (result.isSuccess() && mRefreshShares) {
|
||||
RemoteOperationResult shareResult = refreshSharesForFolder(client);
|
||||
if (shareResult.getCode() != ResultCode.FILE_NOT_FOUND) {
|
||||
result = shareResult;
|
||||
} // else , keep the previous result ; being conservative for servers where Sharing API is supported, but disabled
|
||||
}
|
||||
|
||||
if (!mSyncFullAccount) {
|
||||
sendLocalBroadcast(EVENT_SINGLE_FOLDER_SHARES_SYNCED, mLocalFolder.getRemotePath(), result);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
|
||||
private RemoteOperationResult checkForChanges(OwnCloudClient client) {
|
||||
mRemoteFolderChanged = false;
|
||||
RemoteOperationResult result = null;
|
||||
String remotePath = null;
|
||||
|
||||
remotePath = mLocalFolder.getRemotePath();
|
||||
Log_OC.d(TAG, "Checking changes in " + mAccount.name + remotePath);
|
||||
|
||||
// remote request
|
||||
ReadRemoteFileOperation operation = new ReadRemoteFileOperation(remotePath);
|
||||
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()));
|
||||
|
||||
result = new RemoteOperationResult(ResultCode.OK);
|
||||
|
||||
Log_OC.i(TAG, "Checked " + mAccount.name + remotePath + " : " + (mRemoteFolderChanged ? "changed" : "not changed"));
|
||||
} else {
|
||||
// check failed
|
||||
if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
|
||||
removeLocalFolder();
|
||||
}
|
||||
if (result.isException()) {
|
||||
Log_OC.e(TAG, "Checked " + mAccount.name + remotePath + " : " + result.getLogMessage(), result.getException());
|
||||
} else {
|
||||
Log_OC.e(TAG, "Checked " + mAccount.name + remotePath + " : " + result.getLogMessage());
|
||||
}
|
||||
}
|
||||
remotePath = mLocalFolder.getRemotePath();
|
||||
Log_OC.d(TAG, "Checking changes in " + mAccount.name + remotePath);
|
||||
|
||||
// remote request
|
||||
ReadRemoteFileOperation operation = new ReadRemoteFileOperation(remotePath);
|
||||
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()));
|
||||
|
||||
result = new RemoteOperationResult(ResultCode.OK);
|
||||
|
||||
Log_OC.i(TAG, "Checked " + mAccount.name + remotePath + " : " + (mRemoteFolderChanged ? "changed" : "not changed"));
|
||||
|
||||
} else {
|
||||
// check failed
|
||||
if (result.getCode() == ResultCode.FILE_NOT_FOUND) {
|
||||
removeLocalFolder();
|
||||
}
|
||||
if (result.isException()) {
|
||||
Log_OC.e(TAG, "Checked " + mAccount.name + remotePath + " : " + result.getLogMessage(), result.getException());
|
||||
} else {
|
||||
Log_OC.e(TAG, "Checked " + mAccount.name + remotePath + " : " + result.getLogMessage());
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -332,13 +351,7 @@ public class SynchronizeFolderOperation extends RemoteOperation {
|
|||
// request for the synchronization of file contents AFTER saving current remote properties
|
||||
startContentSynchronizations(filesToSyncContents, client);
|
||||
|
||||
// removal of obsolete files
|
||||
//removeObsoleteFiles();
|
||||
|
||||
// must be done AFTER saving all the children information, so that eTag is not updated in the database in case of unexpected exceptions
|
||||
//mStorageManager.saveFile(remoteFolder);
|
||||
mChildren = updatedFiles;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -453,6 +466,27 @@ public class SynchronizeFolderOperation extends RemoteOperation {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private RemoteOperationResult refreshSharesForFolder(OwnCloudClient client) {
|
||||
RemoteOperationResult result = null;
|
||||
|
||||
// remote request
|
||||
GetSharesForFileRemoteOperation operation = new GetSharesForFileRemoteOperation(mLocalFolder.getRemotePath(), false, true);
|
||||
result = operation.execute(client);
|
||||
|
||||
if (result.isSuccess()) {
|
||||
// update local database
|
||||
ArrayList<OCShare> shares = new ArrayList<OCShare>();
|
||||
for(Object obj: result.getData()) {
|
||||
shares.add((OCShare) obj);
|
||||
}
|
||||
mStorageManager.saveSharesInFolder(shares, mLocalFolder);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Scans the default location for saving local copies of files searching for
|
||||
|
@ -475,18 +509,20 @@ public class SynchronizeFolderOperation extends RemoteOperation {
|
|||
/**
|
||||
* Sends a message to any application component interested in the progress of the synchronization.
|
||||
*
|
||||
* @param inProgress 'True' when the synchronization progress is not finished.
|
||||
* @param event
|
||||
* @param dirRemotePath Remote path of a folder that was just synchronized (with or without success)
|
||||
* @param result
|
||||
*/
|
||||
private void sendLocalBroadcast(String dirRemotePath, RemoteOperationResult result) {
|
||||
Intent intent = new Intent(EVENT_SINGLE_FOLDER_SYNCED);
|
||||
private void sendLocalBroadcast(String event, String dirRemotePath, RemoteOperationResult result) {
|
||||
Log_OC.d(TAG, "Send broadcast " + event);
|
||||
Intent intent = new Intent(event);
|
||||
intent.putExtra(FileSyncAdapter.EXTRA_ACCOUNT_NAME, mAccount.name);
|
||||
if (dirRemotePath != null) {
|
||||
intent.putExtra(FileSyncAdapter.EXTRA_FOLDER_PATH, dirRemotePath);
|
||||
}
|
||||
intent.putExtra(FileSyncAdapter.EXTRA_RESULT, result);
|
||||
//mContext.sendStickyBroadcast(intent);
|
||||
LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
|
||||
mContext.sendStickyBroadcast(intent);
|
||||
//LocalBroadcastManager.getInstance(mContext).sendBroadcast(intent);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ import com.owncloud.android.R;
|
|||
import com.owncloud.android.datamodel.FileDataStorageManager;
|
||||
import com.owncloud.android.db.ProviderMeta;
|
||||
import com.owncloud.android.db.ProviderMeta.ProviderTableMeta;
|
||||
import com.owncloud.android.lib.operations.common.ShareType;
|
||||
import com.owncloud.android.utils.Log_OC;
|
||||
|
||||
|
||||
|
@ -298,23 +299,23 @@ public class FileContentProvider extends ContentProvider {
|
|||
String[] projectionShare = new String[] {ProviderTableMeta._ID, ProviderTableMeta.OCSHARES_PATH, ProviderTableMeta.OCSHARES_ACCOUNT_OWNER };
|
||||
String whereShare = ProviderTableMeta.OCSHARES_PATH + "=? AND " + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
|
||||
String[] whereArgsShare = new String[] {path, accountNameShare};
|
||||
Uri insertedShareUri = null;
|
||||
Cursor doubleCheckShare = query(db, uri, projectionShare, whereShare, whereArgsShare, null);
|
||||
if (doubleCheckShare == null || !doubleCheckShare.moveToFirst()) { // ugly patch; serious refactorization is needed to reduce work in FileDataStorageManager and bring it to FileContentProvider
|
||||
long rowId = db.insert(ProviderTableMeta.OCSHARES_TABLE_NAME, null, values);
|
||||
if (rowId >0) {
|
||||
Uri insertedShareUri = ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_SHARE, rowId);
|
||||
return insertedShareUri;
|
||||
insertedShareUri = ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_SHARE, rowId);
|
||||
} else {
|
||||
throw new SQLException("ERROR " + uri);
|
||||
|
||||
}
|
||||
} else {
|
||||
// file is already inserted; race condition, let's avoid a duplicated entry
|
||||
Uri insertedFileUri = ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_SHARE, doubleCheckShare.getLong(doubleCheckShare.getColumnIndex(ProviderTableMeta._ID)));
|
||||
insertedShareUri = ContentUris.withAppendedId(ProviderTableMeta.CONTENT_URI_SHARE, doubleCheckShare.getLong(doubleCheckShare.getColumnIndex(ProviderTableMeta._ID)));
|
||||
doubleCheckShare.close();
|
||||
|
||||
return insertedFileUri;
|
||||
}
|
||||
updateFilesTableAccordingToShareInsertion(db, uri, values);
|
||||
return insertedShareUri;
|
||||
|
||||
|
||||
default:
|
||||
|
@ -322,8 +323,20 @@ public class FileContentProvider extends ContentProvider {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void updateFilesTableAccordingToShareInsertion(SQLiteDatabase db, Uri uri, ContentValues shareValues) {
|
||||
ContentValues fileValues = new ContentValues();
|
||||
fileValues.put(ProviderTableMeta.FILE_SHARE_BY_LINK,
|
||||
ShareType.PUBLIC_LINK.getValue() == shareValues.getAsInteger(ProviderTableMeta.OCSHARES_SHARE_TYPE)? 1 : 0);
|
||||
String whereShare = ProviderTableMeta.FILE_PATH + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?";
|
||||
String[] whereArgsShare = new String[] {
|
||||
shareValues.getAsString(ProviderTableMeta.OCSHARES_PATH),
|
||||
shareValues.getAsString(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER)
|
||||
};
|
||||
db.update(ProviderTableMeta.FILE_TABLE_NAME, fileValues, whereShare, whereArgsShare);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onCreate() {
|
||||
mDbHelper = new DataBaseHelper(getContext());
|
||||
|
|
|
@ -42,7 +42,7 @@ import android.os.IBinder;
|
|||
import android.os.Looper;
|
||||
import android.os.Message;
|
||||
import android.os.Process;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
//import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.util.Pair;
|
||||
|
||||
public class OperationsService extends Service {
|
||||
|
@ -262,8 +262,9 @@ public class OperationsService extends Service {
|
|||
} else {
|
||||
intent.putExtra(EXTRA_SERVER_URL, target.mServerUrl);
|
||||
}
|
||||
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
|
||||
lbm.sendBroadcast(intent);
|
||||
//LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
|
||||
//lbm.sendBroadcast(intent);
|
||||
sendStickyBroadcast(intent);
|
||||
}
|
||||
|
||||
|
||||
|
@ -286,8 +287,9 @@ public class OperationsService extends Service {
|
|||
} else {
|
||||
intent.putExtra(EXTRA_SERVER_URL, target.mServerUrl);
|
||||
}
|
||||
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
|
||||
lbm.sendBroadcast(intent);
|
||||
//LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
|
||||
//lbm.sendBroadcast(intent);
|
||||
sendStickyBroadcast(intent);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ 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.accounts.OwnCloudAccount;
|
||||
import com.owncloud.android.lib.operations.common.RemoteOperationResult;
|
||||
import com.owncloud.android.operations.SynchronizeFolderOperation;
|
||||
import com.owncloud.android.operations.UpdateOCVersionOperation;
|
||||
|
@ -40,6 +41,7 @@ import com.owncloud.android.utils.Log_OC;
|
|||
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.accounts.AccountManager;
|
||||
import android.accounts.AccountsException;
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationManager;
|
||||
|
@ -51,7 +53,7 @@ import android.content.Context;
|
|||
import android.content.Intent;
|
||||
import android.content.SyncResult;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
//import android.support.v4.content.LocalBroadcastManager;
|
||||
|
||||
/**
|
||||
* Implementation of {@link AbstractThreadedSyncAdapter} responsible for synchronizing
|
||||
|
@ -72,8 +74,8 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
|
|||
|
||||
public static final String EVENT_FULL_SYNC_START = FileSyncAdapter.class.getName() + ".EVENT_FULL_SYNC_START";
|
||||
public static final String EVENT_FULL_SYNC_END = FileSyncAdapter.class.getName() + ".EVENT_FULL_SYNC_END";
|
||||
public static final String EVENT_FOLDER_CONTENTS_SYNCED = FileSyncAdapter.class.getName() + ".EVENT_FOLDER_CONTENTS_SYNCED";
|
||||
public static final String EVENT_FOLDER_SIZE_SYNCED = FileSyncAdapter.class.getName() + ".EVENT_FOLDER_SIZE_SYNCED";
|
||||
public static final String EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED = FileSyncAdapter.class.getName() + ".EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED";
|
||||
public static final String EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED = FileSyncAdapter.class.getName() + ".EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED";
|
||||
|
||||
public static final String EXTRA_ACCOUNT_NAME = FileSyncAdapter.class.getName() + ".EXTRA_ACCOUNT_NAME";
|
||||
public static final String EXTRA_FOLDER_PATH = FileSyncAdapter.class.getName() + ".EXTRA_FOLDER_PATH";
|
||||
|
@ -106,6 +108,9 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
|
|||
|
||||
/** {@link SyncResult} instance to return to the system when the synchronization finish */
|
||||
private SyncResult mSyncResult;
|
||||
|
||||
/** 'True' means that the server supports the share API */
|
||||
private boolean mIsSharedSupported;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -150,6 +155,10 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
|
|||
this.setAccount(account);
|
||||
this.setContentProviderClient(providerClient);
|
||||
this.setStorageManager(new FileDataStorageManager(account, providerClient));
|
||||
|
||||
AccountManager accountManager = getAccountManager();
|
||||
mIsSharedSupported = Boolean.parseBoolean(accountManager.getUserData(account, OwnCloudAccount.Constants.KEY_SUPPORTS_SHARE_API));
|
||||
|
||||
try {
|
||||
this.initClientForCurrentAccount();
|
||||
} catch (IOException e) {
|
||||
|
@ -254,13 +263,13 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
|
|||
DataStorageManager dataStorageManager,
|
||||
Account account,
|
||||
Context context ) {
|
||||
|
||||
}
|
||||
*/
|
||||
// folder synchronization
|
||||
SynchronizeFolderOperation synchFolderOp = new SynchronizeFolderOperation( folder,
|
||||
mCurrentSyncTime,
|
||||
true,
|
||||
mIsSharedSupported,
|
||||
getStorageManager(),
|
||||
getAccount(),
|
||||
getContext()
|
||||
|
@ -269,7 +278,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
|
|||
|
||||
|
||||
// synchronized folder -> notice to UI - ALWAYS, although !result.isSuccess
|
||||
sendLocalBroadcast(EVENT_FOLDER_CONTENTS_SYNCED, folder.getRemotePath(), result);
|
||||
sendLocalBroadcast(EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED, folder.getRemotePath(), result);
|
||||
|
||||
// check the result of synchronizing the folder
|
||||
if (result.isSuccess() || result.getCode() == ResultCode.SYNC_CONFLICT) {
|
||||
|
@ -343,7 +352,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
|
|||
syncDown = (parentEtagChanged || etag == null || etag.length() == 0);
|
||||
if(syncDown) { */
|
||||
synchronizeFolder(newFile);
|
||||
sendLocalBroadcast(EVENT_FOLDER_SIZE_SYNCED, parent.getRemotePath(), null);
|
||||
sendLocalBroadcast(EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED, parent.getRemotePath(), null);
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
@ -360,6 +369,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
|
|||
* @param result Result of an individual {@ SynchronizeFolderOperation}, if completed; may be null.
|
||||
*/
|
||||
private void sendLocalBroadcast(String event, String dirRemotePath, RemoteOperationResult result) {
|
||||
Log_OC.d(TAG, "Send broadcast " + event);
|
||||
Intent intent = new Intent(event);
|
||||
intent.putExtra(FileSyncAdapter.EXTRA_ACCOUNT_NAME, getAccount().name);
|
||||
if (dirRemotePath != null) {
|
||||
|
@ -368,8 +378,8 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
|
|||
if (result != null) {
|
||||
intent.putExtra(FileSyncAdapter.EXTRA_RESULT, result);
|
||||
}
|
||||
//getContext().sendStickyBroadcast(i);
|
||||
LocalBroadcastManager.getInstance(getContext()).sendBroadcast(intent);
|
||||
getContext().sendStickyBroadcast(intent);
|
||||
//LocalBroadcastManager.getInstance(getContext()).sendBroadcast(intent);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ import android.preference.PreferenceManager;
|
|||
import android.provider.MediaStore;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
//import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
@ -100,7 +100,7 @@ import com.owncloud.android.utils.Log_OC;
|
|||
* @author David A. Velasco
|
||||
*/
|
||||
|
||||
public class FileDisplayActivity extends FileActivity implements
|
||||
public class FileDisplayActivity extends HookActivity implements
|
||||
OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNavigationListener, OnSslValidatorListener, EditNameDialogListener {
|
||||
|
||||
private ArrayAdapter<String> mDirectories;
|
||||
|
@ -108,7 +108,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
private SyncBroadcastReceiver mSyncBroadcastReceiver;
|
||||
private UploadFinishReceiver mUploadFinishReceiver;
|
||||
private DownloadFinishReceiver mDownloadFinishReceiver;
|
||||
private OperationsServiceReceiver mOperationsServiceReceiver;
|
||||
//private OperationsServiceReceiver mOperationsServiceReceiver;
|
||||
private FileDownloaderBinder mDownloaderBinder = null;
|
||||
private FileUploaderBinder mUploaderBinder = null;
|
||||
private ServiceConnection mDownloadConnection = null, mUploadConnection = null;
|
||||
|
@ -140,7 +140,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
private OCFile mWaitingToPreview;
|
||||
|
||||
private boolean mSyncInProgress = false;
|
||||
private boolean mRefreshSharesInProgress = false;
|
||||
//private boolean mRefreshSharesInProgress = false;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -171,12 +171,12 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
if(savedInstanceState != null) {
|
||||
mWaitingToPreview = (OCFile) savedInstanceState.getParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW);
|
||||
mSyncInProgress = savedInstanceState.getBoolean(KEY_SYNC_IN_PROGRESS);
|
||||
mRefreshSharesInProgress = savedInstanceState.getBoolean(KEY_REFRESH_SHARES_IN_PROGRESS);
|
||||
//mRefreshSharesInProgress = savedInstanceState.getBoolean(KEY_REFRESH_SHARES_IN_PROGRESS);
|
||||
|
||||
} else {
|
||||
mWaitingToPreview = null;
|
||||
mSyncInProgress = false;
|
||||
mRefreshSharesInProgress = false;
|
||||
//mRefreshSharesInProgress = false;
|
||||
}
|
||||
|
||||
/// USER INTERFACE
|
||||
|
@ -193,7 +193,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
// Action bar setup
|
||||
mDirectories = new CustomArrayAdapter<String>(this, R.layout.sherlock_spinner_dropdown_item);
|
||||
getSupportActionBar().setHomeButtonEnabled(true); // mandatory since Android ICS, according to the official documentation
|
||||
setSupportProgressBarIndeterminateVisibility(mSyncInProgress || mRefreshSharesInProgress); // always AFTER setContentView(...) ; to work around bug in its implementation
|
||||
setSupportProgressBarIndeterminateVisibility(mSyncInProgress /*|| mRefreshSharesInProgress*/); // always AFTER setContentView(...) ; to work around bug in its implementation
|
||||
|
||||
Log_OC.d(TAG, "onCreate() end");
|
||||
}
|
||||
|
@ -533,7 +533,8 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
// the next operation triggers a new call to this method, but it's necessary to
|
||||
// ensure that the name exposed in the action bar is the current directory when the
|
||||
// user selected it in the navigation list
|
||||
getSupportActionBar().setSelectedNavigationItem(0);
|
||||
if (getSupportActionBar().getNavigationMode() == ActionBar.NAVIGATION_MODE_LIST && itemPosition != 0)
|
||||
getSupportActionBar().setSelectedNavigationItem(0);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -659,7 +660,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
super.onSaveInstanceState(outState);
|
||||
outState.putParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW, mWaitingToPreview);
|
||||
outState.putBoolean(FileDisplayActivity.KEY_SYNC_IN_PROGRESS, mSyncInProgress);
|
||||
outState.putBoolean(FileDisplayActivity.KEY_REFRESH_SHARES_IN_PROGRESS, mRefreshSharesInProgress);
|
||||
//outState.putBoolean(FileDisplayActivity.KEY_REFRESH_SHARES_IN_PROGRESS, mRefreshSharesInProgress);
|
||||
|
||||
Log_OC.d(TAG, "onSaveInstanceState() end");
|
||||
}
|
||||
|
@ -674,12 +675,13 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
// Listen for sync messages
|
||||
IntentFilter syncIntentFilter = new IntentFilter(FileSyncAdapter.EVENT_FULL_SYNC_START);
|
||||
syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_END);
|
||||
syncIntentFilter.addAction(FileSyncAdapter.EVENT_FOLDER_SIZE_SYNCED);
|
||||
syncIntentFilter.addAction(FileSyncAdapter.EVENT_FOLDER_CONTENTS_SYNCED);
|
||||
syncIntentFilter.addAction(SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SYNCED);
|
||||
syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED);
|
||||
syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED);
|
||||
syncIntentFilter.addAction(SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED);
|
||||
syncIntentFilter.addAction(SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED);
|
||||
mSyncBroadcastReceiver = new SyncBroadcastReceiver();
|
||||
//registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
|
||||
registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
|
||||
//LocalBroadcastManager.getInstance(this).registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
|
||||
|
||||
// Listen for upload messages
|
||||
IntentFilter uploadIntentFilter = new IntentFilter(FileUploader.getUploadFinishMessage());
|
||||
|
@ -693,10 +695,12 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
registerReceiver(mDownloadFinishReceiver, downloadIntentFilter);
|
||||
|
||||
// Listen for messages from the OperationsService
|
||||
/*
|
||||
IntentFilter operationsIntentFilter = new IntentFilter(OperationsService.ACTION_OPERATION_ADDED);
|
||||
operationsIntentFilter.addAction(OperationsService.ACTION_OPERATION_FINISHED);
|
||||
mOperationsServiceReceiver = new OperationsServiceReceiver();
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(mOperationsServiceReceiver, operationsIntentFilter);
|
||||
*/
|
||||
|
||||
Log_OC.d(TAG, "onResume() end");
|
||||
}
|
||||
|
@ -707,8 +711,8 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
super.onPause();
|
||||
Log_OC.e(TAG, "onPause() start");
|
||||
if (mSyncBroadcastReceiver != null) {
|
||||
//unregisterReceiver(mSyncBroadcastReceiver);
|
||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(mSyncBroadcastReceiver);
|
||||
unregisterReceiver(mSyncBroadcastReceiver);
|
||||
//LocalBroadcastManager.getInstance(this).unregisterReceiver(mSyncBroadcastReceiver);
|
||||
mSyncBroadcastReceiver = null;
|
||||
}
|
||||
if (mUploadFinishReceiver != null) {
|
||||
|
@ -719,10 +723,12 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
unregisterReceiver(mDownloadFinishReceiver);
|
||||
mDownloadFinishReceiver = null;
|
||||
}
|
||||
/*
|
||||
if (mOperationsServiceReceiver != null) {
|
||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(mOperationsServiceReceiver);
|
||||
mOperationsServiceReceiver = null;
|
||||
}
|
||||
*/
|
||||
Log_OC.d(TAG, "onPause() end");
|
||||
}
|
||||
|
||||
|
@ -870,6 +876,8 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
|
||||
((TextView) v).setTextColor(getResources().getColorStateList(
|
||||
android.R.color.white));
|
||||
|
||||
fixRoot((TextView) v );
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -880,9 +888,16 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
((TextView) v).setTextColor(getResources().getColorStateList(
|
||||
android.R.color.white));
|
||||
|
||||
fixRoot((TextView) v );
|
||||
return v;
|
||||
}
|
||||
|
||||
private void fixRoot(TextView v) {
|
||||
if (v.getText().equals(OCFile.PATH_SEPARATOR)) {
|
||||
v.setText(R.string.default_display_name_for_root_folder);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private class SyncBroadcastReceiver extends BroadcastReceiver {
|
||||
|
@ -893,6 +908,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
String event = intent.getAction();
|
||||
Log_OC.d(TAG, "Received broadcast " + event);
|
||||
String accountName = intent.getStringExtra(FileSyncAdapter.EXTRA_ACCOUNT_NAME);
|
||||
String synchFolderRemotePath = intent.getStringExtra(FileSyncAdapter.EXTRA_FOLDER_PATH);
|
||||
RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncAdapter.EXTRA_RESULT);
|
||||
|
@ -900,7 +916,10 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
|
||||
if (sameAccount) {
|
||||
|
||||
if (!FileSyncAdapter.EVENT_FULL_SYNC_START.equals(event)) {
|
||||
if (FileSyncAdapter.EVENT_FULL_SYNC_START.equals(event)) {
|
||||
mSyncInProgress = true;
|
||||
|
||||
} else {
|
||||
OCFile currentFile = (getFile() == null) ? null : getStorageManager().getFileByPath(getFile().getRemotePath());
|
||||
OCFile currentDir = (getCurrentDir() == null) ? null : getStorageManager().getFileByPath(getCurrentDir().getRemotePath());
|
||||
|
||||
|
@ -928,24 +947,25 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
setFile(currentFile);
|
||||
}
|
||||
|
||||
mSyncInProgress = (!FileSyncAdapter.EVENT_FULL_SYNC_END.equals(event) &&
|
||||
!SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SYNCED.equals(event) &&
|
||||
(synchResult == null || synchResult.isSuccess())) ;
|
||||
|
||||
mSyncInProgress = (!FileSyncAdapter.EVENT_FULL_SYNC_END.equals(event) && !SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED.equals(event));
|
||||
|
||||
/*
|
||||
if (synchResult != null &&
|
||||
synchResult.isSuccess() &&
|
||||
(SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SYNCED.equals(event) ||
|
||||
FileSyncAdapter.EVENT_FOLDER_CONTENTS_SYNCED.equals(event)
|
||||
FileSyncAdapter.EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED.equals(event)
|
||||
) &&
|
||||
!mRefreshSharesInProgress &&
|
||||
getFileOperationsHelper().isSharedSupported(FileDisplayActivity.this)
|
||||
) {
|
||||
startGetShares();
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
//removeStickyBroadcast(intent);
|
||||
setSupportProgressBarIndeterminateVisibility(mSyncInProgress || mRefreshSharesInProgress);
|
||||
removeStickyBroadcast(intent);
|
||||
Log_OC.d(TAG, "Setting progress visibility to " + mSyncInProgress);
|
||||
setSupportProgressBarIndeterminateVisibility(mSyncInProgress /*|| mRefreshSharesInProgress*/);
|
||||
}
|
||||
|
||||
if (synchResult != null) {
|
||||
|
@ -1028,7 +1048,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
if (OperationsService.ACTION_OPERATION_ADDED.equals(intent.getAction())) {
|
||||
|
||||
} else if (OperationsService.ACTION_OPERATION_FINISHED.equals(intent.getAction())) {
|
||||
mRefreshSharesInProgress = false;
|
||||
//mRefreshSharesInProgress = false;
|
||||
|
||||
Account account = intent.getParcelableExtra(OperationsService.EXTRA_ACCOUNT);
|
||||
RemoteOperationResult getSharesResult = (RemoteOperationResult)intent.getSerializableExtra(OperationsService.EXTRA_RESULT);
|
||||
|
@ -1043,7 +1063,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
showDialog(DIALOG_SSL_VALIDATOR);
|
||||
}
|
||||
|
||||
setSupportProgressBarIndeterminateVisibility(mRefreshSharesInProgress || mSyncInProgress);
|
||||
//setSupportProgressBarIndeterminateVisibility(mRefreshSharesInProgress || mSyncInProgress);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1169,9 +1189,13 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
if (chosenFile == null || mDualPane) {
|
||||
// only list of files - set for browsing through folders
|
||||
OCFile currentDir = getCurrentDir();
|
||||
actionBar.setDisplayHomeAsUpEnabled(currentDir != null && currentDir.getParentId() != 0);
|
||||
actionBar.setDisplayShowTitleEnabled(false);
|
||||
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
|
||||
boolean noRoot = (currentDir != null && currentDir.getParentId() != 0);
|
||||
actionBar.setDisplayHomeAsUpEnabled(noRoot);
|
||||
actionBar.setDisplayShowTitleEnabled(!noRoot);
|
||||
if (!noRoot) {
|
||||
actionBar.setTitle(getString(R.string.default_display_name_for_root_folder));
|
||||
}
|
||||
actionBar.setNavigationMode(!noRoot ? ActionBar.NAVIGATION_MODE_STANDARD : ActionBar.NAVIGATION_MODE_LIST);
|
||||
actionBar.setListNavigationCallbacks(mDirectories, this); // assuming mDirectories is updated
|
||||
|
||||
} else {
|
||||
|
@ -1548,6 +1572,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
RemoteOperation synchFolderOp = new SynchronizeFolderOperation( folder,
|
||||
currentSyncTime,
|
||||
false,
|
||||
getFileOperationsHelper().isSharedSupported(this),
|
||||
getStorageManager(),
|
||||
getAccount(),
|
||||
getApplicationContext()
|
||||
|
@ -1557,7 +1582,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
setSupportProgressBarIndeterminateVisibility(true);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
private void startGetShares() {
|
||||
// Get shared files/folders
|
||||
Intent intent = new Intent(this, OperationsService.class);
|
||||
|
@ -1566,8 +1591,6 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
|
|||
|
||||
mRefreshSharesInProgress = true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
}
|
||||
|
|
24
src/com/owncloud/android/ui/activity/HookActivity.java
Normal file
24
src/com/owncloud/android/ui/activity/HookActivity.java
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* ownCloud Android client application
|
||||
* Copyright (C) 2012-2014 ownCloud Inc.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2,
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.owncloud.android.ui.activity;
|
||||
|
||||
public abstract class HookActivity extends FileActivity {
|
||||
|
||||
private static final String TAG = HookActivity.class.getName();
|
||||
|
||||
}
|
|
@ -17,6 +17,7 @@
|
|||
*/
|
||||
package com.owncloud.android.ui.activity;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageInfo;
|
||||
|
@ -35,6 +36,7 @@ import com.actionbarsherlock.app.SherlockPreferenceActivity;
|
|||
import com.actionbarsherlock.view.Menu;
|
||||
import com.actionbarsherlock.view.MenuItem;
|
||||
import com.owncloud.android.R;
|
||||
import com.owncloud.android.authentication.AccountUtils;
|
||||
import com.owncloud.android.db.DbHandler;
|
||||
import com.owncloud.android.utils.DisplayUtils;
|
||||
import com.owncloud.android.utils.Log_OC;
|
||||
|
@ -131,18 +133,19 @@ public class Preferences extends SherlockPreferenceActivity {
|
|||
|
||||
Intent intent = new Intent(Intent.ACTION_SENDTO);
|
||||
intent.setType("text/plain");
|
||||
//Account currentAccount = AccountUtils.getCurrentOwnCloudAccount(Preferences.this);
|
||||
String appName = getString(R.string.app_name);
|
||||
//String username = currentAccount.name.substring(0, currentAccount.name.lastIndexOf('@'));
|
||||
//String recommendSubject = String.format(getString(R.string.recommend_subject), username, appName);
|
||||
String recommendSubject = String.format(getString(R.string.recommend_subject), appName);
|
||||
intent.putExtra(Intent.EXTRA_SUBJECT, recommendSubject);
|
||||
//String recommendText = String.format(getString(R.string.recommend_text), getString(R.string.app_name), username);
|
||||
String recommendText = String.format(getString(R.string.recommend_text), getString(R.string.app_name), getString(R.string.url_app_download));
|
||||
intent.putExtra(Intent.EXTRA_TEXT, recommendText);
|
||||
|
||||
intent.setData(Uri.parse(getString(R.string.mail_recommend)));
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
|
||||
String appName = getString(R.string.app_name);
|
||||
String downloadUrl = getString(R.string.url_app_download);
|
||||
Account currentAccount = AccountUtils.getCurrentOwnCloudAccount(Preferences.this);
|
||||
String username = currentAccount.name.substring(0, currentAccount.name.lastIndexOf('@'));
|
||||
|
||||
String recommendSubject = String.format(getString(R.string.recommend_subject), appName);
|
||||
String recommendText = String.format(getString(R.string.recommend_text), appName, downloadUrl, username);
|
||||
|
||||
intent.putExtra(Intent.EXTRA_SUBJECT, recommendSubject);
|
||||
intent.putExtra(Intent.EXTRA_TEXT, recommendText);
|
||||
startActivity(intent);
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue