android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/res/layout/file_explorer.xml
                      |   20 --
 
android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/res/layout/file_grid.xml
                          |   20 ++
 
android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/res/values/strings.xml
                            |    6 
 
android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/FileUtilities.java
         |   88 +++++++++
 
android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/GridItemAdapter.java
       |   12 -
 
android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/LibreOfficeUIActivity.java
 |   92 +++++++---
 
android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/WriterViewerActivity.java
  |   16 +
 7 files changed, 203 insertions(+), 51 deletions(-)

New commits:
commit 06a5ea83858607e8ca4e628b2ac5ef0267335983
Author: Iain Billett <Iain@Iains-MacBook-Pro.local>
Date:   Thu Jun 14 17:33:16 2012 +0100

    More work on the file explorer. Added file type filtering. Maintains state 
if user switches to viewer and back.

diff --git 
a/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/res/layout/file_explorer.xml
 
b/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/res/layout/file_explorer.xml
deleted file mode 100644
index 1e241c0..0000000
--- 
a/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/res/layout/file_explorer.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical" >
-
-    <GridView
-        android:id="@+id/file_explorer_grid_view"
-       android:layout_width="fill_parent" 
-           android:layout_height="fill_parent"
-           android:columnWidth="120dp"
-           android:numColumns="auto_fit"
-           android:verticalSpacing="10dp"
-           android:horizontalSpacing="10dp"
-           android:stretchMode="columnWidth"
-           android:gravity="center">
-    </GridView>
-       
-       
-</LinearLayout>
\ No newline at end of file
diff --git 
a/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/res/layout/file_grid.xml
 
b/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/res/layout/file_grid.xml
new file mode 100644
index 0000000..1e241c0
--- /dev/null
+++ 
b/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/res/layout/file_grid.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android";
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical" >
+
+    <GridView
+        android:id="@+id/file_explorer_grid_view"
+       android:layout_width="fill_parent" 
+           android:layout_height="fill_parent"
+           android:columnWidth="120dp"
+           android:numColumns="auto_fit"
+           android:verticalSpacing="10dp"
+           android:horizontalSpacing="10dp"
+           android:stretchMode="columnWidth"
+           android:gravity="center">
+    </GridView>
+       
+       
+</LinearLayout>
\ No newline at end of file
diff --git 
a/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/res/values/strings.xml
 
b/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/res/values/strings.xml
index 1dfa489..71466de 100644
--- 
a/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/res/values/strings.xml
+++ 
b/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/res/values/strings.xml
@@ -4,5 +4,11 @@
     <string name="hello">Hello World, LibreOfficeUIActivity!</string>
     <string name="app_name">LibreOfficeUI</string>
     <string name="menu_search">Search</string>
+    <string-array name="file_view_modes">
+        <item >EVERYTHING</item>
+        <item >DOCUMENTS</item>
+        <item >SPREADSHEETS</item>
+        <item >PRESENTATIONS</item>
+    </string-array>
 
 </resources>
\ No newline at end of file
diff --git 
a/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/FileUtilities.java
 
b/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/FileUtilities.java
new file mode 100644
index 0000000..3b6bbf3
--- /dev/null
+++ 
b/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/FileUtilities.java
@@ -0,0 +1,88 @@
+package org.libreoffice.ui;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FilenameFilter;
+
+public class FileUtilities {
+       
+       static final int ALL = -1;
+       static final int DOC = 0;
+       static final int CALC = 1;
+       static final int IMPRESS = 2;
+       
+       private static String[] fileExtensions = {".odt",".ods",".odp"};
+       
+       static boolean isDoc(String filename){
+               if( filename.endsWith( fileExtensions[ DOC ] ) ){
+                       return true;
+               }
+               return false;
+       }
+       
+       static boolean isCalc(String filename){
+               if( filename.endsWith( fileExtensions[ CALC ] ) ){
+                       return true;
+               }
+               return false;
+       }
+       
+       static boolean isImpress(String filename){
+               if( filename.endsWith( fileExtensions[ IMPRESS ] ) ){
+                       return true;
+               }
+               return false;
+       }
+       
+       static FileFilter getFileFilter(int mode){
+               if( mode != ALL){
+                       final String ext = fileExtensions[ mode ];
+                       return new FileFilter() {
+                               
+                               public boolean accept(File pathname) {
+                                       if( pathname.getName().endsWith( ext ) 
){
+                                               return true;
+                                       }
+                                       if( pathname.isDirectory() ){
+                                               return true;
+                                       }
+                                       return false;
+                               }
+                       };
+               }else{//return all
+                       return new FileFilter() {
+                               
+                               public boolean accept(File pathname) {
+                                       // TODO Auto-generated method stub
+                                       return true;
+                               }
+                       };
+               }
+       }
+
+       static FilenameFilter getFilenameFilter(int mode){
+               if( mode != ALL){
+                       final String ext = fileExtensions[ mode ];
+                       return new FilenameFilter() {
+                               
+                               public boolean accept(File dir, String 
filename) {
+                                       if( filename.endsWith( ext ) ){
+                                               return true;
+                                       }
+                                       if( new File( dir , filename 
).isDirectory() ){
+                                               return true;
+                                       }
+                                       return false;
+                               }
+                       };
+               }else{
+                       return new FilenameFilter() {
+                               
+                               public boolean accept(File dir, String 
filename) {
+                                       return true;
+                               }
+                       }; 
+               }
+       }
+       
+}
diff --git 
a/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/GridItemAdapter.java
 
