/**
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.gtasks;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import com.actionbarsherlock.view.Menu;
import com.timsu.astrid.R;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.TodorooCursor;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.dao.StoreObjectDao;
import com.todoroo.astrid.data.StoreObject;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.ProgressBarSyncResultCallback;
import com.todoroo.astrid.service.SyncV2Service;
import com.todoroo.astrid.service.ThemeService;
import com.todoroo.astrid.subtasks.OrderedListFragmentHelperInterface;
import com.todoroo.astrid.subtasks.OrderedMetadataListFragmentHelper;
import com.todoroo.astrid.subtasks.SubtasksListFragment;
public class GtasksListFragment extends SubtasksListFragment {
protected static final int MENU_CLEAR_COMPLETED_ID = MENU_ADDON_INTENT_ID + 1;
public static final String TOKEN_STORE_ID = "storeId"; //$NON-NLS-1$
protected static final int MENU_REFRESH_ID = MENU_SUPPORT_ID + 1;
@Autowired private StoreObjectDao storeObjectDao;
@Autowired private GtasksTaskListUpdater gtasksTaskListUpdater;
@Autowired private GtasksMetadataService gtasksMetadataService;
@Autowired private GtasksPreferenceService gtasksPreferenceService;
@Autowired private SyncV2Service syncService;
private StoreObject list;
private static final Property<?>[] LIST_PROPERTIES = new Property<?>[] {
StoreObject.ID,
StoreObject.TYPE,
GtasksList.REMOTE_ID,
GtasksList.ORDER,
GtasksList.NAME,
GtasksList.LAST_SYNC
};
@Override
protected OrderedListFragmentHelperInterface<?> createFragmentHelper() {
return new OrderedMetadataListFragmentHelper<StoreObject>(this, gtasksTaskListUpdater);
}
@Override
protected boolean allowResorting() {
return false;
}
@Override
public void onActivityCreated(Bundle icicle) {
super.onActivityCreated(icicle);
long storeObjectId = extras.getLong(TOKEN_STORE_ID, 0);
list = storeObjectDao.fetch(storeObjectId, LIST_PROPERTIES);
((OrderedMetadataListFragmentHelper<StoreObject>)helper).setList(list);
}
@Override
protected void initiateAutomaticSyncImpl() {
if (!isCurrentTaskListFragment())
return;
if (list != null && DateUtilities.now() - list.getValue(GtasksList.LAST_SYNC) > DateUtilities.ONE_MINUTE * 10) {
refreshData(false);
}
}
private void refreshData(final boolean manual) {
((TextView)getView().findViewById(android.R.id.empty)).setText(R.string.DLG_loading);
syncService.synchronizeList(list, manual, new ProgressBarSyncResultCallback(getActivity(), this,
R.id.progressBar, new Runnable() {
@Override
public void run() {
if (manual)
ContextManager.getContext().sendBroadcast(new Intent(AstridApiConstants.BROADCAST_EVENT_REFRESH));
else
refresh();
((TextView)getView().findViewById(android.R.id.empty)).setText(R.string.TLA_no_items);
}
}));
}
@Override
protected void onTaskDelete(Task task) {
helper.onDeleteTask(task);
}
@Override
protected void addMenuItems(Menu menu, Activity activity) {
super.addMenuItems(menu, activity);
addMenuItem(menu, R.string.gtasks_GTA_clear_completed, android.R.drawable.ic_input_delete, MENU_CLEAR_COMPLETED_ID, false);
}
@Override
public boolean handleOptionsMenuItemSelected(int id, Intent intent) {
// handle my own menus
switch (id) {
case MENU_REFRESH_ID:
refreshData(true);
return true;
case MENU_CLEAR_COMPLETED_ID:
clearCompletedTasks();
return true;
}
return super.handleOptionsMenuItemSelected(id, intent);
}
private void clearCompletedTasks() {
final ProgressDialog pd = new ProgressDialog(getActivity());
final TodorooCursor<Task> tasks = taskService.fetchFiltered(filter.getSqlQuery(),
null, Task.ID, Task.COMPLETION_DATE);
pd.setMessage(this.getString(R.string.gtasks_GTA_clearing));
pd.show();
new Thread() {
@Override
public void run() {
String listId = null;
try {
for (tasks.moveToFirst(); !tasks.isAfterLast(); tasks.moveToNext()) {
Task t = new Task(tasks);
if (t.isCompleted()) {
if (listId == null) {
listId = gtasksMetadataService.getTaskMetadata(
t.getId()).getValue(GtasksMetadata.LIST_ID);
}
t.setValue(Task.DELETION_DATE, DateUtilities.now());
taskService.save(t);
}
}
} finally {
tasks.close();
DialogUtilities.dismissDialog(getActivity(), pd);
}
if (listId != null) {
gtasksTaskListUpdater.correctMetadataForList(listId);
}
Activity activity = getActivity();
if (activity != null) {
activity.runOnUiThread(new Runnable() {
public void run() {
loadTaskListContent(true);
}
});
}
}
}.start();
}
@Override
public Property<?>[] taskProperties() {
return helper.taskProperties();
}
@Override
protected void addSyncRefreshMenuItem(Menu menu, int themeFlags) {
if(gtasksPreferenceService.isLoggedIn()) {
addMenuItem(menu, R.string.actfm_TVA_menu_refresh,
ThemeService.getDrawable(R.drawable.icn_menu_refresh, themeFlags), MENU_REFRESH_ID, true);
} else {
super.addSyncRefreshMenuItem(menu, themeFlags);
}
}
}