Loading app/src/main/java/foundation/e/drive/activity/AccountsActivity.java +11 −8 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ public class AccountsActivity extends AppCompatActivity { final AccountManager accountManager = AccountManager.get(this); final Account account = CommonUtils.getAccount(getString(R.string.eelo_account_type), accountManager); final OwnCloudClient client = DavClientProvider.getInstance().getClientInstance(account, this); final String usedQuota = accountManager.getUserData(account, ACCOUNT_DATA_USED_QUOTA_KEY); final String totalQuota = accountManager.getUserData(account, ACCOUNT_DATA_TOTAL_QUOTA_KEY); Loading Loading @@ -156,6 +156,8 @@ public class AccountsActivity extends AppCompatActivity { } }); final OwnCloudClient client = DavClientProvider.getInstance().getClientInstance(account, this); if (client != null) { Glide.with(this) .load(client.getBaseUri() + NON_OFFICIAL_AVATAR_PATH + client.getCredentials().getUsername() + "/" + 300) Loading @@ -164,3 +166,4 @@ public class AccountsActivity extends AppCompatActivity { binding.avatar.setVisibility(View.VISIBLE); } } } No newline at end of file app/src/main/java/foundation/e/drive/operations/UploadFileOperation.java +4 −0 Original line number Diff line number Diff line Loading @@ -159,6 +159,10 @@ public class UploadFileOperation extends RemoteOperation { } final NextcloudClient ncClient = DavClientProvider.getInstance().getNcClientInstance(account, context); if (ncClient == null) { return ResultCode.ACCOUNT_EXCEPTION; } final RemoteOperationResult checkQuotaResult = checkAvailableSpace(ncClient, file.length()); if (checkQuotaResult.getCode() != ResultCode.OK) { Timber.d("Impossible to check quota. Cancels upload of %s", syncedState.getLocalPath()); Loading app/src/main/java/foundation/e/drive/services/SynchronizationService.java +10 −1 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ public class SynchronizationService extends Service implements OnRemoteOperation Timber.tag(SynchronizationService.class.getSimpleName()); } @SuppressWarnings("deprecation") //for OwnCloudClient @Override public int onStartCommand(@NonNull Intent intent, int flags, int startId) { Timber.v("onStartCommand()"); Loading @@ -89,8 +90,11 @@ public class SynchronizationService extends Service implements OnRemoteOperation syncRequestQueue = new ConcurrentLinkedDeque<>(); startedSync = new ConcurrentHashMap<>(); threadPool = new Thread[workerAmount]; //noinspection deprecation ocClient = DavClientProvider.getInstance().getClientInstance(account, getApplicationContext()); if (ocClient == null) { Timber.w("ocClient is null"); } handlerThread = new HandlerThread("syncService_onResponse"); handlerThread.start(); Loading Loading @@ -224,6 +228,11 @@ public class SynchronizationService extends Service implements OnRemoteOperation } private void startWorker(int threadIndex) { if (ocClient == null) { Timber.w("Can't start sync thread: ocClient is null"); return; } if (!isNetworkAvailable()) { Timber.d("No network available: Clear syncRequestQueue"); syncRequestQueue.clear(); Loading app/src/main/java/foundation/e/drive/utils/DavClientProvider.java +67 −42 Original line number Diff line number Diff line /* * Copyright © CLEUS SAS 2019. * Copyright © MURENA SAS 2023 * * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 Loading Loading @@ -30,6 +31,7 @@ import timber.log.Timber; /** * @author Vincent Bourgmayer */ @SuppressWarnings({"deprecation", "DeprecatedIsStillUsed"}) public class DavClientProvider { private final static DavClientProvider instance = new DavClientProvider(); Loading @@ -43,67 +45,90 @@ public class DavClientProvider { private NextcloudClient ncClientInstance; @Nullable public OwnCloudClient getClientInstance(@Nullable final Account account, @NonNull final Context ctx) { public OwnCloudClient getClientInstance(@Nullable final Account account, @NonNull final Context context) { if (account == null) return null; if (ocClientInstance == null) { try { //Not sure below if code is used... if (!AppConstants.USER_AGENT.equals(OwnCloudClientManagerFactory.getUserAgent())) { OwnCloudClientManagerFactory.setUserAgent(AppConstants.USER_AGENT); ocClientInstance = createOcClient(account, context); } final Uri serverUri = Uri.parse(AccountUtils.getBaseUrlForAccount(ctx, account)); ocClientInstance = OwnCloudClientFactory.createOwnCloudClient(serverUri, ctx, true); final String pwd = getAcountPwd(account, ctx); Timber.v("name: %s \n%s", account.name, AccountManager.get(ctx).getUserData(account, AccountUtils.Constants.KEY_USER_ID)); return ocClientInstance; } ocClientInstance.setCredentials(new OwnCloudBasicCredentials(account.name, pwd)); } catch (AccountUtils.AccountNotFoundException exception) { Timber.e(exception); return null; @Nullable public NextcloudClient getNcClientInstance(@Nullable final Account account, @NonNull final Context context) { if (account == null) return null; if (ncClientInstance == null) { ncClientInstance = createNcClient(account, context); } return ncClientInstance; } if (ocClientInstance.getUserId() == null ) { final String userId = AccountManager.get(ctx).getUserData(account, AppConstants.ACCOUNT_USER_ID_KEY); ocClientInstance.setUserId(userId); public void cleanUp() { ncClientInstance = null; ocClientInstance = null; } return ocClientInstance; @NonNull public static DavClientProvider getInstance() { return instance; } @Nullable private OwnCloudBasicCredentials getOcCredentials(@NonNull Account account, @NonNull Context context) throws AccountUtils.AccountNotFoundException { final String pwd = AccountManager.get(context).getPassword(account); if (pwd == null) return null; return new OwnCloudBasicCredentials(account.name, pwd); } @Nullable public NextcloudClient getNcClientInstance(@Nullable final Account account, @NonNull final Context ctx) { Timber.v("getNcClientInstance()"); if (ncClientInstance == null) { private OwnCloudClient createOcClient(@NonNull Account account, @NonNull Context context) { OwnCloudClientManagerFactory.setUserAgent(AppConstants.USER_AGENT); final OwnCloudClient result; try { final Uri serverUri = Uri.parse(AccountUtils.getBaseUrlForAccount(ctx, account)); final String credentials = OkHttpCredentialsUtil.basic(account.name, getAcountPwd(account, ctx)); final OwnCloudBasicCredentials credentials = getOcCredentials(account, context); if (credentials == null) return null; ncClientInstance = OwnCloudClientFactory.createNextcloudClient(serverUri, account.name, credentials, ctx, true); final Uri serverUri = Uri.parse(AccountUtils.getBaseUrlForAccount(context, account)); result = OwnCloudClientFactory.createOwnCloudClient(serverUri, context, true); result.setCredentials(credentials); } catch (AccountUtils.AccountNotFoundException exception) { Timber.e("Can't get server URI for account: %s\n%s", account.name,exception.getMessage()); Timber.e(exception); return null; } ncClientInstance.setUserId(account.name); } return ncClientInstance; if (result.getUserId() == null) { final String userId = AccountManager.get(context).getUserData(account, AppConstants.ACCOUNT_USER_ID_KEY); result.setUserId(userId); } public void cleanUp() { ncClientInstance = null; ocClientInstance = null; return result; } @Nullable private static String getAcountPwd(Account account, Context ctx) throws AccountUtils.AccountNotFoundException { return AccountManager.get(ctx).getPassword(account); private String getNcCredentials(@NonNull Account account, @NonNull Context context) throws AccountUtils.AccountNotFoundException { final String pwd = AccountManager.get(context).getPassword(account); if (pwd == null) return null; return OkHttpCredentialsUtil.basic(account.name, pwd); } /** Point d'accès pour l'instance unique du singleton */ @NonNull public static DavClientProvider getInstance() { return instance; @Nullable private NextcloudClient createNcClient(@NonNull Account account, @NonNull Context context) { final NextcloudClient result; try { final String credentials = getNcCredentials(account, context); if (credentials == null) return null; final Uri serverUri = Uri.parse(AccountUtils.getBaseUrlForAccount(context, account)); result = OwnCloudClientFactory.createNextcloudClient(serverUri, account.name, credentials, context, true); } catch (AccountUtils.AccountNotFoundException exception) { Timber.e("Can't get server URI for account: %s\n%s", account.name, exception.getMessage()); return null; } result.setUserId(account.name); return result; } } No newline at end of file app/src/main/java/foundation/e/drive/utils/ServiceExceptionHandler.java +8 −7 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ public class ServiceExceptionHandler implements UncaughtExceptionHandler{ public final static String CRASH_LOG_FOLDER = "crash-logs"; public final static String LOG_FILE_NAME_PREFIX = "eDrive-crash-"; public final static String LOG_FILE_EXTENSION = ".log"; private UncaughtExceptionHandler defaultUEH; private final UncaughtExceptionHandler defaultUEH; Service service; Loading @@ -51,7 +51,7 @@ public class ServiceExceptionHandler implements UncaughtExceptionHandler{ if (isExternalStorageAvailable() && !isExternalStorageReadOnly()) { final Long timestamp = System.currentTimeMillis(); final long timestamp = System.currentTimeMillis(); final String fileName = LOG_FILE_NAME_PREFIX+timestamp+LOG_FILE_EXTENSION; Loading Loading @@ -90,6 +90,7 @@ public class ServiceExceptionHandler implements UncaughtExceptionHandler{ * @param exception the exception * @return the Stacktrace as a string */ @NonNull private String getStackTraceAsString(Throwable exception) { final StringWriter sw = new StringWriter(); final PrintWriter pw = new PrintWriter(sw); Loading Loading
app/src/main/java/foundation/e/drive/activity/AccountsActivity.java +11 −8 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ public class AccountsActivity extends AppCompatActivity { final AccountManager accountManager = AccountManager.get(this); final Account account = CommonUtils.getAccount(getString(R.string.eelo_account_type), accountManager); final OwnCloudClient client = DavClientProvider.getInstance().getClientInstance(account, this); final String usedQuota = accountManager.getUserData(account, ACCOUNT_DATA_USED_QUOTA_KEY); final String totalQuota = accountManager.getUserData(account, ACCOUNT_DATA_TOTAL_QUOTA_KEY); Loading Loading @@ -156,6 +156,8 @@ public class AccountsActivity extends AppCompatActivity { } }); final OwnCloudClient client = DavClientProvider.getInstance().getClientInstance(account, this); if (client != null) { Glide.with(this) .load(client.getBaseUri() + NON_OFFICIAL_AVATAR_PATH + client.getCredentials().getUsername() + "/" + 300) Loading @@ -164,3 +166,4 @@ public class AccountsActivity extends AppCompatActivity { binding.avatar.setVisibility(View.VISIBLE); } } } No newline at end of file
app/src/main/java/foundation/e/drive/operations/UploadFileOperation.java +4 −0 Original line number Diff line number Diff line Loading @@ -159,6 +159,10 @@ public class UploadFileOperation extends RemoteOperation { } final NextcloudClient ncClient = DavClientProvider.getInstance().getNcClientInstance(account, context); if (ncClient == null) { return ResultCode.ACCOUNT_EXCEPTION; } final RemoteOperationResult checkQuotaResult = checkAvailableSpace(ncClient, file.length()); if (checkQuotaResult.getCode() != ResultCode.OK) { Timber.d("Impossible to check quota. Cancels upload of %s", syncedState.getLocalPath()); Loading
app/src/main/java/foundation/e/drive/services/SynchronizationService.java +10 −1 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ public class SynchronizationService extends Service implements OnRemoteOperation Timber.tag(SynchronizationService.class.getSimpleName()); } @SuppressWarnings("deprecation") //for OwnCloudClient @Override public int onStartCommand(@NonNull Intent intent, int flags, int startId) { Timber.v("onStartCommand()"); Loading @@ -89,8 +90,11 @@ public class SynchronizationService extends Service implements OnRemoteOperation syncRequestQueue = new ConcurrentLinkedDeque<>(); startedSync = new ConcurrentHashMap<>(); threadPool = new Thread[workerAmount]; //noinspection deprecation ocClient = DavClientProvider.getInstance().getClientInstance(account, getApplicationContext()); if (ocClient == null) { Timber.w("ocClient is null"); } handlerThread = new HandlerThread("syncService_onResponse"); handlerThread.start(); Loading Loading @@ -224,6 +228,11 @@ public class SynchronizationService extends Service implements OnRemoteOperation } private void startWorker(int threadIndex) { if (ocClient == null) { Timber.w("Can't start sync thread: ocClient is null"); return; } if (!isNetworkAvailable()) { Timber.d("No network available: Clear syncRequestQueue"); syncRequestQueue.clear(); Loading
app/src/main/java/foundation/e/drive/utils/DavClientProvider.java +67 −42 Original line number Diff line number Diff line /* * Copyright © CLEUS SAS 2019. * Copyright © MURENA SAS 2023 * * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 Loading Loading @@ -30,6 +31,7 @@ import timber.log.Timber; /** * @author Vincent Bourgmayer */ @SuppressWarnings({"deprecation", "DeprecatedIsStillUsed"}) public class DavClientProvider { private final static DavClientProvider instance = new DavClientProvider(); Loading @@ -43,67 +45,90 @@ public class DavClientProvider { private NextcloudClient ncClientInstance; @Nullable public OwnCloudClient getClientInstance(@Nullable final Account account, @NonNull final Context ctx) { public OwnCloudClient getClientInstance(@Nullable final Account account, @NonNull final Context context) { if (account == null) return null; if (ocClientInstance == null) { try { //Not sure below if code is used... if (!AppConstants.USER_AGENT.equals(OwnCloudClientManagerFactory.getUserAgent())) { OwnCloudClientManagerFactory.setUserAgent(AppConstants.USER_AGENT); ocClientInstance = createOcClient(account, context); } final Uri serverUri = Uri.parse(AccountUtils.getBaseUrlForAccount(ctx, account)); ocClientInstance = OwnCloudClientFactory.createOwnCloudClient(serverUri, ctx, true); final String pwd = getAcountPwd(account, ctx); Timber.v("name: %s \n%s", account.name, AccountManager.get(ctx).getUserData(account, AccountUtils.Constants.KEY_USER_ID)); return ocClientInstance; } ocClientInstance.setCredentials(new OwnCloudBasicCredentials(account.name, pwd)); } catch (AccountUtils.AccountNotFoundException exception) { Timber.e(exception); return null; @Nullable public NextcloudClient getNcClientInstance(@Nullable final Account account, @NonNull final Context context) { if (account == null) return null; if (ncClientInstance == null) { ncClientInstance = createNcClient(account, context); } return ncClientInstance; } if (ocClientInstance.getUserId() == null ) { final String userId = AccountManager.get(ctx).getUserData(account, AppConstants.ACCOUNT_USER_ID_KEY); ocClientInstance.setUserId(userId); public void cleanUp() { ncClientInstance = null; ocClientInstance = null; } return ocClientInstance; @NonNull public static DavClientProvider getInstance() { return instance; } @Nullable private OwnCloudBasicCredentials getOcCredentials(@NonNull Account account, @NonNull Context context) throws AccountUtils.AccountNotFoundException { final String pwd = AccountManager.get(context).getPassword(account); if (pwd == null) return null; return new OwnCloudBasicCredentials(account.name, pwd); } @Nullable public NextcloudClient getNcClientInstance(@Nullable final Account account, @NonNull final Context ctx) { Timber.v("getNcClientInstance()"); if (ncClientInstance == null) { private OwnCloudClient createOcClient(@NonNull Account account, @NonNull Context context) { OwnCloudClientManagerFactory.setUserAgent(AppConstants.USER_AGENT); final OwnCloudClient result; try { final Uri serverUri = Uri.parse(AccountUtils.getBaseUrlForAccount(ctx, account)); final String credentials = OkHttpCredentialsUtil.basic(account.name, getAcountPwd(account, ctx)); final OwnCloudBasicCredentials credentials = getOcCredentials(account, context); if (credentials == null) return null; ncClientInstance = OwnCloudClientFactory.createNextcloudClient(serverUri, account.name, credentials, ctx, true); final Uri serverUri = Uri.parse(AccountUtils.getBaseUrlForAccount(context, account)); result = OwnCloudClientFactory.createOwnCloudClient(serverUri, context, true); result.setCredentials(credentials); } catch (AccountUtils.AccountNotFoundException exception) { Timber.e("Can't get server URI for account: %s\n%s", account.name,exception.getMessage()); Timber.e(exception); return null; } ncClientInstance.setUserId(account.name); } return ncClientInstance; if (result.getUserId() == null) { final String userId = AccountManager.get(context).getUserData(account, AppConstants.ACCOUNT_USER_ID_KEY); result.setUserId(userId); } public void cleanUp() { ncClientInstance = null; ocClientInstance = null; return result; } @Nullable private static String getAcountPwd(Account account, Context ctx) throws AccountUtils.AccountNotFoundException { return AccountManager.get(ctx).getPassword(account); private String getNcCredentials(@NonNull Account account, @NonNull Context context) throws AccountUtils.AccountNotFoundException { final String pwd = AccountManager.get(context).getPassword(account); if (pwd == null) return null; return OkHttpCredentialsUtil.basic(account.name, pwd); } /** Point d'accès pour l'instance unique du singleton */ @NonNull public static DavClientProvider getInstance() { return instance; @Nullable private NextcloudClient createNcClient(@NonNull Account account, @NonNull Context context) { final NextcloudClient result; try { final String credentials = getNcCredentials(account, context); if (credentials == null) return null; final Uri serverUri = Uri.parse(AccountUtils.getBaseUrlForAccount(context, account)); result = OwnCloudClientFactory.createNextcloudClient(serverUri, account.name, credentials, context, true); } catch (AccountUtils.AccountNotFoundException exception) { Timber.e("Can't get server URI for account: %s\n%s", account.name, exception.getMessage()); return null; } result.setUserId(account.name); return result; } } No newline at end of file
app/src/main/java/foundation/e/drive/utils/ServiceExceptionHandler.java +8 −7 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ public class ServiceExceptionHandler implements UncaughtExceptionHandler{ public final static String CRASH_LOG_FOLDER = "crash-logs"; public final static String LOG_FILE_NAME_PREFIX = "eDrive-crash-"; public final static String LOG_FILE_EXTENSION = ".log"; private UncaughtExceptionHandler defaultUEH; private final UncaughtExceptionHandler defaultUEH; Service service; Loading @@ -51,7 +51,7 @@ public class ServiceExceptionHandler implements UncaughtExceptionHandler{ if (isExternalStorageAvailable() && !isExternalStorageReadOnly()) { final Long timestamp = System.currentTimeMillis(); final long timestamp = System.currentTimeMillis(); final String fileName = LOG_FILE_NAME_PREFIX+timestamp+LOG_FILE_EXTENSION; Loading Loading @@ -90,6 +90,7 @@ public class ServiceExceptionHandler implements UncaughtExceptionHandler{ * @param exception the exception * @return the Stacktrace as a string */ @NonNull private String getStackTraceAsString(Throwable exception) { final StringWriter sw = new StringWriter(); final PrintWriter pw = new PrintWriter(sw); Loading