Skip to content

Commit cc092ad

Browse files
mayank8318iamareebjamal
authored andcommitted
fix: Move Twitter and Facebook feed under one fragment. (fossasia#2333)
1 parent bec2bd1 commit cc092ad

File tree

9 files changed

+199
-61
lines changed

9 files changed

+199
-61
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package org.fossasia.openevent.core.feed;
2+
3+
import android.os.Bundle;
4+
import android.support.annotation.NonNull;
5+
import android.support.annotation.Nullable;
6+
import android.support.design.widget.TabLayout;
7+
import android.support.v4.view.ViewPager;
8+
import android.view.LayoutInflater;
9+
import android.view.View;
10+
import android.view.ViewGroup;
11+
12+
import org.fossasia.openevent.R;
13+
import org.fossasia.openevent.common.ui.base.BaseFragment;
14+
import org.fossasia.openevent.common.ui.image.OnImageZoomListener;
15+
import org.fossasia.openevent.core.feed.facebook.FacebookFeedFragment;
16+
import org.fossasia.openevent.core.feed.twitter.TwitterFeedFragment;
17+
18+
import butterknife.BindView;
19+
20+
public class FeedFragment extends BaseFragment {
21+
22+
@BindView(R.id.viewpager)
23+
protected ViewPager viewPager;
24+
@BindView(R.id.tabLayout)
25+
protected TabLayout feedTabLayout;
26+
27+
private OpenCommentsDialogListener openCommentsDialogListener;
28+
private OnImageZoomListener onImageZoomListener;
29+
30+
public static FeedFragment getInstance(OpenCommentsDialogListener openCommentsDialogListener,
31+
OnImageZoomListener onImageZoomListener) {
32+
FeedFragment feedFragment = new FeedFragment();
33+
feedFragment.openCommentsDialogListener = openCommentsDialogListener;
34+
feedFragment.onImageZoomListener = onImageZoomListener;
35+
36+
return feedFragment;
37+
}
38+
39+
@Nullable
40+
@Override
41+
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
42+
View view = super.onCreateView(inflater, container, savedInstanceState);
43+
44+
setUpViewPager(viewPager);
45+
feedTabLayout.setupWithViewPager(viewPager);
46+
47+
return view;
48+
}
49+
50+
private void setUpViewPager(ViewPager viewPager) {
51+
FeedViewPagerAdapter feedViewPagerAdapter = new FeedViewPagerAdapter(getChildFragmentManager());
52+
feedViewPagerAdapter.addFragment(FacebookFeedFragment.getInstance(openCommentsDialogListener, onImageZoomListener), getString(R.string.facebook));
53+
feedViewPagerAdapter.addFragment(TwitterFeedFragment.getInstance(onImageZoomListener), getString(R.string.twitter));
54+
feedViewPagerAdapter.notifyDataSetChanged();
55+
56+
viewPager.setAdapter(feedViewPagerAdapter);
57+
}
58+
59+
@Override
60+
protected int getLayoutResource() {
61+
return R.layout.fragment_feed_main;
62+
}
63+
64+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package org.fossasia.openevent.core.feed;
2+
3+
4+
import android.support.annotation.Nullable;
5+
import android.support.v4.app.Fragment;
6+
import android.support.v4.app.FragmentManager;
7+
import android.support.v4.app.FragmentPagerAdapter;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
public class FeedViewPagerAdapter extends FragmentPagerAdapter {
13+
14+
private List<Fragment> fragmentList = new ArrayList<>();
15+
private List<String> fragmentTitleList = new ArrayList<>();
16+
17+
public FeedViewPagerAdapter(FragmentManager fm) {
18+
super(fm);
19+
}
20+
21+
@Override
22+
public Fragment getItem(int position) {
23+
return fragmentList.get(position);
24+
}
25+
26+
public void addFragment(final Fragment fragment, final String title) {
27+
fragmentList.add(fragment);
28+
fragmentTitleList.add(title);
29+
}
30+
31+
@Nullable
32+
@Override
33+
public CharSequence getPageTitle(int position) {
34+
return fragmentTitleList.get(position);
35+
}
36+
37+
@Override
38+
public int getCount() {
39+
return fragmentList.size();
40+
}
41+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.fossasia.openevent.core.feed;
2+
3+
import org.fossasia.openevent.core.feed.facebook.api.CommentItem;
4+
5+
import java.util.List;
6+
7+
public interface OpenCommentsDialogListener {
8+
void openCommentsDialog(List<CommentItem> commentItems);
9+
}

android/app/src/main/java/org/fossasia/openevent/core/feed/facebook/FeedAdapter.java renamed to android/app/src/main/java/org/fossasia/openevent/core/feed/facebook/FacebookFeedAdapter.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import org.fossasia.openevent.R;
2121
import org.fossasia.openevent.common.ui.base.BaseRVAdapter;
22+
import org.fossasia.openevent.core.feed.OpenCommentsDialogListener;
2223
import org.fossasia.openevent.core.feed.facebook.api.CommentItem;
2324
import org.fossasia.openevent.core.feed.facebook.api.FeedItem;
2425
import org.fossasia.openevent.common.ui.image.OnImageZoomListener;
@@ -33,7 +34,7 @@
3334
import butterknife.ButterKnife;
3435
import timber.log.Timber;
3536

36-
public class FeedAdapter extends BaseRVAdapter<FeedItem, FeedAdapter.RecyclerViewHolder> {
37+
public class FacebookFeedAdapter extends BaseRVAdapter<FeedItem, FacebookFeedAdapter.RecyclerViewHolder> {
3738

3839
private List<FeedItem> feedItems;
3940
private Context context;
@@ -85,7 +86,7 @@ private void bindViews() {
8586
}
8687
}
8788

88-
public FeedAdapter(Context context, OpenCommentsDialogListener openCommentsDialogListener, List<FeedItem> feedItems) {
89+
public FacebookFeedAdapter(Context context, OpenCommentsDialogListener openCommentsDialogListener, List<FeedItem> feedItems) {
8990
super(feedItems);
9091
this.feedItems = feedItems;
9192
this.context = context;
@@ -157,10 +158,6 @@ public void onBindViewHolder(RecyclerViewHolder holder, int position) {
157158
holder.getComments.setText(context.getString(R.string.comments_value, comments));
158159
}
159160

160-
public interface OpenCommentsDialogListener {
161-
void openCommentsDialog(List<CommentItem> commentItems);
162-
}
163-
164161
public void setOnImageZoomListener(OnImageZoomListener onImageZoomListener) {
165162
this.onImageZoomListener = onImageZoomListener;
166163
}

android/app/src/main/java/org/fossasia/openevent/core/feed/facebook/FeedFragment.java renamed to android/app/src/main/java/org/fossasia/openevent/core/feed/facebook/FacebookFeedFragment.java

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.fossasia.openevent.common.ui.image.OnImageZoomListener;
2020
import org.fossasia.openevent.common.utils.SharedPreferencesUtil;
2121
import org.fossasia.openevent.core.feed.BaseFeedFragment;
22+
import org.fossasia.openevent.core.feed.OpenCommentsDialogListener;
2223
import org.fossasia.openevent.core.feed.facebook.api.FeedItem;
2324

2425
import java.lang.ref.WeakReference;
@@ -31,25 +32,25 @@
3132
import static org.fossasia.openevent.core.auth.AuthUtil.INVALID;
3233
import static org.fossasia.openevent.core.auth.AuthUtil.VALID;
3334

34-
public class FeedFragment extends BaseFeedFragment {
35+
public class FacebookFeedFragment extends BaseFeedFragment {
3536

36-
private FeedAdapter feedAdapter;
37-
private FeedFragmentViewModel feedFragmentViewModel;
37+
private FacebookFeedAdapter facebookFeedAdapter;
38+
private FacebookFeedFragmentViewModel facebookFeedFragmentViewModel;
3839
private List<FeedItem> feedItems;
39-
private FeedAdapter.OpenCommentsDialogListener openCommentsDialogListener;
40+
private OpenCommentsDialogListener openCommentsDialogListener;
4041
private OnImageZoomListener onImageZoomListener;
4142

4243
@BindView(R.id.feed_swipe_refresh) SwipeRefreshLayout swipeRefreshLayout;
4344
@BindView(R.id.feed_recycler_view) RecyclerView feedRecyclerView;
4445
@BindView(R.id.txt_no_posts) TextView noFeedView;
4546

46-
public static FeedFragment getInstance(FeedAdapter.OpenCommentsDialogListener openCommentsDialogListener,
47-
OnImageZoomListener onImageZoomListener) {
48-
FeedFragment feedFragment = new FeedFragment();
49-
feedFragment.openCommentsDialogListener = openCommentsDialogListener;
50-
feedFragment.onImageZoomListener = onImageZoomListener;
47+
public static FacebookFeedFragment getInstance(OpenCommentsDialogListener openCommentsDialogListener,
48+
OnImageZoomListener onImageZoomListener) {
49+
FacebookFeedFragment facebookFeedFragment = new FacebookFeedFragment();
50+
facebookFeedFragment.openCommentsDialogListener = openCommentsDialogListener;
51+
facebookFeedFragment.onImageZoomListener = onImageZoomListener;
5152

52-
return feedFragment;
53+
return facebookFeedFragment;
5354
}
5455

5556
@Override
@@ -59,12 +60,12 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
5960
View view = super.onCreateView(inflater, container, savedInstanceState);
6061

6162
feedItems = new ArrayList<>();
62-
feedFragmentViewModel = ViewModelProviders.of(this).get(FeedFragmentViewModel.class);
63+
facebookFeedFragmentViewModel = ViewModelProviders.of(this).get(FacebookFeedFragmentViewModel.class);
6364
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getContext());
6465
feedRecyclerView.setLayoutManager(mLayoutManager);
65-
feedAdapter = new FeedAdapter(getContext(), openCommentsDialogListener, feedItems);
66-
feedAdapter.setOnImageZoomListener(onImageZoomListener);
67-
feedRecyclerView.setAdapter(feedAdapter);
66+
facebookFeedAdapter = new FacebookFeedAdapter(getContext(), openCommentsDialogListener, feedItems);
67+
facebookFeedAdapter.setOnImageZoomListener(onImageZoomListener);
68+
feedRecyclerView.setAdapter(facebookFeedAdapter);
6869

6970
setupProgressBar();
7071

@@ -85,13 +86,13 @@ private void downloadFeed() {
8586
return;
8687
}
8788

88-
feedFragmentViewModel.getPosts(getContext().getResources().getString(R.string.fields),
89+
facebookFeedFragmentViewModel.getPosts(getContext().getResources().getString(R.string.fields),
8990
getContext().getResources().getString(R.string.facebook_access_token), SharedPreferencesUtil.getString(ConstantStrings.FACEBOOK_PAGE_ID, null))
9091
.observe(this, feedResponse -> {
9192
if (feedResponse.getResponse() == VALID) {
9293
feedItems.clear();
9394
feedItems.addAll(feedResponse.getFeed().getData());
94-
feedAdapter.notifyDataSetChanged();
95+
facebookFeedAdapter.notifyDataSetChanged();
9596
handleVisibility();
9697
Views.setSwipeRefreshLayout(swipeRefreshLayout, false);
9798
Timber.d("Refresh done");
@@ -114,8 +115,8 @@ private void refresh() {
114115
public void networkAvailable() {
115116
// Network is available
116117
swipeRefreshLayout.setRefreshing(true);
117-
feedFragmentViewModel.updateFBPageID(getResources().getString(R.string.facebook_access_token), SharedPreferencesUtil.getString(ConstantStrings.FACEBOOK_PAGE_ID, null))
118-
.observe(FeedFragment.this, facebookPageId -> {
118+
facebookFeedFragmentViewModel.updateFBPageID(getResources().getString(R.string.facebook_access_token), SharedPreferencesUtil.getString(ConstantStrings.FACEBOOK_PAGE_ID, null))
119+
.observe(FacebookFeedFragment.this, facebookPageId -> {
119120
String id = facebookPageId.getId();
120121
SharedPreferencesUtil.putString(ConstantStrings.FACEBOOK_PAGE_ID, id);
121122
});
@@ -141,9 +142,9 @@ protected int getLayoutResource() {
141142
@Override
142143
public void onStop() {
143144
super.onStop();
144-
if (feedAdapter != null) {
145-
feedAdapter.removeOnImageZoomListener();
146-
feedAdapter.removeOpenCommentsDialogListener();
145+
if (facebookFeedAdapter != null) {
146+
facebookFeedAdapter.removeOnImageZoomListener();
147+
facebookFeedAdapter.removeOpenCommentsDialogListener();
147148
}
148149
}
149150

android/app/src/main/java/org/fossasia/openevent/core/feed/facebook/FeedFragmentViewModel.java renamed to android/app/src/main/java/org/fossasia/openevent/core/feed/facebook/FacebookFeedFragmentViewModel.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@
2121
import static org.fossasia.openevent.core.auth.AuthUtil.INVALID;
2222
import static org.fossasia.openevent.core.auth.AuthUtil.VALID;
2323

24-
public class FeedFragmentViewModel extends ViewModel {
24+
public class FacebookFeedFragmentViewModel extends ViewModel {
2525

2626
private LiveData<FacebookPageId> facebookPageIdLiveData;
2727
private MutableLiveData<PostsResponse> feedLiveData;
2828
private final CompositeDisposable compositeDisposable = new CompositeDisposable();
2929

30-
public FeedFragmentViewModel() {
30+
public FacebookFeedFragmentViewModel() {
3131
facebookPageIdLiveData = new MutableLiveData<>();
3232
feedLiveData = new MutableLiveData<>();
3333
}

android/app/src/main/java/org/fossasia/openevent/core/main/MainActivity.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,11 @@
7575
import org.fossasia.openevent.core.auth.AuthUtil;
7676
import org.fossasia.openevent.core.auth.profile.UserProfileActivity;
7777
import org.fossasia.openevent.core.faqs.FAQFragment;
78+
import org.fossasia.openevent.core.feed.FeedFragment;
79+
import org.fossasia.openevent.core.feed.OpenCommentsDialogListener;
7880
import org.fossasia.openevent.core.feed.facebook.CommentsDialogFragment;
79-
import org.fossasia.openevent.core.feed.facebook.FeedAdapter;
80-
import org.fossasia.openevent.core.feed.facebook.FeedFragment;
8181
import org.fossasia.openevent.core.feed.facebook.api.CommentItem;
8282
import org.fossasia.openevent.core.feed.facebook.api.FacebookApi;
83-
import org.fossasia.openevent.core.feed.twitter.TwitterFeedFragment;
8483
import org.fossasia.openevent.core.location.LocationsFragment;
8584
import org.fossasia.openevent.core.notifications.NotificationsFragment;
8685
import org.fossasia.openevent.core.schedule.ScheduleFragment;
@@ -116,7 +115,7 @@
116115
import io.realm.RealmResults;
117116
import timber.log.Timber;
118117

119-
public class MainActivity extends BaseActivity implements FeedAdapter.OpenCommentsDialogListener, OnImageZoomListener, AboutFragment.OnMapSelectedListener {
118+
public class MainActivity extends BaseActivity implements OpenCommentsDialogListener, OnImageZoomListener, AboutFragment.OnMapSelectedListener {
120119

121120
private static final String STATE_FRAGMENT = "stateFragment";
122121
private static final String NAV_ITEM = "navItem";
@@ -535,9 +534,6 @@ private void doMenuAction(int menuItemId) {
535534
case R.id.nav_feed:
536535
replaceFragment(FeedFragment.getInstance(this, this), R.string.menu_feed);
537536
break;
538-
case R.id.nav_twitter_feed:
539-
replaceFragment(TwitterFeedFragment.getInstance(this), R.string.menu_twitter);
540-
break;
541537
case R.id.nav_schedule:
542538
replaceFragment(new ScheduleFragment(), R.string.menu_schedule);
543539
break;
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools"
5+
android:layout_width="match_parent"
6+
android:layout_height="match_parent">
7+
8+
<android.support.design.widget.TabLayout
9+
android:id="@+id/tabLayout"
10+
android:layout_width="wrap_content"
11+
android:layout_height="wrap_content"
12+
android:layout_alignParentLeft="true"
13+
android:layout_alignParentStart="true"
14+
android:layout_gravity="center_horizontal"
15+
android:background="?attr/selectableItemBackground"
16+
android:clipToPadding="false"
17+
android:elevation="@dimen/tab_elevation"
18+
app:tabBackground="?attr/selectableItemBackground"
19+
app:tabGravity="center"
20+
app:tabIndicatorHeight="@dimen/tab_indicator_height"
21+
app:tabMaxWidth="@dimen/tab_max_width"
22+
app:tabMinWidth="@dimen/tab_min_width"
23+
app:tabMode="scrollable"
24+
app:tabSelectedTextColor="@android:color/white"
25+
tools:targetApi="lollipop" />
26+
27+
<android.support.v4.view.ViewPager
28+
android:id="@+id/viewpager"
29+
android:layout_width="match_parent"
30+
android:layout_height="wrap_content"
31+
android:layout_below="@+id/filter_bar"
32+
android:background="@android:color/white" />
33+
34+
</android.support.design.widget.AppBarLayout>

0 commit comments

Comments
 (0)