Compare commits

..

No commits in common. "fd4dfc2dff54d75b1d328718c71d7e989545f437" and "66a83a118f5f06750f33c0e3ea2a4a9355c2377c" have entirely different histories.

19 changed files with 94 additions and 805 deletions

View File

@ -4,10 +4,10 @@
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2024-09-30T12:57:26.128603Z">
<DropdownSelection timestamp="2024-09-23T12:14:10.678819Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="LocalEmulator" identifier="path=/Users/klaus/.android/avd/Pixel_8_Pro_API_34.avd" />
<DeviceId pluginId="PhysicalDevice" identifier="serial=2cec640c34017ece" />
</handle>
</Target>
</DropdownSelection>

View File

@ -35,8 +35,8 @@ android {
applicationId "kr.co.vividnext.sodalive"
minSdk 23
targetSdk 34
versionCode 109
versionName "1.19.2"
versionCode 108
versionName "1.19.1"
}
buildTypes {

View File

@ -87,7 +87,7 @@ class SeriesDetailIntroductionFragment : BaseFragment<FragmentSeriesDetailIntrod
if (seriesDetailResponse!!.publishedDaysOfWeek == "랜덤") {
seriesDetailResponse!!.publishedDaysOfWeek
} else {
seriesDetailResponse!!.publishedDaysOfWeek
"${seriesDetailResponse!!.publishedDaysOfWeek}요일"
}
if (seriesDetailResponse!!.writer != null) {

View File

@ -70,5 +70,4 @@ object Constants {
const val EXTRA_COMMUNITY_POST_COMMENT = "community_post_comment_id"
const val EXTRA_ALARM_ID = "alarm_id"
const val EXTRA_ROULETTE_AVAILABLE_ACTIVE = "roulette_available_active"
}

View File

@ -56,7 +56,6 @@ import kr.co.vividnext.sodalive.live.reservation.complete.LiveReservationComplet
import kr.co.vividnext.sodalive.live.room.LiveRoomActivity
import kr.co.vividnext.sodalive.live.room.dialog.LivePaymentDialog
import kr.co.vividnext.sodalive.live.room.dialog.LiveRoomPasswordDialog
import kr.co.vividnext.sodalive.live.roulette.config.RouletteConfigActivity
import kr.co.vividnext.sodalive.report.CheersReportDialog
import kr.co.vividnext.sodalive.report.ProfileReportDialog
import kr.co.vividnext.sodalive.report.ReportType
@ -783,35 +782,10 @@ class UserProfileActivity : BaseActivity<ActivityUserProfileBinding>(
@SuppressLint("NotifyDataSetChanged")
private fun setLiveRoomList(liveRoomList: List<LiveRoomResponse>) {
if (userId == SharedPreferenceManager.userId) {
binding.layoutUserProfileLive.root.visibility = View.VISIBLE
binding.layoutUserProfileLive.llRouletteMenu.visibility = View.VISIBLE
if (liveRoomList.isEmpty()) {
binding.layoutUserProfileLive.rvLive.visibility = View.GONE
} else {
binding.layoutUserProfileLive.rvLive.visibility = View.VISIBLE
}
binding.layoutUserProfileLive.tvSettingRoulette.setOnClickListener {
startActivity(
Intent(applicationContext, RouletteConfigActivity::class.java).apply {
putExtra(Constants.EXTRA_ROULETTE_AVAILABLE_ACTIVE, false)
}
)
}
if (liveRoomList.isEmpty()) {
binding.layoutUserProfileLive.root.visibility = View.GONE
} else {
binding.layoutUserProfileLive.llRouletteMenu.visibility = View.GONE
if (liveRoomList.isEmpty()) {
binding.layoutUserProfileLive.root.visibility = View.GONE
} else {
binding.layoutUserProfileLive.root.visibility = View.VISIBLE
binding.layoutUserProfileLive.rvLive.visibility = View.VISIBLE
}
}
if (liveRoomList.isNotEmpty()) {
binding.layoutUserProfileLive.root.visibility = View.VISIBLE
liveAdapter.items.clear()
liveAdapter.items.addAll(liveRoomList)
liveAdapter.notifyDataSetChanged()

View File

@ -8,7 +8,6 @@ import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.graphics.Rect
import android.graphics.drawable.Drawable
import android.net.Uri
import android.os.Build
import android.os.Bundle
@ -32,10 +31,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import coil.transform.CircleCropTransformation
import com.bumptech.glide.Glide
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target
import com.github.dhaval2404.imagepicker.ImagePicker
import com.google.gson.Gson
import com.orhanobut.logger.Logger
@ -1922,86 +1917,44 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
private fun showSignatureImage() {
if (signature != null) {
Glide
.with(this)
.load(signature!!.imageUrl)
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean
): Boolean {
return false
}
if (viewModel.isSignatureOn.value!!) {
Glide
.with(this)
.load(signature!!.imageUrl)
.into(binding.ivSignature)
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
if (viewModel.isSignatureOn.value!!) {
binding.ivSignature.visibility = View.VISIBLE
}
binding.ivSignature.visibility = View.VISIBLE
}
handler.postDelayed({
if (signatureList.isNotEmpty()) {
signature = signatureList.removeAt(0)
} else {
signature = null
isShowSignatureImage = false
binding.ivSignature.setImageDrawable(null)
binding.ivSignature.visibility = View.GONE
}
}, signature!!.time * 1000L)
return false
}
})
.into(binding.ivSignature)
handler.postDelayed({
if (signatureList.isNotEmpty()) {
signature = signatureList.removeAt(0)
} else {
signature = null
isShowSignatureImage = false
binding.ivSignature.setImageDrawable(null)
binding.ivSignature.visibility = View.GONE
}
}, signature!!.time * 1000L)
} else if (signatureImageUrl.isNotBlank()) {
Glide
.with(this)
.load(signatureImageUrl)
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean
): Boolean {
return false
}
if (viewModel.isSignatureOn.value!!) {
Glide
.with(this)
.load(signatureImageUrl)
.into(binding.ivSignature)
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
if (viewModel.isSignatureOn.value!!) {
binding.ivSignature.visibility = View.VISIBLE
}
handler.postDelayed({
if (signatureImageUrlList.isNotEmpty()) {
signatureImageUrl = signatureImageUrlList.removeAt(0)
} else {
signatureImageUrl = ""
isShowSignatureImage = false
binding.ivSignature.setImageDrawable(null)
binding.ivSignature.visibility = View.GONE
}
}, 7000)
return false
}
})
.into(binding.ivSignature)
binding.ivSignature.visibility = View.VISIBLE
}
handler.postDelayed({
if (signatureImageUrlList.isNotEmpty()) {
signatureImageUrl = signatureImageUrlList.removeAt(0)
} else {
signatureImageUrl = ""
isShowSignatureImage = false
binding.ivSignature.setImageDrawable(null)
binding.ivSignature.visibility = View.GONE
}
}, 7000)
}
}

