Skip to content

Commit bf100ed

Browse files
committed
Merge branch 'filter' of git://github.com/scopeInfinity/BuildmLearn-Toolkit-Android into scopeInfinity-filter
2 parents a048da0 + decb99d commit bf100ed

File tree

5 files changed

+119
-21
lines changed

5 files changed

+119
-21
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
/**
@@ -23,6 +26,7 @@ public class SavedProjectAdapter extends BaseAdapter {
2326
private final Context mContext;
2427
private final ArrayList<SavedProject> data;
2528
private int selectedPosition;
29+
private int sortType;
2630

2731
public SavedProjectAdapter(Context mContext, ArrayList<SavedProject> data) {
2832
this.mContext = mContext;
@@ -95,6 +99,44 @@ public View getView(int position, View convertView, ViewGroup parent) {
9599
return convertView;
96100
}
97101

102+
public void setSortType(int sortType) {
103+
this.sortType = sortType;
104+
}
105+
106+
public int getSortType() {
107+
return sortType;
108+
}
109+
110+
public void sort() {
111+
Comparator<SavedProject> comparator = null;
112+
switch (sortType) {
113+
case LoadProjectFragment.SORT_TYPE_MODIFIED :
114+
comparator = new Comparator<SavedProject>() {
115+
public int compare(SavedProject f1, SavedProject f2) {
116+
//f1 Modified later than f2
117+
return Long.valueOf(f2.getFile().lastModified()).compareTo(f1.getFile().lastModified());
118+
}
119+
};
120+
break;
121+
case LoadProjectFragment.SORT_TYPE_NAME :
122+
comparator = new Comparator<SavedProject>() {
123+
public int compare(SavedProject f1, SavedProject f2) {
124+
return f1.getName().compareToIgnoreCase(f2.getName());
125+
}
126+
};
127+
break;
128+
case LoadProjectFragment.SORT_TYPE_AUTHOR :
129+
comparator = new Comparator<SavedProject>() {
130+
public int compare(SavedProject f1, SavedProject f2) {
131+
return f1.getAuthor().compareToIgnoreCase(f2.getAuthor());
132+
}
133+
};
134+
break;
135+
136+
}
137+
Collections.sort(data, comparator);
138+
}
139+
98140
public class ProjectHolder {
99141
public TextViewPlus projectName;
100142
public TextViewPlus projectIcon;

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

Lines changed: 48 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
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;
1011
import android.support.v4.content.ContextCompat;
12+
import android.preference.PreferenceManager;
1113
import android.support.v7.app.AppCompatActivity;
1214
import android.util.Log;
1315
import android.view.LayoutInflater;
@@ -60,6 +62,14 @@ public class LoadProjectFragment extends Fragment implements AbsListView.OnItemC
6062
private ArrayList<SavedProject> savedProjects;
6163
private View selectedView = null;
6264

65+
private SharedPreferences prefs;
66+
private static final String PREF_SORT = "sortType";
67+
public static final int SORT_TYPE_MODIFIED = 0;
68+
public static final int SORT_TYPE_NAME = 1;
69+
public static final int SORT_TYPE_AUTHOR = 2;
70+
71+
private int selectedPosition = -1;
72+
6373
/**
6474
* {@inheritDoc}
6575
*/
@@ -70,6 +80,7 @@ public void onCreate(Bundle savedInstanceState) {
7080
mToolkit = (ToolkitApplication) getActivity().getApplicationContext();
7181
activity = getActivity();
7282
savedProjects = new ArrayList<>();
83+
prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
7384

7485
String path = mToolkit.getSavedDir();
7586
Log.d("Files", "Path: " + path);
@@ -99,13 +110,6 @@ public void onCreate(Bundle savedInstanceState) {
99110
}
100111
}
101112

102-
Collections.sort(savedProjects, new Comparator<SavedProject>() {
103-
public int compare(SavedProject f1, SavedProject f2) {
104-
return Long.valueOf(f1.getFile().lastModified()).compareTo(f2.getFile().lastModified());
105-
}
106-
});
107-
108-
Collections.reverse(savedProjects);
109113
}
110114

