Merge branch 'master' of ssh://git@gitorious.org/owncloud/android-devel.git
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / ui / fragment / FileListFragment.java
index a28c411..24281b6 100644 (file)
@@ -48,10 +48,12 @@ import eu.alefzero.owncloud.ui.adapter.FileListListAdapter;
  * \r
  */\r
 public class FileListFragment extends FragmentListView {\r
+    private static final String TAG = "FileListFragment";\r
     private Account mAccount;\r
     private Stack<String> mDirNames;\r
     private Vector<OCFile> mFiles;\r
     private DataStorageManager mStorageManager;\r
+    private OCFile mFile;\r
     private boolean mIsLargeDevice = false;\r
 \r
     public FileListFragment() {\r
@@ -63,15 +65,19 @@ public class FileListFragment extends FragmentListView {
         super.onCreate(savedInstanceState);\r
 \r
         mAccount = AccountUtils.getCurrentOwnCloudAccount(getActivity());\r
+        mStorageManager = new FileDataStorageManager(mAccount, getActivity().getContentResolver());\r
         getListView().setDivider(getResources().getDrawable(R.drawable.uploader_list_separator));\r
         getListView().setDividerHeight(1);\r
 \r
-        populateFileList();\r
+        Intent intent = getActivity().getIntent();\r
+        OCFile directory = intent.getParcelableExtra(FileDetailFragment.EXTRA_FILE);\r
+        mFile = directory;\r
+        \r
+        listDirectory(directory);\r
     }\r
 \r
     @Override\r
     public void onStart() {\r
-                \r
         // Create a placeholder upon launch\r
         View fragmentContainer = getActivity().findViewById(R.id.file_details_container);\r
         if (fragmentContainer != null) {\r
@@ -89,22 +95,23 @@ public class FileListFragment extends FragmentListView {
             throw new IndexOutOfBoundsException("Incorrect item selected");\r
         }\r
         OCFile file = mFiles.get(position);\r
-\r
+        mFile = file;\r
+        \r
         // Update ActionBarPath\r
         if (file.getMimetype().equals("DIR")) {\r
             String dirname = file.getFileName();\r
 \r
             mDirNames.push(dirname);\r
             ((FileDisplayActivity) getActivity()).pushPath(dirname);\r
-\r
-            populateFileList();\r
+            \r
+            listDirectory(file);\r
             resetFileFragment();\r
 \r
             return;\r
         }\r
 \r
         Intent showDetailsIntent = new Intent(getActivity(), FileDetailActivity.class);\r
-        showDetailsIntent.putExtra(FileDetailFragment.FILE, file);\r
+        showDetailsIntent.putExtra(FileDetailFragment.EXTRA_FILE, file);\r
         showDetailsIntent.putExtra(FileDownloader.EXTRA_ACCOUNT, mAccount);\r
 \r
         // If we are on a large device -> update fragment\r
@@ -142,26 +149,53 @@ public class FileListFragment extends FragmentListView {
      */\r
     public void onNavigateUp() {\r
         mDirNames.pop();\r
-        populateFileList();\r
+        OCFile parentDir = null;\r
+        \r
+        if(mFile != null){\r
+            parentDir = mStorageManager.getFileById(mFile.getParentId());\r
+            mFile = parentDir;\r
+        }\r
+        \r
+        listDirectory(parentDir);\r
         resetFileFragment();\r
     }\r
 \r
     /**\r
-     * Lists the directory\r
+     * Calls {@link FileListFragment#listDirectory(OCFile)} with a null parameter\r
      */\r
-    public void populateFileList() {\r
-        String s = "/";\r
-        for (String a : mDirNames)\r
-            s += a + "/";\r
-        Log.e("ASD", s);\r
-\r
-        mStorageManager = new FileDataStorageManager(mAccount, getActivity().getContentResolver());\r
-        OCFile file = mStorageManager.getFileByPath(s);\r
-        mFiles = mStorageManager.getDirectoryContent(file);\r
+    public void listDirectory(){\r
+        listDirectory(null);\r
+    }\r
+    \r
+    /**\r
+     * Lists the given directory on the view. When the input parameter is null,\r
+     * it will either refresh the last known directory, or list the root\r
+     * if there never was a directory.\r
+     * \r
+     * @param directory File to be listed\r
+     */\r
+    public void listDirectory(OCFile directory) {\r
+                \r
+        // Check input parameters for null\r
+        if(directory == null){\r
+            if(mFile != null){\r
+                directory = mFile;\r
+            } else {\r
+                directory = mStorageManager.getFileByPath("/");\r
+            }\r
+        }\r
+        \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
+        }\r
+        \r
+        mFiles = mStorageManager.getDirectoryContent(directory);\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(file, mStorageManager, getActivity()));\r
+        setListAdapter(new FileListListAdapter(directory, mStorageManager, getActivity()));\r
     }\r
 \r
     @Override\r
@@ -169,48 +203,5 @@ public class FileListFragment extends FragmentListView {
         super.onSaveInstanceState(outState);\r
         outState.putParcelable("ACCOUNT", mAccount);\r
     }\r
-    \r
-    // TODO: Delete this testing stuff.\r
-    /*\r
-     * private void addContact(Account account, String name, String username) {\r
-     * Log.i("ASD", "Adding contact: " + name);\r
-     * ArrayList<ContentProviderOperation> operationList = new\r
-     * ArrayList<ContentProviderOperation>();\r
-     * \r
-     * //Create our RawContact ContentProviderOperation.Builder builder =\r
-     * ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);\r
-     * builder.withValue(RawContacts.ACCOUNT_NAME, account.name);\r
-     * builder.withValue(RawContacts.ACCOUNT_TYPE, account.type);\r
-     * builder.withValue(RawContacts.SYNC1, username);\r
-     * operationList.add(builder.build());\r
-     * \r
-     * //Create a Data record of common type 'StructuredName' for our RawContact\r
-     * builder =\r
-     * ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);\r
-     * builder\r
-     * .withValueBackReference(ContactsContract.CommonDataKinds.StructuredName\r
-     * .RAW_CONTACT_ID, 0); builder.withValue(ContactsContract.Data.MIMETYPE,\r
-     * ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);\r
-     * builder\r
-     * .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,\r
-     * name); operationList.add(builder.build());\r
-     * \r
-     * //Create a Data record of custom type\r
-     * "vnd.android.cursor.item/vnd.fm.last.android.profile" to display a link\r
-     * to the Last.fm profile builder =\r
-     * ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);\r
-     * builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);\r
-     * builder.withValue(ContactsContract.Data.MIMETYPE,\r
-     * "vnd.android.cursor.item/vnd.owncloud.contact.profile");\r
-     * builder.withValue(ContactsContract.Data.DATA1, username);\r
-     * builder.withValue(ContactsContract.Data.DATA2, "Last.fm Profile");\r
-     * builder.withValue(ContactsContract.Data.DATA3, "View profile");\r
-     * operationList.add(builder.build());\r
-     * \r
-     * try {\r
-     * getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY,\r
-     * operationList); } catch (Exception e) { Log.e("ASD",\r
-     * "Something went wrong during creation! " + e); e.printStackTrace(); } }\r
-     */\r
 \r
 }\r