Beginning gridView
authortobiasKaminsky <tobias@kaminsky.me>
Mon, 15 Sep 2014 07:41:54 +0000 (09:41 +0200)
committertobiasKaminsky <tobias@kaminsky.me>
Mon, 15 Sep 2014 07:41:54 +0000 (09:41 +0200)
owncloud-android-library [deleted submodule]
project.properties
res/layout/image_item.xml [new file with mode: 0644]
res/layout/list_fragment.xml
src/com/owncloud/android/ui/adapter/FileListListAdapter.java
src/com/owncloud/android/ui/fragment/ExtendedListFragment.java
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

diff --git a/owncloud-android-library b/owncloud-android-library
deleted file mode 160000 (submodule)
index 79d5866..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 79d586637ee306fdbefbbc4439eb3b058f6877c9
index 28edd99..c149c45 100644 (file)
@@ -10,4 +10,4 @@
 # Project target.
 target=android-19
 android.library.reference.1=actionbarsherlock/library
-android.library.reference.2=owncloud-android-library
+android.library.reference.2=../android-library/android-library
diff --git a/res/layout/image_item.xml b/res/layout/image_item.xml
new file mode 100644 (file)
index 0000000..bd9f8d7
--- /dev/null
@@ -0,0 +1,119 @@
+<?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
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+    android:id="@+id/ListItemLayout"\r
+    android:layout_width="fill_parent"\r
+    android:layout_height="160dp"\r
+    android:background="@drawable/list_selector"\r
+    android:orientation="horizontal" >\r
+\r
+    <ImageView\r
+        android:id="@+id/imageView1"\r
+        android:layout_width="150dp"\r
+        android:layout_height="150dp"\r
+        android:layout_marginBottom="5dp"\r
+        android:layout_marginLeft="9dp"\r
+        android:layout_marginTop="5dp"\r
+        android:src="@drawable/ic_menu_archive" />\r
+\r
+    <FrameLayout\r
+        android:id="@+id/imageItemFrame"\r
+        android:layout_width="56dp"\r
+        android:layout_height="56dp"\r
+        android:focusable="false"\r
+        android:focusableInTouchMode="false" >\r
+\r
+        <ImageView\r
+            android:id="@+id/sharedIcon"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:layout_marginBottom="4dp"\r
+            android:layout_marginLeft="4dp"\r
+            android:layout_marginRight="4dp"\r
+            android:src="@drawable/sharedlink" />\r
+\r
+        <ImageView\r
+            android:id="@+id/sharedWithMeIcon"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:layout_marginLeft="4dp"\r
+            android:layout_marginRight="4dp"\r
+            android:layout_marginTop="4dp"\r
+            android:src="@drawable/shared_with_me" />\r
+\r
+        <ImageView\r
+            android:id="@+id/custom_checkbox"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:layout_marginLeft="4dp"\r
+            android:layout_marginRight="4dp"\r
+            android:src="@android:drawable/checkbox_off_background" />\r
+\r
+        <ImageView\r
+            android:id="@+id/imageView2"\r
+            android:layout_width="32dp"\r
+            android:layout_height="32dp"\r
+            android:layout_gravity="center_vertical"\r
+            android:layout_marginLeft="22dp"\r
+            android:src="@drawable/local_file_indicator" />\r
+\r
+        <TextView\r
+            android:id="@+id/Filename"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:layout_marginLeft="4dp"\r
+            android:layout_marginRight="4dp"\r
+            android:ellipsize="middle"\r
+            android:singleLine="true"\r
+            android:text="TextView"\r
+            android:textColor="#303030"\r
+            android:textSize="16dip" />\r
+\r
+        <ImageView\r
+            android:id="@+id/imageView3"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:layout_gravity="bottom|right"\r
+            android:layout_marginBottom="10dp"\r
+            android:layout_marginRight="2dp"\r
+            android:src="@drawable/ic_favorite" />\r
+\r
+        <TextView\r
+            android:id="@+id/last_mod"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:layout_weight=".5"\r
+            android:text="TextView"\r
+            android:textColor="@color/list_item_lastmod_and_filesize_text"\r
+            android:textSize="12dip" />\r
+\r
+        <TextView\r
+            android:id="@+id/file_size"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:layout_weight=".5"\r
+            android:gravity="right"\r
+            android:text="TextView"\r
+            android:textColor="@color/list_item_lastmod_and_filesize_text"\r
+            android:textSize="12dip" />\r
+    </FrameLayout>\r
+\r
+</LinearLayout>
\ No newline at end of file
index 4236d07..24dbb49 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="0dp"
+    android:layout_height="match_parent"
+    android:layout_weight="1" >
 
     <android.support.v4.widget.SwipeRefreshLayout
         android:id="@+id/swipe_refresh_files"
@@ -31,7 +32,6 @@
             android:id="@+id/list_root"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />
-        
     </android.support.v4.widget.SwipeRefreshLayout>
 
     <android.support.v4.widget.SwipeRefreshLayout
         android:layout_height="match_parent"
         android:visibility="gone" >
 
