Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ NC_TEST_SERVER_PASSWORD=test
android.enableJetifier=true
android.useAndroidX=true
android.debug.obsoleteApi=true

2 changes: 1 addition & 1 deletion scripts/analysis/findbugs-results.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
441
439
18 changes: 9 additions & 9 deletions src/androidTest/java/com/owncloud/android/AbstractIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,22 +38,22 @@ public abstract class AbstractIT {

protected static OwnCloudClient client;
static Account account;
protected static Context context;
protected static Context targetContext;

@BeforeClass
public static void beforeAll() {
try {
context = InstrumentationRegistry.getInstrumentation().getTargetContext();
targetContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
Bundle arguments = androidx.test.platform.app.InstrumentationRegistry.getArguments();

Uri baseUrl = Uri.parse(arguments.getString("TEST_SERVER_URL"));
String username = arguments.getString("TEST_SERVER_USERNAME");
String password = arguments.getString("TEST_SERVER_PASSWORD");

Account temp = new Account(username + "@" + baseUrl, MainApp.getAccountType(context));
Account temp = new Account(username + "@" + baseUrl, MainApp.getAccountType(targetContext));

if (!com.owncloud.android.authentication.AccountUtils.exists(temp, context)) {
AccountManager accountManager = AccountManager.get(context);
if (!com.owncloud.android.authentication.AccountUtils.exists(temp, targetContext)) {
AccountManager accountManager = AccountManager.get(targetContext);
accountManager.addAccountExplicitly(temp, password, null);
accountManager.setUserData(temp, AccountUtils.Constants.KEY_OC_ACCOUNT_VERSION,
Integer.toString(com.owncloud.android.authentication.AccountUtils.ACCOUNT_VERSION));
Expand All @@ -62,14 +62,14 @@ public static void beforeAll() {
accountManager.setUserData(temp, AccountUtils.Constants.KEY_USER_ID, username);
}

account = com.owncloud.android.authentication.AccountUtils.getOwnCloudAccountByName(context,
username + "@" + baseUrl);
account = com.owncloud.android.authentication.AccountUtils.getOwnCloudAccountByName(targetContext,
username + "@" + baseUrl);

if (account == null) {
throw new ActivityNotFoundException();
}

client = OwnCloudClientFactory.createOwnCloudClient(account, context);
client = OwnCloudClientFactory.createOwnCloudClient(account, targetContext);

createDummyFiles();

Expand All @@ -86,7 +86,7 @@ public static void beforeAll() {
}

FileDataStorageManager getStorageManager() {
return new FileDataStorageManager(account, context.getContentResolver());
return new FileDataStorageManager(account, targetContext.getContentResolver());
}

private static void createDummyFiles() throws IOException {
Expand Down
4 changes: 2 additions & 2 deletions src/androidTest/java/com/owncloud/android/FileIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public void testCreateFolder() {
assertTrue(getStorageManager().getFileByPath(path).isFolder());

// cleanup
new RemoveFileOperation(path, false, account, false, context).execute(client, getStorageManager());
new RemoveFileOperation(path, false, account, false, targetContext).execute(client, getStorageManager());
}

@Test
Expand All @@ -52,6 +52,6 @@ public void testCreateNonExistingSubFolder() {
assertTrue(getStorageManager().getFileByPath(path).isFolder());

// cleanup
new RemoveFileOperation("/testFolder/", false, account, false, context).execute(client, getStorageManager());
new RemoveFileOperation("/testFolder/", false, account, false, targetContext).execute(client, getStorageManager());
}
}
30 changes: 24 additions & 6 deletions src/androidTest/java/com/owncloud/android/UploadIT.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
package com.owncloud.android;

import android.content.ContentResolver;

import com.nextcloud.client.account.CurrentAccountProvider;
import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.datamodel.UploadsStorageManager;
import com.owncloud.android.db.OCUpload;
import com.owncloud.android.files.services.FileUploader;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
import com.owncloud.android.operations.RemoveFileOperation;
import com.owncloud.android.operations.UploadFileOperation;
import com.owncloud.android.utils.FileStorageUtils;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

Expand All @@ -21,6 +27,16 @@
@RunWith(AndroidJUnit4.class)
public class UploadIT extends AbstractIT {


private UploadsStorageManager storageManager;

@Before
public void setUp() {
final ContentResolver contentResolver = targetContext.getContentResolver();
final CurrentAccountProvider currentAccountProvider = () -> AccountUtils.getCurrentOwnCloudAccount(targetContext);
storageManager = new UploadsStorageManager(currentAccountProvider, contentResolver, targetContext);
}

@Test
public void testEmptyUpload() {
OCUpload ocUpload = new OCUpload(FileStorageUtils.getSavePath(account.name) + "/empty.txt",
Expand All @@ -31,7 +47,7 @@ public void testEmptyUpload() {
assertTrue(result.toString(), result.isSuccess());

// cleanup
new RemoveFileOperation("/testUpload/", false, account, false, context).execute(client, getStorageManager());
new RemoveFileOperation("/testUpload/", false, account, false, targetContext).execute(client, getStorageManager());
}

@Test
Expand All @@ -44,7 +60,7 @@ public void testNonEmptyUpload() {
assertTrue(result.toString(), result.isSuccess());

// cleanup
new RemoveFileOperation("/testUpload/", false, account, false, context).execute(client, getStorageManager());
new RemoveFileOperation("/testUpload/", false, account, false, targetContext).execute(client, getStorageManager());
}

@Test
Expand All @@ -57,17 +73,18 @@ public void testChunkedUpload() {
assertTrue(result.toString(), result.isSuccess());

// cleanup
new RemoveFileOperation("/testUpload/", false, account, false, context).execute(client, getStorageManager());
new RemoveFileOperation("/testUpload/", false, account, false, targetContext).execute(client, getStorageManager());
}

public RemoteOperationResult testUpload(OCUpload ocUpload) {
UploadFileOperation newUpload = new UploadFileOperation(
storageManager,
account,
null,
ocUpload,
false,
FileUploader.LOCAL_BEHAVIOUR_COPY,
context,
targetContext,
false,
false
);
Expand All @@ -85,12 +102,13 @@ public void testUploadInNonExistingFolder() {
OCUpload ocUpload = new OCUpload(FileStorageUtils.getSavePath(account.name) + "/empty.txt",
"/testUpload/2/3/4/1.txt", account.name);
UploadFileOperation newUpload = new UploadFileOperation(
storageManager,
account,
null,
ocUpload,
false,
FileUploader.LOCAL_BEHAVIOUR_COPY,
context,
targetContext,
false,
false
);
Expand All @@ -104,6 +122,6 @@ public void testUploadInNonExistingFolder() {
assertTrue(result.toString(), result.isSuccess());

// cleanup
new RemoveFileOperation("/testUpload/", false, account, false, context).execute(client, getStorageManager());
new RemoveFileOperation("/testUpload/", false, account, false, targetContext).execute(client, getStorageManager());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import android.content.ContentResolver;
import android.content.Context;

import com.nextcloud.client.account.CurrentAccountProvider;
import com.owncloud.android.db.OCUpload;

import org.junit.After;
Expand All @@ -14,6 +15,7 @@

import java.io.File;

import androidx.annotation.Nullable;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
Expand All @@ -28,12 +30,13 @@ public class UploadStorageManagerTest {

private Account[] Accounts;
private UploadsStorageManager uploadsStorageManager;
private CurrentAccountProvider currentAccountProvider = () -> null;

@Before
public void setUp() {
Context instrumentationCtx = InstrumentationRegistry.getTargetContext();
ContentResolver contentResolver = instrumentationCtx.getContentResolver();
uploadsStorageManager = new UploadsStorageManager(contentResolver, instrumentationCtx);
uploadsStorageManager = new UploadsStorageManager(currentAccountProvider, contentResolver, instrumentationCtx);
Accounts = new Account[]{new Account("A", "A"), new Account("B", "B")};
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.nextcloud.client.account;

import android.accounts.Account;

import androidx.annotation.Nullable;

/**
* This interface provides access to currently selected user Account.
* @see UserAccountManager
*/
@FunctionalInterface
public interface CurrentAccountProvider {
/**
* Get currently active account.
*
* @return Currently selected {@link Account} or first valid {@link Account} registered in OS or null, if not available at all.
*/
@Nullable
Account getCurrentAccount();
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

import androidx.annotation.NonNull;

public interface UserAccountManager {
public interface UserAccountManager extends CurrentAccountProvider {

int ACCOUNT_VERSION = 1;
int ACCOUNT_VERSION_WITH_PROPER_ID = 2;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import javax.inject.Inject;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

public class UserAccountManagerImpl implements UserAccountManager {

Expand All @@ -49,7 +50,10 @@ public class UserAccountManagerImpl implements UserAccountManager {
private AccountManager accountManager;

@Inject
public UserAccountManagerImpl(Context context, AccountManager accountManager) {
public UserAccountManagerImpl(
Context context,
AccountManager accountManager
) {
this.context = context;
this.accountManager = accountManager;
}
Expand All @@ -60,6 +64,11 @@ public Account[] getAccounts() {
return accountManager.getAccountsByType(getAccountType());
}

@Nullable
public Account getCurrentAccount() {
return AccountUtils.getCurrentOwnCloudAccount(context);
}

public void updateAccountVersion() {
Account currentAccount = AccountUtils.getCurrentOwnCloudAccount(context);

Expand Down
45 changes: 44 additions & 1 deletion src/main/java/com/nextcloud/client/di/AppModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,23 @@

import android.accounts.AccountManager;
import android.app.Application;
import android.content.ContentResolver;
import android.content.Context;

import com.nextcloud.client.account.CurrentAccountProvider;
import com.nextcloud.client.account.UserAccountManager;
import com.nextcloud.client.account.UserAccountManagerImpl;
import com.nextcloud.client.preferences.AppPreferences;
import com.nextcloud.client.preferences.AppPreferencesImpl;
import com.owncloud.android.datamodel.ArbitraryDataProvider;
import com.owncloud.android.datamodel.UploadsStorageManager;
import com.owncloud.android.ui.activities.data.activities.ActivitiesRepository;
import com.owncloud.android.ui.activities.data.activities.ActivitiesServiceApi;
import com.owncloud.android.ui.activities.data.activities.ActivitiesServiceApiImpl;
import com.owncloud.android.ui.activities.data.activities.RemoteActivitiesRepository;
import com.owncloud.android.ui.activities.data.files.FilesRepository;
import com.owncloud.android.ui.activities.data.files.FilesServiceApiImpl;
import com.owncloud.android.ui.activities.data.files.RemoteFilesRepository;

import dagger.Module;
import dagger.Provides;
Expand All @@ -51,7 +62,39 @@ AppPreferences preferences(Application application) {
}

@Provides
UserAccountManager userAccountManager(Context context, AccountManager accountManager) {
UserAccountManager userAccountManager(
Context context,
AccountManager accountManager
) {
return new UserAccountManagerImpl(context, accountManager);
}

@Provides
ArbitraryDataProvider arbitraryDataProvider(Context context) {
final ContentResolver resolver = context.getContentResolver();
return new ArbitraryDataProvider(resolver);
}

@Provides
ActivitiesServiceApi activitiesServiceApi(UserAccountManager accountManager) {
return new ActivitiesServiceApiImpl(accountManager);
}

@Provides
ActivitiesRepository activitiesRepository(ActivitiesServiceApi api) {
return new RemoteActivitiesRepository(api);
}

@Provides
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 CurrentAccountProvider currentAccountProvider(UserAccountManager accountManager) {
return accountManager;
}
}
13 changes: 13 additions & 0 deletions src/main/java/com/nextcloud/client/di/ComponentsModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,12 @@
import com.owncloud.android.authentication.AuthenticatorActivity;
import com.owncloud.android.authentication.DeepLinkLoginActivity;
import com.owncloud.android.files.BootupBroadcastReceiver;
import com.owncloud.android.files.services.FileUploader;
import com.owncloud.android.providers.DiskLruImageCacheFileProvider;
import com.owncloud.android.providers.DocumentsStorageProvider;
import com.owncloud.android.providers.UsersAndGroupsSearchProvider;
import com.owncloud.android.ui.activities.ActivitiesActivity;
import com.owncloud.android.ui.activity.BaseActivity;
import com.owncloud.android.ui.activity.ConflictsResolveActivity;
import com.owncloud.android.ui.activity.ContactsPreferenceActivity;
import com.owncloud.android.ui.activity.CopyToClipboardActivity;
Expand Down Expand Up @@ -53,8 +57,10 @@
import com.owncloud.android.ui.activity.UploadPathActivity;
import com.owncloud.android.ui.activity.UserInfoActivity;
import com.owncloud.android.ui.activity.WhatsNewActivity;
import com.owncloud.android.ui.dialog.ChooseTemplateDialogFragment;
import com.owncloud.android.ui.errorhandling.ErrorShowActivity;
import com.owncloud.android.ui.fragment.ExtendedListFragment;
import com.owncloud.android.ui.fragment.FileDetailActivitiesFragment;
import com.owncloud.android.ui.fragment.FileDetailFragment;
import com.owncloud.android.ui.fragment.LocalFileListFragment;
import com.owncloud.android.ui.fragment.OCFileListFragment;
Expand All @@ -73,6 +79,7 @@
abstract class ComponentsModule {
@ContributesAndroidInjector abstract ActivitiesActivity activitiesActivity();
@ContributesAndroidInjector abstract AuthenticatorActivity authenticatorActivity();
@ContributesAndroidInjector abstract BaseActivity baseActivity();
@ContributesAndroidInjector abstract ConflictsResolveActivity conflictsResolveActivity();
@ContributesAndroidInjector abstract ContactsPreferenceActivity contactsPreferenceActivity();
@ContributesAndroidInjector abstract CopyToClipboardActivity copyToClipboardActivity();
Expand Down Expand Up @@ -111,8 +118,14 @@ abstract class ComponentsModule {
@ContributesAndroidInjector abstract FileDetailFragment fileDetailFragment();
@ContributesAndroidInjector abstract LocalFileListFragment localFileListFragment();
@ContributesAndroidInjector abstract OCFileListFragment ocFileListFragment();
@ContributesAndroidInjector abstract FileDetailActivitiesFragment fileDetailActivitiesFragment();
@ContributesAndroidInjector abstract ChooseTemplateDialogFragment chooseTemplateDialogFragment();

@ContributesAndroidInjector abstract FileUploader fileUploader();

@ContributesAndroidInjector abstract BootupBroadcastReceiver bootupBroadcastReceiver();

@ContributesAndroidInjector abstract DocumentsStorageProvider documentsStorageProvider();
@ContributesAndroidInjector abstract UsersAndGroupsSearchProvider usersAndGroupsSearchProvider();
@ContributesAndroidInjector abstract DiskLruImageCacheFileProvider diskLruImageCacheFileProvider();
}
Original file line number Diff line number Diff line change
Expand Up @@ -280,4 +280,7 @@ public interface AppPreferences {
void setStoragePath(String path);

void removeKeysMigrationPreference();

String getCurrentAccountName();
void setCurrentAccountName(String accountName);
}
Loading