Merge remote-tracking branch 'upstream/develop' into imageGrid
authortobiasKaminsky <tobias@kaminsky.me>
Tue, 18 Nov 2014 17:08:28 +0000 (18:08 +0100)
committertobiasKaminsky <tobias@kaminsky.me>
Tue, 18 Nov 2014 17:08:28 +0000 (18:08 +0100)
Conflicts:
owncloud-android-library
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

43 files changed:
owncloud-android-library
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
res/values-fr/strings.xml
src/com/owncloud/android/MainApp.java
src/com/owncloud/android/datamodel/ThumbnailsCacheManager.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 2799b3e..5bd0d73 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 2799b3e853c79e8ebb37051c92dfcc43f8d63788
+Subproject commit 5bd0d7387712ce3f53869294761ac4d8537841cd
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 3656d14..2cf16ac 100644 (file)
@@ -41,7 +41,7 @@
   <string name="prefs_remember_last_share_location">Mémoriser l\'emplacement de partage</string>
   <string name="prefs_remember_last_upload_location_summary">Mémoriser le dernier emplacement d\'upload</string>
   <string name="recommend_subject">Essayez %1$s sur votre smartphone&amp;nbsp;!</string>
-  <string name="recommend_text">J'aimerais vous inviter Ã  utiliser %1$s sur votre smartphone !
+  <string name="recommend_text">J\'aimerais vous inviter Ã  utiliser %1$s sur votre smartphone !
 Téléchargez-le ici&amp;nbsp;: %2$s</string>
   <string name="auth_check_server">Vérifier le serveur</string>
   <string name="auth_host_url">Adresse du serveur https://…</string>
@@ -51,7 +51,7 @@ Téléchargez-le ici&amp;nbsp;: %2$s</string>
   <string name="sync_string_files">Fichiers</string>
   <string name="setup_btn_connect">Connecter</string>
   <string name="uploader_btn_upload_text">Téléverser</string>
-  <string name="uploader_top_message">Sélectionner le dossier d'envoi&amp;nbsp;:</string>
+  <string name="uploader_top_message">Sélectionner le dossier d\'envoi&amp;nbsp;:</string>
   <string name="uploader_wrn_no_account_title">Aucun compte n\'a Ã©té trouvé</string>
   <string name="uploader_wrn_no_account_text">Aucun compte %1$s n\'a Ã©té trouvé. Veuillez commencer par en configurer un.</string>
   <string name="uploader_wrn_no_account_setup_btn_text">Paramètres</string>
@@ -61,7 +61,7 @@ Téléchargez-le ici&amp;nbsp;: %2$s</string>
   <string name="uploader_error_forbidden_content">%1$s n\'est pas autorisé Ã  accéder au contenu partagé</string>
   <string name="uploader_info_uploading">Téléversement</string>
   <string name="file_list_seconds_ago">il y a quelques secondes</string>
-  <string name="file_list_empty">Il n'y a rien ici&amp;nbsp;! Envoyez donc quelque chose :)</string>
+  <string name="file_list_empty">Il n\'y a rien ici&amp;nbsp;! Envoyez donc quelque chose :)</string>
   <string name="file_list_loading">Chargement…</string>
   <string name="local_file_list_empty">Aucun fichier n\'est présent dans ce dossier.</string>
   <string name="filedetails_select_file">Effleurez un fichier pour afficher les informations complémentaires</string>
@@ -178,7 +178,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq
   <string name="auth_unauthorized">Nom d\'utilisateur ou mot de passe incorrect</string>
   <string name="auth_oauth_error">Échec d\'autorisation</string>
   <string name="auth_oauth_error_access_denied">Accès refusé par le serveur d\'autorisation</string>
