Browse Source

Fix not waiting for non-metered wifi

Signed-off-by: tobiasKaminsky <tobias@kaminsky.me>
tobiasKaminsky 4 years ago
parent
commit
e6a516f10a

+ 44 - 0
src/androidTest/java/com/owncloud/android/UploadIT.java

@@ -215,6 +215,7 @@ public class UploadIT extends AbstractOnServerIT {
 
         uploadOCUpload(ocUpload);
     }
+
     @Test
     public void testUploadOnChargingOnlyButNotCharging() {
         OCUpload ocUpload = new OCUpload(FileStorageUtils.getTemporalPath(account.name) + "/empty.txt",
@@ -241,6 +242,7 @@ public class UploadIT extends AbstractOnServerIT {
 
         RemoteOperationResult result = newUpload.execute(client, getStorageManager());
         assertFalse(result.toString(), result.isSuccess());
+        assertEquals(RemoteOperationResult.ResultCode.DELAYED_FOR_CHARGING, result.getCode());
     }
 
     @Test
@@ -326,6 +328,7 @@ public class UploadIT extends AbstractOnServerIT {
 
         RemoteOperationResult result = newUpload.execute(client, getStorageManager());
         assertFalse(result.toString(), result.isSuccess());
+        assertEquals(RemoteOperationResult.ResultCode.DELAYED_FOR_WIFI, result.getCode());
     }
 
     @Test
@@ -364,6 +367,47 @@ public class UploadIT extends AbstractOnServerIT {
             .execute(client, getStorageManager());
     }
 
+    @Test
+    public void testUploadOnWifiOnlyButMeteredWifi() {
+        ConnectivityService connectivityServiceMock = new ConnectivityService() {
+            @Override
+            public boolean isInternetWalled() {
+                return false;
+            }
+
+            @Override
+            public Connectivity getConnectivity() {
+                return new Connectivity(true, true, true, true);
+            }
+        };
+        OCUpload ocUpload = new OCUpload(FileStorageUtils.getTemporalPath(account.name) + "/empty.txt",
+                                         FOLDER + "noWifi.txt",
+                                         account.name);
+        ocUpload.setUseWifiOnly(true);
+
+        UploadFileOperation newUpload = new UploadFileOperation(
+            uploadsStorageManager,
+            connectivityServiceMock,
+            powerManagementServiceMock,
+            user,
+            null,
+            ocUpload,
+            FileUploader.NameCollisionPolicy.DEFAULT,
+            FileUploader.LOCAL_BEHAVIOUR_COPY,
+            targetContext,
+            true,
+            false
+        );
+        newUpload.setRemoteFolderToBeCreated();
+        newUpload.addRenameUploadListener(() -> {
+            // dummy
+        });
+
+        RemoteOperationResult result = newUpload.execute(client, getStorageManager());
+        assertFalse(result.toString(), result.isSuccess());
+        assertEquals(RemoteOperationResult.ResultCode.DELAYED_FOR_WIFI, result.getCode());
+    }
+
     private void verifyStoragePath(OCFile file) {
         assertEquals(FileStorageUtils.getSavePath(account.name) + FOLDER + file.getDecryptedFileName(),
                      file.getStoragePath());

+ 1 - 1
src/main/java/com/owncloud/android/operations/UploadFileOperation.java

@@ -686,7 +686,7 @@ public class UploadFileOperation extends SyncOperation {
 
         // check that connectivity conditions are met and delays the upload otherwise
         Connectivity connectivity = connectivityService.getConnectivity();
-        if (mOnWifiOnly && !connectivity.isWifi()) {
+        if (mOnWifiOnly && (!connectivity.isWifi() || connectivity.isMetered())) {
             Log_OC.d(TAG, "Upload delayed until WiFi is available: " + getRemotePath());
             remoteOperationResult = new RemoteOperationResult(ResultCode.DELAYED_FOR_WIFI);
         }

+ 1 - 1
src/main/res/values/strings.xml

@@ -165,7 +165,7 @@
     <string name="uploads_view_upload_status_conflict">Conflict</string>
     <string name="uploads_view_upload_status_service_interrupted">App terminated</string>
     <string name="uploads_view_upload_status_unknown_fail">Unknown error</string>
-    <string name="uploads_view_upload_status_waiting_for_wifi">Waiting for Wi-Fi</string>
+    <string name="uploads_view_upload_status_waiting_for_wifi">Waiting for non-metered Wi-Fi</string>
     <string name="uploads_view_upload_status_waiting_exit_power_save_mode">Waiting to exit power save mode</string>
     <string name="uploads_view_upload_status_fetching_server_version">Fetching server version…</string>
     <string name="uploads_view_later_waiting_to_upload">Waiting to upload</string>