Merge remote-tracking branch 'upstream/develop' into imageGrid
authortobiasKaminsky <tobias@kaminsky.me>
Wed, 5 Nov 2014 21:07:11 +0000 (22:07 +0100)
committertobiasKaminsky <tobias@kaminsky.me>
Wed, 5 Nov 2014 21:07:11 +0000 (22:07 +0100)
Conflicts:
owncloud-android-library
res/layout/list_item.xml
src/com/owncloud/android/ui/adapter/FileListListAdapter.java
src/com/owncloud/android/ui/fragment/LocalFileListFragment.java

42 files changed:
owncloud-android-library
project.properties
res/drawable-hdpi/zzzfehlend/common_error.png [new file with mode: 0644]
res/drawable-hdpi/zzzfehlend/ic_action_create_dir.png [new file with mode: 0644]
res/drawable-hdpi/zzzfehlend/ic_action_download.png [new file with mode: 0644]
res/drawable-hdpi/zzzfehlend/ic_action_refresh.png [new file with mode: 0644]
res/drawable-hdpi/zzzfehlend/ic_action_refresh_black.png [new file with mode: 0644]
res/drawable-hdpi/zzzfehlend/ic_action_settings.png [new file with mode: 0644]
res/drawable-hdpi/zzzfehlend/ic_action_upload.png [new file with mode: 0644]
res/drawable-hdpi/zzzfehlend/image_fail.png [new file with mode: 0644]
res/drawable-hdpi/zzzfehlend/logo.png [new file with mode: 0644]
res/drawable-hdpi/zzzfehlend/winter_holidays_icon.png [new file with mode: 0644]
res/drawable-xhdpi/file.png [new file with mode: 0644]
res/drawable-xhdpi/file_doc.png [new file with mode: 0644]
res/drawable-xhdpi/file_image.png [new file with mode: 0644]
res/drawable-xhdpi/file_movie.png [new file with mode: 0644]
res/drawable-xhdpi/file_pdf.png [new file with mode: 0644]
res/drawable-xhdpi/file_ppt.png [new file with mode: 0644]
res/drawable-xhdpi/file_sound.png [new file with mode: 0644]
res/drawable-xhdpi/file_xls.png [new file with mode: 0644]
res/drawable-xhdpi/file_zip.png [new file with mode: 0644]
res/drawable-xhdpi/folder_public.png [new file with mode: 0644]
res/drawable-xhdpi/ic_favorite.png [deleted file]
res/drawable-xhdpi/ic_menu_archive.png [new file with mode: 0644]
res/drawable-xhdpi/notification_icon.png [deleted file]
res/drawable-xhdpi/shared_with_me_folder.png [new file with mode: 0644]
res/layout-land/account_setup.xml
res/layout/account_setup.xml
res/layout/grid_image.xml [new file with mode: 0644]
res/layout/grid_item.xml [new file with mode: 0644]
res/layout/list_fragment.xml
res/layout/list_item.xml
res/layout/uploader_list_item_layout.xml
src/com/owncloud/android/MainApp.java
src/com/owncloud/android/ui/ExtendedListView.java
src/com/owncloud/android/ui/SquareImageView.java [new file with mode: 0644]
src/com/owncloud/android/ui/SquareLinearLayout.java [new file with mode: 0644]
src/com/owncloud/android/ui/adapter/FileListListAdapter.java
src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java
src/com/owncloud/android/ui/fragment/ExtendedListFragment.java
src/com/owncloud/android/ui/fragment/LocalFileListFragment.java
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

index 4f315c7..5bd0d73 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 4f315c7e06f6eef48df246be0ee9252fdfccdf00
+Subproject commit 5bd0d7387712ce3f53869294761ac4d8537841cd
index 28edd99..3c67d77 100644 (file)
@@ -11,3 +11,4 @@
 target=android-19
 android.library.reference.1=actionbarsherlock/library
 android.library.reference.2=owncloud-android-library
