proper file list handling, file basic stuff dispaying
authorBartek Przybylski <bart.p.pl@gmail.com>
Sat, 18 Feb 2012 15:38:36 +0000 (16:38 +0100)
committerBartek Przybylski <bart.p.pl@gmail.com>
Sat, 18 Feb 2012 15:38:36 +0000 (16:38 +0100)
res/layout-port/files.xml
src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java
src/eu/alefzero/owncloud/ui/fragment/FileDetail.java
src/eu/alefzero/owncloud/ui/fragment/FileList.java

index dbd48fc..d6308da 100644 (file)
@@ -6,14 +6,4 @@
     android:orientation="vertical" \r
     android:id="@+id/file_list_container">\r
 \r
     android:orientation="vertical" \r
     android:id="@+id/file_list_container">\r
 \r
-    <fragment\r
-        android:id="@+id/fileList"\r
-        android:layout_width="fill_parent"\r
-        android:layout_height="fill_parent"\r
-        class="eu.alefzero.owncloud.ui.fragment.FileList" >\r
-\r
-        <!-- Preview: layout=@layout/list_layout -->\r
-    </fragment>\r
-    <!-- </LinearLayout> -->\r
-\r
 </LinearLayout>
\ No newline at end of file
 </LinearLayout>
\ No newline at end of file
index f28cdd9..93d0ab7 100644 (file)
@@ -86,7 +86,6 @@ public class FileDisplayActivity extends android.support.v4.app.FragmentActivity
   private Cursor mCursor;\r
   private boolean mIsDisplayingFile;\r
   private ArrayAdapter<String> mDirectories;\r
   private Cursor mCursor;\r
   private boolean mIsDisplayingFile;\r
   private ArrayAdapter<String> mDirectories;\r
-  private FileList mFileList;\r
  \r
   private static final int DIALOG_CHOOSE_ACCOUNT = 0;\r
   \r
  \r
   private static final int DIALOG_CHOOSE_ACCOUNT = 0;\r
   \r
@@ -105,14 +104,13 @@ public class FileDisplayActivity extends android.support.v4.app.FragmentActivity
     super.onCreate(savedInstanceState);\r
     mDirectories = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item);\r
     mDirectories.add("/");\r
     super.onCreate(savedInstanceState);\r
     mDirectories = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item);\r
     mDirectories.add("/");\r
-    mFileList = new FileList();\r
     setContentView(R.layout.files);\r
     getActionBar().setNavigationMode(android.support.v4.app.ActionBar.NAVIGATION_MODE_LIST);\r
     getActionBar().setDisplayShowTitleEnabled(false);\r
     getActionBar().setListNavigationCallbacks(mDirectories, this);\r
     \r
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction();\r
     setContentView(R.layout.files);\r
     getActionBar().setNavigationMode(android.support.v4.app.ActionBar.NAVIGATION_MODE_LIST);\r
     getActionBar().setDisplayShowTitleEnabled(false);\r
     getActionBar().setListNavigationCallbacks(mDirectories, this);\r
     \r
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction();\r
-    ft.add(R.id.file_list_container, mFileList);\r
+    ft.add(R.id.file_list_container, new FileList());\r
     if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {\r
       ft.add(R.id.fileDetail, new FileDetail());\r
     }\r
     if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {\r
       ft.add(R.id.fileDetail, new FileDetail());\r
     }\r
@@ -362,9 +360,12 @@ public class FileDisplayActivity extends android.support.v4.app.FragmentActivity
   @Override\r
   public void onBackPressed() {\r
     popPath();\r
   @Override\r
   public void onBackPressed() {\r
     popPath();\r
-    //getSupportFragmentManager().popBackStack();\r
-    //super.onBackPressed();\r
-    getSupportFragmentManager().popBackStackImmediate();\r
+    if (mDirectories.getCount() == 0)\r
+    {\r
+      super.onBackPressed();\r
+      return;\r
+    }\r
+    ((FileList)getSupportFragmentManager().findFragmentById(id.file_list_container)).onBackPressed();\r
   }\r
   \r
   //@Override\r
   }\r
   \r
   //@Override\r
index f6adfec..9ac4910 100644 (file)
  */\r
 package eu.alefzero.owncloud.ui.fragment;\r
 \r
  */\r
 package eu.alefzero.owncloud.ui.fragment;\r
 \r
+import eu.alefzero.owncloud.DisplayUtils;\r
 import eu.alefzero.owncloud.R;\r
 import eu.alefzero.owncloud.R;\r
+import eu.alefzero.owncloud.cp;\r
 import eu.alefzero.owncloud.R.id;\r
 import eu.alefzero.owncloud.R.layout;\r
 import eu.alefzero.owncloud.R.id;\r
 import eu.alefzero.owncloud.R.layout;\r
