Skip to content

Apply MVI pattern #21

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 56 commits into from
Nov 8, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
679585f
Chore: mvi 프레임워크 추가
jisungbin Sep 18, 2021
6a1da4c
Update README.md
Sep 18, 2021
8164c7a
Update README.md
Sep 18, 2021
2127992
Update README.md
Sep 18, 2021
e42af0e
Refactor: Apply MVI (1)
jisungbin Sep 19, 2021
5950f1a
Merge remote-tracking branch 'origin/feature/mvi' into feature/mvi
jisungbin Sep 19, 2021
fa49ccc
Remove: remove useless suspend
jisungbin Sep 19, 2021
77a7bad
Refactor: Apply MVI (2)
jisungbin Sep 19, 2021
4e3343c
Refactor: Apply MVI (2)
jisungbin Sep 19, 2021
2b50731
Update README.md
Sep 19, 2021
93ee550
Update README.md
Sep 19, 2021
ca27fa4
Update README.md
Sep 19, 2021
92e3d6f
Update README.md
Sep 19, 2021
3429b20
Update README.md
Sep 19, 2021
2ec9d3f
Refactor: Change MVI packages
jisungbin Sep 19, 2021
f2a5b3c
Merge remote-tracking branch 'origin/feature/mvi' into feature/mvi
jisungbin Sep 19, 2021
9667d2e
Refactor: 네이밍 변경
jisungbin Sep 19, 2021
3659011
Feat: 에러 다이얼로그 추가
jisungbin Sep 22, 2021
091dcda
Refactor: 프로젝트 dependency 정리
jisungbin Sep 22, 2021
f3f9455
Chore: jackson 의존성 빠진거 추가
jisungbin Sep 22, 2021
86fbc2c
Refactor: project clean-up
jisungbin Sep 22, 2021
eab652e
Refactor: project clean-up
jisungbin Sep 22, 2021
d2998da
Update README.md
Sep 22, 2021
59f5eae
Refactor: apply compose-navigation
jisungbin Sep 22, 2021
9a0924a
Merge remote-tracking branch 'origin/feature/mvi' into feature/mvi
jisungbin Sep 22, 2021
261f4b7
Refactor: Apply MVI (3)
jisungbin Sep 23, 2021
476c470
Refactor: Apply MVI (4)
jisungbin Sep 23, 2021
69a33df
Refactor: Apply MVI (5)
jisungbin Sep 23, 2021
979dc1a
Chore: fix jackson dependency missing error
jisungbin Sep 23, 2021
fc50d34
Refactor: Apply MVI (6)
jisungbin Sep 23, 2021
6f12b5f
Fix: 대쉬보드 배경색 투명 수정, 셋업에서 인텐드 처리 버그 수정
jisungbin Sep 23, 2021
08dfead
Update README.md
Sep 24, 2021
67ee2e4
Update
jisungbin Sep 28, 2021
2f9ba8c
Merge remote-tracking branch 'origin/feature/mvi' into feature/mvi
jisungbin Sep 28, 2021
9c5931c
Update README.md
Sep 30, 2021
d7aa5fd
Update
jisungbin Oct 8, 2021
8b80acb
Merge remote-tracking branch 'origin/feature/mvi' into feature/mvi
jisungbin Oct 8, 2021
427edf2
Code cleanup
jisungbin Oct 9, 2021
5c9a11b
Update README.md
jisungbin Nov 5, 2021
4efc88a
Refactoring - 1
jisungbin Nov 7, 2021
fdd4eaa
Refactoring - 2
jisungbin Nov 7, 2021
0b39198
Refactoring - 3
jisungbin Nov 7, 2021
c66e767
Refactoring - 4
jisungbin Nov 7, 2021
3c8d752
Refactoring - 5
jisungbin Nov 7, 2021
1909eb6
Refactoring - 6
jisungbin Nov 7, 2021
dc8345f
Refactoring - 7
jisungbin Nov 7, 2021
b1bc8c8
Update README.md
jisungbin Nov 7, 2021
60ca77b
Refactoring - 8
jisungbin Nov 8, 2021
451dd69
Merge remote-tracking branch 'origin/feature/mvi-refactoring' into fe…
jisungbin Nov 8, 2021
38f9897
Refactoring - 9
jisungbin Nov 8, 2021
16a1c3a
Refactoring - 9
jisungbin Nov 8, 2021
259f5a3
Refactoring - 10
jisungbin Nov 8, 2021
4c339ff
Update README.md
jisungbin Nov 8, 2021
d3da5ec
Merge pull request #20 from GitMessengerBot/feature/mvi-refactoring
jisungbin Nov 8, 2021
cb313e0
Update README.md
jisungbin Nov 8, 2021
1297dff
Update README.md
jisungbin Nov 8, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@

