99import android .view .Menu ;
1010import android .view .MenuItem ;
1111import android .widget .ListView ;
12+ import android .widget .ProgressBar ;
1213import android .widget .Toast ;
1314
1415import com .codepath .apps .mysimpletweets .R ;
1718import com .codepath .apps .mysimpletweets .adapters .EndlessScrollListener ;
1819import com .codepath .apps .mysimpletweets .adapters .TweetsArrayAdapter ;
1920import com .codepath .apps .mysimpletweets .fragments .TweetFragment ;
21+ import com .codepath .apps .mysimpletweets .models .CacheManager ;
2022import com .codepath .apps .mysimpletweets .models .Tweet ;
2123import com .codepath .apps .mysimpletweets .models .User ;
24+ import com .codepath .apps .mysimpletweets .utils .ConnectivityHelper ;
2225import com .loopj .android .http .JsonHttpResponseHandler ;
2326
2427import org .apache .http .Header ;
@@ -39,6 +42,7 @@ public class TimelineActivity extends ActionBarActivity implements TweetFragment
3942 private TweetsArrayAdapter aTweets ;
4043 @ InjectView (R .id .lvTweets ) ListView lvTweets ;
4144 @ InjectView (R .id .swipeContainer ) SwipeRefreshLayout swipeContainer ;
45+ @ InjectView (R .id .pbLoading ) ProgressBar progressBar ;
4246
4347 private long max_id ;
4448 private User currentUser ;
@@ -61,9 +65,9 @@ public void onLoadMore(int page, int totalItemsCount) {
6165 aTweets = new TweetsArrayAdapter (this , tweets );
6266 lvTweets .setAdapter (aTweets );
6367 client = TwitterApplication .getRestClient ();
64- max_id = 0 ;
65- aTweets .clear ();
68+ aTweets .addAll (CacheManager .latestTweets ());
6669 populateCurrentUser ();
70+ max_id = 0 ;
6771 populateTimeline ();
6872
6973 // Setup refresh listener which triggers new data loading
@@ -74,7 +78,6 @@ public void onRefresh() {
7478 // Make sure you call swipeContainer.setRefreshing(false)
7579 // once the network request has completed successfully.
7680 max_id = 0 ;
77- aTweets .clear ();
7881 populateCurrentUser ();
7982 populateTimeline ();
8083 }
@@ -91,7 +94,7 @@ private void populateCurrentUser() {
9194 @ Override
9295 public void onSuccess (int statusCode , Header [] headers , JSONObject response ) {
9396 currentUser = User .fromJSON (response );
94- Log .d (TAG , "user populated: " + currentUser );
97+ Log .d (TAG , "user populated: " + currentUser . getScreenName () );
9598 }
9699
97100 @ Override
@@ -111,21 +114,35 @@ public void customLoadMoreDataFromApi(int offset) {
111114 }
112115
113116 private void populateTimeline () {
114- client .getHomeTimeline (max_id , new JsonHttpResponseHandler () {
115- @ Override
116- public void onSuccess (int statusCode , Header [] headers , JSONArray json ) {
117- aTweets .addAll (Tweet .fromJSON (json ));
118- Tweet lastTweet = aTweets .getItem (aTweets .getCount () - 1 );
119- max_id = lastTweet .getUid () - 1 ;
120- // Log.d(TAG, "max_id = " + max_id);
121- swipeContainer .setRefreshing (false );
122- }
117+ if (!ConnectivityHelper .isNetworkAvailable (this )) {
118+ ConnectivityHelper .notifyUserAboutNoInternetConnectivity (this );
119+ } else {
120+ progressBar .setVisibility (ProgressBar .VISIBLE );
121+ client .getHomeTimeline (max_id , new JsonHttpResponseHandler () {
122+ @ Override
123+ public void onSuccess (int statusCode , Header [] headers , JSONArray json ) {
124+ if (max_id == 0 ) {
125+ aTweets .clear ();
126+ }
127+ ArrayList <Tweet > responseTweets = Tweet .fromJSON (json );
128+ // Fire and forget
129+ CacheManager .saveTweets (responseTweets );
130+ aTweets .addAll (responseTweets );
131+ Tweet lastTweet = aTweets .getItem (aTweets .getCount () - 1 );
132+ max_id = lastTweet .getUid () - 1 ;
133+ // Log.d(TAG, "max_id = " + max_id);
134+ swipeContainer .setRefreshing (false );
135+ progressBar .setVisibility (ProgressBar .INVISIBLE );
136+ }
123137
124- @ Override
125- public void onFailure (int statusCode , Header [] headers , Throwable throwable , JSONObject errorResponse ) {
126- Log .d (TAG , errorResponse .toString ());
127- }
128- });
138+ @ Override
139+ public void onFailure (int statusCode , Header [] headers , Throwable throwable , JSONObject errorResponse ) {
140+ Log .e (TAG , "Failed to call API: " + throwable );
141+ progressBar .setVisibility (ProgressBar .INVISIBLE );
142+ ConnectivityHelper .notifyUserAboutAPIError (TimelineActivity .this );
143+ }
144+ });
145+ }
129146 }
130147
131148
@@ -159,19 +176,27 @@ public void onTweet(String tweet) {
159176 tweet = tweet .trim ();
160177 Log .d (TAG , "Posting tweet to Twitter: " + tweet );
161178 if (tweet .length () > 0 ){
162- client .postTweet (tweet , new JsonHttpResponseHandler () {
163- @ Override
164- public void onSuccess (int statusCode , Header [] headers , JSONObject response ) {
165- tweets .add (0 , Tweet .fromJSON (response ));
166- aTweets .notifyDataSetChanged ();
167- Toast .makeText (TimelineActivity .this , R .string .tweet_posted_successfully , Toast .LENGTH_SHORT ).show ();
168- }
169-
170- @ Override
171- public void onFailure (int statusCode , Header [] headers , Throwable throwable , JSONObject errorResponse ) {
172- Log .d (TAG , errorResponse .toString ());
173- }
174- });
179+ if (!ConnectivityHelper .isNetworkAvailable (this )) {
180+ ConnectivityHelper .notifyUserAboutNoInternetConnectivity (this );
181+ } else {
182+ progressBar .setVisibility (ProgressBar .VISIBLE );
183+ client .postTweet (tweet , new JsonHttpResponseHandler () {
184+ @ Override
185+ public void onSuccess (int statusCode , Header [] headers , JSONObject response ) {
186+ tweets .add (0 , Tweet .fromJSON (response ));
187+ aTweets .notifyDataSetChanged ();
188+ progressBar .setVisibility (ProgressBar .INVISIBLE );
189+ Toast .makeText (TimelineActivity .this , R .string .tweet_posted_successfully , Toast .LENGTH_SHORT ).show ();
190+ }
191+
192+ @ Override
193+ public void onFailure (int statusCode , Header [] headers , Throwable throwable , JSONObject errorResponse ) {
194+ Log .e (TAG , "Failed to call API: " + throwable );
195+ progressBar .setVisibility (ProgressBar .INVISIBLE );
196+ ConnectivityHelper .notifyUserAboutAPIError (TimelineActivity .this );
197+ }
198+ });
199+ }
175200 }
176201 }
177202}
0 commit comments