Browse Source

load file infos only when clicking on activity item

tobiaskaminsky 8 years ago
parent
commit
ee42373837

+ 2 - 1
src/main/AndroidManifest.xml

@@ -83,7 +83,8 @@
         <activity android:name=".ui.activity.UserInfoActivity" />
         <activity android:name=".ui.activity.NotificationsActivity"/>
         <activity android:name=".ui.activity.ParticipateActivity" />
-        <activity android:name=".ui.activity.ActivitiesListActivity"/>
+        <activity android:name=".ui.activity.ActivitiesListActivity"
+                  android:configChanges="orientation|screenSize|keyboardHidden" />
         <activity android:name=".ui.activity.FolderSyncActivity" />
         <activity android:name=".ui.activity.UploadFilesActivity" />
         <activity android:name=".ui.activity.ExternalSiteWebView"

+ 82 - 55
src/main/java/com/owncloud/android/ui/activity/ActivitiesListActivity.java

@@ -26,6 +26,7 @@ import android.accounts.AuthenticatorException;
 import android.accounts.OperationCanceledException;
 import android.content.Context;
 import android.content.Intent;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.support.design.widget.BottomNavigationView;
 import android.support.v4.widget.SwipeRefreshLayout;
@@ -51,11 +52,11 @@ import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.activities.GetRemoteActivitiesOperation;
-import com.owncloud.android.lib.resources.activities.models.Activity;
 import com.owncloud.android.lib.resources.activities.models.RichObject;
 import com.owncloud.android.lib.resources.files.FileUtils;
 import com.owncloud.android.lib.resources.files.ReadRemoteFileOperation;
 import com.owncloud.android.lib.resources.files.RemoteFile;
+import com.owncloud.android.operations.RefreshFolderOperation;
 import com.owncloud.android.ui.adapter.ActivityListAdapter;
 import com.owncloud.android.ui.interfaces.ActivityListInterface;
 import com.owncloud.android.ui.preview.PreviewImageActivity;
@@ -111,6 +112,8 @@ public class ActivitiesListActivity extends FileActivity implements ActivityList
 
     private ActivityListAdapter adapter;
     private Unbinder unbinder;
+    private OwnCloudClient ownCloudClient;
+    private AsyncTask<String, Object, OCFile> updateTask;
 
 
     @Override
@@ -146,8 +149,6 @@ public class ActivitiesListActivity extends FileActivity implements ActivityList
                 fetchAndSetData();
             }
         });