0. 100% Kotlin [![awesome-kotlin](https://kotlin.link/awesome-kotlin.svg)](https://kotlin.link)
1. Jetpack Compose
2. MVI/Repository Pattern (MVI framework: [Orbit](https://github.com/orbit-mvi/orbit-mvi))
2. MVVM+MVI/Repository Pattern (MVI framework: [Orbit](https://github.com/orbit-mvi/orbit-mvi))
3. Coroutines, Flow
4. Retrofit, OkHttp
5. Dagger2 - Hilt
Expand Down
8 changes: 4 additions & 4 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ buildscript {
}

dependencies {
classpath("com.chaquo.python:gradle:${Versions.Essential.Python}")
classpath("com.chaquo.python:gradle:${Versions.Bot.Python}")
classpath("com.android.tools.build:gradle:${Versions.Essential.Gradle}")
classpath("com.google.dagger:hilt-android-gradle-plugin:${Versions.Hilt.Master}")
classpath("com.google.dagger:hilt-android-gradle-plugin:${Versions.Jetpack.Hilt}")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.Essential.Kotlin}")
classpath("com.google.android.gms:oss-licenses-plugin:${Versions.OssLicense.Classpath}")
}
Expand All @@ -39,8 +39,8 @@ allprojects {
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = freeCompilerArgs + listOf(
"-Xopt-in=kotlin.RequiresOptIn",
"-Xopt-in=kotlin.OptIn"
"-Xopt-in=kotlin.OptIn",
"-Xopt-in=kotlin.RequiresOptIn"
)
}
}
Expand Down
136 changes: 61 additions & 75 deletions buildSrc/src/main/kotlin/Dependencies.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import org.gradle.api.JavaVersion

object Application {
const val minSdk = 24
const val targetSdk = 30
const val compileSdk = 30
const val targetSdk = 31
const val compileSdk = 31
const val jvmTarget = "11"
const val versionCode = 1
const val versionName = "please_die_fucking_covid"
Expand All @@ -22,64 +22,57 @@ object Application {
}

object Versions {
const val Orbit = "4.2.0"

object Essential {
const val Python = "9.1.0"
const val Kotlin = "1.5.21"
const val Kotlin = "1.5.31"
const val CoreKtx = "1.6.0"
const val Coroutines = "1.5.1"
const val Gradle = "7.1.0-alpha05"
const val Gradle = "7.1.0-beta02"
}

object Bot {
const val Python = "9.1.0"
const val Rhino = "1.7.13"
const val J2V8 = "6.2.1@aar"
}

object Ui {
const val Browser = "1.3.0"
const val Material = "1.4.0"
const val TimeLineView = "1.0.2"
const val LottieCompose = "4.1.0"
const val FancyBottomBar = "1.0.1"
const val LandscapistCoil = "1.3.6"
const val ConstraintLayout = "1.0.0-beta01"
}

object Util {
const val Pluto = "1.0.7"
const val Timber = "5.0.1"
const val Pluto = "1.1.1"
const val Erratum = "1.0.1"
const val Logeukes = "1.0.0"
const val Jackson = "2.13.0"
const val LeakCanary = "2.7"
const val KeyboardObserver = "1.0.1"
const val ViewColorGenerator = "v0.1"
const val CheckDependencyUpdates = "1.5.0"
}

object Network {
const val Jsoup = "1.14.2"
const val OkHttp = "4.9.1"
const val Jsoup = "1.14.3"
const val OkHttp = "4.9.2"
const val Retrofit = "2.9.0"
}

object Jetpack {
const val Room = "2.3.0"
}

object Jackson {
const val Master = "2.12.5"
}

object Hilt {
const val Master = "2.38.1"
const val Hilt = "2.40"
}

object Compose {
const val Master = "1.0.2"
const val Activity = "1.3.1"
}

object Lifecycle {
const val Master = "2.3.1"
const val Compose = "1.0.0-alpha07"
const val Lottie = "4.2.0"
const val Master = "1.0.5"
const val Activity = "1.4.0"
const val Lifecycle = "2.4.0"
const val TimeLineView = "1.0.2"
const val FancyBottomBar = "1.0.1"
const val LandscapistCoil = "1.4.1"
const val Navigation = "2.4.0-alpha09"
const val ConstraintLayout = "1.0.0-beta01"
}

object OssLicense {
Expand All @@ -89,83 +82,76 @@ object Versions {
}

object Dependencies {
const val jsoup = "org.jsoup:jsoup:${Versions.Network.Jsoup}"

const val Jsoup = "org.jsoup:jsoup:${Versions.Network.Jsoup}"
const val Orbit = "org.orbit-mvi:orbit-viewmodel:${Versions.Orbit}"
const val browser = "androidx.browser:browser:${Versions.Ui.Browser}"
const val LandscapistCoil =
"com.github.skydoves:landscapist-coil:${Versions.Ui.LandscapistCoil}"
"com.github.skydoves:landscapist-coil:${Versions.Compose.LandscapistCoil}"

const val hilt = "com.google.dagger:hilt-android:${Versions.Hilt.Master}"
const val hiltCompiler = "com.google.dagger:hilt-android-compiler:${Versions.Hilt.Master}"
const val Hilt = "com.google.dagger:hilt-android:${Versions.Jetpack.Hilt}"
const val HiltCompiler = "com.google.dagger:hilt-android-compiler:${Versions.Jetpack.Hilt}"

const val roomCompiler = "androidx.room:room-compiler:${Versions.Jetpack.Room}"
const val RoomCompiler = "androidx.room:room-compiler:${Versions.Jetpack.Room}"

const val livedata =
"androidx.lifecycle:lifecycle-livedata-core-ktx:${Versions.Lifecycle.Master}"

const val jacksonModule =
"com.fasterxml.jackson.module:jackson-module-kotlin:${Versions.Jackson.Master}"
val Essential = listOf(
"androidx.core:core-ktx:${Versions.Essential.CoreKtx}",
"org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.Essential.Coroutines}"
)

val bot = listOf(
val Bot = listOf(
"org.mozilla:rhino:${Versions.Bot.Rhino}",
"com.eclipsesource.j2v8:j2v8:${Versions.Bot.J2V8}"
)

val debug = listOf(
"com.mocklets:pluto:${Versions.Util.Pluto}",
"com.squareup.leakcanary:leakcanary-android:${Versions.Util.LeakCanary}"
val Ui = listOf(
"com.google.android.material:material:${Versions.Ui.Material}",
"com.google.android.gms:play-services-oss-licenses:${Versions.OssLicense.Master}"
)

val release = listOf("com.mocklets:pluto-no-op:${Versions.Util.Pluto}")

val jackson = listOf(
"com.fasterxml.jackson.core:jackson-core:${Versions.Jackson.Master}",
"com.fasterxml.jackson.core:jackson-databind:${Versions.Jackson.Master}",
"com.fasterxml.jackson.core:jackson-annotations:${Versions.Jackson.Master}"
val Jackson = listOf(
"com.fasterxml.jackson.core:jackson-core:${Versions.Util.Jackson}",
"com.fasterxml.jackson.core:jackson-databind:${Versions.Util.Jackson}",
"com.fasterxml.jackson.core:jackson-annotations:${Versions.Util.Jackson}",
"com.fasterxml.jackson.module:jackson-module-kotlin:${Versions.Util.Jackson}"
)

val retrofit = listOf(
val Retrofit = listOf(
"com.squareup.okhttp3:okhttp:${Versions.Network.OkHttp}",
"com.squareup.retrofit2:retrofit:${Versions.Network.Retrofit}"
)

val retrofitutil = listOf(
val RetrofitUtil = listOf(
"com.squareup.okhttp3:logging-interceptor:${Versions.Network.OkHttp}",
"com.squareup.retrofit2:converter-jackson:${Versions.Network.Retrofit}"
)

val essential = listOf(
"androidx.core:core-ktx:${Versions.Essential.CoreKtx}",
"org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.Essential.Coroutines}"
val Util = listOf(
"io.github.jisungbin:erratum:${Versions.Util.Erratum}",
"io.github.jisungbin:logeukes:${Versions.Util.Logeukes}",
"io.github.ParkSangGwon:tedkeyboardobserver:${Versions.Util.KeyboardObserver}"
)

val ui = listOf(
"io.github.jisungbin:timelineview:${Versions.Ui.TimeLineView}",
"com.google.android.material:material:${Versions.Ui.Material}",
"com.airbnb.android:lottie-compose:${Versions.Ui.LottieCompose}",
"io.github.jisungbin:fancybottombar:${Versions.Ui.FancyBottomBar}",
"com.google.android.gms:play-services-oss-licenses:${Versions.OssLicense.Master}",
"androidx.constraintlayout:constraintlayout-compose:${Versions.Ui.ConstraintLayout}"
)

val util = listOf(
"com.jakewharton.timber:timber:${Versions.Util.Timber}",
"io.github.ParkSangGwon:tedkeyboardobserver:${Versions.Util.KeyboardObserver}",
"com.github.MindorksOpenSource:ViewColorGenerator:${Versions.Util.ViewColorGenerator}"
)

val room = listOf(
val Room = listOf(
"androidx.room:room-ktx:${Versions.Jetpack.Room}",
"androidx.room:room-runtime:${Versions.Jetpack.Room}"
)

val compose = listOf(
val Compose = listOf(
"androidx.compose.ui:ui:${Versions.Compose.Master}",
"androidx.compose.ui:ui-tooling:${Versions.Compose.Master}",
"com.airbnb.android:lottie-compose:${Versions.Compose.Lottie}",
"androidx.compose.compiler:compiler:${Versions.Compose.Master}",
"androidx.compose.material:material:${Versions.Compose.Master}",
"androidx.activity:activity-compose:${Versions.Compose.Activity}",
"androidx.compose.runtime:runtime-livedata:${Versions.Compose.Master}",
"androidx.lifecycle:lifecycle-viewmodel-compose:${Versions.Lifecycle.Compose}"
"io.github.jisungbin:timelineview:${Versions.Compose.TimeLineView}",
"io.github.jisungbin:fancybottombar:${Versions.Compose.FancyBottomBar}",
"androidx.navigation:navigation-compose:${Versions.Compose.Navigation}",
"androidx.lifecycle:lifecycle-viewmodel-compose:${Versions.Compose.Lifecycle}",
"androidx.constraintlayout:constraintlayout-compose:${Versions.Compose.ConstraintLayout}"
)

val Debug = listOf(
"com.mocklets:pluto:${Versions.Util.Pluto}",
"com.squareup.leakcanary:leakcanary-android:${Versions.Util.LeakCanary}"
)
}
8 changes: 3 additions & 5 deletions common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,9 @@ android {
}

dependencies {
implementation(Dependencies.jsoup)
implementation(Dependencies.Jsoup)
implementation(Dependencies.browser)
implementation(Dependencies.livedata)
implementation(Dependencies.jacksonModule)

Dependencies.essential.forEach(::api)
Dependencies.jackson.forEach(::implementation)
Dependencies.Essential.forEach(::api)
Dependencies.Jackson.forEach(::implementation)
}
6 changes: 2 additions & 4 deletions common/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!--
<?xml version="1.0" encoding="utf-8"?><!--
~ GitMessengerBot © 2021 지성빈 & 구환. all rights reserved.
~ GitMessengerBot license is under the GPL-3.0.
~
Expand All @@ -7,6 +7,4 @@
~ Please see: https://github.com/GitMessengerBot/GitMessengerBot-Android/blob/master/LICENSE.
-->

<manifest package="io.github.jisungbin.gitmessengerbot.util">

</manifest>
<manifest package="io.github.jisungbin.gitmessengerbot.util" />
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
* Please see: https://github.com/GitMessengerBot/GitMessengerBot-Android/blob/master/LICENSE.
*/

package io.github.jisungbin.gitmessengerbot.common.config
package io.github.jisungbin.gitmessengerbot.common.constant

object Config {
object BotConstant {
const val KakaoTalkDefaultPackageName = "com.kakao.talk"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
* Please see: https://github.com/GitMessengerBot/GitMessengerBot-Android/blob/master/LICENSE.
*/

package io.github.jisungbin.gitmessengerbot.common.config
package io.github.jisungbin.gitmessengerbot.common.constant

object EditorConfig {
object EditorConstant {
const val HorizontalScroll = true
const val FontName = "" // TODO
const val FontSize = 13
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@
* Please see: https://github.com/GitMessengerBot/GitMessengerBot-Android/blob/master/LICENSE.
*/

package io.github.jisungbin.gitmessengerbot.common.config
package io.github.jisungbin.gitmessengerbot.common.constant

object GithubConfig {
object GithubConstant {
const val BaseUrl = "https://github.com"
const val BaseApiUrl = "https://api.github.com"

const val DataPath = "${PathConfig.AppStorage}/github-data.json"
const val DataPath = "${PathConstant.AppStorage}/github-data.json"

const val DefaultBranch = "main"
const val DefaultRepoDescription = "Created by GitMessengerBot"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
* Please see: https://github.com/GitMessengerBot/GitMessengerBot-Android/blob/master/LICENSE.
*/

package io.github.jisungbin.gitmessengerbot.common.config
package io.github.jisungbin.gitmessengerbot.common.constant

object IntentConfig {
object IntentConstant {
const val ScriptId = "intent-script-id"
const val DebugScriptId = "intent-debug-script-id"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
* Please see: https://github.com/GitMessengerBot/GitMessengerBot-Android/blob/master/LICENSE.
*/

package io.github.jisungbin.gitmessengerbot.common.config
package io.github.jisungbin.gitmessengerbot.common.constant

object PathConfig {
object PathConstant {
internal const val AppStorage = "GitMessengerBot/data"
const val AppData = "$AppStorage/app.json"
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,28 @@
* Please see: https://github.com/GitMessengerBot/GitMessengerBot-Android/blob/master/LICENSE.
*/

package io.github.jisungbin.gitmessengerbot.common.config
package io.github.jisungbin.gitmessengerbot.common.constant

import io.github.jisungbin.gitmessengerbot.common.script.getScriptSuffix
import io.github.jisungbin.gitmessengerbot.common.script.toScriptLangName
import kotlin.random.Random

@Suppress("FunctionName")
object ScriptConfig {
object ScriptConstant {
const val DebugAllBot = -1
const val EvalId = -2

const val DefaultResponseFunctionName = "onMessage"
const val DebugAllPath = "${PathConfig.AppStorage}/debug"
const val DebugAllPath = "${PathConstant.AppStorage}/debug"

fun DebugDataPath(scriptId: Int) =
"${PathConfig.AppStorage}/debug/$scriptId/${Random.nextInt()}.json"
"${PathConstant.AppStorage}/debug/$scriptId/${Random.nextInt()}.json"

fun ScriptPath(name: String, lang: Int) =
"${PathConfig.AppStorage}/scripts/${lang.toScriptLangName()}/$name.${lang.getScriptSuffix()}"
"${PathConstant.AppStorage}/scripts/${lang.toScriptLangName()}/$name.${lang.getScriptSuffix()}"

fun ScriptListPath(lang: Int) = "${PathConfig.AppStorage}/scripts/${lang.toScriptLangName()}"
fun ScriptListPath(lang: Int) = "${PathConstant.AppStorage}/scripts/${lang.toScriptLangName()}"

fun ScriptDataPath(name: String, lang: Int) =
"${PathConfig.AppStorage}/scripts/${lang.toScriptLangName()}/$name-data.json"
"${PathConstant.AppStorage}/scripts/${lang.toScriptLangName()}/$name-data.json"
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

package io.github.jisungbin.gitmessengerbot.common.exception

class TodoException(where: String) : Exception("$where 은 아직 개발되지 않은 기능입니다.")

class CoreException(override val message: String?) : Exception()

class DataGithubException(override val message: String?) : Exception()
Expand Down
Loading