From d131b4b9de46a129a53cc21746333d39a2932a0a Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 20 Mar 2026 16:17:38 +0100 Subject: [PATCH 1/3] Rename .java to .kt Signed-off-by: alperozturk96 --- .../{SyncedFolderProvider.java => SyncedFolderProvider.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/src/main/java/com/owncloud/android/datamodel/{SyncedFolderProvider.java => SyncedFolderProvider.kt} (100%) diff --git a/app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.java b/app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.kt similarity index 100% rename from app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.java rename to app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.kt From 4d9a512ac03d7f361801602b88131e7ca390328e Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 20 Mar 2026 16:17:39 +0100 Subject: [PATCH 2/3] refactor: sync folder provider convert to kt Signed-off-by: alperozturk96 --- .../android/datamodel/SyncedFolderProvider.kt | 566 ++++++------------ .../ui/adapter/TrashbinListAdapter.java | 2 +- 2 files changed, 188 insertions(+), 380 deletions(-) diff --git a/app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.kt b/app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.kt index 6eb1b69c2c1e..90ebda18f639 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.kt +++ b/app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.kt @@ -1,422 +1,230 @@ /* * Nextcloud - Android Client * - * SPDX-FileCopyrightText: 2016 Andy Scherzinger - * SPDX-FileCopyrightText: 2016 Nextcloud - * SPDX-License-Identifier: AGPL-3.0-or-later OR GPL-2.0-only + * SPDX-FileCopyrightText: 2026 Alper Ozturk + * SPDX-License-Identifier: AGPL-3.0-or-later */ -package com.owncloud.android.datamodel; - -import android.content.ContentResolver; -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.net.Uri; - -import com.nextcloud.client.account.User; -import com.nextcloud.client.core.Clock; -import com.nextcloud.client.database.NextcloudDatabase; -import com.nextcloud.client.database.dao.SyncedFolderDao; -import com.nextcloud.client.database.entity.SyncedFolderEntity; -import com.nextcloud.client.database.entity.SyncedFolderEntityKt; -import com.nextcloud.client.preferences.AppPreferences; -import com.nextcloud.client.preferences.AppPreferencesImpl; -import com.nextcloud.client.preferences.SubFolderRule; -import com.owncloud.android.MainApp; -import com.owncloud.android.db.ProviderMeta; -import com.owncloud.android.lib.common.utils.Log_OC; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; -import java.util.Observable; - -import javax.annotation.Nullable; - -import androidx.annotation.NonNull; - -import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR; - -/** - * Database provider for handling the persistence aspects of {@link SyncedFolder}s. - */ -public class SyncedFolderProvider extends Observable { - static private final String TAG = SyncedFolderProvider.class.getSimpleName(); - - private final ContentResolver mContentResolver; - private final AppPreferences preferences; - private final Clock clock; - public final SyncedFolderDao dao = NextcloudDatabase.getInstance(MainApp.getAppContext()).syncedFolderDao(); - - /** - * constructor. - * - * @param contentResolver the ContentResolver to work with. - */ - public SyncedFolderProvider(ContentResolver contentResolver, AppPreferences preferences, Clock clock) { - if (contentResolver == null) { - throw new IllegalArgumentException("Cannot create an instance with a NULL contentResolver"); - } - mContentResolver = contentResolver; - this.preferences = preferences; - this.clock = clock; - SyncedFolderObserver.INSTANCE.start(dao); - } - - /** - * Stores a synced folder object in database. - * - * @param syncedFolder synced folder to store - * @return synced folder id, -1 if the insert process fails. - */ - public long storeSyncedFolder(SyncedFolder syncedFolder) { - Log_OC.v(TAG, "Inserting " + syncedFolder.getLocalPath() + " with enabled=" + syncedFolder.isEnabled()); - - ContentValues cv = createContentValuesFromSyncedFolder(syncedFolder); - - Uri result = mContentResolver.insert(ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, cv); - - if (result != null) { - return Long.parseLong(result.getPathSegments().get(1)); - } else { - Log_OC.e(TAG, "Failed to insert item " + syncedFolder.getLocalPath() + " into folder sync db."); - return -1; - } - } - - public int countEnabledSyncedFolders() { - int count = 0; - Cursor cursor = mContentResolver.query( +package com.owncloud.android.datamodel + +import android.content.ContentResolver +import android.content.ContentValues +import android.content.Context +import android.database.Cursor +import com.nextcloud.client.account.User +import com.nextcloud.client.core.Clock +import com.nextcloud.client.database.NextcloudDatabase +import com.nextcloud.client.database.dao.SyncedFolderDao +import com.nextcloud.client.database.entity.toSyncedFolder +import com.nextcloud.client.preferences.AppPreferences +import com.nextcloud.client.preferences.AppPreferencesImpl +import com.nextcloud.client.preferences.SubFolderRule +import com.owncloud.android.datamodel.MediaFolderType.Companion.getById +import com.owncloud.android.datamodel.SyncedFolderObserver.start +import com.owncloud.android.db.ProviderMeta +import com.owncloud.android.lib.common.utils.Log_OC +import java.io.File +import java.util.Observable + +class SyncedFolderProvider( + contentResolver: ContentResolver, + @JvmField val preferences: AppPreferences, + private val clock: Clock +) : Observable() { + + companion object { + private val TAG: String = SyncedFolderProvider::class.java.getSimpleName() + } + + private val resolver: ContentResolver = contentResolver + private val dao: SyncedFolderDao = NextcloudDatabase.instance().syncedFolderDao() + + init { + start(dao) + } + + fun storeSyncedFolder(syncedFolder: SyncedFolder): Long { + Log_OC.v(TAG, "Inserting ${syncedFolder.localPath} with enabled=${syncedFolder.isEnabled}") + return resolver.insert( ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, - null, - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ENABLED + " = ?", - new String[]{"1"}, - null - ); - - if (cursor != null) { - count = cursor.getCount(); - cursor.close(); - } - - return count; + createContentValuesFromSyncedFolder(syncedFolder) + ) + ?.pathSegments?.get(1)?.toLong() + ?: run { + Log_OC.e(TAG, "Failed to insert item ${syncedFolder.localPath} into folder sync db.") + -1L + } } - /** - * get all synced folder entries. - * - * @return all synced folder entries, empty if none have been found - */ - public List getSyncedFolders() { - Cursor cursor = mContentResolver.query( + fun countEnabledSyncedFolders(): Int = resolver.query( + ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, + null, + "${ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ENABLED} = ?", + arrayOf("1"), + null + )?.use { it.count } ?: 0 + + val syncedFolders: MutableList + get() = resolver.query( ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, null, null, null, null - ); - - if (cursor != null) { - List list = new ArrayList<>(cursor.getCount()); - if (cursor.moveToFirst()) { - do { - SyncedFolder syncedFolder = createSyncedFolderFromCursor(cursor); - if (syncedFolder == null) { - Log_OC.e(TAG, "SyncedFolder could not be created from cursor"); - } else { - list.add(cursor.getPosition(), syncedFolder); - } - } while (cursor.moveToNext()); - + )?.use { cursor -> + ArrayList(cursor.count).also { + while (cursor.moveToNext()) it.add(createSyncedFolderFromCursor(cursor)) } - cursor.close(); - return list; - } else { - Log_OC.e(TAG, "DB error creating read all cursor for synced folders."); + } ?: run { + Log_OC.e(TAG, "DB error creating read all cursor for synced folders.") + ArrayList(0) } - return new ArrayList<>(0); - } - - /** - * Update upload status of file uniquely referenced by id. - * - * @param id synced folder id. - * @param enabled new status. - * @return the number of rows updated. - */ - public int updateSyncedFolderEnabled(long id, Boolean enabled) { - Log_OC.v(TAG, "Storing synced folder id" + id + " with enabled=" + enabled); - - int result = 0; - Cursor cursor = mContentResolver.query( + fun updateSyncedFolderEnabled(id: Long, enabled: Boolean): Int { + Log_OC.v(TAG, "Storing synced folder id$id with enabled=$enabled") + return resolver.query( ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, null, - ProviderMeta.ProviderTableMeta._ID + "=?", - new String[]{String.valueOf(id)}, + "${ProviderMeta.ProviderTableMeta._ID}=?", + arrayOf(id.toString()), null - ); - - if (cursor != null && cursor.getCount() == 1) { - while (cursor.moveToNext()) { - // read sync folder object and update - SyncedFolder syncedFolder = createSyncedFolderFromCursor(cursor); - - syncedFolder.setEnabled(enabled, clock.getCurrentTime()); - - // update sync folder object in db - result = updateSyncFolder(syncedFolder); - - } - } else { - if (cursor == null) { - Log_OC.e(TAG, "Sync folder db cursor for ID=" + id + " in NULL."); + )?.use { cursor -> + if (cursor.count == 1 && cursor.moveToNext()) { + val syncedFolder = createSyncedFolderFromCursor(cursor) + syncedFolder.setEnabled(enabled, clock.currentTime) + updateSyncFolder(syncedFolder) } else { - Log_OC.e(TAG, cursor.getCount() + " items for id=" + id + " available in sync folder database. " + - "Expected 1. Failed to update sync folder db."); + Log_OC.e( + TAG, + "${cursor.count} items for id=$id available in sync folder database. " + + "Expected 1. Failed to update sync folder db." + ) + 0 } + } ?: run { + Log_OC.e(TAG, "Sync folder db cursor for ID=$id in NULL.") + 0 } - - if (cursor != null) { - cursor.close(); - } - - return result; - } - - public SyncedFolder findByLocalPathAndAccount(String localPath, User user) { - final SyncedFolderEntity entity = dao.findByLocalPathAndAccount(localPath, user.getAccountName()); - if (entity == null) { - return null; - } - return SyncedFolderEntityKt.toSyncedFolder(entity); } - @Nullable - public SyncedFolder getSyncedFolderByID(Long syncedFolderID) { - SyncedFolder result = null; - Cursor cursor = mContentResolver.query( - ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, - null, - ProviderMeta.ProviderTableMeta._ID + " =? ", - new String[]{syncedFolderID.toString()}, - null - ); - - if (cursor != null && cursor.getCount() == 1 && cursor.moveToFirst()) { - result = createSyncedFolderFromCursor(cursor); - } - - if (cursor != null) { - cursor.close(); - } - - return result; + fun findByLocalPathAndAccount(localPath: String, user: User): SyncedFolder? = + dao.findByLocalPathAndAccount(localPath, user.accountName)?.toSyncedFolder() + fun getSyncedFolderByID(syncedFolderID: Long): SyncedFolder? = resolver.query( + ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, + null, + "${ProviderMeta.ProviderTableMeta._ID} =?", + arrayOf(syncedFolderID.toString()), + null + )?.use { cursor -> + if (cursor.count == 1 && cursor.moveToFirst()) createSyncedFolderFromCursor(cursor) else null } - /** - * Delete all synced folders for an account - * - * @param user whose synced folders should be deleted - */ - public int deleteSyncFoldersForAccount(User user) { - return mContentResolver.delete( - ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ACCOUNT + " = ?", - new String[]{String.valueOf(user.getAccountName())} - ); - } + fun deleteSyncFoldersForAccount(user: User): Int = resolver.delete( + ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, + "${ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ACCOUNT} = ?", + arrayOf(user.accountName) + ) - /** - * Delete a synced folder from the db - * - * @param id for the synced folder. - */ - private void deleteSyncFolderWithId(long id) { - mContentResolver.delete( + private fun deleteSyncFolderWithId(id: Long) { + resolver.delete( ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, - ProviderMeta.ProviderTableMeta._ID + " = ?", - new String[]{String.valueOf(id)} - ); + "${ProviderMeta.ProviderTableMeta._ID} = ?", + arrayOf(id.toString()) + ) } - - /** - * Try to figure out if a path exists for synced folder, and if not, go one folder back - * Otherwise, delete the entry - * - * @param context the context. - */ - public void updateAutoUploadPaths(Context context) { - List syncedFolders = getSyncedFolders(); - for (SyncedFolder syncedFolder : syncedFolders) { - if (!new File(syncedFolder.getLocalPath()).exists()) { - String localPath = syncedFolder.getLocalPath(); - if (localPath.endsWith(PATH_SEPARATOR)) { - localPath = localPath.substring(0, localPath.lastIndexOf('/')); + fun updateAutoUploadPaths(context: Context?) { + for (syncedFolder in syncedFolders) { + if (!File(syncedFolder.localPath).exists()) { + var localPath = syncedFolder.localPath + if (localPath.endsWith(OCFile.PATH_SEPARATOR)) { + localPath = localPath.substring(0, localPath.lastIndexOf('/')) } - localPath = localPath.substring(0, localPath.lastIndexOf('/')); - if (new File(localPath).exists()) { - syncedFolder.setLocalPath(localPath); - updateSyncFolder(syncedFolder); + localPath = localPath.substring(0, localPath.lastIndexOf('/')) + + if (File(localPath).exists()) { + syncedFolder.localPath = localPath + updateSyncFolder(syncedFolder) } else { - deleteSyncFolderWithId(syncedFolder.getId()); + deleteSyncFolderWithId(syncedFolder.id) } } } - if (context != null) { - AppPreferences preferences = AppPreferencesImpl.fromContext(context); - preferences.setAutoUploadPathsUpdateEnabled(true); - } - } - - /** - * delete any records of synchronized folders that are not within the given list of ids. - * - * @param ids the list of ids to be excluded from deletion. - * @return number of deleted records. - */ - public int deleteSyncedFoldersNotInList(List ids) { - int result = mContentResolver.delete( - ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, - ProviderMeta.ProviderTableMeta._ID + " NOT IN (?)", - new String[]{String.valueOf(ids)} - ); - - if(result > 0) { - preferences.setLegacyClean(true); - } - - return result; - } - - /** - * delete record of synchronized folder with the given id. - */ - public int deleteSyncedFolder(long id) { - return mContentResolver.delete( - ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, - ProviderMeta.ProviderTableMeta._ID + " = ?", - new String[]{String.valueOf(id)} - ); - } - - public AppPreferences getPreferences() { - return preferences; + context?.let { AppPreferencesImpl.fromContext(it).setAutoUploadPathsUpdateEnabled(true) } } - /** - * update given synced folder. - * - * @param syncedFolder the synced folder to be updated. - * @return the number of rows updated. - */ - public int updateSyncFolder(SyncedFolder syncedFolder) { - Log_OC.v(TAG, "Updating " + syncedFolder.getLocalPath() + " with enabled=" + syncedFolder.isEnabled()); + fun deleteSyncedFoldersNotInList(ids: MutableList?): Int = resolver.delete( + ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, + "${ProviderMeta.ProviderTableMeta._ID} NOT IN (?)", + arrayOf(ids.toString()) + ).also { if (it > 0) preferences.setLegacyClean(true) } - ContentValues cv = createContentValuesFromSyncedFolder(syncedFolder); + fun deleteSyncedFolder(id: Long): Int = resolver.delete( + ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, + "${ProviderMeta.ProviderTableMeta._ID} = ?", + arrayOf(id.toString()) + ) - return mContentResolver.update( + fun updateSyncFolder(syncedFolder: SyncedFolder): Int { + Log_OC.v(TAG, "Updating ${syncedFolder.localPath} with enabled=${syncedFolder.isEnabled}") + return resolver.update( ProviderMeta.ProviderTableMeta.CONTENT_URI_SYNCED_FOLDERS, - cv, - ProviderMeta.ProviderTableMeta._ID + "=?", - new String[]{String.valueOf(syncedFolder.getId())} - ); - } - - /** - * maps a cursor into a SyncedFolder object. - * - * @param cursor the db cursor - * @return the mapped SyncedFolder, null if cursor is null - */ - private SyncedFolder createSyncedFolderFromCursor(Cursor cursor) { - SyncedFolder syncedFolder = null; - if (cursor != null) { - long id = cursor.getLong(cursor.getColumnIndexOrThrow(ProviderMeta.ProviderTableMeta._ID)); - String localPath = cursor.getString(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_LOCAL_PATH)); - String remotePath = cursor.getString(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_REMOTE_PATH)); - boolean wifiOnly = cursor.getInt(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_WIFI_ONLY)) == 1; - boolean chargingOnly = cursor.getInt(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_CHARGING_ONLY)) == 1; - boolean existing = cursor.getInt(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_EXISTING)) == 1; - boolean subfolderByDate = cursor.getInt(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_SUBFOLDER_BY_DATE)) == 1; - String accountName = cursor.getString(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ACCOUNT)); - int uploadAction = cursor.getInt(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_UPLOAD_ACTION)); - int nameCollisionPolicy = cursor.getInt(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_NAME_COLLISION_POLICY)); - boolean enabled = cursor.getInt(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ENABLED)) == 1; - long enabledTimestampMs = cursor.getLong(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ENABLED_TIMESTAMP_MS)); - MediaFolderType type = MediaFolderType.getById(cursor.getInt(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_TYPE))); - boolean hidden = cursor.getInt(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_HIDDEN)) == 1; - SubFolderRule subFolderRule = SubFolderRule.values()[cursor.getInt( - cursor.getColumnIndexOrThrow(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_SUBFOLDER_RULE))]; - boolean excludeHidden = cursor.getInt(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_EXCLUDE_HIDDEN)) == 1; - long lastScanTimestampMs = cursor.getLong(cursor.getColumnIndexOrThrow( - ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_LAST_SCAN_TIMESTAMP_MS)); - - - syncedFolder = new SyncedFolder(id, - localPath, - remotePath, - wifiOnly, - chargingOnly, - existing, - subfolderByDate, - accountName, - uploadAction, - nameCollisionPolicy, - enabled, - enabledTimestampMs, - type, - hidden, - subFolderRule, - excludeHidden, - lastScanTimestampMs); - } - return syncedFolder; - } - - /** - * create ContentValues object based on given SyncedFolder. - * - * @param syncedFolder the synced folder - * @return the corresponding ContentValues object - */ - @NonNull - private ContentValues createContentValuesFromSyncedFolder(SyncedFolder syncedFolder) { - ContentValues cv = new ContentValues(); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_LOCAL_PATH, syncedFolder.getLocalPath()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_REMOTE_PATH, syncedFolder.getRemotePath()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_WIFI_ONLY, syncedFolder.isWifiOnly()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_CHARGING_ONLY, syncedFolder.isChargingOnly()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_EXISTING, syncedFolder.isExisting()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ENABLED, syncedFolder.isEnabled()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ENABLED_TIMESTAMP_MS, syncedFolder.getEnabledTimestampMs()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_SUBFOLDER_BY_DATE, syncedFolder.isSubfolderByDate()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ACCOUNT, syncedFolder.getAccount()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_UPLOAD_ACTION, syncedFolder.getUploadAction()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_NAME_COLLISION_POLICY, - syncedFolder.getNameCollisionPolicyInt()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_TYPE, syncedFolder.getType().id); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_HIDDEN, syncedFolder.isHidden()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_SUBFOLDER_RULE, syncedFolder.getSubfolderRule().ordinal()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_EXCLUDE_HIDDEN, syncedFolder.isExcludeHidden()); - cv.put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_LAST_SCAN_TIMESTAMP_MS, syncedFolder.getLastScanTimestampMs()); - return cv; + createContentValuesFromSyncedFolder(syncedFolder), + "${ProviderMeta.ProviderTableMeta._ID}=?", + arrayOf(syncedFolder.id.toString()) + ) + } + + private fun createSyncedFolderFromCursor(cursor: Cursor): SyncedFolder { + fun str(col: String) = cursor.getString(cursor.getColumnIndexOrThrow(col)) + fun int(col: String) = cursor.getInt(cursor.getColumnIndexOrThrow(col)) + fun long(col: String) = cursor.getLong(cursor.getColumnIndexOrThrow(col)) + fun bool(col: String) = int(col) == 1 + + return SyncedFolder( + long(ProviderMeta.ProviderTableMeta._ID), + str(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_LOCAL_PATH), + str(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_REMOTE_PATH), + bool(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_WIFI_ONLY), + bool(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_CHARGING_ONLY), + bool(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_EXISTING), + bool(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_SUBFOLDER_BY_DATE), + str(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ACCOUNT), + int(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_UPLOAD_ACTION), + int(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_NAME_COLLISION_POLICY), + bool(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ENABLED), + long(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ENABLED_TIMESTAMP_MS), + getById(int(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_TYPE)), + bool(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_HIDDEN), + SubFolderRule.entries[int(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_SUBFOLDER_RULE)], + bool(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_EXCLUDE_HIDDEN), + long(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_LAST_SCAN_TIMESTAMP_MS) + ) + } + + private fun createContentValuesFromSyncedFolder(syncedFolder: SyncedFolder): ContentValues = ContentValues().apply { + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_LOCAL_PATH, syncedFolder.localPath) + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_REMOTE_PATH, syncedFolder.remotePath) + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_WIFI_ONLY, syncedFolder.isWifiOnly) + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_CHARGING_ONLY, syncedFolder.isChargingOnly) + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_EXISTING, syncedFolder.isExisting) + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ENABLED, syncedFolder.isEnabled) + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ENABLED_TIMESTAMP_MS, syncedFolder.enabledTimestampMs) + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_SUBFOLDER_BY_DATE, syncedFolder.isSubfolderByDate) + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_ACCOUNT, syncedFolder.account) + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_UPLOAD_ACTION, syncedFolder.uploadAction) + put( + ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_NAME_COLLISION_POLICY, + syncedFolder.nameCollisionPolicyInt + ) + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_TYPE, syncedFolder.type.id) + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_HIDDEN, syncedFolder.isHidden) + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_SUBFOLDER_RULE, syncedFolder.subfolderRule.ordinal) + put(ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_EXCLUDE_HIDDEN, syncedFolder.isExcludeHidden) + put( + ProviderMeta.ProviderTableMeta.SYNCED_FOLDER_LAST_SCAN_TIMESTAMP_MS, + syncedFolder.lastScanTimestampMs + ) } } diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java index f38266855931..3f3e15870adb 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java @@ -172,7 +172,7 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi float cornerRadius = context.getResources().getDimension(R.dimen.selected_grid_container_radius); - boolean isDarkModeActive = (syncedFolderProvider.getPreferences().isDarkModeEnabled()); + boolean isDarkModeActive = (syncedFolderProvider.preferences.isDarkModeEnabled()); int selectedItemBackgroundColorId; if (isDarkModeActive) { selectedItemBackgroundColorId = R.color.action_mode_background; From c037f0454a40e0c6c0ca2dd4787bfb91c35cbcf7 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Fri, 20 Mar 2026 16:18:52 +0100 Subject: [PATCH 3/3] refactor: sync folder provider convert to kt Signed-off-by: alperozturk96 --- .../java/com/owncloud/android/datamodel/SyncedFolderProvider.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.kt b/app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.kt index 90ebda18f639..1dae23982037 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.kt +++ b/app/src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.kt @@ -32,7 +32,7 @@ class SyncedFolderProvider( ) : Observable() { companion object { - private val TAG: String = SyncedFolderProvider::class.java.getSimpleName() + private val TAG: String = SyncedFolderProvider::class.java.simpleName } private val resolver: ContentResolver = contentResolver