Skip to content

Commit 57bf506

Browse files
Merge pull request #83 from MihaiCristianCondrea/codex/implement-search-functionality-in-homefragment
Add search filtering to home screen
2 parents d8011dd + bcada37 commit 57bf506

File tree

29 files changed

+109
-14
lines changed

29 files changed

+109
-14
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeFragment.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import androidx.annotation.NonNull;
99
import androidx.annotation.Nullable;
10+
import androidx.appcompat.widget.SearchView;
1011
import androidx.fragment.app.Fragment;
1112
import androidx.lifecycle.ViewModelProvider;
1213

@@ -39,6 +40,19 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
3940
getString(com.d4rk.androidtutorials.java.R.string.announcement_title),
4041
getString(com.d4rk.androidtutorials.java.R.string.announcement_subtitle)
4142
);
43+
binding.searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
44+
@Override
45+
public boolean onQueryTextSubmit(String query) {
46+
homeViewModel.setSearchQuery(query);
47+
return true;
48+
}
49+
50+
@Override
51+
public boolean onQueryTextChange(String newText) {
52+
homeViewModel.setSearchQuery(newText);
53+
return true;
54+
}
55+
});
4256
LayoutInflater inflater = LayoutInflater.from(requireContext());
4357
homeViewModel.getUiState().observe(getViewLifecycleOwner(), state -> {
4458
binding.announcementTitle.setText(state.announcementTitle());

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/home/HomeViewModel.java

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public class HomeViewModel extends ViewModel {
2929
private final GetAppPlayStoreUrlUseCase getAppPlayStoreUrlUseCase;
3030

3131
private final MutableLiveData<HomeUiState> uiState = new MutableLiveData<>();
32+
private final MutableLiveData<String> searchQuery = new MutableLiveData<>("");
33+
private List<PromotedApp> allPromotedApps = new ArrayList<>();
3234

3335
@Inject
3436
public HomeViewModel(GetDailyTipUseCase getDailyTipUseCase,
@@ -59,18 +61,8 @@ public HomeViewModel(GetDailyTipUseCase getDailyTipUseCase,
5961
result.add(apps.get((startIndex + i) % apps.size()));
6062
}
6163
}
62-
HomeUiState current = uiState.getValue();
63-
if (current == null) {
64-
current = new HomeUiState("", "", "", result);
65-
} else {
66-
current = new HomeUiState(
67-
current.announcementTitle(),
68-
current.announcementSubtitle(),
69-
current.dailyTip(),
70-
result
71-
);
72-
}
73-
uiState.postValue(current);
64+
allPromotedApps = result;
65+
filterPromotedApps();
7466
});
7567
}
7668

@@ -84,6 +76,34 @@ public void setAnnouncements(String title, String subtitle) {
8476
uiState.setValue(current);
8577
}
8678

79+
public void setSearchQuery(String query) {
80+
searchQuery.setValue(query);
81+
filterPromotedApps();
82+
}
83+
84+
private void filterPromotedApps() {
85+
String query = searchQuery.getValue();
86+
List<PromotedApp> filtered = new ArrayList<>();
87+
for (PromotedApp app : allPromotedApps) {
88+
if (query == null || query.isEmpty() ||
89+
app.name().toLowerCase().contains(query.toLowerCase())) {
90+
filtered.add(app);
91+
}
92+
}
93+
HomeUiState current = uiState.getValue();
94+
if (current == null) {
95+
current = new HomeUiState("", "", getDailyTipUseCase.invoke(), filtered);
96+
} else {
97+
current = new HomeUiState(
98+
current.announcementTitle(),
99+
current.announcementSubtitle(),
100+
current.dailyTip(),
101+
filtered
102+
);
103+
}
104+
uiState.postValue(current);
105+
}
106+
87107
/**
88108
* Exposes the UI state for the Home screen.
89109
*/

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,15 @@
168168
android:text="@string/other_apps_title"
169169
android:textAppearance="@style/TextAppearance.Material3.TitleMedium" />
170170

