sync progress indicator
authorBartek Przybylski <bart.p.pl@gmail.com>
Thu, 3 May 2012 21:56:48 +0000 (23:56 +0200)
committerBartek Przybylski <bart.p.pl@gmail.com>
Thu, 3 May 2012 21:56:48 +0000 (23:56 +0200)
AndroidManifest.xml
src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java
src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java
src/eu/alefzero/owncloud/ui/fragment/FileListFragment.java

index ae35b64..ce11179 100644 (file)
@@ -14,6 +14,7 @@
     <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />\r
     <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />\r
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />\r
+    <uses-permission android:name="android.permission.BROADCAST_STICKY" />\r
 \r
     <uses-sdk\r
         android:minSdkVersion="8"\r
index 133e5fc..816e79e 100644 (file)
@@ -29,7 +29,9 @@ import android.accounts.AuthenticatorException;
 import android.accounts.OperationCanceledException;\r
 import android.content.ContentProviderClient;\r
 import android.content.Context;\r
+import android.content.Intent;\r
 import android.content.SyncResult;\r
+import android.content.IntentSender.SendIntentException;\r
 import android.os.Bundle;\r
 import eu.alefzero.owncloud.datamodel.FileDataStorageManager;\r
 import eu.alefzero.owncloud.datamodel.OCFile;\r
@@ -43,6 +45,10 @@ import eu.alefzero.webdav.WebdavEntry;
  */\r
 public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {\r
 \r
+  public static final String SYNC_MESSAGE = "eu.alefzero.owncloud.files.ACCOUNT_SYNC";\r
+  public static final String IN_PROGRESS = "sync_in_progress";\r
+  public static final String ACCOUNT_NAME = "account_name";\r
+  \r
        public FileSyncAdapter(Context context, boolean autoInitialize) {\r
                super(context, autoInitialize);\r
        }\r
@@ -59,6 +65,11 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                        this.setContentProvider(provider);\r
                        this.setStorageManager(new FileDataStorageManager(account, getContentProvider()));\r
 \r
+                       Intent i = new Intent(SYNC_MESSAGE);\r
+                       i.putExtra(IN_PROGRESS, true);\r
+                       i.putExtra("ACCOUNT_NAME", account.name);\r
+                       getContext().sendStickyBroadcast(i);\r
+                       \r
                        PropFindMethod query;\r
       try {\r
         query = new PropFindMethod(getUri().toString());\r
@@ -84,7 +95,8 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         syncResult.stats.numIoExceptions++;\r
         e.printStackTrace();\r
       }\r
-      \r
+      i.putExtra(IN_PROGRESS, false);\r
+      getContext().sendStickyBroadcast(i);\r
        }\r
 \r
   private void fetchData(String uri, SyncResult syncResult, long parentId) {\r
index cac6fea..1b909a4 100644 (file)
@@ -23,12 +23,16 @@ import android.accounts.AccountManager;
 import android.app.AlertDialog;\r
 import android.app.AlertDialog.Builder;\r
 import android.app.Dialog;\r
+import android.content.Context;\r
 import android.content.DialogInterface;\r
 import android.content.DialogInterface.OnCancelListener;\r
 import android.content.DialogInterface.OnClickListener;\r
+import android.content.BroadcastReceiver;\r
 import android.content.Intent;\r
+import android.content.IntentFilter;\r
 import android.net.Uri;\r
 import android.os.Bundle;\r
+import android.util.Log;\r
 import android.view.View;\r
 import android.view.ViewGroup;\r
 import android.widget.ArrayAdapter;\r
@@ -41,6 +45,7 @@ import com.actionbarsherlock.app.SherlockFragmentActivity;
 import com.actionbarsherlock.view.Menu;\r
 import com.actionbarsherlock.view.MenuInflater;\r
 import com.actionbarsherlock.view.MenuItem;\r
+import com.actionbarsherlock.view.Window;\r
 \r
 import eu.alefzero.owncloud.AccountUtils;\r
 import eu.alefzero.owncloud.R;\r
@@ -48,6 +53,7 @@ import eu.alefzero.owncloud.authenticator.AccountAuthenticator;
 import eu.alefzero.owncloud.datamodel.DataStorageManager;\r
 import eu.alefzero.owncloud.datamodel.FileDataStorageManager;\r
 import eu.alefzero.owncloud.datamodel.OCFile;\r
+import eu.alefzero.owncloud.syncadapter.FileSyncAdapter;\r
 import eu.alefzero.owncloud.ui.fragment.FileListFragment;\r
 import eu.alefzero.webdav.WebdavClient;\r
 \r
@@ -63,6 +69,8 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
        private ArrayAdapter<String> mDirectories;\r
        private DataStorageManager mStorageManager;\r
 \r
+       private BR  b;\r
+       \r
        private static final int DIALOG_SETUP_ACCOUNT = 0;\r
        private static final int DIALOG_CREATE_DIR = 1;\r
 \r
@@ -145,6 +153,8 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
       return;\r
     }\r
 \r
+               requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);  \r
+\r
                mDirectories = new CustomArrayAdapter<String>(this,\r
                                R.layout.sherlock_spinner_dropdown_item);\r
                mDirectories.add("/");\r
@@ -219,9 +229,20 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
          super.onResume();\r
          if(!accountsAreSetup()){\r
       showDialog(DIALOG_SETUP_ACCOUNT);\r
+      return;\r
     }\r
+          IntentFilter f = new IntentFilter(FileSyncAdapter.SYNC_MESSAGE);\r
+          b = new  BR();\r
+          registerReceiver(b, f);\r
+          setProgressBarIndeterminateVisibility(false);\r
        }\r
            \r
+        @Override\r
+       protected void onPause() {\r
+         super.onPause();\r
+         unregisterReceiver(b);\r
+       }\r
+        \r
        @Override\r
        public boolean onNavigationItemSelected(int itemPosition, long itemId) {\r
                int i = itemPosition;\r
@@ -320,5 +341,20 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
     return accounts.length > 0;\r
   }\r
   \r
+  private class BR extends BroadcastReceiver {\r
+    @Override\r
+    public void onReceive(Context context, Intent intent) {\r
+      boolean in_progress = intent.getBooleanExtra(FileSyncAdapter.IN_PROGRESS, false);\r
+      String account_name = intent.getStringExtra(FileSyncAdapter.ACCOUNT_NAME);\r
+      Log.d("FileDisplay", "sync of account " + account_name + " is in_progress: " + in_progress);\r
+      setProgressBarIndeterminateVisibility(in_progress);\r
+      if (!in_progress) {\r
+        FileListFragment f = (FileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
+        if (f != null)\r
+          f.populateFileList();\r
+      }\r
+    }\r
+    \r
+  }\r
   \r
 }
index 7541329..3639ac6 100644 (file)
@@ -101,7 +101,7 @@ public class FileListFragment extends FragmentListView {
   /**\r
    * Lists the directory\r
    */\r
-  private void populateFileList() {\r
+  public void populateFileList() {\r
     String s = "/";\r
     for (String a : mDirNames)\r
       s+= a + "/";\r