From: tobiasKaminsky Date: Wed, 5 Nov 2014 21:07:11 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/develop' into imageGrid X-Git-Tag: oc-android-1.7.0_signed~16^2~28 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/f331120a147b95e7a27fb765de2e210d4af892ca?hp=80cfc55fda1f71124e2a658b46229cbb7c1feb77 Merge remote-tracking branch 'upstream/develop' into imageGrid 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 --- diff --git a/owncloud-android-library b/owncloud-android-library index 4f315c7e..5bd0d738 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit 4f315c7e06f6eef48df246be0ee9252fdfccdf00 +Subproject commit 5bd0d7387712ce3f53869294761ac4d8537841cd diff --git a/project.properties b/project.properties index 28edd993..3c67d777 100644 --- a/project.properties +++ b/project.properties @@ -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 index 00000000..213976c7 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 index 00000000..ece0eb44 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 index 00000000..05e75b4b 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 index 00000000..e6212cf6 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 index 00000000..e6212cf6 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 index 00000000..999d0f0d 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 index 00000000..2369348c 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 index 00000000..38667417 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 index 00000000..188d693a 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 index 00000000..c1764b6d 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 index 00000000..d249e5f9 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 index 00000000..a8c10c8b 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 index 00000000..84b2803d 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 index 00000000..bd84c728 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 index 00000000..e2725620 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 index 00000000..c8988956 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 index 00000000..82fbc7b7 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 index 00000000..2e98d6c0 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 index 00000000..28130ecd 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 index 00000000..76807125 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 index c187f0c1..00000000 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 index 00000000..3ee60288 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 index b3855d61..00000000 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 index 00000000..060728c3 Binary files /dev/null and b/res/drawable-xhdpi/shared_with_me_folder.png differ diff --git a/res/layout-land/account_setup.xml b/res/layout-land/account_setup.xml index 88b1ab3c..68625efe 100644 --- a/res/layout-land/account_setup.xml +++ b/res/layout-land/account_setup.xml @@ -32,7 +32,7 @@ android:orientation="horizontal" > + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/grid_item.xml b/res/layout/grid_item.xml new file mode 100644 index 00000000..f04f7fab --- /dev/null +++ b/res/layout/grid_item.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/layout/list_fragment.xml b/res/layout/list_fragment.xml index 4236d070..564404af 100644 --- a/res/layout/list_fragment.xml +++ b/res/layout/list_fragment.xml @@ -1,5 +1,5 @@ - +--> + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_weight="1" > - + 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:layout_height="wrap_content" + android:layout_gravity="center" + android:gravity="center_vertical|center_horizontal" + android:text="@string/empty" + android:visibility="visible" /> - + + \ No newline at end of file diff --git a/res/layout/list_item.xml b/res/layout/list_item.xml index c6c7b92f..78c36cef 100644 --- a/res/layout/list_item.xml +++ b/res/layout/list_item.xml @@ -31,7 +31,7 @@ android:focusableInTouchMode="false"> + android:src="@drawable/shared_with_me" + android:visibility="invisible" /> diff --git a/res/layout/uploader_list_item_layout.xml b/res/layout/uploader_list_item_layout.xml index 1cb93619..08f9ceeb 100644 --- a/res/layout/uploader_list_item_layout.xml +++ b/res/layout/uploader_list_item_layout.xml @@ -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" /> 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 index 00000000..3c909999 --- /dev/null +++ b/src/com/owncloud/android/ui/SquareImageView.java @@ -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 index 00000000..a7795d2e --- /dev/null +++ b/src/com/owncloud/android/ui/SquareLinearLayout.java @@ -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); + } +} diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index e002efb7..d2680fa5 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -26,13 +26,20 @@ import java.util.Vector; import third_parties.daveKoeller.AlphanumComparator; import android.accounts.Account; import android.content.Context; +<<<<<<< HEAD +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.media.ThumbnailUtils; +======= import android.content.SharedPreferences; import android.graphics.Bitmap; import android.preference.PreferenceManager; +>>>>>>> upstream/develop import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; +import android.widget.GridView; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.ListView; @@ -48,8 +55,13 @@ import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; import com.owncloud.android.ui.activity.ComponentsGetter; import com.owncloud.android.utils.DisplayUtils; +<<<<<<< HEAD +import com.owncloud.android.utils.Log_OC; + +======= import com.owncloud.android.utils.FileStorageUtils; +>>>>>>> upstream/develop /** * This Adapter populates a ListView with all files and folders in an ownCloud @@ -70,12 +82,16 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { private FileDataStorageManager mStorageManager; private Account mAccount; private ComponentsGetter mTransferServiceGetter; +<<<<<<< HEAD + private enum ViewType {LIST_ITEM, GRID_IMAGE, GRID_ITEM }; +======= private Integer mSortOrder; public static final Integer SORT_NAME = 0; public static final Integer SORT_DATE = 1; public static final Integer SORT_SIZE = 2; private Boolean mSortAscending; private SharedPreferences mAppPreferences; +>>>>>>> upstream/develop public FileListListAdapter( boolean justFolders, @@ -138,12 +154,66 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { @Override public View getView(int position, View convertView, ViewGroup parent) { + // decide image vs. file view + double count = 0; + + + for (OCFile file : mFiles){ + if (file.isImage()){ + count++; + } + } + + // TODO threshold as constant in Preferences + // > 50% Images --> image view + boolean fileView = true; + if ((count / mFiles.size()) >= 0.5){ + fileView = false; + } else { + fileView = true; + } + View view = convertView; - if (view == null) { - LayoutInflater inflator = (LayoutInflater) mContext - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + OCFile file = null; + LayoutInflater inflator = (LayoutInflater) mContext + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + + if (mFiles != null && mFiles.size() > position) { + file = mFiles.get(position); + } + + // Find out which layout should be displayed + ViewType viewType; + if (fileView){ + viewType = ViewType.LIST_ITEM; + } else if (file.isImage()){ + viewType = ViewType.GRID_IMAGE; + } else { + viewType = ViewType.GRID_ITEM; + } + + // Create View + switch (viewType){ + case GRID_IMAGE: + view = inflator.inflate(R.layout.grid_image, null); + break; + case GRID_ITEM: + view = inflator.inflate(R.layout.grid_item, null); + break; + case LIST_ITEM: view = inflator.inflate(R.layout.list_item, null); + break; } +<<<<<<< HEAD + + view.invalidate(); + + if (file != null){ + + ImageView fileIcon = (ImageView) view.findViewById(R.id.thumbnail); + TextView fileName; + String name; +======= if (mFiles != null && mFiles.size() > position) { OCFile file = mFiles.get(position); @@ -178,11 +248,33 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { TextView fileSizeV = (TextView) view.findViewById(R.id.file_size); TextView lastModV = (TextView) view.findViewById(R.id.last_mod); ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox); +>>>>>>> upstream/develop - if (!file.isFolder()) { + switch (viewType){ + case LIST_ITEM: + fileName = (TextView) view.findViewById(R.id.Filename); + name = file.getFileName(); + fileName.setText(name); + + TextView fileSizeV = (TextView) view.findViewById(R.id.file_size); + TextView lastModV = (TextView) view.findViewById(R.id.last_mod); + ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox); + + lastModV.setVisibility(View.VISIBLE); +<<<<<<< HEAD + lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp())); + + checkBoxV.setVisibility(View.GONE); + fileSizeV.setVisibility(View.VISIBLE); fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength())); - lastModV.setVisibility(View.VISIBLE); + + ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon); + + + if (file.isShareByLink()) { + sharedIconV.setVisibility(View.VISIBLE); +======= lastModV.setText( DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()) ); @@ -190,19 +282,83 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { // because android reuses views in listview if (!file.keepInSync()) { view.findViewById(R.id.imageView3).setVisibility(View.GONE); +>>>>>>> upstream/develop } else { - view.findViewById(R.id.imageView3).setVisibility(View.VISIBLE); + sharedIconV.setVisibility(View.GONE); } - ListView parentList = (ListView)parent; - if (parentList.getChoiceMode() == ListView.CHOICE_MODE_NONE) { - checkBoxV.setVisibility(View.GONE); - } else { - if (parentList.isItemChecked(position)) { - checkBoxV.setImageResource(android.R.drawable.checkbox_on_background); + ImageView localStateView = (ImageView) view.findViewById(R.id.localFileIndicator); + + if (!file.isFolder()) { + GridView parentList = (GridView)parent; + if (parentList.getChoiceMode() == GridView.CHOICE_MODE_NONE) { + checkBoxV.setVisibility(View.GONE); + } else { + if (parentList.isItemChecked(position)) { + checkBoxV.setImageResource(android.R.drawable.checkbox_on_background); + } else { + checkBoxV.setImageResource(android.R.drawable.checkbox_off_background); + } + checkBoxV.setVisibility(View.VISIBLE); + } +<<<<<<< HEAD + + localStateView.bringToFront(); + FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder(); + FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder(); + if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, file)) { + localStateView.setImageResource(R.drawable.downloading_file_indicator); + localStateView.setVisibility(View.VISIBLE); + } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, file)) { + localStateView.setImageResource(R.drawable.uploading_file_indicator); + localStateView.setVisibility(View.VISIBLE); + } else if (file.isDown()) { + localStateView.setImageResource(R.drawable.local_file_indicator); + localStateView.setVisibility(View.VISIBLE); } else { - checkBoxV.setImageResource(android.R.drawable.checkbox_off_background); + localStateView.setVisibility(View.INVISIBLE); } + + ImageView sharedWithMeIconV = (ImageView) view.findViewById(R.id.sharedWithMeIcon); + if (checkIfFileIsSharedWithMe(file)) { + sharedWithMeIconV.setVisibility(View.VISIBLE); + } else { + sharedWithMeIconV.setVisibility(View.GONE); + } + } else { + localStateView.setVisibility(View.INVISIBLE); + } + break; + case GRID_ITEM: + fileName = (TextView) view.findViewById(R.id.Filename); + name = file.getFileName(); + fileName.setText(name); + break; + case GRID_IMAGE: + break; + } + + // For all Views + + // this if-else is needed even though favorite icon is visible by default + // because android reuses views in listview + if (!file.keepInSync()) { + view.findViewById(R.id.favoriteIcon).setVisibility(View.GONE); + } else { + view.findViewById(R.id.favoriteIcon).setVisibility(View.VISIBLE); + } + + // No Folder + if (!file.isFolder()) { + if (file.isImage() && file.isDown()){ + Bitmap bitmap = BitmapFactory.decodeFile(file.getStoragePath()); + fileIcon.setImageBitmap(ThumbnailUtils.extractThumbnail(bitmap, 200, 200)); + } else { + fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName())); + } + } else { + // Folder +======= checkBoxV.setVisibility(View.VISIBLE); } @@ -259,27 +415,19 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { checkBoxV.setVisibility(View.GONE); view.findViewById(R.id.imageView3).setVisibility(View.GONE); +>>>>>>> upstream/develop if (checkIfFileIsSharedWithMe(file)) { fileIcon.setImageResource(R.drawable.shared_with_me_folder); - sharedWithMeIconV.setVisibility(View.VISIBLE); + } else if (file.isShareByLink()) { + // If folder is sharedByLink, icon folder must be changed to + // folder-public one + fileIcon.setImageResource(R.drawable.folder_public); } else { fileIcon.setImageResource( DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()) ); } - - // If folder is sharedByLink, icon folder must be changed to - // folder-public one - if (file.isShareByLink()) { - fileIcon.setImageResource(R.drawable.folder_public); - } - } - - if (file.isShareByLink()) { - sharedIconV.setVisibility(View.VISIBLE); - } else { - sharedIconV.setVisibility(View.GONE); - } + } } return view; diff --git a/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java b/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java index 6190ebee..8fcec5c3 100644 --- a/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java @@ -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); diff --git a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java index 5d3f7ace..c6123483 100644 --- a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -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); diff --git a/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java b/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java index 62b41a3e..90af004c 100644 --- a/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java @@ -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 result = new ArrayList(); - 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) { diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index 0b1059fc..f7df4324 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -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 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(); + } } }