diff --git a/changelog/unreleased/4865 b/changelog/unreleased/4865 new file mode 100644 index 00000000000..edc93418b32 --- /dev/null +++ b/changelog/unreleased/4865 @@ -0,0 +1,6 @@ +Change: Bump AGP from 8.7.2 to 9.2.1 + +Android Gradle Plugin (AGP) has been updated from version 8.7.2 to 9.2.1, along +with other dependencies required to build the app with this new version. + +https://github.com/owncloud/android/pull/4865 diff --git a/gradle.properties b/gradle.properties index 022f0d32f33..2516ecb8211 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,4 @@ -android.defaults.buildfeatures.buildconfig=true android.enableJetifier=true -android.nonFinalResIds=false android.nonTransitiveRClass=false android.useAndroidX=true org.gradle.jvmargs=-Xmx1536M diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a965f1c1cdb..58264908596 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -androidGradlePlugin = "8.7.2" +androidGradlePlugin = "9.2.1" androidxActivity = "1.6.1" androidxAnnotation = "1.6.0" androidxAppCompat = "1.6.1" @@ -15,8 +15,8 @@ androidxFragment = "1.5.7" androidxLegacy = "1.0.0" androidxLifecycle = "2.5.1" androidxLifecycleExtensions = "2.2.0" -androidxRoom = "2.5.1" -androidxSqlite = "2.3.1" +androidxRoom = "2.8.4" +androidxSqlite = "2.5.2" androidxTest = "1.4.0" androidxTestExt = "1.1.5" androidxTestMonitor = "1.6.1" @@ -33,9 +33,9 @@ glide = "4.15.1" glideToVectorYou = "v2.0.0" junit4 = "4.13.2" koin = "3.3.3" -kotlin = "1.9.20" +kotlin = "2.3.10" kotlinxCoroutines = "1.9.0" -ksp = "1.9.20-1.0.14" +ksp = "2.3.10" ktlint = "14.2.0" markwon = "4.6.2" material = "1.8.0" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 19cfad969ba..221c4f98228 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/owncloudApp/build.gradle b/owncloudApp/build.gradle index 273c44cc2f1..4f538140926 100644 --- a/owncloudApp/build.gradle +++ b/owncloudApp/build.gradle @@ -1,6 +1,5 @@ apply plugin: 'com.android.application' apply plugin: 'com.google.devtools.ksp' -apply plugin: 'kotlin-android' apply plugin: 'kotlin-parcelize' def commitSHA1 = 'COMMIT_SHA1' @@ -93,11 +92,11 @@ dependencies { } android { - compileSdkVersion sdkCompileVersion + compileSdk sdkCompileVersion defaultConfig { - minSdkVersion sdkMinVersion - targetSdkVersion sdkTargetVersion + minSdk sdkMinVersion + targetSdk sdkTargetVersion testInstrumentationRunner "com.owncloud.android.utils.OCTestAndroidJUnitRunner" @@ -113,10 +112,6 @@ android { targetCompatibility JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() - } - sourceSets { androidTest.java.srcDirs += "src/test-common/java" test.java.srcDirs += "src/test-common/java" @@ -166,11 +161,6 @@ android { } } - applicationVariants.all { variant -> - def appName = System.env.OC_APP_NAME - setOutputFileName(variant, appName, project) - } - testOptions { packagingOptions { jniLibs { @@ -183,9 +173,10 @@ android { buildFeatures { viewBinding true + buildConfig true } - packagingOptions { + packaging { resources.excludes.add("META-INF/*") } @@ -194,50 +185,23 @@ android { } // Updates output file names of a given variant to format -// [appName].[variant.versionName].[OC_BUILD_NUMBER]-[variant.name].apk. -// -// OC_BUILD_NUMBER is an environment variable read directly in this method. If undefined, it's not added. -// -// @param variant Build variant instance which output file name will be updated. -// @param appName String to use as first part of the new file name. May be undefined, the original -// project.archivesBaseName property will be used instead. -// @param callerProject Caller project. - -def setOutputFileName(variant, appName, callerProject) { - logger.info("Setting new name for output of variant $variant.name") - - def originalFile = variant.outputs[0].outputFile - def originalName = originalFile.name - println "originalName is $originalName" - - def newName = "" - - if (appName) { - newName += appName - } else { - newName += "owncloud" - } - - def versionName = "$variant.mergedFlavor.versionName" - if (variant.mergedFlavor.manifestPlaceholders.versionName != null) { - versionName = "$variant.mergedFlavor.manifestPlaceholders.versionName" - } - if (variant.buildType.manifestPlaceholders.versionName != null) { - versionName = "$variant.buildType.manifestPlaceholders.versionName" - } - newName += "_$versionName" - - def buildNumber = System.env.OC_BUILD_NUMBER - if (buildNumber) { - newName += "_$buildNumber" - } - - newName += originalName.substring(callerProject.archivesBaseName.length()) - - println "$variant.name: newName is $newName" - - variant.outputs.all { - outputFileName = newName +// [appName].[variant.versionName].[OC_BUILD_NUMBER]-[variant.name].apk using the new AGP Variant API (androidComponents) +androidComponents { + onVariants(selector().all()) { variant -> + def appName = System.env.OC_APP_NAME ?: "owncloud" + def buildNumber = System.env.OC_BUILD_NUMBER + variant.outputs.each { output -> + if (output.outputType == com.android.build.api.variant.VariantOutputConfiguration.OutputType.SINGLE) { + output.outputFileName.set(output.versionName.map { versionName -> + def newName = appName + "_" + versionName + if (buildNumber) { + newName += "_" + buildNumber + } + newName += "-" + variant.name + ".apk" + newName + }) + } + } } } diff --git a/owncloudApp/src/main/java/com/owncloud/android/media/MediaControlView.java b/owncloudApp/src/main/java/com/owncloud/android/media/MediaControlView.java index c2ae87da5a7..e459398a5ba 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/media/MediaControlView.java +++ b/owncloudApp/src/main/java/com/owncloud/android/media/MediaControlView.java @@ -4,7 +4,9 @@ * @author David A. Velasco * @author Christian Schabesberger * @author David González Verdugo - * Copyright (C) 2020 ownCloud GmbH. + * @author Jorge Aguado Recio + * + * Copyright (C) 2026 ownCloud GmbH. *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2,
@@ -292,32 +294,28 @@ public void setEnabled(boolean enabled) {
public void onClick(View v) {
int pos;
boolean playing = mPlayer.isPlaying();
- switch (v.getId()) {
-
- case R.id.playBtn:
- doPauseResume();
- break;
-
- case R.id.rewindBtn:
- pos = mPlayer.getCurrentPosition();
- pos -= 5000;
- mPlayer.seekTo(pos);
- if (!playing) {
- mPlayer.pause(); // necessary in some 2.3.x devices
- }
- setProgress();
- break;
-
- case R.id.forwardBtn:
- pos = mPlayer.getCurrentPosition();
- pos += 15000;
- mPlayer.seekTo(pos);
- if (!playing) {
- mPlayer.pause(); // necessary in some 2.3.x devices
- }
- setProgress();
- break;
-
+ int id = v.getId();
+
+ // Using an if / else if / else block because Java switch statements
+ // with resource ID comparisons are no longer supported in AGP 9
+ if (id == R.id.playBtn) {
+ doPauseResume();
+ } else if (id == R.id.rewindBtn) {
+ pos = mPlayer.getCurrentPosition();
+ pos -= 5000;
+ mPlayer.seekTo(pos);
+ if (!playing) {
+ mPlayer.pause(); // necessary in some 2.3.x devices
+ }
+ setProgress();
+ } else if (id == R.id.forwardBtn) {
+ pos = mPlayer.getCurrentPosition();
+ pos += 15000;
+ mPlayer.seekTo(pos);
+ if (!playing) {
+ mPlayer.pause(); // necessary in some 2.3.x devices
+ }
+ setProgress();
}
}
diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/shares/PublicShareDialogFragment.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/shares/PublicShareDialogFragment.kt
index 3853466b2e8..3defd0e45ab 100644
--- a/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/shares/PublicShareDialogFragment.kt
+++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/sharing/shares/PublicShareDialogFragment.kt
@@ -6,8 +6,9 @@
* @author Christian Schabesberger
* @author Aitor Ballesteros Pavón
* @author Juan Carlos Garrote Gascón
+ * @author Jorge Aguado Recio
*
- * Copyright (C) 2024 ownCloud GmbH.
+ * Copyright (C) 2026 ownCloud GmbH.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2,
@@ -50,6 +51,7 @@ import com.owncloud.android.R
import com.owncloud.android.databinding.SharePublicDialogBinding
import com.owncloud.android.domain.capabilities.model.CapabilityBooleanType
import com.owncloud.android.domain.capabilities.model.OCCapability
+import com.owncloud.android.domain.capabilities.model.PasswordPolicy
import com.owncloud.android.domain.exceptions.UnhandledHttpCodeException
import com.owncloud.android.domain.files.model.OCFile
import com.owncloud.android.domain.sharing.shares.model.OCShare
@@ -364,7 +366,7 @@ class PublicShareDialogFragment : DialogFragment() {
}
}
- private fun updateRequirementsPasswordPolicy(password: String, passwordPolicy: OCCapability.PasswordPolicy) {
+ private fun updateRequirementsPasswordPolicy(password: String, passwordPolicy: PasswordPolicy) {
var hasMinCharacters = true
var hasMaxCharacters = true
diff --git a/owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/links/SetPasswordDialogFragment.kt b/owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/links/SetPasswordDialogFragment.kt
index c4ec3d50126..15025da1d1b 100644
--- a/owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/links/SetPasswordDialogFragment.kt
+++ b/owncloudApp/src/main/java/com/owncloud/android/presentation/spaces/links/SetPasswordDialogFragment.kt
@@ -37,7 +37,7 @@ import androidx.core.widget.doOnTextChanged
import androidx.fragment.app.DialogFragment
import com.owncloud.android.R
import com.owncloud.android.databinding.SetPasswordDialogBinding
-import com.owncloud.android.domain.capabilities.model.OCCapability
+import com.owncloud.android.domain.capabilities.model.PasswordPolicy
import com.owncloud.android.presentation.capabilities.CapabilityViewModel
import com.owncloud.android.presentation.common.UIResult
import com.owncloud.android.presentation.sharing.generatePassword
@@ -57,7 +57,7 @@ class SetPasswordDialogFragment: DialogFragment() {
private lateinit var setPasswordListener: SetPasswordListener
- private var passwordPolicy: OCCapability.PasswordPolicy? = null
+ private var passwordPolicy: PasswordPolicy? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = SetPasswordDialogBinding.inflate(inflater, container, false)
@@ -134,7 +134,7 @@ class SetPasswordDialogFragment: DialogFragment() {
setPasswordListener.onCancelPassword()
}
- private fun updatePasswordPolicyRequirements(password: String, passwordPolicy: OCCapability.PasswordPolicy) {
+ private fun updatePasswordPolicyRequirements(password: String, passwordPolicy: PasswordPolicy) {
var hasMinCharacters = true
var hasMaxCharacters = true
var hasUpperCase = true
diff --git a/owncloudApp/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java b/owncloudApp/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java
index 8186f00a679..2d0af9aeca0 100644
--- a/owncloudApp/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java
+++ b/owncloudApp/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java
@@ -506,23 +506,22 @@ public void onItemClick(AdapterView> parent, View view, int position, long id)
@Override
public void onClick(View v) {
// click on button
- switch (v.getId()) {
- case R.id.uploader_choose_folder:
- mUploadPath = ""; // first element in mParents is root dir, represented by "";
- // init mUploadPath with "/" results in a "//" prefix
- for (String p : mParents) {
- mUploadPath += p + File.separator;
- }
- if (!isPlainTextUpload()) {
- Timber.d("Uploading file to dir %s", mUploadPath);
- uploadFiles();
- } else {
- showUploadTextDialog();
- }
- break;
-
- default:
- throw new IllegalArgumentException("Wrong element clicked");
+ // Using an if / else if / else block because Java switch statements
+ // with resource ID comparisons are no longer supported in AGP 9
+ if (v.getId() == R.id.uploader_choose_folder) {
+ mUploadPath = ""; // first element in mParents is root dir, represented by "";
+ // init mUploadPath with "/" results in a "//" prefix
+ for (String p : mParents) {
+ mUploadPath += p + File.separator;
+ }
+ if (!isPlainTextUpload()) {
+ Timber.d("Uploading file to dir %s", mUploadPath);
+ uploadFiles();
+ } else {
+ showUploadTextDialog();
+ }
+ } else {
+ throw new IllegalArgumentException("Wrong element clicked");
}
}
diff --git a/owncloudComLibrary/build.gradle b/owncloudComLibrary/build.gradle
index 3eae2deb971..24a945520be 100644
--- a/owncloudComLibrary/build.gradle
+++ b/owncloudComLibrary/build.gradle
@@ -1,5 +1,4 @@
apply plugin: 'com.android.library'
-apply plugin: 'kotlin-android'
apply plugin: 'com.google.devtools.ksp'
apply plugin: 'kotlin-parcelize'
@@ -33,11 +32,11 @@ dependencies {
}
android {
- compileSdkVersion sdkCompileVersion
+ compileSdk sdkCompileVersion
defaultConfig {
- minSdkVersion sdkMinVersion
- targetSdkVersion sdkTargetVersion
+ minSdk sdkMinVersion
+ targetSdk sdkTargetVersion
}
compileOptions {
@@ -45,10 +44,6 @@ android {
targetCompatibility JavaVersion.VERSION_17
}
- kotlinOptions {
- jvmTarget = JavaVersion.VERSION_17.toString()
- }
-
lint {
abortOnError false
ignoreWarnings true
diff --git a/owncloudData/build.gradle b/owncloudData/build.gradle
index 7f50823a276..43d47d11110 100644
--- a/owncloudData/build.gradle
+++ b/owncloudData/build.gradle
@@ -1,13 +1,12 @@
apply plugin: 'com.android.library'
apply plugin: 'com.google.devtools.ksp'
-apply plugin: 'kotlin-android'
android {
- compileSdkVersion sdkCompileVersion
+ compileSdk sdkCompileVersion
defaultConfig {
- minSdkVersion sdkMinVersion
- targetSdkVersion sdkTargetVersion
+ minSdk sdkMinVersion
+ targetSdk sdkTargetVersion
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -31,10 +30,6 @@ android {
targetCompatibility JavaVersion.VERSION_17
}
- kotlinOptions {
- jvmTarget = JavaVersion.VERSION_17.toString()
- }
-
sourceSets {
androidTest.java.srcDirs += "src/test-common/java"
test.java.srcDirs += "src/test-common/java"
@@ -42,7 +37,7 @@ android {
androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
}
- packagingOptions {
+ packaging {
resources.excludes.add("META-INF/*")
}
diff --git a/owncloudData/schemas/com.owncloud.android.data.OwncloudDatabase/49.json b/owncloudData/schemas/com.owncloud.android.data.OwncloudDatabase/49.json
index 94eb514764b..94855211980 100644
--- a/owncloudData/schemas/com.owncloud.android.data.OwncloudDatabase/49.json
+++ b/owncloudData/schemas/com.owncloud.android.data.OwncloudDatabase/49.json
@@ -23,8 +23,7 @@
{
"fieldPath": "ext",
"columnName": "ext",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "appProviders",
@@ -35,32 +34,27 @@
{
"fieldPath": "name",
"columnName": "name",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "icon",
"columnName": "icon",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "description",
"columnName": "description",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "allowCreation",
"columnName": "allow_creation",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "defaultApplication",
"columnName": "default_application",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
}
],
"primaryKey": {
@@ -69,9 +63,7 @@
"account_name",
"mime_type"
]
- },
- "indices": [],
- "foreignKeys": []
+ }
},
{
"tableName": "folder_backup",
@@ -128,8 +120,7 @@
{
"fieldPath": "spaceId",
"columnName": "spaceId",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "id",
@@ -143,9 +134,7 @@
"columnNames": [
"id"
]
- },
- "indices": [],
- "foreignKeys": []
+ }
},
{
"tableName": "capabilities",
@@ -154,8 +143,7 @@
{
"fieldPath": "accountName",
"columnName": "account",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "versionMajor",
@@ -178,14 +166,12 @@
{
"fieldPath": "versionString",
"columnName": "version_string",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "versionEdition",
"columnName": "version_edition",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "corePollInterval",
@@ -354,98 +340,82 @@
{
"fieldPath": "appProviders.enabled",
"columnName": "app_providers_enabled",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "appProviders.version",
"columnName": "app_providers_version",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "appProviders.appsUrl",
"columnName": "app_providers_appsUrl",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "appProviders.openUrl",
"columnName": "app_providers_openUrl",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "appProviders.openWebUrl",
"columnName": "app_providers_openWebUrl",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "appProviders.newUrl",
"columnName": "app_providers_newUrl",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "spaces.enabled",
"columnName": "spaces_enabled",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "spaces.projects",
"columnName": "spaces_projects",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "spaces.shareJail",
"columnName": "spaces_shareJail",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "spaces.hasMultiplePersonalSpaces",
"columnName": "spaces_hasMultiplePersonalSpaces",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "passwordPolicy.maxCharacters",
"columnName": "password_policy_maxCharacters",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "passwordPolicy.minCharacters",
"columnName": "password_policy_minCharacters",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "passwordPolicy.minDigits",
"columnName": "password_policy_minDigits",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "passwordPolicy.minLowercaseCharacters",
"columnName": "password_policy_minLowercaseCharacters",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "passwordPolicy.minSpecialCharacters",
"columnName": "password_policy_minSpecialCharacters",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "passwordPolicy.minUppercaseCharacters",
"columnName": "password_policy_minUppercaseCharacters",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
}
],
"primaryKey": {
@@ -453,9 +423,7 @@
"columnNames": [
"id"
]
- },
- "indices": [],
- "foreignKeys": []
+ }
},
{
"tableName": "files",
@@ -464,8 +432,7 @@
{
"fieldPath": "parentId",
"columnName": "parentId",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "owner",
@@ -482,8 +449,7 @@
{
"fieldPath": "remoteId",
"columnName": "remoteId",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "length",
@@ -494,8 +460,7 @@
{
"fieldPath": "creationTimestamp",
"columnName": "creationTimestamp",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "modificationTimestamp",
@@ -512,62 +477,52 @@
{
"fieldPath": "etag",
"columnName": "etag",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "permissions",
"columnName": "permissions",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "privateLink",
"columnName": "privateLink",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "storagePath",
"columnName": "storagePath",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "name",
"columnName": "name",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "treeEtag",
"columnName": "treeEtag",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "availableOfflineStatus",
"columnName": "keepInSync",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "lastSyncDateForData",
"columnName": "lastSyncDateForData",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "lastUsage",
"columnName": "lastUsage",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "fileShareViaLink",
"columnName": "fileShareViaLink",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "needsToUpdateThumbnail",
@@ -578,26 +533,22 @@
{
"fieldPath": "modifiedAtLastSyncForData",
"columnName": "modifiedAtLastSyncForData",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "etagInConflict",
"columnName": "etagInConflict",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "fileIsDownloading",
"columnName": "fileIsDownloading",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "sharedWithSharee",
"columnName": "sharedWithSharee",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "sharedByLink",
@@ -608,8 +559,7 @@
{
"fieldPath": "spaceId",
"columnName": "spaceId",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "id",
@@ -624,7 +574,6 @@
"id"
]
},
- "indices": [],
"foreignKeys": [
{
"table": "spaces",
@@ -654,14 +603,12 @@
{
"fieldPath": "uploadWorkerUuid",
"columnName": "uploadWorkerUuid",
- "affinity": "BLOB",
- "notNull": false
+ "affinity": "BLOB"
},
{
"fieldPath": "downloadWorkerUuid",
"columnName": "downloadWorkerUuid",
- "affinity": "BLOB",
- "notNull": false
+ "affinity": "BLOB"
},
{
"fieldPath": "isSynchronizing",
@@ -676,7 +623,6 @@
"fileId"
]
},
- "indices": [],
"foreignKeys": [
{
"table": "files",
@@ -704,8 +650,7 @@
{
"fieldPath": "shareWith",
"columnName": "share_with",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "path",
@@ -734,20 +679,17 @@
{
"fieldPath": "token",
"columnName": "token",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "sharedWithDisplayName",
"columnName": "shared_with_display_name",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "sharedWithAdditionalInfo",
"columnName": "share_with_additional_info",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "isFolder",
@@ -770,14 +712,12 @@
{
"fieldPath": "name",
"columnName": "name",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "shareLink",
"columnName": "url",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "id",
@@ -791,9 +731,7 @@
"columnNames": [
"id"
]
- },
- "indices": [],
- "foreignKeys": []
+ }
},
{
"tableName": "transfers",
@@ -844,14 +782,12 @@
{
"fieldPath": "transferEndTimestamp",
"columnName": "transferEndTimestamp",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "lastResult",
"columnName": "lastResult",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "createdBy",
@@ -862,20 +798,17 @@
{
"fieldPath": "transferId",
"columnName": "transferId",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "spaceId",
"columnName": "spaceId",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "sourcePath",
"columnName": "sourcePath",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "id",
@@ -889,9 +822,7 @@
"columnNames": [
"id"
]
- },
- "indices": [],
- "foreignKeys": []
+ }
},
{
"tableName": "spaces",
@@ -906,8 +837,7 @@
{
"fieldPath": "driveAlias",
"columnName": "drive_alias",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "driveType",
@@ -924,8 +854,7 @@
{
"fieldPath": "lastModifiedDateTime",
"columnName": "last_modified_date_time",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "name",
@@ -936,50 +865,42 @@
{
"fieldPath": "ownerId",
"columnName": "owner_id",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "webUrl",
"columnName": "web_url",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "description",
"columnName": "description",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "quota.remaining",
"columnName": "quota_remaining",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "quota.state",
"columnName": "quota_state",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "quota.total",
"columnName": "quota_total",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "quota.used",
"columnName": "quota_used",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "root.eTag",
"columnName": "root_etag",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "root.id",
@@ -996,14 +917,12 @@
{
"fieldPath": "root.deleteState",
"columnName": "root_deleted_state",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "root.role",
"columnName": "space_role",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
}
],
"primaryKey": {
@@ -1012,9 +931,7 @@
"account_name",
"space_id"
]
- },
- "indices": [],
- "foreignKeys": []
+ }
},
{
"tableName": "spaces_special",
@@ -1053,8 +970,7 @@
{
"fieldPath": "lastModifiedDateTime",
"columnName": "last_modified_date_time",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
},
{
"fieldPath": "name",
@@ -1088,7 +1004,6 @@
"special_id"
]
},
- "indices": [],
"foreignKeys": [
{
"table": "spaces",
@@ -1130,14 +1045,12 @@
{
"fieldPath": "total",
"columnName": "total",
- "affinity": "INTEGER",
- "notNull": false
+ "affinity": "INTEGER"
},
{
"fieldPath": "state",
"columnName": "state",
- "affinity": "TEXT",
- "notNull": false
+ "affinity": "TEXT"
}
],
"primaryKey": {
@@ -1145,12 +1058,9 @@
"columnNames": [
"accountName"
]
- },
- "indices": [],
- "foreignKeys": []
+ }
}
],
- "views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '608dd4806a3630dc41bcc6d380576fb6')"
diff --git a/owncloudData/src/androidTest/java/com/owncloud/android/data/roommigrations/MigrationToDB29Test.kt b/owncloudData/src/androidTest/java/com/owncloud/android/data/roommigrations/MigrationToDB29Test.kt
index 66ee3be1289..3e5ad7d4a60 100644
--- a/owncloudData/src/androidTest/java/com/owncloud/android/data/roommigrations/MigrationToDB29Test.kt
+++ b/owncloudData/src/androidTest/java/com/owncloud/android/data/roommigrations/MigrationToDB29Test.kt
@@ -2,7 +2,9 @@
* ownCloud Android client application
*
* @author Abel García de Prada
- * Copyright (C) 2020 ownCloud GmbH.
+ * @author Jorge Aguado Recio
+ *
+ * Copyright (C) 2026 ownCloud GmbH.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2,
@@ -134,7 +136,7 @@ class MigrationToDB29Test : MigrationTest() {
"file_source)" +
" VALUES " +
"(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
- arrayOf(
+ arrayOf