Better synchronization for current account between FileDisplayActivity and FileListFr...
authorDavid A. Velasco <dvelasco@solidgear.es>
Wed, 20 Jun 2012 16:15:44 +0000 (18:15 +0200)
committerDavid A. Velasco <dvelasco@solidgear.es>
Wed, 20 Jun 2012 16:15:44 +0000 (18:15 +0200)
src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java
src/eu/alefzero/owncloud/ui/fragment/FileListFragment.java

index a7be6bd..fae2b0f 100644 (file)
@@ -270,7 +270,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
         super.onResume();\r
         \r
         if (accountsAreSetup()) {\r
         super.onResume();\r
         \r
         if (accountsAreSetup()) {\r
-            \r
+\r
             setContentView(mLayoutView);    // this should solve the crash by repeated inflating in big screens (DROIDCLOUD-27)\r
 \r
             // Listen for sync messages\r
             setContentView(mLayoutView);    // this should solve the crash by repeated inflating in big screens (DROIDCLOUD-27)\r
 \r
             // Listen for sync messages\r
@@ -285,7 +285,6 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
         \r
             // File list\r
             mFileList = (FileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
         \r
             // File list\r
             mFileList = (FileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
-            mFileList.updateAccount();\r
         \r
             // Figure out what directory to list. \r
             // Priority: Intent (here), savedInstanceState (onCreate), root dir (dir is null)\r
         \r
             // Figure out what directory to list. \r
             // Priority: Intent (here), savedInstanceState (onCreate), root dir (dir is null)\r
@@ -577,5 +576,9 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
             intent.putExtra("authorities", new String[] { AccountAuthenticator.AUTH_TOKEN_TYPE });\r
             startActivity(intent);\r
         }\r
             intent.putExtra("authorities", new String[] { AccountAuthenticator.AUTH_TOKEN_TYPE });\r
             startActivity(intent);\r
         }\r
+    }\r
+\r
+    public DataStorageManager getStorageManager() {\r
+        return mStorageManager;\r
     }    \r
 }\r
     }    \r
 }\r
