fix codacy warnings

This commit is contained in:
AndyScherzinger 2016-12-28 19:24:01 +01:00
parent d331fe3cfd
commit 84b9bb97d4
No known key found for this signature in database
GPG key ID: 6CADC7E3523C308B
24 changed files with 136 additions and 722 deletions

View file

@ -38,7 +38,8 @@ import com.owncloud.android.lib.common.utils.Log_OC;
/**
* Authenticator for ownCloud accounts.
*
* Controller class accessed from the system AccountManager, providing integration of ownCloud accounts with the Android system.
* Controller class accessed from the system AccountManager,
* providing integration of ownCloud accounts with the Android system.
*
* TODO - better separation in operations for OAuth-capable and regular ownCloud accounts.
* TODO - review completeness
@ -46,13 +47,13 @@ import com.owncloud.android.lib.common.utils.Log_OC;
public class AccountAuthenticator extends AbstractAccountAuthenticator {
/**
* Is used by android system to assign accounts to authenticators. Should be
* used by application and all extensions.
* Is used by android system to assign accounts to authenticators.
* Should be used by application and all extensions.
*/
public static final String KEY_AUTH_TOKEN_TYPE = "authTokenType";
public static final String KEY_REQUIRED_FEATURES = "requiredFeatures";
public static final String KEY_LOGIN_OPTIONS = "loginOptions";
public static final String KEY_ACCOUNT = "account";
private static final String KEY_AUTH_TOKEN_TYPE = "authTokenType";
private static final String KEY_REQUIRED_FEATURES = "requiredFeatures";
private static final String KEY_LOGIN_OPTIONS = "loginOptions";
private static final String KEY_ACCOUNT = "account";
private static final String TAG = AccountAuthenticator.class.getSimpleName();
@ -74,8 +75,7 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
String accountType, String authTokenType,
String[] requiredFeatures, Bundle options)
throws NetworkErrorException {
Log_OC.i(TAG, "Adding account with type " + accountType
+ " and auth token " + authTokenType);
Log_OC.i(TAG, "Adding account with type " + accountType + " and auth token " + authTokenType);
final Bundle bundle = new Bundle();
@ -131,8 +131,7 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
try {
validateAccountType(account.type);
} catch (AuthenticatorException e) {
Log_OC.e(TAG, "Failed to validate account type " + account.type + ": "
+ e.getMessage(), e);
Log_OC.e(TAG, "Failed to validate account type " + account.type + ": " + e.getMessage(), e);
return e.getFailureBundle();
}
Intent intent = new Intent(mContext, AuthenticatorActivity.class);
@ -149,8 +148,7 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
}
@Override
public Bundle editProperties(AccountAuthenticatorResponse response,
String accountType) {
public Bundle editProperties(AccountAuthenticatorResponse response, String accountType) {
return null;
}
@ -166,8 +164,7 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
validateAccountType(account.type);
validateAuthTokenType(authTokenType);
} catch (AuthenticatorException e) {
Log_OC.e(TAG, "Failed to validate account type " + account.type + ": "
+ e.getMessage(), e);
Log_OC.e(TAG, "Failed to validate account type " + account.type + ": " + e.getMessage(), e);
return e.getFailureBundle();
}
@ -219,8 +216,7 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
Account account, String authTokenType, Bundle options)
throws NetworkErrorException {
final Intent intent = new Intent(mContext, AuthenticatorActivity.class);
intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE,
response);
intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
intent.putExtra(KEY_ACCOUNT, account);
intent.putExtra(KEY_AUTH_TOKEN_TYPE, authTokenType);
intent.putExtra(KEY_LOGIN_OPTIONS, options);
@ -232,8 +228,7 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
}
@Override
public Bundle getAccountRemovalAllowed(
AccountAuthenticatorResponse response, Account account)
public Bundle getAccountRemovalAllowed(AccountAuthenticatorResponse response, Account account)
throws NetworkErrorException {
return super.getAccountRemovalAllowed(response, account);
}
@ -244,15 +239,13 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
intent.addFlags(Intent.FLAG_FROM_BACKGROUND);
}
private void validateAccountType(String type)
throws UnsupportedAccountTypeException {
private void validateAccountType(String type) throws UnsupportedAccountTypeException {
if (!type.equals(MainApp.getAccountType())) {
throw new UnsupportedAccountTypeException();
}
}
private void validateAuthTokenType(String authTokenType)
throws UnsupportedAuthTokenTypeException {
private void validateAuthTokenType(String authTokenType) throws UnsupportedAuthTokenTypeException {
if (!authTokenType.equals(MainApp.getAuthTokenType()) &&
!authTokenType.equals(AccountTypeUtils.getAuthTokenTypePass(MainApp.getAccountType())) &&
!authTokenType.equals(AccountTypeUtils.getAuthTokenTypeAccessToken(MainApp.getAccountType())) &&
@ -269,8 +262,7 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
public AuthenticatorException(int code, String errorMsg) {
mFailureBundle = new Bundle();
mFailureBundle.putInt(AccountManager.KEY_ERROR_CODE, code);
mFailureBundle
.putString(AccountManager.KEY_ERROR_MESSAGE, errorMsg);
mFailureBundle.putString(AccountManager.KEY_ERROR_MESSAGE, errorMsg);
}
public Bundle getFailureBundle() {
@ -278,8 +270,7 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
}
}
public static class UnsupportedAccountTypeException extends
AuthenticatorException {
public static class UnsupportedAccountTypeException extends AuthenticatorException {
private static final long serialVersionUID = 1L;
public UnsupportedAccountTypeException() {
@ -288,8 +279,7 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
}
}
public static class UnsupportedAuthTokenTypeException extends
AuthenticatorException {
public static class UnsupportedAuthTokenTypeException extends AuthenticatorException {
private static final long serialVersionUID = 1L;
public UnsupportedAuthTokenTypeException() {
@ -297,23 +287,4 @@ public class AccountAuthenticator extends AbstractAccountAuthenticator {
"Unsupported auth token type");
}
}
public static class UnsupportedFeaturesException extends
AuthenticatorException {
public static final long serialVersionUID = 1L;
public UnsupportedFeaturesException() {
super(AccountManager.ERROR_CODE_UNSUPPORTED_OPERATION,
"Unsupported features");
}
}
public static class AccessDeniedException extends AuthenticatorException {
public AccessDeniedException(int code, String errorMsg) {
super(AccountManager.ERROR_CODE_INVALID_RESPONSE, "Access Denied");
}
private static final long serialVersionUID = 1L;
}
}

View file

@ -91,10 +91,12 @@ import com.owncloud.android.ui.dialog.SamlWebViewDialog;
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener;
import com.owncloud.android.utils.DisplayUtils;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.security.cert.X509Certificate;
import java.util.Map;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
/**
* This Activity is used to add an ownCloud account to the App
*/
@ -401,7 +403,6 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
* @param savedInstanceState Saved activity state, as in {{@link #onCreate(Bundle)}
*/
private void initServerPreFragment(Bundle savedInstanceState) {
boolean checkHostUrl = true;
/// step 1 - load and process relevant inputs (resources, intent, savedInstanceState)
boolean isUrlInputAllowed = getResources().getBoolean(R.bool.show_server_url_input);
@ -444,9 +445,6 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
mHostUrlInput.setFocusable(false);
}
if (isUrlInputAllowed) {
if (mServerInfo.mBaseUrl.isEmpty()) {
checkHostUrl = false;
}
mRefreshButton = findViewById(R.id.embeddedRefreshButton);
} else {
findViewById(R.id.hostUrlFrame).setVisibility(View.GONE);

View file

@ -21,10 +21,8 @@
package com.owncloud.android.files.services;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
@ -51,7 +49,7 @@ public class ConnectivityActionReceiver extends BroadcastReceiver {
/**
* Magic keyword, by Google.
*
* {@See http://developer.android.com/intl/es/reference/android/net/wifi/WifiInfo.html#getSSID()}
* {@see http://developer.android.com/intl/es/reference/android/net/wifi/WifiInfo.html#getSSID()}
*/
private static final String UNKNOWN_SSID = "<unknown ssid>";
@ -192,7 +190,9 @@ public class ConnectivityActionReceiver extends BroadcastReceiver {
}
}
private void wifiDisconnected(Context context) {
/**
*
private void wifiDisconnected() {
// TODO something smart
// NOTE: explicit cancellation of only-wifi instant uploads is not needed anymore, since currently:
@ -204,6 +204,7 @@ public class ConnectivityActionReceiver extends BroadcastReceiver {
}
static public void enableActionReceiver(Context context) {
PackageManager pm = context.getPackageManager();
ComponentName compName = new ComponentName(context.getApplicationContext(), ConnectivityActionReceiver.class);
@ -218,5 +219,5 @@ public class ConnectivityActionReceiver extends BroadcastReceiver {
PackageManager.DONT_KILL_APP);
}
*/
}

View file

@ -674,7 +674,6 @@ public class FileUploader extends Service
upload = mCurrentUpload;
}
if (upload != null) {
boolean pending = !upload.isUploadInProgress();
upload.cancel();
// need to update now table in mUploadsStorageManager,
// since the operation will not get to be run by FileUploader#uploadFile
@ -686,7 +685,7 @@ public class FileUploader extends Service
}
/**
* Cancels all the uploads for an account
* Cancels all the uploads for an account.
*
* @param account ownCloud account.
*/

View file

@ -42,7 +42,7 @@ public class CreateFolderOperation extends SyncOperation implements OnRemoteOper
private static final String TAG = CreateFolderOperation.class.getSimpleName();
protected String mRemotePath;
protected boolean mCreateFullPath;
private boolean mCreateFullPath;
/**
* Constructor
@ -53,20 +53,18 @@ public class CreateFolderOperation extends SyncOperation implements OnRemoteOper
public CreateFolderOperation(String remotePath, boolean createFullPath) {
mRemotePath = remotePath;
mCreateFullPath = createFullPath;
}
@Override
protected RemoteOperationResult run(OwnCloudClient client) {
CreateRemoteFolderOperation operation = new CreateRemoteFolderOperation(mRemotePath,
mCreateFullPath);
CreateRemoteFolderOperation operation = new CreateRemoteFolderOperation(mRemotePath, mCreateFullPath);
RemoteOperationResult result = operation.execute(client);
if (result.isSuccess()) {
saveFolderInDB();
} else {
Log_OC.e(TAG, mRemotePath + "hasn't been created");
Log_OC.e(TAG, mRemotePath + " hasn't been created");
}
return result;
@ -75,22 +73,20 @@ public class CreateFolderOperation extends SyncOperation implements OnRemoteOper
@Override
public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) {
if (operation instanceof CreateRemoteFolderOperation) {
onCreateRemoteFolderOperationFinish((CreateRemoteFolderOperation)operation, result);
onCreateRemoteFolderOperationFinish(result);
}
}
private void onCreateRemoteFolderOperationFinish(CreateRemoteFolderOperation operation,
RemoteOperationResult result) {
private void onCreateRemoteFolderOperationFinish(RemoteOperationResult result) {
if (result.isSuccess()) {
saveFolderInDB();
} else {
Log_OC.e(TAG, mRemotePath + "hasn't been created");
Log_OC.e(TAG, mRemotePath + " hasn't been created");
}
}
/**
* Save new directory in local database
* Save new directory in local database.
*/
public void saveFolderInDB() {
if (mCreateFullPath && getStorageManager().
@ -101,8 +97,7 @@ public class CreateFolderOperation extends SyncOperation implements OnRemoteOper
String composedRemotePath = "/";
// For each antecesor folders create them recursively
for (int i=0; i<subFolders.length; i++) {
String subFolder = subFolders[i];
for (String subFolder : subFolders) {
if (!subFolder.isEmpty()) {
composedRemotePath = composedRemotePath + subFolder + "/";
mRemotePath = composedRemotePath;
@ -112,8 +107,7 @@ public class CreateFolderOperation extends SyncOperation implements OnRemoteOper
} else { // Create directory on DB
OCFile newDir = new OCFile(mRemotePath);
newDir.setMimetype(MimeType.DIRECTORY);
long parentId = getStorageManager().
getFileByPath(FileStorageUtils.getParentPath(mRemotePath)).getFileId();
long parentId = getStorageManager().getFileByPath(FileStorageUtils.getParentPath(mRemotePath)).getFileId();
newDir.setParentId(parentId);
newDir.setModificationTimestamp(System.currentTimeMillis());
getStorageManager().saveFile(newDir);

View file

@ -32,7 +32,7 @@ import com.owncloud.android.lib.resources.shares.ShareType;
import com.owncloud.android.operations.common.SyncOperation;
/**
* Creates a new private share for a given file
* Creates a new private share for a given file.
*/
public class CreateShareWithShareeOperation extends SyncOperation {

View file

@ -314,7 +314,7 @@ public class RefreshFolderOperation extends RemoteOperation {
Log_OC.d(TAG, "Synchronizing " + mAccount.name + remotePath);
if (result.isSuccess()) {
synchronizeData(result.getData(), client);
synchronizeData(result.getData());
if (mConflictsFound > 0 || mFailsInFavouritesFound > 0) {
result = new RemoteOperationResult(ResultCode.SYNC_CONFLICT);
// should be a different result code, but will do the job
@ -344,18 +344,14 @@ public class RefreshFolderOperation extends RemoteOperation {
/**
* Synchronizes the data retrieved from the server about the contents of the target folder
* with the current data in the local database.
*
* Grants that mChildren is updated with fresh data after execution.
*
* @param folderAndFiles Remote folder and children files in Folder
*
* @param client Client instance to the remote server where the data were
* retrieved.
* @return 'True' when any change was made in the local data, 'false' otherwise
* Synchronizes the data retrieved from the server about the contents of the target folder
* with the current data in the local database.
* <p>
* Grants that mChildren is updated with fresh data after execution.
*
* @param folderAndFiles Remote folder and children files in Folder
*/
private void synchronizeData(ArrayList<Object> folderAndFiles, OwnCloudClient client) {
private void synchronizeData(ArrayList<Object> folderAndFiles) {
// get 'fresh data' from the database
mLocalFolder = mStorageManager.getFileByPath(mLocalFolder.getRemotePath());

View file

@ -154,9 +154,8 @@ public class SynchronizeFolderOperation extends SyncOperation {
}
if (result.isSuccess()) {
syncContents(client);
syncContents();
}
}
if (mCancellationRequested.get()) {
@ -168,15 +167,13 @@ public class SynchronizeFolderOperation extends SyncOperation {
}
return result;
}
private RemoteOperationResult checkForChanges(OwnCloudClient client)
throws OperationCancelledException {
private RemoteOperationResult checkForChanges(OwnCloudClient client) throws OperationCancelledException {
Log_OC.d(TAG, "Checking changes in " + mAccount.name + mRemotePath);
mRemoteFolderChanged = true;
RemoteOperationResult result = null;
RemoteOperationResult result;
if (mCancellationRequested.get()) {
throw new OperationCancelledException();
@ -185,12 +182,11 @@ public class SynchronizeFolderOperation extends SyncOperation {
// remote request
ReadRemoteFileOperation operation = new ReadRemoteFileOperation(mRemotePath);
result = operation.execute(client);
if (result.isSuccess()){
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()));
mRemoteFolderChanged = !(remoteFolder.getEtag().equalsIgnoreCase(mLocalFolder.getEtag()));
result = new RemoteOperationResult(ResultCode.OK);
@ -216,8 +212,7 @@ public class SynchronizeFolderOperation extends SyncOperation {
}
private RemoteOperationResult fetchAndSyncRemoteFolder(OwnCloudClient client)
throws OperationCancelledException {
private RemoteOperationResult fetchAndSyncRemoteFolder(OwnCloudClient client) throws OperationCancelledException {
if (mCancellationRequested.get()) {
throw new OperationCancelledException();
}
@ -227,7 +222,7 @@ public class SynchronizeFolderOperation extends SyncOperation {
Log_OC.d(TAG, "Synchronizing " + mAccount.name + mRemotePath);
if (result.isSuccess()) {
synchronizeData(result.getData(), client);
synchronizeData(result.getData());
if (mConflictsFound > 0 || mFailsInFileSyncsFound > 0) {
result = new RemoteOperationResult(ResultCode.SYNC_CONFLICT);
// should be a different result code, but will do the job
@ -237,7 +232,6 @@ public class SynchronizeFolderOperation extends SyncOperation {
removeLocalFolder();
}
}
return result;
}
@ -260,19 +254,14 @@ public class SynchronizeFolderOperation extends SyncOperation {
/**
* Synchronizes the data retrieved from the server about the contents of the target folder
* with the current data in the local database.
* Synchronizes the data retrieved from the server about the contents of the target folder
* with the current data in the local database.
*
* Grants that mChildren is updated with fresh data after execution.
* Grants that mChildren is updated with fresh data after execution.
*
* @param folderAndFiles Remote folder and children files in Folder
*
* @param client Client instance to the remote server where the data were
* retrieved.
* @return 'True' when any change was made in the local data, 'false' otherwise
* @param folderAndFiles Remote folder and children files in Folder
*/
private void synchronizeData(ArrayList<Object> folderAndFiles, OwnCloudClient client)
throws OperationCancelledException {
private void synchronizeData(ArrayList<Object> folderAndFiles) throws OperationCancelledException {
FileDataStorageManager storageManager = getStorageManager();
// parse data from remote folder
@ -283,7 +272,7 @@ public class SynchronizeFolderOperation extends SyncOperation {
Log_OC.d(TAG, "Remote folder " + mLocalFolder.getRemotePath()
+ " changed - starting update of local data ");
List<OCFile> updatedFiles = new Vector<OCFile>(folderAndFiles.size() - 1);
List<OCFile> updatedFiles = new Vector<>(folderAndFiles.size() - 1);
mFilesForDirectDownload.clear();
mFilesToSyncContents.clear();
@ -293,7 +282,7 @@ public class SynchronizeFolderOperation extends SyncOperation {
// get current data about local contents of the folder to synchronize
List<OCFile> localFiles = storageManager.getFolderContent(mLocalFolder, false);
Map<String, OCFile> localFilesMap = new HashMap<String, OCFile>(localFiles.size());
Map<String, OCFile> localFilesMap = new HashMap<>(localFiles.size());
for (OCFile file : localFiles) {
localFilesMap.put(file.getRemotePath(), file);
}
@ -306,79 +295,86 @@ public class SynchronizeFolderOperation extends SyncOperation {
r = (RemoteFile) folderAndFiles.get(i);
remoteFile = FileStorageUtils.fillOCFile(r);
/// new OCFile instance to merge fresh data from server with local state
updatedFile = FileStorageUtils.fillOCFile(r);
updatedFile.setParentId(mLocalFolder.getFileId());
/// retrieve local data for the read file
// localFile = mStorageManager.getFileByPath(remoteFile.getRemotePath());
localFile = localFilesMap.remove(remoteFile.getRemotePath());
/// new OCFile instance to merge fresh data from server with local state
updatedFile = FileStorageUtils.fillOCFile(r);
updatedFile.setParentId(mLocalFolder.getFileId());
/// add to updatedFile data about LOCAL STATE (not existing in server)
updatedFile.setLastSyncDateForProperties(mCurrentSyncTime);
if (localFile != null) {
updatedFile.setFileId(localFile.getFileId());
updatedFile.setFavorite(localFile.isFavorite());
updatedFile.setLastSyncDateForData(localFile.getLastSyncDateForData());
updatedFile.setModificationTimestampAtLastSyncForData(
localFile.getModificationTimestampAtLastSyncForData()
);
updatedFile.setStoragePath(localFile.getStoragePath());
// eTag will not be updated unless file CONTENTS are synchronized
updatedFile.setEtag(localFile.getEtag());
if (updatedFile.isFolder()) {
updatedFile.setFileLength(localFile.getFileLength());
// TODO move operations about size of folders to FileContentProvider
} else if (mRemoteFolderChanged && MimeTypeUtil.isImage(remoteFile) &&
remoteFile.getModificationTimestamp() !=
localFile.getModificationTimestamp()) {
updatedFile.setNeedsUpdateThumbnail(true);
Log.d(TAG, "Image " + remoteFile.getFileName() + " updated on the server");
}
updatedFile.setPublicLink(localFile.getPublicLink());
updatedFile.setShareViaLink(localFile.isSharedViaLink());
updatedFile.setShareWithSharee(localFile.isSharedWithSharee());
updatedFile.setEtagInConflict(localFile.getEtagInConflict());
} else {
// remote eTag will not be updated unless file CONTENTS are synchronized
updatedFile.setEtag("");
}
updateLocalStateData(remoteFile, localFile, updatedFile);
/// check and fix, if needed, local storage path
searchForLocalFileInDefaultPath(updatedFile);
/// classify file to sync/download contents later
if (remoteFile.isFolder()) {
/// to download children files recursively
synchronized (mCancellationRequested) {
if (mCancellationRequested.get()) {
throw new OperationCancelledException();
}
startSyncFolderOperation(remoteFile.getRemotePath());
}
} else {
/// prepare content synchronization for files (any file, not just favorites)
SynchronizeFileOperation operation = new SynchronizeFileOperation(
localFile,
remoteFile,
mAccount,
true,
mContext
);
mFilesToSyncContents.add(operation);
}
classifyFileForLaterSyncOrDownload(remoteFile, localFile);
updatedFiles.add(updatedFile);
}
// save updated contents in local database
storageManager.saveFolder(remoteFolder, updatedFiles, localFilesMap.values());
}
private void updateLocalStateData(OCFile remoteFile, OCFile localFile, OCFile updatedFile) {
updatedFile.setLastSyncDateForProperties(mCurrentSyncTime);
if (localFile != null) {
updatedFile.setFileId(localFile.getFileId());
updatedFile.setFavorite(localFile.isFavorite());
updatedFile.setLastSyncDateForData(localFile.getLastSyncDateForData());
updatedFile.setModificationTimestampAtLastSyncForData(
localFile.getModificationTimestampAtLastSyncForData()
);
updatedFile.setStoragePath(localFile.getStoragePath());
// eTag will not be updated unless file CONTENTS are synchronized
updatedFile.setEtag(localFile.getEtag());
if (updatedFile.isFolder()) {
updatedFile.setFileLength(localFile.getFileLength());
// TODO move operations about size of folders to FileContentProvider
} else if (mRemoteFolderChanged && MimeTypeUtil.isImage(remoteFile) &&
remoteFile.getModificationTimestamp() !=
localFile.getModificationTimestamp()) {
updatedFile.setNeedsUpdateThumbnail(true);
Log.d(TAG, "Image " + remoteFile.getFileName() + " updated on the server");
}
updatedFile.setPublicLink(localFile.getPublicLink());
updatedFile.setShareViaLink(localFile.isSharedViaLink());
updatedFile.setShareWithSharee(localFile.isSharedWithSharee());
updatedFile.setEtagInConflict(localFile.getEtagInConflict());
} else {
// remote eTag will not be updated unless file CONTENTS are synchronized
updatedFile.setEtag("");
}
}
private void classifyFileForLaterSyncOrDownload(OCFile remoteFile, OCFile localFile)
throws OperationCancelledException {
if (remoteFile.isFolder()) {
/// to download children files recursively
synchronized (mCancellationRequested) {
if (mCancellationRequested.get()) {
throw new OperationCancelledException();
}
startSyncFolderOperation(remoteFile.getRemotePath());
}
} else {
/// prepare content synchronization for files (any file, not just favorites)
SynchronizeFileOperation operation = new SynchronizeFileOperation(
localFile,
remoteFile,
mAccount,
true,
mContext
);
mFilesToSyncContents.add(operation);
}
}
private void prepareOpsFromLocalKnowledge() throws OperationCancelledException {
List<OCFile> children = getStorageManager().getFolderContent(mLocalFolder, false);
for (OCFile child : children) {
@ -415,9 +411,9 @@ public class SynchronizeFolderOperation extends SyncOperation {
}
private void syncContents(OwnCloudClient client) throws OperationCancelledException {
private void syncContents() throws OperationCancelledException {
startDirectDownloads();
startContentSynchronizations(mFilesToSyncContents, client);
startContentSynchronizations(mFilesToSyncContents);
}
@ -439,18 +435,15 @@ public class SynchronizeFolderOperation extends SyncOperation {
* Performs a list of synchronization operations, determining if a download or upload is needed
* or if exists conflict due to changes both in local and remote contents of the each file.
*
* If download or upload is needed, request the operation to the corresponding service and goes
* on.
* If download or upload is needed, request the operation to the corresponding service and goes on.
*
* @param filesToSyncContents Synchronization operations to execute.
* @param client Interface to the remote ownCloud server.
*/
private void startContentSynchronizations(List<SyncOperation> filesToSyncContents,
OwnCloudClient client)
private void startContentSynchronizations(List<SyncOperation> filesToSyncContents)
throws OperationCancelledException {
Log_OC.v(TAG, "Starting content synchronization... ");
RemoteOperationResult contentsResult = null;
RemoteOperationResult contentsResult;
for (SyncOperation op: filesToSyncContents) {
if (mCancellationRequested.get()) {
throw new OperationCancelledException();

View file

@ -709,55 +709,6 @@ public class OperationsService extends Service {
}
/**
* Sends a broadcast when a new operation is added to the queue.
*
* Local broadcasts are only delivered to activities in the same process, but can't be
* done sticky :\
*
* @param target Account or URL pointing to an OC server.
* @param operation Added operation.
*/
private void sendBroadcastNewOperation(Target target, RemoteOperation operation) {
Intent intent = new Intent(ACTION_OPERATION_ADDED);
if (target.mAccount != null) {
intent.putExtra(EXTRA_ACCOUNT, target.mAccount);
} else {
intent.putExtra(EXTRA_SERVER_URL, target.mServerUrl);
}
//LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
//lbm.sendBroadcast(intent);
sendStickyBroadcast(intent);
}
// TODO - maybe add a notification for real start of operations
/**
* Sends a LOCAL broadcast when an operations finishes in order to the interested activities c
* an update their view
*
* Local broadcasts are only delivered to activities in the same process.
*
* @param target Account or URL pointing to an OC server.
* @param operation Finished operation.
* @param result Result of the operation.
*/
private void sendBroadcastOperationFinished(Target target, RemoteOperation operation,
RemoteOperationResult result) {
Intent intent = new Intent(ACTION_OPERATION_FINISHED);
intent.putExtra(EXTRA_RESULT, result);
if (target.mAccount != null) {
intent.putExtra(EXTRA_ACCOUNT, target.mAccount);
} else {
intent.putExtra(EXTRA_SERVER_URL, target.mServerUrl);
}
//LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
//lbm.sendBroadcast(intent);
sendStickyBroadcast(intent);
}
/**
* Notifies the currently subscribed listeners about the end of an operation.
*
@ -784,9 +735,8 @@ public class OperationsService extends Service {
}
}
if (count == 0) {
Pair<RemoteOperation, RemoteOperationResult> undispatched =
new Pair<RemoteOperation, RemoteOperationResult>(operation, result);
mUndispatchedFinishedOperations.put(((Runnable) operation).hashCode(), undispatched);
Pair<RemoteOperation, RemoteOperationResult> undispatched = new Pair<>(operation, result);
mUndispatchedFinishedOperations.put(operation.hashCode(), undispatched);
}
Log_OC.d(TAG, "Called " + count + " listeners");
}

View file

@ -1,61 +0,0 @@
/**
* ownCloud Android client application
*
* @author Bartek Przybylski
* Copyright (C) 2011 Bartek Przybylski
* Copyright (C) 2015 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;
import android.graphics.drawable.Drawable;
import android.view.View.OnClickListener;
/**
* Represents an Item on the ActionBar.
*/
public class ActionItem {
private Drawable mIcon;
private String mTitle;
private OnClickListener mClickListener;
public ActionItem() {
}
public void setTitle(String title) {
mTitle = title;
}
public String getTitle() {
return mTitle;
}
public void setIcon(Drawable icon) {
mIcon = icon;
}
public Drawable getIcon() {
return mIcon;
}
public void setOnClickListener(OnClickListener listener) {
mClickListener = listener;
}
public OnClickListener getOnClickListerner() {
return mClickListener;
}
}

View file

@ -1,307 +0,0 @@
/**
* ownCloud Android client application
*
* @author Lorensius. W. T
* Copyright (C) 2011 Bartek Przybylski
* Copyright (C) 2015 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;
import android.content.Context;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewGroup;
import java.util.ArrayList;
import com.owncloud.android.R;
/**
* Popup window, shows action list as icon and text like the one in Gallery3D
* app.
*/
public class QuickAction extends CustomPopup {
private final View root;
private final ImageView mArrowUp;
private final ImageView mArrowDown;
private final LayoutInflater inflater;
private final Context context;
protected static final int ANIM_GROW_FROM_LEFT = 1;
protected static final int ANIM_GROW_FROM_RIGHT = 2;
protected static final int ANIM_GROW_FROM_CENTER = 3;
protected static final int ANIM_REFLECT = 4;
protected static final int ANIM_AUTO = 5;
private int animStyle;
private ViewGroup mTrack;
private ScrollView scroller;
private ArrayList<ActionItem> actionList;
/**
* Constructor
*
* @param anchor {@link View} on where the popup window should be displayed
*/
public QuickAction(View anchor) {
super(anchor);
actionList = new ArrayList<ActionItem>();
context = anchor.getContext();
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
root = (ViewGroup) inflater.inflate(R.layout.popup, null);
mArrowDown = (ImageView) root.findViewById(R.id.arrow_down);
mArrowUp = (ImageView) root.findViewById(R.id.arrow_up);
setContentView(root);
mTrack = (ViewGroup) root.findViewById(R.id.tracks);
scroller = (ScrollView) root.findViewById(R.id.scroller);
animStyle = ANIM_AUTO;
}
/**
* Set animation style
*
* @param animStyle animation style, default is set to ANIM_AUTO
*/
public void setAnimStyle(int animStyle) {
this.animStyle = animStyle;
}
/**
* Add action item
*
* @param action {@link ActionItem} object
*/
public void addActionItem(ActionItem action) {
actionList.add(action);
}
/**
* Show popup window. Popup is automatically positioned, on top or bottom of
* anchor view.
*
*/
public void show() {
preShow();
int xPos, yPos;
int[] location = new int[2];
mAnchor.getLocationOnScreen(location);
Rect anchorRect = new Rect(location[0], location[1], location[0]
+ mAnchor.getWidth(), location[1] + mAnchor.getHeight());
createActionList();
root.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
root.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
int rootHeight = root.getMeasuredHeight();
int rootWidth = root.getMeasuredWidth();
int screenWidth = mWManager.getDefaultDisplay().getWidth();
int screenHeight = mWManager.getDefaultDisplay().getHeight();
// automatically get X coord of popup (top left)
if ((anchorRect.left + rootWidth) > screenWidth) {
xPos = anchorRect.left - (rootWidth - mAnchor.getWidth());
} else {
if (mAnchor.getWidth() > rootWidth) {
xPos = anchorRect.centerX() - (rootWidth / 2);
} else {
xPos = anchorRect.left;
}
}
int dyTop = anchorRect.top;
int dyBottom = screenHeight - anchorRect.bottom;
boolean onTop = (dyTop > dyBottom) ? true : false;
if (onTop) {
if (rootHeight > dyTop) {
yPos = 15;
LayoutParams l = scroller.getLayoutParams();
l.height = dyTop - mAnchor.getHeight();
} else {
yPos = anchorRect.top - rootHeight;
}
} else {
yPos = anchorRect.bottom;
if (rootHeight > dyBottom) {
LayoutParams l = scroller.getLayoutParams();
l.height = dyBottom;
}
}
showArrow(((onTop) ? R.id.arrow_down : R.id.arrow_up),
anchorRect.centerX() - xPos);
setAnimationStyle(screenWidth, anchorRect.centerX(), onTop);
mWindow.showAtLocation(mAnchor, Gravity.NO_GRAVITY, xPos, yPos);
}
/**
* Set animation style
*
* @param screenWidth screen width
* @param requestedX distance from left edge
* @param onTop flag to indicate where the popup should be displayed. Set
* TRUE if displayed on top of anchor view and vice versa
*/
private void setAnimationStyle(int screenWidth, int requestedX,
boolean onTop) {
int arrowPos = requestedX - mArrowUp.getMeasuredWidth() / 2;
switch (animStyle) {
case ANIM_GROW_FROM_LEFT:
mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Left
: R.style.Animations_PopDownMenu_Left);
break;
case ANIM_GROW_FROM_RIGHT:
mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Right
: R.style.Animations_PopDownMenu_Right);
break;
case ANIM_GROW_FROM_CENTER:
mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Center
: R.style.Animations_PopDownMenu_Center);
break;
case ANIM_REFLECT:
mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Reflect
: R.style.Animations_PopDownMenu_Reflect);
break;
case ANIM_AUTO:
if (arrowPos <= screenWidth / 4) {
mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Left
: R.style.Animations_PopDownMenu_Left);
} else if (arrowPos > screenWidth / 4
&& arrowPos < 3 * (screenWidth / 4)) {
mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Center
: R.style.Animations_PopDownMenu_Center);
} else {
mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Right
: R.style.Animations_PopDownMenu_Right);
}
break;
}
}
/**
* Create action list
*/
private void createActionList() {
View view;
String title;
Drawable icon;
OnClickListener listener;
for (int i = 0; i < actionList.size(); i++) {
title = actionList.get(i).getTitle();
icon = actionList.get(i).getIcon();
listener = actionList.get(i).getOnClickListerner();
view = getActionItem(title, icon, listener);
view.setFocusable(true);
view.setClickable(true);
mTrack.addView(view);
}
}
/**
* Get action item {@link View}
*
* @param title action item title
* @param icon {@link Drawable} action item icon
* @param listener {@link View.OnClickListener} action item listener
* @return action item {@link View}
*/
private View getActionItem(String title, Drawable icon,
OnClickListener listener) {
LinearLayout container = (LinearLayout) inflater.inflate(
R.layout.action_item, null);
ImageView img = (ImageView) container.findViewById(R.id.icon);
TextView text = (TextView) container.findViewById(R.id.title);
if (icon != null) {
img.setImageDrawable(icon);
}
if (title != null) {
text.setText(title);
}
if (listener != null) {
container.setOnClickListener(listener);
}
return container;
}
/**
* Show arrow
*
* @param whichArrow arrow type resource id
* @param requestedX distance from left screen
*/
private void showArrow(int whichArrow, int requestedX) {
final View showArrow = (whichArrow == R.id.arrow_up) ? mArrowUp
: mArrowDown;
final View hideArrow = (whichArrow == R.id.arrow_up) ? mArrowDown
: mArrowUp;
final int arrowWidth = mArrowUp.getMeasuredWidth();
showArrow.setVisibility(View.VISIBLE);
ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) showArrow
.getLayoutParams();
param.leftMargin = requestedX - arrowWidth / 2;
hideArrow.setVisibility(View.INVISIBLE);
}
}

View file

@ -63,7 +63,6 @@ import static com.owncloud.android.datamodel.SyncedFolderDisplayItem.UNPERSISTED
*/
public class FolderSyncActivity extends FileActivity implements FolderSyncAdapter.ClickListener,
SyncedFolderPreferencesDialogFragment.OnSyncedFolderPreferenceListener {
private static final String TAG = FolderSyncActivity.class.getSimpleName();
private static final String SYNCED_FOLDER_PREFERENCES_DIALOG_TAG = "SYNCED_FOLDER_PREFERENCES_DIALOG";
public static final String PRIORITIZED_FOLDER = "Camera";

View file

@ -21,6 +21,4 @@ package com.owncloud.android.ui.activity;
public abstract class HookActivity extends FileActivity {
private static final String TAG = HookActivity.class.getName();
}

View file

@ -148,7 +148,7 @@ public class LogHistoryActivity extends ToolbarActivity {
emailAddress = "";
}
ArrayList<Uri> uris = new ArrayList<Uri>();
ArrayList<Uri> uris = new ArrayList<>();
// Convert from paths to Android friendly Parcelable Uri's
for (String file : Log_OC.getLogFileNames()) {
@ -193,7 +193,7 @@ public class LogHistoryActivity extends ToolbarActivity {
public LoadingLogTask(TextView logTV){
// Use of a WeakReference to ensure the TextView can be garbage collected
textViewReference = new WeakReference<TextView>(logTV);
textViewReference = new WeakReference<>(logTV);
}
protected String doInBackground(String... args) {

View file

@ -60,7 +60,6 @@ import com.owncloud.android.ui.helpers.FileOperationsHelper;
import com.owncloud.android.utils.DisplayUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
/**

View file

@ -28,7 +28,6 @@ import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.owncloud.android.R;
@ -37,7 +36,6 @@ import com.owncloud.android.R;
* Activity providing information about ways to participate in the app's development.
*/
public class ParticipateActivity extends FileActivity {
private Button mReportBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -91,8 +89,7 @@ public class ParticipateActivity extends FileActivity {
contributeGithubView.setMovementMethod(LinkMovementMethod.getInstance());
contributeGithubView.setText(Html.fromHtml(getString(R.string.participate_contribute_github_text)));
mReportBtn = (Button) findViewById(R.id.participate_testing_report);
mReportBtn.setOnClickListener(new View.OnClickListener() {
findViewById(R.id.participate_testing_report).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.report_issue_link))));

View file

@ -28,7 +28,6 @@ import android.support.annotation.ColorInt;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ProgressBar;
import com.owncloud.android.R;
@ -92,11 +91,6 @@ public abstract class ToolbarActivity extends BaseActivity {
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle(titleToSet);
// also as content description
View actionBarTitleView = getWindow().getDecorView().findViewById(
getResources().getIdentifier("action_bar_title", "id", "android")
);
// set home button properties
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowTitleEnabled(true);

View file

@ -45,8 +45,6 @@ import java.util.List;
*/
public class FolderSyncAdapter extends SectionedRecyclerViewAdapter<FolderSyncAdapter.MainViewHolder> {
private static final String TAG = FolderSyncAdapter.class.getSimpleName();
private final Context mContext;
private final int mGridWidth;
private final int mGridTotal;

View file

@ -1,76 +0,0 @@
/**
* ownCloud Android client application
*
* Copyright (C) 2015 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.adapter;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.owncloud.android.R;
import java.io.File;
public class LogListAdapter extends ArrayAdapter<String> {
private Context context = null;
private String[] values;
private Uri fileUri = null;
public LogListAdapter(Context context, String[] values) {
super(context, R.layout.log_item, values);
this.context = context;
this.values = values;
}
@Override
public View getView(final int position, View convertView,@NonNull ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.log_item, parent, false);
TextView listText = (TextView) rowView.findViewById(R.id.log_item_single);
listText.setText(values[position]);
listText.setTextSize(15);
fileUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory() + File.separator + "owncloud" + File
.separator+"log"+File.separator+values[position]));
listText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/rtf");
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Nextcloud Logfile");
emailIntent.putExtra(Intent.EXTRA_TEXT, "This is a automatic E-mail send by nextcloud/android");
emailIntent.putExtra(Intent.EXTRA_STREAM, fileUri);
emailIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(Intent.createChooser(emailIntent, "Send mail..."));
}
});
return rowView;
}
}

View file

@ -81,12 +81,6 @@ public class SamlWebViewDialog extends DialogFragment {
return fragment;
}
public SamlWebViewDialog() {
super();
}
@Override
public void onAttach(Activity activity) {
Log_OC.v(TAG, "onAttach");

View file

@ -86,13 +86,6 @@ public class EditShareFragment extends Fragment {
return fragment;
}
/**
* Required empty public constructor
*/
public EditShareFragment() {
}
/**
* {@inheritDoc}
*/

View file

@ -89,10 +89,6 @@ public class SearchShareesFragment extends Fragment implements ShareUserListAdap
return fragment;
}
public SearchShareesFragment() {
// Required empty public constructor
}
/**
* {@inheritDoc}
*/

View file

@ -76,8 +76,7 @@ import java.util.Date;
* Use the {@link ShareFileFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class ShareFileFragment extends Fragment
implements ShareUserListAdapter.ShareUserAdapterListener {
public class ShareFileFragment extends Fragment implements ShareUserListAdapter.ShareUserAdapterListener {
private static final String TAG = ShareFileFragment.class.getSimpleName();
@ -166,12 +165,6 @@ public class ShareFileFragment extends Fragment
return fragment;
}
/**
* Required empty public constructor.
*/
public ShareFileFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

View file

@ -49,15 +49,10 @@ import java.net.SocketTimeoutException;
/**
* Class to choose proper error messages to show to the user depending on the results of operations,
* always following the same policy
* always following the same policy.
*/
public class ErrorMessageAdapter {
public ErrorMessageAdapter() {
}
public static String getErrorCauseMessage(RemoteOperationResult result,
RemoteOperation operation, Resources res) {