New Layout for FileDetailsFragment (needs to be redone with
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / ui / fragment / FileListFragment.java
index 659d337..0aeea16 100644 (file)
@@ -52,6 +52,8 @@ public class FileListFragment extends FragmentListView {
     private Stack<String> mDirNames;\r
     private Vector<OCFile> mFiles;\r
     private DataStorageManager mStorageManager;\r
+    private FileDetailFragment mFileDetailsDetailFragment;\r
+    private boolean mIsLargeDevice = false;\r
 \r
     public FileListFragment() {\r
         mDirNames = new Stack<String>();\r
@@ -62,14 +64,29 @@ public class FileListFragment extends FragmentListView {
         super.onCreate(savedInstanceState);\r
 \r
         mAccount = AccountUtils.getCurrentOwnCloudAccount(getActivity());\r
-        getListView().setDivider(\r
-                getResources().getDrawable(R.drawable.uploader_list_separator));\r
+        getListView().setDivider(getResources().getDrawable(R.drawable.uploader_list_separator));\r
         getListView().setDividerHeight(1);\r
 \r
         populateFileList();\r
     }\r
 \r
     @Override\r
+    public void onStart() {\r
+        // Inflate the original fragment for better performance\r
+        mFileDetailsDetailFragment = new FileDetailFragment();\r
+        \r
+        // Create a placeholder upon launch\r
+        View fragmentContainer = getActivity().findViewById(R.id.file_details_container);\r
+        if (fragmentContainer != null) {\r
+            mIsLargeDevice = true;\r
+            FragmentTransaction transaction = getFragmentManager().beginTransaction();\r
+            transaction.replace(R.id.file_details_container, new FileDetailFragment(true));\r
+            transaction.commit();\r
+        }\r
+        super.onStart();\r
+    }\r
+\r
+    @Override\r
     public void onItemClick(AdapterView<?> l, View v, int position, long id) {\r
         if (mFiles.size() <= position) {\r
             throw new IndexOutOfBoundsException("Incorrect item selected");\r
@@ -85,68 +102,50 @@ public class FileListFragment extends FragmentListView {
 \r
             populateFileList();\r
             resetFileFragment();\r
-            \r
+\r
             return;\r
         }\r
 \r
-        Intent showDetailsIntent = new Intent(getActivity(),\r
-                FileDetailActivity.class);\r
+        Intent showDetailsIntent = new Intent(getActivity(), FileDetailActivity.class);\r
         showDetailsIntent.putExtra(FileDetailFragment.FILE, file);\r
         showDetailsIntent.putExtra(FileDownloader.EXTRA_ACCOUNT, mAccount);\r
 \r
-        // Try to find by tag first\r
-        FileDetailFragment fd = (FileDetailFragment) getFragmentManager()\r
-                .findFragmentByTag("FileDetails");\r
-\r
-        // Could be the first time the user has touched a file. find by id\r
-        if (fd == null) {\r
-            fd = (FileDetailFragment) getFragmentManager().findFragmentById(\r
-                    R.id.fileDetail);\r
-        }\r
-\r
-        // Tablets will have this fragment, phones not. Could still be null\r
-        if (fd != null) {\r
-\r
-            if (fd.isEmptyLayout()) {\r
-                // True, if this is the first time a user taps on a file\r
-                FragmentTransaction transaction = getFragmentManager()\r
-                        .beginTransaction();\r
-                fd = new FileDetailFragment(showDetailsIntent);\r
-                transaction.replace(R.id.fileDetail, fd, "FileDetails");\r
+        // If we are on a large device -> update fragment\r
+        if (mIsLargeDevice) {\r
+            FileDetailFragment fileDetails = (FileDetailFragment) getFragmentManager().findFragmentByTag("FileDetails");\r
+            if (fileDetails == null) {\r
+                FragmentTransaction transaction = getFragmentManager().beginTransaction();\r
+                transaction.replace(R.id.file_details_container, mFileDetailsDetailFragment, "FileDetails");\r
                 transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);\r
                 transaction.commit();\r
             } else {\r
-                fd.updateFileDetails(showDetailsIntent);\r
+                fileDetails.updateFileDetails(showDetailsIntent);\r
             }\r
-\r
         } else {\r
             startActivity(showDetailsIntent);\r
         }\r
     }\r
 \r
     /**\r
-     * Resets the FileDetailsFragment on Tablets\r
-     * so that it always displays "Tab on a file to display it's details" \r
+     * Resets the FileDetailsFragment on Tablets so that it always displays\r
+     * "Tab on a file to display it's details"\r
      */\r
     private void resetFileFragment() {\r
         FileDetailFragment fileDetails = (FileDetailFragment) getFragmentManager().findFragmentByTag("FileDetails");\r
-        if(fileDetails != null){\r
+        if (fileDetails != null) {\r
             FragmentTransaction transaction = getFragmentManager().beginTransaction();\r
             transaction.remove(fileDetails);\r
-            transaction.add(R.id.file_details_container, new FileDetailFragment());\r
+            transaction.add(R.id.file_details_container, new FileDetailFragment(true));\r
             transaction.commit();\r
         }\r
     }\r
 \r
     @Override\r
-    public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2,\r
-            long arg3) {\r
+    public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {\r
         ClipData.Item item = new ClipData.Item("ASD");\r
-        ClipDescription cd = new ClipDescription("ASD",\r
-                new String[] { ClipDescription.MIMETYPE_TEXT_PLAIN });\r
+        ClipDescription cd = new ClipDescription("ASD", new String[] { ClipDescription.MIMETYPE_TEXT_PLAIN });\r
         ClipData dragData = new ClipData(cd, item);\r
-        arg1.startDrag(dragData,\r
-                new View.DragShadowBuilder(arg0.getChildAt(arg2)), null, 0);\r
+        arg1.startDrag(dragData, new View.DragShadowBuilder(arg0.getChildAt(arg2)), null, 0);\r
         return true;\r
     }\r
 \r
@@ -168,16 +167,13 @@ public class FileListFragment extends FragmentListView {
             s += a + "/";\r
         Log.e("ASD", s);\r
 \r
-        mStorageManager = new FileDataStorageManager(mAccount, getActivity()\r
-                .getContentResolver());\r
+        mStorageManager = new FileDataStorageManager(mAccount, getActivity().getContentResolver());\r
         OCFile file = mStorageManager.getFileByPath(s);\r
         mFiles = mStorageManager.getDirectoryContent(file);\r
         if (mFiles == null || mFiles.size() == 0) {\r
-            Toast.makeText(getActivity(), "There are no files here",\r
-                    Toast.LENGTH_LONG).show();\r
+            Toast.makeText(getActivity(), "There are no files here", Toast.LENGTH_LONG).show();\r
         }\r
-        setListAdapter(new FileListListAdapter(file, mStorageManager,\r
-                getActivity()));\r
+        setListAdapter(new FileListListAdapter(file, mStorageManager, getActivity()));\r
     }\r
 \r
     // TODO: Delete this testing stuff.\r