View File

@ -60,8 +60,8 @@ data class LiveRoomProfileItemSpeakerTitle(
val itemBinding = binding as ItemLiveRoomProfileHeaderBinding
itemBinding.tvTitle.text = title
itemBinding.tvSpeakerCount.text = "$speakerCount"
itemBinding.tvSpeakerTotalCount.text = if (totalUserCount > 5) {
"/5"
itemBinding.tvSpeakerTotalCount.text = if (totalUserCount > 4) {
"/4"
} else {
"/${totalUserCount - 1}"
}

View File

@ -1,347 +1,36 @@
package kr.co.vividnext.sodalive.live.roulette.config
import android.annotation.SuppressLint
import android.app.Activity
import android.app.Service
import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.text.InputFilter
import android.view.LayoutInflater
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.ContextCompat
import com.jakewharton.rxbinding4.widget.textChanges
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.base.BaseActivity
import kr.co.vividnext.sodalive.common.Constants
import kr.co.vividnext.sodalive.common.LoadingDialog
import kr.co.vividnext.sodalive.databinding.ActivityRouletteConfigBinding
import kr.co.vividnext.sodalive.live.roulette.RoulettePreviewDialog
import org.koin.android.ext.android.inject
import java.util.Locale
import java.util.concurrent.TimeUnit
class RouletteConfigActivity : BaseActivity<ActivityRouletteConfigBinding>(
ActivityRouletteConfigBinding::inflate
) {
private val viewModel: RouletteSettingsViewModel by inject()
private lateinit var imm: InputMethodManager
private lateinit var loadingDialog: LoadingDialog
private val handler = Handler(Looper.getMainLooper())
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val availableActive = intent.getBooleanExtra(
Constants.EXTRA_ROULETTE_AVAILABLE_ACTIVE,
true
)
binding.rlRouletteIsActive.visibility = if (availableActive) {
View.VISIBLE
} else {
View.GONE
}
viewModel.availableActive = availableActive
bindData()
viewModel.getAllRoulette()
changeFragment()
}
override fun setupView() {
binding.tvBack.text = "룰렛설정"
binding.tvBack.setOnClickListener { finish() }
loadingDialog = LoadingDialog(this, layoutInflater)
imm = getSystemService(
Service.INPUT_METHOD_SERVICE
) as InputMethodManager
binding.etSetPrice.filters = arrayOf(InputFilter { source, start, end, _, _, _ ->
// Only allow numeric input
for (i in start until end) {
if (!Character.isDigit(source[i])) {
return@InputFilter ""
}
}
null
})
binding.ivRouletteIsActive.setOnClickListener { viewModel.toggleIsActive() }
binding.ivAddOption.setOnClickListener { addOption() }
binding.tvPreview.setOnClickListener {
handler.postDelayed({
imm.hideSoftInputFromWindow(currentFocus?.windowToken, 0)
}, 100)
viewModel.onClickPreview()
}
binding.tvSave.setOnClickListener { _ ->
handler.postDelayed({
imm.hideSoftInputFromWindow(currentFocus?.windowToken, 0)
}, 100)
viewModel.createOrUpdateRoulette {
val resultIntent = Intent().apply { putExtra(Constants.EXTRA_RESULT_ROULETTE, it) }
setResult(Activity.RESULT_OK, resultIntent)
finish()
}
}
binding.llSelectRoulette1.setOnClickListener {
viewModel.selectRoulette(
RouletteSettingsViewModel.SelectedRoulette.ROULETTE_1
)
}
binding.llSelectRoulette2.setOnClickListener {
viewModel.selectRoulette(
RouletteSettingsViewModel.SelectedRoulette.ROULETTE_2
)
}
binding.llSelectRoulette3.setOnClickListener {
viewModel.selectRoulette(
RouletteSettingsViewModel.SelectedRoulette.ROULETTE_3
)
}
binding.toolbar.tvBack.text = "룰렛설정"
binding.toolbar.tvBack.setOnClickListener { finish() }
}
@SuppressLint("SetTextI18n")
private fun bindData() {
viewModel.selectedRouletteLiveData.observe(this) {
deselectAllRoulette()
when (it) {
RouletteSettingsViewModel.SelectedRoulette.ROULETTE_2 -> selectRouletteButton(
binding.ivSelectRoulette2,
binding.llSelectRoulette2,
binding.tvSelectRoulette2
)
private fun changeFragment(tag: String = "settings") {
val fragmentManager = supportFragmentManager
val fragmentTransaction = fragmentManager.beginTransaction()
RouletteSettingsViewModel.SelectedRoulette.ROULETTE_3 -> selectRouletteButton(
binding.ivSelectRoulette3,
binding.llSelectRoulette3,
binding.tvSelectRoulette3
)
else -> selectRouletteButton(
binding.ivSelectRoulette1,
binding.llSelectRoulette1,
binding.tvSelectRoulette1
)
}
val currentFragment = fragmentManager.primaryNavigationFragment
if (currentFragment != null) {
fragmentTransaction.hide(currentFragment)
}
viewModel.isActiveLiveData.observe(this) {
binding.ivRouletteIsActive.setImageResource(
if (it) R.drawable.btn_toggle_on_big else R.drawable.btn_toggle_off_big
)
}
viewModel.optionsLiveData.observe(this) { updateOptionUi(it) }
viewModel.toastLiveData.observe(this) { it?.let { showToast(it) } }
viewModel.canLiveData.observe(this) {
if (it > 0) {
binding.etSetPrice.setText("$it")
} else {
binding.etSetPrice.setText("")
}
}
viewModel.isLoading.observe(this) {
if (it) {
loadingDialog.show(screenWidth)
} else {
loadingDialog.dismiss()
}
}
viewModel.roulettePreviewLiveData.observe(this) {
RoulettePreviewDialog(
activity = this@RouletteConfigActivity,
previewList = listOf(it),
title = "룰렛 미리보기",
layoutInflater = layoutInflater
).show()
}
viewModel.totalPercentageLiveData.observe(this) {
binding.tvTotalPercentage.text = "( ${
String.format(
Locale.KOREAN,
"%.2f%%",
it
)
} )"
}
compositeDisposable.add(
binding.etSetPrice.textChanges().skip(1)
.debounce(100, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe {
if (it.trim().isNotEmpty()) {
viewModel.can = it.toString().toInt()
}
}
)
}
private fun addOption() {
val newOption = RouletteOption("", "")
viewModel.addOption(newOption)
}
private fun updateOptionUi(options: List<RouletteOption>) {
binding.llRouletteOptionContainer.removeAllViews()
options.forEachIndexed { index, option ->
binding.llRouletteOptionContainer.addView(createOptionView(index, option))
}
}
@SuppressLint("SetTextI18n")
private fun createOptionView(index: Int, option: RouletteOption): View {
val optionView = LayoutInflater
.from(applicationContext)
.inflate(
R.layout.layout_roulette_option,
binding.llRouletteOptionContainer,
false
)
val etOption = optionView.findViewById<EditText>(R.id.et_option)
val tvOptionTitle = optionView.findViewById<TextView>(R.id.tv_option_title)
val etPercentage = optionView.findViewById<EditText>(R.id.et_option_percentage)
val tvDelete = optionView.findViewById<TextView>(R.id.tv_delete)
etOption.setText(option.title)
tvOptionTitle.text = "옵션 ${index + 1}"
try {
if (option.percentage.toFloat() > 0f) {
etPercentage.setText(option.percentage)
} else {
etPercentage.setText("")
}
} catch (e: Exception) {
etPercentage.setText("")
}
if (index == 0 || index == 1) {
tvDelete.visibility = View.GONE
} else {
tvDelete.visibility = View.VISIBLE
tvDelete.setOnClickListener { viewModel.deleteOption(index) }
}
compositeDisposable.add(
etOption.textChanges().skip(1)
.debounce(100, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe {
viewModel.inputOption(index, it.toString())
}
)
compositeDisposable.add(
etPercentage.textChanges().skip(1)
.debounce(100, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe {
viewModel.inputOptionPercentage(index, it.toString())
}
)
return optionView
}
private fun deselectAllRoulette() {
binding.ivSelectRoulette1.visibility = View.GONE
binding.ivSelectRoulette2.visibility = View.GONE
binding.ivSelectRoulette3.visibility = View.GONE
binding.llSelectRoulette1.setBackgroundResource(R.drawable.bg_round_corner_6_7_13181b)
binding.tvSelectRoulette1.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_3bb9f1
)
)
if (viewModel.rouletteList.size > 0) {
binding.llSelectRoulette2.setBackgroundResource(R.drawable.bg_round_corner_6_7_13181b)
binding.tvSelectRoulette2.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_ffcb14
)
)
} else {
binding.llSelectRoulette2.setBackgroundResource(R.drawable.bg_round_corner_6_7_777777)
binding.tvSelectRoulette2.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_ff14d9
)
)
}
if (viewModel.rouletteList.size > 1) {
binding.llSelectRoulette3.setBackgroundResource(R.drawable.bg_round_corner_6_7_13181b)
binding.tvSelectRoulette3.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_3bb9f1
)
)
} else {
binding.llSelectRoulette3.setBackgroundResource(R.drawable.bg_round_corner_6_7_777777)
binding.tvSelectRoulette3.setTextColor(
ContextCompat.getColor(
applicationContext,
R.color.color_555555
)
)
}
}
private fun selectRouletteButton(
ivSelectRoulette: ImageView,
llSelectRoulette: LinearLayout,
tvSelectRoulette: TextView
) {
ivSelectRoulette.visibility = View.VISIBLE
llSelectRoulette.setBackgroundResource(
when (viewModel.selectedRouletteLiveData.value) {
RouletteSettingsViewModel.SelectedRoulette.ROULETTE_2 -> R.drawable.bg_round_corner_6_7_ffcb14
RouletteSettingsViewModel.SelectedRoulette.ROULETTE_3 -> R.drawable.bg_round_corner_6_7_ff14d9
else -> R.drawable.bg_round_corner_6_7_3bb9f1
}
)
tvSelectRoulette.setTextColor(
ContextCompat.getColor(
applicationContext,
when (viewModel.selectedRouletteLiveData.value) {
RouletteSettingsViewModel.SelectedRoulette.ROULETTE_2 -> R.color.black
else -> R.color.color_eeeeee
}
)
)
val fragment = RouletteSettingsFragment()
fragmentTransaction.add(R.id.container, fragment, tag)
fragmentTransaction.setPrimaryNavigationFragment(fragment)
fragmentTransaction.setReorderingAllowed(true)
fragmentTransaction.commitNow()
}
}