+import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;\r
 import android.content.Intent;\r
 import android.content.Intent;\r
+import android.database.Cursor;\r
+import android.net.Uri;\r
 import android.os.Bundle;\r
 import android.support.v4.app.Fragment;\r
 import android.util.Log;\r
 import android.os.Bundle;\r
 import android.support.v4.app.Fragment;\r
 import android.util.Log;\r
@@ -40,19 +45,25 @@ public class FileDetail extends Fragment {
   public Intent mIntent;\r
   \r
   public void setStuff(Intent intent) {\r
   public Intent mIntent;\r
   \r
   public void setStuff(Intent intent) {\r
-    setStuff(intent, getView());\r
+    mIntent = intent;\r
+    setStuff(getView());\r
   }\r
   \r
   }\r
   \r
-  private void setStuff(Intent intent, View view) {\r
-    String filename = intent.getStringExtra("FILE_NAME");\r
-    String filepath = intent.getStringExtra("FILE_PATH");\r
+  private void setStuff(View view) {\r
+    String id = mIntent.getStringExtra("FILE_ID");\r
+    String account_name = mIntent.getStringExtra("ACCOUNT_NAME");\r
+    Cursor c = getActivity().managedQuery(\r
+        Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, id),\r
+        null,\r
+        ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",\r
+        new String[]{account_name},\r
+        null);\r
+    c.moveToFirst();\r
+    \r
+    String filename = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_NAME));\r
     setFilename(filename, view);\r
     setFilename(filename, view);\r
-  }\r
-  \r
-  @Override\r
-  public void onCreate(Bundle savedInstanceState) {\r
-    // TODO Auto-generated method stub\r
-    super.onCreate(savedInstanceState);\r
+    String mimetype = c.getString(c.getColumnIndex(ProviderTableMeta.FILE_CONTENT_TYPE));\r
+    setFiletype(DisplayUtils.convertMIMEtoPrettyPrint(mimetype), view);\r
   }\r
 \r
   @Override\r
   }\r
 \r
   @Override\r
@@ -60,7 +71,10 @@ public class FileDetail extends Fragment {
       Bundle savedInstanceState) {\r
     View v = inflater.inflate(R.layout.file_details, container, false);\r
     \r
       Bundle savedInstanceState) {\r
     View v = inflater.inflate(R.layout.file_details, container, false);\r
     \r
-    if (getActivity().getIntent() != null) setStuff(getActivity().getIntent(), v);\r
+    if (getActivity().getIntent() != null) {\r
+      mIntent = getActivity().getIntent();\r
+      setStuff(v);\r
+    }\r
     return v;\r
   }\r
 \r
     return v;\r
   }\r
 \r
@@ -69,7 +83,16 @@ public class FileDetail extends Fragment {
     if (tv != null) tv.setText(filename);\r
   }\r
   \r
     if (tv != null) tv.setText(filename);\r
   }\r
   \r
+  private void setFiletype(String mimetype, View target_view) {\r
+    TextView tv = (TextView) target_view.findViewById(R.id.textView2);\r
+    if (tv != null) tv.setText(mimetype);\r
+  }\r
+  \r
   public void setFilename(String filename) {\r
     setFilename(filename, getView());\r
   }\r
   public void setFilename(String filename) {\r
     setFilename(filename, getView());\r
   }\r
+  \r
+  public void setFiletype(String filename) {\r
+    setFiletype(filename, getView());\r
+  }\r
 }\r
 }\r
index 912312c..3c7c0ea 100644 (file)
@@ -17,6 +17,8 @@
  */\r
 package eu.alefzero.owncloud.ui.fragment;\r
 \r
  */\r
 package eu.alefzero.owncloud.ui.fragment;\r
 \r
+import java.util.Stack;\r
+\r
 import android.accounts.Account;\r
 import android.accounts.AccountManager;\r
 import android.app.FragmentManager;\r
 import android.accounts.Account;\r
 import android.accounts.AccountManager;\r
 import android.app.FragmentManager;\r
@@ -26,6 +28,7 @@ import android.database.Cursor;
 import android.net.Uri;\r
 import android.os.Bundle;\r
 import android.support.v4.app.FragmentTransaction;\r
 import android.net.Uri;\r
 import android.os.Bundle;\r
 import android.support.v4.app.FragmentTransaction;\r
+import android.util.Log;\r
 import android.view.LayoutInflater;\r
 import android.view.View;\r
 import android.view.ViewGroup;\r
 import android.view.LayoutInflater;\r
 import android.view.View;\r
 import android.view.ViewGroup;\r