171+
<androidx.appcompat.widget.SearchView
172+
android:id="@+id/search_view"
173+
android:layout_width="match_parent"
174+
android:layout_height="wrap_content"
175+
android:layout_marginBottom="8dp"
176+
android:queryHint="@string/search_tutorials_hint"
177+
android:contentDescription="@string/search_tutorials_content_description"
178+
android:iconifiedByDefault="false" />
179+
171180
<HorizontalScrollView
172181
android:layout_width="match_parent"
173182
android:layout_height="wrap_content"

app/src/main/res/values-ar-rEG/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
<string name="get_on_google_play">نزّله من على Google Play</string>
2020
<string name="learn_more">اعرف المزيد</string>
2121
<string name="play_store">متجر Play</string>
22+
<string name="search_tutorials_hint">ابحث عن الدروس</string>
23+
<string name="search_tutorials_content_description">ابحث عن الدروس</string>
2224

2325
<string name="android_studio">أندرويد ستوديو</string>
2426

app/src/main/res/values-bg-rBG/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
<string name="get_on_google_play">Вземете от Google Play</string>
2020
<string name="learn_more">Научете повече</string>
2121
<string name="play_store">Play Store</string>
22+
<string name="search_tutorials_hint">Търсене на уроци</string>
23+
<string name="search_tutorials_content_description">Търсене на уроци</string>
2224

2325
<string name="android_studio">Android Studio</string>
2426

app/src/main/res/values-bn-rBD/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
<string name="get_on_google_play">গুগল প্লে থেকে পান</string>
2020
<string name="learn_more">আরও জানুন</string>
2121
<string name="play_store">প্লে স্টোর</string>
22+
<string name="search_tutorials_hint">টিউটোরিয়াল খুঁজুন</string>
23+
<string name="search_tutorials_content_description">টিউটোরিয়াল খুঁজুন</string>
2224

2325
<string name="android_studio">অ্যান্ড্রয়েড স্টুডিও</string>
2426

app/src/main/res/values-de-rDE/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
<string name="get_on_google_play">Jetzt bei Google Play</string>
2020
<string name="learn_more">Mehr erfahren</string>
2121
<string name="play_store">Play Store</string>
22+
<string name="search_tutorials_hint">Tutorials suchen</string>
23+
<string name="search_tutorials_content_description">Tutorials suchen</string>
2224

2325
<string name="android_studio">Android Studio</string>
2426

app/src/main/res/values-es-rGQ/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
<string name="get_on_google_play">Consíguelo en Google Play</string>
2020
<string name="learn_more">Más información</string>
2121
<string name="play_store">Play Store</string>
22+
<string name="search_tutorials_hint">Buscar tutoriales</string>
23+
<string name="search_tutorials_content_description">Buscar tutoriales</string>
2224

2325
<string name="android_studio">Android Studio</string>
2426

app/src/main/res/values-es-rMX/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
<string name="get_on_google_play">Descárgala en Google Play</string>
2020
<string name="learn_more">Más información</string>
2121
<string name="play_store">Play Store</string>
22+
<string name="search_tutorials_hint">Buscar tutoriales</string>
23+
<string name="search_tutorials_content_description">Buscar tutoriales</string>
2224

2325
<string name="android_studio">Android Studio</string>
2426

app/src/main/res/values-fil-rPH/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
<string name="get_on_google_play">Kunin ito sa Google Play</string>
2020
<string name="learn_more">Matuto pa</string>
2121
<string name="play_store">Play Store</string>
22+
<string name="search_tutorials_hint">Maghanap ng mga tutorial</string>
23+
<string name="search_tutorials_content_description">Maghanap ng mga tutorial</string>
2224

2325
<string name="android_studio">Android Studio</string>
2426

0 commit comments

Comments
 (0)