瀏覽代碼

Added possibility to provide nullable search query in FlickrService

Ana Sekuloski 3 年之前
父節點
當前提交
9bff5aba33

+ 1 - 1
app/src/main/java/com/livelike/livelikeandroidchallenge/FlickrServiceViewModel.kt

@@ -13,7 +13,7 @@ class FlickrServiceViewModel : ViewModel() {
     private val _photos = MutableLiveData<List<Photo>>()
     val photos: LiveData<List<Photo>> = _photos
 
-    fun searchFlickrPhotos(searchQuery: String) = viewModelScope.launch {
+    fun searchFlickrPhotos(searchQuery: String?) = viewModelScope.launch {
         _photos.postValue(Flickr.search(searchQuery))
     }
 

+ 1 - 1
app/src/main/java/com/livelike/livelikeandroidchallenge/MainActivity.kt

@@ -19,7 +19,7 @@ class MainActivity : AppCompatActivity() {
         }
 
         lifecycleScope.launchWhenCreated {
-            viewModel.searchFlickrPhotos("test")
+            viewModel.searchFlickrPhotos(null)
         }
     }
 }

+ 5 - 5
flickersearchlibrary/src/main/java/com/livelike/flickersearchlibrary/Flickr.kt

@@ -1,6 +1,5 @@
 package com.livelike.flickersearchlibrary
 
-import com.livelike.flickersearchlibrary.api.model.PhotosPage
 import com.livelike.flickersearchlibrary.di.Dependencies
 import com.livelike.flickersearchlibrary.service.FlickrService
 import org.koin.java.KoinJavaComponent.inject
@@ -17,11 +16,12 @@ object Flickr {
     private val flickrService: FlickrService by inject(FlickrService::class.java)
 
     /**
-     * Provides search result for given search term.
+     * Provides search results for given search term.
+     * If no search query is provided, empty results will be returned.
      *
-     * @param searchQuery [String] the search term.
-     * @return [PhotosPage] search results page.
+     * @param searchQuery [String] the search term for which photo results should be returned.
+     * @return [List] of [Photo]s matching the given search term, or empty results if no term is provided.
      */
-    suspend fun search(searchQuery: String) = flickrService.search(searchQuery)
+    suspend fun search(searchQuery: String?) = flickrService.search(searchQuery)
 
 }

+ 3 - 2
flickersearchlibrary/src/main/java/com/livelike/flickersearchlibrary/service/FlickrService.kt

@@ -9,9 +9,10 @@ interface FlickrService {
 
     /**
      * Searches for photos and retrieves [List] of [Photo]s.
+     * If no search query is provided, empty list will be returned.
      *
      * @param searchQuery [String] text query for searching photos.
-     * @return [List] of [Photo]s matching [searchQuery]
+     * @return [List] of [Photo]s matching given [searchQuery] or empty list if no query is provided.
      */
-    suspend fun search(searchQuery: String): List<Photo>
+    suspend fun search(searchQuery: String?): List<Photo>
 }

+ 7 - 4
flickersearchlibrary/src/main/java/com/livelike/flickersearchlibrary/service/logic/FlickrServiceLogic.kt

@@ -14,7 +14,13 @@ internal class FlickrServiceLogic(private val api: FlickrApi) : FlickrService {
 
     private val LOG_TAG = "FlickrService"
 
-    override suspend fun search(searchQuery: String): List<Photo> {
+    override suspend fun search(searchQuery: String?) =
+        searchQuery?.let {
+            updateCachedPhotos(searchQuery)
+            cachedPhotos
+        } ?: emptyList()
+
+    private suspend fun updateCachedPhotos(searchQuery: String) =
         runCatching {
             val response = api.search(searchQuery)
             if (response.isSuccessful) {
@@ -34,7 +40,4 @@ internal class FlickrServiceLogic(private val api: FlickrApi) : FlickrService {
                 "Exception occurred when executing API call: ${exception.message}"
             )
         }
-
-        return cachedPhotos
-    }
 }