Browse Source

Final changes after CR

jabarros 9 years ago
parent
commit
34470186aa

+ 13 - 2
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -44,6 +44,7 @@ import android.os.Parcelable;
 import android.preference.PreferenceManager;
 import android.support.design.widget.Snackbar;
 import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentTransaction;
 import android.support.v4.content.ContextCompat;
 import android.support.v4.view.GravityCompat;
@@ -77,10 +78,10 @@ import com.owncloud.android.operations.SynchronizeFileOperation;
 import com.owncloud.android.operations.UploadFileOperation;
 import com.owncloud.android.services.observer.FileObserverService;
 import com.owncloud.android.syncadapter.FileSyncAdapter;
-import com.owncloud.android.ui.asynctasks.CopyAndUploadContentUrisTask;
 import com.owncloud.android.ui.fragment.FileDetailFragment;
 import com.owncloud.android.ui.fragment.FileFragment;
 import com.owncloud.android.ui.fragment.OCFileListFragment;
+import com.owncloud.android.ui.fragment.TaskRetainerFragment;
 import com.owncloud.android.ui.helpers.UriUploader;
 import com.owncloud.android.ui.preview.PreviewImageActivity;
 import com.owncloud.android.ui.preview.PreviewImageFragment;
@@ -188,6 +189,16 @@ public class FileDisplayActivity extends HookActivity
         //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
         getSupportActionBar().setHomeButtonEnabled(true);
 
+        // Init Fragment without UI to retain AsyncTask across configuration changes
+        FragmentManager fm = getSupportFragmentManager();
+        TaskRetainerFragment taskRetainerFragment =
+                (TaskRetainerFragment) fm.findFragmentByTag(TaskRetainerFragment.FTAG_TASK_RETAINER_FRAGMENT);
+        if (taskRetainerFragment == null) {
+            taskRetainerFragment = new TaskRetainerFragment();
+            fm.beginTransaction()
+                    .add(taskRetainerFragment, TaskRetainerFragment.FTAG_TASK_RETAINER_FRAGMENT).commit();
+        }   // else, Fragment already created and retained across configuration change
+
         Log_OC.v(TAG, "onCreate() end");
     }
 
@@ -744,7 +755,7 @@ public class FileDisplayActivity extends HookActivity
                 getAccount(),
                 behaviour,
                 false, // Not show waiting dialog while file is being copied from private storage
-                null
+                null  // Not needed copy temp task listener
         );
 
         uploader.uploadUris();

+ 5 - 54
src/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java

@@ -38,7 +38,6 @@ import android.content.Intent;
 import android.content.res.Resources.NotFoundException;
 import android.os.Bundle;
 import android.os.Parcelable;
-import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentManager;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.AlertDialog;
@@ -70,6 +69,7 @@ import com.owncloud.android.ui.adapter.UploaderAdapter;
 import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
 import com.owncloud.android.ui.dialog.CreateFolderDialogFragment;
 import com.owncloud.android.ui.asynctasks.CopyAndUploadContentUrisTask;
+import com.owncloud.android.ui.fragment.TaskRetainerFragment;
 import com.owncloud.android.ui.helpers.UriUploader;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.ErrorMessageAdapter;
@@ -91,8 +91,6 @@ public class ReceiveExternalFilesActivity extends FileActivity
 
     private static final String TAG = ReceiveExternalFilesActivity.class.getSimpleName();
 
-    private static final String FTAG_TASK_RETAINER_FRAGMENT = "TASK_RETAINER_FRAGMENT";
-
     private static final String FTAG_ERROR_FRAGMENT = "ERROR_FRAGMENT";
 
     private AccountManager mAccountManager;
@@ -150,10 +148,11 @@ public class ReceiveExternalFilesActivity extends FileActivity
         // Init Fragment without UI to retain AsyncTask across configuration changes
         FragmentManager fm = getSupportFragmentManager();
         TaskRetainerFragment taskRetainerFragment =
-            (TaskRetainerFragment) fm.findFragmentByTag(FTAG_TASK_RETAINER_FRAGMENT);
+            (TaskRetainerFragment) fm.findFragmentByTag(TaskRetainerFragment.FTAG_TASK_RETAINER_FRAGMENT);
         if (taskRetainerFragment == null) {
             taskRetainerFragment = new TaskRetainerFragment();
-            fm.beginTransaction().add(taskRetainerFragment, FTAG_TASK_RETAINER_FRAGMENT).commit();
+            fm.beginTransaction()
+                    .add(taskRetainerFragment, TaskRetainerFragment.FTAG_TASK_RETAINER_FRAGMENT).commit();
         }   // else, Fragment already created and retained across configuration change
     }
 
@@ -478,7 +477,7 @@ public class ReceiveExternalFilesActivity extends FileActivity
                 getAccount(),
                 FileUploader.LOCAL_BEHAVIOUR_FORGET,
                 true, // Show waiting dialog while file is being copied from private storage
-                this
+                this  // Copy temp task listener
         );
 
         UriUploader.UriUploaderResultCode resultCode = uploader.uploadUris();