@@ -48,17 +51,12 @@ public class FileList extends FragmentListView {
   private Cursor mCursor;\r
   private Account mAccount;\r
   private AccountManager mAccountManager;\r
   private Cursor mCursor;\r
   private Account mAccount;\r
   private AccountManager mAccountManager;\r
-  private String mDirName;\r
-  private String mParentId;\r
+  private Stack<String> mDirNames;\r
+  private Stack<String> mParentsIds;\r
 \r
   public FileList() {\r
 \r
   public FileList() {\r
-    mDirName = null;\r
-    mParentId = null;\r
-  }\r
-\r
-  public FileList(String dirName, String parentId) {\r
-    mDirName = dirName;\r
-    mParentId = parentId;\r
+    mDirNames = new Stack<String>();\r
+    mParentsIds = new Stack<String>();\r
   }\r
   \r
   @Override\r
   }\r
   \r
   @Override\r
@@ -72,43 +70,47 @@ public class FileList extends FragmentListView {
   \r
   @Override\r
   public void onItemClick(AdapterView<?> l, View v, int position, long id) {\r
   \r
   @Override\r
   public void onItemClick(AdapterView<?> l, View v, int position, long id) {\r
-    FileDetail fd = (FileDetail) getFragmentManager().findFragmentById(R.id.fileDetail); \r
     if (!mCursor.moveToPosition(position)) {\r
       throw new IndexOutOfBoundsException("Incorrect item selected");\r
     }\r
     if (!mCursor.moveToPosition(position)) {\r
       throw new IndexOutOfBoundsException("Incorrect item selected");\r
     }\r
-    \r
+    String id_ = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta._ID));\r
     if (mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_CONTENT_TYPE)).equals("DIR")) {\r
     if (mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_CONTENT_TYPE)).equals("DIR")) {\r
-        String id_ = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta._ID));\r
         String dirname = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_NAME));\r
 \r
         String dirname = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_NAME));\r
 \r
-        FileList fl = new FileList(dirname, id_);\r
+        mDirNames.push(dirname);\r
+        mParentsIds.push(id_);\r
         ((FileDisplayActivity)getActivity()).pushPath(dirname);\r
         ((FileDisplayActivity)getActivity()).pushPath(dirname);\r
-\r
-        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();\r
-        ft.addToBackStack(null);\r
-        ft.replace(R.id.file_list_container, fl);\r
-        ft.commit();\r
-        getSupportFragmentManager().executePendingTransactions();\r
+        \r
+        populateFileList();\r
         return;\r
     }\r
     Intent i = new Intent(getActivity(), FileDetailActivity.class);\r
     i.putExtra("FILE_NAME", ((TextView)v.findViewById(R.id.Filename)).getText());\r
         return;\r
     }\r
     Intent i = new Intent(getActivity(), FileDetailActivity.class);\r
     i.putExtra("FILE_NAME", ((TextView)v.findViewById(R.id.Filename)).getText());\r
+    i.putExtra("FILE_ID", id_);\r
+    i.putExtra("ACCOUNT_NAME", mAccount.name);\r
+    FileDetail fd = (FileDetail) getFragmentManager().findFragmentById(R.id.fileDetail);\r
     if (fd != null) {\r
       fd.setStuff(i);\r
     } else {\r
       startActivity(i);\r
     }\r
   }\r
     if (fd != null) {\r
       fd.setStuff(i);\r
     } else {\r
       startActivity(i);\r
     }\r
   }\r
-  \r
+\r
+  public void onBackPressed() {\r
+    mParentsIds.pop();\r
+    mDirNames.pop();\r
+    populateFileList();\r
+  }\r
+\r
   private void populateFileList() {\r
   private void populateFileList() {\r
-    if (mParentId == null || mDirName == null) {\r
+    if (mParentsIds.empty()) {\r
       mCursor = getActivity().getContentResolver().query(ProviderTableMeta.CONTENT_URI,\r
         null,\r
         ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",\r
         new String[]{mAccount.name},\r
         null);\r
     } else {\r
       mCursor = getActivity().getContentResolver().query(ProviderTableMeta.CONTENT_URI,\r
         null,\r
         ProviderTableMeta.FILE_ACCOUNT_OWNER+"=?",\r
         new String[]{mAccount.name},\r
         null);\r
     } else {\r
-      mCursor = getActivity().managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, mParentId),\r
+      mCursor = getActivity().managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, mParentsIds.peek()),\r
           null,\r
           ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",\r
           new String[]{mAccount.name}, null);\r
           null,\r
           ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",\r
           new String[]{mAccount.name}, null);\r