android:orderInCategory="2"
android:showAsAction="never"
android:title="@string/actionbar_settings"/>
+ <item
+ android:id="@+id/action_sort"
+ android:orderInCategory="2"
+ android:showAsAction="never"
+ android:title="@string/actionbar_sort"/>
<!-- <item android:id="@+id/search" android:title="@string/actionbar_search" android:icon="@drawable/ic_action_search"></item> -->
<string name="actionbar_settings">Einstellungen</string>
<string name="actionbar_see_details">Details</string>
<string name="actionbar_send_file">Senden</string>
+ <string name="actionbar_sort">Sortieren</string>
+ <string name="actionbar_sort_title">Sortieren nach</string>
+ <string-array name="actionbar_sortby">
+ <item>Dateiname - aufsteigend</item>
+ <item>Dateiname - absteigend</item>
+ <item>Datum - aufsteigend</item>
+ <item>Datum - absteigend</item>
+ <item>Dateigröße - aufsteigend</item>
+ <item>Dateigröße - absteigend</item>
+ </string-array>
<string name="prefs_category_general">Allgemein</string>
<string name="prefs_category_more">Mehr</string>
<string name="prefs_accounts">Konten</string>
<string name="actionbar_settings">Settings</string>
<string name="actionbar_see_details">Details</string>
<string name="actionbar_send_file">Send</string>
+ <string name="actionbar_sort">Sort</string>
+ <string name="actionbar_sort_title">Sort by</string>
+ <string-array name="actionbar_sortby">
+ <item>Filename - ascending</item>
+ <item>Filename - descending</item>
+ <item>Date - ascending</item>
+ <item>Date - descending</item>
+ <item>Filesize - ascending</item>
+ <item>Filesize - descending</item>
+ </string-array>
<string name="prefs_category_general">General</string>
<string name="prefs_category_more">More</string>
<string name="prefs_accounts">Accounts</string>
} else if (another.isFolder()) {
return 1;
}
- return getRemotePath().toLowerCase().compareTo(another.getRemotePath().toLowerCase());
+ return new AlphanumComparator().compare(this, another);
}
@Override
}
break;
}
+ case R.id.action_sort: {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(R.string.actionbar_sort_title)
+ .setItems(R.array.actionbar_sortby, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ Log_OC.d("default view", " number " + which + "clicked");
+ switch (which){
+ case 0:
+ sortByName(true);
+ break;
+ case 1:
+ sortByName(false);
+ break;
+ case 2:
+ sortByDate(true);
+ break;
+ case 3:
+ sortByDate(false);
+ break;
+ case 4:
+ sortBySize(true);
+ break;
+ case 5:
+ sortBySize(false);
+ break;
+ }
+ }
+ });
+ builder.create();
+ builder.show();
+ break;
+ }
default:
retval = super.onOptionsItemSelected(item);
}
}
}
}
+
+ private void sortByDate(boolean ascending){
+ getListOfFilesFragment().sortByDate(ascending);
+ }
+
+ private void sortBySize(boolean ascending){
+ getListOfFilesFragment().sortBySize(ascending);
+ }
+
+ private void sortByName(boolean ascending){
+ getListOfFilesFragment().sortByName(ascending);
+ }
}
*/\r
package com.owncloud.android.ui.adapter;\r
\r
+import java.util.Collections;\r
+import java.util.Comparator;\r
import java.util.Vector;\r
\r
import android.accounts.Account;\r
private FileDataStorageManager mStorageManager;
private Account mAccount;
private ComponentsGetter mTransferServiceGetter;\r
+ public enum sortOrders { NAME, DATE, SIZE }\r
+ private sortOrders sort = sortOrders.NAME;\r
+ private boolean sortAscending = true;\r
\r
public FileListListAdapter(\r
boolean justFolders, \r
} else {\r
mFiles = null;\r
}\r
+\r
+ sortDirectory();\r
+ }\r
+ \r
+ /**\r
+ * Sorts all filenames, regarding last user decision \r
+ */\r
+ private void sortDirectory(){\r
+ switch (sort){\r
+ case NAME:\r
+ sortByName();\r
+ break;\r
+\r
+ case SIZE:\r
+ sortBySize();\r
+ break;\r
+\r
+ case DATE:\r
+ sortByDate();\r
+ break;\r
+ }\r
+\r
+ if (!sortAscending){\r
+ Collections.reverse(mFiles);\r
+ }\r
+\r
notifyDataSetChanged();\r
}\r
\r
return (mFile.getPermissions() != null && !mFile.getPermissions().contains(PERMISSION_SHARED_WITH_ME)\r
&& file.getPermissions() != null && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME));\r
}\r
+\r
+ private void sortByDate(){\r
+ Collections.sort(mFiles, new Comparator<OCFile>() {\r
+ public int compare(OCFile o1, OCFile o2) {\r
+ if (o1.isFolder() && o2.isFolder()) {\r
+ return Long.compare(o1.getModificationTimestamp(), o2.getModificationTimestamp());\r
+ }\r
+ else if (o1.isFolder()) {\r
+ return -1;\r
+ } else if (o2.isFolder()) {\r
+ return 1;\r
+ } else if (o1.getModificationTimestamp() == 0 || o2.getModificationTimestamp() == 0){\r
+ return 0;\r
+ } else {\r
+ return Long.compare(o1.getModificationTimestamp(), o2.getModificationTimestamp());\r
+ }\r
+ }\r
+ });\r
+ }\r
+\r
+ private void sortBySize(){\r
+ Collections.sort(mFiles, new Comparator<OCFile>() {\r
+ public int compare(OCFile o1, OCFile o2) {\r
+ if (o1.isFolder() && o2.isFolder()) {\r
+ return o1.getRemotePath().toLowerCase().compareTo(o2.getRemotePath().toLowerCase());\r
+ }\r
+ else if (o1.isFolder()) {\r
+ return -1;\r
+ } else if (o2.isFolder()) {\r
+ return 1;\r
+ } else if (o1.getFileLength() == 0 || o2.getFileLength() == 0){\r
+ return 0;\r
+ } else {\r
+ return Long.compare(o1.getFileLength(), o2.getFileLength());\r
+ }\r
+ }\r
+ });\r
+ }\r
+\r
+ private void sortByName(){\r
+ Collections.sort(mFiles);\r
+ }\r
+\r
+ public void setSortOrder(sortOrders order, boolean descending) {\r
+ sort = order;\r
+ sortAscending = descending;\r
+\r
+ sortDirectory();\r
+ } \r
}\r
import com.owncloud.android.ui.activity.FileDisplayActivity;
import com.owncloud.android.ui.activity.MoveActivity;
import com.owncloud.android.ui.adapter.FileListListAdapter;
+import com.owncloud.android.ui.adapter.FileListListAdapter.sortOrders;
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
import com.owncloud.android.ui.dialog.RenameFileDialogFragment;
mFile = directory;
}
}
+
+ public void sortByDate(boolean descending){
+ mAdapter.setSortOrder(sortOrders.DATE, descending);
+ }
+
+ public void sortBySize(boolean descending){
+ mAdapter.setSortOrder(sortOrders.SIZE, descending);
+ }
+ public void sortByName(boolean descending){
+ mAdapter.setSortOrder(sortOrders.NAME, descending);
+ }
}