+android.library.reference.3=../android-library/android-library
diff --git a/res/drawable-hdpi/zzzfehlend/common_error.png b/res/drawable-hdpi/zzzfehlend/common_error.png
new file mode 100644 (file)
index 0000000..213976c
Binary files /dev/null and b/res/drawable-hdpi/zzzfehlend/common_error.png differ
diff --git a/res/drawable-hdpi/zzzfehlend/ic_action_create_dir.png b/res/drawable-hdpi/zzzfehlend/ic_action_create_dir.png
new file mode 100644 (file)
index 0000000..ece0eb4
Binary files /dev/null and b/res/drawable-hdpi/zzzfehlend/ic_action_create_dir.png differ
diff --git a/res/drawable-hdpi/zzzfehlend/ic_action_download.png b/res/drawable-hdpi/zzzfehlend/ic_action_download.png
new file mode 100644 (file)
index 0000000..05e75b4
Binary files /dev/null and b/res/drawable-hdpi/zzzfehlend/ic_action_download.png differ
diff --git a/res/drawable-hdpi/zzzfehlend/ic_action_refresh.png b/res/drawable-hdpi/zzzfehlend/ic_action_refresh.png
new file mode 100644 (file)
index 0000000..e6212cf
Binary files /dev/null and b/res/drawable-hdpi/zzzfehlend/ic_action_refresh.png differ
diff --git a/res/drawable-hdpi/zzzfehlend/ic_action_refresh_black.png b/res/drawable-hdpi/zzzfehlend/ic_action_refresh_black.png
new file mode 100644 (file)
index 0000000..e6212cf
Binary files /dev/null and b/res/drawable-hdpi/zzzfehlend/ic_action_refresh_black.png differ
diff --git a/res/drawable-hdpi/zzzfehlend/ic_action_settings.png b/res/drawable-hdpi/zzzfehlend/ic_action_settings.png
new file mode 100644 (file)
index 0000000..999d0f0
Binary files /dev/null and b/res/drawable-hdpi/zzzfehlend/ic_action_settings.png differ
diff --git a/res/drawable-hdpi/zzzfehlend/ic_action_upload.png b/res/drawable-hdpi/zzzfehlend/ic_action_upload.png
new file mode 100644 (file)
index 0000000..2369348
Binary files /dev/null and b/res/drawable-hdpi/zzzfehlend/ic_action_upload.png differ
diff --git a/res/drawable-hdpi/zzzfehlend/image_fail.png b/res/drawable-hdpi/zzzfehlend/image_fail.png
new file mode 100644 (file)
index 0000000..3866741
Binary files /dev/null and b/res/drawable-hdpi/zzzfehlend/image_fail.png differ
diff --git a/res/drawable-hdpi/zzzfehlend/logo.png b/res/drawable-hdpi/zzzfehlend/logo.png
new file mode 100644 (file)
index 0000000..188d693
Binary files /dev/null and b/res/drawable-hdpi/zzzfehlend/logo.png differ
diff --git a/res/drawable-hdpi/zzzfehlend/winter_holidays_icon.png b/res/drawable-hdpi/zzzfehlend/winter_holidays_icon.png
new file mode 100644 (file)
index 0000000..c1764b6
Binary files /dev/null and b/res/drawable-hdpi/zzzfehlend/winter_holidays_icon.png differ
diff --git a/res/drawable-xhdpi/file.png b/res/drawable-xhdpi/file.png
new file mode 100644 (file)
index 0000000..d249e5f
Binary files /dev/null and b/res/drawable-xhdpi/file.png differ
diff --git a/res/drawable-xhdpi/file_doc.png b/res/drawable-xhdpi/file_doc.png
new file mode 100644 (file)
index 0000000..a8c10c8
Binary files /dev/null and b/res/drawable-xhdpi/file_doc.png differ
diff --git a/res/drawable-xhdpi/file_image.png b/res/drawable-xhdpi/file_image.png
new file mode 100644 (file)
index 0000000..84b2803
Binary files /dev/null and b/res/drawable-xhdpi/file_image.png differ
diff --git a/res/drawable-xhdpi/file_movie.png b/res/drawable-xhdpi/file_movie.png
new file mode 100644 (file)
index 0000000..bd84c72
Binary files /dev/null and b/res/drawable-xhdpi/file_movie.png differ
diff --git a/res/drawable-xhdpi/file_pdf.png b/res/drawable-xhdpi/file_pdf.png
new file mode 100644 (file)
index 0000000..e272562
Binary files /dev/null and b/res/drawable-xhdpi/file_pdf.png differ
diff --git a/res/drawable-xhdpi/file_ppt.png b/res/drawable-xhdpi/file_ppt.png
new file mode 100644 (file)
index 0000000..c898895
Binary files /dev/null and b/res/drawable-xhdpi/file_ppt.png differ
diff --git a/res/drawable-xhdpi/file_sound.png b/res/drawable-xhdpi/file_sound.png
new file mode 100644 (file)
index 0000000..82fbc7b
Binary files /dev/null and b/res/drawable-xhdpi/file_sound.png differ
diff --git a/res/drawable-xhdpi/file_xls.png b/res/drawable-xhdpi/file_xls.png
new file mode 100644 (file)
index 0000000..2e98d6c
Binary files /dev/null and b/res/drawable-xhdpi/file_xls.png differ
diff --git a/res/drawable-xhdpi/file_zip.png b/res/drawable-xhdpi/file_zip.png
new file mode 100644 (file)
index 0000000..28130ec
Binary files /dev/null and b/res/drawable-xhdpi/file_zip.png differ
diff --git a/res/drawable-xhdpi/folder_public.png b/res/drawable-xhdpi/folder_public.png
new file mode 100644 (file)
index 0000000..7680712
Binary files /dev/null and b/res/drawable-xhdpi/folder_public.png differ
diff --git a/res/drawable-xhdpi/ic_favorite.png b/res/drawable-xhdpi/ic_favorite.png
deleted file mode 100644 (file)
index c187f0c..0000000
Binary files a/res/drawable-xhdpi/ic_favorite.png and /dev/null differ
diff --git a/res/drawable-xhdpi/ic_menu_archive.png b/res/drawable-xhdpi/ic_menu_archive.png
new file mode 100644 (file)
index 0000000..3ee6028
Binary files /dev/null and b/res/drawable-xhdpi/ic_menu_archive.png differ
diff --git a/res/drawable-xhdpi/notification_icon.png b/res/drawable-xhdpi/notification_icon.png
deleted file mode 100644 (file)
index b3855d6..0000000
Binary files a/res/drawable-xhdpi/notification_icon.png and /dev/null differ
diff --git a/res/drawable-xhdpi/shared_with_me_folder.png b/res/drawable-xhdpi/shared_with_me_folder.png
new file mode 100644 (file)
index 0000000..060728c
Binary files /dev/null and b/res/drawable-xhdpi/shared_with_me_folder.png differ
index 88b1ab3..68625ef 100644 (file)
@@ -32,7 +32,7 @@
         android:orientation="horizontal" >\r
         \r
                <ImageView\r
-                       android:id="@+id/imageView1"\r
+                       android:id="@+id/thumbnail"\r
                        android:layout_width="0dp"\r
                        android:layout_height="wrap_content"\r
                        android:layout_weight="1"\r
