2
* See the file "LICENSE" for the full license governing this code.
4
package com.todoroo.astrid.actfm;
6
import java.util.concurrent.atomic.AtomicReference;
8
import android.app.ListActivity;
9
import android.content.Intent;
10
import android.database.Cursor;
11
import android.os.Bundle;
12
import android.view.Menu;
13
import android.view.MenuItem;
14
import android.view.View;
15
import android.view.View.OnClickListener;
16
import android.view.Window;
17
import android.widget.AdapterView;
18
import android.widget.AdapterView.OnItemClickListener;
19
import android.widget.ImageButton;
20
import android.widget.ImageView;
22
import com.timsu.astrid.R;
23
import com.todoroo.andlib.data.TodorooCursor;
24
import com.todoroo.andlib.service.Autowired;
25
import com.todoroo.andlib.service.DependencyInjectionService;
26
import com.todoroo.andlib.service.ExceptionService;
27
import com.todoroo.andlib.sql.QueryTemplate;
28
import com.todoroo.andlib.utility.DialogUtilities;
29
import com.todoroo.astrid.actfm.sync.ActFmPreferenceService;
30
import com.todoroo.astrid.actfm.sync.ActFmSyncService;
31
import com.todoroo.astrid.activity.TaskListActivity;
32
import com.todoroo.astrid.adapter.TagDataAdapter;
33
import com.todoroo.astrid.dao.TagDataDao.TagDataCriteria;
34
import com.todoroo.astrid.data.TagData;
35
import com.todoroo.astrid.service.AstridDependencyInjector;
36
import com.todoroo.astrid.service.TagDataService;
37
import com.todoroo.astrid.service.StatisticsService;
38
import com.todoroo.astrid.service.ThemeService;
41
* Activity that displays a user's task lists and allows users
42
* to filter their task list.
44
* @author Tim Su <tim@todoroo.com>
47
public class TagDataListActivity extends ListActivity implements OnItemClickListener {
51
private static final int REQUEST_LOG_IN = 1;
52
private static final int REQUEST_SHOW_GOAL = 2;
54
private static final int MENU_REFRESH_ID = Menu.FIRST + 0;
56
// --- instance variables
58
@Autowired ExceptionService exceptionService;
59
@Autowired TagDataService tagDataService;
60
@Autowired ActFmPreferenceService actFmPreferenceService;
61
@Autowired ActFmSyncService actFmSyncService;
63
protected TagDataAdapter adapter = null;
64
protected AtomicReference<String> queryTemplate = new AtomicReference<String>();
66
/* ======================================================================
67
* ======================================================= initialization
68
* ====================================================================== */
71
AstridDependencyInjector.initialize();
74
/** Called when loading up the activity */
76
protected void onCreate(Bundle savedInstanceState) {
77
DependencyInjectionService.getInstance().inject(this);
78
requestWindowFeature(Window.FEATURE_NO_TITLE);
79
super.onCreate(savedInstanceState);
81
setContentView(R.layout.tagData_list_activity);
82
ThemeService.applyTheme(this);
84
if(!actFmPreferenceService.isLoggedIn()) {
85
Intent login = new Intent(this, ActFmLoginActivity.class);
86
login.putExtra(ActFmLoginActivity.EXTRA_DO_NOT_SYNC, true);
87
startActivityForResult(login, REQUEST_LOG_IN);
90
initializeUIComponents();
95
@SuppressWarnings("nls")
96
private void initializeUIComponents() {
97
((ImageButton) findViewById(R.id.extendedAddButton)).setOnClickListener(new OnClickListener() {
99
public void onClick(View v) {
100
DialogUtilities.okDialog(TagDataListActivity.this, "unsupported", null);
104
((ImageButton) findViewById(R.id.extendedAddButton)).setOnClickListener(new OnClickListener() {
106
public void onClick(View v) {
107
DialogUtilities.okDialog(TagDataListActivity.this, "unsupported", null);
111
((ImageView) findViewById(R.id.goals)).setOnClickListener(new OnClickListener() {
113
public void onClick(View v) {
114
Intent intent = new Intent(TagDataListActivity.this, TaskListActivity.class);
115
startActivity(intent);
124
* Create options menu (displayed when user presses menu key)
126
* @return true if menu should be displayed
129
public boolean onPrepareOptionsMenu(Menu menu) {
135
item = menu.add(Menu.NONE, MENU_REFRESH_ID, Menu.NONE,
136
R.string.PLA_menu_refresh);
137
item.setIcon(R.drawable.ic_menu_refresh);
142
/* ======================================================================
143
* ============================================================ lifecycle
144
* ====================================================================== */
147
protected void onStart() {
149
StatisticsService.sessionStart(this);
150
StatisticsService.reportEvent("goal-list"); //$NON-NLS-1$
154
protected void onStop() {
156
StatisticsService.sessionStop(this);
160
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
161
if(requestCode == REQUEST_LOG_IN) {
162
if(resultCode == RESULT_CANCELED)
167
super.onActivityResult(requestCode, resultCode, data);
170
/* ======================================================================
171
* ====================================================== populating list
172
* ====================================================================== */
174
/** Sets up the coach list adapter */
175
protected void setUpList() {
176
queryTemplate.set(new QueryTemplate().where(TagDataCriteria.isTeam()).toString());
177
TodorooCursor<TagData> currentCursor = tagDataService.fetchFiltered(queryTemplate.get(),
178
null, TagData.PROPERTIES);
179
startManagingCursor(currentCursor);
181
adapter = new TagDataAdapter(this, R.layout.tagData_adapter_row,
182
currentCursor, queryTemplate, false, null);
183
setListAdapter(adapter);
185
getListView().setOnItemClickListener(this);
188
/** refresh the list with latest data from the web */
189
private void refreshList(boolean manual) {
190
actFmSyncService.fetchTagDataDashboard(manual, new Runnable() {
193
runOnUiThread(new Runnable() {
196
Cursor cursor = adapter.getCursor();
198
startManagingCursor(cursor);
205
/* ======================================================================
206
* ============================================================== actions
207
* ====================================================================== */
210
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
211
Intent intent = new Intent(this, TagDataViewActivity.class);
212
intent.putExtra(TagDataViewActivity.EXTRA_PROJECT_ID, id);
213
startActivityForResult(intent, REQUEST_SHOW_GOAL);
217
public boolean onMenuItemSelected(int featureId, final MenuItem item) {
219
// handle my own menus
220
switch (item.getItemId()) {
221
case MENU_REFRESH_ID: {