Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DroidKaigi 2018 App Architecture

takahirom
February 27, 2018

DroidKaigi 2018 App Architecture

takahirom

February 27, 2018
Tweet

More Decks by takahirom

Other Decks in Programming

Transcript

  1. %SPJE,BJHJ"QQ "SDIJUFDUVSF UBLBIJSPN

  2. ˖ UBLBIJSPN !OFX@SVOOBCMF  ˖ 劤せכ嬁「䃨峔 ׭׿ׄױ׋ַמ׹  ˖ "OESPJEָ㥨ֹדׅկ

    ˖ "CFNB57ך"OESPJE،فٔ׾⡲׏גְתׅկ ˖ %SPJE,BJHJⰕ䒭،فٔךٔ٦ت٦׾׃ת׃׋կ
 ⟃♳ךفؙٕٔؒأز֮׶ָהֲ׀ְׂת׃׋! 荈ⴓחאְג
  3. 鏣鎘ך鑧

  4. %SPJE,BJHJ،فٔך鏣鎘

  5. %SPJE,BJHJⰕ䒭،فٔהכ ˖ %SPJE,BJHJכؒٝآص،ָ⚺䕵ך"OESPJEؕٝؿ؋ٖٝأ דׅկ׉ךؕٝؿ؋ٖٝأךⰕ䒭،فٔדׅկ ˖ %SPJE,BJHJכ"OESPJE䪮遭䞔㜠ךⰟ剣ה؝ىُص؛٦ءّ ٝ׾湡涸חծ䎃剢傈 加 ծ傈 ꆃ

    ך傈꟦Ꟛ⪵ׁ׸ ת׃׋կ
  6. None
  7. ˖ إحءّٝ ˖ إحءّٝ׾ֶ孡חⰅ׶⳿勻׷ ˖ إحءّٝ׾䱱ׇ׷ ˖ ؿ؍٦سغحؙ׾鷏׸׷ ˖ ֶ濼׵ׇ

    ˖ 㖑㔳 ˖ أهٝ؟٦邌爙 ˖ זוזו %SPJE,BJHJ،فٔך堣腉
  8. ˖ ז׷ץֻ׋ֻׁ׿ך➂ָ鋅גꟼ׻׏ג嚂׃׭׷״ֲחׅ׷ ˖ ׫׿זָ⿫罋חדֹ׷׮ךחׅ׷ %SPJE,BJHJ،فٔך؞٦ٕ

  9. ˖ ,PUMJO ˖ "SDIJUFDUVSF$PNQPOFOUT׾⢪ֲ ˖ %SPJE,BJHJך،فٔזךדծ剑倜䪮遭װٓ؎ـٓٔכ
 ⢪ְ׋ְ קר寸ת׏גְ׋ֿה

  10. ⿫罋ח׃׋،٦ؗذؙثٍ

  11. .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״׶

  12. ˖ ⿠䎃ך%SPJE,BJHJ،فٔזוָ⢽חז׷կ .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״׶

  13. ˖ ⿠䎃ך%SPJE,BJHJ،فٔזוָ⢽חז׷կ ˖ %BUB#JOEJOH׾ⵃ欽ׅ׷կ .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״׶

  14. ˖ ⿠䎃ך%SPJE,BJHJ،فٔזוָ⢽חז׷կ ˖ %BUB#JOEJOH׾ⵃ欽ׅ׷կ ˖ 7JFX.PEFMַ׵4FTTJPOT3FQPTJUPSZOE"MM ׃ח 遤׏גծًٝغ㢌侧׾%BUB#JOEJOHדغ؎ٝسׅ׷ .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״׶

  15. ˖ ⿠䎃ך%SPJE,BJHJ،فٔזוָ⢽חז׷կ ˖ %BUB#JOEJOH׾ⵃ欽ׅ׷կ ˖ 7JFX.PEFMַ׵4FTTJPOT3FQPTJUPSZOE"MM ׃ח 遤׏גծًٝغ㢌侧׾%BUB#JOEJOHדغ؎ٝسׅ׷ ˖ ㉏겗挿

    .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״׶
  16. ˖ ⿠䎃ך%SPJE,BJHJ،فٔזוָ⢽חז׷կ ˖ %BUB#JOEJOH׾ⵃ欽ׅ׷կ ˖ 7JFX.PEFMַ׵4FTTJPOT3FQPTJUPSZOE"MM ׃ח 遤׏גծًٝغ㢌侧׾%BUB#JOEJOHדغ؎ٝسׅ׷ ˖ ㉏겗挿

    ˖ Ⰻֻずׄד׮㉏겗כזְָծ"SDIJUFDUVSF $PNQPOFOUTװ,PUMJOָוֲ䕦갟׾ׅ׷ַ׾罋ִ ׋ְկ .77. IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״׶
  17. ˖ ⿠䎃ך%SPJE,BJHJ،فٔזוָ⢽חז׷կ ˖ %BUB#JOEJOH׾ⵃ欽ׅ׷կ ˖ 7JFX.PEFMַ׵4FTTJPOT3FQPTJUPSZOE"MM ׃ח 遤׏גծًٝغ㢌侧׾%BUB#JOEJOHדغ؎ٝسׅ׷ ˖ ㉏겗挿

    ˖ Ⰻֻずׄד׮㉏겗כזְָծ"SDIJUFDUVSF $PNQPOFOUTװ,PUMJOָוֲ䕦갟׾ׅ׷ַ׾罋ִ ׋ְկ .77. ̔%BUB#JOEJOHכ⢪׏גְֹ׋ְ IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ״׶
  18. $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״׶

  19. ˖ EPNBJOךהֿ׹׾׍ׯ׿הⴓֽגծ
 ׉ך鿇ⴓחؽآطأٗآحָؙ剅ֽ׷ $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״׶

  20. ˖ EPNBJOךהֿ׹׾׍ׯ׿הⴓֽגծ
 ׉ך鿇ⴓחؽآطأٗآحָؙ剅ֽ׷ ˖ ׉׸ז׶ח⢪׻׸גְ׷孡ָׅ׷կ $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״׶

  21. ˖ EPNBJOךהֿ׹׾׍ׯ׿הⴓֽגծ
 ׉ך鿇ⴓחؽآطأٗآحָؙ剅ֽ׷ ˖ ׉׸ז׶ח⢪׻׸גְ׷孡ָׅ׷կ ˖ ㉏겗挿 $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״׶

  22. ˖ EPNBJOךהֿ׹׾׍ׯ׿הⴓֽגծ
 ׉ך鿇ⴓחؽآطأٗآحָؙ剅ֽ׷ ˖ ׉׸ז׶ח⢪׻׸גְ׷孡ָׅ׷կ ˖ ㉏겗挿 ˖ %SPJE,BJHJך鋉垷ח׃גכ麓ⶱד֮׷孡ָׅ׷ $MFBO"SDIJUFDUVSF

    IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״׶
  23. ˖ EPNBJOךהֿ׹׾׍ׯ׿הⴓֽגծ
 ׉ך鿇ⴓחؽآطأٗآحָؙ剅ֽ׷ ˖ ׉׸ז׶ח⢪׻׸גְ׷孡ָׅ׷կ ˖ ㉏겗挿 ˖ %SPJE,BJHJך鋉垷ח׃גכ麓ⶱד֮׷孡ָׅ׷ ˖

    孡鯪חכ؝ٝزٔؽُ٦ءّٝדֹזְ孡ָׅ׷ $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״׶
  24. ˖ EPNBJOךהֿ׹׾׍ׯ׿הⴓֽגծ
 ׉ך鿇ⴓחؽآطأٗآحָؙ剅ֽ׷ ˖ ׉׸ז׶ח⢪׻׸גְ׷孡ָׅ׷կ ˖ ㉏겗挿 ˖ %SPJE,BJHJך鋉垷ח׃גכ麓ⶱד֮׷孡ָׅ׷ ˖

    孡鯪חכ؝ٝزٔؽُ٦ءّٝדֹזְ孡ָׅ׷ ˖ 罋ִ倯׾《׶Ⰵ׸׷ךכְְ孡ָׅ׷ $MFBO"SDIJUFDUVSF IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״׶
  25. ˖ EPNBJOךהֿ׹׾׍ׯ׿הⴓֽגծ
 ׉ך鿇ⴓחؽآطأٗآحָؙ剅ֽ׷ ˖ ׉׸ז׶ח⢪׻׸גְ׷孡ָׅ׷կ ˖ ㉏겗挿 ˖ %SPJE,BJHJך鋉垷ח׃גכ麓ⶱד֮׷孡ָׅ׷ ˖

    孡鯪חכ؝ٝزٔؽُ٦ءّٝדֹזְ孡ָׅ׷ ˖ 罋ִ倯׾《׶Ⰵ׸׷ךכְְ孡ָׅ׷ $MFBO"SDIJUFDUVSF "1*זוךٖأهٝأ׾׉ךתת⢪׻׆
 وحؾؚٝ׃ג،فٔⰻדכ
 ֹ׸ְז&OUJUZ׾⢪ְ׋ְ ̔ IUUQTHJUIVCDPNBOESPJE"OESPJE$MFBO"SDIJUFDUVSF״׶
  26. 'MVY IUUQTHJUIVCDPNGBDFCPPLVY״׶

  27. ˖ וֿחזח׾剅ַֻծⳢ椚ך鷄ְװׁׅזוהג׮ⴓַ׶װְׅկ ⦐➂涸ח 'MVY IUUQTHJUIVCDPNGBDFCPPLVY״׶

  28. ˖ וֿחזח׾剅ַֻծⳢ椚ך鷄ְװׁׅזוהג׮ⴓַ׶װְׅկ ⦐➂涸ח ˖ ׋׌Ⰻ꬗涸ח《׶Ⰵ׸׷ה
 ˑז׷ץֻ׋ֻׁ׿ך➂ָ鋅גꟼ׻׏ג嚂׃׭׷״ֲח˒הְֲ䠐㄂ ַ׵鎉ֲה䒦爡⟃㢩ד֮ת׶鋅ַֽזְךד植朐כ⿑׃ְ 'MVY IUUQTHJUIVCDPNGBDFCPPLVY״׶

  29. ˖ וֿחזח׾剅ַֻծⳢ椚ך鷄ְװׁׅזוהג׮ⴓַ׶װְׅկ ⦐➂涸ח ˖ ׋׌Ⰻ꬗涸ח《׶Ⰵ׸׷ה
 ˑז׷ץֻ׋ֻׁ׿ך➂ָ鋅גꟼ׻׏ג嚂׃׭׷״ֲח˒הְֲ䠐㄂ ַ׵鎉ֲה䒦爡⟃㢩ד֮ת׶鋅ַֽזְךד植朐כ⿑׃ְ 'MVY 倯ぢךر٦ةך崧׸כ《׶Ⰵ׸גְֹ׋ְ ̔

    IUUQTHJUIVCDPNGBDFCPPLVY״׶
  30. 3FEVY

  31. ˖ 3FEVY荈⡤כ׍ׯ׿הٍؗحث،حفדֹגְזְ 3FEVY

  32. ˖ 3FEVY荈⡤כ׍ׯ׿הٍؗحث،حفדֹגְזְ ˖ ˑ.BOBHJOH4UBUFXJUI3Y+BWBCZ+BLF8IBSUPO˒דַז׶ 铡僇ָ֮׏׋կ 3FEVY

  33. ˖ 3FEVY荈⡤כ׍ׯ׿הٍؗحث،حفדֹגְזְ ˖ ˑ.BOBHJOH4UBUFXJUI3Y+BWBCZ+BLF8IBSUPO˒דַז׶ 铡僇ָ֮׏׋կ ˖ 㹋鄲׮鑐׫׋ָ䮲䫓կկ 3FEVY

  34. ˖ 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ך⡲׶倯כ⿫罋חז׶׉ֲ
  35. "SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״׶

  36. ˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈׫ָⰅ׶ծ
 ٓ؎ؿ؟؎ؙٕ׾֮ת׶䠐陎ׇ׆ח
 㹋鄲דֹ׷ "SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״׶

  37. ˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈׫ָⰅ׶ծ
 ٓ؎ؿ؟؎ؙٕ׾֮ת׶䠐陎ׇ׆ח
 㹋鄲דֹ׷ ˖ 3PPN׮㉏겗זֻ⢪ִ׉ֲ "SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״׶

  38. ˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈׫ָⰅ׶ծ
 ٓ؎ؿ؟؎ؙٕ׾֮ת׶䠐陎ׇ׆ח
 㹋鄲דֹ׷ ˖ 3PPN׮㉏겗זֻ⢪ִ׉ֲ ˖ ㉏겗挿 "SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״׶

  39. ˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈׫ָⰅ׶ծ
 ٓ؎ؿ؟؎ؙٕ׾֮ת׶䠐陎ׇ׆ח
 㹋鄲דֹ׷ ˖ 3PPN׮㉏겗זֻ⢪ִ׉ֲ ˖ ㉏겗挿 ˖ -JWF%BUBדכ-JWF%BUBず㡦׾穈׫さ׻ׇ

    ׷3Y+BWBדְֲ[JQך״ֲז⹛⡲ָ㣐㢌 "SDIJUFDUVSF$PNQPOFOU IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״׶
  40. ˖ ٓ؎ؿ؟؎ؙٕꟼ鸬ך➬穈׫ָⰅ׶ծ
 ٓ؎ؿ؟؎ؙٕ׾֮ת׶䠐陎ׇ׆ח
 㹋鄲דֹ׷ ˖ 3PPN׮㉏겗זֻ⢪ִ׉ֲ ˖ ㉏겗挿 ˖ -JWF%BUBדכ-JWF%BUBず㡦׾穈׫さ׻ׇ

    ׷3Y+BWBדְֲ[JQך״ֲז⹛⡲ָ㣐㢌 "SDIJUFDUVSF$PNQPOFOU ̔7JFX.PEFM -JWF%BUB 3PPNכⵃ欽ׅ׷ָ3Y+BWB׾⢘欽 IUUQTEFWFMPQFSBOESPJEDPNUPQJDMJCSBSJFTBSDIJUFDUVSFHVJEFIUNM״׶
  41. 罋ִ׋،٦ؗذؙثٍ

  42. 罋ִ׋،٦ؗذؙثٍ

  43. 罋ִ׋،٦ؗذؙثٍ ˖ 㛇劤涸ח"SDIJUFDUVSF$PNQPOFOUTך
 鏣鎘׾ك٦أח ˖ 䗳銲׌ה䙼ֲ׮ך׾酡㸣׃גְֻ䕎

  44. (SPVQJFך %BUB#JOEJOH؟ه٦ز׾ⵃ欽

  45. .BQQFS׾⢪׏גծ "1*זו✲䞔ָ،فٔⰻח Ⰵ׶鴥תזְ״ֲח

  46. 倯ぢדر٦ة׾ Ⳣ椚 "DUJWJUZ ̕ 7JFX.PEFMך.FUIPE ̕ 3FQPTJUPSZ  ̕ 7JFX.PEFMך-JWF%BUB

    ̕ "DUJWJUZ
  47. 0CTFSWBCMF׾UP3FTVMUד㢌䳔׃ג 3FTVMUחׅ׷

  48. ꬊず劍Ⳣ椚כ3Y+BWBך 0CTFSWBCMF'MPXBCMF

  49. ،٦ؗذؙثٍٖؽُ٦ך ⿾僥

  50. "1*ך/VMMBCMF׾Ⳣ椚ׅ׷הֿ׹׾ כ׏ֹ׶ׇׁ׷ /VMMBCMF׾.BQQFSדכ׏ֹ׶ׇׁ׷״ֲח׃ת׃׋կ

  51. -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
  52. ،٦ؗذؙثٍٖؽُ٦ך⿾僥 ˖ 7JFX.PEFMךًاحسせך鋉⵱ ˖ GBWPSJUF4FTTJPO 4FTTJPO PO'BWPSJUF$MJDL 4FTTJPO  7JFX.PEFMכ7JFXך؎كٝز׾「ֽ《׏גծוֲׅ׷ַⴻ倖ׅ׷䕎ח


    㢌刿
  53. ֿך،٦ؗذؙثٍך 葺ַ׏׋䨽

  54. .BQQFSָ葺ַ׏׋

  55. .BQQFSָ葺ַ׏׋ "1*ךٖأهٝأ ˖ "1*ךإحءّٝךر٦ةכ
 أؾ٦ؕ٦*%׌ֽ׾䭯׏גְ׷״ֲז朐䡾
 ֿ׸׾،فٔח崧ׅה
 ְ׹׿זהֿ׹ד4QFBLFS׾嗚稊ׅ׷䗳銲ָ⳿גֹ׋ TFTTJPOTQFBLFSTד
 أؾ٦ؕ٦♧鋮ח
 ،ؙإأדֹ׷״ֲח׃׋

  56. .BQQFSָ葺ַ׏׋ ˖ ،فٔך⚥דכ/VMMBCMF׾
 䠐陎׃זֻג葺ֻז׏׋ ˖ ♧鿇劤䔲חזְ〳腉䚍ָ
 ֮׷׮ךכOVMM׾Ⰵ׸׷

  57. .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
  58. ر٦ة׾
 倯ぢד崧ׇ׷״ֲח׃׋

  59. ر٦ة׾
 倯ぢד崧ׇ׷״ֲח׃׋

  60. ر٦ة׾
 倯ぢד崧ׇ׷״ֲח׃׋ ˖ -JWF%BUB׾穗歋׃גծ
 7JFXך朐䡾ך㢌刿׾崧ׅ״ֲח׃׋

  61. ر٦ة׾
 倯ぢד崧ׇ׷״ֲח׃׋ ˖ -JWF%BUB׾穗歋׃גծ
 7JFXך朐䡾ך㢌刿׾崧ׅ״ֲח׃׋ ˖ 'MVY،٦ؗذؙثٍךًٔحز׾֮׷ 玎䏝「ֽ׵׸׷״ֲחז׏׋

  62. ر٦ة׾
 倯ぢד崧ׇ׷״ֲח׃׋ ˖ -JWF%BUB׾穗歋׃גծ
 7JFXך朐䡾ך㢌刿׾崧ׅ״ֲח׃׋ ˖ 'MVY،٦ؗذؙثٍךًٔحز׾֮׷ 玎䏝「ֽ׵׸׷״ֲחז׏׋ ˖ 7JFXך朐䡾盖椚׾-JWF%BUBח⟣ׇ׷

  63. ر٦ة׾
 倯ぢד崧ׇ׷״ֲח׃׋ ˖ -JWF%BUB׾穗歋׃גծ
 7JFXך朐䡾ך㢌刿׾崧ׅ״ֲח׃׋ ˖ 'MVY،٦ؗذؙثٍךًٔحز׾֮׷ 玎䏝「ֽ׵׸׷״ֲחז׏׋ ˖ 7JFXך朐䡾盖椚׾-JWF%BUBח⟣ׇ׷

    ˖ 䕵ⶴָⴓַ׶װְׅזו
  64. ر٦ة׾
 倯ぢד崧ׇ׷״ֲח׃׋ ˖ -JWF%BUB׾穗歋׃גծ
 7JFXך朐䡾ך㢌刿׾崧ׅ״ֲח׃׋ ˖ 'MVY،٦ؗذؙثٍךًٔحز׾֮׷ 玎䏝「ֽ׵׸׷״ֲחז׏׋ ˖ 7JFXך朐䡾盖椚׾-JWF%BUBח⟣ׇ׷

    ˖ 䕵ⶴָⴓַ׶װְׅזו ˖ %#ח"1*ַ׵ر٦ة׾Ⰵ׸גծ
 %#ךر٦ةַ׵邌爙ׅ׷ֿהדծ
 ر٦ةך崧׸ָⴓַ׶װַׅ׏׋
  65. ֿך،٦ؗذؙثٍך 䝤ַ׏׋䨽ծ㉏겗חז׏׋䨽

  66. 倯ぢׄׯזֻג׮؝٦سָ剅ֽג׃ תֲ

  67. 倯ぢׄׯזֻג׮؝٦سָ剅ֽג׃ תֲ 倯ぢהְ׏גְ׷ָծ7JFX.PEFMך
 ًاحسⰻד
 -JWF%BUBⰻךEBUBָ鋅׸ג׃תֲկ
 ֿ׸׾׃׋澓꟦ח⽃倯ぢדזֻז׶
 ؝٦سָ铣׫חֻֻז׏גְֹ׉ֲ

  68. 倯ぢׄׯזֻג׮؝٦سָ剅ֽג׃ תֲ 㹋ꥷחٖؽُ٦ד׮鎉ֲֿהחז׏ג؝٦ر؍ؚٝד䠐陎ׅ׷䗳銲ָ֮׏׋ (࣮ͨͩࡍʹ໰୊ʹͳΔ΄Ͳͷେ͖͞Ͱ͸ͳ͔ͬͨͷͰ
 ࣮ࡍʹ͸໰୊ʹͳΒͳ͍मਖ਼Ͱͨ͠)

  69. 7JFX.PEFM׾-JGFDZDMF0CTFSWFSח
 ׅ׷䗳銲ָזַ׏׋ 3&"%.&״׶

  70. 7JFX.PEFM׾-JGFDZDMF0CTFSWFSח
 ׅ׷䗳銲ָזַ׏׋ ˖ 7JFX.PEFM׾-JGFDZDMF0CTFSWFSחׅ׷ך כؕح؝؎؎ֽו䗳銲זְַ׮ 3&"%.&״׶

  71. 7JFX.PEFM׾-JGFDZDMF0CTFSWFSח
 ׅ׷䗳銲ָזַ׏׋ ˖ 7JFX.PEFM׾-JGFDZDMF0CTFSWFSחׅ׷ך כؕح؝؎؎ֽו䗳銲זְַ׮ ˖ ̔醱侧ך'SBHNFOUדⰟ剣׃׋׶ծ "DUJWJUZה'SBHNFOUדⰟ剣׃׋׶׃׋儗 ח
 Ⰻ鿇涫ꐮׅ׷ךַծוךٓ؎ؿ؟؎ؙٕ

    ךًاحسַⴓַ׵זְկ 3&"%.&״׶
  72. 7JFX.PEFM׾-JGFDZDMF0CTFSWFSח
 ׅ׷䗳銲ָזַ׏׋ ˖ 7JFX.PEFM׾-JGFDZDMF0CTFSWFSחׅ׷ך כؕح؝؎؎ֽו䗳銲זְַ׮ ˖ ̔醱侧ך'SBHNFOUדⰟ剣׃׋׶ծ "DUJWJUZה'SBHNFOUדⰟ剣׃׋׶׃׋儗 ח
 Ⰻ鿇涫ꐮׅ׷ךַծוךٓ؎ؿ؟؎ؙٕ

    ךًاحسַⴓַ׵זְկ ˖ ࣮ࡍͦΜͳʹ࢖͍ͬͯͳͯ͘ɺ׉׿זח 㹱ָ֮׷׻ֽדכזַ׏׋ָ搀䠐㄂䠬 3&"%.&״׶
  73. 7JFXワ׶ךⳢ椚ָ醱꧟חז׏גֹג ٖؽُ٦׮穠圓鳞ַ׏׋

  74. 7JFXワ׶ךⳢ椚ָ醱꧟חז׏גֹג ٖؽُ٦׮穠圓鳞ַ׏׋ ˖ 4DSPMMד嗚稊׃׋*TTVFה13׌ֽד⦐

  75. 7JFXワ׶ךⳢ椚ָ醱꧟חז׏גֹג ٖؽُ٦׮穠圓鳞ַ׏׋ ˖ 4DSPMMד嗚稊׃׋*TTVFה13׌ֽד⦐ ˖ ⾱㔓כةـךⴖ׶剏ִזו׾7JFX.PEFM穗歋דכזֻծ
 7JFXך؎كٝزַ׵湫䱸乼⡲׃גְ׋ַ׵ַ׮

  76. 7JFXワ׶ךⳢ椚ָ醱꧟חז׏גֹג ٖؽُ٦׮穠圓鳞ַ׏׋ ˖ 4DSPMMד嗚稊׃׋*TTVFה13׌ֽד⦐ ˖ ⾱㔓כةـךⴖ׶剏ִזו׾7JFX.PEFM穗歋דכזֻծ
 7JFXך؎كٝزַ׵湫䱸乼⡲׃גְ׋ַ׵ַ׮ ˖ ̔湫׃倯ך؎ً٦آה׃גכ鋵ך'SBHNFOUװ"DUJWJUZך7JFX.PEFM׾鋅גأؙٗ٦ ٕזוד湫ׇ׉ֲ

  77. 7JFXワ׶ךⳢ椚ָ醱꧟חז׏גֹג ٖؽُ٦׮穠圓鳞ַ׏׋ ˖ 4DSPMMד嗚稊׃׋*TTVFה13׌ֽד⦐ ˖ ⾱㔓כةـךⴖ׶剏ִזו׾7JFX.PEFM穗歋דכזֻծ
 7JFXך؎كٝزַ׵湫䱸乼⡲׃גְ׋ַ׵ַ׮ ˖ ̔湫׃倯ך؎ً٦آה׃גכ鋵ך'SBHNFOUװ"DUJWJUZך7JFX.PEFM׾鋅גأؙٗ٦ ٕזוד湫ׇ׉ֲ

    ˖ ̔ת׋כ'MVYד朐䡾盖椚׃׋׵ז׿הַדֹ׋ַ׮
  78. 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 } } ... ֿ̔׸׮刿倜ה朐䡾׾䭯אהֿ׹ָⴽղז׵ծז׿הַז׏׋ַ׮
  79. %SPJE,BJHJ׾ك٦أח
 ،فٔ׾⡲׷ה׃׋׵

  80. %SPJE,BJHJ،فٔ׮׉׸ז׶ח醱꧟

  81. %SPJE,BJHJ،فٔ׮׉׸ז׶ח醱꧟ ˖ 知⽃חׅ׷׋׭חإحءّٝ邌爙⟃㢩ך堣腉搀ֻ׃
  遤⵴ꤐ׃׋TJNQMJGZـٓٝث׾欽䠐׃׋ךדծ
 ׉׸׾ك٦أחְׄ׏ג׫׷ה葺ְַ׮

  82. TJNQMJGZـٓٝث׾⯋ח 鯪ֻ'MVY晛⡲׏ג׫׋

  83. (SPVQJF4FDUJPO "DUJWJUZ'SBHNFOU ""$7JFX.PEFM 3FQPTJUPSZ 0CTFSWBCMF'MPXBCMF4FTTJPO -JWF%BUB3FTVMU NFUIPEDBMM-JGFDZDMF0CTFSWFS -JTU4FTTJPO*UFN .FUIPET -JWF%BUB

    -JWF%BUB -JWF%BUB QPTU
  84. "DUJPO$SFBUPS (SPVQJF4FDUJPO "DUJWJUZ'SBHNFOU 4UPSF ""$7JFX.PEFM 3FQPTJUPSZ 0CTFSWBCMF'MPXBCMF4FTTJPO -JWF%BUB3FTVMU -JTU4FTTJPO*UFN -JWF%BUB

    -JWF%BUB -JWF%BUB %JTQBDIFS SYSFMBZ
  85. TJNQMJGZـٓٝثַ׵
 'MVY晛鯪ֻ⡲׏ג׫׋ /&8 ˖ "CFNB57"OESPJEך'MVY،٦ؗذؙثٍ׾ ׍׳׏ה⿫罋ח׃גծ
 ""$׾《׶Ⰵ׸׋׮ך ˖ TJNQMJGZVYـٓٝثח֮׶תׅկ ˖

    IUUQTHJUIVCDPN%SPJE,BJHJ DPOGFSFODFBQQDPNQBSF TJNQMJGZTJNQMJGZVY
  86. TJNQMJGZـٓٝثַ׵
 'MVY晛鯪ֻ⡲׏ג׫׋ /&8

  87. TJNQMJGZـٓٝثַ׵
 'MVY晛鯪ֻ⡲׏ג׫׋ /&8 ˖ "DUJPO$SFBUPS4UPSFכ
 3Y3FMBZ׾⢪׏׋&WFOU#VT ˖ 4UPSFדכ-JWF%BUB׾䭯א ˖ 4UPSFכ7JFX.PEFMךהֹ׮֮׸לծ

    4JOHMFUPOךהֹ׮֮׷
  88. תה׭

  89. תה׭ ˖ "SDIJUFDUVSF$PNQPOFOUTك٦أדְ׹׿ז،٦ؗذؙثٍ׾⿫罋ח׃ת׃׋կ

  90. תה׭ ˖ "SDIJUFDUVSF$PNQPOFOUTك٦أדְ׹׿ז،٦ؗذؙثٍ׾⿫罋ח׃ת׃׋կ ˖ ׮׃⿫罋ח،فٔ׾⡲׏גֻ׌ׁ׷ז׵ծTJNQMJGZـٓٝثַ׵⡲׏ג׫׷הְְַ ׮׃׸תׇ׿կ
 ְֲֲֿ儗וֲׅ׸לְְ׿׌׹׏ג䙼׏׋׵NBTUFSـٓٝثח׌ְ׋ְ֮׷כ׆կ

  91. תה׭ ˖ "SDIJUFDUVSF$PNQPOFOUTك٦أדְ׹׿ז،٦ؗذؙثٍ׾⿫罋ח׃ת׃׋կ ˖ ׮׃⿫罋ח،فٔ׾⡲׏גֻ׌ׁ׷ז׵ծTJNQMJGZـٓٝثַ׵⡲׏ג׫׷הְְַ ׮׃׸תׇ׿կ
 ְֲֲֿ儗וֲׅ׸לְְ׿׌׹׏ג䙼׏׋׵NBTUFSـٓٝثח׌ְ׋ְ֮׷כ׆կ ˖ 'MVYח莆㄂ָ֮׸לծTJNQMJGZVYـٓٝثַ׵⡲׏ג׫׷ך׮ְְַ׮׃׸תׇ ׿կ


    ְֲֲֿ儗וֲׅ׸לְְ׿׌׹׏ג䙼׏׋׵"CFNB57ך؝٦س׾鋅׸לⴓַ׷ך דծ"CFNB57פ ⴓַ׷眔㔲ד֮׸ל兛鸐חֶ瘶ִ׃תׅկ
  92. תה׭ ˖ "SDIJUFDUVSF$PNQPOFOUTك٦أדְ׹׿ז،٦ؗذؙثٍ׾⿫罋ח׃ת׃׋կ ˖ ׮׃⿫罋ח،فٔ׾⡲׏גֻ׌ׁ׷ז׵ծTJNQMJGZـٓٝثַ׵⡲׏ג׫׷הְְַ ׮׃׸תׇ׿կ
 ְֲֲֿ儗וֲׅ׸לְְ׿׌׹׏ג䙼׏׋׵NBTUFSـٓٝثח׌ְ׋ְ֮׷כ׆կ ˖ 'MVYח莆㄂ָ֮׸לծTJNQMJGZVYـٓٝثַ׵⡲׏ג׫׷ך׮ְְַ׮׃׸תׇ ׿կ


    ְֲֲֿ儗וֲׅ׸לְְ׿׌׹׏ג䙼׏׋׵"CFNB57ך؝٦س׾鋅׸לⴓַ׷ך דծ"CFNB57פ ⴓַ׷眔㔲ד֮׸ל兛鸐חֶ瘶ִ׃תׅկ ˖ ֿך罋ִ倯ד⡲׷ה׮׏ה葺ֻז׷זוⰟ剣ְ׋׌ֽ׷ה㴍׃ְדׅɻ
  93. ֮׶ָהֲ׀ְׂת׃׋