Skip to content

Commit 4dcc0ab

Browse files
committed
Filters
1 parent d485270 commit 4dcc0ab

File tree

8 files changed

+97
-7
lines changed

8 files changed

+97
-7
lines changed

app/app/src/main/java/nl/gardensnakes/ukrainefield/BookmarkFragment.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import com.google.firebase.analytics.FirebaseAnalytics
1212
import nl.gardensnakes.ukrainefield.data.remote.SavedPreferences
1313
import nl.gardensnakes.ukrainefield.helper.BookmarkHelper
1414
import nl.gardensnakes.ukrainefield.helper.FirebaseHelper
15+
import nl.gardensnakes.ukrainefield.helper.NewsFeedHelper
1516
import nl.gardensnakes.ukrainefield.view.adapter.FeedCardAdapter
1617

1718
class BookmarkFragment : Fragment() {
@@ -41,16 +42,16 @@ class BookmarkFragment : Fragment() {
4142
feedRecyclerView = view.findViewById(R.id.bookmark_recycler_view)
4243
noBookmarksText = view.findViewById(R.id.bookmark_no_bookmark_text)
4344

44-
val bookmarkedItems = BookmarkHelper().getAll(view.context)
45-
46-
if(bookmarkedItems == null || bookmarkedItems.isEmpty()){
45+
val bookmarkedItems = BookmarkHelper().getAll(view.context) ?: emptyList()
46+
val filteredBookmarks = NewsFeedHelper.filterSourcesBasedOnPreferences(bookmarkedItems.sortedByDescending { it.epochTime}, requireContext())
47+
if(filteredBookmarks.isEmpty()){
4748
noBookmarksText.visibility = View.VISIBLE
4849
feedRecyclerView.visibility = View.GONE
4950
}
5051
else {
5152
noBookmarksText.visibility = View.GONE
5253
feedRecyclerView.visibility = View.VISIBLE
53-
feedCardAdapter = FeedCardAdapter(bookmarkedItems.sortedByDescending { it.epochTime}, mFirebaseAnalytics, true)
54+
feedCardAdapter = FeedCardAdapter(filteredBookmarks, mFirebaseAnalytics, true)
5455
feedRecyclerView.adapter = feedCardAdapter
5556
feedRecyclerView.layoutManager = LinearLayoutManager(view.context);
5657
}

app/app/src/main/java/nl/gardensnakes/ukrainefield/NewsFeedFragment.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.os.Bundle
55
import android.view.LayoutInflater
66
import android.view.View
77
import android.view.ViewGroup
8+
import android.widget.TextView
89
import androidx.fragment.app.Fragment
910
import androidx.recyclerview.widget.LinearLayoutManager
1011
import androidx.recyclerview.widget.RecyclerView
@@ -14,6 +15,7 @@ import kotlinx.coroutines.*
1415
import nl.gardensnakes.ukrainefield.data.remote.FeedService
1516
import nl.gardensnakes.ukrainefield.data.remote.SavedPreferences
1617
import nl.gardensnakes.ukrainefield.helper.FirebaseHelper
18+
import nl.gardensnakes.ukrainefield.helper.NewsFeedHelper
1719
import nl.gardensnakes.ukrainefield.helper.SwipeRefreshHelper
1820
import nl.gardensnakes.ukrainefield.view.adapter.FeedCardAdapter
1921

@@ -31,6 +33,8 @@ class NewsFeedFragment : Fragment() {
3133
private var useProxyServer: Boolean = false
3234
private lateinit var mFirebaseAnalytics: FirebaseAnalytics
3335

36+
private lateinit var noNewsText: TextView
37+
3438
override fun onCreate(savedInstanceState: Bundle?) {
3539
super.onCreate(savedInstanceState)
3640
}
@@ -49,6 +53,7 @@ class NewsFeedFragment : Fragment() {
4953

5054
swipeRefreshLayout = view.findViewById(R.id.newsfeed_refresh_layout)
5155
feedRecyclerView = view.findViewById(R.id.newsfeed_recycle_view)
56+
noNewsText = view.findViewById(R.id.feed_no_news_found)
5257

5358
feedCardAdapter = FeedCardAdapter(emptyList(), mFirebaseAnalytics)
5459
feedRecyclerView.adapter = feedCardAdapter
@@ -72,9 +77,16 @@ class NewsFeedFragment : Fragment() {
7277
val feedData = feedService.getAllFeed()
7378
swipeRefreshLayout.isRefreshing = false
7479
if(feedData != null && context != null) {
75-
feedCardAdapter = FeedCardAdapter(feedData.messages, mFirebaseAnalytics)
76-
feedRecyclerView.adapter = feedCardAdapter
77-
feedRecyclerView.layoutManager = LinearLayoutManager(requireView().context);
80+
var filteredNews = NewsFeedHelper.filterSourcesBasedOnPreferences(feedData.messages, requireContext())
81+
if(filteredNews.isEmpty()){
82+
noNewsText.visibility = View.VISIBLE
83+
feedRecyclerView.visibility = View.GONE
84+
}
85+
else {
86+
feedCardAdapter = FeedCardAdapter(filteredNews, mFirebaseAnalytics)
87+
feedRecyclerView.adapter = feedCardAdapter
88+
feedRecyclerView.layoutManager = LinearLayoutManager(requireView().context);
89+
}
7890
}
7991
}
8092
jobs.add(job)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package nl.gardensnakes.ukrainefield.helper
2+
3+
import android.content.Context
4+
import nl.gardensnakes.ukrainefield.data.remote.dto.feed.FeedMessageResponse
5+
6+
class NewsFeedHelper {
7+
8+
companion object {
9+
fun filterSourcesBasedOnPreferences(messages: List<FeedMessageResponse>, context: Context ): List<FeedMessageResponse> {
10+
var filteredMessages = messages;
11+
if(!PreferenceHelper.shouldShowRussianSources(context)){
12+
filteredMessages = removeMessagesWithCategory(filteredMessages, "russia")
13+
}
14+
if(!PreferenceHelper.shouldShowUkrainianSources(context)){
15+
filteredMessages = removeMessagesWithCategory(filteredMessages, "ukraine")
16+
}
17+
return filteredMessages
18+
}
19+
private fun removeMessagesWithCategory(messages: List<FeedMessageResponse>, category: String): List<FeedMessageResponse> {
20+
return messages.filter { message -> message.categories.indexOf(category) == -1 }
21+
}
22+
}
23+
}

app/app/src/main/java/nl/gardensnakes/ukrainefield/helper/PreferenceHelper.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,13 @@ class PreferenceHelper {
99
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
1010
return sharedPreferences.getBoolean("autoplayVideos", true)
1111
}
12+
fun shouldShowRussianSources(context: Context): Boolean {
13+
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
14+
return sharedPreferences.getBoolean("russianNewsSources", false)
15+
}
16+
fun shouldShowUkrainianSources(context: Context): Boolean {
17+
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context)
18+
return sharedPreferences.getBoolean("ukraineNewsSources", true)
19+
}
1220
}
1321
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
2+
android:width="24dp"
3+
android:height="24dp"
4+
android:viewportWidth="24"
5+
android:viewportHeight="24"
6+
android:tint="?attr/colorControlNormal">
7+
<path
8+
android:fillColor="@android:color/white"
9+
android:pathData="M19,3H5C3.89,3 3,3.9 3,5v14c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2V5C21,3.9 20.11,3 19,3zM19,19H5V7h14V19zM17,12H7v-2h10V12zM13,16H7v-2h6V16z"/>
10+
</vector>

app/app/src/main/res/layout/fragment_newsfeed.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,21 @@
1111
android:layout_height="match_parent"
1212
android:layout_width="match_parent">
1313

14+
<TextView
15+
android:id="@+id/feed_no_news_found"
16+
android:visibility="gone"
17+
android:layout_width="wrap_content"
18+
android:layout_height="wrap_content"
19+
android:fontFamily="@font/roboto_medium"
20+
android:text="@string/no_news_found"
21+
android:textAlignment="center"
22+
android:textSize="24sp"
23+
app:layout_constraintBottom_toBottomOf="parent"
24+
app:layout_constraintEnd_toEndOf="parent"
25+
app:layout_constraintHorizontal_bias="0.5"
26+
app:layout_constraintStart_toStartOf="parent"
27+
app:layout_constraintTop_toTopOf="parent" />
28+
1429
<androidx.recyclerview.widget.RecyclerView
1530
android:id="@+id/newsfeed_recycle_view"
1631
android:layout_width="match_parent"

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,8 @@
2727
<string name="twitter_summary">Twitter is the place where we make announcements about the app</string>
2828
<string name="twitter_title">Twitter account</string>
2929
<string name="version">Version:</string>
30+
<string name="news_sources">News sources</string>
31+
<string name="show_russian_sources">Show Russian news sources</string>
32+
<string name="show_ukraine_sources">Show Ukrainian news sources</string>
33+
<string name="no_news_found">No news found, try changing your filters on the Settings page</string>
3034
</resources>

app/app/src/main/res/xml/settings.xml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,23 @@
1212
app:defaultValue="true"/>
1313
</PreferenceCategory>
1414

15+
<PreferenceCategory
16+
app:key="sources_category"
17+
app:icon="@drawable/ic_baseline_wysiwyg_24"
18+
app:title="@string/news_sources">
19+
20+
21+
<SwitchPreferenceCompat
22+
app:key="russianNewsSources"
23+
app:title="@string/show_russian_sources"
24+
app:defaultValue="false"/>
25+
<SwitchPreferenceCompat
26+
app:key="ukraineNewsSources"
27+
app:title="@string/show_ukraine_sources"
28+
app:defaultValue="true"/>
29+
</PreferenceCategory>
30+
31+
1532
<PreferenceCategory
1633
app:key="bookmarks_category"
1734
app:icon="@drawable/ic_baseline_bookmark_24"

0 commit comments

Comments
 (0)