-
-        setupContent();
     }
 
     public void onDestroy() {
@@ -199,52 +200,23 @@ public class ActivitiesListActivity extends FileActivity implements ActivityList
             public void run() {
                 OwnCloudAccount ocAccount;
                 try {
-                    ocAccount = new OwnCloudAccount(
-                            currentAccount,
-                            context
-                    );
-                    final OwnCloudClient mClient = OwnCloudClientManagerFactory.getDefaultSingleton().
+                    ocAccount = new OwnCloudAccount(currentAccount, context);
+                    ownCloudClient = OwnCloudClientManagerFactory.getDefaultSingleton().
                             getClientFor(ocAccount, MainApp.getAppContext());
-                    mClient.setOwnCloudVersion(AccountUtils.getServerVersion(currentAccount));
+                    ownCloudClient.setOwnCloudVersion(AccountUtils.getServerVersion(currentAccount));
 
                     RemoteOperation getRemoteNotificationOperation = new GetRemoteActivitiesOperation();
                     Log_OC.d(TAG, "BEFORE getRemoteActivitiesOperation.execute");
-                    final RemoteOperationResult result = getRemoteNotificationOperation.execute(mClient);
+                    final RemoteOperationResult result = getRemoteNotificationOperation.execute(ownCloudClient);
 
                     if (result.isSuccess() && result.getData() != null) {
                         final ArrayList<Object> activities = result.getData();
 
-                        // update all data
-                        for (Object object : activities) {
-                            Activity activity = (Activity) object;
-
-                            if (!activity.getType().equalsIgnoreCase("file_deleted") &&
-                                    !activity.getType().equalsIgnoreCase("calendar_event")) {
-                                for (RichObject richObject : activity.getRichSubjectElement().getRichObjectList()) {
-                                    String path = FileUtils.PATH_SEPARATOR + richObject.getPath();
-                                    OCFile file = getStorageManager().getFileByPath(path);
-
-                                    if (file == null) {
-                                        file = getStorageManager().getFileByPath(path + FileUtils.PATH_SEPARATOR);
-                                    }
-                                    if (file == null) {
-                                        // remote request
-                                        ReadRemoteFileOperation operation = new ReadRemoteFileOperation(path);
-                                        RemoteOperationResult resultRemoteOp = operation.execute(mClient);
-                                        if (resultRemoteOp.isSuccess()) {
-                                            file = FileStorageUtils.fillOCFile((RemoteFile) resultRemoteOp.getData().get(0));
-                                            getStorageManager().saveFileWithParent(file, context);
-                                        }
-                                    }
-                                }
-                            }
-                        }
-
                         runOnUiThread(new Runnable() {
                             @Override
                             public void run() {
                                 if (activities.size() > 0) {
-                                    populateList(activities, mClient);
+                                    populateList(activities, ownCloudClient);
                                     swipeEmptyListRefreshLayout.setVisibility(View.GONE);
                                     swipeListRefreshLayout.setVisibility(View.VISIBLE);
                                 } else {
@@ -342,33 +314,88 @@ public class ActivitiesListActivity extends FileActivity implements ActivityList
     protected void onResume() {
         super.onResume();
 
+        setupContent();
+
         AnalyticsUtils.setCurrentScreenName(this, SCREEN_NAME, TAG);
     }
 
+    @Override
+    protected void onStop() {
+        if (updateTask != null) {
+            updateTask.cancel(true);
+        }
+
+        super.onStop();
+    }
 
     @Override
     public void onActivityClicked(RichObject richObject) {
-        Intent showDetailsIntent;
-
-        // folders do not have a trailing /, so we have to test both cases
         String path = FileUtils.PATH_SEPARATOR + richObject.getPath();
-        OCFile ocFile = getStorageManager().getFileByPath(path);
 
-        if (ocFile == null) {
-            ocFile = getStorageManager().getFileByPath(path + FileUtils.PATH_SEPARATOR);
-        }
+        runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                swipeEmptyListRefreshLayout.setVisibility(View.VISIBLE);
+                swipeListRefreshLayout.setVisibility(View.GONE);
+                setLoadingMessage();
+            }
+        });
 
-        if (ocFile == null) {
-            Toast.makeText(getBaseContext(), R.string.file_not_found, Toast.LENGTH_LONG).show();
-        } else {
-            if (PreviewImageFragment.canBePreviewed(ocFile)) {
-                showDetailsIntent = new Intent(this, PreviewImageActivity.class);
-            } else {
-                showDetailsIntent = new Intent(this, FileDisplayActivity.class);
+        updateTask = new AsyncTask<String, Object, OCFile>() {
+            @Override
+            protected OCFile doInBackground(String... path) {
+                OCFile ocFile = null;
+
+                // always update file as it could be an old state saved in database
+                ReadRemoteFileOperation operation = new ReadRemoteFileOperation(path[0]);
+                RemoteOperationResult resultRemoteFileOp = operation.execute(ownCloudClient);
+                if (resultRemoteFileOp.isSuccess()) {
+                    OCFile temp = FileStorageUtils.fillOCFile((RemoteFile) resultRemoteFileOp.getData().get(0));
+
+                    ocFile = getStorageManager().saveFileWithParent(temp, getBaseContext());
+
+                    if (ocFile.isFolder()) {
+                        // perform folder synchronization
+                        RemoteOperation synchFolderOp = new RefreshFolderOperation(ocFile,
+                                System.currentTimeMillis(),
+                                false,
+                                getFileOperationsHelper().isSharedSupported(),
+                                true,
+                                getStorageManager(),
+                                getAccount(),
+                                getApplicationContext());
+                        synchFolderOp.execute(ownCloudClient);
+                    }
+                }
+
+                return ocFile;
             }
-            showDetailsIntent.putExtra(EXTRA_FILE, ocFile);
-            showDetailsIntent.putExtra(EXTRA_ACCOUNT, getAccount());
-            startActivity(showDetailsIntent);
-        }
+
+            @Override
+            protected void onPostExecute(OCFile ocFile) {
+                if (!isCancelled()) {
+                    if (ocFile == null) {
+                        Toast.makeText(getBaseContext(), R.string.file_not_found, Toast.LENGTH_LONG).show();
+
+                        swipeEmptyListRefreshLayout.setVisibility(View.GONE);
+                        swipeListRefreshLayout.setVisibility(View.VISIBLE);
+                        dismissLoadingDialog();
+
+                    } else {
+                        Intent showDetailsIntent;
+                        if (PreviewImageFragment.canBePreviewed(ocFile)) {
+                            showDetailsIntent = new Intent(getBaseContext(), PreviewImageActivity.class);
+                        } else {
+                            showDetailsIntent = new Intent(getBaseContext(), FileDisplayActivity.class);
+                        }
+                        showDetailsIntent.putExtra(EXTRA_FILE, ocFile);
+                        showDetailsIntent.putExtra(EXTRA_ACCOUNT, getAccount());
+                        startActivity(showDetailsIntent);
+                    }
+                }
+            }
+        };
+
+        updateTask.execute(path);
     }
 }