Skip to content

Commit 69dd965

Browse files
committed
Migrate current account getter from AccountUtils to UserAccountManager
The implementation delegates calls to old code, so there should be no regressions in functionality. Signed-off-by: Chris Narkiewicz <hello@ezaquarii.com>
1 parent 4442d5a commit 69dd965

File tree

61 files changed

+741
-288
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+741
-288
lines changed

gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ NC_TEST_SERVER_PASSWORD=test
55
android.enableJetifier=true
66
android.useAndroidX=true
77
android.debug.obsoleteApi=true
8+

src/androidTest/java/com/owncloud/android/AbstractIT.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,22 @@ public abstract class AbstractIT {
3838

3939
protected static OwnCloudClient client;
4040
static Account account;
41-
protected static Context context;
41+
protected static Context targetContext;
4242

4343
@BeforeClass
4444
public static void beforeAll() {
4545
try {
46-
context = InstrumentationRegistry.getInstrumentation().getTargetContext();
46+
targetContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
4747
Bundle arguments = androidx.test.platform.app.InstrumentationRegistry.getArguments();
4848

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

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

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

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

6868
if (account == null) {
6969
throw new ActivityNotFoundException();
7070
}
7171

72-
client = OwnCloudClientFactory.createOwnCloudClient(account, context);
72+
client = OwnCloudClientFactory.createOwnCloudClient(account, targetContext);
7373

7474
createDummyFiles();
7575

@@ -86,7 +86,7 @@ public static void beforeAll() {
8686
}
8787

8888
FileDataStorageManager getStorageManager() {
89-
return new FileDataStorageManager(account, context.getContentResolver());
89+
return new FileDataStorageManager(account, targetContext.getContentResolver());
9090
}
9191

9292
private static void createDummyFiles() throws IOException {

src/androidTest/java/com/owncloud/android/FileIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public void testCreateFolder() {
3535
assertTrue(getStorageManager().getFileByPath(path).isFolder());
3636

3737
// cleanup
38-
new RemoveFileOperation(path, false, account, false, context).execute(client, getStorageManager());
38+
new RemoveFileOperation(path, false, account, false, targetContext).execute(client, getStorageManager());
3939
}
4040

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

5454
// cleanup
55-
new RemoveFileOperation("/testFolder/", false, account, false, context).execute(client, getStorageManager());
55+
new RemoveFileOperation("/testFolder/", false, account, false, targetContext).execute(client, getStorageManager());
5656
}
5757
}

src/androidTest/java/com/owncloud/android/UploadIT.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package com.owncloud.android;
22

3+
import android.content.ContentResolver;
4+
5+
import com.nextcloud.client.account.CurrentAccountProvider;
6+
import com.owncloud.android.datamodel.UploadsStorageManager;
37
import com.owncloud.android.db.OCUpload;
48
import com.owncloud.android.files.services.FileUploader;
59
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
610
import com.owncloud.android.operations.RemoveFileOperation;
711
import com.owncloud.android.operations.UploadFileOperation;
812
import com.owncloud.android.utils.FileStorageUtils;
913

14+
import org.junit.Before;
1015
import org.junit.Test;
1116
import org.junit.runner.RunWith;
1217

@@ -21,6 +26,15 @@
2126
@RunWith(AndroidJUnit4.class)
2227
public class UploadIT extends AbstractIT {
2328

29+
private ContentResolver contentResolver;
30+
private CurrentAccountProvider currentAccountProvider;
31+
private UploadsStorageManager storageManager;
32+
33+
@Before
34+
public void setUp() {
35+
storageManager = new UploadsStorageManager(currentAccountProvider, contentResolver, targetContext);
36+
}
37+
2438
@Test
2539
public void testEmptyUpload() {
2640
OCUpload ocUpload = new OCUpload(FileStorageUtils.getSavePath(account.name) + "/empty.txt",
@@ -31,7 +45,7 @@ public void testEmptyUpload() {
3145
assertTrue(result.toString(), result.isSuccess());
3246

3347
// cleanup
34-
new RemoveFileOperation("/testUpload/", false, account, false, context).execute(client, getStorageManager());
48+
new RemoveFileOperation("/testUpload/", false, account, false, targetContext).execute(client, getStorageManager());
3549
}
3650

3751
@Test
@@ -44,7 +58,7 @@ public void testNonEmptyUpload() {
4458
assertTrue(result.toString(), result.isSuccess());
4559

4660
// cleanup
47-
new RemoveFileOperation("/testUpload/", false, account, false, context).execute(client, getStorageManager());
61+
new RemoveFileOperation("/testUpload/", false, account, false, targetContext).execute(client, getStorageManager());
4862
}
4963

5064
@Test
@@ -57,17 +71,18 @@ public void testChunkedUpload() {
5771
assertTrue(result.toString(), result.isSuccess());
5872

5973
// cleanup
60-
new RemoveFileOperation("/testUpload/", false, account, false, context).execute(client, getStorageManager());
74+
new RemoveFileOperation("/testUpload/", false, account, false, targetContext).execute(client, getStorageManager());
6175
}
6276

6377
public RemoteOperationResult testUpload(OCUpload ocUpload) {
6478
UploadFileOperation newUpload = new UploadFileOperation(
79+
storageManager,
6580
account,
6681
null,
6782
ocUpload,
6883
false,
6984
FileUploader.LOCAL_BEHAVIOUR_COPY,
70-
context,
85+
targetContext,
7186
false,
7287
false
7388
);
@@ -85,12 +100,13 @@ public void testUploadInNonExistingFolder() {
85100
OCUpload ocUpload = new OCUpload(FileStorageUtils.getSavePath(account.name) + "/empty.txt",
86101
"/testUpload/2/3/4/1.txt", account.name);
87102
UploadFileOperation newUpload = new UploadFileOperation(
103+
storageManager,
88104
account,
89105
null,
90106
ocUpload,
91107
false,
92108
FileUploader.LOCAL_BEHAVIOUR_COPY,
93-
context,
109+
targetContext,
94110
false,
95111
false
96112
);
@@ -104,6 +120,6 @@ public void testUploadInNonExistingFolder() {
104120
assertTrue(result.toString(), result.isSuccess());
105121

106122
// cleanup
107-
new RemoveFileOperation("/testUpload/", false, account, false, context).execute(client, getStorageManager());
123+
new RemoveFileOperation("/testUpload/", false, account, false, targetContext).execute(client, getStorageManager());
108124
}
109125
}

src/androidTest/java/com/owncloud/android/datamodel/UploadStorageManagerTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.content.ContentResolver;
55
import android.content.Context;
66

7+
import com.nextcloud.client.account.CurrentAccountProvider;
78
import com.owncloud.android.db.OCUpload;
89

910
import org.junit.After;
@@ -14,6 +15,7 @@
1415

1516
import java.io.File;
1617

18+
import androidx.annotation.Nullable;
1719
import androidx.test.InstrumentationRegistry;
1820
import androidx.test.filters.SmallTest;
1921
import androidx.test.runner.AndroidJUnit4;
@@ -28,12 +30,13 @@ public class UploadStorageManagerTest {
2830

2931
private Account[] Accounts;
3032
private UploadsStorageManager uploadsStorageManager;
33+
private CurrentAccountProvider currentAccountProvider = () -> null;
3134

3235
@Before
3336
public void setUp() {
3437
Context instrumentationCtx = InstrumentationRegistry.getTargetContext();
3538
ContentResolver contentResolver = instrumentationCtx.getContentResolver();
36-
uploadsStorageManager = new UploadsStorageManager(contentResolver, instrumentationCtx);
39+
uploadsStorageManager = new UploadsStorageManager(currentAccountProvider, contentResolver, instrumentationCtx);
3740
Accounts = new Account[]{new Account("A", "A"), new Account("B", "B")};
3841
}
3942

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.nextcloud.client.account;
2+
3+
import android.accounts.Account;
4+
5+
import androidx.annotation.Nullable;
6+
7+
/**
8+
* This interface provides access to currently selected user Account.
9+
* @see UserAccountManager
10+
*/
11+
@FunctionalInterface
12+
public interface CurrentAccountProvider {
13+
/**
14+
* Get currently active account.
15+
*
16+
* @return Currently selected {@link Account} or first valid {@link Account} registered in OS or null, if not available at all.
17+
*/
18+
@Nullable
19+
Account getCurrentAccount();
20+
}

src/main/java/com/nextcloud/client/account/UserAccountManager.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,12 @@
2020
package com.nextcloud.client.account;
2121

2222
import android.accounts.Account;
23+
import android.content.Context;
2324

2425
import androidx.annotation.NonNull;
26+
import androidx.annotation.Nullable;
2527

26-
public interface UserAccountManager {
28+
public interface UserAccountManager extends CurrentAccountProvider {
2729

2830
int ACCOUNT_VERSION = 1;
2931
int ACCOUNT_VERSION_WITH_PROPER_ID = 2;

src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,22 +23,30 @@
2323
import android.accounts.Account;
2424
import android.accounts.AccountManager;
2525
import android.content.Context;
26+
import android.content.SharedPreferences;
2627
import android.net.Uri;
28+
import android.preference.PreferenceManager;
2729

30+
import com.nextcloud.client.preferences.AppPreferences;
2831
import com.owncloud.android.MainApp;
2932
import com.owncloud.android.R;
3033
import com.owncloud.android.authentication.AccountUtils;
34+
import com.owncloud.android.datamodel.ArbitraryDataProvider;
3135
import com.owncloud.android.lib.common.OwnCloudAccount;
3236
import com.owncloud.android.lib.common.OwnCloudClient;
3337
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
3438
import com.owncloud.android.lib.common.UserInfo;
3539
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
3640
import com.owncloud.android.lib.common.utils.Log_OC;
3741
import com.owncloud.android.lib.resources.users.GetRemoteUserInfoOperation;
42+
import com.owncloud.android.ui.activity.ManageAccountsActivity;
43+
44+
import java.util.Optional;
3845

3946
import javax.inject.Inject;
4047

4148
import androidx.annotation.NonNull;
49+
import androidx.annotation.Nullable;
4250

4351
public class UserAccountManagerImpl implements UserAccountManager {
4452

@@ -47,11 +55,20 @@ public class UserAccountManagerImpl implements UserAccountManager {
4755

4856
private Context context;
4957
private AccountManager accountManager;
58+
private ArbitraryDataProvider dataProvider;
59+
private AppPreferences preferences;
5060

5161
@Inject
52-
public UserAccountManagerImpl(Context context, AccountManager accountManager) {
62+
public UserAccountManagerImpl(
63+
Context context,
64+
AccountManager accountManager,
65+
ArbitraryDataProvider dataProvider,
66+
AppPreferences preferences
67+
) {
5368
this.context = context;
5469
this.accountManager = accountManager;
70+
this.dataProvider = dataProvider;
71+
this.preferences = preferences;
5572
}
5673

5774
@Override
@@ -60,6 +77,11 @@ public Account[] getAccounts() {
6077
return accountManager.getAccountsByType(getAccountType());
6178
}
6279

80+
@Nullable
81+
public Account getCurrentAccount() {
82+
return AccountUtils.getCurrentOwnCloudAccount(context);
83+
}
84+
6385
public void updateAccountVersion() {
6486
Account currentAccount = AccountUtils.getCurrentOwnCloudAccount(context);
6587

src/main/java/com/nextcloud/client/di/AppModule.java

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,23 @@
2222

2323
import android.accounts.AccountManager;
2424
import android.app.Application;
25+
import android.content.ContentResolver;
2526
import android.content.Context;
2627

28+
import com.nextcloud.client.account.CurrentAccountProvider;
2729
import com.nextcloud.client.account.UserAccountManager;
2830
import com.nextcloud.client.account.UserAccountManagerImpl;
2931
import com.nextcloud.client.preferences.AppPreferences;
3032
import com.nextcloud.client.preferences.AppPreferencesImpl;
33+
import com.owncloud.android.datamodel.ArbitraryDataProvider;
34+
import com.owncloud.android.datamodel.UploadsStorageManager;
35+
import com.owncloud.android.ui.activities.data.activities.ActivitiesRepository;
36+
import com.owncloud.android.ui.activities.data.activities.ActivitiesServiceApi;
37+
import com.owncloud.android.ui.activities.data.activities.ActivitiesServiceApiImpl;
38+
import com.owncloud.android.ui.activities.data.activities.RemoteActivitiesRepository;
39+
import com.owncloud.android.ui.activities.data.files.FilesRepository;
40+
import com.owncloud.android.ui.activities.data.files.FilesServiceApiImpl;
41+
import com.owncloud.android.ui.activities.data.files.RemoteFilesRepository;
3142

3243
import dagger.Module;
3344
import dagger.Provides;
@@ -51,7 +62,41 @@ AppPreferences preferences(Application application) {
5162
}
5263

5364
@Provides
54-
UserAccountManager userAccountManager(Context context, AccountManager accountManager) {
55-
return new UserAccountManagerImpl(context, accountManager);
65+
UserAccountManager userAccountManager(
66+
Context context,
67+
AccountManager accountManager,
68+
ArbitraryDataProvider arbitraryDataProvider,
69+
AppPreferences appPreferences
70+
) {
71+
return new UserAccountManagerImpl(context, accountManager, arbitraryDataProvider, appPreferences);
72+
}
73+
74+
@Provides
75+
ArbitraryDataProvider arbitraryDataProvider(Context context) {
76+
final ContentResolver resolver = context.getContentResolver();
77+
return new ArbitraryDataProvider(resolver);
78+
}
79+
80+
@Provides
81+
ActivitiesServiceApi activitiesServiceApi(UserAccountManager accountManager) {
82+
return new ActivitiesServiceApiImpl(accountManager);
83+
}
84+
85+
@Provides
86+
ActivitiesRepository activitiesRepository(ActivitiesServiceApi api) {
87+
return new RemoteActivitiesRepository(api);
88+
}
89+
90+
@Provides
91+
FilesRepository filesRepository(UserAccountManager accountManager) {
92+
return new RemoteFilesRepository(new FilesServiceApiImpl(accountManager));
93+
}
94+
95+
@Provides UploadsStorageManager uploadsStorageManager(Context context, CurrentAccountProvider currentAccountProvider) {
96+
return new UploadsStorageManager(currentAccountProvider, context.getContentResolver(), context);
97+
}
98+
99+
@Provides CurrentAccountProvider currentAccountProvider(UserAccountManager accountManager) {
100+
return accountManager;
56101
}
57102
}

0 commit comments

Comments
 (0)