index e3321f9..b2973a0 100644 (file)
@@ -35,7 +35,7 @@
         android:padding="8dp" >\r
 \r
         <ImageView\r
-            android:id="@+id/imageView1"\r
+            android:id="@+id/thumbnail"\r
             android:layout_width="match_parent"\r
             android:layout_height="wrap_content"\r
             android:layout_marginBottom="10dp"\r
diff --git a/res/layout/grid_image.xml b/res/layout/grid_image.xml
new file mode 100644 (file)
index 0000000..6b58c2a
--- /dev/null
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+  ownCloud Android client application\r
+\r
+  Copyright (C) 2012  Bartek Przybylski\r
+  Copyright (C) 2012-2013 ownCloud Inc.\r
+\r
+  This program is free software: you can redistribute it and/or modify\r
+  it under the terms of the GNU General Public License version 2,\r
+  as published by the Free Software Foundation.\r
+\r
+  This program is distributed in the hope that it will be useful,\r
+  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+  GNU General Public License for more details.\r
+\r
+  You should have received a copy of the GNU General Public License\r
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  \r
+-->\r
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+    android:id="@+id/ListItemLayout"\r
+    android:layout_width="match_parent"\r
+    android:layout_height="match_parent"\r
+    android:layout_gravity="center_horizontal"\r
+    android:background="@drawable/list_selector"\r
+    android:gravity="center_horizontal"\r
+    android:orientation="vertical" >\r
+\r
+    <FrameLayout\r
+        android:layout_width="match_parent"\r
+        android:layout_height="wrap_content" >\r
+\r
+        <com.owncloud.android.ui.SquareImageView\r
+            android:id="@+id/thumbnail"\r
+            android:layout_width="match_parent"\r
+            android:layout_height="match_parent"\r
+            android:paddingLeft="10dp"\r
+            android:paddingRight="10dp"\r
+            android:scaleType="centerCrop"\r
+            android:src="@drawable/ic_menu_archive" />\r
+\r
+        <ImageView\r
+            android:id="@+id/favoriteIcon"\r
+            android:layout_width="15dp"\r
+            android:layout_height="15dp"\r
+            android:layout_gravity="bottom|right"\r
+            android:layout_marginBottom="2dp"\r
+            android:layout_marginRight="2dp"\r
+            android:src="@drawable/ic_favorite" />\r
+\r
+    </FrameLayout>\r
+\r
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/grid_item.xml b/res/layout/grid_item.xml
new file mode 100644 (file)
index 0000000..f04f7fa
--- /dev/null
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+  ownCloud Android client application\r
+\r
+  Copyright (C) 2012  Bartek Przybylski\r
+  Copyright (C) 2012-2013 ownCloud Inc.\r
+\r
+  This program is free software: you can redistribute it and/or modify\r
+  it under the terms of the GNU General Public License version 2,\r
+  as published by the Free Software Foundation.\r
+\r
+  This program is distributed in the hope that it will be useful,\r
+  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+  GNU General Public License for more details.\r
+\r
+  You should have received a copy of the GNU General Public License\r
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
+  \r
+-->\r
+<com.owncloud.android.ui.SquareLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+    android:id="@+id/ListItemLayout"\r
+    android:layout_width="match_parent"\r
+    android:layout_height="match_parent"\r
+    android:layout_gravity="center_horizontal"\r
+    android:background="@drawable/list_selector"\r
+    android:gravity="center"\r
+    android:orientation="vertical" >\r
+\r
+    <FrameLayout\r
+        android:layout_width="match_parent"\r
+        android:layout_height="wrap_content"\r
+        android:layout_gravity="center_horizontal" >\r
+\r
+        <ImageView\r
+            android:id="@+id/favoriteIcon"\r
+            android:layout_width="15dp"\r
+            android:layout_height="15dp"\r
+            android:layout_gravity="bottom|right"\r
+            android:layout_marginBottom="2dp"\r
+            android:layout_marginRight="2dp"\r
+            android:src="@drawable/ic_favorite" />\r
+\r
+        <ImageView\r
+            android:id="@+id/thumbnail"\r
+            android:layout_width="72dp"\r
+            android:layout_height="72dp"\r
+            android:layout_gravity="center_horizontal"\r
+            android:layout_marginLeft="10dp"\r
+            android:layout_marginRight="10dp"\r
+            android:src="@drawable/ic_menu_archive" />\r
+\r
+    </FrameLayout>\r
+\r
+    <TextView\r
+        android:id="@+id/Filename"\r
+        android:layout_width="match_parent"\r
+        android:layout_height="wrap_content"\r
+        android:layout_marginLeft="4dp"\r
+        android:layout_marginRight="4dp"\r
+        android:ellipsize="middle"\r
+        android:gravity="center_horizontal"\r
+        android:singleLine="true"\r
+        android:text="TextView"\r
+        android:textColor="#303030"\r
+        android:textSize="16dip" />\r
+\r
+</com.owncloud.android.ui.SquareLinearLayout>
\ No newline at end of file
index 4236d07..564404a 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- 
+<!--
   ownCloud Android client application
 
   Copyright (C) 2012  Bartek Przybylski
 
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
- -->
+-->
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-       android:layout_width="0dp"
-       android:layout_height="match_parent"
-       android:layout_weight="1" >
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_weight="1" >
 
     <android.support.v4.widget.SwipeRefreshLayout
         android:id="@+id/swipe_refresh_files"
         <com.owncloud.android.ui.ExtendedListView
             android:id="@+id/list_root"
             android:layout_width="match_parent"
