some file list handling, action bar added
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / ui / fragment / FileList.java
index 1fb8abc..691c2cf 100644 (file)
  */\r
 package eu.alefzero.owncloud.ui.fragment;\r
 \r
+import java.util.ListIterator;\r
+import java.util.Stack;\r
+\r
+import eu.alefzero.owncloud.DisplayUtils;\r
 import eu.alefzero.owncloud.R;\r
 import eu.alefzero.owncloud.R.id;\r
 import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\r
 import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;\r
+import eu.alefzero.owncloud.ui.FragmentListView;\r
 import eu.alefzero.owncloud.ui.activity.FileDetailActivity;\r
+import eu.alefzero.owncloud.ui.activity.FileDisplayActivity;\r
 import eu.alefzero.owncloud.ui.adapter.FileListListAdapter;\r
 import eu.alefzero.owncloud.ui.fragment.ActionBar;\r
 import android.accounts.Account;\r
@@ -33,32 +39,39 @@ import android.database.Cursor;
 import android.net.Uri;\r
 import android.os.Bundle;\r
 import android.support.v4.app.FragmentTransaction;\r
+import android.support.v4.app.Fragment;\r
 import android.support.v4.app.ListFragment;\r
+import android.util.Log;\r
 import android.view.LayoutInflater;\r
 import android.view.View;\r
 import android.view.ViewGroup;\r
+import android.widget.AdapterView;\r
 import android.widget.ArrayAdapter;\r
 import android.widget.ListView;\r
 import android.widget.TextView;\r
 import android.widget.Toast;\r
+import android.widget.AdapterView.OnItemClickListener;\r
 \r
 /**\r
  * A Fragment that lists all files and folders in a given path.\r
  * @author Bartek Przybylski\r
  *\r
  */\r
-public class FileList extends ListFragment {\r
+public class FileList extends FragmentListView {\r
   private Cursor mCursor;\r
   private Account mAccount;\r
   private AccountManager mAccountManager;\r
   private View mheaderView;\r
+  private Stack<String> mParentsIds;\r
+  private Stack<String> mDirNames;\r
 \r
-  \r
   @Override\r
   public void onCreate(Bundle savedInstanceState) {\r
     // TODO Auto-generated method stub\r
     super.onCreate(savedInstanceState);\r
     \r
+    mParentsIds = new Stack<String>();\r
+    mDirNames = new Stack<String>();\r
     mAccountManager = (AccountManager)getActivity().getSystemService(Service.ACCOUNT_SERVICE);\r
     mAccount = mAccountManager.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE)[0];\r
     populateFileList();\r
@@ -71,42 +84,40 @@ public class FileList extends ListFragment {
   }\r
   \r
   @Override\r
-  public void onListItemClick(ListView l, View v, int position, long id) {\r
+  public void onItemClick(AdapterView<?> l, View v, int position, long id) {\r
     FileDetail fd = (FileDetail) getFragmentManager().findFragmentById(R.id.fileDetail);\r
-    ActionBar ab = (ActionBar) getFragmentManager().findFragmentById(R.id.actionBar);\r
-    \r
     if (!mCursor.moveToPosition(position)) {\r
       throw new IndexOutOfBoundsException("Incorrect item selected");\r
     }\r
+    \r
     if (mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_CONTENT_TYPE)).equals("DIR")) {\r
         String id_ = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta._ID));\r
+        mParentsIds.push(id_);\r
         String dirname = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_NAME));\r
-        //ab..push(DisplayUtils.HtmlDecode(dirname));\r
-        //mPath.addLast(DisplayUtils.HtmlDecode(dirname));\r
-        //mParents.push(id_);\r
+        mDirNames.push(dirname);\r
+        ((FileDisplayActivity)getActivity()).pushPath(DisplayUtils.HtmlDecode(dirname));\r
         mCursor = getActivity().managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, id_),\r
                                null,\r
                                ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",\r
                                new String[]{mAccount.name}, null);\r
         setListAdapter(new FileListListAdapter(mCursor, getActivity()));\r
-        setListShown(false);\r
-        setListShown(true);\r
-        super.onListItemClick(l, v, position, id);\r
+        //super.onListItemClick(l, v, position, id);\r
         return;\r
     }\r
     Intent i = new Intent(getActivity(), FileDetailActivity.class);\r
-    i.putExtra("FILE_PATH", ab.getCurrentPath());\r
     i.putExtra("FILE_NAME", ((TextView)v.findViewById(R.id.Filename)).getText());\r
     if (fd != null) {\r
       fd.setStuff(i);\r
       //fd.use(((TextView)v.findViewById(R.id.Filename)).getText());\r
     } else {\r
-      i.putExtra("FILE_PATH", ab.getCurrentPath());\r
       i.putExtra("FILE_NAME", ((TextView)v.findViewById(R.id.Filename)).getText());\r
       startActivity(i);\r
     }\r
-    super.onListItemClick(l, v, position, id);\r
-\r
+    FragmentTransaction ft = getFragmentManager().beginTransaction();\r
+    ft.replace(R.id.fileList, this);\r
+    ft.commitAllowingStateLoss();\r
+    //super.onListItemClick(l, v, position, id);\r
+    \r
   }\r
   \r
   @Override\r
@@ -124,4 +135,24 @@ public class FileList extends ListFragment {
     \r
     setListAdapter(new FileListListAdapter(mCursor, getActivity()));\r
   }\r
+  \r
+  public void onBackPressed() {\r
+    if (!mParentsIds.empty()) {\r
+      mParentsIds.pop();\r
+      mDirNames.pop();\r
+    }\r
+    if (!mParentsIds.empty()) {\r
+      \r
+      String id_ = mParentsIds.peek();\r
+      String dirname = mDirNames.peek();\r
+      mCursor = getActivity().managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, id_),\r
+                             null,\r
+                             ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",\r
+                             new String[]{mAccount.name}, null);\r
+      setListAdapter(new FileListListAdapter(mCursor, getActivity()));\r
+    } else {\r
+      populateFileList();\r
+    }\r
+      \r
+  }\r
 }\r