ΠΠ°Π½Π½ΠΎΠ΅ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΠΌΠΈΡΠΎΠΌ Π°Π½ΠΈΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠΈΠ°Π»Π° Π ΠΈΠΊ ΠΈ ΠΠΎΡΡΠΈ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°Ρ , ΡΠΏΠΈΠ·ΠΎΠ΄Π°Ρ ΠΈ Π»ΠΎΠΊΠ°ΡΠΈΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ "The Rick and Morty Api".
- ΠΠ»Π°Π²Π½ΡΠΉ ΡΠΊΡΠ°Π½ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½ΠΈΠΆΠ½Π΅ΠΉ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Ρ ΡΡΠ΅ΠΌΡ Π²ΠΊΠ»Π°Π΄ΠΊΠ°ΠΌΠΈ: ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠΈ, ΡΠΏΠΈΠ·ΠΎΠ΄Ρ ΠΈ Π»ΠΎΠΊΠ°ΡΠΈΠΈ.
- ΠΠΊΡΠ°Π½ Ρ Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ ΠΎ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅, ΡΠΏΠΈΠ·ΠΎΠ΄Π΅ ΠΈ Π»ΠΎΠΊΠ°ΡΠΈΠΈ.
- Π‘ΠΏΠΈΡΠΊΠΈ Π½Π° Π³Π»Π°Π²Π½ΡΡ ΡΠΊΡΠ°Π½Π°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ Π² Π²ΠΈΠ΄Π΅ Π΄Π²ΡΡ ΡΡΠΎΠ»Π±ΡΠΎΠ².
- Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΈ ΠΏΠΎΠΈΡΠΊ Π΄Π°Π½Π½ΡΡ Π½Π° Π³Π»Π°Π²Π½ΡΡ ΡΠΊΡΠ°Π½Π°Ρ .
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠΊΡΠ°Π½Π΅ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠΌΠ°Ρ ΠΈΠ²Π°Π½ΠΈΡ ΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ· (Pull-to-Reresh).
- ΠΠ½ΠΎΠΏΠΊΠ° Π½Π°Π·Π°Π΄ Π½Π° ΡΠΊΡΠ°Π½Π°Ρ Ρ Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ.
- Π‘ΠΊΡΡΠ²Π°Π½ΠΈΠ΅ Π½ΠΈΠΆΠ½Π΅ΠΉ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Π½Π° ΡΠΊΡΠ°Π½Π°Ρ Ρ Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π±ΠΎΡΡ Π±Π΅Π· ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° ΠΏΡΡΡΠΌ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠΊΡΠ°Π½.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ Π½Π° Π³Π»Π°Π²Π½ΡΡ ΡΠΊΡΠ°Π½Π°Ρ .
- ΠΠ°Π»ΠΈΡΠΈΠ΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π° (Splash Screen).
- ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ΅ΡΡ-ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π° Π²ΡΠ΅Ρ ΡΠΊΡΠ°Π½Π°Ρ .
- Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π½Π΅ Π±ΡΠ»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π΄Π°Π½Π½ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠΈΠ»ΡΡΡΡ. (ΡΡΠΎΡΠ½Π΅Π½ΠΈΠ΅: ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Π½Π΅ Π² ΡΡΠΎΡΠΊΠ΅)
ΠΠ°ΠΊΠΈΠ΅ ΡΠ΅ΠΌΡ Π±ΡΠ»ΠΈ Π·Π°ΡΡΠΎΠ½ΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π° ΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Ρ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅
- Git
Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π²Π΅ΡΠΊΠΈ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
- Android studio
ΠΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π²Π΅Π»Π°ΡΡ Π² Android Studio, ΡΠ±ΠΎΡΡΠΈΠΊ - Gradle. Π ΡΠΎΠΌΡ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΡΠ°ΠΉΠ» Ρ ΡΠ°ΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ .toml Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ kotlin Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π°Π²ΠΈΡΠΎΠΌΡΡΠ΅ΠΉ, ΡΡΠΎ ΠΎΠ±Π»Π΅Π³ΡΠΈΠ»ΠΎ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ.
3,4) View
ΠΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±ΡΡΠ½ΡΡ view (button, edittext) ΠΈ viewgroup (linear layout, constraint layout) ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ: ChipGroup Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ°, ΠΎΠ±ΡΠΈΠΉ Searchview Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°, ΡΠ²ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Toolbar, MotionLayout Π΄Π»Ρ ΡΠ°Π·ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠΎΠ² Π½Π° ΡΠΊΡΠ°Π½Π°Ρ Ρ Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ, Coordinator Layout Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ΅Π·ΠΆΠ°ΡΡΠ΅Π³ΠΎ ΡΠΈΠ»ΡΡΡΠ°. Π₯ΠΎΡΠ΅Π»ΠΎΡΡ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΡ ΡΡ ΠΎΠΆΠ΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Material Backdrop
- Fragments
ΠΠ΅ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π½Π° ΡΠ²ΡΠ·ΠΊΠ΅ 1 activity + 6 fragments. ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Splash Screen ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Splash Screen Api, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΠ²Π»ΠΈΠ°ΡΡ Π² Android 12. ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Fragment Manager. ΠΠ° Π²ΡΡ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΠΊΠ»Π°ΡΡ Router, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ-ΡΠΎΡΡΠ΅ΡΡ Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ².
- Recycler View
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Recycler View Π΅ΡΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠΊΡΠ°Π½Π΅, ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π»ΠΈΡΡ Π°Π΄Π°ΠΏΡΠ΅ΡΡ. ΠΠ»Ρ Π³Π»Π°Π²Π½ΡΡ ΡΠΊΡΠ°Π½ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ PagingDataAdapter, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ Π±ΠΈΠ»ΠΈΠΎΡΠ΅ΠΊΠΈ Paging 3. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Layout Manager Π²ΡΡΡΡΠΏΠ°Π΅Ρ Staggerred Layout Manager. ΠΠ»Ρ ΡΠΊΡΠ°Π½ΠΎΠ² Ρ Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ List Adapter.
- Concurrency
ΠΠ° ΡΠΊΡΠ°Π½Π°Ρ Ρ Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ ΡΠ²ΡΠ·ΠΊΠ° Handler + Looper, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈΠ· Connectivity Manager ΠΌΠΎΠ³ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡ Π½Π΅ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, Π²ΡΡ ΠΎΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ»ΠΈΠ·ΠΌΠΎΠΌ Π²Π΅Π»Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ RxJava ΠΈ Kotlin Coroutines.
- Network
Π Π°Π±ΠΎΡΠ° Ρ ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Retrofit 2, OkHttp ΠΈ Glide. OkHttp ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠΈΠΊΠΎΠ² (Interceptor) Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΡ. Glide ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
- SQL
ΠΠ»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Room. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π»Ρ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΡΡ RemoteMediator ΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π±ΡΠ»Π° RxJava, Π±ΡΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ Room.
- MVVM / MVP /CA
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΎ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ°Π±Π»ΠΎΠ½Π° MVVM ΠΈ ΡΠΈΡΡΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ. Π‘Π»ΠΎΠΈ ΡΠ²Π½ΠΎ Π½Π΅ Π·Π½Π°ΡΡ Π΄ΡΡΠ³ ΠΎ Π΄ΡΡΠ³Π΅. View ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π° Π½Π° ΡΠΎΠ±ΡΡΠΈΡ (ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅) Π²ΠΎ View Model. ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ view ΠΈ viewmodel ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ LiveData/Kotlin flow. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΎ Π½Π° 7 ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. App - ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Data ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ . Ui - Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Ρ ΡΠ°Π½ΠΈΡ Π² ΡΠ΅Π±Π΅ ΡΠ΅ΡΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π² Π΄ΡΡΠ³ΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ . Common - Ρ ΡΠ°Π½ΠΈΡ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΡΡΠ°Π²ΡΠΈΠ΅ΡΡ 3 - ΡΠΈΡΠ΅-ΠΌΠΎΠ΄ΡΠ»ΠΈ locations, episodes, characters, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΡΡΡ Π² ΡΠ΅Π±Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π±ΠΈΠ·Π½Π΅Ρ- Π»ΠΎΠ³ΠΈΠΊΡ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΡΠ΅-ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ Π½Π° Data, Domain, Di, Presentation. Π Data ΡΠ»ΠΎΠ΅ - ΠΌΠ°ΠΏΠΏΠ΅ΡΡ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π². Π Domain - ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π², ΡΡΡΠ½ΠΎΡΡΠΈ, usecase'Ρ. Di - ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. Presentation - ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π°Π΄Π°ΠΏΡΠ΅ΡΡ, ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ, Π²ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
- Services
Π‘Π΅ΡΠ²ΠΈΡΡ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΠΈΡΡ.
- Coroutines
Coroutines ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ Π΄Π»Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ΅ΡΡ ΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Dispatcher - IO, ΠΊΠΎΡΠΎΡΡΠΉ Π²Π½Π΅Π΄ΡΡΠ»ΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ. ΠΠ»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π² view model Π±ΡΠ» ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ Kotlin Flow.
- RxJava
RxJava Π²ΡΡΡΡΠΏΠ°Π»Π° Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ Coroutines Π² ΠΌΠ΅ΡΡΠ°Ρ , Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ Java. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Scheduler Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ IO ΠΈ Android Main Thread. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π»ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΡ.
- Dagger
ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π²Π½Π΅Π΄ΡΡΠ»ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Dagger 2. ΠΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π² Π΄ΡΡΠ³ΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ². Π€ΠΈΡΠ΅-ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, App ΠΌΠΎΠ΄ΡΠ»Ρ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈ ΠΎΡΠ΄Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. ΠΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π² ΡΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΡΡ Π·Π°Π²ΡΠ·Π°Π½ Π½Π° Π²ΡΡ ΠΌΠΎΠ΄Π΅Π»Π΅.
- Unit Tests
ΠΡΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ unit-ΡΠ΅ΡΡΠΎΠ². ΠΡΠ΅ ΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ, Π½Π°ΠΏΠΈΡΠ°Π½Ρ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ Episodes.
- ΠΠ»Π°Π²Π½ΡΠΉ ΡΠΊΡΠ°Π½ - ΠΠ΅ΡΡΠΎΠ½Π°ΠΆΠΈ.
ΠΠ°Π½Π½ΡΠΉ ΡΠΊΡΠ°Π½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ: ΡΡΠ°ΡΡΡ, ΠΈΠΌΡ, ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π²ΠΈΠ΄ ΠΈ ΠΏΠΎΠ». ΠΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΈΠ»ΡΡΡΠ° ΡΠ°ΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅Π½Ρ (ΠΊΠ½ΠΎΠΏΠΊΠ° Π²ΡΠ΄Π΅Π»Π΅Π½Π° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅). ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΊΡΠ°Π½Π° ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° Bottom Sheet Fragment. ΠΠΊΡΠ°Π½ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡΠΉ Bottom Sheet. ΠΠ°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΈΠ»ΡΡΡΠ° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ»Π΅Π΄ΠΈΡ Π·Π° ΡΠ΅ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π°ΠΊΡΠΈΠ²Π΅Π½. ΠΡΠ»ΠΈ Π°ΠΊΡΠΈΠ²Π΅Π½ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ LayoutBackDropManager, ΡΠΎ Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° Π±ΡΠ΄Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ toggle. ΠΠΊΡΠΈΠ²ΠΈΡΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΠ»ΡΡ/ΡΠ²Π΅ΡΠ½ΡΠ»ΡΡ.
1.1 Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ
ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΈΠ»ΡΡΡ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ "ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ"(apply). Π‘Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΡΠ΅ΡΡΠΈΠΊΡ Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠ»ΡΡΡΠ°. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΈ ΡΠ±ΡΠΎΡ ΡΠΈΠ»ΡΡΡΠ°.
Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠ»ΡΡΡΠ°?
ΠΠ°Π½Π½ΡΠ΅ ΠΈΠ· Chip Group ΠΈ Π²ΡΠ΅Ρ Edit Text ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ Π² ΠΊΠ»Π°ΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π²ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΡΡΠΌΠΎΠ΄Π΅Π»Ρ Ρ ΡΠ°Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠΈΠ»ΡΡΡΠΎΠ². Π§ΡΠΎΠ±Ρ Π·Π°Π³ΡΡΠ·ΠΈΠ»ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ Remote Mediator ΠΎΠ± ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ.
adapter?.refresh()
Π’ΠΎ Π΅ΡΡΡ Π·Π°ΠΏΡΠΎΡ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΡΡ: fragment -> viewmodel -> usecase -> repository -> remotemediator -> room and retrofit.
ΠΠ»Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΡΠΈΠ»ΡΡΡΠ° Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ Remote Mediator ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Assisted Inject
Π§ΡΠΎΠ±Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΡΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΠ»ΠΈΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΈΠ»ΡΡΡΠ°ΠΌ ΠΈΠ· Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΈ ΠΈΠ· ΡΠ΅ΡΠΈ. Π’ΠΎ Π΅ΡΡΡ Π·Π°ΠΏΡΠΎΡ Π² ΡΠ΅ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡ 5 ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ, Π° Π·Π°ΠΏΡΠΎΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ 10. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π°Π³ΡΡΠ·ΠΈΡΡΡ. Π§ΡΠΎΠ±Ρ Π΄ΠΎΡΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ³ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π±ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ:
ΠΠ°ΠΏΡΠΎΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ :
@Query(
"SELECT * FROM character " +
"WHERE (:name IS NULL OR name LIKE '%' || :name || '%') " +
"AND (:species IS NULL OR species LIKE '%' || :species || '%') " +
"AND (:type IS NULL OR type LIKE '%' || :type || '%') " +
"AND (:gender IS NULL OR gender LIKE :gender) " +
"AND (:status IS NULL OR status LIKE :status) " +
"ORDER BY id ASC"
)
fun getCharactersFilteredPaged(
name: String?,
species: String?,
type: String?,
status: String?,
gender: String?
): PagingSource<Int, CharacterEntity>
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΈΠ»ΡΡΡΠ°:
- name - ΠΈΠΌΡ
- species - Π²ΠΈΠ΄
- type - Π²ΠΈΠ΄
- gender - ΠΏΠΎΠ»
- status - ΡΡΠ°ΡΡΡ
ΠΠΎΠ³ΠΈΠΊΠ° ΡΠΈΠ»ΡΡΡΠ° Π² Π·Π°ΠΏΡΠΎΡΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ.
(:name IS NULL OR name LIKE '%' || :name || '%')
:name ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½Π° ΡΡΠΎ ΠΌΠ΅ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° getCharactersFilteredPaged Ρ ΡΠ°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. IS NULL ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ. Π’ΠΎ Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡΠΈΡΠ΅Π» Null, ΡΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π΄Π°ΡΡ true, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π»ΡΠ±ΠΎΠ΅ ΠΈΠΌΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΠ΅Ρ ΡΠΈΠ»ΡΡΡΡ. LIKE '%' || :name: ||
%
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΡΠΊΠ°ΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠΌΠ΅Π½ΠΈ. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²Π΅Π» 'ort' ΡΠΎ Morty Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠΌΡ Π·Π°ΠΏΡΠΎΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ort ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² Morty.
ΠΠ½Π½ΠΎΡΠ°ΡΠΈΡ Query ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎ SQL Π·Π°ΠΏΡΠΎΡ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΠΊΠ»Π°ΡΡ PagingSource Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Remote Mediator. Π’ΠΈΠΏΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Int - ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΈΠ½Π΄Π΅ΠΊΡ ΡΡΡΠ½ΠΎΡΡΠΈ, Π° CharacterEntity - ΡΠ°ΠΌΠ° ΡΡΡΠ½ΠΎΡΡΡ.
ORDER BY id ASC ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ ΠΏΠΎΠ»Ρ ID. ΠΠΌΠ΅Π½Π½ΠΎ Π² ΡΠ°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ ΠΈΠ· Api.
ΠΠ°ΠΏΡΠΎΡ Π² ΡΠ΅ΡΡ:
@GET(CHARACTER_END_POINT)
fun getCharactersByPageFiltered(
@Query("page") page: String,
@Query("name") name: String? = null,
@Query("species") species: String? = null,
@Query("type") type: String? = null,
@Query("status") status: String? = null,
@Query("gender") gender: String? = null,
): Call<CharactersResponseModel>
@Get - Π³Π΅Ρ-Π·Π°ΠΏΡΠΎΡ.
CHARACTER_END_POINT - ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ°, Π²ΡΠ½Π΅ΡΠ΅Π½Π½Π°Ρ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅.
@Query(Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ query-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² ΡΡΡΠ»ΠΊΡ. ΠΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ Π·Π°ΠΏΡΠΎΡΠΎΠΌ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½ΡΠ»Π°Π±Π΅Π»ΡΠ½Ρ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠ΅ ΡΠ°Π²Π½Ρ null Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ page. Page ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π·Π°ΠΏΡΠΎΡΠ° Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π·Π΄Π΅ΡΡ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΈ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½.
Call - ΠΎΠ±Π΅ΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΡΠΈΡΠ°, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π°ΡΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅.
CharactersResponseModel - Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠ°Ρ ΡΡΡΠ½ΠΎΡΡΡ Π·Π°ΠΏΡΠΎΡΠ°.
1.2 ΠΠΎΠΈΡΠΊ
ΠΠΎΠΈΡΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠ»ΡΡΡΠ° ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. ΠΠΎ ΡΡΡΠΈ ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΈΠ»ΡΡΡΠ° Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ name. ΠΠ°ΠΆΠ½ΠΎ!!! ΠΠΎΠΈΡΠΊ ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠΈΠ»ΡΡΡ.
ΠΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎΠΈΡΠΊ?
ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ 2 ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° SearchFragment ΠΈ SearchActivity, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²ΡΠ΅ΠΌ ΠΌΠΎΠ΄ΡΠ»ΡΠΌ. Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠΎΠΈΡΠΊ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ SearchFragment Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄:
fun doSearch(searchQuery: String?)
ΠΠΊΡΠΈΠ²ΠΈΡΠΈ ΡΠ»Π΅Π΄ΠΈΡ Π·Π° ΡΠ΅ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π°ΠΊΡΠΈΠ²Π΅Π½. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ SearchFragment, ΡΠΎ Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° Π½Π°ΠΉΠ΄Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ doSearch, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΡΡΠΎΠΊΠ° ΠΈΠ· Search View Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ. ΠΠ· ΠΌΠ΅ΡΠΎΠ΄Π° doSearch ΡΡΡΠΎΠΊΠ° ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²ΠΎ Π²ΡΡΠΌΠΎΠ΄Π΅Π»Ρ, Π³Π΄Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΈΠ»ΡΡΡ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΡΠ°Π½Π½Π΅Π΅. ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Search Activity ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ· ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΡΠ±ΡΠΎΡΠΈΡΡ ΡΠΈΠ»ΡΡΡ ΠΈ Π·Π°ΠΊΡΡΡΡ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠ±ΡΠΎΡΠ° ΡΠΈΠ»ΡΡΡΠ° ("clear filter"):
(requireActivity() as? SearchActivity)?.closeSearchInterface()
ΠΠΎΠΌΠΈΠΌΠΎ ΡΠ±ΡΠΎΡΠ° ΡΠΈΠ»ΡΡΡΠ° Π½Π° ΡΡΠΎΠ²Π½Π΅ Π²ΡΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° "clear filter" ΠΈΠ· ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ, "Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ" ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ ΠΊ SearchActivity ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ Π·Π°ΠΊΡΡΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ° ΡΡΠΎΠ²Π½Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
override fun closeSearchInterface() {
searchCloseButton?.callOnClick()
}
Π§ΡΠΎΠ±Ρ ΡΠΊΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎΠΈΡΠΊΠ°, ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠ΅ΡΡΡ Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π·Π°ΠΊΡΡΡΡ(ΠΊΡΠ΅ΡΡΠΈΠΊ Π² SearchView).
-
ΠΠ»Π°Π²Π½ΡΠΉ ΡΠΊΡΠ°Π½ - ΠΠΏΠΈΠ·ΠΎΠ΄Ρ.
ΠΠ°Π½Π½ΡΠΉ ΡΠΊΡΠ°Π½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΡΠΏΠΈΠ·ΠΎΠ΄ΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ: ΡΠΏΠΈΠ·ΠΎΠ΄(ΠΊΠΎΠ΄), ΠΈΠΌΡ ΠΈ Π΄Π°ΡΡ Π²ΡΡ ΠΎΠ΄Ρ.
ΠΡΠΎΡ ΡΠΊΡΠ°Π½ ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΡΠΊΡΠ°Π½ Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°ΠΌΠΈ. Π€ΠΈΠ»ΡΡΡ ΠΈ ΠΏΠΎΠΈΡΠΊ ΠΎΡΠΊΡΡΠ²Π°ΡΡΡΡ ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, ΠΊΠ°ΠΊ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ Π½Π° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅.
2.1 Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ
Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡΠΊΡΠ°Π½Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π΄Π²ΡΠΌ ΠΏΠΎΠ»ΡΠΌ. ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΈΠ»ΡΡΡ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ "ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ". ΠΠ°ΠΆΠ°ΡΠΈΠ΅ ΠΊΡΠ΅ΡΡΠΈΠΊΠ° Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΠ±ΡΠΎΡΡ ΡΠΈΠ»ΡΡΡΠ°. (Π‘Π±ΡΠΎΡΠΈΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠΈΡΠΊ, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΡΠ²Π°Π»ΠΎΡΡ ΡΠ°Π½Π΅Π΅). ΠΡΠ΅ΡΡΠΈΠΊ ΡΠΊΡΡΠ²Π°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΠΈΠ»ΡΡΡΠ°.
ΠΠΎΠΌΠΈΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΈΠ»ΡΡΡΠΎΠ², ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°ΠΌΠΈ Π² ΡΠΎΠΌ, ΡΡΠΎ Bottom Sheet ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ STATE_HALF_EXPANDED Π²ΠΌΠ΅ΡΡΠΎ STATE_COLLAPSED, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°ΠΌΠΈ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠΏΠΈΡΠΊΠ° Ρ alpha 1 Π΄ΠΎ alpha 0.3 Π² ΠΏΠΎΠ»Ρ-ΡΠ²Π΅ΡΠ½ΡΡΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
2.2 ΠΠΎΠΈΡΠΊ
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π½Π° ΡΠΊΡΠ°Π½Π΅ Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°ΠΌΠΈ ΠΈ ΠΎΡΠ»ΠΈΡΠΈΠΉ, ΠΊΡΠΎΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²-ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΠΎΠ² - Π½Π΅Ρ. ΠΠ΄Π΅ΡΡ ΠΏΠΎΠΈΡΠΊ ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ»Ρ name. Π’Π°ΠΊΠΆΠ΅, Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΡ Π½Π΅ Π±ΡΠ»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ±ΡΠΎΡΠΈΡΡ ΡΠΈΠ»ΡΡΡ.
- ΠΠ»Π°Π²Π½ΡΠΉ ΡΠΊΡΠ°Π½ - ΠΠΎΠΊΠ°ΡΠΈΠΈ.
ΠΠ°Π½Π½ΡΠΉ ΡΠΊΡΠ°Π½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ ΡΠΏΠΈΠ·ΠΎΠ΄ΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ: ΡΠΈΠΏ, ΠΈΠΌΡ ΠΈ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅.
Π‘ΠΏΠΈΡΠΎΠΊ Π»ΠΎΠΊΠ°ΡΠΈΠΉ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΡΠΈ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°ΠΌΠΈ ΠΈ ΡΠΏΠΈΠ·ΠΎΠ΄Π°ΠΌΠΈ. Π€ΠΈΠ»ΡΡΡ ΠΈ ΠΏΠΎΠΈΡΠΊ ΠΎΡΠΊΡΡΠ²Π°ΡΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ, Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΡ Π½ΠΈΠΆΠ΅.
3.1 Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ
Π€ΠΈΠ»ΡΡΡ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π»ΠΎΠΊΠ°ΡΠΈΠΉ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· 3 ΠΏΠΎΠ»Π΅ΠΉ. Π Π°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅ Ρ ΡΠΏΠΈΠ·ΠΎΠ΄Π°ΠΌΠΈ. ΠΡΠ»ΠΈΡΠΈΠ΅ Π»ΠΈΡΡ Π² Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΠ°Ρ Ρ api ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
3.2 ΠΠΎΠΈΡΠΊ
ΠΠΎΠΈΡΠΊ ΡΠ°ΠΊ ΠΆΠ΅ Π½ΠΈΡΠ΅ΠΌ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΊΡΠ°Π½ΠΎΠ² Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°ΠΌΠΈ ΠΈ ΡΠΏΠΈΠ·ΠΎΠ΄Π°ΠΌΠΈ. ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΈΠ»ΡΡΡ ΠΏΠΎ ΠΏΠΎΠ»Ρ name. ΠΡΠΊΡΡΡΠΈΠ΅ ΡΠΈΠ»ΡΡΡΠ° ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ ΠΏΠΎΠΈΡΠΊ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΈΠ»ΡΡΡ - ΡΡΠΎ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΉ ΠΏΠΎΠΈΡΠΊ.
- ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠΊΡΠ°Π½ - ΠΠ΅ΡΡΠΎΠ½Π°ΠΆ.
ΠΠ΄Π΅ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠΎΠ»Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΊ Π»ΠΎΠΊΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΊ ΠΌΠ΅ΡΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΊ ΡΠΏΠΈΠ·ΠΎΠ΄Ρ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°.
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ
ΠΠ»Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΠΈ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ characters Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ:
interface CharactersRouter {
fun navigateToCharacterDetails(id: Int)
fun navigateToLocationDetails(id: Int)
fun navigateToEpisodeDetails(id: Int)
}
Π Π΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π³Π»Π°Π²Π½ΡΠΉ ΡΠΎΡΡΠ΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Dagger ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ. Π Π½Π΅ΠΌ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ² Π² backstack, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° bundle ΠΈ ΡΠ°ΠΌ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄.
ΠΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΈΠ· ΡΠΊΡΠ°Π½Π° Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°ΠΌΠΈ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΠΊΡΠ°Π½, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΡΠΎΡΡΠ΅ΡΠ΅. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ fragment manager ΡΠΎΠ²Π΅ΡΡΠ°Π΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π² ID. ΠΠΎΠ²ΡΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ (Π΄Π΅ΡΠ°Π»ΠΈ Π»ΠΎΠΊΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΡΠΏΠΈΠ·ΠΎΠ΄Π°) ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ID ΠΈΠ· bundle ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π»ΡΡΠ΅ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Assisted Inject Π²ΠΎ view model.
ΠΠΊΡΠ°Π½ Ρ ΡΠΏΠΈΠ·ΠΎΠ΄Π°ΠΌΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΡΠΎΠ»Π±ΡΠΎΠΌ.
Π Π°ΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠ½ ΡΠ²Π°ΠΉΠΏΠΎΠΌ ΡΠ½ΠΈΠ·Ρ Π²Π²Π΅ΡΡ . ΠΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Motion Layout.
ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ
ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ , Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΏΠΈΠ·ΠΎΠ΄ΠΎΠ² ΠΈ Π»ΠΎΠΊΠ°ΡΠΈΠΉ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ id, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΈΠ· API. ΠΡΠΈ id Π΄ΠΎΡΡΠ°ΡΡΡΡ ΠΈΠ· ΡΡΡΠ»ΠΎΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΠ»ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° UrlIdExtractor, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΠΏΡΠΈΡΠ»Π° Π»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΡΠ»ΠΊΠ°, Π·Π°ΡΠ΅ΠΌ ΠΎΡΠ΄Π°ΡΡ id ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΈΠ· ΡΡΡΠ»ΠΊΠΈ. Π ΡΠ»ΡΡΠ°Π΅ Π½Π΅ΡΠ΄Π°ΡΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΏΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ°.
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΡΠΏΠΈΠ·ΠΎΠ΄ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΈΠ»ΠΈΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ ApiQueryGenerator, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· id, Π² ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ ΠΈΠ· Π²ΡΠ΅Ρ id, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΡΡΠΌΠΈ. ΠΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΠ°:
https://rickandmortyapi.com/api/episode/1,2,3,4,12,15 //ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΠΈΡΡΡ - id
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡΡ ΡΠΏΠΈΠ·ΠΎΠ΄ΠΎΠ² ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· id, Π° Π½Π΅ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡ ΠΈΠ· id. ΠΠ΅ΡΠΎΠ΄ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
@Query("SELECT * FROM episode WHERE id IN (:ids)")
fun getEpisodes(ids: List<String>?): Maybe<List<EpisodeEntity>>
- ids - ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· id
Maybe - ΠΎΡΠΎΠ±ΡΠΉ Π²ΠΈΠ΄ Obsrvable Π² rxJava, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡ null. ΠΡΠΈΠΌ ΠΎΠ½ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Single ΠΈ Π±ΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ Π΅Π΄ΠΈΠ½ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π½ΡΠ»Π°Π±Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
"SELECT * FROM episode WHERE id IN (:ids)" Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ Π²ΡΠ΅ ΡΠΏΠΈΠ·ΠΎΠ΄Ρ, Ρ ΠΊΠΎΡΠΎΡΡΡ id Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ id.
List - ΡΠΏΠΈΡΠΎΠΊ ΡΠΏΠΈΠ·ΠΎΠ΄ΠΎΠ²
ΠΡΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π΄Π°Π»ΡΡΠ΅ Π² view model.
- ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠΊΡΠ°Π½ - ΠΠΏΠΈΠ·ΠΎΠ΄.
ΠΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΠΏΠΈΠ·ΠΎΠ΄Π°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π½Π° ΡΡΠΎΠΌ ΡΠΊΡΠ°Π½Π΅.
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π½Π° ΡΠΊΡΠ°Π½Π΅ Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°ΠΌΠΈ. Π Π΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ EpisodesRouter
ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π΄Π°Π½Π½ΡΡ
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΡΡΡΠΎΠ΅Π½ΠΎ Π½Π° ΡΠΊΡΠ°Π½Π΅ Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°ΠΌΠΈ. ΠΡΠ»ΠΈΡΠΈΠ΅ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Kotlin, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Coroutines + Flow Π²ΠΌΠ΅ΡΡΠΎ rxJava + LiveData.
Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ
ΠΠ° ΡΡΠΎΠΌ ΡΠΊΡΠ°Π½Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· Π²ΡΠ΅Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ, ΠΎΡΠ½ΠΎΡΡΡΠΈΡ ΡΡ ΠΊ ΡΠΏΠΈΠ·ΠΎΠ΄Ρ. Π Π°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½Π° Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΠΊΡΠ°Π½Π΅ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°.
- ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠΊΡΠ°Π½ - ΠΠΎΠΊΠ°ΡΠΈΡ.
ΠΠ΅ΡΠ°Π»ΠΈ ΠΎ Π»ΠΎΠΊΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π·Π΄Π΅ΡΡ.
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ
ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠΎΠΈΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π³Π»Π°Π²Π½ΡΠΌ ΡΠΎΡΡΠ΅ΡΠΎΠΌ.
Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ
ΠΠΎΠΌΠΈΠΌΠΎ Π΄Π΅ΡΠ°Π»Π΅ΠΉ Π»ΠΎΠΊΠ°ΡΠΈΠΈ, ΠΏΡΠΈΡΡΡΡΠ²ΡΠ΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡΡΠ΅ΡΠ°Π»ΠΈΡΡ Π² Π»ΠΎΠΊΠ°ΡΠΈΠΈ. Π Π°ΡΠΊΡΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΆΠ΅ΡΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ Π½Π° ΡΠΊΡΠ°Π½Π΅ Ρ Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ ΠΎ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅.
Π€ΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈΠ· app-ΠΌΠΎΠ΄ΡΠ»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ².
505 Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ²ΠΎΡ ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ. ΠΠΎΡΠ΅ΠΌΡ 2 ΡΠΊΡΠΈΠ½ΡΠΎΡΠ° Ρ ΡΠΊΡΠ°Π½ΠΎΠΌ ΠΎ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΉ? ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎΠ΅ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° ΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ - 2 ΡΠ°Π·Π½ΡΡ ΡΠ»ΡΡΠ°ΡΡ , ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΡΡΡ. ΠΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ»ΡΡΠ°Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΠΈ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅. ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈΡ Π·Π°Π½ΠΎΠ²ΠΎ. Π’Π΅ΠΊΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π° ΡΡΡΡΠΊΠΎΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠΊΡΠΈΠ½ΡΠΎΡ Π΄Π΅Π»Π°Π»ΡΡ Π½Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΌ Π΄Π΅Π²Π°ΠΉΡΠ΅, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΌΡΠ»ΡΡΠΎΡΠ°. ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ 2 ΡΠ·ΡΠΊΠ°: ΡΡΡΡΠΊΠΈΠΉ ΠΈ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠΉ.
Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ | ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ | ΠΠ΅ΡΡΠΈΡ |
---|---|---|
Room | Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ . | 2.5.1 |
Retrofit | ΠΠ°ΠΏΡΠΎΡΡ Π² ΡΠ΅ΡΡ. | 2.9.0 |
RxJava | Π Π°Π±ΠΎΡΠ° Ρ Π°ΡΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. | 3.1.5 |
Coroutines | Π Π°Π±ΠΎΡΠ° Ρ Π°ΡΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. | 1.8.20 |
Glide | ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ. | 4.15.1 |
Dagger 2 | ΠΠ½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. | 2.45 |
OkHttp | ΠΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠΈΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ². | 4.10.0 |
Moshi | Π‘Π΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ . | 1.14.0 |
Paging 3 | ΠΠ°Π³ΠΈΠ½Π°ΡΠΈΡ. | 3.1.1 |
Splash Screen Api | ΠΠ°ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠΊΡΠ°Π½. | 1.0.0 |
Gson | Π‘Π΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ . | 2.10.1 |
Constraint Layout | ΠΠ΅ΡΡΡΠΊΠ°. | 2.1.4 |
Gradle | Π‘Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°. | 7.4.2 |
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π±ΡΠΎΡΠΊΠΈ Π΄Π΅Π»Π°Π»ΠΈΡΡ Π² ΡΠΈΠ³ΠΌΠ΅.