-            android:layout_height="match_parent" />
-        
+            android:layout_height="match_parent"
+            android:columnWidth="100dp"
+            android:gravity="center"
+            android:horizontalSpacing="2dp"
+            android:numColumns="auto_fit"
+            android:stretchMode="columnWidth"
+            android:verticalSpacing="2dp"
+            android:visibility="visible" />
+
     </android.support.v4.widget.SwipeRefreshLayout>
 
     <android.support.v4.widget.SwipeRefreshLayout
         android:layout_height="match_parent"
         android:visibility="gone" >
 
-        <ScrollView
+        <TextView
+            android:id="@+id/empty_list_view"
             android:layout_width="match_parent"
-            android:layout_height="match_parent" >
-
-                   <TextView
-                               android:id="@+id/empty_list_view"
-                               android:layout_width="match_parent"
-                               android:layout_height="wrap_content"
-                               android:gravity="center_vertical|center_horizontal"
-                               android:text="@string/empty"
-                                       android:layout_gravity="center"
-                               android:visibility="visible" />
-
-        </ScrollView>
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:gravity="center_vertical|center_horizontal"
+            android:text="@string/empty"
+            android:visibility="visible" />
     </android.support.v4.widget.SwipeRefreshLayout>
-</FrameLayout>
+
+</FrameLayout>
\ No newline at end of file
index c6c7b92..78c36ce 100644 (file)
@@ -31,7 +31,7 @@
         android:focusableInTouchMode="false">\r
 \r
         <ImageView\r
-            android:id="@+id/imageView2"\r
+            android:id="@+id/localFileIndicator"\r
             android:layout_width="@dimen/file_icon_size"\r
             android:layout_height="@dimen/file_icon_size"\r
             android:layout_gravity="center_vertical"\r
@@ -39,7 +39,7 @@
             android:src="@drawable/local_file_indicator" />\r
 \r
         <ImageView\r
-            android:id="@+id/imageView1"\r
+            android:id="@+id/thumbnail"\r
             android:layout_width="@dimen/file_icon_size"\r
             android:layout_height="@dimen/file_icon_size"\r
             android:layout_gravity="center_vertical"\r
@@ -47,7 +47,7 @@
             android:src="@drawable/ic_menu_archive" />\r
 \r
         <ImageView\r
-            android:id="@+id/imageView3"\r
+            android:id="@+id/favoriteIcon"\r
             android:layout_width="wrap_content"\r
             android:layout_height="wrap_content"\r
             android:layout_gravity="bottom|right"\r
         android:layout_marginLeft="4dp"\r
         android:layout_marginRight="4dp"\r
         android:layout_marginTop="4dp"\r
-        android:src="@drawable/shared_with_me" />\r
+        android:src="@drawable/shared_with_me"\r
+        android:visibility="invisible" />\r
 \r
     </LinearLayout>\r
 \r
index 1cb9361..08f9cee 100644 (file)
@@ -30,7 +30,7 @@
         android:layout_gravity="center_vertical|center"
         android:layout_margin="4dp"
         android:src="@drawable/ic_menu_archive" 
-        android:id="@+id/imageView1" />
+        android:id="@+id/thumbnail" />
     
     <TextView 
         android:text="TextView" 
index c2a4c68..4fdc5cb 100644 (file)
@@ -19,6 +19,26 @@ package com.owncloud.android;
 import android.app.Application;
 import android.content.Context;
 
+import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
+import android.app.Application;
+import android.content.Context;
+
+import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
+import android.app.Application;
+import android.content.Context;
+
+import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
+import android.app.Application;
+import android.content.Context;
+
+import com.owncloud.android.datamodel.ThumbnailsCacheManager;
+import android.app.Application;
+import android.content.Context;
+
+import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.datamodel.ThumbnailsCacheManager;
 import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
 import com.owncloud.android.lib.common.OwnCloudClientManagerFactory.Policy;
@@ -57,7 +77,7 @@ public class MainApp extends Application {
         }
 
         // initialise thumbnails cache on background thread
