Skip to content
1,383 changes: 1,383 additions & 0 deletions app/schemas/com.nextcloud.client.database.NextcloudDatabase/105.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Nextcloud - Android Client
*
* SPDX-FileCopyrightText: 2026 Alper Ozturk <alper.ozturk@nextcloud.com>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

package com.nextcloud.utils

import com.nextcloud.client.device.BatteryStatus
import com.nextcloud.client.device.PowerManagementService

object PowerManagementFactory {
@JvmStatic
val mock: PowerManagementService = object : PowerManagementService {
override val isIgnoringOptimization: Boolean
get() = true
override val isPowerSavingEnabled: Boolean
get() = false
override val battery: BatteryStatus
get() = BatteryStatus(false, 0)
override val blocksAutoUpload: Boolean
get() = false
}

@JvmStatic
@Suppress("MagicNumber")
val mockCharging: PowerManagementService = object : PowerManagementService {
override val isIgnoringOptimization: Boolean
get() = true
override val isPowerSavingEnabled: Boolean
get() = false
override val battery: BatteryStatus
get() = BatteryStatus(true, 100)
override val blocksAutoUpload: Boolean
get() = false
}
}
23 changes: 2 additions & 21 deletions app/src/androidTest/java/com/owncloud/android/AbstractIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@
import com.nextcloud.client.account.User;
import com.nextcloud.client.account.UserAccountManager;
import com.nextcloud.client.account.UserAccountManagerImpl;
import com.nextcloud.client.device.BatteryStatus;
import com.nextcloud.client.device.PowerManagementService;
import com.nextcloud.utils.PowerManagementFactory;
import com.nextcloud.client.jobs.upload.FileUploadWorker;
import com.nextcloud.client.network.ConnectivityManagerFactory;
import com.nextcloud.client.network.ConnectivityService;
Expand Down Expand Up @@ -73,7 +72,6 @@
import java.util.Objects;
import java.util.Optional;

import androidx.annotation.NonNull;
import androidx.fragment.app.DialogFragment;
import androidx.test.espresso.contrib.DrawerActions;
import androidx.test.espresso.intent.rule.IntentsTestRule;
Expand Down Expand Up @@ -367,24 +365,7 @@ public void uploadFile(File file, String remotePath) {
}

