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
AIエージェントで 変わるAndroid開発環境
takahirom
3
820
AndroidアプリのAI実装をAndroidifyで学ぶ ー Google公式サンプルによる体験と実装 ー
takahirom
0
150
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
1.1k
Google の LLM ライブラリ を Android アプリで 使うには?
takahirom
1
2.2k
Robolectric Native Graphics and Roborazzi
takahirom
1
2.3k
Androidアプリで安定して動作させ継続的に開発するために設計の原則を利用して開発した話
takahirom
3
1.5k
Android Tools & Performance
takahirom
1
1.3k
Jetpack Compose State Practices
takahirom
1
1.5k
Inside Jetpack Compose
takahirom
1
1.1k
Other Decks in Programming
See All in Programming
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
5k
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
250
AIが無かった頃の素敵な出会いの話
codmoninc
1
470
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
720
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.9k
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
530
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
390
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
190
Flow は今どうなっているか
mizdra
PRO
0
630
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.4k
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
300
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
430
Featured
See All Featured
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
230
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
250
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Done Done
chrislema
186
16k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Ethics towards AI in product and experience design
skipperchong
2
350
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Everyday Curiosity
cassininazir
0
290
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
300
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
250
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פ ⴓַ眔㔲ד֮ל兛鸐חֶ瘶ִ׃תׅկ ˖ ֿך罋ִ倯ד⡲הה葺ֻזזוⰟ剣ְֽה㴍׃ְדׅɻ
ָ֮הֲ׀ְׂת׃