~tim-todoroo/astrid/trunk

« back to all changes in this revision

Viewing changes to astrid/plugin-src/com/todoroo/astrid/actfm/ProjectListActivity.java

  • Committer: Tim Su
  • Date: 2011-06-03 22:45:13 UTC
  • Revision ID: git-v1:9ca8eb87f7bc56a8b6d55d2b6868af1b24aad2a9
Implemented password-based login and sign up to Astrid.com

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/**
2
 
 * See the file "LICENSE" for the full license governing this code.
3
 
 */
4
 
package com.todoroo.astrid.actfm;
5
 
 
6
 
import java.util.concurrent.atomic.AtomicReference;
7
 
 
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;
21
 
 
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;
39
 
 
40
 
/**
41
 
 * Activity that displays a user's task lists and allows users
42
 
 * to filter their task list.
43
 
 *
44
 
 * @author Tim Su <tim@todoroo.com>
45
 
 *
46
 
 */
47
 
public class TagDataListActivity extends ListActivity implements OnItemClickListener {
48
 
 
49
 
    // --- constants
50
 
 
51
 
    private static final int REQUEST_LOG_IN = 1;
52
 
    private static final int REQUEST_SHOW_GOAL = 2;
53
 
 
54
 
    private static final int MENU_REFRESH_ID = Menu.FIRST + 0;
55
 
 
56
 
    // --- instance variables
57
 
 
58
 
    @Autowired ExceptionService exceptionService;
59
 
    @Autowired TagDataService tagDataService;
60
 
    @Autowired ActFmPreferenceService actFmPreferenceService;
61
 
    @Autowired ActFmSyncService actFmSyncService;
62
 
 
63
 
    protected TagDataAdapter adapter = null;
64
 
    protected AtomicReference<String> queryTemplate = new AtomicReference<String>();
65
 
 
66
 
    /* ======================================================================
67
 
     * ======================================================= initialization
68
 
     * ====================================================================== */
69
 
 
70
 
    static {
71
 
        AstridDependencyInjector.initialize();
72
 
    }
73
 
 
74
 
    /**  Called when loading up the activity */
75
 
    @Override
76
 
    protected void onCreate(Bundle savedInstanceState) {
77
 
        DependencyInjectionService.getInstance().inject(this);
78
 
        requestWindowFeature(Window.FEATURE_NO_TITLE);
79
 
        super.onCreate(savedInstanceState);
80
 
 
81
 
        setContentView(R.layout.tagData_list_activity);
82
 
        ThemeService.applyTheme(this);
83
 
 
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);
88
 
        }
89
 
 
90
 
        initializeUIComponents();
91
 
        setUpList();
92
 
        refreshList(false);
93
 
    }
94
 
 
95
 
    @SuppressWarnings("nls")
96
 
    private void initializeUIComponents() {
97
 
        ((ImageButton) findViewById(R.id.extendedAddButton)).setOnClickListener(new OnClickListener() {
98
 
            @Override
99
 
            public void onClick(View v) {
100
 
                DialogUtilities.okDialog(TagDataListActivity.this, "unsupported", null);
101
 
            }
102
 
        });
103
 
 
104
 
        ((ImageButton) findViewById(R.id.extendedAddButton)).setOnClickListener(new OnClickListener() {
105
 
            @Override
106
 
            public void onClick(View v) {
107
 
                DialogUtilities.okDialog(TagDataListActivity.this, "unsupported", null);
108
 
            }
109
 
        });
110
 
 
111
 
        ((ImageView) findViewById(R.id.goals)).setOnClickListener(new OnClickListener() {
112
 
            @Override
113
 
            public void onClick(View v) {
114
 
                Intent intent = new Intent(TagDataListActivity.this, TaskListActivity.class);
115
 
                startActivity(intent);
116
 
                finish();
117
 
            }
118
 
        });
119
 
 
120
 
 
121
 
    }
122
 
 
123
 
    /**
124
 
     * Create options menu (displayed when user presses menu key)
125
 
     *
126
 
     * @return true if menu should be displayed
127
 
     */
128
 
    @Override
129
 
    public boolean onPrepareOptionsMenu(Menu menu) {
130
 
        if(menu.size() > 0)
131
 
            return true;
132
 
 
133
 
        MenuItem item;
134
 
 
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);
138
 
 
139
 
        return true;
140
 
    }
141
 
 
142
 
    /* ======================================================================
143
 
     * ============================================================ lifecycle
144
 
     * ====================================================================== */
145
 
 
146
 
    @Override
147
 
    protected void onStart() {
148
 
        super.onStart();
149
 
        StatisticsService.sessionStart(this);
150
 
        StatisticsService.reportEvent("goal-list"); //$NON-NLS-1$
151
 
    }
152
 
 
153
 
    @Override
154
 
    protected void onStop() {
155
 
        super.onStop();
156
 
        StatisticsService.sessionStop(this);
157
 
    }
158
 
 
159
 
    @Override
160
 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
161
 
        if(requestCode == REQUEST_LOG_IN) {
162
 
            if(resultCode == RESULT_CANCELED)
163
 
                finish();
164
 
            else
165
 
                refreshList(true);
166
 
        } else
167
 
            super.onActivityResult(requestCode, resultCode, data);
168
 
    }
169
 
 
170
 
    /* ======================================================================
171
 
     * ====================================================== populating list
172
 
     * ====================================================================== */
173
 
 
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);
180
 
 
181
 
        adapter = new TagDataAdapter(this, R.layout.tagData_adapter_row,
182
 
                currentCursor, queryTemplate, false, null);
183
 
        setListAdapter(adapter);
184
 
 
185
 
        getListView().setOnItemClickListener(this);
186
 
    }
187
 
 
188
 
    /** refresh the list with latest data from the web */
189
 
    private void refreshList(boolean manual) {
190
 
        actFmSyncService.fetchTagDataDashboard(manual, new Runnable() {
191
 
            @Override
192
 
            public void run() {
193
 
                runOnUiThread(new Runnable() {
194
 
                    @Override
195
 
                    public void run() {
196
 
                        Cursor cursor = adapter.getCursor();
197
 
                        cursor.requery();
198
 
                        startManagingCursor(cursor);
199
 
                    }
200
 
                });
201
 
            }
202
 
        });
203
 
    }
204
 
 
205
 
    /* ======================================================================
206
 
     * ============================================================== actions
207
 
     * ====================================================================== */
208
 
 
209
 
    @Override
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);
214
 
    }
215
 
 
216
 
    @Override
217
 
    public boolean onMenuItemSelected(int featureId, final MenuItem item) {
218
 
 
219
 
        // handle my own menus
220
 
        switch (item.getItemId()) {
221
 
        case MENU_REFRESH_ID: {
222
 
            refreshList(true);
223
 
            return true;
224
 
        }
225
 
        }
226
 
 
227
 
        return false;
228
 
    }
229
 
}