-        new ThumbnailsCacheManager.InitDiskCacheTask().execute();
+        new ThumbnailsCacheManager.InitDiskCacheTask(mContext).execute();
         
         if (BuildConfig.DEBUG) {
 
index 9fe885b..c28ff1c 100644 (file)
@@ -21,18 +21,18 @@ package com.owncloud.android.ui;
 import android.content.Context;
 import android.graphics.Canvas;
 import android.util.AttributeSet;
-import android.widget.ListView;
+import android.widget.GridView;
 
 /**
- * ListView allowing to specify the position of an item that should be centered in the visible area, if possible.
+ * GridView allowing to specify the position of an item that should be top left in the visible area, if possible.
  * 
  * The cleanest way I found to overcome the problem due to getHeight() returns 0 until the view is really drawn. 
  *  
  * @author David A. Velasco
  */
-public class ExtendedListView extends ListView {
+public class ExtendedListView extends GridView {
 
-    private int mPositionToSetAndCenter;
+    private int mPositionToSetTopLeft;
 
     public ExtendedListView(Context context) {
         super(context);
@@ -45,7 +45,7 @@ public class ExtendedListView extends ListView {
     public ExtendedListView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
     }
-
+    
     /**
      * {@inheritDoc}
      * 
@@ -54,20 +54,20 @@ public class ExtendedListView extends ListView {
     @Override
     protected void onDraw (Canvas canvas) {
         super.onDraw(canvas);
-        if (mPositionToSetAndCenter > 0) {
-            this.setSelectionFromTop(mPositionToSetAndCenter, getHeight() / 2);
-            mPositionToSetAndCenter = 0;
+        if (mPositionToSetTopLeft > 0) {
+            this.smoothScrollToPosition(mPositionToSetTopLeft);
+            mPositionToSetTopLeft = 0;
         }
     }
     
     /**
-     * Public method to set the position of the item that should be centered in the visible area of the view.
+     * Public method to set the position of the item that should be top left in the visible area of the view.
      * 
      * The position is saved here and checked in onDraw().
      *  
-     * @param position         Position (in the list of items) of the item to center in the visible area.     
+     * @param position         Position (in the list of items) of the item to be top left in the visible area.     
      */
-    public void setAndCenterSelection(int position) {
-        mPositionToSetAndCenter = position;
+    public void setSelectionAsTopLeft(int position) {
+        mPositionToSetTopLeft = position;
     }
 }
diff --git a/src/com/owncloud/android/ui/SquareImageView.java b/src/com/owncloud/android/ui/SquareImageView.java
new file mode 100644 (file)
index 0000000..3c90999
--- /dev/null
@@ -0,0 +1,25 @@
+package com.owncloud.android.ui;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+
+public class SquareImageView extends ImageView {
+
+    public SquareImageView(Context context) {
+        super(context);
+    }
+
+    public SquareImageView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public SquareImageView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
+    }
+}
diff --git a/src/com/owncloud/android/ui/SquareLinearLayout.java b/src/com/owncloud/android/ui/SquareLinearLayout.java
new file mode 100644 (file)
index 0000000..a7795d2
--- /dev/null
@@ -0,0 +1,25 @@
+package com.owncloud.android.ui;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.LinearLayout;
+
+public class SquareLinearLayout extends LinearLayout {
+
+    public SquareLinearLayout(Context context) {
+        super(context);
+    }
+
+    public SquareLinearLayout(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public SquareLinearLayout(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
+    }
+}
index e002efb..d2680fa 100644 (file)
@@ -26,13 +26,20 @@ import java.util.Vector;
 import third_parties.daveKoeller.AlphanumComparator;\r
 import android.accounts.Account;\r
 import android.content.Context;\r
+<<<<<<< HEAD
+import android.graphics.Bitmap;\r
+import android.graphics.BitmapFactory;\r
+import android.media.ThumbnailUtils;\r
+=======
 import android.content.SharedPreferences;\r
 import android.graphics.Bitmap;\r
 import android.preference.PreferenceManager;\r
+>>>>>>> upstream/develop
 import android.view.LayoutInflater;\r
 import android.view.View;\r
 import android.view.ViewGroup;\r
 import android.widget.BaseAdapter;\r
+import android.widget.GridView;\r
 import android.widget.ImageView;\r
 import android.widget.ListAdapter;\r
 import android.widget.ListView;\r
@@ -48,8 +55,13 @@ import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;\r
 import com.owncloud.android.ui.activity.ComponentsGetter;\r
 import com.owncloud.android.utils.DisplayUtils;\r
+<<<<<<< HEAD
+import com.owncloud.android.utils.Log_OC;\r
+\r
+=======
 import com.owncloud.android.utils.FileStorageUtils;\r
 
+>>>>>>> upstream/develop
 \r
 /**\r
  * This Adapter populates a ListView with all files and folders in an ownCloud\r
@@ -70,12 +82,16 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
     private FileDataStorageManager mStorageManager;
     private Account mAccount;
     private ComponentsGetter mTransferServiceGetter;\r
+<<<<<<< HEAD
+    private enum ViewType {LIST_ITEM, GRID_IMAGE, GRID_ITEM };\r
+=======
     private Integer mSortOrder;\r
     public static final Integer SORT_NAME = 0;\r
     public static final Integer SORT_DATE = 1;\r
     public static final Integer SORT_SIZE = 2;\r
     private Boolean mSortAscending;\r
     private SharedPreferences mAppPreferences;\r
+>>>>>>> upstream/develop
     \r
     public FileListListAdapter(\r
             boolean justFolders, \r
@@ -138,12 +154,66 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 \r
     @Override\r
     public View getView(int position, View convertView, ViewGroup parent) {\r
+     // decide image vs. file view\r
+        double count = 0;\r
+        \r
+        \r
+        for (OCFile file : mFiles){\r
+            if (file.isImage()){\r
+                count++;\r
+            }\r
+        }\r
+        \r
+        // TODO threshold as constant in Preferences\r
+        // > 50% Images --> image view\r
+        boolean fileView = true;\r
+        if ((count / mFiles.size()) >= 0.5){\r
+            fileView = false;\r
+        } else {\r
+            fileView = true;\r
+        }\r
+        \r
         View view = convertView;\r
-        if (view == null) {\r
-            LayoutInflater inflator = (LayoutInflater) mContext\r
-                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r
+        OCFile file = null;\r
+        LayoutInflater inflator = (LayoutInflater) mContext\r
+                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r
+        \r
+        if (mFiles != null && mFiles.size() > position) {\r
+            file = mFiles.get(position);\r
+        }\r
+        \r
+        // Find out which layout should be displayed\r
+        ViewType viewType;\r
+        if (fileView){\r
+            viewType = ViewType.LIST_ITEM;\r
+        } else if (file.isImage()){\r
+            viewType = ViewType.GRID_IMAGE;\r
+        } else {\r
+            viewType = ViewType.GRID_ITEM;\r
+        }\r
+\r
+        // Create View\r
+        switch (viewType){\r
+        case GRID_IMAGE:\r
+            view = inflator.inflate(R.layout.grid_image, null);\r
+            break;\r
+        case GRID_ITEM:\r
+            view = inflator.inflate(R.layout.grid_item, null);\r
+            break;\r
+        case LIST_ITEM:\r
             view = inflator.inflate(R.layout.list_item, null);\r
+            break;\r
         }\r
+<<<<<<< HEAD
+\r
+        view.invalidate();\r
+\r
+        if (file != null){\r
+\r
+            ImageView fileIcon = (ImageView) view.findViewById(R.id.thumbnail);\r
+            TextView fileName;\r
+            String name;\r
+=======
          \r
         if (mFiles != null && mFiles.size() > position) {\r
             OCFile file = mFiles.get(position);\r
@@ -178,11 +248,33 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
             TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);\r
             TextView lastModV = (TextView) view.findViewById(R.id.last_mod);\r
             ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
+>>>>>>> upstream/develop
             \r
-            if (!file.isFolder()) {\r
+            switch (viewType){\r
+            case LIST_ITEM:\r
+                fileName = (TextView) view.findViewById(R.id.Filename);\r
+                name = file.getFileName();\r
+                fileName.setText(name);\r
+                \r
+                TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);\r
+                TextView lastModV = (TextView) view.findViewById(R.id.last_mod);\r
+                ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
+                \r
+                lastModV.setVisibility(View.VISIBLE);\r
+<<<<<<< HEAD
+                lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));\r
+                \r
+                checkBoxV.setVisibility(View.GONE);\r
+                \r
                 fileSizeV.setVisibility(View.VISIBLE);\r
                 fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
-                lastModV.setVisibility(View.VISIBLE);\r
+                \r
+                ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon);\r
+                \r
+\r
+                if (file.isShareByLink()) {\r
+                    sharedIconV.setVisibility(View.VISIBLE);\r
+=======
                 lastModV.setText(\r
                         DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())\r
                 );\r
@@ -190,19 +282,83 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 // because android reuses views in listview\r
                 if (!file.keepInSync()) {\r
                     view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
+>>>>>>> upstream/develop
                 } else {\r
-                    view.findViewById(R.id.imageView3).setVisibility(View.VISIBLE);\r
+                    sharedIconV.setVisibility(View.GONE);\r
                 }\r
                 \r
-                ListView parentList = (ListView)parent;\r
-                if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) { \r
-                    checkBoxV.setVisibility(View.GONE);\r
-                } else {\r
-                    if (parentList.isItemChecked(position)) {\r
-                        checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);\r
+                ImageView localStateView = (ImageView) view.findViewById(R.id.localFileIndicator);\r
+                \r
+                if (!file.isFolder()) {\r
+                    GridView parentList = (GridView)parent;\r
+                    if (parentList.getChoiceMode() == GridView.CHOICE_MODE_NONE) { \r
+                        checkBoxV.setVisibility(View.GONE);\r
+                    } else {\r
+                        if (parentList.isItemChecked(position)) {\r
+                            checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);\r
+                        } else {\r
+                            checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);\r
+                        }\r
+                        checkBoxV.setVisibility(View.VISIBLE);\r
+                    }\r
+<<<<<<< HEAD
+                    \r
+                    localStateView.bringToFront();\r
+                    FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder();\r
+                    FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
+                    if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) {\r
+                        localStateView.setImageResource(R.drawable.downloading_file_indicator);\r
+                        localStateView.setVisibility(View.VISIBLE);\r
+                    } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) {\r
+                        localStateView.setImageResource(R.drawable.uploading_file_indicator);\r
+                        localStateView.setVisibility(View.VISIBLE);\r
+                    } else if (file.isDown()) {\r
+                        localStateView.setImageResource(R.drawable.local_file_indicator);\r
+                        localStateView.setVisibility(View.VISIBLE);\r
                     } else {\r
-                        checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);\r
+                        localStateView.setVisibility(View.INVISIBLE);\r
                     }\r
+                    \r
+                    ImageView sharedWithMeIconV = (ImageView) view.findViewById(R.id.sharedWithMeIcon);\r
+                    if (checkIfFileIsSharedWithMe(file)) {\r
+                        sharedWithMeIconV.setVisibility(View.VISIBLE);\r
+                    } else {\r
+                        sharedWithMeIconV.setVisibility(View.GONE);\r
+                    }\r
+                } else {\r
+                    localStateView.setVisibility(View.INVISIBLE);\r
+                }\r
+                break;\r
+            case GRID_ITEM:\r
+                fileName = (TextView) view.findViewById(R.id.Filename);\r
+                name = file.getFileName();\r
+                fileName.setText(name);\r
+                break;\r
+            case GRID_IMAGE:\r
+                break;\r
+            }\r
+            \r
+            // For all Views\r
+            \r
+            // this if-else is needed even though favorite icon is visible by default\r
+            // because android reuses views in listview\r
+            if (!file.keepInSync()) {\r
+                view.findViewById(R.id.favoriteIcon).setVisibility(View.GONE);\r
+            } else {\r
+                view.findViewById(R.id.favoriteIcon).setVisibility(View.VISIBLE);\r
+            }\r
+            \r
+            // No Folder\r
+            if (!file.isFolder()) {\r
+                if (file.isImage() && file.isDown()){\r
+                    Bitmap bitmap = BitmapFactory.decodeFile(file.getStoragePath());\r
+                    fileIcon.setImageBitmap(ThumbnailUtils.extractThumbnail(bitmap, 200, 200));\r
+                } else {\r
+                    fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
+                }\r
+            } else {\r
+                // Folder\r
+=======
                     checkBoxV.setVisibility(View.VISIBLE);\r
                 }               \r
                 \r
@@ -259,27 +415,19 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 checkBoxV.setVisibility(View.GONE);\r
                 view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
 \r
+>>>>>>> upstream/develop
                 if (checkIfFileIsSharedWithMe(file)) {\r
                     fileIcon.setImageResource(R.drawable.shared_with_me_folder);\r
-                    sharedWithMeIconV.setVisibility(View.VISIBLE);\r
+                } else if (file.isShareByLink()) {\r
+                    // If folder is sharedByLink, icon folder must be changed to\r
+                    // folder-public one\r
+                    fileIcon.setImageResource(R.drawable.folder_public);\r
                 } else {\r
                     fileIcon.setImageResource(\r
                             DisplayUtils.getResourceId(file.getMimetype(), file.getFileName())\r
                     );\r
                 }\r
-\r
-                // If folder is sharedByLink, icon folder must be changed to\r
-                // folder-public one\r
-                if (file.isShareByLink()) {\r
-                    fileIcon.setImageResource(R.drawable.folder_public);\r
-                }\r
-            }\r
-\r
-            if (file.isShareByLink()) {\r
-                sharedIconV.setVisibility(View.VISIBLE);\r
-            } else {\r
-                sharedIconV.setVisibility(View.GONE);\r
-            }\r
+            }           \r
         }\r
 \r
         return view;\r
index 6190ebe..8fcec5c 100644 (file)
@@ -99,7 +99,7 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter {
             String name = file.getName();
             fileName.setText(name);
             
-            ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1);
+            ImageView fileIcon = (ImageView) view.findViewById(R.id.thumbnail);
             if (!file.isDirectory()) {
                 fileIcon.setImageResource(R.drawable.file);
             } else {
@@ -110,8 +110,7 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter {
             TextView lastModV = (TextView) view.findViewById(R.id.last_mod);
             ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);
             if (!file.isDirectory()) {
-                fileSizeV.setVisibility(View.VISIBLE);
-                fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.length()));
+                
                 lastModV.setVisibility(View.VISIBLE);
                 lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.lastModified()));
                 ListView parentList = (ListView)parent;
@@ -127,13 +126,15 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter {
                 }
 
             } else {
-                fileSizeV.setVisibility(View.GONE);
+                //fileSizeV.setVisibility(View.GONE);
                 lastModV.setVisibility(View.GONE);
                 checkBoxV.setVisibility(View.GONE);
             }
+            fileSizeV.setVisibility(View.VISIBLE);
+            fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.length()));
             
-            view.findViewById(R.id.imageView2).setVisibility(View.INVISIBLE);   // not GONE; the alignment changes; ugly way to keep it
-            view.findViewById(R.id.imageView3).setVisibility(View.GONE);
+            view.findViewById(R.id.localFileIndicator).setVisibility(View.INVISIBLE);   // not GONE; the alignment changes; ugly way to keep it
+            view.findViewById(R.id.favoriteIcon).setVisibility(View.GONE);
             
             view.findViewById(R.id.sharedIcon).setVisibility(View.GONE);
             view.findViewById(R.id.sharedWithMeIcon).setVisibility(View.GONE);
index 5d3f7ac..c612348 100644 (file)
@@ -27,6 +27,7 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
+import android.widget.GridView;
 import android.widget.ListAdapter;
 import android.widget.ListView;
 import android.widget.TextView;
@@ -52,7 +53,7 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
     private static final String KEY_HEIGHT_CELL = "HEIGHT_CELL";
     private static final String KEY_EMPTY_LIST_MESSAGE = "EMPTY_LIST_MESSAGE";
 
-    protected ExtendedListView mList;
+    // protected ExtendedListView mList;
     
     private SwipeRefreshLayout mRefreshLayout;
     private SwipeRefreshLayout mRefreshEmptyLayout;
@@ -66,14 +67,25 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
 
     private OnEnforceableRefreshListener mOnRefreshListener = null;
     
-    
+    protected GridView imageView;
+       
     public void setListAdapter(ListAdapter listAdapter) {
-        mList.setAdapter(listAdapter);
-        mList.invalidate();
+        imageView.setAdapter(listAdapter);
+        imageView.invalidate();
     }
 
-    public ListView getListView() {
-        return mList;
+    public GridView getGridView() {
+        return imageView;
+    }
+    
+    protected void switchImageView(){
+       imageView.setNumColumns(GridView.AUTO_FIT);
+       imageView.invalidate();
+    }
+    
+    protected void switchFileView(){
+       imageView.setNumColumns(1);
+       imageView.invalidate();
     }
     
     
@@ -82,12 +94,17 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
         Log_OC.e(TAG, "onCreateView");
         
         View v = inflater.inflate(R.layout.list_fragment, null);
-        mEmptyListMessage = (TextView) v.findViewById(R.id.empty_list_view);
-        mList = (ExtendedListView)(v.findViewById(R.id.list_root));
-        mList.setOnItemClickListener(this);
+        
+//        imageView = (GridView) v.findViewById(R.id.grid_list_view);
+//        imageView.setOnItemClickListener(this);
+        
+       // mEmptyListMessage = (TextView) v.findViewById(R.id.empty_list_view);
+        imageView = (ExtendedListView)(v.findViewById(R.id.list_root));
+        imageView.setOnItemClickListener(this);
 
-        mList.setDivider(getResources().getDrawable(R.drawable.uploader_list_separator));
-        mList.setDividerHeight(1);
+        //mList.set
+        //mList.setDivider(getResources().getDrawable(R.drawable.uploader_list_separator));
+        //mList.setDividerHeight(1);
 
         if (savedInstanceState != null) {
             int referencePosition = savedInstanceState.getInt(KEY_SAVED_LIST_POSITION);
@@ -101,7 +118,7 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
         onCreateSwipeToRefresh(mRefreshLayout);
         onCreateSwipeToRefresh(mRefreshEmptyLayout);
         
-        mList.setEmptyView(mRefreshEmptyLayout);
+//        mList.setEmptyView(mRefreshEmptyLayout);
 
         return v;
     }
@@ -152,8 +169,8 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
      * @return      The position in the list of the visible item in the center of the screen.
      */
     protected int getReferencePosition() {
-        if (mList != null) {
-            return (mList.getFirstVisiblePosition() + mList.getLastVisiblePosition()) / 2;
+        if (imageView != null) {
+            return (imageView.getFirstVisiblePosition() + imageView.getLastVisiblePosition()) / 2;
         } else {
             return 0;
         }
@@ -166,8 +183,8 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
      * @param   position    Reference position previously returned by {@link LocalFileListFragment#getReferencePosition()}
      */
     protected void setReferencePosition(int position) {
-        if (mList != null) {
-            mList.setAndCenterSelection(position);
+        if (imageView != null) {
+            imageView.setSelection(position);
         }
     }
 
@@ -185,22 +202,14 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
             
             int top = mTops.remove(mTops.size() - 1);
             
-            mList.setSelectionFromTop(firstPosition, top);
+            imageView.smoothScrollToPosition(firstPosition);
             
             // Move the scroll if the selection is not visible
             int indexPosition = mHeightCell*index;
-            int height = mList.getHeight();
+            int height = imageView.getHeight();
             
             if (indexPosition > height) {
-                if (android.os.Build.VERSION.SDK_INT >= 11)
-                {
-                    mList.smoothScrollToPosition(index); 
-                }
-                else if (android.os.Build.VERSION.SDK_INT >= 8)
-                {
-                    mList.setSelectionFromTop(index, 0);
-                }
-                
+                imageView.smoothScrollToPosition(index);
             }
         }
     }
@@ -212,10 +221,10 @@ implements OnItemClickListener, OnEnforceableRefreshListener {
         
         mIndexes.add(index);
         
-        int firstPosition = mList.getFirstVisiblePosition();
+        int firstPosition = imageView.getFirstVisiblePosition();
         mFirstPositions.add(firstPosition);
         
-        View view = mList.getChildAt(0);
+        View view = imageView.getChildAt(0);
         int top = (view == null) ? 0 : view.getTop() ;
 
         mTops.add(top);
index 62b41a3..90af004 100644 (file)
@@ -76,7 +76,7 @@ public class LocalFileListFragment extends ExtendedListFragment {
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         Log_OC.i(TAG, "onCreateView() start");
         View v = super.onCreateView(inflater, container, savedInstanceState);
-        getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
+        getGridView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
         disableSwipe(); // Disable pull refresh
         setMessageForEmptyList(getString(R.string.local_file_list_empty));
         Log_OC.i(TAG, "onCreateView() end");
@@ -138,7 +138,7 @@ public class LocalFileListFragment extends ExtendedListFragment {
             } else {    /// Click on a file
                 ImageView checkBoxV = (ImageView) v.findViewById(R.id.custom_checkbox);
                 if (checkBoxV != null) {
-                    if (getListView().isItemChecked(position)) {
+                    if (getGridView().isItemChecked(position)) {
                         checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);
                     } else {
                         checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);
@@ -215,10 +215,10 @@ public class LocalFileListFragment extends ExtendedListFragment {
             directory = directory.getParentFile();
         }
 
-        mList.clearChoices();   // by now, only files in the same directory will be kept as selected
+        imageView.clearChoices();   // by now, only files in the same directory will be kept as selected
         mAdapter.swapDirectory(directory);
         if (mDirectory == null || !mDirectory.equals(directory)) {
-            mList.setSelectionFromTop(0, 0);
+            imageView.setSelection(0);
         }
         mDirectory = directory;
     }
@@ -231,7 +231,7 @@ public class LocalFileListFragment extends ExtendedListFragment {
      */
     public String[] getCheckedFilePaths() {
         ArrayList<String> result = new ArrayList<String>();
-        SparseBooleanArray positions = mList.getCheckedItemPositions();
+        SparseBooleanArray positions = imageView.getCheckedItemPositions();
         if (positions.size() > 0) {
             for (int i = 0; i < positions.size(); i++) {
                 if (positions.get(positions.keyAt(i)) == true) {
index 0b1059f..f7df432 100644 (file)
@@ -18,6 +18,7 @@
 package com.owncloud.android.ui.fragment;
 
 import java.io.File;
+import java.util.Vector;
 
 import android.app.Activity;
 import android.content.Intent;
@@ -126,8 +127,8 @@ public class OCFileListFragment extends ExtendedListFragment {
         );
         setListAdapter(mAdapter);
         
-        registerForContextMenu(getListView());
-        getListView().setOnCreateContextMenuListener(this);
+        registerForContextMenu(getGridView());
+        getGridView().setOnCreateContextMenuListener(this);
   }
     
     /**
@@ -381,9 +382,29 @@ public class OCFileListFragment extends ExtendedListFragment {
 
             mAdapter.swapDirectory(directory, storageManager);
             if (mFile == null || !mFile.equals(directory)) {
-                mList.setSelectionFromTop(0, 0);
+                imageView.setSelection(0);
             }
             mFile = directory;
+            
+         // decide image vs. file view
+            double count = 0;
+            
+            Vector<OCFile> files = storageManager.getFolderContent(directory);
+            for (OCFile file : files){
+                if (file.isImage()){
+                    count++;
+                }
+            }
+            
+            // > 50% Images --> image view
+            // TODO threshold as constant in Preferences
+            if ((count / files.size()) >= 0.5){
+                Log_OC.i(TAG, "Image View");
+                switchImageView();
+            } else {
+                Log_OC.i(TAG, "Folder View");
+                switchFileView();
+            }
         }
     }