Skip to content

Commit 28c1fd2

Browse files
Implemented caching for all timelines
Fixed some NPEs
1 parent 5005577 commit 28c1fd2

File tree

11 files changed

+84
-34
lines changed

11 files changed

+84
-34
lines changed

app/src/main/java/com/codepath/apps/mysimpletweets/activities/TimelineActivity.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ protected void onCreate(Bundle savedInstanceState) {
6666
tabStrip.setViewPager(viewPager);
6767

6868
populateCurrentUser();
69-
// aTweets.addAll(CacheManager.latestTweets());
7069
}
7170

7271
private void populateCurrentUser() {

app/src/main/java/com/codepath/apps/mysimpletweets/fragments/HomeTimelineFragment.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import android.util.Log;
44
import android.widget.ProgressBar;
55

6+
import com.codepath.apps.mysimpletweets.models.CacheManager;
7+
import com.codepath.apps.mysimpletweets.models.TimelineType;
68
import com.codepath.apps.mysimpletweets.models.Tweet;
79
import com.codepath.apps.mysimpletweets.utils.ConnectivityHelper;
810
import com.loopj.android.http.JsonHttpResponseHandler;
@@ -12,6 +14,7 @@
1214
import org.json.JSONObject;
1315

1416
import java.util.ArrayList;
17+
import java.util.List;
1518

1619
public class HomeTimelineFragment extends TweetsListFragment {
1720

@@ -35,7 +38,7 @@ public void onSuccess(int statusCode, Header[] headers, JSONArray json) {
3538
}
3639
ArrayList<Tweet> responseTweets = Tweet.fromJSON(json);
3740
// Fire and forget
38-
// CacheManager.saveTweets(responseTweets);
41+
CacheManager.saveTweets(responseTweets, TimelineType.HOME);
3942
aTweets.addAll(responseTweets);
4043
Tweet lastTweet = aTweets.getItem(aTweets.getCount() - 1);
4144
max_id = lastTweet.getUid() - 1;
@@ -54,4 +57,9 @@ public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSO
5457
}
5558
}
5659

60+
@Override
61+
public List<Tweet> latestTweets() {
62+
return CacheManager.latestTweets(TimelineType.HOME);
63+
}
64+
5765
}

app/src/main/java/com/codepath/apps/mysimpletweets/fragments/MentionsTimelineFragment.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import android.util.Log;
44
import android.widget.ProgressBar;
55

6+
import com.codepath.apps.mysimpletweets.models.CacheManager;
7+
import com.codepath.apps.mysimpletweets.models.TimelineType;
68
import com.codepath.apps.mysimpletweets.models.Tweet;
79
import com.codepath.apps.mysimpletweets.utils.ConnectivityHelper;
810
import com.loopj.android.http.JsonHttpResponseHandler;
@@ -12,6 +14,7 @@
1214
import org.json.JSONObject;
1315

1416
import java.util.ArrayList;
17+
import java.util.List;
1518

1619
public class MentionsTimelineFragment extends TweetsListFragment {
1720

@@ -35,7 +38,7 @@ public void onSuccess(int statusCode, Header[] headers, JSONArray json) {
3538
}
3639
ArrayList<Tweet> responseTweets = Tweet.fromJSON(json);
3740
// Fire and forget
38-
// CacheManager.saveTweets(responseTweets);
41+
CacheManager.saveTweets(responseTweets, TimelineType.MENTIONS);
3942
aTweets.addAll(responseTweets);
4043
Tweet lastTweet = aTweets.getItem(aTweets.getCount() - 1);
4144
max_id = lastTweet.getUid() - 1;
@@ -54,4 +57,9 @@ public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSO
5457
}
5558
}
5659

60+
@Override
61+
public List<Tweet> latestTweets() {
62+
return CacheManager.latestTweets(TimelineType.MENTIONS);
63+
}
64+
5765
}