public void uploadOCUpload(OCUpload ocUpload) {
PowerManagementService powerManagementServiceMock = new PowerManagementService() {
@Override
public boolean isIgnoringOptimization() {
return true;
}

@NonNull
@Override
public BatteryStatus getBattery() {
return new BatteryStatus();
}

@Override
public boolean isPowerSavingEnabled() {
return false;
}
};

final var powerManagementServiceMock = PowerManagementFactory.getMock();
UserAccountManager accountManager = UserAccountManagerImpl.fromContext(targetContext);
UploadsStorageManager uploadsStorageManager = new UploadsStorageManager(accountManager,
targetContext.getContentResolver());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@
import com.nextcloud.client.account.User;
import com.nextcloud.client.account.UserAccountManager;
import com.nextcloud.client.account.UserAccountManagerImpl;
import com.nextcloud.client.device.BatteryStatus;
import com.nextcloud.client.device.PowerManagementService;
import com.nextcloud.utils.PowerManagementFactory;
import com.nextcloud.client.jobs.upload.FileUploadWorker;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.datamodel.UploadsStorageManager;
Expand Down Expand Up @@ -45,7 +44,6 @@
import java.util.Objects;
import java.util.Optional;

import androidx.annotation.NonNull;
import androidx.test.platform.app.InstrumentationRegistry;

import static org.junit.Assert.assertNotNull;
Expand Down Expand Up @@ -205,24 +203,7 @@ public void uploadOCUpload(OCUpload ocUpload) {
}

public void uploadOCUpload(OCUpload ocUpload, int localBehaviour) {
PowerManagementService powerManagementServiceMock = new PowerManagementService() {
@Override
public boolean isIgnoringOptimization() {
return true;
}

@NonNull
@Override
public BatteryStatus getBattery() {
return new BatteryStatus();
}

@Override
public boolean isPowerSavingEnabled() {
return false;
}
};

final var powerManagementServiceMock = PowerManagementFactory.getMock();
UserAccountManager accountManager = UserAccountManagerImpl.fromContext(targetContext);
UploadsStorageManager uploadsStorageManager = new UploadsStorageManager(accountManager,
targetContext.getContentResolver());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@
package com.owncloud.android

import com.nextcloud.client.account.UserAccountManagerImpl
import com.nextcloud.client.device.BatteryStatus
import com.nextcloud.client.device.PowerManagementService
import com.nextcloud.utils.PowerManagementFactory
import com.nextcloud.client.jobs.upload.FileUploadWorker
import com.owncloud.android.datamodel.UploadsStorageManager
import com.owncloud.android.db.OCUpload
Expand Down Expand Up @@ -36,11 +35,7 @@ class GrantFolderExistenceTests : AbstractOnServerIT() {
targetContext.contentResolver
)

private val powerManagementServiceMock = object : PowerManagementService {
override val isPowerSavingEnabled = false
override val isIgnoringOptimization = true
override val battery = BatteryStatus(false, 0)
}
private val powerManagementServiceMock = PowerManagementFactory.mock

@Before
@Throws(IOException::class)
Expand Down
40 changes: 3 additions & 37 deletions app/src/androidTest/java/com/owncloud/android/UploadIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
package com.owncloud.android;

import com.nextcloud.client.account.UserAccountManagerImpl;
import com.nextcloud.client.device.BatteryStatus;
import com.nextcloud.utils.PowerManagementFactory;
import com.nextcloud.client.device.PowerManagementService;
import com.nextcloud.client.jobs.upload.FileUploadWorker;
import com.nextcloud.client.network.ConnectivityManagerFactory;
Expand Down Expand Up @@ -38,8 +38,6 @@
import java.util.List;
import java.util.concurrent.TimeUnit;

import androidx.annotation.NonNull;

import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertFalse;
import static junit.framework.TestCase.assertNotNull;
Expand All @@ -55,22 +53,7 @@ public class UploadIT extends AbstractOnServerIT {
new UploadsStorageManager(UserAccountManagerImpl.fromContext(targetContext),
targetContext.getContentResolver());

private PowerManagementService powerManagementServiceMock = new PowerManagementService() {
@Override
public boolean isIgnoringOptimization() {
return true;
}

@Override
public boolean isPowerSavingEnabled() {
return false;
}
@NonNull
@Override
public BatteryStatus getBattery() {
return new BatteryStatus(false, 0);
}
};
private final PowerManagementService powerManagementServiceMock = PowerManagementFactory.getMock();

@Before
public void before() throws IOException {
Expand Down Expand Up @@ -208,24 +191,7 @@ public void testUploadOnChargingOnlyButNotCharging() {

@Test
public void testUploadOnChargingOnlyAndCharging() {
PowerManagementService powerManagementServiceMock = new PowerManagementService() {
@Override
public boolean isIgnoringOptimization() {
return true;
}

@Override
public boolean isPowerSavingEnabled() {
return false;
}

@NonNull
@Override
public BatteryStatus getBattery() {
return new BatteryStatus(true, 100);
}
};

final var powerManagementServiceMock = PowerManagementFactory.getMockCharging();
OCUpload ocUpload = new OCUpload(FileStorageUtils.getTemporalPath(account.name) + "/empty.txt",
FOLDER + "charging.txt", account.name);
ocUpload.setWhileChargingOnly(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
package com.owncloud.android.files.services

import com.nextcloud.client.account.UserAccountManagerImpl
import com.nextcloud.client.device.BatteryStatus
import com.nextcloud.client.device.PowerManagementService
import com.nextcloud.utils.PowerManagementFactory
import com.nextcloud.client.jobs.upload.FileUploadWorker
import com.owncloud.android.AbstractOnServerIT
import com.owncloud.android.datamodel.UploadsStorageManager
Expand All @@ -30,11 +29,7 @@ class FileUploaderIT : AbstractOnServerIT() {

private lateinit var uploadsStorageManager: UploadsStorageManager

private val powerManagementServiceMock = object : PowerManagementService {
override val isIgnoringOptimization = true
override val isPowerSavingEnabled = false
override val battery = BatteryStatus()
}
private val powerManagementServiceMock = PowerManagementFactory.mock

@Before
fun setUp() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@ import com.owncloud.android.db.ProviderMeta
AutoMigration(from = 100, to = 101, spec = DatabaseMigrationUtil.ResetCapabilitiesPostMigration::class),
AutoMigration(from = 101, to = 102, spec = DatabaseMigrationUtil.ResetCapabilitiesPostMigration::class),
AutoMigration(from = 102, to = 103, spec = DatabaseMigrationUtil.ResetCapabilitiesPostMigration::class),
AutoMigration(from = 103, to = 104)
AutoMigration(from = 103, to = 104),
AutoMigration(from = 104, to = 105)
],
exportSchema = true
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,21 +95,26 @@ interface UploadDao {
SELECT * FROM ${ProviderTableMeta.UPLOADS_TABLE_NAME}
WHERE ${ProviderTableMeta.UPLOADS_STATUS} = :status
AND (:nameCollisionPolicy IS NULL OR ${ProviderTableMeta.UPLOADS_NAME_COLLISION_POLICY} = :nameCollisionPolicy)
ORDER BY ${ProviderTableMeta._ID} DESC
LIMIT :limit
"""
)
suspend fun getUploadsByStatus(status: Int, nameCollisionPolicy: Int? = null): List<UploadEntity>
suspend fun getUploadsByStatus(status: Int, nameCollisionPolicy: Int? = null, limit: Int): List<UploadEntity>

@Query(
"""
SELECT * FROM ${ProviderTableMeta.UPLOADS_TABLE_NAME}
WHERE ${ProviderTableMeta.UPLOADS_ACCOUNT_NAME} = :accountName
AND ${ProviderTableMeta.UPLOADS_STATUS} = :status
AND (:nameCollisionPolicy IS NULL OR ${ProviderTableMeta.UPLOADS_NAME_COLLISION_POLICY} = :nameCollisionPolicy)
ORDER BY ${ProviderTableMeta._ID} DESC
LIMIT :limit
"""
)
suspend fun getUploadsByAccountNameAndStatus(
accountName: String,
status: Int,
nameCollisionPolicy: Int? = null
nameCollisionPolicy: Int? = null,
limit: Int
): List<UploadEntity>
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,28 @@ package com.nextcloud.client.database.entity

import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.Index
import androidx.room.PrimaryKey
import com.owncloud.android.db.ProviderMeta.ProviderTableMeta

@Entity(tableName = ProviderTableMeta.FILESYSTEM_TABLE_NAME)
@Entity(
tableName = ProviderTableMeta.FILESYSTEM_TABLE_NAME,
indices = [
Index(
value = [
ProviderTableMeta.FILESYSTEM_FILE_LOCAL_PATH,
ProviderTableMeta.FILESYSTEM_SYNCED_FOLDER_ID
]
),
Index(
value = [
ProviderTableMeta.FILESYSTEM_SYNCED_FOLDER_ID,
ProviderTableMeta.FILESYSTEM_FILE_SENT_FOR_UPLOAD,
ProviderTableMeta.FILESYSTEM_FILE_IS_FOLDER
]
)
]
)
data class FilesystemEntity(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = ProviderTableMeta._ID)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ package com.nextcloud.client.database.entity

import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.Index
import androidx.room.PrimaryKey
import com.nextcloud.utils.autoRename.AutoRename
import com.owncloud.android.datamodel.UploadsStorageManager
Expand All @@ -21,7 +22,14 @@ import com.owncloud.android.lib.common.utils.Log_OC
import com.owncloud.android.lib.resources.status.OCCapability
import java.lang.IllegalArgumentException

@Entity(tableName = ProviderTableMeta.UPLOADS_TABLE_NAME)
@Entity(
tableName = ProviderTableMeta.UPLOADS_TABLE_NAME,
indices = [
Index(value = [ProviderTableMeta.UPLOADS_ACCOUNT_NAME, ProviderTableMeta.UPLOADS_STATUS]),
Index(value = [ProviderTableMeta.UPLOADS_REMOTE_PATH, ProviderTableMeta.UPLOADS_ACCOUNT_NAME]),
Index(value = [ProviderTableMeta.UPLOADS_ACCOUNT_NAME, ProviderTableMeta.UPLOADS_LOCAL_PATH])
]
)
data class UploadEntity(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = ProviderTableMeta._ID)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,6 @@ interface PowerManagementService {
* Checks current battery status using platform [android.os.BatteryManager]
*/
val battery: BatteryStatus

val blocksAutoUpload: Boolean
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,13 @@ internal class PowerManagementServiceImpl(
return platformPowerManager.isPowerSaveMode
}

override val blocksAutoUpload: Boolean
get() = isPowerSavingEnabled && !isIgnoringOptimization

@Suppress("MagicNumber") // 100% is 100, we're not doing Cobol
override val battery: BatteryStatus
get() {
val intent: Intent? = context.registerBroadcastReceiver(
val intent = context.registerBroadcastReceiver(
null,
IntentFilter(Intent.ACTION_BATTERY_CHANGED),
ReceiverFlag.NotExported
Expand All @@ -54,7 +57,7 @@ internal class PowerManagementServiceImpl(
else -> false
}
} ?: false
val level = intent?.let { it ->
val level = intent?.let {
val level: Int = it.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
val scale: Int = it.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
(level * 100 / scale.toFloat()).toInt()
Expand Down
Loading
Loading