package com.todoroo.astrid.tags.reusable; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.content.res.Resources; import android.graphics.Bitmap; import android.text.TextUtils; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.View; import android.widget.TextView; import android.widget.Toast; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; import com.timsu.astrid.R; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.astrid.actfm.TagViewFragment; import com.todoroo.astrid.activity.TaskListActivity; import com.todoroo.astrid.adapter.TaskAdapter; import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.data.RemoteModel; import com.todoroo.astrid.data.TagData; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.helper.AsyncImageView; import com.todoroo.astrid.service.StatisticsConstants; import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.service.TagDataService; import com.todoroo.astrid.tags.TagFilterExposer; import com.todoroo.astrid.tags.TagService.Tag; import com.todoroo.astrid.utility.Flags; import com.todoroo.astrid.utility.ResourceDrawableCache; public class FeaturedTaskListFragment extends TagViewFragment { @Autowired private TagDataService tagDataService; private static final int MENU_CLONE_LIST = R.string.actfm_feat_list_clone; @Override protected TaskAdapter createTaskAdapter(TodorooCursor<Task> cursor) { return new ReusableTaskAdapter(this, R.layout.reusable_task_adapter_row, cursor, sqlQueryTemplate, false, null); } @Override protected void setupQuickAddBar() { super.setupQuickAddBar(); quickAddBar.setVisibility(View.GONE); ((TextView) getView().findViewById(android.R.id.empty)).setOnClickListener(null); } @Override public void onTaskListItemClicked(long taskId, boolean editable) { // Do nothing } @Override protected int getTaskListBodyLayout() { return R.layout.task_list_body_featured_list; } @Override protected void addMenuItems(Menu menu, Activity activity) { super.addMenuItems(menu, activity); MenuItem item = menu.add(Menu.NONE, MENU_CLONE_LIST, 0, R.string.actfm_feat_list_clone); item.setIcon(R.drawable.ic_menu_list_copy); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); } @Override public boolean handleOptionsMenuItemSelected(int id, Intent intent) { if (id == MENU_CLONE_LIST) { cloneList(); return true; } return super.handleOptionsMenuItemSelected(id, intent); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // Do nothing } @Override protected void setUpMembersGallery() { // Repurposed this method to set up the description view AsyncImageView imageView = (AsyncImageView) getView().findViewById(R.id.url_image); String imageUrl = tagData.getPictureUrl(TagData.PICTURE, RemoteModel.PICTURE_MEDIUM); Bitmap bitmap = null; if (TextUtils.isEmpty(imageUrl)) bitmap = tagData.getPictureBitmap(TagData.PICTURE); if (!TextUtils.isEmpty(imageUrl) || bitmap != null) { imageView.setVisibility(View.VISIBLE); imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.default_list_0)); if (bitmap != null) imageView.setImageBitmap(bitmap); else imageView.setUrl(imageUrl); } else { imageView.setVisibility(View.GONE); } final String description = tagData.getValue(TagData.TAG_DESCRIPTION); final Resources r = getActivity().getResources(); TextView desc = (TextView) getView().findViewById(R.id.feat_list_desc); desc.setText(description); desc.setLines(4); desc.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DialogUtilities.okDialog(getActivity(), r.getString(R.string.DLG_information_title), 0, description, null); } }); } private void cloneList() { // Clone list if (taskAdapter == null || taskAdapter.getCount() == 0) { Toast.makeText(getActivity(), R.string.actfm_feat_list_clone_empty, Toast.LENGTH_LONG).show(); return; } StatisticsService.reportEvent(StatisticsConstants.FEATURED_LIST_CLONED); final String localName = tagData.getValue(TagData.NAME) + " " + getString(R.string.actfm_feat_list_suffix); //$NON-NLS-1$ TagData clone = new TagData(); TodorooCursor<TagData> existing = tagDataService.query(Query.select(TagData.PROPERTIES) .where(TagData.NAME.eqCaseInsensitive(localName))); try { if (existing.getCount() > 0) { existing.moveToFirst(); clone = new TagData(existing); } else { clone = new TagData(); clone.setValue(TagData.NAME, localName); tagDataService.save(clone); } } finally { existing.close(); } final ProgressDialog pd = DialogUtilities.progressDialog(getActivity(), getString(R.string.actfm_feat_list_cloning)); final TagData finalTagData = clone; new Thread(new Runnable() { @Override public void run() { final TodorooCursor<Task> tasks = taskService.fetchFiltered(taskAdapter.getQuery(), null, Task.PROPERTIES); try { Task t = new Task(); for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) { t.readFromCursor(tasks); taskService.cloneReusableTask(t, localName, finalTagData.getValue(TagData.UUID)); } final Activity activity = getActivity(); if (activity != null) { DialogUtilities.dismissDialog(activity, pd); DialogUtilities.okDialog(activity, getString(R.string.actfm_feat_list_clone_success), null); } Flags.set(Flags.REFRESH); if (activity instanceof TaskListActivity) { activity.runOnUiThread(new Runnable() { @Override public void run() { TaskListActivity tla = (TaskListActivity) activity; tla.setFilterMode(TaskListActivity.FILTER_MODE_NORMAL); Filter clonedFilter; Tag tag = new Tag(finalTagData); clonedFilter = TagFilterExposer.filterFromTag(activity, tag, TaskCriteria.activeAndVisible()); tla.onFilterItemClicked(clonedFilter); } }); } } finally { tasks.close(); } } }).start(); } @Override protected void refresh() { loadTaskListContent(true); ((TextView)taskListView.findViewById(android.R.id.empty)).setText(R.string.TLA_no_items); setUpMembersGallery(); } }