View File

@ -53,7 +53,6 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
var can = 0
var isActive = false
var availableActive = false
private var rouletteId = 0L
private val options = mutableListOf<RouletteOption>()
@ -186,14 +185,10 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
SelectedRoulette.ROULETTE_3 -> "룰렛 3"
}
val successMessage = if (availableActive) {
if (isActive) {
"${selectedRouletteTitle}을 활성화 했습니다."
} else {
"${selectedRouletteTitle}을 비활성화 했습니다."
}
val successMessage = if (isActive) {
"${selectedRouletteTitle}을 활성화 했습니다."
} else {
"${selectedRouletteTitle}변경했습니다."
"${selectedRouletteTitle}을 비활성화 했습니다."
}
compositeDisposable.add(
@ -247,7 +242,7 @@ class RouletteSettingsViewModel(private val repository: RouletteRepository) : Ba
}
val successMessage = "$selectedRouletteTitle " +
if (isActive || availableActive) "로 설정하였습니다." else "을 설정했습니다."
if (isActive) "로 설정하였습니다." else "을 설정했습니다."
compositeDisposable.add(
repository.createRoulette(

View File

@ -37,7 +37,8 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setLayoutParams(binding.ivText, start = 0, end = 112, top = 282, bottom = 0)
setLayoutParams(binding.ivTitle, start = 0, end = 0, top = 180, bottom = 0)
setLayoutParams(binding.ivText, start = 0, end = 0, top = 0, bottom = 107)
setupRemoteConfig()
fetchAndroidLatestVersion()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -4,5 +4,5 @@
<corners android:radius="6.7dp" />
<stroke
android:width="1.3dp"
android:color="@color/color_3bb9f1" />
android:color="@color/color_9970ff" />
</shape>

View File

@ -164,7 +164,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6.7dp"
android:background="@drawable/bg_round_corner_6_7_333333_3bb9f1"
android:background="@drawable/bg_round_corner_6_7_333333_9970ff"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center"
android:paddingVertical="15.3dp"
@ -194,7 +194,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="6.7dp"
android:background="@drawable/bg_round_corner_6_7_333333_3bb9f1"
android:background="@drawable/bg_round_corner_6_7_333333_9970ff"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center"
android:paddingVertical="15.3dp"

View File

@ -1,325 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black">
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rl_back"
android:layout_width="0dp"
android:layout_height="51.7dp"
android:background="@color/black"
android:paddingHorizontal="13.3dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<include
android:id="@+id/toolbar"
layout="@layout/detail_toolbar" />
<TextView
android:id="@+id/tv_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:drawablePadding="6.7dp"
android:ellipsize="end"
android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center"
android:minHeight="48dp"
android:textColor="@color/color_eeeeee"
android:textSize="18.3sp"
app:drawableStartCompat="@drawable/ic_back"
tools:ignore="RelativeOverlap"
tools:text="소다라이브" />
</RelativeLayout>
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/ll_actions"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rl_back">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="13.3dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/ll_select_roulette_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/bg_round_corner_6_7_13181b"
android:gravity="center"
android:paddingVertical="14.3dp">
<ImageView
android:id="@+id/iv_select_roulette_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="6.7dp"
android:contentDescription="@null"
android:src="@drawable/ic_select_check"
android:visibility="gone" />
<TextView
android:id="@+id/tv_select_roulette_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text="룰렛 1"
android:textColor="@color/color_3bb9f1"
android:textSize="14.7sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_select_roulette_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="13.3dp"
android:layout_weight="1"
android:background="@drawable/bg_round_corner_6_7_777777"
android:gravity="center"
android:paddingVertical="14.3dp">
<ImageView
android:id="@+id/iv_select_roulette_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="6.7dp"
android:contentDescription="@null"
android:src="@drawable/ic_select_check_black"
android:visibility="gone" />
<TextView
android:id="@+id/tv_select_roulette_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text="룰렛 2"
android:textColor="@color/color_555555"
android:textSize="14.7sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_select_roulette_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="13.3dp"
android:layout_weight="1"
android:background="@drawable/bg_round_corner_6_7_777777"
android:gravity="center"
android:paddingVertical="14.3dp">
<ImageView
android:id="@+id/iv_select_roulette_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="6.7dp"
android:contentDescription="@null"
android:src="@drawable/ic_select_check"
android:visibility="gone" />
<TextView
android:id="@+id/tv_select_roulette_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold"
android:text="룰렛 3"
android:textColor="@color/color_555555"
android:textSize="14.7sp" />
</LinearLayout>
</LinearLayout>
<RelativeLayout
android:id="@+id/rl_roulette_is_active"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="26.7dp"
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold"
android:text="룰렛을 활성화 하시겠습니까?"
android:textColor="@color/color_eeeeee"
android:textSize="16sp" />
<ImageView
android:id="@+id/iv_roulette_is_active"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:contentDescription="@null"
tools:src="@drawable/btn_toggle_off_big" />
</RelativeLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="26.7dp"
android:layout_marginBottom="13.3dp"
android:fontFamily="@font/gmarket_sans_bold"
android:text="룰렛 금액 설정"
android:textColor="@color/color_eeeeee"
android:textSize="16sp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/et_set_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_marginEnd="8dp"
android:layout_toStartOf="@+id/tv_price_unit"
android:background="@drawable/bg_round_corner_6_7_222222"
android:fontFamily="@font/gmarket_sans_medium"
android:hint="룰렛 금액을 입력해 주세요.(최소 5캔)"
android:importantForAutofill="no"
android:inputType="numberSigned"
android:paddingHorizontal="13.3dp"
android:paddingVertical="16.7dp"
android:textColor="@color/color_eeeeee"
android:textColorHint="@color/color_777777"
android:textCursorDrawable="@drawable/edit_text_cursor"
android:textSize="13.3sp"
android:theme="@style/EditTextStyle"
tools:ignore="LabelFor" />
<TextView
android:id="@+id/tv_price_unit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_bold"
android:text="캔"
android:textColor="@color/color_eeeeee"
android:textSize="16.7sp" />
</RelativeLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="26.7dp"
android:fontFamily="@font/gmarket_sans_bold"
android:text="룰렛 옵션 설정"
android:textColor="@color/color_eeeeee"
android:textSize="16sp" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="21.3dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_medium"
android:text="※ 룰렛 옵션은 최소 2개,\n최대 10개까지 설정할 수 있습니다."
android:textColor="@color/color_ff5c49"
android:textSize="13.3sp" />
<ImageView
android:id="@+id/iv_add_option"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:contentDescription="@null"
android:src="@drawable/btn_add" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="21.3dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="옵션 확률 합계"
android:textColor="@color/color_eeeeee"
android:textSize="14.7sp"
tools:ignore="RelativeOverlap" />
<TextView
android:id="@+id/tv_total_percentage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="center"
android:textColor="@color/color_eeeeee"
android:textSize="14.7sp"
tools:text="( 100.00% )" />
</RelativeLayout>
<LinearLayout
android:id="@+id/ll_roulette_option_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout>
</ScrollView>
<LinearLayout
android:id="@+id/ll_actions"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/bg_top_round_corner_16_7_222222"
android:orientation="horizontal"
android:padding="13.3dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<TextView
android:id="@+id/tv_preview"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/bg_round_corner_10_transparent_3bb9f1"
android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center"
android:paddingVertical="16dp"
android:text="미리보기"
android:textColor="@color/color_3bb9f1"
android:textSize="18.3sp" />
<TextView
android:id="@+id/tv_save"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="13.3dp"
android:layout_weight="1"
android:background="@drawable/bg_round_corner_10_3bb9f1"
android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center"
android:paddingVertical="16dp"
android:text="설정완료"
android:textColor="@color/white"
android:textSize="18.3sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>

View File

@ -15,12 +15,24 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:src="@drawable/splash_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/iv_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:src="@drawable/splash_text"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -27,7 +27,7 @@
android:layout_height="wrap_content"
android:layout_marginHorizontal="13.3dp"
android:layout_marginTop="13.3dp"
android:background="@drawable/bg_round_corner_6_7_333333_3bb9f1"
android:background="@drawable/bg_round_corner_6_7_333333_9970ff"
android:fontFamily="@font/gmarket_sans_medium"
android:gravity="top"
android:hint="취소사유를 입력해 주세요"
@ -66,7 +66,7 @@
android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center"
android:paddingVertical="16dp"
android:textColor="@color/color_3bb9f1"
android:textColor="@color/color_9970ff"
android:textSize="18.3sp"
tools:text="취소" />

View File

@ -15,30 +15,6 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/ll_roulette_menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="21.3dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_title">
<TextView
android:id="@+id/tv_setting_roulette"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/bg_round_corner_4_7_3bb9f1"
android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center"
android:paddingVertical="17dp"
android:text="룰렛 설정"
android:textColor="@color/white"
android:textSize="14.7sp" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_live"
android:layout_width="0dp"
@ -47,5 +23,5 @@
android:paddingVertical="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ll_roulette_menu" />
app:layout_constraintTop_toBottomOf="@+id/tv_title" />
</androidx.constraintlayout.widget.ConstraintLayout>