111115
/**
@@ -124,7 +128,11 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
124128
public void onViewCreated(View view, Bundle savedInstanceState) {
125129
mAdapter = new SavedProjectAdapter(getActivity(), savedProjects);
126130
mListView = (AbsListView) view.findViewById(android.R.id.list);
131+
mAdapter.setSortType(prefs.getInt(PREF_SORT, SORT_TYPE_MODIFIED));
132+
mAdapter.sort();
127133
setAdapter(mAdapter);
134+
135+
128136
mListView.setOnItemClickListener(this);
129137
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
130138
@Override
@@ -217,13 +225,7 @@ public void onResume() {
217225
}
218226
}
219227

220-
Collections.sort(savedProjects, new Comparator<SavedProject>() {
221-
public int compare(SavedProject f1, SavedProject f2) {
222-
return Long.valueOf(f1.getFile().lastModified()).compareTo(f2.getFile().lastModified());
223-
}
224-
});
225-
226-
Collections.reverse(savedProjects);
228+
mAdapter.sort();
227229
mAdapter.notifyDataSetChanged();
228230
}
229231
super.onResume();
@@ -276,10 +278,14 @@ private void changeColorScheme() {
276278
* {@inheritDoc}
277279
*/
278280
@Override
279-
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
280-
super.onCreateOptionsMenu(menu, inflater);
281+
282+
public void onPrepareOptionsMenu(Menu menu) {
283+
super.onPrepareOptionsMenu(menu);
284+
menu.clear();
281285
if (showTemplateSelectedMenu) {
282286
activity.getMenuInflater().inflate(R.menu.menu_project_selected, menu);
287+
} else {
288+
activity.getMenuInflater().inflate(R.menu.menu_project, menu);
283289
}
284290
}
285291

@@ -293,22 +299,43 @@ public boolean onOptionsItemSelected(MenuItem item) {
293299
switch (id) {
294300
case R.id.action_delete:
295301

296-
final MaterialDialog dialog = new MaterialDialog.Builder(activity)
302+
final MaterialDialog dialogDelete = new MaterialDialog.Builder(activity)
297303
.title(R.string.dialog_delete_title)
298304
.content(R.string.dialog_delete_msg)
299305
.positiveText(R.string.dialog_yes)
300306
.negativeText(R.string.dialog_no)
301307
.build();
302308

303-
dialog.getActionButton(DialogAction.POSITIVE).setOnClickListener(new View.OnClickListener() {
309+
dialogDelete.getActionButton(DialogAction.POSITIVE).setOnClickListener(new View.OnClickListener() {
304310
@Override
305311
public void onClick(View v) {
306-
dialog.dismiss();
307-
deleteItem(mAdapter.getSelectedPosition());
312+
dialogDelete.dismiss();
313+
deleteItem(selectedPosition);
308314
restoreSelectedView();
309315
}
310316
});
311-
dialog.show();
317+
dialogDelete.show();
318+
break;
319+
case R.id.action_sort:
320+
321+
final MaterialDialog dialogSort = new MaterialDialog.Builder(activity)
322+
.title(R.string.dialog_sort_title)
323+
.items(R.array.project_sort)
324+
.itemsCallbackSingleChoice(mAdapter.getSortType(), new MaterialDialog.ListCallbackSingleChoice() {
325+
@Override
326+
public boolean onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {
327+
mAdapter.setSortType(which);
328+
SharedPreferences.Editor editor = prefs.edit();
329+
editor.putInt(PREF_SORT, which);
330+
editor.commit();
331+
mAdapter.sort();
332+
mAdapter.notifyDataSetChanged();
333+
return true;
334+
}
335+
})
336+
.build();
337+
338+
dialogSort.show();
312339
break;
313340
default: //do nothing
314341
break;
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
@@ -174,12 +174,20 @@
174174

175175
<!-- Menu Strings-->
176176

177+
<string name="menu_project_sort">Sort</string>
177178
<string name="menu_save_template">Save Template</string>
178179
<string name="menu_simulate">Simulate</string>
179180
<string name="menu_delete_template_item">Delete</string>
180181
<string name="menu_delete_all_template_items">Delete All</string>
181182
<string name="menu_edit_template_item">Edit</string>
182183

184+
<!-- Dialog Sort -->
185+
186+
<string name="dialog_sort_title">Sort By</string>
187+
<string name="dialog_sort_modified">Last Modified Time</string>
188+
<string name="dialog_sort_name">Project Name</string>
189+
<string name="dialog_sort_author">Author Name</string>
190+
183191
<!-- Bottom Sheet-->
184192
<string name="bottom_sheet_share_apk">Share APK</string>
185193
<string name="bottom_sheet_save_apk">Save APK</string>

0 commit comments

Comments
 (0)