-  <string name="auth_wtf_reenter_URL">État inattendu&amp;nbsp;; veuillez entrer Ã  nouveau l'URL du serveur</string>
+  <string name="auth_wtf_reenter_URL">État inattendu&amp;nbsp;; veuillez entrer Ã  nouveau l\'URL du serveur</string>
   <string name="auth_expired_oauth_token_toast">Votre autorisation a expiré. Merci de vous authentifier Ã  nouveau</string>
   <string name="auth_expired_basic_auth_toast">Veuillez saisir le mot de passe courant</string>
   <string name="auth_expired_saml_sso_token_toast">Votre session a expiré. Merci de vous reconnecter</string>
@@ -224,7 +224,7 @@ Ci-dessous la liste des fichiers locaux, et les fichiers distants dans %5$s auxq
   <string name="ssl_validator_btn_details_hide">Masquer</string>
   <string name="ssl_validator_label_subject">Délivré Ã &amp;nbsp;:</string>
   <string name="ssl_validator_label_issuer">Délivré par&amp;nbsp;:</string>
-  <string name="ssl_validator_label_CN">Nom d'usage&amp;nbsp;:</string>
+  <string name="ssl_validator_label_CN">Nom d\'usage&amp;nbsp;:</string>
   <string name="ssl_validator_label_O">Organisation&amp;nbsp;:</string>
   <string name="ssl_validator_label_OU">Unité organisationnelle&amp;nbsp;:</string>
   <string name="ssl_validator_label_C">Pays&amp;nbsp;:</string>
