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/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..2e4487e4c1e6 100644 --- a/src/main/java/com/owncloud/android/jobs/OfflineSyncJob.java +++ b/src/main/java/com/owncloud/android/jobs/OfflineSyncJob.java @@ -48,6 +48,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 +93,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 +112,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/DocumentsStorageProvider.java b/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java index 790f89cb9978..d0f8296ef154 100644 --- a/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java +++ b/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java @@ -89,6 +89,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 +399,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 +441,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 +472,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 +482,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 +604,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/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/adapter/TrashbinListAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java index 61cdba4e03bd..ffce386cdaae 100644 --- a/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java +++ b/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java @@ -51,6 +51,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 +137,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/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/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())