@@ -749,52 +748,4 @@ public class ReceiveExternalFilesActivity extends FileActivity
         );
         errorDialog.show(getSupportFragmentManager(), FTAG_ERROR_FRAGMENT);
     }
-
-
-    /**
-     * Fragment retaining a background task across configuration changes.
-     */
-    public static class TaskRetainerFragment extends Fragment {
-
-        private CopyAndUploadContentUrisTask mTask;
-
-        /**
-         * Updates the listener of the retained task whenever the parent
-         * Activity is attached.
-         *
-         * Since its done in main thread, and provided the AsyncTask only accesses
-         * the listener in the main thread (should so), no sync problem should occur.
-         */
-        @Override
-        public void onAttach(Context context) {
-            super.onAttach(context);
-            if (mTask != null) {
-                mTask.setListener((CopyAndUploadContentUrisTask.OnCopyTmpFilesTaskListener) context);
-            }
-        }
-
-        /**
-         * Only called once, since the instance is retained across configuration changes
-         */
-        @Override
-        public void onCreate(Bundle savedInstanceState) {
-            super.onCreate(savedInstanceState);
-            setRetainInstance(true);    // the key point
-        }
-
-        /**
-         * Sets the task to retain across configuration changes
-         *
-         * @param task  Task to retain
-         */
-        private void setTask(CopyAndUploadContentUrisTask task) {
-            if (mTask != null) {
-                mTask.setListener(null);
-            }
-            mTask = task;
-            if (mTask != null && getContext() != null) {
-                task.setListener((CopyAndUploadContentUrisTask.OnCopyTmpFilesTaskListener) getContext());
-            }
-        }
-    }
 }

+ 80 - 0
src/com/owncloud/android/ui/fragment/TaskRetainerFragment.java

@@ -0,0 +1,80 @@
+/**
+ *   ownCloud Android client application
+ *
+ *   Copyright (C) 2016 ownCloud Inc.
+ *
+ *   This program is free software: you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License version 2,
+ *   as published by the Free Software Foundation.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+package com.owncloud.android.ui.fragment;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+
+import com.owncloud.android.ui.activity.ReceiveExternalFilesActivity;
+import com.owncloud.android.ui.asynctasks.CopyAndUploadContentUrisTask;
+
+/**
+ * Fragment retaining a background task across configuration changes.
+ */
+public class TaskRetainerFragment extends Fragment {
+
+    public static final String FTAG_TASK_RETAINER_FRAGMENT = "TASK_RETAINER_FRAGMENT";
+
+    private CopyAndUploadContentUrisTask mTask;
+
+    /**
+     * Updates the listener of the retained task whenever the parent
+     * Activity is attached.
+     *
+     * Since its done in main thread, and provided the AsyncTask only accesses
+     * the listener in the main thread (should so), no sync problem should occur.
+     */
+    @Override
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        if (mTask != null) {
+            mTask.setListener((CopyAndUploadContentUrisTask.OnCopyTmpFilesTaskListener) context);
+        }
+    }
+
+    /**
+     * Only called once, since the instance is retained across configuration changes
+     */
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setRetainInstance(true);    // the key point
+    }
+
+    /**
+     * Sets the task to retain across configuration changes
+     *
+     * @param task  Task to retain
+     */
+    public void setTask(CopyAndUploadContentUrisTask task) {
+        if (mTask != null) {
+            mTask.setListener(null);
+        }
+        mTask = task;
+        Context context = getContext();
+        if (mTask != null && context != null) {
+            if (context instanceof ReceiveExternalFilesActivity) {
+                task.setListener((CopyAndUploadContentUrisTask.OnCopyTmpFilesTaskListener) context);
+            } else {
+                task.setListener(null);
+            }
+        }
+    }
+}

+ 7 - 0
src/com/owncloud/android/ui/helpers/UriUploader.java

@@ -22,6 +22,7 @@ import android.accounts.Account;
 import android.content.ContentResolver;
 import android.net.Uri;
 import android.os.Parcelable;
+import android.support.v4.app.FragmentManager;
 
 import com.owncloud.android.R;
 import com.owncloud.android.files.services.FileUploader;
@@ -29,6 +30,7 @@ import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.operations.UploadFileOperation;
 import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.asynctasks.CopyAndUploadContentUrisTask;
+import com.owncloud.android.ui.fragment.TaskRetainerFragment;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.UriUtils;
 
@@ -175,6 +177,11 @@ public class UriUploader {
         CopyAndUploadContentUrisTask copyTask = new CopyAndUploadContentUrisTask
                 (mCopyTmpTaskListener, mActivity);
 
+        FragmentManager fm = mActivity.getSupportFragmentManager();
+        TaskRetainerFragment taskRetainerFragment =
+                (TaskRetainerFragment) fm.findFragmentByTag(TaskRetainerFragment.FTAG_TASK_RETAINER_FRAGMENT);
+        taskRetainerFragment.setTask(copyTask);
+
         copyTask.execute(
                 CopyAndUploadContentUrisTask.makeParamsToExecute(
                         mAccount,