index c2a4c68..ca59cb3 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;
index 1d2cda8..52bb3a7 100644 (file)
@@ -59,7 +59,7 @@ public class ThumbnailsCacheManager {
     private static final String TAG = ThumbnailsCacheManager.class.getSimpleName();
     
     private static final String CACHE_FOLDER = "thumbnailCache";
-    private static final String MINOR_SERVER_VERSION_FOR_THUMBS = "7.8.0";
+    private static final String MINOR_SERVER_VERSION_FOR_THUMBS = "6.8.0";
     
     private static final Object mThumbnailsDiskCacheLock = new Object();
     private static DiskLruImageCache mThumbnailCache = null;
@@ -205,10 +205,8 @@ public class ThumbnailsCacheManager {
     
                 // Not found in disk cache
                 if (thumbnail == null || mFile.needsUpdateThumbnail()) { 
-                    // Converts dp to pixel
-                    Resources r = MainApp.getAppContext().getResources();
-                    
-                    int px = (int) Math.round(r.getDimension(R.dimen.file_icon_size));
+                    // Use Width of imageView -> no blurry images on big screens
+                    int px = mImageViewReference.get().getWidth();
                     
                     if (mFile.isDown()){
                         Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromFile(
@@ -278,9 +276,7 @@ public class ThumbnailsCacheManager {
                 final ThumbnailGenerationTask bitmapWorkerTask =
                         getBitmapWorkerTask(imageView);
                 if (this == bitmapWorkerTask && imageView != null) {
-                    if (imageView.getTag().equals(mFile.getFileId())) {
-                        imageView.setImageBitmap(bitmap);
-                    }
+                    imageView.setImageBitmap(bitmap);
                 }
             }
         }
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 1035632..c2f70e8 100644 (file)
@@ -28,15 +28,19 @@ import android.accounts.Account;
 import android.content.Context;\r
 import android.content.SharedPreferences;\r
 import android.graphics.Bitmap;\r
+import android.graphics.BitmapFactory;\r
+import android.media.ThumbnailUtils;\r
 import android.preference.PreferenceManager;\r
 import android.text.format.DateUtils;\r
 import android.view.LayoutInflater;\r
 import android.view.View;\r
 import android.view.ViewGroup;\r
 import android.widget.BaseAdapter;\r
+import android.widget.Filter;\r
+import android.widget.Filterable;\r
+import android.widget.GridView;\r
 import android.widget.ImageView;\r
 import android.widget.ListAdapter;\r
-import android.widget.ListView;\r
 import android.widget.TextView;\r
 \r
 import com.owncloud.android.R;\r
@@ -67,11 +71,13 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
     private Context mContext;\r
     private OCFile mFile = null;\r
     private Vector<OCFile> mFiles = null;\r
+    private Vector<OCFile> mFilesOrig = new Vector<OCFile>();\r
     private boolean mJustFolders;\r
 \r
     private FileDataStorageManager mStorageManager;
     private Account mAccount;
     private ComponentsGetter mTransferServiceGetter;\r
+    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
@@ -84,11 +90,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
             Context context, \r
             ComponentsGetter transferServiceGetter\r
             ) {\r
-\r
+        \r
         mJustFolders = justFolders;\r
         mContext = context;\r
         mAccount = AccountUtils.getCurrentOwnCloudAccount(mContext);\r
-
         mTransferServiceGetter = transferServiceGetter;
         \r
         mAppPreferences = PreferenceManager\r
@@ -101,7 +106,6 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         \r
         // initialise thumbnails cache on background thread\r
         new ThumbnailsCacheManager.InitDiskCacheTask().execute();\r
-\r
     }\r
     
     @Override\r
@@ -140,144 +144,201 @@ 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 countImages = 0;\r
+        double countFiles = 0;\r
+        \r
+        for (OCFile file : mFiles){\r
+            if (!file.isFolder()){\r
+                countFiles++;\r
+                \r
+                if (file.isImage()){\r
+                    countImages++;\r
+                }\r
+            }\r
+        }\r
+        \r
+        // TODO threshold as constant in Preferences\r
+        // > 50% Images --> image view\r
+        boolean fileView = true;\r
+        if ((countImages / countFiles) >= 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
-         \r
-        if (mFiles != null && mFiles.size() > position) {\r
-            OCFile file = mFiles.get(position);\r
-            TextView fileName = (TextView) view.findViewById(R.id.Filename);           \r
-            String name = file.getFileName();\r
 \r
-            fileName.setText(name);\r
-            ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1);\r
-            fileIcon.setTag(file.getFileId());\r
-            ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon);\r
-            ImageView sharedWithMeIconV = (ImageView) view.findViewById(R.id.sharedWithMeIcon);\r
-            sharedWithMeIconV.setVisibility(View.GONE);\r
+        view.invalidate();\r
 \r
-            ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2);\r
-            localStateView.bringToFront();\r
-            FileDownloaderBinder downloaderBinder = \r
-                    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
-                localStateView.setVisibility(View.INVISIBLE);\r
-            }\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
+        if (file != null){\r
+\r
+            ImageView fileIcon = (ImageView) view.findViewById(R.id.thumbnail);\r
+            TextView fileName;\r
+            String name;\r
             \r
-            if (!file.isFolder()) {\r
-                fileSizeV.setVisibility(View.VISIBLE);\r
-                fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\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
                 lastModV.setText(showRelativeTimestamp(file));\r
-                // this if-else is needed even thoe fav icon is visible by default\r
-                // because android reuses views in listview\r
-                if (!file.keepInSync()) {\r
-                    view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
+                \r
+                checkBoxV.setVisibility(View.GONE);\r
+                \r
+                fileSizeV.setVisibility(View.VISIBLE);\r
+                fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
+                \r
+                ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon);\r
+                \r
+\r
+                if (file.isShareByLink()) {\r
+                    sharedIconV.setVisibility(View.VISIBLE);\r
                 } 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
+                    \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
-                    checkBoxV.setVisibility(View.VISIBLE);\r
-                }               \r
-                \r
-                // get Thumbnail if file is image\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.getRemoteId() != null){\r
-                     // Thumbnail in Cache?\r
+                    // Thumbnail in Cache?\r
                     Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(\r
                             String.valueOf(file.getRemoteId())\r
-                    );\r
+                            );\r
                     if (thumbnail != null && !file.needsUpdateThumbnail()){\r
                         fileIcon.setImageBitmap(thumbnail);\r
                     } else {\r
                         // generate new Thumbnail\r
                         if (ThumbnailsCacheManager.cancelPotentialWork(file, fileIcon)) {\r
-                            final ThumbnailsCacheManager.ThumbnailGenerationTask task = \r
+                            final ThumbnailsCacheManager.ThumbnailGenerationTask task =\r
                                     new ThumbnailsCacheManager.ThumbnailGenerationTask(\r
                                             fileIcon, mStorageManager, mAccount\r
-                                    );\r
+                                            );\r
                             if (thumbnail == null) {\r
                                 thumbnail = ThumbnailsCacheManager.mDefaultImg;\r
                             }\r
                             final AsyncDrawable asyncDrawable = new AsyncDrawable(\r
-                                    mContext.getResources(), \r
-                                    thumbnail, \r
+                                    mContext.getResources(),\r
+                                    thumbnail,\r
                                     task\r
-                            );\r
+                                    );\r
                             fileIcon.setImageDrawable(asyncDrawable);\r
                             task.execute(file);\r
+\r
                         }\r
                     }\r
