Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DroidKaigi 2018 App Architecture
Search
takahirom
February 27, 2018
Programming
2.6k
14
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DroidKaigi 2018 App Architecture
takahirom
February 27, 2018
More Decks by takahirom
See All by takahirom
AndroidアプリのAI実装をAndroidifyで学ぶ ー Google公式サンプルによる体験と実装 ー
takahirom
0
140
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
1k
Google の LLM ライブラリ を Android アプリで 使うには?
takahirom
1
2.1k
Robolectric Native Graphics and Roborazzi
takahirom
1
2.3k
Androidアプリで安定して動作させ継続的に開発するために設計の原則を利用して開発した話
takahirom
3
1.4k
Android Tools & Performance
takahirom
1
1.2k
Jetpack Compose State Practices
takahirom
1
1.4k
Inside Jetpack Compose
takahirom
1
1.1k
What’s new in Android Jetpack and Tools
takahirom
0
430
Other Decks in Programming
See All in Programming
AIで効率化できた業務・日常
ochtum
0
110
LLM Plugin for Node-REDの利用方法と開発について
404background
0
160
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
12k
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
2
1.6k
AIエージェントの隔離技術の徹底比較
kawayu
0
470
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
310
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
120
AI時代の仕事技芸論 — ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ
kuranuki
1
630
AIとRubyの静的型付け
ukin0k0
0
550
The NotImplementedError Problem in Ruby
koic
1
640
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
190
CLIであることを活かしたGitHub Copilot CLI活用術 / GitHub Copilot CLI Pro Tips & Tricks
nao_mk2
1
1.2k
Featured
See All Featured
A Soul's Torment
seathinner
6
2.9k
Amusing Abliteration
ianozsvald
1
200
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
430
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
190
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.4k
Designing for Timeless Needs
cassininazir
1
250
Building AI with AI
inesmontani
PRO
1
1.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
140
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
How to Talk to Developers About Accessibility
jct
2
220
Transcript
%SPJE,BJHJ"QQ "SDIJUFDUVSF UBLBIJSPN
˖ UBLBIJSPN !OFX@SVOOBCMF ˖ 劤せכ嬁「䃨峔 ׄױַמ ˖ "OESPJEָ㥨ֹדׅկ
˖ "CFNB57ך"OESPJE،فٔ⡲גְתׅկ ˖ %SPJE,BJHJⰕ䒭،فٔךٔ٦ت٦׃ת׃կ ⟃♳ךفؙٕٔؒأزָ֮הֲ׀ְׂת׃! 荈ⴓחאְג
鏣鎘ך鑧
%SPJE,BJHJ،فٔך鏣鎘
%SPJE,BJHJⰕ䒭،فٔהכ ˖ %SPJE,BJHJכؒٝآص،ָ⚺䕵ך"OESPJEؕٝؿ؋ٖٝأ דׅկךؕٝؿ؋ٖٝأךⰕ䒭،فٔדׅկ ˖ %SPJE,BJHJכ"OESPJE䪮遭䞔㜠ךⰟ剣ה؝ىُص؛٦ءّ ٝ湡涸חծ䎃剢傈 加 ծ傈 ꆃ
ך傈⪵ׁ ת׃կ
None
˖ إحءّٝ ˖ إحءֶّٝ孡חⰅ⳿勻 ˖ إحءّٝ䱱ׇ ˖ ؿ؍٦سغحؙ鷏 ˖ ֶ濼ׇ
˖ 㖑㔳 ˖ أهٝ؟٦邌爙 ˖ זוזו %SPJE,BJHJ،فٔך堣腉
˖ זץֻֻׁך➂ָ鋅גꟼג嚂׃״ֲחׅ ˖ זָ罋חדֹךחׅ %SPJE,BJHJ،فٔך؞٦ٕ
˖ ,PUMJO ˖ "SDIJUFDUVSF$PNQPOFOUT⢪ֲ ˖ %SPJE,BJHJך،فٔזךדծ剑倜䪮遭װٓ؎ـٓٔכ ⢪ְְ קר寸תגְֿה
罋ח׃،٦ؗذؙثٍ
.77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
˖ 䎃ך%SPJE,BJHJ،فٔזוָ⢽חזկ .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
˖ 䎃ך%SPJE,BJHJ،فٔזוָ⢽חזկ ˖ %BUB#JOEJOHⵃ欽ׅկ .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
˖ 䎃ך%SPJE,BJHJ،فٔזוָ⢽חזկ ˖ %BUB#JOEJOHⵃ欽ׅկ ˖ 7JFX.PEFMַ4FTTJPOT3FQPTJUPSZOE"MM ׃ח 遤גծًٝغ㢌侧%BUB#JOEJOHדغ؎ٝسׅ .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
˖ 䎃ך%SPJE,BJHJ،فٔזוָ⢽חזկ ˖ %BUB#JOEJOHⵃ欽ׅկ ˖ 7JFX.PEFMַ4FTTJPOT3FQPTJUPSZOE"MM ׃ח 遤גծًٝغ㢌侧%BUB#JOEJOHדغ؎ٝسׅ ˖ ㉏겗挿
.77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
˖ 䎃ך%SPJE,BJHJ،فٔזוָ⢽חזկ ˖ %BUB#JOEJOHⵃ欽ׅկ ˖ 7JFX.PEFMַ4FTTJPOT3FQPTJUPSZOE"MM ׃ח 遤גծًٝغ㢌侧%BUB#JOEJOHדغ؎ٝسׅ ˖ ㉏겗挿
˖ Ⰻֻずׄד㉏겗כזְָծ"SDIJUFDUVSF $PNQPOFOUTװ,PUMJOָוֲ䕦갟ַׅ罋ִ ְկ .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
˖ 䎃ך%SPJE,BJHJ،فٔזוָ⢽חזկ ˖ %BUB#JOEJOHⵃ欽ׅկ ˖ 7JFX.PEFMַ4FTTJPOT3FQPTJUPSZOE"MM ׃ח 遤גծًٝغ㢌侧%BUB#JOEJOHדغ؎ٝسׅ ˖ ㉏겗挿
˖ Ⰻֻずׄד㉏겗כזְָծ"SDIJUFDUVSF $PNQPOFOUTװ,PUMJOָוֲ䕦갟ַׅ罋ִ ְկ .77. ̔%BUB#JOEJOHכ⢪גְְֹ IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״
$MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ ˖ זח⢪גְ孡ָׅկ $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ ˖ זח⢪גְ孡ָׅկ ˖ ㉏겗挿 $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ ˖ זח⢪גְ孡ָׅկ ˖ ㉏겗挿 ˖ %SPJE,BJHJך鋉垷ח׃גכ麓ⶱד֮孡ָׅ $MFBO"SDIJUFDUVSF
IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ ˖ זח⢪גְ孡ָׅկ ˖ ㉏겗挿 ˖ %SPJE,BJHJך鋉垷ח׃גכ麓ⶱד֮孡ָׅ ˖
孡鯪חכ؝ٝزٔؽُ٦ءّٝדֹזְ孡ָׅ $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ ˖ זח⢪גְ孡ָׅկ ˖ ㉏겗挿 ˖ %SPJE,BJHJך鋉垷ח׃גכ麓ⶱד֮孡ָׅ ˖
孡鯪חכ؝ٝزٔؽُ٦ءّٝדֹזְ孡ָׅ ˖ 罋ִ倯《Ⰵךכְְ孡ָׅ $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
˖ EPNBJOךהֿׯהⴓֽגծ ך鿇ⴓחؽآطأٗآحָؙ剅ֽ ˖ זח⢪גְ孡ָׅկ ˖ ㉏겗挿 ˖ %SPJE,BJHJך鋉垷ח׃גכ麓ⶱד֮孡ָׅ ˖
孡鯪חכ؝ٝزٔؽُ٦ءّٝדֹזְ孡ָׅ ˖ 罋ִ倯《Ⰵךכְְ孡ָׅ $MFBO"SDIJUFDUVSF "1*זוךٖأهٝأךתת⢪׆ وحؾؚٝ׃ג،فٔⰻדכ ְֹז&OUJUZ⢪ְְ ̔ IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״
'MVY IUUQTHJUIVCDPNGBDFCPPLVY״
˖ וֿחזח剅ַֻծⳢ椚ך鷄ְװׁׅזוהגⴓַװְׅկ ⦐➂涸ח 'MVY IUUQTHJUIVCDPNGBDFCPPLVY״
˖ וֿחזח剅ַֻծⳢ椚ך鷄ְװׁׅזוהגⴓַװְׅկ ⦐➂涸ח ˖ Ⰻ涸ח《Ⰵה ˑזץֻֻׁך➂ָ鋅גꟼג嚂׃״ֲח˒הְֲ䠐 ַ鎉ֲה䒦爡⟃㢩ד֮ת鋅ַֽזְךד植朐כ⿑׃ְ 'MVY IUUQTHJUIVCDPNGBDFCPPLVY״
˖ וֿחזח剅ַֻծⳢ椚ך鷄ְװׁׅזוהגⴓַװְׅկ ⦐➂涸ח ˖ Ⰻ涸ח《Ⰵה ˑזץֻֻׁך➂ָ鋅גꟼג嚂׃״ֲח˒הְֲ䠐 ַ鎉ֲה䒦爡⟃㢩ד֮ת鋅ַֽזְךד植朐כ⿑׃ְ 'MVY 倯ぢךر٦ةך崧כ《Ⰵגְְֹ ̔
IUUQTHJUIVCDPNGBDFCPPLVY״
3FEVY
˖ 3FEVY荈⡤כׯהٍؗحث،حفדֹגְזְ 3FEVY
˖ 3FEVY荈⡤כׯהٍؗحث،حفדֹגְזְ ˖ ˑ.BOBHJOH4UBUFXJUI3Y+BWBCZ+BLF8IBSUPO˒דַז 铡僇ָ֮կ 3FEVY
˖ 3FEVY荈⡤כׯהٍؗحث،حفדֹגְזְ ˖ ˑ.BOBHJOH4UBUFXJUI3Y+BWBCZ+BLF8IBSUPO˒דַז 铡僇ָ֮կ ˖ 㹋鄲鑐ָ䮲䫓կկ 3FEVY
˖ 3FEVY荈⡤כׯהٍؗحث،حفדֹגְזְ ˖ ˑ.BOBHJOH4UBUFXJUI3Y+BWBCZ+BLF8IBSUPO˒דַז 铡僇ָ֮կ ˖ 㹋鄲鑐ָ䮲䫓կկ 3FEVY @CheckResult fun
<T> Observable<T>.toResult(schedulerProvider: SchedulerProvider): Observable<Result<T>> { return compose { item -> item .map { Result.success(it) } .onErrorReturn { e -> Result.failure(e.message ?: "unknown", e) } .observeOn(schedulerProvider.ui()) .startWith(Result.inProgress()) } } ̔3FTVMUך⡲倯כ罋חזֲ
"SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״
˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈ָⰅծ ٓ؎ؿ؟؎ؙٕ֮ת䠐陎ׇ׆ח 㹋鄲דֹ "SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״
˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈ָⰅծ ٓ؎ؿ؟؎ؙٕ֮ת䠐陎ׇ׆ח 㹋鄲דֹ ˖ 3PPN㉏겗זֻ⢪ֲִ "SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״
˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈ָⰅծ ٓ؎ؿ؟؎ؙٕ֮ת䠐陎ׇ׆ח 㹋鄲דֹ ˖ 3PPN㉏겗זֻ⢪ֲִ ˖ ㉏겗挿 "SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״
˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈ָⰅծ ٓ؎ؿ؟؎ؙٕ֮ת䠐陎ׇ׆ח 㹋鄲דֹ ˖ 3PPN㉏겗זֻ⢪ֲִ ˖ ㉏겗挿 ˖ -JWF%BUBדכ-JWF%BUBず㡦穈さׇ
3Y+BWBדְֲ[JQך״ֲז⹛⡲ָ㣐㢌 "SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״
˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈ָⰅծ ٓ؎ؿ؟؎ؙٕ֮ת䠐陎ׇ׆ח 㹋鄲דֹ ˖ 3PPN㉏겗זֻ⢪ֲִ ˖ ㉏겗挿 ˖ -JWF%BUBדכ-JWF%BUBず㡦穈さׇ
3Y+BWBדְֲ[JQך״ֲז⹛⡲ָ㣐㢌 "SDIJUFDUVSF$PNQPOFOU ̔7JFX.PEFM -JWF%BUB 3PPNכⵃ欽ָׅ3Y+BWB⢘欽 IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״
罋ִ،٦ؗذؙثٍ
罋ִ،٦ؗذؙثٍ
罋ִ،٦ؗذؙثٍ ˖ 㛇劤涸ח"SDIJUFDUVSF$PNQPOFOUTך 鏣鎘ك٦أח ˖ 䗳銲ה䙼ֲך酡㸣׃גְֻ䕎
(SPVQJFך %BUB#JOEJOH؟ه٦زⵃ欽
.BQQFS⢪גծ "1*זו✲䞔ָ،فٔⰻח Ⰵ鴥תזְ״ֲח
倯ぢדر٦ة Ⳣ椚 "DUJWJUZ ̕ 7JFX.PEFMך.FUIPE ̕ 3FQPTJUPSZ ̕ 7JFX.PEFMך-JWF%BUB
̕ "DUJWJUZ
0CTFSWBCMFUP3FTVMUד㢌䳔׃ג 3FTVMUחׅ
ꬊず劍Ⳣ椚כ3Y+BWBך 0CTFSWBCMF'MPXBCMF
،٦ؗذؙثٍٖؽُ٦ך 僥
"1*ך/VMMBCMFⳢ椚ׅהֿ כׇֹׁ /VMMBCMF.BQQFSדכׇֹׁ״ֲח׃ת׃կ
-JWF%BUBך.VUBCJMJUZך盖椚 "DUJWJUZ'SBHNFOUַ-JWF%BUBךWBMVFְׄזְ״ֲחׅ class SearchViewModel @Inject ...{ private val mutableResult =
MutableLiveData<Result<SearchResult>>() val result: LiveData<Result<SearchResult>> = mutableResult ... mutableResult.value = it
،٦ؗذؙثٍٖؽُ٦ך僥 ˖ 7JFX.PEFMךًاحسせך鋉 ˖ GBWPSJUF4FTTJPO 4FTTJPO PO'BWPSJUF$MJDL 4FTTJPO 7JFX.PEFMכ7JFXך؎كٝز「ֽ《גծוֲַׅⴻ倖ׅ䕎ח
㢌刿
ֿך،٦ؗذؙثٍך 葺ַ䨽
.BQQFSָ葺ַ
.BQQFSָ葺ַ "1*ךٖأهٝأ ˖ "1*ךإحءّٝךر٦ةכ أؾ٦ؕ٦*%ֽ䭯גְ״ֲז朐䡾 ֿ،فٔח崧ׅה ְזהֿד4QFBLFS嗚稊ׅ䗳銲ָ⳿גֹ TFTTJPOTQFBLFSTד أؾ٦ؕ٦♧鋮ח ،ؙإأדֹ״ֲח׃
.BQQFSָ葺ַ ˖ ،فٔך⚥דכ/VMMBCMF 䠐陎׃זֻג葺ֻז ˖ ♧鿇劤䔲חזְ〳腉䚍ָ ֮ךכOVMMⰅ
.BQQFSָ葺ַ ˖ 㛇劤涸ח鋅湡 1SFTFOUBUJPO鿇ⴓ חꟼׅ13װ何⥜ָ㢳ַךדծ 7JFXワָ笺뜧חדֹגծ嚂ח涪דֹגְשַ ˖ .PEFMחⳢ椚㺔ׇֿהדծ⡂״ֲזⳢ椚ֻׁך㜥䨽ד剅ַזֻג״ַ class Session(
open val id: String, open val dayNumber: Int, open val startTime: Date, open val endTime: Date ) { ... val isOnGoing: Boolean get() = System.currentTimeMillis() in startTime.time..endTime.time
ر٦ة 倯ぢד崧ׇ״ֲח׃
ر٦ة 倯ぢד崧ׇ״ֲח׃
ر٦ة 倯ぢד崧ׇ״ֲח׃ ˖ -JWF%BUB穗歋׃גծ 7JFXך朐䡾ך㢌刿崧ׅ״ֲח׃
ر٦ة 倯ぢד崧ׇ״ֲח׃ ˖ -JWF%BUB穗歋׃גծ 7JFXך朐䡾ך㢌刿崧ׅ״ֲח׃ ˖ 'MVY،٦ؗذؙثٍךًٔحز֮ 玎䏝「ֽ״ֲחז
ر٦ة 倯ぢד崧ׇ״ֲח׃ ˖ -JWF%BUB穗歋׃גծ 7JFXך朐䡾ך㢌刿崧ׅ״ֲח׃ ˖ 'MVY،٦ؗذؙثٍךًٔحز֮ 玎䏝「ֽ״ֲחז ˖ 7JFXך朐䡾盖椚-JWF%BUBח⟣ׇ
ر٦ة 倯ぢד崧ׇ״ֲח׃ ˖ -JWF%BUB穗歋׃גծ 7JFXך朐䡾ך㢌刿崧ׅ״ֲח׃ ˖ 'MVY،٦ؗذؙثٍךًٔحز֮ 玎䏝「ֽ״ֲחז ˖ 7JFXך朐䡾盖椚-JWF%BUBח⟣ׇ
˖ 䕵ⶴָⴓַװְׅזו
ر٦ة 倯ぢד崧ׇ״ֲח׃ ˖ -JWF%BUB穗歋׃גծ 7JFXך朐䡾ך㢌刿崧ׅ״ֲח׃ ˖ 'MVY،٦ؗذؙثٍךًٔحز֮ 玎䏝「ֽ״ֲחז ˖ 7JFXך朐䡾盖椚-JWF%BUBח⟣ׇ
˖ 䕵ⶴָⴓַװְׅזו ˖ %#ח"1*ַر٦ةⰅגծ %#ךر٦ةַ邌爙ֿׅהדծ ر٦ةך崧ָⴓַװַׅ
ֿך،٦ؗذؙثٍך 䝤ַ䨽ծ㉏겗חז䨽
倯ぢׄׯזֻג؝٦سָ剅ֽג׃ תֲ
倯ぢׄׯזֻג؝٦سָ剅ֽג׃ תֲ 倯ぢהְגְָծ7JFX.PEFMך ًاحسⰻד -JWF%BUBⰻךEBUBָ鋅ג׃תֲկ ֿ׃澓ח⽃倯ぢדזֻז ؝٦سָ铣חֻֻזגְֲֹ
倯ぢׄׯזֻג؝٦سָ剅ֽג׃ תֲ 㹋ꥷחٖؽُ٦ד鎉ֲֿהחזג؝٦ر؍ؚٝד䠐陎ׅ䗳銲ָ֮ (࣮ͨͩࡍʹʹͳΔ΄Ͳͷେ͖͞Ͱͳ͔ͬͨͷͰ ࣮ࡍʹʹͳΒͳ͍मਖ਼Ͱͨ͠)
7JFX.PEFM-JGFDZDMF0CTFSWFSח ׅ䗳銲ָזַ 3&"%.&״
7JFX.PEFM-JGFDZDMF0CTFSWFSח ׅ䗳銲ָזַ ˖ 7JFX.PEFM-JGFDZDMF0CTFSWFSחׅך כؕح؝؎؎ֽו䗳銲זְַ 3&"%.&״
7JFX.PEFM-JGFDZDMF0CTFSWFSח ׅ䗳銲ָזַ ˖ 7JFX.PEFM-JGFDZDMF0CTFSWFSחׅך כؕح؝؎؎ֽו䗳銲זְַ ˖ ̔醱侧ך'SBHNFOUדⰟ剣׃ծ "DUJWJUZה'SBHNFOUדⰟ剣׃׃儗 ח Ⰻ鿇涫ꐮׅךַծוךٓ؎ؿ؟؎ؙٕ
ךًاحسַⴓַזְկ 3&"%.&״
7JFX.PEFM-JGFDZDMF0CTFSWFSח ׅ䗳銲ָזַ ˖ 7JFX.PEFM-JGFDZDMF0CTFSWFSחׅך כؕح؝؎؎ֽו䗳銲זְַ ˖ ̔醱侧ך'SBHNFOUדⰟ剣׃ծ "DUJWJUZה'SBHNFOUדⰟ剣׃׃儗 ח Ⰻ鿇涫ꐮׅךַծוךٓ؎ؿ؟؎ؙٕ
ךًاحسַⴓַזְկ ˖ ࣮ࡍͦΜͳʹ͍ͬͯͳͯ͘ɺזח 㹱ָֽ֮דכזַָ搀䠐䠬 3&"%.&״
7JFXワךⳢ椚ָ醱꧟חזגֹג ٖؽُ٦穠圓鳞ַ
7JFXワךⳢ椚ָ醱꧟חזגֹג ٖؽُ٦穠圓鳞ַ ˖ 4DSPMMד嗚稊׃*TTVFה13ֽד⦐
7JFXワךⳢ椚ָ醱꧟חזגֹג ٖؽُ٦穠圓鳞ַ ˖ 4DSPMMד嗚稊׃*TTVFה13ֽד⦐ ˖ ⾱㔓כةـךⴖ剏ִזו7JFX.PEFM穗歋דכזֻծ 7JFXך؎كٝزַ湫䱸乼⡲׃גְַַ
7JFXワךⳢ椚ָ醱꧟חזגֹג ٖؽُ٦穠圓鳞ַ ˖ 4DSPMMד嗚稊׃*TTVFה13ֽד⦐ ˖ ⾱㔓כةـךⴖ剏ִזו7JFX.PEFM穗歋דכזֻծ 7JFXך؎كٝزַ湫䱸乼⡲׃גְַַ ˖ ̔湫׃倯ך؎ً٦آה׃גכ鋵ך'SBHNFOUװ"DUJWJUZך7JFX.PEFM鋅גأؙٗ٦ ٕזוד湫ֲׇ
7JFXワךⳢ椚ָ醱꧟חזגֹג ٖؽُ٦穠圓鳞ַ ˖ 4DSPMMד嗚稊׃*TTVFה13ֽד⦐ ˖ ⾱㔓כةـךⴖ剏ִזו7JFX.PEFM穗歋דכזֻծ 7JFXך؎كٝزַ湫䱸乼⡲׃גְַַ ˖ ̔湫׃倯ך؎ً٦آה׃גכ鋵ך'SBHNFOUװ"DUJWJUZך7JFX.PEFM鋅גأؙٗ٦ ٕזוד湫ֲׇ
˖ ̔תכ'MVYד朐䡾盖椚׃זהַדַֹ
7JFX.PEFMⰻדծוֿתד3Y+BWBד וֿתד-JWF%BUBד剅ַֻ㉏겗 ˖ ずؙׄٓأⰻח֮גծ㞮歲ָ切僳דծודוךְּ剅ַֻךهٔ ء٦ָזַկ ˖ 㛇劤涸חכ3Y+BWBךקֲָさ䧭הַ䖤䠐זכ׆זךדծח㺔ׇגְ ְָֹծ-JWF%BUBָ埆חְה⢪ְֻזגֻ val sessions:
LiveData<Result<List<Session>>> by lazy { repository.sessions .toResult(schedulerProvider) .toLiveData() } val isLoading: LiveData<Boolean> by lazy { sessions.map { it.inProgress } } ... ֿ̔刿倜ה朐䡾䭯אהָֿⴽղזծזהַזַ
%SPJE,BJHJك٦أח ،فٔ⡲ה׃
%SPJE,BJHJ،فٔזח醱꧟
%SPJE,BJHJ،فٔזח醱꧟ ˖ 知⽃חׅחإحءّٝ邌爙⟃㢩ך堣腉搀ֻ׃ 遤ꤐ׃TJNQMJGZـٓٝث欽䠐׃ךדծ ك٦أחְׄגה葺ְַ
TJNQMJGZـٓٝث⯋ח 鯪ֻ'MVY晛⡲ג
(SPVQJF4FDUJPO "DUJWJUZ'SBHNFOU ""$7JFX.PEFM 3FQPTJUPSZ 0CTFSWBCMF'MPXBCMF4FTTJPO -JWF%BUB3FTVMU NFUIPEDBMM-JGFDZDMF0CTFSWFS -JTU4FTTJPO*UFN .FUIPET -JWF%BUB
-JWF%BUB -JWF%BUB QPTU
"DUJPO$SFBUPS (SPVQJF4FDUJPO "DUJWJUZ'SBHNFOU 4UPSF ""$7JFX.PEFM 3FQPTJUPSZ 0CTFSWBCMF'MPXBCMF4FTTJPO -JWF%BUB3FTVMU -JTU4FTTJPO*UFN -JWF%BUB
-JWF%BUB -JWF%BUB %JTQBDIFS SYSFMBZ
TJNQMJGZـٓٝثַ 'MVY晛鯪ֻ⡲ג /&8 ˖ "CFNB57"OESPJEך'MVY،٦ؗذؙثٍ ׳ה罋ח׃גծ ""$《Ⰵך ˖ TJNQMJGZVYـٓٝثח֮תׅկ ˖
IUUQTHJUIVCDPN%SPJE,BJHJ DPOGFSFODFBQQDPNQBSF TJNQMJGZTJNQMJGZVY
TJNQMJGZـٓٝثַ 'MVY晛鯪ֻ⡲ג /&8
TJNQMJGZـٓٝثַ 'MVY晛鯪ֻ⡲ג /&8 ˖ "DUJPO$SFBUPS4UPSFכ 3Y3FMBZ⢪&WFOU#VT ˖ 4UPSFדכ-JWF%BUB䭯א ˖ 4UPSFכ7JFX.PEFMךהֹ֮לծ
4JOHMFUPOךהֹ֮
תה
תה ˖ "SDIJUFDUVSF$PNQPOFOUTك٦أדְז،٦ؗذؙثٍ罋ח׃ת׃կ
תה ˖ "SDIJUFDUVSF$PNQPOFOUTك٦أדְז،٦ؗذؙثٍ罋ח׃ת׃կ ˖ ׃罋ח،فٔ⡲גֻׁזծTJNQMJGZـٓٝثַ⡲גהְְַ ׃תׇկ ְֲֲֿ儗וֲׅלְְג䙼NBTUFSـٓٝثחְְ֮כ׆կ
תה ˖ "SDIJUFDUVSF$PNQPOFOUTك٦أדְז،٦ؗذؙثٍ罋ח׃ת׃կ ˖ ׃罋ח،فٔ⡲גֻׁזծTJNQMJGZـٓٝثַ⡲גהְְַ ׃תׇկ ְֲֲֿ儗וֲׅלְְג䙼NBTUFSـٓٝثחְְ֮כ׆կ ˖ 'MVYח莆ָ֮לծTJNQMJGZVYـٓٝثַ⡲גךְְַ׃תׇ կ
ְֲֲֿ儗וֲׅלְְג䙼"CFNB57ך؝٦س鋅לⴓַך דծ"CFNB57פ ⴓַ眔㔲ד֮ל兛鸐חֶ瘶ִ׃תׅկ
תה ˖ "SDIJUFDUVSF$PNQPOFOUTك٦أדְז،٦ؗذؙثٍ罋ח׃ת׃կ ˖ ׃罋ח،فٔ⡲גֻׁזծTJNQMJGZـٓٝثַ⡲גהְְַ ׃תׇկ ְֲֲֿ儗וֲׅלְְג䙼NBTUFSـٓٝثחְְ֮כ׆կ ˖ 'MVYח莆ָ֮לծTJNQMJGZVYـٓٝثַ⡲גךְְַ׃תׇ կ
ְֲֲֿ儗וֲׅלְְג䙼"CFNB57ך؝٦س鋅לⴓַך דծ"CFNB57פ ⴓַ眔㔲ד֮ל兛鸐חֶ瘶ִ׃תׅկ ˖ ֿך罋ִ倯ד⡲הה葺ֻזזוⰟ剣ְֽה㴍׃ְדׅɻ
ָ֮הֲ׀ְׂת׃