diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/atom/Badge.kt b/DesignSystem/src/main/java/com/yourssu/design/system/atom/Badge.kt index bb1f3ea3..dbf15e18 100644 --- a/DesignSystem/src/main/java/com/yourssu/design/system/atom/Badge.kt +++ b/DesignSystem/src/main/java/com/yourssu/design/system/atom/Badge.kt @@ -42,21 +42,14 @@ class Badge : LinearLayout { ) } - private var hasIcon: Boolean = false + var text: String = "" set(value) { field = value setBadgeInfo() requestLayout() } - private var text: String = "" - set(value) { - field = value - setBadgeInfo() - requestLayout() - } - - private var color: ItemColor = ItemColor.Mono + var color: ItemColor = ItemColor.Mono set(color) { field = color setBadgeInfo() @@ -64,18 +57,13 @@ class Badge : LinearLayout { } @Icon.Iconography - private var icon: Int = Icon.ic_adbadge_filled + var icon: Int? = null set(icon) { field = icon setBadgeInfo() requestLayout() } - fun setBadgeIcon(@Icon.Iconography value: Int) { - hasIcon = true - icon = value - } - private fun setBadgeInfo() { val color = getBadgeColor(color) @@ -86,11 +74,11 @@ class Badge : LinearLayout { binding.badgeContent.text = text - if (hasIcon) { + icon?.let { binding.badgeFrame.setPadding(context.dpToIntPx(8F), 0, context.dpToIntPx(8F), 0) binding.badgeIcon.visibility = View.VISIBLE - binding.badgeIcon.setIconResource(icon) - } else { + binding.badgeIcon.setIconResource(it) + } ?: run { binding.badgeFrame.setPadding(context.dpToIntPx(12F), 0, context.dpToIntPx(12F), 0) binding.badgeIcon.visibility = View.GONE } @@ -107,12 +95,7 @@ class Badge : LinearLayout { @JvmStatic @BindingAdapter("icon") fun setIcon(badge: Badge, @Icon.Iconography icon: Int?) { - if (icon == null) { - badge.hasIcon = false - } else { - badge.hasIcon = true - badge.icon = icon - } + badge.icon = icon } @JvmStatic diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/atom/CheckBox.kt b/DesignSystem/src/main/java/com/yourssu/design/system/atom/CheckBox.kt index e2efbad3..a0702b0c 100644 --- a/DesignSystem/src/main/java/com/yourssu/design/system/atom/CheckBox.kt +++ b/DesignSystem/src/main/java/com/yourssu/design/system/atom/CheckBox.kt @@ -127,24 +127,6 @@ class CheckBox @JvmOverloads constructor( private const val MARGIN_SMALL = 4f private const val MARGIN_MEDIUM = 8f private const val MARGIN_LARGE = 8f - - fun Context.checkBox(block: CheckBox.() -> Unit) = CheckBox(this).run { - block.invoke(this) - this - } - - fun ViewGroup.checkBox(block: CheckBox.() -> Unit) = CheckBox(this.context).run { - block.invoke(this) - this@checkBox.addView(this) - this - } - - fun ComponentGroup.checkBox(block: CheckBox.() -> Unit) = - CheckBox(this.componentContext).run { - block.invoke(this) - this@checkBox.addComponent(this) - this - } } // change means will access to binding diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/atom/PasswordTextField.kt b/DesignSystem/src/main/java/com/yourssu/design/system/atom/PasswordTextField.kt index b8336b13..5935ecca 100644 --- a/DesignSystem/src/main/java/com/yourssu/design/system/atom/PasswordTextField.kt +++ b/DesignSystem/src/main/java/com/yourssu/design/system/atom/PasswordTextField.kt @@ -15,6 +15,7 @@ import android.widget.TextView import com.yourssu.design.R import com.yourssu.design.databinding.LayoutPasswordTextFieldBinding import com.yourssu.design.system.foundation.Icon +import com.yourssu.design.undercarriage.base.TextField class PasswordTextField @JvmOverloads constructor( context: Context, diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/atom/SimpleTextField.kt b/DesignSystem/src/main/java/com/yourssu/design/system/atom/SimpleTextField.kt index 3aa33067..a41e782e 100644 --- a/DesignSystem/src/main/java/com/yourssu/design/system/atom/SimpleTextField.kt +++ b/DesignSystem/src/main/java/com/yourssu/design/system/atom/SimpleTextField.kt @@ -12,6 +12,7 @@ import android.view.LayoutInflater import android.widget.TextView import com.yourssu.design.R import com.yourssu.design.databinding.LayoutSimpleTextFieldBinding +import com.yourssu.design.undercarriage.base.TextField class SimpleTextField @JvmOverloads constructor( context: Context, diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/atom/SuffixTextField.kt b/DesignSystem/src/main/java/com/yourssu/design/system/atom/SuffixTextField.kt index 9a4f96a4..8bcc8d03 100644 --- a/DesignSystem/src/main/java/com/yourssu/design/system/atom/SuffixTextField.kt +++ b/DesignSystem/src/main/java/com/yourssu/design/system/atom/SuffixTextField.kt @@ -13,6 +13,7 @@ import android.widget.TextView import androidx.databinding.BindingAdapter import com.yourssu.design.R import com.yourssu.design.databinding.LayoutSuffixTextFieldBinding +import com.yourssu.design.undercarriage.base.TextField class SuffixTextField @JvmOverloads constructor( context: Context, diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/Android.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/Android.kt new file mode 100644 index 00000000..3329b9c1 --- /dev/null +++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/Android.kt @@ -0,0 +1,41 @@ +package com.yourssu.design.system.language + +import android.view.View +import android.view.ViewGroup +import androidx.annotation.ColorRes +import androidx.appcompat.app.AppCompatActivity + +fun AppCompatActivity.setContentView(block: () -> View) { + this.setContentView(block.invoke()) +} + +const val WRAP_CONTENT = ViewGroup.LayoutParams.WRAP_CONTENT +const val MATCH_PARENT = ViewGroup.LayoutParams.MATCH_PARENT + +fun View.setLayout( + width: Int? = null, + height: Int? = null, + leftMarginPx: Int? = null, + rightMarginPx: Int? = null, + topMarginPx: Int? = null, + bottomMarginPx: Int? = null, + leftPaddingPx: Int? = null, + rightPaddingPx: Int? = null, + topPaddingPx: Int? = null, + bottomPaddingPx: Int? = null, +) { + this.layoutParams = ViewGroup.MarginLayoutParams( + width ?: WRAP_CONTENT, + height ?: WRAP_CONTENT) + .apply { + leftMarginPx?.let { this.leftMargin = it } + rightMarginPx?.let { this.rightMargin = it } + topMarginPx?.let { this.topMargin = it } + bottomMarginPx?.let { this.bottomMargin = it } + } + this.setPadding(leftPaddingPx ?: 0, topPaddingPx ?: 0, rightPaddingPx ?: 0, bottomPaddingPx ?: 0) +} + +fun View.backgroundColor(@ColorRes color: Int) { + this.setBackgroundColor(this.context.getColor(color)) +} \ No newline at end of file diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/Badge.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/Badge.kt new file mode 100644 index 00000000..5e8318c7 --- /dev/null +++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/Badge.kt @@ -0,0 +1,22 @@ +package com.yourssu.design.system.language + +import android.content.Context +import android.view.ViewGroup +import com.yourssu.design.system.atom.Badge + +fun Context.badge(block: Badge.() -> Unit) = Badge(this).run { + block.invoke(this) + this +} + +fun ViewGroup.badge(block: Badge.() -> Unit) = Badge(this.context).run { + block.invoke(this) + this@badge.addView(this) + this +} + +fun ComponentGroup.badge(block: Badge.() -> Unit) = Badge(this.componentContext).run { + block.invoke(this) + this@badge.addComponent(this) + this +} \ No newline at end of file diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/CheckBox.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/CheckBox.kt new file mode 100644 index 00000000..45752800 --- /dev/null +++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/CheckBox.kt @@ -0,0 +1,23 @@ +package com.yourssu.design.system.language + +import android.content.Context +import android.view.ViewGroup +import com.yourssu.design.system.atom.CheckBox + +fun Context.checkBox(block: CheckBox.() -> Unit) = CheckBox(this).run { + block.invoke(this) + this +} + +fun ViewGroup.checkBox(block: CheckBox.() -> Unit) = CheckBox(this.context).run { + block.invoke(this) + this@checkBox.addView(this) + this +} + +fun ComponentGroup.checkBox(block: CheckBox.() -> Unit) = + CheckBox(this.componentContext).run { + block.invoke(this) + this@checkBox.addComponent(this) + this + } \ No newline at end of file diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/IconView.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/IconView.kt new file mode 100644 index 00000000..fd5921f2 --- /dev/null +++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/IconView.kt @@ -0,0 +1,22 @@ +package com.yourssu.design.system.language + +import android.content.Context +import android.view.ViewGroup +import com.yourssu.design.system.atom.IconView + +fun Context.iconView(block: IconView.() -> Unit) = IconView(this).run { + block.invoke(this) + this +} + +fun ViewGroup.iconView(block: IconView.() -> Unit) = IconView(this.context).run { + block.invoke(this) + this@iconView.addView(this) + this +} + +fun ComponentGroup.iconView(block: IconView.() -> Unit) = IconView(this.componentContext).run { + block.invoke(this) + this@iconView.addComponent(this) + this +} \ No newline at end of file diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/Picker.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/Picker.kt new file mode 100644 index 00000000..3677474c --- /dev/null +++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/Picker.kt @@ -0,0 +1,22 @@ +package com.yourssu.design.system.language + +import android.content.Context +import android.view.ViewGroup +import com.yourssu.design.system.atom.Picker + +fun Context.picker(block: Picker.() -> Unit) = Picker(this).run { + block.invoke(this) + this +} + +fun ViewGroup.picker(block: Picker.() -> Unit) = Picker(this.context).run { + block.invoke(this) + this@picker.addView(this) + this +} + +fun ComponentGroup.picker(block: Picker.() -> Unit) = Picker(this.componentContext).run { + block.invoke(this) + this@picker.addComponent(this) + this +} \ No newline at end of file diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/ProfileImageView.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/ProfileImageView.kt new file mode 100644 index 00000000..178cc2a4 --- /dev/null +++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/ProfileImageView.kt @@ -0,0 +1,22 @@ +package com.yourssu.design.system.language + +import android.content.Context +import android.view.ViewGroup +import com.yourssu.design.system.atom.ProfileImageView + +fun Context.profileImageView(block: ProfileImageView.() -> Unit) = ProfileImageView(this).run { + block.invoke(this) + this +} + +fun ViewGroup.profileImageView(block: ProfileImageView.() -> Unit) = ProfileImageView(this.context).run { + block.invoke(this) + this@profileImageView.addView(this) + this +} + +fun ComponentGroup.profileImageView(block: ProfileImageView.() -> Unit) = ProfileImageView(this.componentContext).run { + block.invoke(this) + this@profileImageView.addComponent(this) + this +} \ No newline at end of file diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/Text.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/Text.kt index 87a69ff4..1b0af016 100644 --- a/DesignSystem/src/main/java/com/yourssu/design/system/language/Text.kt +++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/Text.kt @@ -2,6 +2,7 @@ package com.yourssu.design.system.language import android.content.Context import android.view.ViewGroup +import androidx.annotation.ColorRes import com.yourssu.design.system.atom.Text fun Context.text(block: Text.() -> Unit) = Text(this).run { @@ -19,4 +20,8 @@ fun ComponentGroup.text(block: Text.() -> Unit) = Text(this.componentContext).ru block.invoke(this) this@text.addComponent(this) this +} + +fun Text.textColor(@ColorRes color: Int) { + setTextColor(this.context.getColor(color)) } \ No newline at end of file diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/TextField.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/TextField.kt new file mode 100644 index 00000000..7f66f5df --- /dev/null +++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/TextField.kt @@ -0,0 +1,76 @@ +package com.yourssu.design.system.language + +import android.content.Context +import android.view.ViewGroup +import com.yourssu.design.system.atom.PasswordTextField +import com.yourssu.design.system.atom.SearchTextField +import com.yourssu.design.system.atom.SimpleTextField +import com.yourssu.design.system.atom.SuffixTextField + +fun Context.passwordTextField(block: PasswordTextField.() -> Unit) = PasswordTextField(this).run { + block.invoke(this) + this +} + +fun ViewGroup.passwordTextField(block: PasswordTextField.() -> Unit) = PasswordTextField(this.context).run { + block.invoke(this) + this@passwordTextField.addView(this) + this +} + +fun ComponentGroup.passwordTextField(block: PasswordTextField.() -> Unit) = PasswordTextField(this.componentContext).run { + block.invoke(this) + this@passwordTextField.addComponent(this) + this +} + +fun Context.searchTextField(block: SearchTextField.() -> Unit) = SearchTextField(this).run { + block.invoke(this) + this +} + +fun ViewGroup.searchTextField(block: SearchTextField.() -> Unit) = SearchTextField(this.context).run { + block.invoke(this) + this@searchTextField.addView(this) + this +} + +fun ComponentGroup.searchTextField(block: SearchTextField.() -> Unit) = SearchTextField(this.componentContext).run { + block.invoke(this) + this@searchTextField.addComponent(this) + this +} + +fun Context.simpleTextField(block: SimpleTextField.() -> Unit) = SimpleTextField(this).run { + block.invoke(this) + this +} + +fun ViewGroup.simpleTextField(block: SimpleTextField.() -> Unit) = SimpleTextField(this.context).run { + block.invoke(this) + this@simpleTextField.addView(this) + this +} + +fun ComponentGroup.simpleTextField(block: SimpleTextField.() -> Unit) = SimpleTextField(this.componentContext).run { + block.invoke(this) + this@simpleTextField.addComponent(this) + this +} + +fun Context.suffixTextField(block: SuffixTextField.() -> Unit) = SuffixTextField(this).run { + block.invoke(this) + this +} + +fun ViewGroup.suffixTextField(block: SuffixTextField.() -> Unit) = SuffixTextField(this.context).run { + block.invoke(this) + this@suffixTextField.addView(this) + this +} + +fun ComponentGroup.suffixTextField(block: SuffixTextField.() -> Unit) = SuffixTextField(this.componentContext).run { + block.invoke(this) + this@suffixTextField.addComponent(this) + this +} \ No newline at end of file diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/atom/TextField.kt b/DesignSystem/src/main/java/com/yourssu/design/undercarriage/base/TextField.kt similarity index 99% rename from DesignSystem/src/main/java/com/yourssu/design/system/atom/TextField.kt rename to DesignSystem/src/main/java/com/yourssu/design/undercarriage/base/TextField.kt index 7e54166b..7d826533 100644 --- a/DesignSystem/src/main/java/com/yourssu/design/system/atom/TextField.kt +++ b/DesignSystem/src/main/java/com/yourssu/design/undercarriage/base/TextField.kt @@ -1,4 +1,4 @@ -package com.yourssu.design.system.atom +package com.yourssu.design.undercarriage.base import android.content.Context import android.text.Editable diff --git a/app/storybook/.gitignore b/app/storybook/.gitignore new file mode 100644 index 00000000..42afabfd --- /dev/null +++ b/app/storybook/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/storybook/build.gradle b/app/storybook/build.gradle new file mode 100644 index 00000000..9b196904 --- /dev/null +++ b/app/storybook/build.gradle @@ -0,0 +1,46 @@ +plugins { + id 'com.android.application' + id 'kotlin-android' +} + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.3" + + defaultConfig { + applicationId "com.yourssu.storybook" + minSdkVersion 23 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled 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 project(path: ':DesignSystem') + + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation 'androidx.core:core-ktx:1.6.0' + implementation 'androidx.appcompat:appcompat:1.3.1' + implementation 'com.google.android.material:material:1.4.0' + implementation 'androidx.constraintlayout:constraintlayout:2.1.0' + testImplementation 'junit:junit:4.+' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' +} \ No newline at end of file diff --git a/app/storybook/proguard-rules.pro b/app/storybook/proguard-rules.pro new file mode 100644 index 00000000..481bb434 --- /dev/null +++ b/app/storybook/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/app/storybook/src/androidTest/java/com/yourssu/storybook/ExampleInstrumentedTest.kt b/app/storybook/src/androidTest/java/com/yourssu/storybook/ExampleInstrumentedTest.kt new file mode 100644 index 00000000..23057b0b --- /dev/null +++ b/app/storybook/src/androidTest/java/com/yourssu/storybook/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.yourssu.storybook + +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("com.yourssu.storybook", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/storybook/src/main/AndroidManifest.xml b/app/storybook/src/main/AndroidManifest.xml new file mode 100644 index 00000000..d2696fb8 --- /dev/null +++ b/app/storybook/src/main/AndroidManifest.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/storybook/src/main/java/com/yourssu/storybook/MainActivity.kt b/app/storybook/src/main/java/com/yourssu/storybook/MainActivity.kt new file mode 100644 index 00000000..1067f74c --- /dev/null +++ b/app/storybook/src/main/java/com/yourssu/storybook/MainActivity.kt @@ -0,0 +1,156 @@ +package com.yourssu.storybook + +import android.annotation.SuppressLint +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import com.yourssu.design.system.foundation.Typo +import com.yourssu.design.system.language.* +import com.yourssu.design.undercarriage.size.dpToIntPx + +class MainActivity : AppCompatActivity() { + + /** 추가시 여기에만 선언하면 됨 */ + private val foundation = listOf( + "SemanticColor", + "Typography" + ) + private val atom = listOf( + "Text", + "Toggle", + "ProfileImageView", + "Badge", + "BoxButton", + "BottomSheet", + "Divider", + "IconView", + "Picker", + "PlainButton", + "Checkbox", + "SimpleTextField", + "SuffixTextField", + "PasswordTextField", + "SearchTextField" + ) + private val component = listOf( + "Toast", + "TopBar", + "SingleTitleTopBar", + "DoubleTitleTopBar", + "BottomBar" + ) + /** 추가시 여기에만 선언하면 됨 */ + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + initView() + } + + @SuppressLint("SetTextI18n") + private fun initView() { + setContentView { + verticalLayout { + horizontalLayout { // TODO change to SingleTitleTopBar + text { + text = "StoryBook" + typo = Typo.Title2 + textColor(R.color.textPrimary) + setLayout( + leftMarginPx = context.dpToIntPx(16f), + topMarginPx = context.dpToIntPx(8f), + bottomMarginPx = context.dpToIntPx(8f) + ) + } + } + scrollView { + verticalLayout { + text { + text = "1. Foundation" + typo = Typo.SubTitle3 + textColor(R.color.textPrimary) + backgroundColor(R.color.dimNormal) + setLayout( + width = MATCH_PARENT, + leftPaddingPx = context.dpToIntPx(16f), + topPaddingPx = context.dpToIntPx(2f), + bottomPaddingPx = context.dpToIntPx(2f) + ) + } + foundation.forEach { + text { + text = it + typo = Typo.Body1 + textColor(R.color.textPrimary) + setLayout( + width = MATCH_PARENT, + leftPaddingPx = context.dpToIntPx(16f), + topPaddingPx = context.dpToIntPx(16f), + bottomPaddingPx = context.dpToIntPx(16f) + ) + } + divider { + setLayout(leftMarginPx = context.dpToIntPx(16f)) + } + } + text { + text = "2. Atom" + typo = Typo.SubTitle3 + textColor(R.color.textPrimary) + backgroundColor(R.color.dimNormal) + setLayout( + width = MATCH_PARENT, + leftPaddingPx = context.dpToIntPx(16f), + topPaddingPx = context.dpToIntPx(2f), + bottomPaddingPx = context.dpToIntPx(2f) + ) + } + atom.forEach { + text { + text = it + typo = Typo.Body1 + textColor(R.color.textPrimary) + setLayout( + width = MATCH_PARENT, + leftPaddingPx = context.dpToIntPx(16f), + topPaddingPx = context.dpToIntPx(16f), + bottomPaddingPx = context.dpToIntPx(16f) + ) + } + divider { + setLayout(leftMarginPx = context.dpToIntPx(16f)) + } + } + text { + text = "3. Component" + typo = Typo.SubTitle3 + textColor(R.color.textPrimary) + backgroundColor(R.color.dimNormal) + setLayout( + width = MATCH_PARENT, + leftPaddingPx = context.dpToIntPx(16f), + topPaddingPx = context.dpToIntPx(2f), + bottomPaddingPx = context.dpToIntPx(2f) + ) + } + component.forEach { + text { + text = it + typo = Typo.Body1 + textColor(R.color.textPrimary) + setLayout( + width = MATCH_PARENT, + leftPaddingPx = context.dpToIntPx(16f), + topPaddingPx = context.dpToIntPx(16f), + bottomPaddingPx = context.dpToIntPx(16f) + ) + } + divider { + setLayout(leftMarginPx = context.dpToIntPx(16f)) + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/app/storybook/src/main/res/layout/activity_main.xml b/app/storybook/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..4fc24441 --- /dev/null +++ b/app/storybook/src/main/res/layout/activity_main.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/storybook/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/storybook/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..11bea4c6 Binary files /dev/null and b/app/storybook/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/storybook/src/main/res/values/strings.xml b/app/storybook/src/main/res/values/strings.xml new file mode 100644 index 00000000..90b7167c --- /dev/null +++ b/app/storybook/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + YDS\nStoryBook + \ No newline at end of file diff --git a/app/storybook/src/test/java/com/yourssu/storybook/ExampleUnitTest.kt b/app/storybook/src/test/java/com/yourssu/storybook/ExampleUnitTest.kt new file mode 100644 index 00000000..56da8388 --- /dev/null +++ b/app/storybook/src/test/java/com/yourssu/storybook/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.yourssu.storybook + +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/app/yds-ui-tester/src/main/java/com/yourssu/yds_ui_tester/CheckBoxActivity.kt b/app/yds-ui-tester/src/main/java/com/yourssu/yds_ui_tester/CheckBoxActivity.kt index e4ccbee8..ea340cf8 100644 --- a/app/yds-ui-tester/src/main/java/com/yourssu/yds_ui_tester/CheckBoxActivity.kt +++ b/app/yds-ui-tester/src/main/java/com/yourssu/yds_ui_tester/CheckBoxActivity.kt @@ -2,12 +2,8 @@ package com.yourssu.yds_ui_tester import androidx.appcompat.app.AppCompatActivity import android.os.Bundle -import android.util.Log -import android.view.View -import android.view.ViewGroup import androidx.databinding.DataBindingUtil -import com.yourssu.design.system.atom.CheckBox -import com.yourssu.design.system.atom.CheckBox.Companion.checkBox +import com.yourssu.design.system.language.checkBox import com.yourssu.yds_ui_tester.databinding.ActivityCheckBoxBinding class CheckBoxActivity : AppCompatActivity() { diff --git a/settings.gradle b/settings.gradle index 3dd695eb..9315919e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,4 @@ include ':DesignSystem' +include ':app:storybook' include ':app:yds-ui-tester' rootProject.name = "YDS-Android" \ No newline at end of file