Bartek Przybylski 13 роки тому
батько
коміт
a2a8dc1ee6

+ 1 - 0
AndroidManifest.xml

@@ -14,6 +14,7 @@
     <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
 
     <uses-sdk
         android:minSdkVersion="8"

+ 13 - 1
src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java

@@ -29,7 +29,9 @@ import android.accounts.AuthenticatorException;
 import android.accounts.OperationCanceledException;
 import android.content.ContentProviderClient;
 import android.content.Context;
+import android.content.Intent;
 import android.content.SyncResult;
+import android.content.IntentSender.SendIntentException;
 import android.os.Bundle;
 import eu.alefzero.owncloud.datamodel.FileDataStorageManager;
 import eu.alefzero.owncloud.datamodel.OCFile;
@@ -43,6 +45,10 @@ import eu.alefzero.webdav.WebdavEntry;
  */
 public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
 
+  public static final String SYNC_MESSAGE = "eu.alefzero.owncloud.files.ACCOUNT_SYNC";
+  public static final String IN_PROGRESS = "sync_in_progress";
+  public static final String ACCOUNT_NAME = "account_name";
+  
 	public FileSyncAdapter(Context context, boolean autoInitialize) {
 		super(context, autoInitialize);
 	}
@@ -59,6 +65,11 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
 			this.setContentProvider(provider);
 			this.setStorageManager(new FileDataStorageManager(account, getContentProvider()));
 
+			Intent i = new Intent(SYNC_MESSAGE);
+			i.putExtra(IN_PROGRESS, true);
+			i.putExtra("ACCOUNT_NAME", account.name);
+			getContext().sendStickyBroadcast(i);
+			
 			PropFindMethod query;
       try {
         query = new PropFindMethod(getUri().toString());
@@ -84,7 +95,8 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         syncResult.stats.numIoExceptions++;
         e.printStackTrace();
       }
-      
+      i.putExtra(IN_PROGRESS, false);
+      getContext().sendStickyBroadcast(i);
 	}
 
   private void fetchData(String uri, SyncResult syncResult, long parentId) {

+ 36 - 0
src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java

@@ -23,12 +23,16 @@ import android.accounts.AccountManager;
 import android.app.AlertDialog;
 import android.app.AlertDialog.Builder;
 import android.app.Dialog;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnCancelListener;
 import android.content.DialogInterface.OnClickListener;
+import android.content.BroadcastReceiver;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.net.Uri;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
@@ -41,6 +45,7 @@ import com.actionbarsherlock.app.SherlockFragmentActivity;
 import com.actionbarsherlock.view.Menu;
 import com.actionbarsherlock.view.MenuInflater;
 import com.actionbarsherlock.view.MenuItem;
+import com.actionbarsherlock.view.Window;
 
 import eu.alefzero.owncloud.AccountUtils;
 import eu.alefzero.owncloud.R;
@@ -48,6 +53,7 @@ import eu.alefzero.owncloud.authenticator.AccountAuthenticator;
 import eu.alefzero.owncloud.datamodel.DataStorageManager;
 import eu.alefzero.owncloud.datamodel.FileDataStorageManager;
 import eu.alefzero.owncloud.datamodel.OCFile;
+import eu.alefzero.owncloud.syncadapter.FileSyncAdapter;
 import eu.alefzero.owncloud.ui.fragment.FileListFragment;
 import eu.alefzero.webdav.WebdavClient;
 
@@ -63,6 +69,8 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
 	private ArrayAdapter<String> mDirectories;
 	private DataStorageManager mStorageManager;
 
+	private BR  b;
+	
 	private static final int DIALOG_SETUP_ACCOUNT = 0;
 	private static final int DIALOG_CREATE_DIR = 1;
 
@@ -145,6 +153,8 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
       return;
     }
 
+		requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);  
+
 		mDirectories = new CustomArrayAdapter<String>(this,
 				R.layout.sherlock_spinner_dropdown_item);
 		mDirectories.add("/");
@@ -219,9 +229,20 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
 	  super.onResume();
 	  if(!accountsAreSetup()){
       showDialog(DIALOG_SETUP_ACCOUNT);
+      return;
     }
+	   IntentFilter f = new IntentFilter(FileSyncAdapter.SYNC_MESSAGE);
+	   b = new  BR();
+	   registerReceiver(b, f);
+	   setProgressBarIndeterminateVisibility(false);
 	}
 	    
+	 @Override
+	protected void onPause() {
+	  super.onPause();
+	  unregisterReceiver(b);
+	}
+	 
 	@Override
 	public boolean onNavigationItemSelected(int itemPosition, long itemId) {
 		int i = itemPosition;
@@ -320,5 +341,20 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
     return accounts.length > 0;
   }
   
+  private class BR extends BroadcastReceiver {
+    @Override
+    public void onReceive(Context context, Intent intent) {
+      boolean in_progress = intent.getBooleanExtra(FileSyncAdapter.IN_PROGRESS, false);
+      String account_name = intent.getStringExtra(FileSyncAdapter.ACCOUNT_NAME);
+      Log.d("FileDisplay", "sync of account " + account_name + " is in_progress: " + in_progress);
+      setProgressBarIndeterminateVisibility(in_progress);
+      if (!in_progress) {
+        FileListFragment f = (FileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);
+        if (f != null)
+          f.populateFileList();
+      }
+    }
+    
+  }
   
 }

+ 1 - 1
src/eu/alefzero/owncloud/ui/fragment/FileListFragment.java

@@ -101,7 +101,7 @@ public class FileListFragment extends FragmentListView {
   /**
    * Lists the directory
    */
-  private void populateFileList() {
+  public void populateFileList() {
     String s = "/";
     for (String a : mDirNames)
       s+= a + "/";