-        <ScrollView
-            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>
+        <GridView
+            android:id="@+id/grid_list_view"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content"
+            android:numColumns="1"
+            android:visibility="visible" />
+
     </android.support.v4.widget.SwipeRefreshLayout>
-</FrameLayout>
+
+</FrameLayout>
\ No newline at end of file
index 65a9c83..c6fc19e 100644 (file)
@@ -21,10 +21,14 @@ import java.util.Vector;
 \r
 import android.accounts.Account;\r
 import android.content.Context;\r
+import android.graphics.Bitmap;\r
+import android.graphics.BitmapFactory;\r
+import android.media.ThumbnailUtils;\r
 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
@@ -38,6 +42,7 @@ 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
+import com.owncloud.android.utils.Log_OC;\r
 \r
 \r
 /**\r
@@ -106,16 +111,41 @@ 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
+        // > 50% Images --> image view\r
+        boolean fileView = true;\r
+        if ((count / mFiles.size()) >= 0.8){\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
+        LayoutInflater inflator = (LayoutInflater) mContext\r
+                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);\r
+        if (fileView){\r
             view = inflator.inflate(R.layout.list_item, null);\r
+        } else {\r
+            view = inflator.inflate(R.layout.image_item, null);\r
+            View frame = view.findViewById(R.id.imageItemFrame);\r
+            frame.setVisibility(View.GONE);\r
         }\r
+//    }\r
+        view.invalidate();\r
     \r
         if (mFiles != null && mFiles.size() > position) {\r
             OCFile file = mFiles.get(position);\r
             TextView fileName = (TextView) view.findViewById(R.id.Filename);\r
+            if (!fileView){fileName.setVisibility(View.GONE);}\r
             String name = file.getFileName();\r
 \r
             fileName.setText(name);\r
@@ -158,7 +188,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                     view.findViewById(R.id.imageView3).setVisibility(View.VISIBLE);\r
                 }\r
                 \r
-                ListView parentList = (ListView)parent;\r
+                GridView parentList = (GridView)parent;\r
                 if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) { \r
                     checkBoxV.setVisibility(View.GONE);\r
                 } else {\r
@@ -170,7 +200,12 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                     checkBoxV.setVisibility(View.VISIBLE);\r
                 }\r
 \r
-                fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
+                if (file.isImage() && file.isDown()){\r
+                    Bitmap bitmap = BitmapFactory.decodeFile(file.getStoragePath());\r
+                    fileIcon.setImageBitmap(ThumbnailUtils.extractThumbnail(bitmap, 100, 100));\r
+                } else {\r
+                    fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
+                }\r
 \r
                 if (checkIfFileIsSharedWithMe(file)) {\r
                     sharedWithMeIconV.setVisibility(View.VISIBLE);\r
index abd53d3..bbf33e5 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;
@@ -65,25 +66,45 @@ implements OnItemClickListener, SwipeRefreshLayout.OnRefreshListener {
 
     private SwipeRefreshLayout.OnRefreshListener mOnRefreshListener = null;
     
+    private GridView imageView;
+    private View fileView;
+    
     
     public void setListAdapter(ListAdapter listAdapter) {
-        mList.setAdapter(listAdapter);
-        mList.invalidate();
+        imageView.setAdapter(listAdapter);
+        imageView.invalidate();
     }
 
     public ListView getListView() {
         return mList;
     }
     
+    protected void switchImageView(){
+        // TODO berechnen, wieviele Spalten
+        imageView.setNumColumns(3);
+        mList.invalidate();
+       imageView.invalidate();
+    }
+    
+    protected void switchFileView(){
+        imageView.setNumColumns(1);
+        mList.invalidate();
+       imageView.invalidate();
+    }
+    
     
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         Log_OC.e(TAG, "onCreateView");
         
         View v = inflater.inflate(R.layout.list_fragment, null);
-        mEmptyListMessage = (TextView) v.findViewById(R.id.empty_list_view);
+        
+        imageView = (GridView) v.findViewById(R.id.grid_list_view);
+        imageView.setOnItemClickListener(this);
+        
+       // mEmptyListMessage = (TextView) v.findViewById(R.id.empty_list_view);
         mList = (ExtendedListView)(v.findViewById(R.id.list_root));
-        mList.setOnItemClickListener(this);
+        // mList.setOnItemClickListener(this);
 
         mList.setDivider(getResources().getDrawable(R.drawable.uploader_list_separator));
         mList.setDividerHeight(1);
index c11e864..209c60a 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;
@@ -383,6 +384,25 @@ public class OCFileListFragment extends ExtendedListFragment {
                 mList.setSelectionFromTop(0, 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
+            if ((count / files.size()) >= 0.5){
+                Log_OC.i(TAG, "Image View");
+                switchImageView();
+            } else {
+                Log_OC.i(TAG, "Folder View");
+                switchFileView();
+            }
         }
     }