-                } else {\r
-                    fileIcon.setImageResource(\r
-                            DisplayUtils.getResourceId(file.getMimetype(), file.getFileName())\r
-                    );\r
                 }\r
-
-                if (checkIfFileIsSharedWithMe(file)) {\r
-                    sharedWithMeIconV.setVisibility(View.VISIBLE);\r
+                else {\r
+                    fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
                 }\r
-            } \r
-            else {\r
-                  // TODO Re-enable when server supports folder-size calculation\r
-//                if (FileStorageUtils.getDefaultSavePathFor(mAccount.name, file) != null){\r
-//                    fileSizeV.setVisibility(View.VISIBLE);\r
-//                    fileSizeV.setText(getFolderSizeHuman(FileStorageUtils.getDefaultSavePathFor(mAccount.name, file)));\r
-//                } else {\r
-                    fileSizeV.setVisibility(View.INVISIBLE);\r
-//                }\r
-
-                lastModV.setVisibility(View.VISIBLE);\r
-                lastModV.setText(showRelativeTimestamp(file));\r
-                checkBoxV.setVisibility(View.GONE);\r
-                view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
-\r
+            } else {\r
+                // Folder\r
                 if (checkIfFileIsSharedWithMe(file)) {\r
                     fileIcon.setImageResource(R.drawable.shared_with_me_folder);\r
-                    sharedWithMeIconV.setVisibility(View.VISIBLE);\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
+                } 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(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\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
@@ -353,6 +414,9 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         }\r
         if (mStorageManager != null) {\r
             mFiles = mStorageManager.getFolderContent(mFile);\r
+            mFilesOrig.clear();\r
+            mFilesOrig.addAll(mFiles);\r
+            \r
             if (mJustFolders) {\r
                 mFiles = getFolders(mFiles);\r
             }\r
@@ -515,7 +579,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         mSortAscending = ascending;\r
         \r
         sortDirectory();\r
-    }    \r
+    }
     \r
     private CharSequence showRelativeTimestamp(OCFile file){\r
         return DisplayUtils.getRelativeDateTimeString(mContext, file.getModificationTimestamp(),\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..9e251c7 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;
@@ -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..e954f02 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");
@@ -105,7 +105,7 @@ public class LocalFileListFragment extends ExtendedListFragment {
             if (file != null) {                
                 if (!file.isDirectory()) {  
                     /// Click on a file
-                    getListView().setItemChecked(i, true);                       
+                    getGridView().setItemChecked(i, true);                       
                     // notify the change to the container Activity
                     mContainerActivity.onFileClick(file);
                 }
@@ -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;
     }
index 0b1059f..dc96ca0 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,34 @@ 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 countImages = 0;
+            double countFiles = 0;
+            
+            Vector<OCFile> files = storageManager.getFolderContent(directory);
+            for (OCFile file : files){
+                if (!file.isFolder()){
+                    countFiles++;
+                    
+                    if (file.isImage()){
+                        countImages++;
+                    }
+                }
+            }
+            
+            // > 50% Images --> image view
+            // TODO threshold as constant in Preferences
+            if ((countImages / countFiles) >= 0.5){
+                Log_OC.i(TAG, "Image View");
+                switchImageView();
+            } else {
+                Log_OC.i(TAG, "Folder View");
+                switchFileView();
+            }
         }
     }