Skip to content

Commit 7f7ee43

Browse files
dr0pdbiamareebjamal
authored andcommitted
feat: Add Featured speakers in AboutFragment (fossasia#2302)
1 parent f60d3e4 commit 7f7ee43

File tree

7 files changed

+102
-48
lines changed

7 files changed

+102
-48
lines changed

android/app/src/main/java/org/fossasia/openevent/core/about/AboutFragment.java

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
package org.fossasia.openevent.core.about;
22

33
import android.annotation.TargetApi;
4-
import android.support.annotation.NonNull;
5-
import android.support.v4.app.Fragment;
6-
import android.support.v4.app.FragmentTransaction;
74
import android.arch.lifecycle.ViewModelProviders;
85
import android.content.ClipData;
96
import android.content.ClipboardManager;
107
import android.content.Context;
118
import android.content.Intent;
129
import android.os.Bundle;
10+
import android.support.annotation.NonNull;
1311
import android.support.annotation.Nullable;
1412
import android.support.design.widget.CoordinatorLayout;
1513
import android.support.design.widget.Snackbar;
14+
import android.support.v4.app.Fragment;
15+
import android.support.v4.app.FragmentTransaction;
1616
import android.support.v7.app.AlertDialog;
17+
import android.support.v7.widget.DefaultItemAnimator;
1718
import android.support.v7.widget.DividerItemDecoration;
1819
import android.support.v7.widget.LinearLayoutManager;
1920
import android.support.v7.widget.RecyclerView;
@@ -37,23 +38,25 @@
3738

3839
import org.fossasia.openevent.OpenEventApp;
3940
import org.fossasia.openevent.R;
41+
import org.fossasia.openevent.common.ConstantStrings;
42+
import org.fossasia.openevent.common.date.DateConverter;
43+
import org.fossasia.openevent.common.events.BookmarkChangedEvent;
44+
import org.fossasia.openevent.common.events.EventLoadedEvent;
45+
import org.fossasia.openevent.common.ui.SnackbarUtil;
46+
import org.fossasia.openevent.common.ui.Views;
4047
import org.fossasia.openevent.common.ui.base.BaseFragment;
48+
import org.fossasia.openevent.common.utils.Utils;
4149
import org.fossasia.openevent.core.bookmark.BookmarkStatus;
50+
import org.fossasia.openevent.core.bookmark.OnBookmarkSelectedListener;
4251
import org.fossasia.openevent.core.main.MainActivity;
43-
import org.fossasia.openevent.core.search.SearchActivity;
4452
import org.fossasia.openevent.core.search.GlobalSearchAdapter;
53+
import org.fossasia.openevent.core.search.SearchActivity;
54+
import org.fossasia.openevent.core.track.session.SessionSpeakerListAdapter;
4555
import org.fossasia.openevent.data.Event;
56+
import org.fossasia.openevent.data.Speaker;
4657
import org.fossasia.openevent.data.extras.Copyright;
4758
import org.fossasia.openevent.data.extras.SocialLink;
4859
import org.fossasia.openevent.data.extras.SpeakersCall;
49-
import org.fossasia.openevent.common.events.BookmarkChangedEvent;
50-
import org.fossasia.openevent.common.events.EventLoadedEvent;
51-
import org.fossasia.openevent.common.ConstantStrings;
52-
import org.fossasia.openevent.core.bookmark.OnBookmarkSelectedListener;
53-
import org.fossasia.openevent.common.date.DateConverter;
54-
import org.fossasia.openevent.common.ui.SnackbarUtil;
55-
import org.fossasia.openevent.common.utils.Utils;
56-
import org.fossasia.openevent.common.ui.Views;
5760

5861
import java.util.ArrayList;
5962
import java.util.List;
@@ -95,14 +98,20 @@ public class AboutFragment extends BaseFragment implements OnBookmarkSelectedLis
9598
protected LinearLayout eventLoc;
9699
@BindView(R.id.coordinate_layout_about)
97100
protected CoordinatorLayout coordinatorLayoutParent;
101+
@BindView(R.id.featured_speakers_header)
102+
protected TextView featuredSpeakersHeader;
103+
@BindView(R.id.list_featured_speakers)
104+
protected RecyclerView featuresSpeakersRecyclerView;
98105

99106
private Context context;
100107
private View root;
101108
private GlobalSearchAdapter bookMarksListAdapter;
102109
private SocialLinksListAdapter socialLinksListAdapter;
110+
private SessionSpeakerListAdapter featuredSpeakersListAdapter;
103111

104112
private final List<Object> sessions = new ArrayList<>();
105113
private final List<SocialLink> socialLinks = new ArrayList<>();
114+
private final List<Speaker> featuredSpeakers = new ArrayList<>();
106115
private static final String MAP_FRAGMENT_TAG = "mapFragment";
107116

108117
private Event event;
@@ -122,6 +131,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
122131

123132
setUpBookmarksRecyclerView();
124133
setUpSocialLinksRecyclerView();
134+
setUpFeaturedSpeakersRecyclerView();
125135

126136
eventLoc.setOnClickListener(v -> {
127137
if (event.isValid()) {
@@ -195,6 +205,15 @@ private void setUpSocialLinksRecyclerView() {
195205
socialLinksRecyclerView.setNestedScrollingEnabled(false);
196206
}
197207

208+
private void setUpFeaturedSpeakersRecyclerView() {
209+
featuresSpeakersRecyclerView.setVisibility(View.VISIBLE);
210+
featuredSpeakersListAdapter = new SessionSpeakerListAdapter(featuredSpeakers);
211+
featuresSpeakersRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
212+
featuresSpeakersRecyclerView.setNestedScrollingEnabled(false);
213+
featuresSpeakersRecyclerView.setAdapter(featuredSpeakersListAdapter);
214+
featuresSpeakersRecyclerView.setItemAnimator(new DefaultItemAnimator());
215+
}
216+
198217
private void loadEvent(Event event) {
199218
if (event == null || !event.isValid())
200219
return;
@@ -386,6 +405,14 @@ private void handleVisibility() {
386405
bookmarksRecyclerView.setVisibility(View.GONE);
387406
bookmarkHeader.setVisibility(View.GONE);
388407
}
408+
409+
if (!featuredSpeakers.isEmpty()) {
410+
featuredSpeakersHeader.setVisibility(View.VISIBLE);
411+
featuresSpeakersRecyclerView.setVisibility(View.VISIBLE);
412+
} else {
413+
featuredSpeakersHeader.setVisibility(View.GONE);
414+
featuresSpeakersRecyclerView.setVisibility(View.GONE);
415+
}
389416
}
390417

391418
private void loadData() {
@@ -397,6 +424,13 @@ private void loadData() {
397424
bookmarksRecyclerView.setAdapter(bookMarksListAdapter);
398425
handleVisibility();
399426
});
427+
428+
aboutFragmentViewModel.getFeaturedSpeakers().observe(this, featuredSpeakersList -> {
429+
featuredSpeakers.clear();
430+
featuredSpeakers.addAll(featuredSpeakersList);
431+
featuredSpeakersListAdapter.notifyDataSetChanged();
432+
handleVisibility();
433+
});
400434
}
401435

402436
@Override

android/app/src/main/java/org/fossasia/openevent/core/about/AboutFragmentViewModel.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.fossasia.openevent.common.date.DateConverter;
99
import org.fossasia.openevent.data.Event;
1010
import org.fossasia.openevent.data.Session;
11+
import org.fossasia.openevent.data.Speaker;
1112
import org.fossasia.openevent.data.extras.EventDates;
1213
import org.fossasia.openevent.data.repository.RealmDataRepository;
1314
import org.threeten.bp.format.DateTimeParseException;
@@ -23,6 +24,7 @@ public class AboutFragmentViewModel extends ViewModel {
2324
private LiveData<List<Object>> sessions;
2425
private List<String> dateList;
2526
private LiveData<Event> eventLiveData;
27+
private LiveData<List<Speaker>> featuredSpeakers;
2628

2729
public AboutFragmentViewModel() {
2830
realmRepo = RealmDataRepository.getDefaultInstance();
@@ -77,4 +79,11 @@ private List<Object> getSessionsList(RealmResults<Session> bookmarked) {
7779
return sessionsList;
7880
}
7981

82+
public LiveData<List<Speaker>> getFeaturedSpeakers() {
83+
if (featuredSpeakers == null) {
84+
LiveRealmData<Speaker> featuredSpeakersLiveData = RealmDataRepository.asLiveData(realmRepo.getFeaturedSpeakers());
85+
featuredSpeakers = Transformations.map(featuredSpeakersLiveData, input -> input);
86+
}
87+
return featuredSpeakers;
88+
}
8089
}

android/app/src/main/java/org/fossasia/openevent/data/repository/RealmDataRepository.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66
import org.fossasia.openevent.common.arch.FilterableRealmLiveData;
77
import org.fossasia.openevent.common.arch.LiveRealmData;
88
import org.fossasia.openevent.common.arch.LiveRealmDataObject;
9+
import org.fossasia.openevent.common.events.BookmarkChangedEvent;
10+
import org.fossasia.openevent.core.auth.model.User;
911
import org.fossasia.openevent.data.Event;
1012
import org.fossasia.openevent.data.Microlocation;
1113
import org.fossasia.openevent.data.Session;
1214
import org.fossasia.openevent.data.SessionType;
1315
import org.fossasia.openevent.data.Speaker;
1416
import org.fossasia.openevent.data.Sponsor;
1517
import org.fossasia.openevent.data.Track;
16-
import org.fossasia.openevent.core.auth.model.User;
1718
import org.fossasia.openevent.data.extras.EventDates;
18-
import org.fossasia.openevent.common.events.BookmarkChangedEvent;
1919

2020
import java.util.HashMap;
2121
import java.util.List;
@@ -476,6 +476,12 @@ public RealmResults<Speaker> getSpeakersFiltered(String query, String sortCriter
476476
.findAllSorted(sortCriteria);
477477
}
478478

479+
public RealmResults<Speaker> getFeaturedSpeakers() {
480+
return realm.where(Speaker.class)
481+
.equalTo("isFeatured", true)
482+
.findAllAsync();
483+
}
484+
479485
// Sponsors Section
480486

481487
private void saveSponsorsInRealm(List<Sponsor> sponsors) {

android/app/src/main/res/layout/content_about_event.xml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,42 @@
204204

205205
</LinearLayout>
206206

207+
<TextView
208+
android:id="@+id/featured_speakers_header"
209+
android:layout_width="match_parent"
210+
android:layout_height="wrap_content"
211+
android:background="@color/color_accent"
212+
android:padding="@dimen/padding_medium"
213+
android:text="@string/featured_speakers_header"
214+
android:textColor="@color/card_title"
215+
android:textSize="@dimen/text_size_extra_large"
216+
android:textStyle="bold" />
217+
218+
<android.support.v7.widget.RecyclerView
219+
android:id="@+id/list_featured_speakers"
220+
android:layout_width="match_parent"
221+
android:layout_height="wrap_content"
222+
android:clipToPadding="false"
223+
tools:listitem="@layout/item_speaker"/>
224+
225+
<LinearLayout
226+
android:id="@+id/images"
227+
android:layout_width="match_parent"
228+
android:layout_height="wrap_content"
229+
android:layout_gravity="center|fill_horizontal"
230+
android:background="@color/color_accent"
231+
android:gravity="center_horizontal"
232+
android:orientation="horizontal">
207233

234+
<android.support.v7.widget.RecyclerView
235+
android:id="@+id/list_social_links"
236+
android:layout_width="wrap_content"
237+
android:layout_height="wrap_content"
238+
android:layout_gravity="center"
239+
android:clipToPadding="false"
240+
android:overScrollMode="never"
241+
tools:listitem="@layout/item_social_link" />
242+
</LinearLayout>
208243

209244
</LinearLayout>
210245
</LinearLayout>
Lines changed: 3 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,8 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<RelativeLayout
3-
xmlns:android="http://schemas.android.com/apk/res/android"
4-
xmlns:tools="http://schemas.android.com/tools"
2+
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
53
android:layout_width="match_parent"
64
android:background="@color/white"
75
android:layout_height="match_parent">
8-
<android.support.design.widget.CoordinatorLayout
9-
android:id="@+id/cordinate"
10-
android:layout_width="match_parent"
11-
android:layout_marginBottom="@dimen/mainlayout_bottom_margin"
12-
android:layout_height="wrap_content">
136

147
<android.support.v4.widget.NestedScrollView
158
android:layout_width="match_parent"
@@ -19,7 +12,8 @@
1912
android:layout_width="match_parent"
2013
android:layout_height="wrap_content"
2114
android:background="@color/white"
22-
android:orientation="vertical">
15+
android:orientation="vertical"
16+
android:descendantFocusability="blocksDescendants">
2317

2418
<TextView
2519
android:id="@+id/bookmark_header"
@@ -40,31 +34,7 @@
4034

4135

4236
<include layout="@layout/content_about_event" />
43-
44-
4537
</LinearLayout>
4638

4739
</android.support.v4.widget.NestedScrollView>
4840
</android.support.design.widget.CoordinatorLayout>
49-
<LinearLayout
50-
android:id="@+id/images"
51-
android:layout_alignParentBottom="true"
52-
android:layout_alignBottom="@+id/cordinate"
53-
android:layout_width="match_parent"
54-
android:layout_height="wrap_content"
55-
android:layout_gravity="center|fill_horizontal"
56-
android:background="@color/color_accent"
57-
android:gravity="center_horizontal"
58-
android:orientation="horizontal">
59-
60-
<android.support.v7.widget.RecyclerView
61-
android:id="@+id/list_social_links"
62-
android:layout_width="wrap_content"
63-
android:layout_height="wrap_content"
64-
android:layout_gravity="center"
65-
android:clipToPadding="false"
66-
android:overScrollMode="never"
67-
tools:listitem="@layout/item_social_link" />
68-
</LinearLayout>
69-
70-
</RelativeLayout>

android/app/src/main/res/values/dimens.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
<dimen name="top_progressbar_margin">-10dp</dimen>
6868
<dimen name="bottom_progressbar_margin">-6dp</dimen>
6969
<dimen name="session_status_margin">60dp</dimen>
70-
<dimen name="mainlayout_bottom_margin">55dp</dimen>
7170

7271
<!-- padding specifics -->
7372
<dimen name="padding_extra_small">2dp</dimen>

android/app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,5 +329,6 @@
329329
<string name="about_fragment_from_date_event">From: %s</string>
330330

331331
<string name="twitter_feed">Twitter Feed</string>
332+
<string name="featured_speakers_header">Featured Speakers</string>
332333

333334
</resources>

0 commit comments

Comments
 (0)