|
1 | 1 | package org.buildmlearn.toolkit.fragment; |
2 | 2 |
|
| 3 | +import android.app.Activity; |
3 | 4 | import android.app.Fragment; |
4 | 5 | import android.content.Intent; |
| 6 | +import android.content.res.ColorStateList; |
| 7 | +import android.graphics.drawable.ColorDrawable; |
| 8 | +import android.os.Build; |
5 | 9 | import android.os.Bundle; |
| 10 | +import android.support.v7.app.AppCompatActivity; |
6 | 11 | import android.util.Log; |
7 | 12 | import android.view.LayoutInflater; |
| 13 | +import android.view.Menu; |
| 14 | +import android.view.MenuItem; |
8 | 15 | import android.view.View; |
9 | 16 | import android.view.ViewGroup; |
10 | 17 | import android.widget.AbsListView; |
11 | 18 | import android.widget.AdapterView; |
12 | 19 | import android.widget.Toast; |
13 | 20 |
|
| 21 | +import com.afollestad.materialdialogs.DialogAction; |
| 22 | +import com.afollestad.materialdialogs.MaterialDialog; |
| 23 | +import com.afollestad.materialdialogs.internal.ThemeSingleton; |
| 24 | + |
14 | 25 | import org.buildmlearn.toolkit.R; |
15 | 26 | import org.buildmlearn.toolkit.ToolkitApplication; |
16 | 27 | import org.buildmlearn.toolkit.activity.TemplateEditor; |
@@ -40,18 +51,24 @@ public class LoadProjectFragment extends Fragment implements AbsListView.OnItemC |
40 | 51 | private static final String TAG = "Load Project Fragment"; |
41 | 52 | private AbsListView mListView; |
42 | 53 |
|
| 54 | + private boolean showTemplateSelectedMenu; |
43 | 55 | private SavedProjectAdapter mAdapter; |
44 | 56 | private ToolkitApplication mToolkit; |
| 57 | + private Activity activity; |
45 | 58 | private ArrayList<SavedProject> savedProjects; |
| 59 | + private View selectedView = null; |
| 60 | + |
| 61 | + private int selectedPosition = -1; |
46 | 62 |
|
47 | 63 | /** |
48 | 64 | * {@inheritDoc} |
49 | 65 | */ |
50 | 66 | @Override |
51 | 67 | public void onCreate(Bundle savedInstanceState) { |
52 | 68 | super.onCreate(savedInstanceState); |
53 | | - |
| 69 | + setHasOptionsMenu(true); |
54 | 70 | mToolkit = (ToolkitApplication) getActivity().getApplicationContext(); |
| 71 | + activity = getActivity(); |
55 | 72 | savedProjects = new ArrayList<>(); |
56 | 73 |
|
57 | 74 | String path = mToolkit.getSavedDir(); |
@@ -116,6 +133,26 @@ public void onViewCreated(View view, Bundle savedInstanceState) { |
116 | 133 | mListView = (AbsListView) view.findViewById(android.R.id.list); |
117 | 134 | setAdapter(mAdapter); |
118 | 135 | 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 | + }); |
119 | 156 | } |
120 | 157 |
|
121 | 158 | /** |
@@ -204,4 +241,116 @@ public int compare(SavedProject f1, SavedProject f2) { |
204 | 241 | } |
205 | 242 | super.onResume(); |
206 | 243 | } |
| 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 | + } |
207 | 356 | } |
0 commit comments