Przeglądaj źródła

added progressbar for current item in upload list

Luke Owncloud 10 lat temu
rodzic
commit
e764c7d9f3

+ 8 - 0
res/layout/upload_list_item.xml

@@ -61,6 +61,14 @@
                 android:textSize="12dip"/>
 
         </LinearLayout>
+
+        <ProgressBar
+            android:id="@+id/upload_progress_bar"
+            style="?android:attr/progressBarStyleHorizontal"
+             android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:visibility="gone"
+             />
         
         <LinearLayout
             android:layout_width="match_parent"

+ 2 - 0
src/com/owncloud/android/ui/activity/UploadListActivity.java

@@ -2,6 +2,7 @@ package com.owncloud.android.ui.activity;
 
 import java.io.File;
 
+import android.accounts.Account;
 import android.content.ActivityNotFoundException;
 import android.content.ComponentName;
 import android.content.Intent;
@@ -21,6 +22,7 @@ import com.owncloud.android.db.UploadDbHandler;
 import com.owncloud.android.db.UploadDbObject;
 import com.owncloud.android.files.services.FileUploadService;
 import com.owncloud.android.files.services.FileUploadService.FileUploaderBinder;
+import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.errorhandling.ExceptionHandler;
 import com.owncloud.android.ui.fragment.UploadListFragment;

+ 39 - 7
src/com/owncloud/android/ui/adapter/ExpandableUploadListAdapter.java

@@ -1,5 +1,6 @@
 package com.owncloud.android.ui.adapter;
 
+import java.lang.ref.WeakReference;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Observable;
@@ -18,6 +19,7 @@ import android.widget.BaseExpandableListAdapter;
 import android.widget.Button;
 import android.widget.ExpandableListView;
 import android.widget.ImageView;
+import android.widget.ProgressBar;
 import android.widget.TextView;
 
 import com.owncloud.android.R;
@@ -37,11 +39,13 @@ import com.owncloud.android.utils.UploadUtils;
  * active, completed. Filtering possible.
  * 
  */
-public class ExpandableUploadListAdapter extends BaseExpandableListAdapter implements Observer, OnDatatransferProgressListener {
+public class ExpandableUploadListAdapter extends BaseExpandableListAdapter implements Observer {
 
     private static final String TAG = "ExpandableUploadListAdapter";
     private Activity mActivity;
     
+    public ProgressListener mProgressListener; 
+    
     interface Refresh {
         public void refresh();
     }
@@ -162,6 +166,11 @@ public class ExpandableUploadListAdapter extends BaseExpandableListAdapter imple
             switch (uploadObject.getUploadStatus()) {
             case UPLOAD_IN_PROGRESS:
                 status = mActivity.getResources().getString(R.string.uploader_upload_in_progress_ticker);
+                ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.upload_progress_bar);
+                progressBar.setVisibility(View.VISIBLE);
+                mProgressListener = new ProgressListener(progressBar);
+                parentFileActivity.getFileUploaderBinder().addDatatransferProgressListener(mProgressListener,
+                        uploadObject.getAccount(mActivity), uploadObject.getOCFile());
                 break;
             case UPLOAD_FAILED_GIVE_UP:
                 if (uploadObject.getLastResult() != null) {
@@ -202,6 +211,13 @@ public class ExpandableUploadListAdapter extends BaseExpandableListAdapter imple
                 } 
                 break;
             }
+            if(uploadObject.getUploadStatus() != UploadStatus.UPLOAD_IN_PROGRESS) {
+                ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.upload_progress_bar);
+                progressBar.setVisibility(View.GONE);
+                parentFileActivity.getFileUploaderBinder().removeDatatransferProgressListener(mProgressListener,
+                        uploadObject.getAccount(mActivity), uploadObject.getOCFile());
+                mProgressListener = null;
+            }
             statusView.setText(status);
 
             Button rightButton = (Button) view.findViewById(R.id.upload_right_button);
@@ -364,11 +380,27 @@ public class ExpandableUploadListAdapter extends BaseExpandableListAdapter imple
     public boolean isChildSelectable(int groupPosition, int childPosition) {
         return true;
     }
-
-    @Override
-    public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer,
-            String fileAbsoluteName) {
-        // TODO Auto-generated method stub
+    
+    private class ProgressListener implements OnDatatransferProgressListener {
+        int mLastPercent = 0;
+        WeakReference<ProgressBar> mProgressBar = null;
         
-    }
+        ProgressListener(ProgressBar progressBar) {
+            mProgressBar = new WeakReference<ProgressBar>(progressBar);
+        }
+        
+        @Override
+        public void onTransferProgress(long progressRate, long totalTransferredSoFar, long totalToTransfer, String filename) {
+            int percent = (int)(100.0*((double)totalTransferredSoFar)/((double)totalToTransfer));
+            if (percent != mLastPercent) {
+                ProgressBar pb = mProgressBar.get();
+                if (pb != null) {
+                    pb.setProgress(percent);
+                    pb.postInvalidate();
+                }
+            }
+            mLastPercent = percent;
+        }
+
+    }; 
 }