Skip to content

Commit 64f2099

Browse files
committed
Merge pull request #59 from opticod/patch6
Added Project Deletion Feature
2 parents f3b54ce + bed3ed2 commit 64f2099

3 files changed

Lines changed: 162 additions & 3 deletions

File tree

source-code/app/src/main/java/org/buildmlearn/toolkit/activity/TemplateActivity.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import android.support.v7.app.ActionBar;
66
import android.support.v7.app.AppCompatActivity;
77
import android.support.v7.widget.Toolbar;
8-
import android.view.Menu;
9-
import android.view.MenuItem;
108
import android.view.View;
119
import android.widget.AbsListView;
1210
import android.widget.AdapterView;

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

Lines changed: 150 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
package org.buildmlearn.toolkit.fragment;
22

3+
import android.app.Activity;
34
import android.app.Fragment;
45
import android.content.Intent;
6+
import android.content.res.ColorStateList;
7+
import android.graphics.drawable.ColorDrawable;
8+
import android.os.Build;
59
import android.os.Bundle;
10+
import android.support.v7.app.AppCompatActivity;
611
import android.util.Log;
712
import android.view.LayoutInflater;
13+
import android.view.Menu;
14+
import android.view.MenuItem;
815
import android.view.View;
916
import android.view.ViewGroup;
1017
import android.widget.AbsListView;
1118
import android.widget.AdapterView;
1219
import android.widget.Toast;
1320

21+
import com.afollestad.materialdialogs.DialogAction;
22+
import com.afollestad.materialdialogs.MaterialDialog;
23+
import com.afollestad.materialdialogs.internal.ThemeSingleton;
24+
1425
import org.buildmlearn.toolkit.R;
1526
import org.buildmlearn.toolkit.ToolkitApplication;
1627
import org.buildmlearn.toolkit.activity.TemplateEditor;
@@ -40,18 +51,24 @@ public class LoadProjectFragment extends Fragment implements AbsListView.OnItemC
4051
private static final String TAG = "Load Project Fragment";
4152
private AbsListView mListView;
4253

54+
private boolean showTemplateSelectedMenu;
4355
private SavedProjectAdapter mAdapter;
4456
private ToolkitApplication mToolkit;
57+
private Activity activity;
4558
private ArrayList<SavedProject> savedProjects;
59+
private View selectedView = null;
60+
61+
private int selectedPosition = -1;
4662

4763
/**
4864
* {@inheritDoc}
4965
*/
5066
@Override
5167
public void onCreate(Bundle savedInstanceState) {
5268
super.onCreate(savedInstanceState);
53-
69+
setHasOptionsMenu(true);
5470
mToolkit = (ToolkitApplication) getActivity().getApplicationContext();
71+
activity = getActivity();
5572
savedProjects = new ArrayList<>();
5673

5774
String path = mToolkit.getSavedDir();
@@ -116,6 +133,26 @@ public void onViewCreated(View view, Bundle savedInstanceState) {
116133
mListView = (AbsListView) view.findViewById(android.R.id.list);
117134
setAdapter(mAdapter);
118135
mListView.setOnItemClickListener(this);
136+
mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
137+
@Override
138+
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
139+
if (selectedPosition == position) {
140+
selectedPosition = -1;
141+
view.setBackgroundResource(0);
142+
restoreColorScheme();
143+
} else {
144+
if (selectedView != null) {
145+
selectedView.setBackgroundResource(0);
146+
}
147+
selectedView = view;
148+
selectedPosition = position;
149+
Log.d(TAG, "Position: " + selectedPosition);
150+
view.setBackgroundColor(getResources().getColor(R.color.color_divider));
151+
changeColorScheme();
152+
}
153+
return true;
154+
}
155+
});
119156
}
120157

