Skip to content

Commit decb99d

Browse files
committed
[Saved Projects] Implemented Sort
1 parent 80f5238 commit decb99d

File tree

5 files changed

+113
-18
lines changed

5 files changed

+113
-18
lines changed

source-code/app/src/main/java/org/buildmlearn/toolkit/adapter/SavedProjectAdapter.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@
77
import android.widget.BaseAdapter;
88

99
import org.buildmlearn.toolkit.R;
10+
import org.buildmlearn.toolkit.fragment.LoadProjectFragment;
1011
import org.buildmlearn.toolkit.model.SavedProject;
1112
import org.buildmlearn.toolkit.views.TextViewPlus;
1213

1314
import java.util.ArrayList;
15+
import java.util.Collections;
16+
import java.util.Comparator;
1417
import java.util.Locale;
1518

1619
/**
@@ -22,6 +25,7 @@ public class SavedProjectAdapter extends BaseAdapter {
2225

2326
private Context mContext;
2427
private ArrayList<SavedProject> data;
28+
private int sortType;
2529

2630
public SavedProjectAdapter(Context mContext, ArrayList<SavedProject> data) {
2731
this.mContext = mContext;
@@ -78,6 +82,44 @@ public View getView(int position, View convertView, ViewGroup parent) {
7882
return convertView;
7983
}
8084

85+
public void setSortType(int sortType) {
86+
this.sortType = sortType;
87+
}
88+
89+
public int getSortType() {
90+
return sortType;
91+
}
92+
93+
public void sort() {
94+
Comparator<SavedProject> comparator = null;
95+
switch (sortType) {
96+
case LoadProjectFragment.SORT_TYPE_MODIFIED :
97+
comparator = new Comparator<SavedProject>() {
98+
public int compare(SavedProject f1, SavedProject f2) {
99+
//f1 Modified later than f2
100+
return Long.valueOf(f2.getFile().lastModified()).compareTo(f1.getFile().lastModified());
101+
}
102+
};
103+
break;
104+
case LoadProjectFragment.SORT_TYPE_NAME :
105+
comparator = new Comparator<SavedProject>() {
106+
public int compare(SavedProject f1, SavedProject f2) {
107+
return f1.getName().compareToIgnoreCase(f2.getName());
108+
}
109+
};
110+
break;
111+
case LoadProjectFragment.SORT_TYPE_AUTHOR :
112+
comparator = new Comparator<SavedProject>() {
113+
public int compare(SavedProject f1, SavedProject f2) {
114+
return f1.getAuthor().compareToIgnoreCase(f2.getAuthor());
115+
}
116+
};
117+
break;
118+
119+
}
120+
Collections.sort(data, comparator);
121+
}
122+
81123
public class ProjectHolder {
82124
TextViewPlus projectName;
83125
TextViewPlus projectIcon;

source-code/app/src/main/java/org/buildmlearn/toolkit/fragment/LoadProjectFragment.java

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import android.app.Activity;
44
import android.app.Fragment;
55
import android.content.Intent;
6+
import android.content.SharedPreferences;
67
import android.content.res.ColorStateList;
78
import android.graphics.drawable.ColorDrawable;
89
import android.os.Build;
910
import android.os.Bundle;
11+
import android.preference.PreferenceManager;
1012
import android.support.v7.app.AppCompatActivity;
1113
import android.util.Log;
1214
import android.view.LayoutInflater;
@@ -58,6 +60,12 @@ public class LoadProjectFragment extends Fragment implements AbsListView.OnItemC
5860
private ArrayList<SavedProject> savedProjects;
5961
private View selectedView = null;
6062

63+
private SharedPreferences prefs;
64+
private static final String PREF_SORT = "sortType";
65+
public static final int SORT_TYPE_MODIFIED = 0;
66+
public static final int SORT_TYPE_NAME = 1;
67+
public static final int SORT_TYPE_AUTHOR = 2;
68+
6169
private int selectedPosition = -1;
6270

6371
/**
@@ -70,6 +78,7 @@ public void onCreate(Bundle savedInstanceState) {
7078
mToolkit = (ToolkitApplication) getActivity().getApplicationContext();
7179
activity = getActivity();
7280
savedProjects = new ArrayList<>();
81+
prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
7382

7483
String path = mToolkit.getSavedDir();
7584
Log.d("Files", "Path: " + path);
@@ -105,13 +114,6 @@ public void onCreate(Bundle savedInstanceState) {
105114
}
106115
}
107116

108-
Collections.sort(savedProjects, new Comparator<SavedProject>() {
109-
public int compare(SavedProject f1, SavedProject f2) {
110-
return Long.valueOf(f1.getFile().lastModified()).compareTo(f2.getFile().lastModified());
111-
}
112-
});
113-
114-
Collections.reverse(savedProjects);
115117
}
116118

117119
/**
@@ -131,7 +133,11 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
131133
public void onViewCreated(View view, Bundle savedInstanceState) {
132134
mAdapter = new SavedProjectAdapter(getActivity(), savedProjects);
133135
mListView = (AbsListView) view.findViewById(android.R.id.list);
136+
mAdapter.setSortType(prefs.getInt(PREF_SORT, SORT_TYPE_MODIFIED));
137+
mAdapter.sort();
134138
setAdapter(mAdapter);
139+
140+
135141
mListView.setOnItemClickListener(this);
136142
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
137143
@Override
@@ -230,13 +236,7 @@ public void onResume() {
230236
}
231237
}
232238

233-
Collections.sort(savedProjects, new Comparator<SavedProject>() {
234-
public int compare(SavedProject f1, SavedProject f2) {
235-
return Long.valueOf(f1.getFile().lastModified()).compareTo(f2.getFile().lastModified());
236-
}
237-
});
238-
239-
Collections.reverse(savedProjects);
239+
mAdapter.sort();
240240
mAdapter.notifyDataSetChanged();
241241
}
242242
super.onResume();
@@ -291,8 +291,11 @@ public void changeColorScheme() {
291291
@Override
292292
public void onPrepareOptionsMenu(Menu menu) {
293293
super.onPrepareOptionsMenu(menu);
294+
menu.clear();
294295
if (showTemplateSelectedMenu) {
295296
activity.getMenuInflater().inflate(R.menu.menu_project_selected, menu);
297+
} else {
298+
activity.getMenuInflater().inflate(R.menu.menu_project, menu);
296299
}
297300
}
298301

@@ -306,22 +309,43 @@ public boolean onOptionsItemSelected(MenuItem item) {
306309
switch (id) {
307310
case R.id.action_delete:
308311

309-
final MaterialDialog dialog = new MaterialDialog.Builder(activity)
312+
final MaterialDialog dialogDelete = new MaterialDialog.Builder(activity)
310313
.title(R.string.dialog_delete_title)
311314
.content(R.string.dialog_delete_msg)
312315
.positiveText(R.string.dialog_yes)
313316
.negativeText(R.string.dialog_no)
314317
.build();
315318

316-
dialog.getActionButton(DialogAction.POSITIVE).setOnClickListener(new View.OnClickListener() {
319+
dialogDelete.getActionButton(DialogAction.POSITIVE).setOnClickListener(new View.OnClickListener() {
317320
@Override
318321
public void onClick(View v) {
319-
dialog.dismiss();
322+
dialogDelete.dismiss();
320323
deleteItem(selectedPosition);
321324
restoreSelectedView();
322325
}
323326
});
324-
dialog.show();
327+
dialogDelete.show();
328+
break;
329+
case R.id.action_sort:
330+
331+
final MaterialDialog dialogSort = new MaterialDialog.Builder(activity)
332+
.title(R.string.dialog_sort_title)
333+
.items(R.array.project_sort)
334+
.itemsCallbackSingleChoice(mAdapter.getSortType(), new MaterialDialog.ListCallbackSingleChoice() {
335+
@Override
336+
public boolean onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {
337+
mAdapter.setSortType(which);
338+
SharedPreferences.Editor editor = prefs.edit();
339+
editor.putInt(PREF_SORT, which);
340+
editor.commit();
341+
mAdapter.sort();
342+
mAdapter.notifyDataSetChanged();
343+
return true;
344+
}
345+
})
346+
.build();
347+
348+
dialogSort.show();
325349
break;
326350
}
327351
return super.onOptionsItemSelected(item);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<menu xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools"
5+
tools:context="org.buildmlearn.toolkit.activity.TemplateEditor">
6+
7+
<item
8+
android:id="@+id/action_sort"
9+
android:orderInCategory="2"
10+
android:title="@string/menu_project_sort"
11+
app:showAsAction="never" />
12+
13+
</menu>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
<integer-array name="project_sort">
4+
<item>@string/dialog_sort_modified</item>
5+
<item>@string/dialog_sort_name</item>
6+
<item>@string/dialog_sort_author</item>
7+
</integer-array>
8+
</resources>

source-code/app/src/main/res/values/strings.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,19 @@
132132

133133
<!-- Menu Strings-->
134134

135+
<string name="menu_project_sort">Sort</string>
135136
<string name="menu_save_template">Save Template</string>
136137
<string name="menu_simulate">Simulate</string>
137138
<string name="menu_delete_template_item">Delete</string>
138139
<string name="menu_edit_template_item">Edit</string>
139140

141+
<!-- Dialog Sort -->
142+
143+
<string name="dialog_sort_title">Sort By</string>
144+
<string name="dialog_sort_modified">Last Modified Time</string>
145+
<string name="dialog_sort_name">Project Name</string>
146+
<string name="dialog_sort_author">Author Name</string>
147+
140148
<!-- Bottom Sheet-->
141149
<string name="bottom_sheet_share_apk">Share APK</string>
142150
<string name="bottom_sheet_publish"> Publish to BuildmLearn Store</string>

0 commit comments

Comments
 (0)