diff --git a/feature/settings/.gitignore b/feature/bookmark/.gitignore
similarity index 100%
rename from feature/settings/.gitignore
rename to feature/bookmark/.gitignore
diff --git a/feature/bookmark/build.gradle.kts b/feature/bookmark/build.gradle.kts
new file mode 100644
index 0000000..a6d4e67
--- /dev/null
+++ b/feature/bookmark/build.gradle.kts
@@ -0,0 +1,44 @@
+@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
+plugins {
+ alias(libs.plugins.androidLibrary)
+ alias(libs.plugins.kotlinAndroid)
+}
+
+android {
+ namespace = "store.newsbriefing.app.feature.bookmark"
+ compileSdk = 34
+
+ defaultConfig {
+ minSdk = 24
+
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles("consumer-rules.pro")
+ }
+
+ buildTypes {
+ release {
+ isMinifyEnabled = false
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"),
+ "proguard-rules.pro"
+ )
+ }
+ }
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = "1.8"
+ }
+}
+
+dependencies {
+
+ implementation(libs.core.ktx)
+ implementation(libs.androidx.appcompat)
+ implementation(libs.material)
+ testImplementation(libs.junit)
+ androidTestImplementation(libs.androidx.test.ext.junit)
+ androidTestImplementation(libs.espresso.core)
+}
\ No newline at end of file
diff --git a/feature/bookmark/consumer-rules.pro b/feature/bookmark/consumer-rules.pro
new file mode 100644
index 0000000..e69de29
diff --git a/feature/bookmark/proguard-rules.pro b/feature/bookmark/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/feature/bookmark/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/feature/settings/src/androidTest/java/store/newsbriefing/app/feature/settings/ExampleInstrumentedTest.kt b/feature/bookmark/src/androidTest/java/store/newsbriefing/app/feature/bookmark/ExampleInstrumentedTest.kt
similarity index 84%
rename from feature/settings/src/androidTest/java/store/newsbriefing/app/feature/settings/ExampleInstrumentedTest.kt
rename to feature/bookmark/src/androidTest/java/store/newsbriefing/app/feature/bookmark/ExampleInstrumentedTest.kt
index 6c33ec8..8181364 100644
--- a/feature/settings/src/androidTest/java/store/newsbriefing/app/feature/settings/ExampleInstrumentedTest.kt
+++ b/feature/bookmark/src/androidTest/java/store/newsbriefing/app/feature/bookmark/ExampleInstrumentedTest.kt
@@ -1,4 +1,4 @@
-package store.newsbriefing.app.feature.settings
+package store.newsbriefing.app.feature.bookmark
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -19,6 +19,6 @@ class ExampleInstrumentedTest {
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
- assertEquals("store.newsbriefing.app.feature.settings.test", appContext.packageName)
+ assertEquals("store.newsbriefing.app.feature.bookmark.test", appContext.packageName)
}
}
\ No newline at end of file
diff --git a/feature/settings/src/main/AndroidManifest.xml b/feature/bookmark/src/main/AndroidManifest.xml
similarity index 100%
rename from feature/settings/src/main/AndroidManifest.xml
rename to feature/bookmark/src/main/AndroidManifest.xml
diff --git a/feature/settings/src/test/java/store/newsbriefing/app/feature/settings/ExampleUnitTest.kt b/feature/bookmark/src/test/java/store/newsbriefing/app/feature/bookmark/ExampleUnitTest.kt
similarity index 86%
rename from feature/settings/src/test/java/store/newsbriefing/app/feature/settings/ExampleUnitTest.kt
rename to feature/bookmark/src/test/java/store/newsbriefing/app/feature/bookmark/ExampleUnitTest.kt
index 2033bbc..9b1b531 100644
--- a/feature/settings/src/test/java/store/newsbriefing/app/feature/settings/ExampleUnitTest.kt
+++ b/feature/bookmark/src/test/java/store/newsbriefing/app/feature/bookmark/ExampleUnitTest.kt
@@ -1,4 +1,4 @@
-package store.newsbriefing.app.feature.settings
+package store.newsbriefing.app.feature.bookmark
import org.junit.Test
diff --git a/feature/home/.gitignore b/feature/home/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/feature/home/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/feature/home/build.gradle.kts b/feature/home/build.gradle.kts
new file mode 100644
index 0000000..a779540
--- /dev/null
+++ b/feature/home/build.gradle.kts
@@ -0,0 +1,44 @@
+@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
+plugins {
+ alias(libs.plugins.androidLibrary)
+ alias(libs.plugins.kotlinAndroid)
+}
+
+android {
+ namespace = "store.newsbriefing.app.feature.home"
+ compileSdk = 34
+
+ defaultConfig {
+ minSdk = 24
+
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles("consumer-rules.pro")
+ }
+
+ buildTypes {
+ release {
+ isMinifyEnabled = false
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"),
+ "proguard-rules.pro"
+ )
+ }
+ }
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = "1.8"
+ }
+}
+
+dependencies {
+
+ implementation(libs.core.ktx)
+ implementation(libs.androidx.appcompat)
+ implementation(libs.material)
+ testImplementation(libs.junit)
+ androidTestImplementation(libs.androidx.test.ext.junit)
+ androidTestImplementation(libs.espresso.core)
+}
\ No newline at end of file
diff --git a/feature/home/consumer-rules.pro b/feature/home/consumer-rules.pro
new file mode 100644
index 0000000..e69de29
diff --git a/feature/home/proguard-rules.pro b/feature/home/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/feature/home/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/feature/home/src/androidTest/java/store/newsbriefing/app/feature/home/ExampleInstrumentedTest.kt b/feature/home/src/androidTest/java/store/newsbriefing/app/feature/home/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000..973c8d9
--- /dev/null
+++ b/feature/home/src/androidTest/java/store/newsbriefing/app/feature/home/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package store.newsbriefing.app.feature.home
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("store.newsbriefing.app.feature.home.test", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/feature/home/src/main/AndroidManifest.xml b/feature/home/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..a5918e6
--- /dev/null
+++ b/feature/home/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/feature/home/src/test/java/store/newsbriefing/app/feature/home/ExampleUnitTest.kt b/feature/home/src/test/java/store/newsbriefing/app/feature/home/ExampleUnitTest.kt
new file mode 100644
index 0000000..7c4ae85
--- /dev/null
+++ b/feature/home/src/test/java/store/newsbriefing/app/feature/home/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package store.newsbriefing.app.feature.home
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
\ No newline at end of file
diff --git a/feature/newsdetail/.gitignore b/feature/newsdetail/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/feature/newsdetail/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/feature/newsdetail/build.gradle.kts b/feature/newsdetail/build.gradle.kts
new file mode 100644
index 0000000..9fb7ba1
--- /dev/null
+++ b/feature/newsdetail/build.gradle.kts
@@ -0,0 +1,44 @@
+@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
+plugins {
+ alias(libs.plugins.androidLibrary)
+ alias(libs.plugins.kotlinAndroid)
+}
+
+android {
+ namespace = "store.newsbriefing.app.feature.newsdetail"
+ compileSdk = 34
+
+ defaultConfig {
+ minSdk = 24
+
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles("consumer-rules.pro")
+ }
+
+ buildTypes {
+ release {
+ isMinifyEnabled = false
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"),
+ "proguard-rules.pro"
+ )
+ }
+ }
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = "1.8"
+ }
+}
+
+dependencies {
+
+ implementation(libs.core.ktx)
+ implementation(libs.androidx.appcompat)
+ implementation(libs.material)
+ testImplementation(libs.junit)
+ androidTestImplementation(libs.androidx.test.ext.junit)
+ androidTestImplementation(libs.espresso.core)
+}
\ No newline at end of file
diff --git a/feature/newsdetail/consumer-rules.pro b/feature/newsdetail/consumer-rules.pro
new file mode 100644
index 0000000..e69de29
diff --git a/feature/newsdetail/proguard-rules.pro b/feature/newsdetail/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/feature/newsdetail/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/feature/newsdetail/src/androidTest/java/store/newsbriefing/app/feature/newsdetail/ExampleInstrumentedTest.kt b/feature/newsdetail/src/androidTest/java/store/newsbriefing/app/feature/newsdetail/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000..6b20019
--- /dev/null
+++ b/feature/newsdetail/src/androidTest/java/store/newsbriefing/app/feature/newsdetail/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package store.newsbriefing.app.feature.newsdetail
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("store.newsbriefing.app.feature.newsdetail.test", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/feature/newsdetail/src/main/AndroidManifest.xml b/feature/newsdetail/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..a5918e6
--- /dev/null
+++ b/feature/newsdetail/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/feature/newsdetail/src/test/java/store/newsbriefing/app/feature/newsdetail/ExampleUnitTest.kt b/feature/newsdetail/src/test/java/store/newsbriefing/app/feature/newsdetail/ExampleUnitTest.kt
new file mode 100644
index 0000000..14074b9
--- /dev/null
+++ b/feature/newsdetail/src/test/java/store/newsbriefing/app/feature/newsdetail/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package store.newsbriefing.app.feature.newsdetail
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
\ No newline at end of file
diff --git a/feature/setting/.gitignore b/feature/setting/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/feature/setting/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/feature/setting/build.gradle.kts b/feature/setting/build.gradle.kts
new file mode 100644
index 0000000..5474b02
--- /dev/null
+++ b/feature/setting/build.gradle.kts
@@ -0,0 +1,44 @@
+@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
+plugins {
+ alias(libs.plugins.androidLibrary)
+ alias(libs.plugins.kotlinAndroid)
+}
+
+android {
+ namespace = "store.newsbriefing.app.feature.setting"
+ compileSdk = 34
+
+ defaultConfig {
+ minSdk = 24
+
+ testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
+ consumerProguardFiles("consumer-rules.pro")
+ }
+
+ buildTypes {
+ release {
+ isMinifyEnabled = false
+ proguardFiles(
+ getDefaultProguardFile("proguard-android-optimize.txt"),
+ "proguard-rules.pro"
+ )
+ }
+ }
+ compileOptions {
+ sourceCompatibility = JavaVersion.VERSION_1_8
+ targetCompatibility = JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = "1.8"
+ }
+}
+
+dependencies {
+
+ implementation(libs.core.ktx)
+ implementation(libs.androidx.appcompat)
+ implementation(libs.material)
+ testImplementation(libs.junit)
+ androidTestImplementation(libs.androidx.test.ext.junit)
+ androidTestImplementation(libs.espresso.core)
+}
\ No newline at end of file
diff --git a/feature/setting/consumer-rules.pro b/feature/setting/consumer-rules.pro
new file mode 100644
index 0000000..e69de29
diff --git a/feature/setting/proguard-rules.pro b/feature/setting/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/feature/setting/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/feature/setting/src/androidTest/java/store/newsbriefing/app/feature/setting/ExampleInstrumentedTest.kt b/feature/setting/src/androidTest/java/store/newsbriefing/app/feature/setting/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000..a6022d4
--- /dev/null
+++ b/feature/setting/src/androidTest/java/store/newsbriefing/app/feature/setting/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package store.newsbriefing.app.feature.setting
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("store.newsbriefing.app.feature.setting.test", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/feature/setting/src/main/AndroidManifest.xml b/feature/setting/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..a5918e6
--- /dev/null
+++ b/feature/setting/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/feature/setting/src/test/java/store/newsbriefing/app/feature/setting/ExampleUnitTest.kt b/feature/setting/src/test/java/store/newsbriefing/app/feature/setting/ExampleUnitTest.kt
new file mode 100644
index 0000000..4d75b92
--- /dev/null
+++ b/feature/setting/src/test/java/store/newsbriefing/app/feature/setting/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package store.newsbriefing.app.feature.setting
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
\ No newline at end of file
diff --git a/feature/settings/build.gradle.kts b/feature/settings/build.gradle.kts
deleted file mode 100644
index 145b709..0000000
--- a/feature/settings/build.gradle.kts
+++ /dev/null
@@ -1,12 +0,0 @@
-plugins {
- alias(libs.plugins.briefing.android.feature)
- alias(libs.plugins.briefing.android.library.compose)
-}
-
-android {
- namespace = "store.newsbriefing.app.feature.settings"
-}
-
-dependencies {
- implementation(projects.core.data)
-}
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 45a43bb..0e58e68 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Mon Jan 29 15:57:07 KST 2024
+#Sun Mar 03 14:16:58 KST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 72f6a9e..671d748 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -23,6 +23,9 @@ include(":core:model")
include(":core:network")
include(":core:data")
include(":core:ui")
-include(":feature:settings")
include(":core:domain")
include(":core:common")
+include(":feature:home")
+include(":feature:setting")
+include(":feature:bookmark")
+include(":feature:newsdetail")