121158
/**
@@ -204,4 +241,116 @@ public int compare(SavedProject f1, SavedProject f2) {
204241
}
205242
super.onResume();
206243
}
244+
245+
/**
246+
* @brief Restores the color scheme when switching from edit mode to normal mode.
247+
* <p/>
248+
* Edit mode is triggered, when the list item is long pressed.
249+
*/
250+
public void restoreColorScheme() {
251+
int primaryColor = getResources().getColor(R.color.color_primary);
252+
int primaryColorDark = getResources().getColor(R.color.color_primary_dark);
253+
((AppCompatActivity) activity).getSupportActionBar().setBackgroundDrawable(new ColorDrawable(primaryColor));
254+
ThemeSingleton.get().positiveColor = ColorStateList.valueOf(primaryColor);
255+
ThemeSingleton.get().neutralColor = ColorStateList.valueOf(primaryColor);
256+
ThemeSingleton.get().negativeColor = ColorStateList.valueOf(primaryColor);
257+
ThemeSingleton.get().widgetColor = primaryColor;
258+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
259+
activity.getWindow().setStatusBarColor(primaryColorDark);
260+
activity.getWindow().setNavigationBarColor(primaryColor);
261+
}
262+
showTemplateSelectedMenu = false;
263+
activity.invalidateOptionsMenu();
264+
}
265+
266+
/**
267+
* @brief Changes the color scheme when switching from normal mode to edit mode.
268+
* <p/>
269+
* Edit mode is triggered, when the list item is long pressed.
270+
*/
271+
public void changeColorScheme() {
272+
int primaryColor = getResources().getColor(R.color.color_primary_dark);
273+
int primaryColorDark = getResources().getColor(R.color.color_selected_dark);
274+
((AppCompatActivity) activity).getSupportActionBar().setBackgroundDrawable(new ColorDrawable(primaryColor));
275+
ThemeSingleton.get().positiveColor = ColorStateList.valueOf(primaryColor);
276+
ThemeSingleton.get().neutralColor = ColorStateList.valueOf(primaryColor);
277+
ThemeSingleton.get().negativeColor = ColorStateList.valueOf(primaryColor);
278+
ThemeSingleton.get().widgetColor = primaryColor;
279+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
280+
activity.getWindow().setStatusBarColor(primaryColorDark);
281+
activity.getWindow().setNavigationBarColor(primaryColor);
282+
}
283+
284+
showTemplateSelectedMenu = true;
285+
activity.invalidateOptionsMenu();
286+
}
287+
288+
/**
289+
* {@inheritDoc}
290+
*/
291+
@Override
292+
public void onPrepareOptionsMenu(Menu menu) {
293+
super.onPrepareOptionsMenu(menu);
294+
if (showTemplateSelectedMenu) {
295+
activity.getMenuInflater().inflate(R.menu.menu_project_selected, menu);
296+
}
297+
}
298+
299+
/**
300+
* {@inheritDoc}
301+
*/
302+
@Override
303+
public boolean onOptionsItemSelected(MenuItem item) {
304+
int id = item.getItemId();
305+
306+
switch (id) {
307+
case R.id.action_delete:
308+
309+
final MaterialDialog dialog = new MaterialDialog.Builder(activity)
310+
.title(R.string.dialog_delete_title)
311+
.content(R.string.dialog_delete_msg)
312+
.positiveText(R.string.dialog_yes)
313+
.negativeText(R.string.dialog_no)
314+
.build();
315+
316+
dialog.getActionButton(DialogAction.POSITIVE).setOnClickListener(new View.OnClickListener() {
317+
@Override
318+
public void onClick(View v) {
319+
dialog.dismiss();
320+
deleteItem(selectedPosition);
321+
restoreSelectedView();
322+
}
323+
});
324+
dialog.show();
325+
break;
326+
}
327+
return super.onOptionsItemSelected(item);
328+
}
329+
330+
/**
331+
* @brief Removes selected project item
332+
*/
333+
private void deleteItem(int selectedPosition) {
334+
SavedProject project = savedProjects.get(selectedPosition);
335+
File file = new File(project.getFile().getPath());
336+
boolean deleted = file.delete();
337+
if (deleted) {
338+
savedProjects.remove(selectedPosition);
339+
mAdapter.notifyDataSetChanged();
340+
setEmptyText();
341+
Toast.makeText(activity, "Project Successfully Deleted!", Toast.LENGTH_SHORT).show();
342+
} else {
343+
Toast.makeText(activity, "Project Deletion Failed!", Toast.LENGTH_SHORT).show();
344+
}
345+
}
346+
347+
/**
348+
* @brief Removes selected color from the selected ListView item when switching from edit mode to normal mode
349+
*/
350+
public void restoreSelectedView() {
351+
if (selectedView != null) {
352+
selectedView.setBackgroundResource(0);
353+
}
354+
restoreColorScheme();
355+
}
207356
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<menu xmlns:android="http://schemas.android.com/apk/res/android"
2+
xmlns:app="http://schemas.android.com/apk/res-auto"
3+
xmlns:tools="http://schemas.android.com/tools"
4+
tools:context="org.buildmlearn.toolkit.fragment.LoadProjectFragment">
5+
<item
6+
android:id="@+id/action_delete"
7+
android:icon="@drawable/menu_delete_template_item"
8+
android:orderInCategory="2"
9+
android:title="@string/menu_delete_template_item"
10+
app:showAsAction="ifRoom" />
11+
12+
</menu>

0 commit comments

Comments
 (0)