فهرست منبع

set charging only default to false
add message for LATER status
enable retry option for all not-succeeded uploads

Luke Owncloud 10 سال پیش
والد
کامیت
9e6d8c1b58

+ 23 - 4
src/com/owncloud/android/files/services/FileUploadService.java

@@ -21,11 +21,9 @@ package com.owncloud.android.files.services;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.ConcurrentModificationException;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -48,7 +46,6 @@ import android.os.Looper;
 import android.os.Parcelable;
 import android.os.Process;
 import android.support.v4.app.NotificationCompat;
-import android.text.format.DateUtils;
 import android.webkit.MimeTypeMap;
 
 import com.owncloud.android.R;
@@ -409,7 +406,7 @@ public class FileUploadService extends IntentService implements OnDatatransferPr
             boolean forceOverwrite = intent.getBooleanExtra(KEY_FORCE_OVERWRITE, false);
             boolean isCreateRemoteFolder = intent.getBooleanExtra(KEY_CREATE_REMOTE_FOLDER, false);
             boolean isUseWifiOnly = intent.getBooleanExtra(KEY_WIFI_ONLY, true);
-            boolean isWhileChargingOnly = intent.getBooleanExtra(KEY_WHILE_CHARGING_ONLY, true);
+            boolean isWhileChargingOnly = intent.getBooleanExtra(KEY_WHILE_CHARGING_ONLY, false);
             long uploadTimestamp = intent.getLongExtra(KEY_UPLOAD_TIMESTAMP, -1);
             
             LocalBehaviour localAction = (LocalBehaviour) intent.getSerializableExtra(KEY_LOCAL_BEHAVIOUR);
@@ -520,6 +517,27 @@ public class FileUploadService extends IntentService implements OnDatatransferPr
         Log_OC.d(TAG, "onHandleIntent end");
     }
 
+    /**
+     * Returns the reason as String why state of uploadDbObject is LATER. If
+     * upload state != LATER return null.
+     */
+    static public String getUploadLaterReason(Context context, UploadDbObject uploadDbObject) {
+        if (uploadDbObject.isUseWifiOnly() && !UploadUtils.isConnectedViaWiFi(context)) {
+            return "Upload is wifi-only.";
+        }
+        if (uploadDbObject.isWhileChargingOnly() && !UploadUtils.isCharging(context)) {
+            return "Upload is charging-only.";
+        }
+        Date now = new Date();
+        if (now.getTime() < uploadDbObject.getUploadTimestamp()) {
+            return "Upload scheduled for " + DisplayUtils.unixTimeToHumanReadable(uploadDbObject.getUploadTimestamp());
+        }
+        if (uploadDbObject.getUploadStatus() == UploadStatus.UPLOAD_LATER) {
+            return "Upload delayed for unknown reason.";
+        }
+        return null;
+    }
+
     /**
      * Provides a binder object that clients can use to perform operations on
      * the queue of uploads, excepting the addition of new files.
@@ -1158,6 +1176,7 @@ public class FileUploadService extends IntentService implements OnDatatransferPr
         case HOST_NOT_AVAILABLE:
         case NO_NETWORK_CONNECTION:
         case TIMEOUT:
+        case WRONG_CONNECTION: // SocketException
             return true;
         default:
             return false;

+ 5 - 0
src/com/owncloud/android/ui/adapter/ExpandableUploadListAdapter.java

@@ -21,7 +21,9 @@ import android.widget.TextView;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.ThumbnailsCacheManager;
 import com.owncloud.android.db.UploadDbHandler;
+import com.owncloud.android.db.UploadDbHandler.UploadStatus;
 import com.owncloud.android.db.UploadDbObject;
+import com.owncloud.android.files.services.FileUploadService;
 import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.utils.DisplayUtils;
@@ -142,6 +144,9 @@ public class ExpandableUploadListAdapter extends BaseExpandableListAdapter imple
             if (uploadObject.getLastResult() != null && !uploadObject.getLastResult().isSuccess()) {
                 status += ": " + uploadObject.getLastResult().getLogMessage();
             }
+            if (uploadObject.getUploadStatus() == UploadStatus.UPLOAD_LATER) {
+                status += ": " + FileUploadService.getUploadLaterReason(mActivity, uploadObject);
+            }
             statusView.setText(status);
 
             ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1);

+ 19 - 11
src/com/owncloud/android/ui/fragment/UploadListFragment.java

@@ -21,34 +21,25 @@ import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.Parcelable;
-import android.util.Log;
 import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
 import android.view.LayoutInflater;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.ContextMenu.ContextMenuInfo;
-import android.widget.AdapterView;
 import android.widget.BaseExpandableListAdapter;
 import android.widget.ExpandableListView;
 import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
 import android.widget.ListView;
-import android.widget.AdapterView.AdapterContextMenuInfo;
 
 import com.owncloud.android.R;
-import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.db.UploadDbHandler.UploadStatus;
 import com.owncloud.android.db.UploadDbObject;
-import com.owncloud.android.files.FileMenuFilter;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
-import com.owncloud.android.ui.activity.MoveActivity;
 import com.owncloud.android.ui.adapter.ExpandableUploadListAdapter;
-import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
-import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
-import com.owncloud.android.ui.dialog.RenameFileDialogFragment;
 
 /**
  * A Fragment that lists all files and folders in a given LOCAL path.
@@ -134,7 +125,7 @@ public class UploadListFragment extends ExpandableListFragment {
                 item.setEnabled(false);
             }
         }
-        if (!(uploadFile.getUploadStatus() == UploadStatus.UPLOAD_CANCELLED || uploadFile.getUploadStatus() == UploadStatus.UPLOAD_FAILED_RETRY)) {
+        if (!userCanRetryUpload(uploadFile)) {
             MenuItem item = menu.findItem(R.id.action_retry_upload);
             if (item != null) {
                 item.setVisible(false);
@@ -143,6 +134,23 @@ public class UploadListFragment extends ExpandableListFragment {
         }
     }
     
+    /**
+     * Returns true when user can choose to retry this upload.
+     * 
+     * @param uploadFile
+     * @return
+     */
+    private boolean userCanRetryUpload(UploadDbObject uploadFile) {
+        switch (uploadFile.getUploadStatus()) {
+        case UPLOAD_CANCELLED:
+        case UPLOAD_FAILED_RETRY:
+        case UPLOAD_FAILED_GIVE_UP:
+            return true;
+        default:
+            return false;
+        }
+    }
+
     @Override
     public boolean onContextItemSelected (MenuItem item) {
         ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();