Browse Source

Added and use Flickr search library in the app, and fixed found problems in the library

Ana Sekuloski 3 năm trước cách đây
mục cha
commit
28d1946d2d

+ 7 - 0
app/build.gradle

@@ -38,6 +38,13 @@ dependencies {
     implementation 'com.google.android.material:material:1.5.0'
     implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
 
+    // View model lifecycle
+    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0"
+    implementation "androidx.fragment:fragment-ktx:1.4.1"
+
+    // Flickr search library
+    implementation project(path: ':flickersearchlibrary')
+
     androidTestImplementation 'androidx.test.ext:junit:1.1.3'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
 }

+ 2 - 0
app/src/main/AndroidManifest.xml

@@ -2,6 +2,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.livelike.livelikeandroidchallenge">
 
+    <uses-permission android:name="android.permission.INTERNET" />
+
     <application
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"

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

@@ -0,0 +1,20 @@
+package com.livelike.livelikeandroidchallenge
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.livelike.flickersearchlibrary.Flickr
+import com.livelike.flickersearchlibrary.api.model.PhotosPage
+import kotlinx.coroutines.launch
+
+class FlickrServiceViewModel : ViewModel() {
+
+    private val _photosPage = MutableLiveData<PhotosPage>()
+    val photosPage: LiveData<PhotosPage> = _photosPage
+
+    fun searchFlickrPhotos(searchQuery: String) = viewModelScope.launch {
+        _photosPage.postValue(Flickr.search(searchQuery))
+    }
+
+}

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

@@ -1,11 +1,25 @@
 package com.livelike.livelikeandroidchallenge
 
-import androidx.appcompat.app.AppCompatActivity
 import android.os.Bundle
+import android.util.Log
+import androidx.activity.viewModels
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.lifecycleScope
 
 class MainActivity : AppCompatActivity() {
+
+    private val viewModel: FlickrServiceViewModel by viewModels()
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
+
+        viewModel.photosPage.observe(this) {
+            Log.d("LiveLikeTest: ", "Received result: $it")
+        }
+
+        lifecycleScope.launchWhenCreated {
+            viewModel.searchFlickrPhotos("test")
+        }
     }
 }

+ 1 - 0
flickersearchlibrary/build.gradle

@@ -1,5 +1,6 @@
 plugins {
     id 'com.android.library'
+    id 'kotlin-android'
 }
 
 android {

+ 2 - 0
flickersearchlibrary/src/main/AndroidManifest.xml

@@ -2,4 +2,6 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.livelike.flickersearchlibrary">
 
+    <uses-permission android:name="android.permission.INTERNET" />
+
 </manifest>

+ 1 - 1
flickersearchlibrary/src/main/java/com/livelike/flickersearchlibrary/api/FlickrApi.kt

@@ -10,7 +10,7 @@ import retrofit2.http.Query
  */
 internal interface FlickrApi {
 
-    @GET
+    @GET(".")
     suspend fun search(
         @Query(QUERY_TEXT) searchQuery: String,
         @Query(QUERY_METHOD) method: String = SEARCH_METHOD,

+ 9 - 3
flickersearchlibrary/src/main/java/com/livelike/flickersearchlibrary/di/Dependencies.kt

@@ -2,7 +2,10 @@ package com.livelike.flickersearchlibrary.di
 
 import com.livelike.flickersearchlibrary.api.FlickrApi
 import com.livelike.flickersearchlibrary.api.utils.BASE_URL
+import com.livelike.flickersearchlibrary.service.FlickrService
 import com.livelike.flickersearchlibrary.service.logic.FlickrServiceLogic
+import com.squareup.moshi.Moshi
+import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
 import org.koin.core.context.startKoin
 import org.koin.dsl.module
 import retrofit2.Retrofit
@@ -15,15 +18,18 @@ internal object Dependencies {
 
     private val flickrModule = module {
 
-        single {
+        single<FlickrApi> {
+            val moshi = Moshi.Builder()
+                .add(KotlinJsonAdapterFactory())
+                .build()
             val retrofit = Retrofit.Builder()
                 .baseUrl(BASE_URL)
-                .addConverterFactory(MoshiConverterFactory.create())
+                .addConverterFactory(MoshiConverterFactory.create(moshi))
                 .build()
             retrofit.create(FlickrApi::class.java)
         }
 
-        single { FlickrServiceLogic(get()) }
+        single<FlickrService> { FlickrServiceLogic(get()) }
 
     }