diff --git a/SETUP.md b/SETUP.md index 2b620cbd6777..5de4d029725e 100644 --- a/SETUP.md +++ b/SETUP.md @@ -85,3 +85,23 @@ The app is currently equipped to be built with three flavours: [6]: https://developer.android.com/sdk/installing/index.html?pkg=studio [7]: https://gradle.org/ [8]: https://docs.gradle.org/current/userguide/gradle_wrapper.html + +### 5. How-To + +#### 1. Direct usage of library project + +This is handy if one wants to make changes both to files app and library: +- in files app root: ln -s $pathToLibraryProject nextcloud-android-library +- uncomment in build.gradle: + - `// implementation project('nextcloud-android-library')` +- comment in build.gradle: + - `genericImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT'` + - `gplayImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT'` + - `versionDevImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT'` +- comment in settings.gradle: + - `include ':'` +- uncomment in settings.gradle: + - `//include 'nextcloud-android-library'` +- sync project with gradle files + +Now every change in library can be directly used in files app. diff --git a/scripts/analysis/findbugs-results.txt b/scripts/analysis/findbugs-results.txt index 5a40cf687a21..1fde7522a771 100644 --- a/scripts/analysis/findbugs-results.txt +++ b/scripts/analysis/findbugs-results.txt @@ -1 +1 @@ -435 \ No newline at end of file +434 \ No newline at end of file diff --git a/src/androidTest/java/com/owncloud/android/UploadIT.java b/src/androidTest/java/com/owncloud/android/UploadIT.java index 3513dbd9036d..b4866b2ab2c7 100644 --- a/src/androidTest/java/com/owncloud/android/UploadIT.java +++ b/src/androidTest/java/com/owncloud/android/UploadIT.java @@ -34,7 +34,7 @@ public class UploadIT extends AbstractIT { public void setUp() { final ContentResolver contentResolver = targetContext.getContentResolver(); final CurrentAccountProvider currentAccountProvider = () -> AccountUtils.getCurrentOwnCloudAccount(targetContext); - storageManager = new UploadsStorageManager(currentAccountProvider, contentResolver, targetContext); + storageManager = new UploadsStorageManager(currentAccountProvider, contentResolver); } @Test diff --git a/src/androidTest/java/com/owncloud/android/datamodel/UploadStorageManagerTest.java b/src/androidTest/java/com/owncloud/android/datamodel/UploadStorageManagerTest.java index 100a650b941c..235a6c08932b 100644 --- a/src/androidTest/java/com/owncloud/android/datamodel/UploadStorageManagerTest.java +++ b/src/androidTest/java/com/owncloud/android/datamodel/UploadStorageManagerTest.java @@ -15,7 +15,6 @@ import java.io.File; -import androidx.annotation.Nullable; import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; @@ -36,7 +35,7 @@ public class UploadStorageManagerTest { public void setUp() { Context instrumentationCtx = InstrumentationRegistry.getTargetContext(); ContentResolver contentResolver = instrumentationCtx.getContentResolver(); - uploadsStorageManager = new UploadsStorageManager(currentAccountProvider, contentResolver, instrumentationCtx); + uploadsStorageManager = new UploadsStorageManager(currentAccountProvider, contentResolver); Accounts = new Account[]{new Account("A", "A"), new Account("B", "B")}; } diff --git a/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java b/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java index d4cc84d65afc..c74148a5a6a8 100644 --- a/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java +++ b/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java @@ -44,7 +44,6 @@ public class UserAccountManagerImpl implements UserAccountManager { private static final String TAG = AccountUtils.class.getSimpleName(); - private static final String PREF_SELECT_OC_ACCOUNT = "select_oc_account"; private Context context; private AccountManager accountManager; diff --git a/src/main/java/com/nextcloud/client/di/AppModule.java b/src/main/java/com/nextcloud/client/di/AppModule.java index e1cd2abf6c31..7e72a1be0300 100644 --- a/src/main/java/com/nextcloud/client/di/AppModule.java +++ b/src/main/java/com/nextcloud/client/di/AppModule.java @@ -90,8 +90,10 @@ FilesRepository filesRepository(UserAccountManager accountManager) { return new RemoteFilesRepository(new FilesServiceApiImpl(accountManager)); } - @Provides UploadsStorageManager uploadsStorageManager(Context context, CurrentAccountProvider currentAccountProvider) { - return new UploadsStorageManager(currentAccountProvider, context.getContentResolver(), context); + @Provides + UploadsStorageManager uploadsStorageManager(Context context, + CurrentAccountProvider currentAccountProvider) { + return new UploadsStorageManager(currentAccountProvider, context.getContentResolver()); } @Provides CurrentAccountProvider currentAccountProvider(UserAccountManager accountManager) { diff --git a/src/main/java/com/owncloud/android/MainApp.java b/src/main/java/com/owncloud/android/MainApp.java index c54db07e165d..a470a768adf5 100644 --- a/src/main/java/com/owncloud/android/MainApp.java +++ b/src/main/java/com/owncloud/android/MainApp.java @@ -120,13 +120,6 @@ public class MainApp extends MultiDexApplication implements private static final String TAG = MainApp.class.getSimpleName(); - private static final String AUTH_ON = "on"; - - @SuppressWarnings("unused") - private static final String POLICY_SINGLE_SESSION_PER_ACCOUNT = "single session per account"; - @SuppressWarnings("unused") - private static final String POLICY_ALWAYS_NEW_CLIENT = "always new client"; - private static Context mContext; private static String storagePath; diff --git a/src/main/java/com/owncloud/android/authentication/AccountUtils.java b/src/main/java/com/owncloud/android/authentication/AccountUtils.java index 893157f51ba8..d01a81595ba6 100644 --- a/src/main/java/com/owncloud/android/authentication/AccountUtils.java +++ b/src/main/java/com/owncloud/android/authentication/AccountUtils.java @@ -23,22 +23,14 @@ import android.accounts.AccountManager; import android.content.Context; import android.content.SharedPreferences; -import android.net.Uri; import android.preference.PreferenceManager; import android.text.TextUtils; import com.owncloud.android.MainApp; import com.owncloud.android.datamodel.ArbitraryDataProvider; import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.lib.common.OwnCloudAccount; -import com.owncloud.android.lib.common.OwnCloudClient; -import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; -import com.owncloud.android.lib.common.UserInfo; import com.owncloud.android.lib.common.accounts.AccountUtils.Constants; -import com.owncloud.android.lib.common.operations.RemoteOperationResult; -import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.status.OwnCloudVersion; -import com.owncloud.android.lib.resources.users.GetRemoteUserInfoOperation; import com.owncloud.android.ui.activity.ManageAccountsActivity; import androidx.annotation.NonNull; @@ -48,7 +40,6 @@ * Helper class for dealing with accounts. */ public final class AccountUtils { - private static final String TAG = AccountUtils.class.getSimpleName(); private static final String PREF_SELECT_OC_ACCOUNT = "select_oc_account"; public static final int ACCOUNT_VERSION = 1; diff --git a/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java b/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java index d59181c29b54..658040abe4d9 100644 --- a/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -1859,19 +1859,6 @@ public boolean onTouch(View view, MotionEvent event) { public abstract boolean onDrawableTouch(final MotionEvent event); } - - private void getRemoteUserNameOperation(String sessionCookie) { - - Intent getUserNameIntent = new Intent(); - getUserNameIntent.setAction(OperationsService.ACTION_GET_USER_NAME); - getUserNameIntent.putExtra(OperationsService.EXTRA_SERVER_URL, mServerInfo.mBaseUrl); - getUserNameIntent.putExtra(OperationsService.EXTRA_COOKIE, sessionCookie); - - if (mOperationsServiceBinder != null) { - mWaitingForOpId = mOperationsServiceBinder.queueNewOperation(getUserNameIntent); - } - } - /** * Show untrusted cert dialog */ diff --git a/src/main/java/com/owncloud/android/authentication/AuthenticatorAsyncTask.java b/src/main/java/com/owncloud/android/authentication/AuthenticatorAsyncTask.java index a18595bccc80..3a0c883b476d 100644 --- a/src/main/java/com/owncloud/android/authentication/AuthenticatorAsyncTask.java +++ b/src/main/java/com/owncloud/android/authentication/AuthenticatorAsyncTask.java @@ -34,13 +34,14 @@ import java.lang.ref.WeakReference; +import static com.owncloud.android.datamodel.OCFile.ROOT_PATH; + /** * Async Task to verify the credentials of a user */ public class AuthenticatorAsyncTask extends AsyncTask { - private static final String REMOTE_PATH = "/"; private static final boolean SUCCESS_IF_ABSENT = false; private WeakReference mWeakContext; @@ -66,7 +67,7 @@ protected RemoteOperationResult doInBackground(Object... params) { client.setCredentials(credentials); // Operation - try credentials - ExistenceCheckRemoteOperation operation = new ExistenceCheckRemoteOperation(REMOTE_PATH, SUCCESS_IF_ABSENT); + ExistenceCheckRemoteOperation operation = new ExistenceCheckRemoteOperation(ROOT_PATH, SUCCESS_IF_ABSENT); result = operation.execute(client); if (operation.wasRedirected()) { diff --git a/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java b/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java index 09366886607b..1e0f62562725 100644 --- a/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -67,6 +67,8 @@ import lombok.Getter; import lombok.Setter; +import static com.owncloud.android.datamodel.OCFile.ROOT_PATH; + @Getter public class FileDataStorageManager { private static final String TAG = FileDataStorageManager.class.getSimpleName(); @@ -264,7 +266,7 @@ public boolean saveFile(OCFile file) { * @return the parent file */ public OCFile saveFileWithParent(OCFile file, Context context) { - if (file.getParentId() == 0 && !"/".equals(file.getRemotePath())) { + if (file.getParentId() == 0 && !ROOT_PATH.equals(file.getRemotePath())) { String remotePath = file.getRemotePath(); String parentPath = remotePath.substring(0, remotePath.lastIndexOf(file.getFileName())); diff --git a/src/main/java/com/owncloud/android/datamodel/OCFile.java b/src/main/java/com/owncloud/android/datamodel/OCFile.java index dbb5d7972e85..843a767a4a24 100644 --- a/src/main/java/com/owncloud/android/datamodel/OCFile.java +++ b/src/main/java/com/owncloud/android/datamodel/OCFile.java @@ -199,17 +199,17 @@ public String getRemotePath() { if (isEncrypted() && !isFolder()) { String parentPath = new File(remotePath).getParent(); - if (parentPath.endsWith("/")) { + if (parentPath.endsWith(PATH_SEPARATOR)) { return parentPath + getEncryptedFileName(); } else { - return parentPath + "/" + getEncryptedFileName(); + return parentPath + PATH_SEPARATOR + getEncryptedFileName(); } } else { if (isFolder()) { - if (remotePath.endsWith("/")) { + if (remotePath.endsWith(PATH_SEPARATOR)) { return remotePath; } else { - return remotePath + "/"; + return remotePath + PATH_SEPARATOR; } } else { return remotePath; @@ -412,7 +412,7 @@ private void resetData() { */ public String getParentRemotePath() { String parentPath = new File(this.getRemotePath()).getParent(); - return parentPath.endsWith("/") ? parentPath : parentPath + "/"; + return parentPath.endsWith(PATH_SEPARATOR) ? parentPath : parentPath + PATH_SEPARATOR; } @Override diff --git a/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.java b/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.java index e50210410381..eebb20093520 100644 --- a/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.java +++ b/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.java @@ -39,6 +39,8 @@ import androidx.annotation.NonNull; +import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; + /** * Database provider for handling the persistence aspects of {@link SyncedFolder}s. */ @@ -251,7 +253,7 @@ public void updateAutoUploadPaths(Context context) { for (SyncedFolder syncedFolder : syncedFolders) { if (!new File(syncedFolder.getLocalPath()).exists()) { String localPath = syncedFolder.getLocalPath(); - if (localPath.endsWith("/")) { + if (localPath.endsWith(PATH_SEPARATOR)) { localPath = localPath.substring(0, localPath.lastIndexOf('/')); } localPath = localPath.substring(0, localPath.lastIndexOf('/')); diff --git a/src/main/java/com/owncloud/android/datamodel/UploadsStorageManager.java b/src/main/java/com/owncloud/android/datamodel/UploadsStorageManager.java index e0ac1a26d29b..d31313f378ff 100644 --- a/src/main/java/com/owncloud/android/datamodel/UploadsStorageManager.java +++ b/src/main/java/com/owncloud/android/datamodel/UploadsStorageManager.java @@ -26,7 +26,6 @@ import android.accounts.Account; import android.content.ContentResolver; import android.content.ContentValues; -import android.content.Context; import android.database.Cursor; import android.net.Uri; @@ -55,19 +54,16 @@ public class UploadsStorageManager extends Observable { private static final int SINGLE_RESULT = 1; private ContentResolver mContentResolver; - private Context mContext; private CurrentAccountProvider currentAccountProvider; public UploadsStorageManager( CurrentAccountProvider currentAccountProvider, - ContentResolver contentResolver, - Context context + ContentResolver contentResolver ) { if (contentResolver == null) { throw new IllegalArgumentException("Cannot create an instance with a NULL contentResolver"); } mContentResolver = contentResolver; - mContext = context; this.currentAccountProvider = currentAccountProvider; } diff --git a/src/main/java/com/owncloud/android/jobs/FilesSyncJob.java b/src/main/java/com/owncloud/android/jobs/FilesSyncJob.java index 52f620d7c548..154b6580cd35 100644 --- a/src/main/java/com/owncloud/android/jobs/FilesSyncJob.java +++ b/src/main/java/com/owncloud/android/jobs/FilesSyncJob.java @@ -64,6 +64,8 @@ import androidx.annotation.NonNull; import androidx.exifinterface.media.ExifInterface; +import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; + /* Job that: - restarts existing jobs if required @@ -190,7 +192,7 @@ private void syncFolder(Context context, Resources resources, boolean lightVersi if (!subfolderByDate) { String adaptedPath = file.getAbsolutePath() .replace(syncedFolder.getLocalPath(), "") - .replace("/" + file.getName(), ""); + .replace(PATH_SEPARATOR + file.getName(), ""); remotePath += adaptedPath; } diff --git a/src/main/java/com/owncloud/android/jobs/OfflineSyncJob.java b/src/main/java/com/owncloud/android/jobs/OfflineSyncJob.java index fe433bde0979..c1a29b710841 100644 --- a/src/main/java/com/owncloud/android/jobs/OfflineSyncJob.java +++ b/src/main/java/com/owncloud/android/jobs/OfflineSyncJob.java @@ -32,7 +32,6 @@ import com.evernote.android.job.util.Device; import com.nextcloud.client.account.UserAccountManager; import com.owncloud.android.MainApp; -import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.operations.RemoteOperationResult; @@ -48,6 +47,9 @@ import androidx.annotation.NonNull; +import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; +import static com.owncloud.android.datamodel.OCFile.ROOT_PATH; + public class OfflineSyncJob extends Job { public static final String TAG = "OfflineSyncJob"; @@ -90,7 +92,7 @@ protected Result onRunJob(@NonNull Params params) { FileDataStorageManager storageManager = new FileDataStorageManager(account, getContext().getContentResolver()); - OCFile ocRoot = storageManager.getFileByPath("/"); + OCFile ocRoot = storageManager.getFileByPath(ROOT_PATH); if (ocRoot.getStoragePath() == null) { break; @@ -109,7 +111,7 @@ protected Result onRunJob(@NonNull Params params) { private void recursive(File folder, FileDataStorageManager storageManager, Account account) { String downloadFolder = FileStorageUtils.getSavePath(account.name); - String folderName = folder.getAbsolutePath().replaceFirst(downloadFolder, "") + "/"; + String folderName = folder.getAbsolutePath().replaceFirst(downloadFolder, "") + PATH_SEPARATOR; Log_OC.d(TAG, folderName + ": enter"); // exit diff --git a/src/main/java/com/owncloud/android/operations/CreateFolderOperation.java b/src/main/java/com/owncloud/android/operations/CreateFolderOperation.java index 792936f653a7..45c8b024b93d 100644 --- a/src/main/java/com/owncloud/android/operations/CreateFolderOperation.java +++ b/src/main/java/com/owncloud/android/operations/CreateFolderOperation.java @@ -34,6 +34,9 @@ import com.owncloud.android.utils.FileStorageUtils; import com.owncloud.android.utils.MimeType; +import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; +import static com.owncloud.android.datamodel.OCFile.ROOT_PATH; + /** * Access to remote operation performing the creation of a new folder in the ownCloud server. @@ -99,13 +102,13 @@ private void saveFolderInDB() { getFileByPath(FileStorageUtils.getParentPath(mRemotePath)) == null){// When parent // of remote path // is not created - String[] subFolders = mRemotePath.split("/"); - String composedRemotePath = "/"; + String[] subFolders = mRemotePath.split(PATH_SEPARATOR); + String composedRemotePath = ROOT_PATH; // For each ancestor folders create them recursively for (String subFolder : subFolders) { if (!subFolder.isEmpty()) { - composedRemotePath = composedRemotePath + subFolder + "/"; + composedRemotePath = composedRemotePath + subFolder + PATH_SEPARATOR; mRemotePath = composedRemotePath; saveFolderInDB(); } diff --git a/src/main/java/com/owncloud/android/providers/DiskLruImageCacheFileProvider.java b/src/main/java/com/owncloud/android/providers/DiskLruImageCacheFileProvider.java index 05456da254f7..0c17aeb4df87 100644 --- a/src/main/java/com/owncloud/android/providers/DiskLruImageCacheFileProvider.java +++ b/src/main/java/com/owncloud/android/providers/DiskLruImageCacheFileProvider.java @@ -33,7 +33,6 @@ import com.nextcloud.client.account.UserAccountManager; import com.owncloud.android.MainApp; -import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.datamodel.ThumbnailsCacheManager; diff --git a/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java b/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java index 790f89cb9978..c9b2e03b924f 100644 --- a/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java +++ b/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java @@ -50,7 +50,6 @@ import com.nextcloud.client.preferences.AppPreferencesImpl; import com.owncloud.android.MainApp; import com.owncloud.android.R; -import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.datamodel.ThumbnailsCacheManager; @@ -89,6 +88,9 @@ import dagger.android.AndroidInjection; +import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; +import static com.owncloud.android.datamodel.OCFile.ROOT_PATH; + @TargetApi(Build.VERSION_CODES.KITKAT) public class DocumentsStorageProvider extends DocumentsProvider { @@ -396,7 +398,7 @@ public String copyDocument(String sourceDocumentId, String targetParentDocumentI String newPath = targetFolder.getRemotePath() + file.getFileName(); if (file.isFolder()) { - newPath = newPath + "/"; + newPath = newPath + PATH_SEPARATOR; } OCFile newFile = currentStorageManager.getFileByPath(newPath); @@ -438,7 +440,7 @@ public String moveDocument(String sourceDocumentId, String sourceParentDocumentI public Cursor querySearchDocuments(String rootId, String query, String[] projection) { updateCurrentStorageManagerIfNeeded(rootId); - OCFile root = currentStorageManager.getFileByPath("/"); + OCFile root = currentStorageManager.getFileByPath(ROOT_PATH); FileCursor result = new FileCursor(projection); for (OCFile f : findFiles(root, query)) { @@ -469,7 +471,7 @@ public String createDocument(String documentId, String mimeType, String displayN private String createFolder(OCFile parent, String displayName, String documentId) throws FileNotFoundException { CreateFolderOperation createFolderOperation = new CreateFolderOperation(parent.getRemotePath() + displayName - + "/", true); + + PATH_SEPARATOR, true); RemoteOperationResult result = createFolderOperation.execute(client, currentStorageManager); @@ -479,7 +481,7 @@ private String createFolder(OCFile parent, String displayName, String documentId } - String newDirPath = parent.getRemotePath() + displayName + "/"; + String newDirPath = parent.getRemotePath() + displayName + PATH_SEPARATOR; OCFile newFolder = currentStorageManager.getFileByPath(newDirPath); return String.valueOf(newFolder.getFileId()); @@ -601,7 +603,7 @@ private void initiateStorageMap() throws FileNotFoundException { for (Account account : accountManager.getAccounts()) { final FileDataStorageManager storageManager = new FileDataStorageManager(account, contentResolver); - final OCFile rootDir = storageManager.getFileByPath("/"); + final OCFile rootDir = storageManager.getFileByPath(ROOT_PATH); rootIdToStorageManager.put(rootDir.getFileId(), storageManager); } } diff --git a/src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java b/src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java index e6570cc2703c..bdd535f4a17d 100644 --- a/src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java +++ b/src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java @@ -36,7 +36,6 @@ import com.nextcloud.client.account.UserAccountManager; import com.owncloud.android.R; -import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.utils.Log_OC; diff --git a/src/main/java/com/owncloud/android/ui/TextDrawable.java b/src/main/java/com/owncloud/android/ui/TextDrawable.java index 792ef0ed6d1a..7d9c4ba2bb4b 100644 --- a/src/main/java/com/owncloud/android/ui/TextDrawable.java +++ b/src/main/java/com/owncloud/android/ui/TextDrawable.java @@ -32,7 +32,6 @@ import android.graphics.drawable.Drawable; import com.nextcloud.client.account.UserAccountManager; -import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.utils.BitmapUtils; import com.owncloud.android.utils.NextcloudServer; diff --git a/src/main/java/com/owncloud/android/ui/activity/FileActivity.java b/src/main/java/com/owncloud/android/ui/activity/FileActivity.java index 0f48f84edc3e..228706a9c9fe 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FileActivity.java @@ -42,7 +42,6 @@ import com.nextcloud.client.account.UserAccountManager; import com.owncloud.android.MainApp; import com.owncloud.android.R; -import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.authentication.AuthenticatorActivity; import com.owncloud.android.datamodel.ArbitraryDataProvider; import com.owncloud.android.datamodel.OCFile; diff --git a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java index cde483679ead..6ad33c85cce5 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -148,6 +148,8 @@ import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; +import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; + /** * Displays, what files the user has available in his ownCloud. This is the main view. */ @@ -983,7 +985,7 @@ public void onCheckAvailableSpaceFinish(boolean hasEnoughSpaceAvailable, String. if (hasEnoughSpaceAvailable) { File file = new File(filesToUpload[0]); - File renamedFile = new File(file.getParent() + "/" + FileOperationsHelper.getCapturedImageName()); + File renamedFile = new File(file.getParent() + PATH_SEPARATOR + FileOperationsHelper.getCapturedImageName()); if (!file.renameTo(renamedFile)) { DisplayUtils.showSnackMessage(getActivity(), "Fail to upload taken image!"); diff --git a/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java b/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java index 9f28bb2059f3..683426418b61 100755 --- a/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java @@ -123,6 +123,9 @@ import javax.inject.Inject; +import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; +import static com.owncloud.android.datamodel.OCFile.ROOT_PATH; + /** * This can be used to upload things to an ownCloud instance. */ @@ -174,7 +177,7 @@ protected void onCreate(Bundle savedInstanceState) { String parentPath = savedInstanceState.getString(KEY_PARENTS); if (parentPath != null) { - mParents.addAll(Arrays.asList(parentPath.split("/"))); + mParents.addAll(Arrays.asList(parentPath.split(PATH_SEPARATOR))); } mFile = savedInstanceState.getParcelable(KEY_FILE); @@ -884,7 +887,7 @@ private String generatePath(Stack dirs) { String full_path = ""; for (String a : dirs) { - full_path += a + "/"; + full_path += a + PATH_SEPARATOR; } return full_path; } @@ -1034,10 +1037,10 @@ private void initTargetFolder() { if (mParents.empty()) { String lastPath = preferences.getLastUploadPath(); // "/" equals root-directory - if ("/".equals(lastPath)) { + if (ROOT_PATH.equals(lastPath)) { mParents.add(""); } else { - String[] dir_names = lastPath.split("/"); + String[] dir_names = lastPath.split(PATH_SEPARATOR); mParents.clear(); mParents.addAll(Arrays.asList(dir_names)); } diff --git a/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java b/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java index 001fe8297d3c..515ee618a51f 100644 --- a/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java @@ -51,12 +51,6 @@ import android.view.ViewGroup; import android.view.Window; import android.webkit.URLUtil; -import androidx.annotation.LayoutRes; -import androidx.annotation.NonNull; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatDelegate; -import androidx.core.content.res.ResourcesCompat; import com.nextcloud.client.account.UserAccountManager; import com.nextcloud.client.di.Injectable; @@ -65,7 +59,6 @@ import com.owncloud.android.BuildConfig; import com.owncloud.android.MainApp; import com.owncloud.android.R; -import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.authentication.PassCodeManager; import com.owncloud.android.datamodel.ArbitraryDataProvider; import com.owncloud.android.datamodel.ExternalLinksProvider; @@ -87,6 +80,13 @@ import javax.inject.Inject; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.core.content.res.ResourcesCompat; + /** * An Activity that allows the user to change the application's settings. * diff --git a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java b/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java index e24d317f77f4..d128be6cd381 100644 --- a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java @@ -53,11 +53,9 @@ import com.bumptech.glide.request.animation.GlideAnimation; import com.bumptech.glide.request.target.SimpleTarget; import com.google.gson.Gson; -import com.nextcloud.client.account.UserAccountManager; import com.nextcloud.client.di.Injectable; import com.nextcloud.client.preferences.AppPreferences; import com.owncloud.android.R; -import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.ArbitraryDataProvider; import com.owncloud.android.datamodel.PushConfigurationState; import com.owncloud.android.lib.common.UserInfo; diff --git a/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java index 61cdba4e03bd..9dafcbe7b329 100644 --- a/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java +++ b/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java @@ -33,7 +33,6 @@ import com.nextcloud.client.preferences.AppPreferences; import com.owncloud.android.R; -import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.ThumbnailsCacheManager; import com.owncloud.android.lib.common.utils.Log_OC; @@ -51,6 +50,9 @@ import butterknife.BindView; import butterknife.ButterKnife; +import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; +import static com.owncloud.android.datamodel.OCFile.ROOT_PATH; + /** * Adapter for the trashbin view */ @@ -134,9 +136,9 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi String location; int lastIndex = file.getOriginalLocation().lastIndexOf('/'); if (lastIndex != -1) { - location = "/" + file.getOriginalLocation().substring(0, lastIndex) + "/"; + location = ROOT_PATH + file.getOriginalLocation().substring(0, lastIndex) + PATH_SEPARATOR; } else { - location = "/"; + location = ROOT_PATH; } trashbinFileViewHolder.originalLocation.setText(location); diff --git a/src/main/java/com/owncloud/android/ui/components/CustomEditText.java b/src/main/java/com/owncloud/android/ui/components/CustomEditText.java index dc7463932de7..75540d836c75 100644 --- a/src/main/java/com/owncloud/android/ui/components/CustomEditText.java +++ b/src/main/java/com/owncloud/android/ui/components/CustomEditText.java @@ -30,6 +30,8 @@ import com.owncloud.android.R; import com.owncloud.android.authentication.AuthenticatorActivity; +import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; + /** * Custom edit text to support fixed suffix or prefix */ @@ -45,7 +47,7 @@ public CustomEditText(Context context, AttributeSet attrs) { if (AuthenticatorActivity.DIRECTORY_SERVER_INPUT_TYPE.equals(serverInputType)) { isPrefixFixed = true; - fixedText = getResources().getString(R.string.server_url) + "/"; + fixedText = getResources().getString(R.string.server_url) + PATH_SEPARATOR; } else if (AuthenticatorActivity.SUBDOMAIN_SERVER_INPUT_TYPE.equals(serverInputType)) { isPrefixFixed = false; fixedText = "." + getResources().getString(R.string.server_url); @@ -56,18 +58,6 @@ public CustomEditText(Context context, AttributeSet attrs) { } } - public String getFullServerUrl() { - if (TextUtils.isEmpty(fixedText) - || getText().toString().startsWith(AuthenticatorActivity.HTTP_PROTOCOL) - || getText().toString().startsWith(AuthenticatorActivity.HTTPS_PROTOCOL)) { - return getText().toString(); - } else if (isPrefixFixed) { - return getResources().getString(R.string.server_url) + "/" + getText().toString(); - } else { - return getText().toString() + "." + getResources().getString(R.string.server_url); - } - } - @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (!TextUtils.isEmpty(fixedText)) { diff --git a/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index 327381af44a2..130d613b1461 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -129,6 +129,8 @@ import androidx.recyclerview.widget.RecyclerView; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import static com.owncloud.android.datamodel.OCFile.ROOT_PATH; + /** * A Fragment that lists all files and folders in a given path. * TODO refactor to get rid of direct dependency on FileDisplayActivity @@ -796,7 +798,7 @@ public int onBrowseUp() { parentDir = storageManager.getFileByPath(parentPath); moveCount++; } else { - parentDir = storageManager.getFileByPath(OCFile.ROOT_PATH); + parentDir = storageManager.getFileByPath(ROOT_PATH); } while (parentDir == null) { parentPath = new File(parentPath).getParent(); @@ -1140,7 +1142,7 @@ public void listDirectory(OCFile directory, boolean onlyOnDevice, boolean fromSe if (mFile != null) { directory = mFile; } else { - directory = storageManager.getFileByPath("/"); + directory = storageManager.getFileByPath(ROOT_PATH); if (directory == null) { return; // no files, wait for sync } diff --git a/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.java b/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.java index 0460b394ded3..308d37eb7ac0 100644 --- a/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.java +++ b/src/main/java/com/owncloud/android/ui/preview/PreviewImageActivity.java @@ -1,4 +1,4 @@ -/** +/* * ownCloud Android client application * * @author David A. Velasco @@ -40,7 +40,6 @@ import com.nextcloud.client.preferences.AppPreferences; import com.owncloud.android.MainApp; import com.owncloud.android.R; -import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.datamodel.VirtualFolderType; diff --git a/src/main/java/com/owncloud/android/ui/trashbin/TrashbinPresenter.java b/src/main/java/com/owncloud/android/ui/trashbin/TrashbinPresenter.java index f642e7b0e5c3..391ca1f2844a 100644 --- a/src/main/java/com/owncloud/android/ui/trashbin/TrashbinPresenter.java +++ b/src/main/java/com/owncloud/android/ui/trashbin/TrashbinPresenter.java @@ -26,6 +26,8 @@ import java.io.File; import java.util.List; +import static com.owncloud.android.datamodel.OCFile.ROOT_PATH; + /** * Coordinates between model and view: querying model, updating view, react to UI input */ @@ -33,7 +35,7 @@ public class TrashbinPresenter implements TrashbinContract.Presenter { private TrashbinContract.View trashbinView; private TrashbinRepository trashbinRepository; - private String currentPath = "/"; + private String currentPath = ROOT_PATH; public TrashbinPresenter(TrashbinRepository trashbinRepository, TrashbinContract.View trashbinView) { this.trashbinRepository = trashbinRepository; @@ -48,12 +50,12 @@ public void enterFolder(String folder) { @Override public boolean isRoot() { - return !"/".equals(currentPath); + return !ROOT_PATH.equals(currentPath); } @Override public void navigateUp() { - if ("/".equals(currentPath)) { + if (ROOT_PATH.equals(currentPath)) { trashbinView.close(); } else { currentPath = new File(currentPath).getParent(); @@ -61,7 +63,7 @@ public void navigateUp() { loadFolder(); } - trashbinView.setDrawerIndicatorEnabled("/".equals(currentPath)); + trashbinView.setDrawerIndicatorEnabled(ROOT_PATH.equals(currentPath)); } @Override diff --git a/src/main/java/com/owncloud/android/utils/FilesSyncHelper.java b/src/main/java/com/owncloud/android/utils/FilesSyncHelper.java index b96fba57aac7..d57c72c9619e 100644 --- a/src/main/java/com/owncloud/android/utils/FilesSyncHelper.java +++ b/src/main/java/com/owncloud/android/utils/FilesSyncHelper.java @@ -68,6 +68,8 @@ import androidx.annotation.RequiresApi; +import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; + /** * Various utilities that make auto upload tick */ @@ -188,11 +190,10 @@ private static void insertContentIntoDB(Uri uri, SyncedFolder syncedFolder) { String[] projection = {MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.DATE_MODIFIED}; String path = syncedFolder.getLocalPath(); - if (!path.endsWith("/")) { - path = path + "/%"; - } else { - path = path + "%"; + if (!path.endsWith(PATH_SEPARATOR)) { + path = path + PATH_SEPARATOR; } + path = path + "%"; String syncedFolderInitiatedKey = SYNCEDFOLDERINITIATED + syncedFolder.getId(); String dateInitiated = arbitraryDataProvider.getValue(GLOBAL, syncedFolderInitiatedKey); diff --git a/src/main/java/com/owncloud/android/utils/glide/HttpStreamFetcher.java b/src/main/java/com/owncloud/android/utils/glide/HttpStreamFetcher.java index 47a72fae30b7..3af6e41838e2 100644 --- a/src/main/java/com/owncloud/android/utils/glide/HttpStreamFetcher.java +++ b/src/main/java/com/owncloud/android/utils/glide/HttpStreamFetcher.java @@ -1,4 +1,4 @@ -/** +/* * Nextcloud Android client application * * @author Alejandro Bautista @@ -28,7 +28,6 @@ import com.bumptech.glide.load.data.DataFetcher; import com.nextcloud.client.account.CurrentAccountProvider; import com.owncloud.android.MainApp; -import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.lib.common.OwnCloudAccount; import com.owncloud.android.lib.common.OwnCloudClient; import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; diff --git a/src/main/java/org/nextcloud/providers/cursors/RootCursor.java b/src/main/java/org/nextcloud/providers/cursors/RootCursor.java index 25be8f259343..8fc2ef0722bd 100644 --- a/src/main/java/org/nextcloud/providers/cursors/RootCursor.java +++ b/src/main/java/org/nextcloud/providers/cursors/RootCursor.java @@ -31,6 +31,8 @@ import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; +import static com.owncloud.android.datamodel.OCFile.ROOT_PATH; + @TargetApi(Build.VERSION_CODES.KITKAT) public class RootCursor extends MatrixCursor { @@ -47,7 +49,7 @@ public RootCursor(String... projection) { public void addRoot(Account account, Context context) { final FileDataStorageManager manager = new FileDataStorageManager(account, context.getContentResolver()); - final OCFile mainDir = manager.getFileByPath("/"); + final OCFile mainDir = manager.getFileByPath(ROOT_PATH); newRow().add(Root.COLUMN_ROOT_ID, account.name) .add(Root.COLUMN_DOCUMENT_ID, mainDir.getFileId())