app/src/main/java/com/codepath/apps/mysimpletweets/fragments/TweetsListFragment.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
import com.codepath.apps.mysimpletweets.TwitterClient;
1616
import com.codepath.apps.mysimpletweets.adapters.EndlessScrollListener;
1717
import com.codepath.apps.mysimpletweets.adapters.TweetsArrayAdapter;
18+
import com.codepath.apps.mysimpletweets.models.CacheManager;
1819
import com.codepath.apps.mysimpletweets.models.Tweet;
1920

2021
import java.util.ArrayList;
22+
import java.util.List;
2123

2224
import butterknife.ButterKnife;
2325
import butterknife.InjectView;
@@ -41,6 +43,7 @@ public interface TweetsListFragmentListener {
4143
public long max_id;
4244

4345
public abstract void populateTimeline();
46+
public abstract List<Tweet> latestTweets();
4447

4548
@Override
4649
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle savedInstanceState) {
@@ -96,6 +99,7 @@ public void onCreate(Bundle savedInstanceState) {
9699
aTweets = new TweetsArrayAdapter(getActivity(), tweets, null);
97100
}
98101
client = TwitterApplication.getRestClient();
102+
aTweets.addAll(latestTweets());
99103
}
100104

101105
@SuppressWarnings("unused") // it's actually used, just injected by Butter Knife

app/src/main/java/com/codepath/apps/mysimpletweets/fragments/UserProfileBasicInfoFragment.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,15 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup parent, @N
4747
View view = inflater.inflate(R.layout.fragment_user_profile_basic_info, parent, false);
4848
ButterKnife.inject(this, view);
4949
User user = getArguments().getParcelable(EXTRA_USER);
50-
tvName.setText(user.getName());
51-
tvUserName.setText("@" + user.getScreenName());
52-
Picasso.with(getActivity())
53-
.load(user.getProfileImageUrl())
54-
.fit()
55-
.transform(ProfilePictureHelper.roundedCornersTranformationWithBorder(Color.WHITE))
56-
.into(ivProfileImage);
50+
if (null != user) {
51+
tvName.setText(user.getName());
52+
tvUserName.setText("@" + user.getScreenName());
53+
Picasso.with(getActivity())
54+
.load(user.getProfileImageUrl())
55+
.fit()
56+
.transform(ProfilePictureHelper.roundedCornersTranformationWithBorder(Color.WHITE))
57+
.into(ivProfileImage);
58+
}
5759

5860
return view;
5961
}

app/src/main/java/com/codepath/apps/mysimpletweets/fragments/UserProfileExtendedInfoFragment.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,10 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup parent, @N
4040
View view = inflater.inflate(R.layout.fragment_user_profile_extended_info, parent, false);
4141
ButterKnife.inject(this, view);
4242
User user = getArguments().getParcelable(EXTRA_USER);
43-
tvOccupation.setText(user.getTagLine());
44-
tvLocation.setText(user.getLocation());
43+
if (null != user) {
44+
tvOccupation.setText(user.getTagLine());
45+
tvLocation.setText(user.getLocation());
46+
}
4547

4648
return view;
4749
}

