From: tobiasKaminsky Date: Fri, 10 Jul 2015 15:24:28 +0000 (+0200) Subject: add sort to UploadFileActiviy X-Git-Tag: beta-20151122~83^2 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/6def2d6fe8efb00053b750a69610c41ac4581c2e?hp=-c add sort to UploadFileActiviy --- 6def2d6fe8efb00053b750a69610c41ac4581c2e diff --git a/res/menu/uploader_menu.xml b/res/menu/uploader_menu.xml new file mode 100644 index 00000000..a721c7b1 --- /dev/null +++ b/res/menu/uploader_menu.xml @@ -0,0 +1,30 @@ + + + + + + \ No newline at end of file diff --git a/src/com/owncloud/android/ui/activity/UploadFilesActivity.java b/src/com/owncloud/android/ui/activity/UploadFilesActivity.java index 7a7f8e56..fa5c9cdb 100644 --- a/src/com/owncloud/android/ui/activity/UploadFilesActivity.java +++ b/src/com/owncloud/android/ui/activity/UploadFilesActivity.java @@ -23,12 +23,18 @@ package com.owncloud.android.ui.activity; import java.io.File; import android.accounts.Account; +import android.app.AlertDialog; +import android.content.DialogInterface; import android.content.Intent; +import android.content.SharedPreferences; import android.os.AsyncTask; import android.os.Bundle; import android.os.Environment; +import android.preference.PreferenceManager; import android.support.v4.app.DialogFragment; import android.support.v7.app.ActionBar; +import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; @@ -134,6 +140,13 @@ public class UploadFilesActivity extends FileActivity implements Log_OC.d(TAG, "onCreate() end"); } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.uploader_menu, menu); + return true; + } + @Override public boolean onOptionsItemSelected(MenuItem item) { @@ -145,6 +158,34 @@ public class UploadFilesActivity extends FileActivity implements } break; } + case R.id.action_sort: { + SharedPreferences appPreferences = PreferenceManager + .getDefaultSharedPreferences(this); + + // Read sorting order, default to sort by name ascending + Integer sortOrder = appPreferences + .getInt("sortOrder", FileStorageUtils.SORT_NAME); + + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.actionbar_sort_title) + .setSingleChoiceItems(R.array.actionbar_sortby, sortOrder , + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + switch (which){ + case 0: + mFileListFragment.sortByName(true); + break; + case 1: + mFileListFragment.sortByDate(false); + break; + } + + dialog.dismiss(); + } + }); + builder.create().show(); + break; + } default: retval = super.onOptionsItemSelected(item); } diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index c6ea0344..b48f9d4e 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -427,7 +427,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { mFiles = null; } - mFiles = FileStorageUtils.sortFolder(mFiles); + mFiles = FileStorageUtils.sortOcFolder(mFiles); notifyDataSetChanged(); } @@ -474,7 +474,7 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { FileStorageUtils.mSortAscending = ascending; - mFiles = FileStorageUtils.sortFolder(mFiles); + mFiles = FileStorageUtils.sortOcFolder(mFiles); notifyDataSetChanged(); } diff --git a/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java b/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java index 287c5b9e..a5f11cea 100644 --- a/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java @@ -25,7 +25,9 @@ import java.util.Arrays; import java.util.Comparator; import android.content.Context; +import android.content.SharedPreferences; import android.graphics.Bitmap; +import android.preference.PreferenceManager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -39,6 +41,7 @@ import com.owncloud.android.R; import com.owncloud.android.datamodel.ThumbnailsCacheManager; import com.owncloud.android.utils.BitmapUtils; import com.owncloud.android.utils.DisplayUtils; +import com.owncloud.android.utils.FileStorageUtils; /** * This Adapter populates a ListView with all files and directories contained @@ -49,9 +52,18 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter { private Context mContext; private File mDirectory; private File[] mFiles = null; + private SharedPreferences mAppPreferences; public LocalFileListAdapter(File directory, Context context) { mContext = context; + + mAppPreferences = PreferenceManager + .getDefaultSharedPreferences(mContext); + + // Read sorting order, default to sort by name ascending + FileStorageUtils.mSortOrder = mAppPreferences.getInt("sortOrder", 0); + FileStorageUtils.mSortAscending = mAppPreferences.getBoolean("sortAscending", true); + swapDirectory(directory); } @@ -218,7 +230,23 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter { } }); + + mFiles = FileStorageUtils.sortLocalFolder(mFiles); } notifyDataSetChanged(); } + + public void setSortOrder(Integer order, boolean ascending) { + SharedPreferences.Editor editor = mAppPreferences.edit(); + editor.putInt("sortOrder", order); + editor.putBoolean("sortAscending", ascending); + editor.commit(); + + FileStorageUtils.mSortOrder = order; + FileStorageUtils.mSortAscending = ascending; + + mFiles = FileStorageUtils.sortLocalFolder(mFiles); + notifyDataSetChanged(); + + } } diff --git a/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java b/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java index 8a268b75..5d9a7fbc 100644 --- a/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/LocalFileListFragment.java @@ -37,6 +37,7 @@ import android.widget.ListView; import com.owncloud.android.R; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.ui.adapter.LocalFileListAdapter; +import com.owncloud.android.utils.FileStorageUtils; /** @@ -228,7 +229,19 @@ public class LocalFileListFragment extends ExtendedListFragment { return result.toArray(new String[result.size()]); } - + public void sortByName(boolean descending) { + mAdapter.setSortOrder(FileStorageUtils.SORT_NAME, descending); + } + + public void sortByDate(boolean descending) { + mAdapter.setSortOrder(FileStorageUtils.SORT_DATE, descending); + } + + public void sortBySize(boolean descending) { + mAdapter.setSortOrder(FileStorageUtils.SORT_SIZE, descending); + } + + /** * Interface to implement by any Activity that includes some instance of LocalFileListFragment */ diff --git a/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java b/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java index dda7dda2..caff31cc 100644 --- a/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java +++ b/src/com/owncloud/android/ui/preview/PreviewImagePagerAdapter.java @@ -80,7 +80,7 @@ public class PreviewImagePagerAdapter extends FragmentStatePagerAdapter { // TODO Enable when "On Device" is recovered ? mImageFiles = mStorageManager.getFolderImages(parentFolder/*, false*/); - mImageFiles = FileStorageUtils.sortFolder(mImageFiles); + mImageFiles = FileStorageUtils.sortOcFolder(mImageFiles); mObsoleteFragments = new HashSet(); mObsoletePositions = new HashSet(); diff --git a/src/com/owncloud/android/utils/FileStorageUtils.java b/src/com/owncloud/android/utils/FileStorageUtils.java index e70302fc..3f854b86 100644 --- a/src/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/com/owncloud/android/utils/FileStorageUtils.java @@ -21,8 +21,11 @@ package com.owncloud.android.utils; import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Comparator; +import java.util.List; import java.util.Vector; import third_parties.daveKoeller.AlphanumComparator; @@ -155,13 +158,13 @@ public class FileStorageUtils { /** * Sorts all filenames, regarding last user decision */ - public static Vector sortFolder(Vector files){ + public static Vector sortOcFolder(Vector files){ switch (mSortOrder){ case 0: - files = FileStorageUtils.sortByName(files); + files = FileStorageUtils.sortOCFilesByName(files); break; case 1: - files = FileStorageUtils.sortByDate(files); + files = FileStorageUtils.sortOCFilesByDate(files); break; case 2: // mFiles = FileStorageUtils.sortBySize(mSortAscending); @@ -170,12 +173,31 @@ public class FileStorageUtils { return files; } + + /** + * Sorts all filenames, regarding last user decision + */ + public static File[] sortLocalFolder(File[] files){ + switch (mSortOrder){ + case 0: + files = FileStorageUtils.sortLocalFilesByName(files); + break; + case 1: + files = FileStorageUtils.sortLocalFilesByDate(files); + break; + case 2: + // mFiles = FileStorageUtils.sortBySize(mSortAscending); + break; + } + + return files; + } /** * Sorts list by Date * @param files */ - public static Vector sortByDate(Vector files){ + public static Vector sortOCFilesByDate(Vector files){ final Integer val; if (mSortAscending){ val = 1; @@ -205,6 +227,43 @@ public class FileStorageUtils { return files; } + /** + * Sorts list by Date + * @param filesArray + */ + public static File[] sortLocalFilesByDate(File[] filesArray){ + final Integer val; + if (mSortAscending){ + val = 1; + } else { + val = -1; + } + + List files = new ArrayList(Arrays.asList(filesArray)); + + Collections.sort(files, new Comparator() { + public int compare(File o1, File o2) { + if (o1.isDirectory() && o2.isDirectory()) { + Long obj1 = o1.lastModified(); + return val * obj1.compareTo(o2.lastModified()); + } + else if (o1.isDirectory()) { + return -1; + } else if (o2.isDirectory()) { + return 1; + } else if (o1.lastModified() == 0 || o2.lastModified() == 0){ + return 0; + } else { + Long obj1 = o1.lastModified(); + return val * obj1.compareTo(o2.lastModified()); + } + } + }); + + File[] returnArray = new File[1]; + return files.toArray(returnArray); + } + // /** // * Sorts list by Size // * @param sortAscending true: ascending, false: descending @@ -243,7 +302,7 @@ public class FileStorageUtils { * Sorts list by Name * @param files files to sort */ - public static Vector sortByName(Vector files){ + public static Vector sortOCFilesByName(Vector files){ final Integer val; if (mSortAscending){ val = 1; @@ -266,6 +325,38 @@ public class FileStorageUtils { return files; } + + /** + * Sorts list by Name + * @param filesArray files to sort + */ + public static File[] sortLocalFilesByName(File[] filesArray){ + final Integer val; + if (mSortAscending){ + val = 1; + } else { + val = -1; + } + + List files = new ArrayList(Arrays.asList(filesArray)); + + Collections.sort(files, new Comparator() { + public int compare(File o1, File o2) { + if (o1.isDirectory() && o2.isDirectory()) { + return val * o1.getPath().toLowerCase().compareTo(o2.getPath().toLowerCase()); + } else if (o1.isDirectory()) { + return -1; + } else if (o2.isDirectory()) { + return 1; + } + return val * new AlphanumComparator().compare(o1.getPath().toLowerCase(), + o2.getPath().toLowerCase()); + } + }); + + File[] returnArray = new File[1]; + return files.toArray(returnArray); + } /** * Local Folder size diff --git a/src/third_parties/daveKoeller/AlphanumComparator.java b/src/third_parties/daveKoeller/AlphanumComparator.java index e6bd6f38..d0879576 100644 --- a/src/third_parties/daveKoeller/AlphanumComparator.java +++ b/src/third_parties/daveKoeller/AlphanumComparator.java @@ -23,6 +23,7 @@ */ package third_parties.daveKoeller; +import java.io.File; import java.util.Comparator; import com.owncloud.android.datamodel.OCFile; @@ -78,11 +79,21 @@ public class AlphanumComparator implements Comparator return chunk.toString(); } - public int compare(OCFile o1, OCFile o2) - { - String s1 = (String)o1.getRemotePath().toLowerCase(); - String s2 = (String)o2.getRemotePath().toLowerCase(); + public int compare(OCFile o1, OCFile o2){ + String s1 = o1.getRemotePath().toLowerCase(); + String s2 = o2.getRemotePath().toLowerCase(); + + return compare(s1, s2); + } + + public int compare(File f1, File f2){ + String s1 = f1.getPath().toLowerCase(); + String s2 = f2.getPath().toLowerCase(); + + return compare(s1, s2); + } + public int compare(String s1, String s2) { int thisMarker = 0; int thatMarker = 0; int s1Length = s1.length();