index 8a5b379..3aedfad 100644 (file)
@@ -50,9 +50,9 @@ import eu.alefzero.owncloud.ui.adapter.FileListListAdapter;
  */\r
 public class FileListFragment extends FragmentListView {\r
     private static final String TAG = "FileListFragment";\r
  */\r
 public class FileListFragment extends FragmentListView {\r
     private static final String TAG = "FileListFragment";\r
-    private Account mAccount;\r
-    private Vector<OCFile> mFiles;\r
-    private DataStorageManager mStorageManager;\r
+    //private Account mAccount;         // dvelasco : the fragment is not recreated when other account is selected; keep as an attribute is dangerous\r
+    private Vector<OCFile> mFiles;    \r
+    //private DataStorageManager mStorageManager;   // dvelasco : just the same; it depends upon the current account ; it's updated in FileDisplayActivity!!\r
     private OCFile mFile;\r
     private boolean mIsLargeDevice = false; \r
 \r
     private OCFile mFile;\r
     private boolean mIsLargeDevice = false; \r
 \r
@@ -60,9 +60,6 @@ public class FileListFragment extends FragmentListView {
     public void onCreate(Bundle savedInstanceState) {\r
         super.onCreate(savedInstanceState);\r
 \r
     public void onCreate(Bundle savedInstanceState) {\r
         super.onCreate(savedInstanceState);\r
 \r
-        mAccount = AccountUtils.getCurrentOwnCloudAccount(getActivity());\r
-        mStorageManager = new FileDataStorageManager(mAccount, getActivity().getContentResolver());\r
-\r
         Intent intent = getActivity().getIntent();\r
         OCFile directory = intent.getParcelableExtra(FileDetailFragment.EXTRA_FILE);\r
         mFile = directory;\r
         Intent intent = getActivity().getIntent();\r
         OCFile directory = intent.getParcelableExtra(FileDetailFragment.EXTRA_FILE);\r
         mFile = directory;\r
@@ -114,7 +111,7 @@ public class FileListFragment extends FragmentListView {
 \r
         Intent showDetailsIntent = new Intent(getActivity(), FileDetailActivity.class);\r
         showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);\r
 \r
         Intent showDetailsIntent = new Intent(getActivity(), FileDetailActivity.class);\r
         showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);\r
-        showDetailsIntent.putExtra(FileDownloader.EXTRA_ACCOUNT, mAccount);\r
+        showDetailsIntent.putExtra(FileDownloader.EXTRA_ACCOUNT, AccountUtils.getCurrentOwnCloudAccount(getActivity()));\r
 \r
         // If we are on a large device -> update fragment\r
         if (mIsLargeDevice) {\r
 \r
         // If we are on a large device -> update fragment\r
         if (mIsLargeDevice) {\r
@@ -153,7 +150,8 @@ public class FileListFragment extends FragmentListView {
         OCFile parentDir = null;\r
         \r
         if(mFile != null){\r
         OCFile parentDir = null;\r
         \r
         if(mFile != null){\r
-            parentDir = mStorageManager.getFileById(mFile.getParentId());\r
+            DataStorageManager storageManager = ((FileDisplayActivity)getActivity()).getStorageManager();\r
+            parentDir = storageManager.getFileById(mFile.getParentId());\r
             mFile = parentDir;\r
         }\r
         \r
             mFile = parentDir;\r
         }\r
         \r
@@ -186,12 +184,14 @@ public class FileListFragment extends FragmentListView {
      */\r
     public void listDirectory(OCFile directory) {\r
         \r
      */\r
     public void listDirectory(OCFile directory) {\r
         \r
+        DataStorageManager storageManager = ((FileDisplayActivity)getActivity()).getStorageManager();\r
+\r
         // Check input parameters for null\r
         if(directory == null){\r
             if(mFile != null){\r
                 directory = mFile;\r
             } else {\r
         // Check input parameters for null\r
         if(directory == null){\r
             if(mFile != null){\r
                 directory = mFile;\r
             } else {\r
-                directory = mStorageManager.getFileByPath("/");\r
+                directory = storageManager.getFileByPath("/");\r
                 if (directory == null) return; // no files, wait for sync\r
             }\r
         }\r
                 if (directory == null) return; // no files, wait for sync\r
             }\r
         }\r
@@ -200,33 +200,22 @@ public class FileListFragment extends FragmentListView {
         // If that's not a directory -> List its parent\r
         if(!directory.isDirectory()){\r
             Log.w(TAG, "You see, that is not a directory -> " + directory.toString());\r
         // If that's not a directory -> List its parent\r
         if(!directory.isDirectory()){\r
             Log.w(TAG, "You see, that is not a directory -> " + directory.toString());\r
-            directory = mStorageManager.getFileById(directory.getParentId());\r
+            directory = storageManager.getFileById(directory.getParentId());\r
         }\r
 \r
         mFile = directory;\r
         \r
         }\r
 \r
         mFile = directory;\r
         \r
-        mFiles = mStorageManager.getDirectoryContent(directory);\r
+        mFiles = storageManager.getDirectoryContent(directory);\r
         if (mFiles == null || mFiles.size() == 0) {\r
             Toast.makeText(getActivity(), "There are no files here", Toast.LENGTH_LONG).show();\r
         }\r
         if (mFiles == null || mFiles.size() == 0) {\r
             Toast.makeText(getActivity(), "There are no files here", Toast.LENGTH_LONG).show();\r
         }\r
-        setListAdapter(new FileListListAdapter(directory, mStorageManager, getActivity()));\r
+        setListAdapter(new FileListListAdapter(directory, storageManager, getActivity()));\r
     }\r
 \r
     @Override\r
     public void onSaveInstanceState(Bundle outState) {\r
         super.onSaveInstanceState(outState);\r
     }\r
 \r
     @Override\r
     public void onSaveInstanceState(Bundle outState) {\r
         super.onSaveInstanceState(outState);\r
-        outState.putParcelable("ACCOUNT", mAccount);\r
-    }\r
-\r
-    /**\r
-     * This should be called every time the current account changes, in order to synchronize mStorageManager without create a new FileListFragment\r
-     */\r
-    public void updateAccount() {\r
-        Account old = mAccount;\r
-        mAccount = AccountUtils.getCurrentOwnCloudAccount(getActivity());\r
-        if (old != mAccount)\r
-            mStorageManager = new FileDataStorageManager(mAccount, getActivity().getContentResolver());\r
-            // dvelasco : a better solution can be provided change the flow between states "wiht account" and "without account", in terms of interactions between AuthenticatorActivity and FileDisplayActivity\r
+        outState.putParcelable("ACCOUNT", AccountUtils.getCurrentOwnCloudAccount(getActivity()));\r
     }\r
 \r
 }\r
     }\r
 \r
 }\r