b/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/GridItemAdapter.java
index a2cf56a..9585705 100644
--- 
a/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/GridItemAdapter.java
+++ 
b/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/GridItemAdapter.java
@@ -30,6 +30,12 @@ public class GridItemAdapter extends BaseAdapter{
                this.currentDirectory = currentDirectory;
                filePaths = currentDirectory.listFiles();
        }
+       
+       public GridItemAdapter(Context mContext, File currentDirectory, File[] 
filteredFiles) {
+               this.mContext = mContext;
+               this.currentDirectory = currentDirectory;
+               filePaths = filteredFiles;
+       }
 
        public int getCount() {
                return filePaths.length;
@@ -69,13 +75,13 @@ public class GridItemAdapter extends BaseAdapter{
                        // set image based on selected text
                        ImageView imageView = (ImageView) gridView
                                        .findViewById(R.id.grid_item_image);
-                       if( filePaths[position].getName().contains(".odt") ){
+                       if( filePaths[position].getName().endsWith(".odt") ){
                                imageView.setImageResource(R.drawable.writer);
                        }
-                       if( filePaths[position].getName().contains(".ods") ){
+                       if( filePaths[position].getName().endsWith(".ods") ){
                                imageView.setImageResource(R.drawable.calc);
                        }
-                       if( filePaths[position].getName().contains(".odp") ){
+                       if( filePaths[position].getName().endsWith(".odp") ){
                                imageView.setImageResource(R.drawable.impress);
                        }
                        if( filePaths[position].isDirectory() ){//Is a folder
diff --git 
a/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/LibreOfficeUIActivity.java
 
b/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/LibreOfficeUIActivity.java
index 05ef291..6664467 100644
--- 
a/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/LibreOfficeUIActivity.java
+++ 
b/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/LibreOfficeUIActivity.java
@@ -2,8 +2,11 @@ package org.libreoffice.ui;
 
 import java.io.File;
 import java.io.FileFilter;
+import java.io.FilenameFilter;
 import java.io.IOException;
 
+import android.app.ActionBar;
+import android.app.ActionBar.OnNavigationListener;
 import android.app.Activity;
 import android.app.ListActivity;
 import android.content.Context;
@@ -24,43 +27,68 @@ import android.widget.ArrayAdapter;
 import android.widget.BaseAdapter;
 import android.widget.GridView;
 import android.widget.ListView;
+import android.widget.SpinnerAdapter;
 import android.widget.TextView;
 import android.widget.Toast;
 
-public class LibreOfficeUIActivity extends Activity {
+public class LibreOfficeUIActivity extends Activity implements 
OnNavigationListener {
     private String tag = "file_manager";
     private File homeDirectory;//make final?
        private File currentDirectory;
+       private String filter = "";
+       private String[] filters = {"all",".odt",".ods",".odp"};
+       private int filterMode = FileUtilities.ALL;
+       FileFilter fileFilter;
+       FilenameFilter filenameFilter;
        private String[] fileNames;
        private File[] filePaths;
        
        private String currentDirectoryKey = "CURRENT_DIRECTORY";
+       private String filterModeKey = "FILTER_MODE";
+       
        GridView gv;
        
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.file_explorer);
-        gv = (GridView)findViewById(R.id.file_explorer_grid_view);
+        setContentView(R.layout.file_grid);
+        ActionBar actionBar = getActionBar();
+        actionBar.setDisplayShowTitleEnabled(false);//This should show current 
directory if anything
+        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
+        SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, 
R.array.file_view_modes,
+                android.R.layout.simple_spinner_dropdown_item);
+        actionBar.setListNavigationCallbacks(mSpinnerAdapter, this);
+                       
         
-        //Need to sort out how best to maintain application state (directory, 
basically)
+        homeDirectory  = new 
File(Environment.getExternalStorageDirectory(),"LibreOffice");
         Intent i = this.getIntent();
         if( i.hasExtra( currentDirectoryKey ) ){
                //This isn't what I think it is. It's not a full path
                currentDirectory = new File( i.getStringExtra( 
currentDirectoryKey ) );
+        }else{
+               currentDirectory = homeDirectory;
         }
         
-        homeDirectory  = new 
File(Environment.getExternalStorageDirectory(),"LibreOffice");
-        currentDirectory = homeDirectory;
+        if( i.hasExtra( filterModeKey ) ){
+               Log.d(filterModeKey+"_GRID_OC" , Integer.toString( 
i.getIntExtra( filterModeKey, FileUtilities.ALL ) ));
+            filterMode = i.getIntExtra( filterModeKey, FileUtilities.ALL);
+        }
+        if( !currentDirectory.equals( homeDirectory )){
+            actionBar.setDisplayHomeAsUpEnabled(true);
+        }
+
+               //fileFilter = FileUtilities.getFileFilter( filterMode );
+               //filenameFilter = FileUtilities.getFilenameFilter( filterMode 
);       
+               
         //createDummyFileSystem();
-       filePaths = new File[ currentDirectory.listFiles().length ];
-       fileNames = new String[ filePaths.length ];
-       filePaths = currentDirectory.listFiles();// Need to write a class to 
order lists of Files
-       fileNames = currentDirectory.list();// should be based on filePaths -> 
keep same order
+       //filePaths = currentDirectory.listFiles( fileFilter );
+       //order/filter filePaths here
+       //fileNames = currentDirectory.list( filenameFilter );
 
         // code to make a grid view 
-        GridItemAdapter gridAdapter = new 
GridItemAdapter(getApplicationContext(), filePaths );
-        gv.setAdapter(gridAdapter);
+       gv = (GridView)findViewById(R.id.file_explorer_grid_view);
+        //GridItemAdapter gridAdapter = new 
GridItemAdapter(getApplicationContext(), filePaths );
+        //gv.setAdapter(gridAdapter);
         gv.setOnItemClickListener(new OnItemClickListener() {
             public void onItemClick(AdapterView<?> parent, View view,
                 int position, long id) {
@@ -78,21 +106,30 @@ public class LibreOfficeUIActivity extends Activity {
                        
             }
           });
-        
-        
+        actionBar.setSelectedNavigationItem( filterMode + 1 );//This triggers 
the listener which modifies the view.
+        //openDirectory( currentDirectory );
     }
     
-    public void openDirectory(File dir){
+    public void openDirectory(File dir ){
        currentDirectory = dir; 
-       fileNames = currentDirectory.list();
-       filePaths = currentDirectory.listFiles();
-       gv.setAdapter( new GridItemAdapter(getApplicationContext(), 
currentDirectory ) );
+       Log.d(tag, dir.toString() + " " + homeDirectory.toString());
+        if( !currentDirectory.equals( homeDirectory )){
+            ActionBar actionBar = getActionBar();
+            actionBar.setDisplayHomeAsUpEnabled(true);
+        }else{
+            ActionBar actionBar = getActionBar();
+            actionBar.setDisplayHomeAsUpEnabled( false );
+        }
+       fileNames = currentDirectory.list( FileUtilities.getFilenameFilter( 
filterMode ) );
+       filePaths = currentDirectory.listFiles( FileUtilities.getFileFilter( 
filterMode ) );
+       gv.setAdapter( new GridItemAdapter(getApplicationContext(), 
currentDirectory, filePaths ) );
     }
     
     public void open(String file){
        //Should add file to the intent as an extra
        Intent i = new Intent( this , WriterViewerActivity.class );
-       i.putExtra( currentDirectoryKey, currentDirectory.getName() );
+       i.putExtra( currentDirectoryKey , currentDirectory.getAbsolutePath() );
+       i.putExtra( filterModeKey  , filterMode );
        startActivity( i );
     }
     
@@ -107,9 +144,9 @@ public class LibreOfficeUIActivity extends Activity {
            switch (item.getItemId()) {
                case android.R.id.home:
                    // app icon in action bar clicked; go home
-                   Intent intent = new Intent(this, 
LibreOfficeUIActivity.class);
+                   //Intent intent = new Intent(this, 
LibreOfficeUIActivity.class);
                    //intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-                   startActivity(intent);
+                   //startActivity(intent);
                    if( !currentDirectory.equals( homeDirectory ) ){
                        openDirectory( currentDirectory.getParentFile() );
                    }
@@ -167,6 +204,9 @@ public class LibreOfficeUIActivity extends Activity {
                                File regularDirectory = new File( 
currentDirectory , "Folder" );
                                regularDirectory.mkdir();
                                new File( regularDirectory , 
"yetAnotherDoc.odt" ).createNewFile();
+                               File anotherRegularDirectory = new File( 
regularDirectory , "AnotherFolder" );
+                               anotherRegularDirectory.mkdir();
+                               new File( anotherRegularDirectory , 
"yetAnotherDoc2.odt" ).createNewFile();
                                //Should put a folder in at some stage.
                                
                        } catch (IOException e) {
@@ -184,14 +224,14 @@ public class LibreOfficeUIActivity extends Activity {
     protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
-       outState.putString( currentDirectoryKey , currentDirectory.getName() );
+       outState.putString( currentDirectoryKey , 
currentDirectory.getAbsolutePath() );
     }
     
     @Override
     protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onRestoreInstanceState(savedInstanceState);
-       currentDirectory = new File( savedInstanceState.getString( 
currentDirectoryKey ) );
+       //currentDirectory = new File( savedInstanceState.getString( 
currentDirectoryKey ) );
     }
     
     @Override
@@ -200,6 +240,12 @@ public class LibreOfficeUIActivity extends Activity {
        
        super.onPause();
     }
+     
+       public boolean onNavigationItemSelected(int itemPosition, long itemId) {
+               filterMode = itemPosition -1; //bit of a hack, I know. -1 is 
ALL 0 Docs etc
+               openDirectory( currentDirectory );// Uses filter mode 
+               return true;
+       }
 
 }
 
diff --git 
a/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/WriterViewerActivity.java
 
b/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/WriterViewerActivity.java
index f56e577..75f3b1a 100644
--- 
a/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/WriterViewerActivity.java
+++ 
b/android/experimental/GSoC-2012-eclipse-workspace/LibreOfficeUI/src/org/libreoffice/ui/WriterViewerActivity.java
@@ -12,16 +12,21 @@ import android.view.MenuItem;
 
 public class WriterViewerActivity extends Activity{
        private String currentDirectoryKey = "CURRENT_DIRECTORY";
-       File file;
+       private String filterModeKey = "FILTER_MODE";
+       File dir;
+       private int filterMode;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
-               Intent i = new Intent();
-               i = this.getIntent();
+               Intent i = this.getIntent();
                if( i.hasExtra( currentDirectoryKey ) ){
                        Log.d(currentDirectoryKey, i.getStringExtra( 
currentDirectoryKey ) );
-                       file = new File( i.getStringExtra( currentDirectoryKey 
) );
+                       dir = new File( i.getStringExtra( currentDirectoryKey ) 
);
+               }
+               if( i.hasExtra( filterModeKey ) ){
+                       //Log.d("FILTER_OC_WRITER", 
Integer.toString(i.getIntExtra( filterModeKey , FileUtilities.ALL )));
+               filterMode = i.getIntExtra( filterModeKey , FileUtilities.ALL );
                }
                setContentView(R.layout.main);
            ActionBar actionBar = getActionBar();
@@ -34,7 +39,8 @@ public class WriterViewerActivity extends Activity{
                case android.R.id.home:
                    // app icon in action bar clicked; go home
                    Intent intent = new Intent(this, 
LibreOfficeUIActivity.class);
-                   intent.putExtra(currentDirectoryKey, file );
+                   intent.putExtra(currentDirectoryKey, dir.getAbsolutePath() 
);
+                       intent.putExtra( filterModeKey , filterMode );
                    //intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);
                    return true;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to