app/src/main/java/com/codepath/apps/mysimpletweets/fragments/UserStatsFragment.java

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -49,26 +49,27 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup parent, @N
4949
View view = inflater.inflate(R.layout.fragment_user_stats, parent, false);
5050
ButterKnife.inject(this, view);
5151
final User user = getArguments().getParcelable(EXTRA_USER);
52-
tvTweetsCount.setText(LocaleHelper.localizedNumber(getActivity(), user.getTweetsCount()));
53-
tvFollowersCount.setText(LocaleHelper.localizedNumber(getActivity(), user.getFollowersCount()));
54-
tvFriendsCount.setText(LocaleHelper.localizedNumber(getActivity(), user.getFriendsCount()));
52+
if (null != user) {
53+
tvTweetsCount.setText(LocaleHelper.localizedNumber(getActivity(), user.getTweetsCount()));
54+
tvFollowersCount.setText(LocaleHelper.localizedNumber(getActivity(), user.getFollowersCount()));
55+
tvFriendsCount.setText(LocaleHelper.localizedNumber(getActivity(), user.getFriendsCount()));
5556

56-
tvFriendsCount.setOnClickListener(new View.OnClickListener() {
57-
@Override
58-
public void onClick(View v) {
59-
UserStatsFragmentListener userStatsFragmentListener = (UserStatsFragmentListener) getActivity();
60-
userStatsFragmentListener.onShowFriends(user);
61-
}
62-
});
63-
64-
tvFollowersCount.setOnClickListener(new View.OnClickListener() {
65-
@Override
66-
public void onClick(View v) {
67-
UserStatsFragmentListener userStatsFragmentListener = (UserStatsFragmentListener) getActivity();
68-
userStatsFragmentListener.onShowFollowers(user);
69-
}
70-
});
57+
tvFriendsCount.setOnClickListener(new View.OnClickListener() {
58+
@Override
59+
public void onClick(View v) {
60+
UserStatsFragmentListener userStatsFragmentListener = (UserStatsFragmentListener) getActivity();
61+
userStatsFragmentListener.onShowFriends(user);
62+
}
63+
});
7164

65+
tvFollowersCount.setOnClickListener(new View.OnClickListener() {
66+
@Override
67+
public void onClick(View v) {
68+
UserStatsFragmentListener userStatsFragmentListener = (UserStatsFragmentListener) getActivity();
69+
userStatsFragmentListener.onShowFollowers(user);
70+
}
71+
});
72+
}
7273
return view;
7374
}
7475
}

app/src/main/java/com/codepath/apps/mysimpletweets/fragments/UserTimelineFragment.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import android.util.Log;
55
import android.widget.ProgressBar;
66

7+
import com.codepath.apps.mysimpletweets.models.CacheManager;
8+
import com.codepath.apps.mysimpletweets.models.TimelineType;
79
import com.codepath.apps.mysimpletweets.models.Tweet;
810
import com.codepath.apps.mysimpletweets.models.User;
911
import com.codepath.apps.mysimpletweets.utils.ConnectivityHelper;
@@ -14,6 +16,7 @@
1416
import org.json.JSONObject;
1517

1618
import java.util.ArrayList;
19+
import java.util.List;
1720

1821
public class UserTimelineFragment extends TweetsListFragment {
1922

@@ -43,7 +46,7 @@ public void onSuccess(int statusCode, Header[] headers, JSONArray json) {
4346
}
4447
ArrayList<Tweet> responseTweets = Tweet.fromJSON(json);
4548
// Fire and forget
46-
// CacheManager.saveTweets(responseTweets);
49+
CacheManager.saveTweets(responseTweets, TimelineType.USER);
4750
aTweets.addAll(responseTweets);
4851
Tweet lastTweet = aTweets.getItem(aTweets.getCount() - 1);
4952
max_id = lastTweet.getUid() - 1;
@@ -62,4 +65,8 @@ public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSO
6265
}
6366
}
6467

68+
@Override
69+
public List<Tweet> latestTweets() {
70+
return CacheManager.latestTweets(TimelineType.USER);
71+
}
6572
}

app/src/main/java/com/codepath/apps/mysimpletweets/models/CacheManager.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,22 @@
77

88
public class CacheManager {
99

10-
public static void saveTweets(List<Tweet> tweets) {
10+
public static void saveTweets(List<Tweet> tweets, TimelineType timelineType) {
1111
ActiveAndroid.beginTransaction();
1212
try {
1313
for (Tweet tweet : tweets) {
1414
tweet.getUser().save();
15+
tweet.setTimelineType(timelineType);
1516
tweet.save();
17+
1618
}
1719
ActiveAndroid.setTransactionSuccessful();
1820
} finally {
1921
ActiveAndroid.endTransaction();
2022
}
2123
}
2224

23-
public static List<Tweet> latestTweets() {
24-
return new Select().from(Tweet.class).orderBy("createdAt DESC").limit("250").execute();
25+
public static List<Tweet> latestTweets(TimelineType timelineType) {
26+
return new Select().from(Tweet.class).where("timelineType = ?", timelineType).orderBy("createdAt DESC").limit("250").execute();
2527
}
2628
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.codepath.apps.mysimpletweets.models;
2+
3+
public enum TimelineType {
4+
HOME, MENTIONS, USER
5+
}
6+

0 commit comments

Comments
 (0)