refactor(creator): 진행 중 라이브 컴포넌트를 공통화한다
This commit is contained in:
@@ -361,17 +361,20 @@ class Agora(
|
||||
|
||||
fun deInitRtmClient(rtmEventListener: RtmEventListener) {
|
||||
rtmClient?.removeEventListener(rtmEventListener)
|
||||
rtmClient?.unsubscribe(roomChannelName, object : ResultCallback<Void> {
|
||||
override fun onSuccess(responseInfo: Void?) {
|
||||
Logger.e("RTM unsubscribe - $roomChannelName")
|
||||
roomChannelName = null
|
||||
}
|
||||
rtmClient?.unsubscribe(
|
||||
roomChannelName,
|
||||
object : ResultCallback<Void> {
|
||||
override fun onSuccess(responseInfo: Void?) {
|
||||
Logger.e("RTM unsubscribe - $roomChannelName")
|
||||
roomChannelName = null
|
||||
}
|
||||
|
||||
override fun onFailure(errorInfo: ErrorInfo) {
|
||||
Logger.e("RTM unsubscribe fail - ${errorInfo.errorCode}")
|
||||
Logger.e("RTM unsubscribe fail - ${errorInfo.errorReason}")
|
||||
override fun onFailure(errorInfo: ErrorInfo) {
|
||||
Logger.e("RTM unsubscribe fail - ${errorInfo.errorCode}")
|
||||
Logger.e("RTM unsubscribe fail - ${errorInfo.errorReason}")
|
||||
}
|
||||
}
|
||||
})
|
||||
)
|
||||
rtmClient?.unsubscribe(
|
||||
"inbox_${SharedPreferenceManager.userId}",
|
||||
object : ResultCallback<Void> {
|
||||
@@ -383,7 +386,8 @@ class Agora(
|
||||
Logger.e("RTM unsubscribe fail - ${errorInfo.errorCode}")
|
||||
Logger.e("RTM unsubscribe fail - ${errorInfo.errorReason}")
|
||||
}
|
||||
})
|
||||
}
|
||||
)
|
||||
rtmClient?.logout(object : ResultCallback<Void> {
|
||||
override fun onSuccess(responseInfo: Void?) {
|
||||
Logger.e("RTM logout")
|
||||
@@ -398,7 +402,6 @@ class Agora(
|
||||
// 상태 리셋
|
||||
rtmLoggedIn = false
|
||||
rtmLoginInProgress = false
|
||||
|
||||
}
|
||||
// endregion
|
||||
}
|
||||
|
||||
@@ -136,7 +136,7 @@ class SodaLiveApp : Application(), DefaultLifecycleObserver {
|
||||
applicationContext,
|
||||
BuildConfig.NOTIFLY_PROJECT_ID,
|
||||
BuildConfig.NOTIFLY_USERNAME,
|
||||
BuildConfig.NOTIFLY_PASSWORD,
|
||||
BuildConfig.NOTIFLY_PASSWORD
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -14,5 +14,5 @@ data class AddAllPlaybackTrackingRequest(
|
||||
data class PlaybackTrackingData(
|
||||
@SerializedName("contentId") val contentId: Long,
|
||||
@SerializedName("playDateTime") val playDateTime: String,
|
||||
@SerializedName("isPreview") val isPreview: Boolean,
|
||||
@SerializedName("isPreview") val isPreview: Boolean
|
||||
)
|
||||
|
||||
@@ -127,7 +127,7 @@ class AudioContentViewModel(private val repository: AudioContentRepository) : Ba
|
||||
compositeDisposable.add(
|
||||
repository.getCategoryList(
|
||||
creatorId = userId,
|
||||
token = "Bearer ${SharedPreferenceManager.token}",
|
||||
token = "Bearer ${SharedPreferenceManager.token}"
|
||||
)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
|
||||
@@ -10,5 +10,5 @@ enum class PurchaseOption {
|
||||
BUY_ONLY,
|
||||
|
||||
@SerializedName("RENT_ONLY")
|
||||
RENT_ONLY,
|
||||
RENT_ONLY
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ import kr.co.vividnext.sodalive.extensions.moneyFormat
|
||||
class AudioContentNewAllAdapter(
|
||||
private val itemWidth: Int,
|
||||
private val onClickItem: (Long) -> Unit,
|
||||
private val onClickCreator: (Long) -> Unit,
|
||||
private val onClickCreator: (Long) -> Unit
|
||||
) : RecyclerView.Adapter<AudioContentNewAllAdapter.ViewHolder>() {
|
||||
|
||||
inner class ViewHolder(
|
||||
|
||||
@@ -35,7 +35,7 @@ class AudioContentCommentReplyAdapter(
|
||||
LayoutInflater.from(parent.context),
|
||||
parent,
|
||||
false
|
||||
),
|
||||
)
|
||||
)
|
||||
} else {
|
||||
AudioContentCommentReplyItemViewHolder(
|
||||
@@ -172,9 +172,7 @@ class AudioContentCommentReplyItemViewHolder(
|
||||
private val context: Context,
|
||||
private val creatorId: Long,
|
||||
private val binding: ItemAudioContentCommentReplyBinding,
|
||||
private val showOptionMenu: (
|
||||
Context, View, Long, Long, Long, onClickModify: () -> Unit
|
||||
) -> Unit,
|
||||
private val showOptionMenu: (Context, View, Long, Long, Long, onClickModify: () -> Unit) -> Unit,
|
||||
private val modifyComment: (Long, String) -> Unit
|
||||
) : AudioContentCommentReplyViewHolder(binding) {
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ data class GetAudioContentDetailResponse(
|
||||
data class OtherContentResponse(
|
||||
@SerializedName("contentId") val contentId: Long,
|
||||
@SerializedName("title") val title: String,
|
||||
@SerializedName("coverUrl") val coverUrl: String,
|
||||
@SerializedName("coverUrl") val coverUrl: String
|
||||
)
|
||||
|
||||
@Keep
|
||||
|
||||
@@ -25,10 +25,15 @@ class AudioContentMainNewContentThemeAdapter(
|
||||
fun bind(theme: String) {
|
||||
if (
|
||||
theme == selectedTheme ||
|
||||
(selectedTheme == "" && theme == SodaLiveApplicationHolder.get()
|
||||
.getString(R.string.audio_content_label_all)) ||
|
||||
(selectedTheme == "" && theme == SodaLiveApplicationHolder.get()
|
||||
.getString(R.string.screen_home_sort_revenue))
|
||||
(
|
||||
selectedTheme == "" && theme == SodaLiveApplicationHolder.get()
|
||||
.getString(R.string.audio_content_label_all)) ||
|
||||
(
|
||||
selectedTheme == "" && theme == SodaLiveApplicationHolder.get()
|
||||
.getString(
|
||||
R.string.screen_home_sort_revenue
|
||||
)
|
||||
)
|
||||
) {
|
||||
binding.tvTheme.setBackgroundResource(
|
||||
R.drawable.bg_round_corner_16_7_transparent_3bb9f1
|
||||
|
||||
@@ -76,7 +76,8 @@ class AudioContentModifyActivity : BaseActivity<ActivityAudioContentModifyBindin
|
||||
excludeGif = true,
|
||||
isEnabledFreeStyleCrop = true,
|
||||
config = ImagePickerCropper.Config(
|
||||
aspectX = 1f, aspectY = 1f,
|
||||
aspectX = 1f,
|
||||
aspectY = 1f,
|
||||
compressFormat = Bitmap.CompressFormat.JPEG,
|
||||
compressQuality = 90
|
||||
),
|
||||
|
||||
@@ -28,7 +28,7 @@ class AudioContentOrderConfirmDialog(
|
||||
orderType: OrderType,
|
||||
price: Int,
|
||||
isAvailableUsePoint: Boolean,
|
||||
confirmButtonClick: () -> Unit,
|
||||
confirmButtonClick: () -> Unit
|
||||
) {
|
||||
|
||||
private val alertDialog: AlertDialog
|
||||
|
||||
@@ -1,20 +1,9 @@
|
||||
package kr.co.vividnext.sodalive.audio_content.order
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.graphics.Rect
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.audio_content.detail.AudioContentDetailActivity
|
||||
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.ActivityAudioContentOrderListBinding
|
||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||
|
||||
class AudioContentOrderListActivity : BaseActivity<ActivityAudioContentOrderListBinding>(
|
||||
ActivityAudioContentOrderListBinding::inflate
|
||||
|
||||
@@ -20,5 +20,5 @@ data class GetAudioContentOrderListItem(
|
||||
@SerializedName("isAdult") val isAdult: Boolean,
|
||||
@SerializedName("orderType") val orderType: OrderType,
|
||||
@SerializedName("likeCount") val likeCount: Int,
|
||||
@SerializedName("commentCount") val commentCount: Int,
|
||||
@SerializedName("commentCount") val commentCount: Int
|
||||
)
|
||||
|
||||
@@ -429,7 +429,6 @@ class AudioContentPlayerFragment(
|
||||
mediaController?.seekTo(progress.toLong())
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
updateMediaMetadata(mediaController?.currentMediaItem?.mediaMetadata)
|
||||
|
||||
@@ -14,8 +14,11 @@ import kr.co.vividnext.sodalive.common.SodaLiveApplicationHolder
|
||||
class SeriesListAllViewModel(private val repository: SeriesRepository) : BaseViewModel() {
|
||||
|
||||
enum class SeriesSortType {
|
||||
@SerializedName("NEWEST") NEWEST,
|
||||
@SerializedName("OLDEST") OLDEST
|
||||
@SerializedName("NEWEST")
|
||||
NEWEST,
|
||||
|
||||
@SerializedName("OLDEST")
|
||||
OLDEST
|
||||
}
|
||||
|
||||
private val _toastLiveData = MutableLiveData<String?>()
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package kr.co.vividnext.sodalive.audio_content.series.detail
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
|
||||
@@ -240,7 +240,7 @@ class AudioContentUploadActivity : BaseActivity<ActivityAudioContentUploadBindin
|
||||
title = getString(R.string.audio_content_upload_dialog_title),
|
||||
desc = getString(R.string.audio_content_upload_dialog_desc),
|
||||
confirmButtonTitle = getString(R.string.confirm),
|
||||
confirmButtonClick = { finish() },
|
||||
confirmButtonClick = { finish() }
|
||||
).show(screenWidth)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,5 +20,5 @@ data class CreateAudioContentRequest(
|
||||
@SerializedName("isPointAvailable") val isPointAvailable: Boolean,
|
||||
@SerializedName("isCommentAvailable") val isCommentAvailable: Boolean,
|
||||
@SerializedName("previewStartTime") val previewStartTime: String? = null,
|
||||
@SerializedName("previewEndTime") val previewEndTime: String? = null,
|
||||
@SerializedName("previewEndTime") val previewEndTime: String? = null
|
||||
)
|
||||
|
||||
@@ -80,13 +80,7 @@ class AuditionApplicantListAdapter(
|
||||
binding.sbProgress.max = currentTotalDuration
|
||||
binding.sbProgress.progress = currentTime
|
||||
|
||||
binding.tvTotalDuration.text =
|
||||
"/${
|
||||
Utils.convertDurationToString(
|
||||
currentTotalDuration,
|
||||
showHours = false
|
||||
)
|
||||
}"
|
||||
binding.tvTotalDuration.text = "/${Utils.convertDurationToString(currentTotalDuration, showHours = false)}"
|
||||
binding.tvCurrentTime.text = Utils.convertDurationToString(
|
||||
currentTime,
|
||||
showHours = false
|
||||
|
||||
@@ -17,7 +17,6 @@ import kr.co.vividnext.sodalive.audition.role.AuditionRoleDetailActivity
|
||||
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.common.ToastMessage
|
||||
import kr.co.vividnext.sodalive.databinding.ActivityAuditionDetailBinding
|
||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||
import org.koin.android.ext.android.inject
|
||||
|
||||
@@ -43,7 +43,8 @@ class CharacterAdapter(
|
||||
translationY = fm.descent
|
||||
return true
|
||||
}
|
||||
})
|
||||
}
|
||||
)
|
||||
}
|
||||
} else {
|
||||
binding.tvRanking.visibility = View.GONE
|
||||
|
||||
@@ -17,7 +17,6 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.base.BaseFragment
|
||||
import kr.co.vividnext.sodalive.common.LoadingDialog
|
||||
import kr.co.vividnext.sodalive.common.UiText
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.databinding.FragmentCharacterCommentListBinding
|
||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||
@@ -151,8 +150,7 @@ class CharacterCommentListFragment : BaseFragment<FragmentCharacterCommentListBi
|
||||
recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
|
||||
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
|
||||
super.onScrolled(recyclerView, dx, dy)
|
||||
val lastVisible = (recyclerView.layoutManager as LinearLayoutManager)
|
||||
.findLastCompletelyVisibleItemPosition()
|
||||
val lastVisible = (recyclerView.layoutManager as LinearLayoutManager).findLastCompletelyVisibleItemPosition()
|
||||
val total = recyclerView.adapter?.itemCount ?: 0
|
||||
if (!recyclerView.canScrollVertically(1) && lastVisible == total - 1) {
|
||||
viewModel.getCommentList(characterId)
|
||||
@@ -195,7 +193,6 @@ class CharacterCommentListFragment : BaseFragment<FragmentCharacterCommentListBi
|
||||
imm.hideSoftInputFromWindow(view?.windowToken, 0)
|
||||
}
|
||||
|
||||
|
||||
companion object {
|
||||
private const val EXTRA_CHARACTER_ID = "extra_character_id"
|
||||
fun newInstance(characterId: Long): CharacterCommentListFragment {
|
||||
|
||||
@@ -15,7 +15,6 @@ import coil.transform.CircleCropTransformation
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.base.BaseFragment
|
||||
import kr.co.vividnext.sodalive.common.LoadingDialog
|
||||
import kr.co.vividnext.sodalive.common.UiText
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.databinding.FragmentCharacterCommentReplyBinding
|
||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||
@@ -48,15 +47,19 @@ class CharacterCommentReplyFragment : BaseFragment<FragmentCharacterCommentReply
|
||||
characterId = arguments?.getLong(EXTRA_CHARACTER_ID) ?: 0
|
||||
original = arguments?.let {
|
||||
val cid = it.getLong(EXTRA_ORIGINAL_COMMENT_ID, -1)
|
||||
if (cid == -1L) null else CharacterCommentResponse(
|
||||
commentId = cid,
|
||||
memberId = it.getLong(EXTRA_ORIGINAL_MEMBER_ID),
|
||||
memberProfileImage = it.getString(EXTRA_ORIGINAL_MEMBER_PROFILE_IMAGE) ?: "",
|
||||
memberNickname = it.getString(EXTRA_ORIGINAL_MEMBER_NICKNAME) ?: "",
|
||||
createdAt = it.getLong(EXTRA_ORIGINAL_CREATED_AT),
|
||||
replyCount = it.getInt(EXTRA_ORIGINAL_REPLY_COUNT),
|
||||
comment = it.getString(EXTRA_ORIGINAL_COMMENT_TEXT) ?: ""
|
||||
)
|
||||
if (cid == -1L) {
|
||||
null
|
||||
} else {
|
||||
CharacterCommentResponse(
|
||||
commentId = cid,
|
||||
memberId = it.getLong(EXTRA_ORIGINAL_MEMBER_ID),
|
||||
memberProfileImage = it.getString(EXTRA_ORIGINAL_MEMBER_PROFILE_IMAGE) ?: "",
|
||||
memberNickname = it.getString(EXTRA_ORIGINAL_MEMBER_NICKNAME) ?: "",
|
||||
createdAt = it.getLong(EXTRA_ORIGINAL_CREATED_AT),
|
||||
replyCount = it.getInt(EXTRA_ORIGINAL_REPLY_COUNT),
|
||||
comment = it.getString(EXTRA_ORIGINAL_COMMENT_TEXT) ?: ""
|
||||
)
|
||||
}
|
||||
}
|
||||
return super.onCreateView(inflater, container, savedInstanceState)
|
||||
}
|
||||
@@ -140,7 +143,7 @@ class CharacterCommentReplyFragment : BaseFragment<FragmentCharacterCommentReply
|
||||
outRect.right = 24f.dpToPx().toInt()
|
||||
when (parent.getChildAdapterPosition(view)) {
|
||||
0 -> {
|
||||
outRect.top = 24f.dpToPx().toInt();
|
||||
outRect.top = 24f.dpToPx().toInt()
|
||||
outRect.bottom = 12f.dpToPx().toInt()
|
||||
}
|
||||
|
||||
@@ -196,7 +199,6 @@ class CharacterCommentReplyFragment : BaseFragment<FragmentCharacterCommentReply
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
companion object {
|
||||
private const val EXTRA_CHARACTER_ID = "extra_character_id"
|
||||
private const val EXTRA_ORIGINAL_COMMENT_ID = "extra_original_comment_id"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package kr.co.vividnext.sodalive.chat.character.comment
|
||||
|
||||
import android.content.Context
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
|
||||
@@ -434,5 +434,4 @@ class CharacterDetailFragment : BaseFragment<FragmentCharacterDetailBinding>(
|
||||
binding.tvPersonalityContent.maxLines = 3
|
||||
binding.tvPersonalityContent.ellipsize = TextUtils.TruncateAt.END
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ data class CharacterDetailResponse(
|
||||
enum class CharacterType {
|
||||
@SerializedName("Clone")
|
||||
CLONE,
|
||||
|
||||
@SerializedName("Character")
|
||||
CHARACTER
|
||||
}
|
||||
|
||||
@@ -49,7 +49,6 @@ class OtherCharacterAdapter(
|
||||
transformations(RoundedCornersTransformation(16f.dpToPx()))
|
||||
}
|
||||
|
||||
|
||||
binding.root.setOnClickListener {
|
||||
onItemClick?.invoke(item)
|
||||
}
|
||||
|
||||
@@ -118,9 +118,7 @@ class CharacterGalleryViewModel(
|
||||
|
||||
val token = "Bearer ${SharedPreferenceManager.token}"
|
||||
isPurchasing = true
|
||||
_uiState.value = _uiState.value?.copy(
|
||||
isLoading = isRequesting || isPurchasing,
|
||||
)
|
||||
_uiState.value = _uiState.value?.copy(isLoading = isRequesting || isPurchasing)
|
||||
compositeDisposable.add(
|
||||
repository.purchaseCharacterImage(token = token, imageId = imageId)
|
||||
.subscribeOn(Schedulers.io())
|
||||
|
||||
@@ -85,7 +85,6 @@ class OriginalWorkDetailActivity : BaseActivity<ActivityOriginalWorkDetailBindin
|
||||
|
||||
override fun onTabReselected(tab: TabLayout.Tab) {
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -99,7 +99,6 @@ class ChatBackgroundPickerDialogFragment : DialogFragment() {
|
||||
items.addAll(list.map { BgItem(id = it.id, url = it.imageUrl) })
|
||||
adapter.submit(items, selectedId)
|
||||
|
||||
|
||||
loadingDialog.dismiss()
|
||||
}, { _ ->
|
||||
// 실패 시에도 현재까지의 목록 표시(없으면 빈 목록)
|
||||
@@ -161,9 +160,7 @@ class ChatBackgroundPickerDialogFragment : DialogFragment() {
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BgVH {
|
||||
val binding = ItemChatBackgroundImageBinding.inflate(
|
||||
LayoutInflater.from(parent.context), parent, false
|
||||
)
|
||||
val binding = ItemChatBackgroundImageBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||
return BgVH(binding, onClick)
|
||||
}
|
||||
|
||||
|
||||
@@ -12,8 +12,10 @@ import androidx.annotation.Keep
|
||||
enum class MessageStatus {
|
||||
/** 전송 중 */
|
||||
SENDING,
|
||||
|
||||
/** 전송 완료 */
|
||||
SENT,
|
||||
|
||||
/** 전송 실패 */
|
||||
FAILED
|
||||
}
|
||||
|
||||
@@ -4,7 +4,11 @@
|
||||
package kr.co.vividnext.sodalive.chat.talk.room.db
|
||||
|
||||
import androidx.annotation.Keep
|
||||
import androidx.room.*
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import androidx.room.Update
|
||||
|
||||
@Keep
|
||||
@Dao
|
||||
|
||||
@@ -45,15 +45,21 @@ class ImagePickerCropper(
|
||||
// 13+ : 시스템 Photo Picker
|
||||
private val pickPhoto: ActivityResultLauncher<PickVisualMediaRequest> =
|
||||
caller.registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
||||
if (uri == null) onError(CancellationException("이미지 선택을 취소했습니다."))
|
||||
else handlePickedUri(uri)
|
||||
if (uri == null) {
|
||||
onError(CancellationException("이미지 선택을 취소했습니다."))
|
||||
} else {
|
||||
handlePickedUri(uri)
|
||||
}
|
||||
}
|
||||
|
||||
// 12- : SAF GetContent
|
||||
private val pickContent: ActivityResultLauncher<String> =
|
||||
caller.registerForActivityResult(ActivityResultContracts.GetContent()) { uri ->
|
||||
if (uri == null) onError(CancellationException("이미지 선택을 취소했습니다."))
|
||||
else handlePickedUri(uri)
|
||||
if (uri == null) {
|
||||
onError(CancellationException("이미지 선택을 취소했습니다."))
|
||||
} else {
|
||||
handlePickedUri(uri)
|
||||
}
|
||||
}
|
||||
|
||||
// uCrop 결과 수신
|
||||
@@ -105,7 +111,9 @@ class ImagePickerCropper(
|
||||
val gifFile = copyUriToCacheAsGif(source)
|
||||
lastCroppedFile = gifFile
|
||||
val fileUri = FileProvider.getUriForFile(
|
||||
context, "${BuildConfig.APPLICATION_ID}.fileprovider", gifFile
|
||||
context,
|
||||
"${BuildConfig.APPLICATION_ID}.fileprovider",
|
||||
gifFile
|
||||
)
|
||||
|
||||
// 2) 바로 반환 (크롭 생략)
|
||||
@@ -137,13 +145,20 @@ class ImagePickerCropper(
|
||||
)
|
||||
?.use { c ->
|
||||
val idx = c.getColumnIndex(OpenableColumns.DISPLAY_NAME)
|
||||
if (idx >= 0 && c.moveToFirst()) c.getString(idx) else null
|
||||
if (idx >= 0 && c.moveToFirst()) {
|
||||
c.getString(idx)
|
||||
} else {
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun copyUriToCacheAsGif(uri: Uri): File {
|
||||
val base = if (config.useExternalCache) context.externalCacheDir ?: context.cacheDir
|
||||
else context.cacheDir
|
||||
val base = if (config.useExternalCache) {
|
||||
context.externalCacheDir ?: context.cacheDir
|
||||
} else {
|
||||
context.cacheDir
|
||||
}
|
||||
|
||||
// 원본 이름 유지 시도, 실패하면 타임스탬프
|
||||
val name = getDisplayName(uri)?.takeIf { it.endsWith(".gif", true) }
|
||||
@@ -201,8 +216,11 @@ class ImagePickerCropper(
|
||||
}
|
||||
|
||||
private fun createTempCropFile(): File {
|
||||
val base = if (config.useExternalCache) context.externalCacheDir ?: context.cacheDir
|
||||
else context.cacheDir
|
||||
val base = if (config.useExternalCache) {
|
||||
context.externalCacheDir ?: context.cacheDir
|
||||
} else {
|
||||
context.cacheDir
|
||||
}
|
||||
|
||||
val ext = when (config.compressFormat) {
|
||||
Bitmap.CompressFormat.PNG -> "png"
|
||||
|
||||
@@ -89,14 +89,17 @@ object RealPathUtil {
|
||||
} // MediaProvider
|
||||
// DownloadsProvider
|
||||
} else if ("content".equals(uri.scheme!!, ignoreCase = true)) {
|
||||
|
||||
// Return the remote address
|
||||
return if (isGooglePhotosUri(uri)) uri.lastPathSegment else getDataColumn(
|
||||
context,
|
||||
uri,
|
||||
null,
|
||||
null
|
||||
)
|
||||
return if (isGooglePhotosUri(uri)) {
|
||||
uri.lastPathSegment
|
||||
} else {
|
||||
getDataColumn(
|
||||
context,
|
||||
uri,
|
||||
null,
|
||||
null
|
||||
)
|
||||
}
|
||||
} else if ("file".equals(uri.scheme!!, ignoreCase = true)) {
|
||||
return uri.path
|
||||
} // File
|
||||
@@ -122,7 +125,6 @@ object RealPathUtil {
|
||||
selection: String?,
|
||||
selectionArgs: Array<String>?
|
||||
): String? {
|
||||
|
||||
var cursor: Cursor? = null
|
||||
val column = "_data"
|
||||
val projection = arrayOf(column)
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
package kr.co.vividnext.sodalive.common
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import java.net.URLEncoder
|
||||
import java.nio.charset.StandardCharsets
|
||||
import kr.co.vividnext.sodalive.settings.language.LanguageManager
|
||||
|
||||
object Utils {
|
||||
fun convertDurationToString(duration: Int, showHours: Boolean = true): String {
|
||||
|
||||
@@ -18,7 +18,7 @@ open class LiveDialog(
|
||||
confirmButtonTitle: String,
|
||||
confirmButtonClick: () -> Unit,
|
||||
cancelButtonTitle: String = "",
|
||||
cancelButtonClick: (() -> Unit)? = null,
|
||||
cancelButtonClick: (() -> Unit)? = null
|
||||
) {
|
||||
|
||||
private val alertDialog: AlertDialog
|
||||
|
||||
@@ -11,7 +11,7 @@ import kr.co.vividnext.sodalive.R
|
||||
class CreatorFollowNotifyFragment(
|
||||
private val onClickNotifyAll: () -> Unit,
|
||||
private val onClickNotifyNone: () -> Unit,
|
||||
private val onClickUnFollow: () -> Unit,
|
||||
private val onClickUnFollow: () -> Unit
|
||||
) : BottomSheetDialogFragment() {
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
|
||||
@@ -37,12 +37,12 @@ import kr.co.vividnext.sodalive.audio_content.series.GetSeriesListResponse
|
||||
import kr.co.vividnext.sodalive.audio_content.series.SeriesListAllActivity
|
||||
import kr.co.vividnext.sodalive.audio_content.series.detail.SeriesDetailActivity
|
||||
import kr.co.vividnext.sodalive.audio_content.upload.AudioContentUploadActivity
|
||||
import kr.co.vividnext.sodalive.common.image.BlurTransformation
|
||||
import kr.co.vividnext.sodalive.base.BaseActivity
|
||||
import kr.co.vividnext.sodalive.base.SodaDialog
|
||||
import kr.co.vividnext.sodalive.common.Constants
|
||||
import kr.co.vividnext.sodalive.common.LoadingDialog
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.common.image.BlurTransformation
|
||||
import kr.co.vividnext.sodalive.databinding.ActivityUserProfileBinding
|
||||
import kr.co.vividnext.sodalive.databinding.ItemCreatorCommunityBinding
|
||||
import kr.co.vividnext.sodalive.dialog.MemberProfileDialog
|
||||
@@ -138,7 +138,7 @@ class UserProfileActivity : BaseActivity<ActivityUserProfileBinding>(
|
||||
binding.ivMenu.setOnClickListener {
|
||||
showOptionMenu(
|
||||
this,
|
||||
binding.ivMenu,
|
||||
binding.ivMenu
|
||||
)
|
||||
}
|
||||
|
||||
@@ -468,7 +468,7 @@ class UserProfileActivity : BaseActivity<ActivityUserProfileBinding>(
|
||||
viewModel.modifyCheers(
|
||||
cheersId = cheersId,
|
||||
creatorId = userId,
|
||||
cheersContent = content,
|
||||
cheersContent = content
|
||||
)
|
||||
}
|
||||
},
|
||||
|
||||
@@ -7,5 +7,5 @@ import com.google.gson.annotations.SerializedName
|
||||
data class PutModifyCheersRequest(
|
||||
@SerializedName("cheersId") val cheersId: Long,
|
||||
@SerializedName("content") var content: String? = null,
|
||||
@SerializedName("isActive") var isActive: Boolean? = null,
|
||||
@SerializedName("isActive") var isActive: Boolean? = null
|
||||
)
|
||||
|
||||
@@ -149,7 +149,6 @@ class CreatorCommunityAllViewModel(
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe({}, {})
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
fun registerComment(
|
||||
@@ -282,49 +281,48 @@ class CreatorCommunityAllViewModel(
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun updateCommunityPostFixed(postId: Long, isFixed: Boolean) {
|
||||
if (_isLoading.value == true) return
|
||||
_isLoading.value = true
|
||||
if (_isLoading.value == true) return
|
||||
_isLoading.value = true
|
||||
|
||||
compositeDisposable.add(
|
||||
repository.updateCommunityPostFixed(
|
||||
postId = postId,
|
||||
isFixed = isFixed,
|
||||
token = "Bearer ${SharedPreferenceManager.token}"
|
||||
)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
{
|
||||
_isLoading.value = false
|
||||
if (it.success) {
|
||||
// 목록을 초기화하고 재조회하여 최신 고정 상태를 반영한다.
|
||||
page = 1
|
||||
isLast = false
|
||||
getCommunityPostList()
|
||||
} else {
|
||||
if (it.message != null) {
|
||||
_toastLiveData.postValue(it.message)
|
||||
} else {
|
||||
_toastLiveData.postValue(
|
||||
SodaLiveApplicationHolder.get()
|
||||
.getString(R.string.common_error_unknown)
|
||||
)
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
_isLoading.value = false
|
||||
it.message?.let { message -> Logger.e(message) }
|
||||
_toastLiveData.postValue(
|
||||
SodaLiveApplicationHolder.get()
|
||||
.getString(R.string.common_error_unknown)
|
||||
)
|
||||
}
|
||||
)
|
||||
compositeDisposable.add(
|
||||
repository.updateCommunityPostFixed(
|
||||
postId = postId,
|
||||
isFixed = isFixed,
|
||||
token = "Bearer ${SharedPreferenceManager.token}"
|
||||
)
|
||||
}
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
{
|
||||
_isLoading.value = false
|
||||
if (it.success) {
|
||||
// 목록을 초기화하고 재조회하여 최신 고정 상태를 반영한다.
|
||||
page = 1
|
||||
isLast = false
|
||||
getCommunityPostList()
|
||||
} else {
|
||||
if (it.message != null) {
|
||||
_toastLiveData.postValue(it.message)
|
||||
} else {
|
||||
_toastLiveData.postValue(
|
||||
SodaLiveApplicationHolder.get()
|
||||
.getString(R.string.common_error_unknown)
|
||||
)
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
_isLoading.value = false
|
||||
it.message?.let { message -> Logger.e(message) }
|
||||
_toastLiveData.postValue(
|
||||
SodaLiveApplicationHolder.get()
|
||||
.getString(R.string.common_error_unknown)
|
||||
)
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,8 @@ class CreatorCommunityReportDialog(
|
||||
alertDialog.dismiss()
|
||||
confirmButtonClick(reason)
|
||||
} else {
|
||||
Toast.makeText(activity,
|
||||
Toast.makeText(
|
||||
activity,
|
||||
SodaLiveApplicationHolder.get()
|
||||
.getString(R.string.screen_audio_content_detail_report_reason_required),
|
||||
Toast.LENGTH_LONG
|
||||
|
||||
@@ -16,7 +16,7 @@ class PurchaseCommunityPostDialog(
|
||||
activity: Activity,
|
||||
layoutInflater: LayoutInflater,
|
||||
can: Int,
|
||||
confirmButtonClick: () -> Unit,
|
||||
confirmButtonClick: () -> Unit
|
||||
) {
|
||||
|
||||
private val alertDialog: AlertDialog
|
||||
|
||||
@@ -7,5 +7,5 @@ import com.google.gson.annotations.SerializedName
|
||||
data class PurchasePostRequest(
|
||||
@SerializedName("postId") val postId: Long,
|
||||
@SerializedName("timezone") val timezone: String,
|
||||
@SerializedName("container") val container: String = "aos",
|
||||
@SerializedName("container") val container: String = "aos"
|
||||
)
|
||||
|
||||
@@ -127,9 +127,7 @@ class CreatorCommunityCommentReplyItemViewHolder(
|
||||
private val context: Context,
|
||||
private val creatorId: Long,
|
||||
private val binding: ItemCommunityPostCommentReplyBinding,
|
||||
private val showOptionMenu: (
|
||||
Context, View, Long, Long, Long, onClickModify: () -> Unit
|
||||
) -> Unit,
|
||||
private val showOptionMenu: (Context, View, Long, Long, Long, onClickModify: () -> Unit) -> Unit,
|
||||
private val modifyComment: (Long, String) -> Unit,
|
||||
private val onClickProfile: (Long) -> Unit
|
||||
) : CreatorCommunityCommentReplyViewHolder(binding) {
|
||||
@@ -139,7 +137,7 @@ class CreatorCommunityCommentReplyItemViewHolder(
|
||||
onClickProfile(item.writerId)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
binding.ivCommentProfile.load(item.profileUrl) {
|
||||
crossfade(true)
|
||||
placeholder(R.drawable.ic_place_holder)
|
||||
@@ -178,5 +176,4 @@ class CreatorCommunityCommentReplyItemViewHolder(
|
||||
binding.ivMenu.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package kr.co.vividnext.sodalive.explorer.profile.creator_community.modify
|
||||
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.graphics.Bitmap
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
@@ -76,7 +75,8 @@ class CreatorCommunityModifyActivity : BaseActivity<ActivityCreatorCommunityModi
|
||||
context = this,
|
||||
isEnabledFreeStyleCrop = true,
|
||||
config = ImagePickerCropper.Config(
|
||||
aspectX = 1f, aspectY = 1f,
|
||||
aspectX = 1f,
|
||||
aspectY = 1f,
|
||||
compressFormat = Bitmap.CompressFormat.JPEG,
|
||||
compressQuality = 90
|
||||
),
|
||||
|
||||
@@ -7,6 +7,7 @@ import com.google.gson.annotations.SerializedName
|
||||
enum class DonationRankingPeriod {
|
||||
@SerializedName("WEEKLY")
|
||||
WEEKLY,
|
||||
|
||||
@SerializedName("CUMULATIVE")
|
||||
CUMULATIVE
|
||||
}
|
||||
|
||||
@@ -19,5 +19,5 @@ data class GetDonationAllResponse(
|
||||
@SerializedName("donationRankingPeriod")
|
||||
val donationRankingPeriod: DonationRankingPeriod? = null,
|
||||
@SerializedName("userDonationRanking")
|
||||
val userDonationRanking: List<UserDonationRankingResponse>,
|
||||
val userDonationRanking: List<UserDonationRankingResponse>
|
||||
)
|
||||
|
||||
@@ -103,7 +103,7 @@ class UserProfileFantalkAllViewActivity : BaseActivity<ActivityUserProfileFantal
|
||||
viewModel.modifyCheers(
|
||||
cheersId = cheersId,
|
||||
creatorId = userId,
|
||||
cheersContent = content,
|
||||
cheersContent = content
|
||||
)
|
||||
}
|
||||
},
|
||||
|
||||
@@ -13,7 +13,6 @@ import kr.co.vividnext.sodalive.common.LoadingDialog
|
||||
import kr.co.vividnext.sodalive.databinding.ActivityUserFollowerListBinding
|
||||
import kr.co.vividnext.sodalive.dialog.MemberProfileDialog
|
||||
import kr.co.vividnext.sodalive.explorer.profile.CreatorFollowNotifyFragment
|
||||
import kr.co.vividnext.sodalive.explorer.profile.fantalk.UserProfileFantalkAllViewActivity
|
||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||
import kr.co.vividnext.sodalive.extensions.moneyFormat
|
||||
import org.koin.android.ext.android.inject
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package kr.co.vividnext.sodalive.following
|
||||
|
||||
import kr.co.vividnext.sodalive.live.recommend.LiveRecommendApi
|
||||
import kr.co.vividnext.sodalive.user.CreatorFollowRequestRequest
|
||||
import kr.co.vividnext.sodalive.user.UserApi
|
||||
|
||||
class FollowingCreatorRepository(private val api: LiveRecommendApi) {
|
||||
fun getFollowedCreatorAllList(
|
||||
|
||||
@@ -66,7 +66,6 @@ class CreatorRankingAdapter(
|
||||
binding.tvFollow.text = context.getString(R.string.screen_home_following)
|
||||
binding.tvFollow.setBackgroundResource(R.drawable.bg_round_corner_999_455a64)
|
||||
binding.tvFollow.setTextColor(context.getColor(R.color.white))
|
||||
|
||||
} else {
|
||||
binding.tvFollow.text = context.getString(R.string.screen_home_follow)
|
||||
binding.tvFollow.setBackgroundResource(R.drawable.bg_round_corner_999_white)
|
||||
|
||||
@@ -10,8 +10,8 @@ import kr.co.vividnext.sodalive.databinding.ItemDayOfWeekBinding
|
||||
import java.util.Calendar
|
||||
|
||||
class DayOfWeekAdapter(
|
||||
private val context: Context,
|
||||
private val onClickItem: (SeriesPublishedDaysOfWeek) -> Unit,
|
||||
context: Context,
|
||||
private val onClickItem: (SeriesPublishedDaysOfWeek) -> Unit
|
||||
) : RecyclerView.Adapter<DayOfWeekAdapter.ViewHolder>() {
|
||||
|
||||
inner class ViewHolder(
|
||||
@@ -40,7 +40,7 @@ class DayOfWeekAdapter(
|
||||
DayOfWeek(dayOfWeekStr = context.getString(R.string.day_fri_short), dayOfWeek = SeriesPublishedDaysOfWeek.FRI),
|
||||
DayOfWeek(dayOfWeekStr = context.getString(R.string.day_sat_short), dayOfWeek = SeriesPublishedDaysOfWeek.SAT),
|
||||
DayOfWeek(dayOfWeekStr = context.getString(R.string.day_sun_short), dayOfWeek = SeriesPublishedDaysOfWeek.SUN),
|
||||
DayOfWeek(dayOfWeekStr = context.getString(R.string.day_random), dayOfWeek = SeriesPublishedDaysOfWeek.RANDOM),
|
||||
DayOfWeek(dayOfWeekStr = context.getString(R.string.day_random), dayOfWeek = SeriesPublishedDaysOfWeek.RANDOM)
|
||||
)
|
||||
|
||||
// 요일 숫자에 맞춰 배열
|
||||
|
||||
@@ -13,7 +13,7 @@ import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||
|
||||
class HomeContentAdapter(
|
||||
private val itemSquareSizePx: Int? = null,
|
||||
private val onClickItem: (Long) -> Unit,
|
||||
private val onClickItem: (Long) -> Unit
|
||||
) : RecyclerView.Adapter<HomeContentAdapter.ViewHolder>() {
|
||||
private val items = mutableListOf<AudioContentMainItem>()
|
||||
|
||||
|
||||
@@ -149,7 +149,6 @@ class LiveViewModel(
|
||||
|
||||
fun getSummary() {
|
||||
if (!_isLoading.value!!) {
|
||||
|
||||
if (SharedPreferenceManager.token.isNotBlank()) {
|
||||
getFollowedChannelList()
|
||||
getLatestPostListFromCreatorsYouFollow()
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
package kr.co.vividnext.sodalive.live.event_banner
|
||||
|
||||
import android.content.Context
|
||||
import android.widget.ImageView
|
||||
import coil.load
|
||||
import com.zhpan.bannerview.BaseBannerAdapter
|
||||
import com.zhpan.bannerview.BaseViewHolder
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.settings.event.EventItem
|
||||
|
||||
class EventBannerAdapter(
|
||||
private val context: Context,
|
||||
private val itemClick: (EventItem) -> Unit
|
||||
) : BaseBannerAdapter<EventItem>() {
|
||||
|
||||
override fun bindData(
|
||||
holder: BaseViewHolder<EventItem>,
|
||||
data: EventItem,
|
||||
position: Int,
|
||||
pageSize: Int
|
||||
) {
|
||||
val ivThumbnail = holder.findViewById<ImageView>(R.id.iv_thumbnail)
|
||||
ivThumbnail.load(data.thumbnailImageUrl) {
|
||||
crossfade(true)
|
||||
|
||||
val layoutParams = ivThumbnail.layoutParams
|
||||
val screenWidth = context.resources.displayMetrics.widthPixels
|
||||
layoutParams.width = screenWidth
|
||||
layoutParams.height = (screenWidth * 300) / 1000
|
||||
ivThumbnail.layoutParams = layoutParams
|
||||
}
|
||||
ivThumbnail.setOnClickListener { itemClick(data) }
|
||||
}
|
||||
|
||||
override fun getLayoutId(viewType: Int): Int {
|
||||
return R.layout.item_event_slider
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,7 @@ import kr.co.vividnext.sodalive.extensions.moneyFormat
|
||||
import kr.co.vividnext.sodalive.live.GetRoomListResponse
|
||||
|
||||
class LiveNowAdapter(
|
||||
private val onClick: (GetRoomListResponse) -> Unit,
|
||||
private val onClick: (GetRoomListResponse) -> Unit
|
||||
) : RecyclerView.Adapter<LiveNowAdapter.ViewHolder>() {
|
||||
|
||||
var items = mutableListOf<GetRoomListResponse>()
|
||||
|
||||
@@ -14,7 +14,7 @@ import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||
|
||||
class LiveRecommendChannelAdapter(
|
||||
private val onClick: (Long) -> Unit,
|
||||
private val onClickMore: () -> Unit,
|
||||
private val onClickMore: () -> Unit
|
||||
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
|
||||
private val items = mutableListOf<GetRecommendChannelResponse>()
|
||||
|
||||
@@ -15,5 +15,5 @@ data class GetLiveReservationResponse(
|
||||
@SerializedName("price") val price: Int,
|
||||
@SerializedName("masterNickname") val masterNickname: String,
|
||||
@SerializedName("beginDateTimeUtc") val beginDateTimeUtc: String,
|
||||
@SerializedName("cancelable") val cancelable: Boolean,
|
||||
@SerializedName("cancelable") val cancelable: Boolean
|
||||
) : Parcelable
|
||||
|
||||
@@ -126,9 +126,7 @@ class LiveReservationCancelActivity : BaseActivity<ActivityLiveReservationCancel
|
||||
|
||||
binding.tvCancel.setOnClickListener {
|
||||
viewModel.cancelReservation {
|
||||
if (binding.tvPrice.text == SodaLiveApplicationHolder.get()
|
||||
.getString(R.string.live_reservation_free)
|
||||
) {
|
||||
if (binding.tvPrice.text == SodaLiveApplicationHolder.get().getString(R.string.live_reservation_free)) {
|
||||
binding.tvCancelComplete.visibility = View.GONE
|
||||
} else {
|
||||
binding.tvCancelComplete.visibility = View.VISIBLE
|
||||
|
||||
@@ -6,10 +6,10 @@ import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import coil.load
|
||||
import coil.transform.RoundedCornersTransformation
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.databinding.ItemLiveReservationStatusBinding
|
||||
import kr.co.vividnext.sodalive.extensions.convertDateFormat
|
||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.settings.language.LanguageManager
|
||||
import kr.co.vividnext.sodalive.settings.language.LocaleHelper
|
||||
import java.util.Locale
|
||||
@@ -22,7 +22,7 @@ class LiveReservationStatusAdapter(
|
||||
val items = mutableListOf<GetLiveReservationResponse>()
|
||||
|
||||
inner class ViewHolder(
|
||||
private val binding: ItemLiveReservationStatusBinding,
|
||||
private val binding: ItemLiveReservationStatusBinding
|
||||
) : RecyclerView.ViewHolder(binding.root) {
|
||||
|
||||
fun bind(item: GetLiveReservationResponse) {
|
||||
|
||||
@@ -90,7 +90,6 @@ class LiveReservationStatusViewModel(
|
||||
_isLoading.value = false
|
||||
},
|
||||
{
|
||||
|
||||
_isLoading.value = false
|
||||
it.message?.let { message -> Logger.e(message) }
|
||||
_toastLiveData.postValue(
|
||||
|
||||
@@ -3,7 +3,12 @@ package kr.co.vividnext.sodalive.live.room
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
enum class GenderRestriction {
|
||||
@SerializedName("ALL") ALL,
|
||||
@SerializedName("MALE_ONLY") MALE_ONLY,
|
||||
@SerializedName("FEMALE_ONLY") FEMALE_ONLY
|
||||
@SerializedName("ALL")
|
||||
ALL,
|
||||
|
||||
@SerializedName("MALE_ONLY")
|
||||
MALE_ONLY,
|
||||
|
||||
@SerializedName("FEMALE_ONLY")
|
||||
FEMALE_ONLY
|
||||
}
|
||||
|
||||
@@ -481,8 +481,10 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
context = this,
|
||||
excludeGif = true,
|
||||
config = ImagePickerCropper.Config(
|
||||
aspectX = 2f, aspectY = 3.8f,
|
||||
maxWidth = 1080, maxHeight = 2052,
|
||||
aspectX = 2f,
|
||||
aspectY = 3.8f,
|
||||
maxWidth = 1080,
|
||||
maxHeight = 2052,
|
||||
compressFormat = Bitmap.CompressFormat.JPEG,
|
||||
compressQuality = 90
|
||||
),
|
||||
@@ -640,7 +642,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
userId,
|
||||
nickname,
|
||||
isBlock,
|
||||
view,
|
||||
view
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -1208,7 +1210,8 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
)
|
||||
roomInfoEditDialog.setCoverImageUrl(response.coverImageUrl)
|
||||
roomInfoEditDialog.setMenuPreset(it)
|
||||
roomInfoEditDialog.setConfirmAction { newTitle, newContent, newCoverImageFile, isActivateMenu, menuId, menu, isAdult, isEntryMessageEnabled ->
|
||||
roomInfoEditDialog.setConfirmAction { newTitle, newContent, newCoverImageFile,
|
||||
isActivateMenu, menuId, menu, isAdult, isEntryMessageEnabled ->
|
||||
if (isEntryMessageEnabled != null) {
|
||||
this.isEntryMessageEnabled = isEntryMessageEnabled
|
||||
}
|
||||
@@ -1337,7 +1340,10 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
hasInvokedJoinChannel = true
|
||||
joinChannel(response)
|
||||
} else {
|
||||
Logger.e("joinChannel - skip (rtcConnected=$rtcConnected, rtmLoggedIn=$rtmLoggedIn, hasInvokedJoinChannel=$hasInvokedJoinChannel)")
|
||||
Logger.e(
|
||||
"joinChannel - skip (rtcConnected=$rtcConnected, " +
|
||||
"rtmLoggedIn=$rtmLoggedIn, hasInvokedJoinChannel=$hasInvokedJoinChannel)"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3027,8 +3033,10 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
val elapsed = System.currentTimeMillis() - pressStartTime
|
||||
|
||||
// 경과 시간 기준으로 물 채우기(progress) 계산 (0..100)
|
||||
val progressFraction = (elapsed.coerceAtMost(longPressDurationMs)
|
||||
.toFloat() / longPressDurationMs.toFloat())
|
||||
val progressFraction = (
|
||||
elapsed.coerceAtMost(longPressDurationMs)
|
||||
.toFloat() / longPressDurationMs.toFloat()
|
||||
)
|
||||
val progress = (progressFraction * 100f).toInt()
|
||||
longPressCenterHeart?.let { heartView ->
|
||||
try {
|
||||
@@ -3131,8 +3139,11 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
heart.setFrontWaveColor("#ff959a".toColorInt())
|
||||
heart.setBehindWaveColor("#ff959a".toColorInt())
|
||||
val elapsed = System.currentTimeMillis() - pressStartTime
|
||||
val progress = ((elapsed.coerceAtMost(longPressDurationMs)
|
||||
.toFloat() / longPressDurationMs.toFloat()) * 100f).toInt()
|
||||
val progress = (
|
||||
(
|
||||
elapsed.coerceAtMost(longPressDurationMs).toFloat() / longPressDurationMs.toFloat()
|
||||
) * 100f
|
||||
).toInt()
|
||||
try {
|
||||
heart.progress = progress
|
||||
} catch (_: Throwable) {
|
||||
@@ -3589,14 +3600,20 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
val s = 0.9f
|
||||
moveTo(0f, -0.45f * s)
|
||||
cubicTo(
|
||||
0.62f * s, -1.02f * s,
|
||||
1.22f * s, -0.04f * s,
|
||||
0f, 0.65f * s
|
||||
0.62f * s,
|
||||
-1.02f * s,
|
||||
1.22f * s,
|
||||
-0.04f * s,
|
||||
0f,
|
||||
0.65f * s
|
||||
)
|
||||
cubicTo(
|
||||
-1.22f * s, -0.04f * s,
|
||||
-0.62f * s, -1.02f * s,
|
||||
0f, -0.45f * s
|
||||
-1.22f * s,
|
||||
-0.04f * s,
|
||||
-0.62f * s,
|
||||
-1.02f * s,
|
||||
0f,
|
||||
-0.45f * s
|
||||
)
|
||||
close()
|
||||
}
|
||||
@@ -3784,14 +3801,20 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
val s = 0.9f
|
||||
moveTo(0f, -0.45f * s)
|
||||
cubicTo(
|
||||
0.62f * s, -1.02f * s,
|
||||
1.22f * s, -0.04f * s,
|
||||
0f, 0.65f * s
|
||||
0.62f * s,
|
||||
-1.02f * s,
|
||||
1.22f * s,
|
||||
-0.04f * s,
|
||||
0f,
|
||||
0.65f * s
|
||||
)
|
||||
cubicTo(
|
||||
-1.22f * s, -0.04f * s,
|
||||
-0.62f * s, -1.02f * s,
|
||||
0f, -0.45f * s
|
||||
-1.22f * s,
|
||||
-0.04f * s,
|
||||
-0.62f * s,
|
||||
-1.02f * s,
|
||||
0f,
|
||||
-0.45f * s
|
||||
)
|
||||
close()
|
||||
}
|
||||
@@ -3899,14 +3922,20 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
val s = 0.9f
|
||||
moveTo(0f, -0.45f * s)
|
||||
cubicTo(
|
||||
0.62f * s, -1.02f * s,
|
||||
1.22f * s, -0.04f * s,
|
||||
0f, 0.65f * s
|
||||
0.62f * s,
|
||||
-1.02f * s,
|
||||
1.22f * s,
|
||||
-0.04f * s,
|
||||
0f,
|
||||
0.65f * s
|
||||
)
|
||||
cubicTo(
|
||||
-1.22f * s, -0.04f * s,
|
||||
-0.62f * s, -1.02f * s,
|
||||
0f, -0.45f * s
|
||||
-1.22f * s,
|
||||
-0.04f * s,
|
||||
-0.62f * s,
|
||||
-1.02f * s,
|
||||
0f,
|
||||
-0.45f * s
|
||||
)
|
||||
close()
|
||||
}
|
||||
@@ -3946,7 +3975,6 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
if (rotateEnabled) 300f * Math.random().toFloat() else 0f // deg/s
|
||||
val rotation0 = (-180f + 360f * Math.random().toFloat())
|
||||
|
||||
|
||||
val fadeStartRatio = 0.80f + 0.15f * Math.random().toFloat() // 0.80..0.95
|
||||
val fadeStartY = h * fadeStartRatio
|
||||
|
||||
@@ -3991,7 +4019,9 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
val fadeAlpha = if (y >= d.fadeStartY) {
|
||||
val denom = (h - d.fadeStartY).coerceAtLeast(1f)
|
||||
(1f - (y - d.fadeStartY) / denom).coerceIn(0f, 1f)
|
||||
} else 1f
|
||||
} else {
|
||||
1f
|
||||
}
|
||||
|
||||
val alpha = fadeAlpha.coerceIn(0f, 1f)
|
||||
paint.alpha = (alpha * 255).toInt().coerceIn(0, 255)
|
||||
@@ -4139,7 +4169,6 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
})
|
||||
.into(binding.ivSignature)
|
||||
}
|
||||
@@ -4205,7 +4234,6 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
binding.flRoulette.visibility = View.GONE
|
||||
}
|
||||
@@ -4221,7 +4249,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
type = LiveRoomChatRawMessageType.ROULETTE_DONATION,
|
||||
message = randomItem,
|
||||
can = can,
|
||||
donationMessage = "",
|
||||
donationMessage = ""
|
||||
)
|
||||
)
|
||||
|
||||
@@ -4269,7 +4297,8 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
.subscribe(
|
||||
{ response ->
|
||||
Logger.e("성공: $response")
|
||||
}, { error ->
|
||||
},
|
||||
{ error ->
|
||||
Logger.e("실패: ${error.message}")
|
||||
}
|
||||
)
|
||||
|
||||
@@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.live.room
|
||||
|
||||
import android.app.Activity
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.view.LayoutInflater
|
||||
@@ -10,12 +9,13 @@ import android.view.View
|
||||
import android.view.WindowManager
|
||||
import android.widget.LinearLayout
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.graphics.drawable.toDrawable
|
||||
import kr.co.vividnext.sodalive.databinding.DialogLiveRoomBinding
|
||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||
|
||||
class LiveRoomDialog(
|
||||
activity: Activity,
|
||||
layoutInflater: LayoutInflater,
|
||||
layoutInflater: LayoutInflater
|
||||
) {
|
||||
|
||||
private val alertDialog: AlertDialog
|
||||
@@ -27,7 +27,7 @@ class LiveRoomDialog(
|
||||
dialogBuilder.setView(dialogView.root)
|
||||
|
||||
alertDialog = dialogBuilder.create()
|
||||
alertDialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
|
||||
alertDialog.window?.setBackgroundDrawable(Color.TRANSPARENT.toDrawable())
|
||||
}
|
||||
|
||||
fun show(width: Int) {
|
||||
|
||||
@@ -2,10 +2,10 @@ package kr.co.vividnext.sodalive.live.room
|
||||
|
||||
import android.app.Activity
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.view.LayoutInflater
|
||||
import android.view.WindowManager
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.graphics.drawable.toDrawable
|
||||
import coil.load
|
||||
import coil.transform.CircleCropTransformation
|
||||
import kr.co.vividnext.sodalive.R
|
||||
@@ -17,7 +17,7 @@ class LiveRoomNoChattingDialog(
|
||||
layoutInflater: LayoutInflater,
|
||||
nickname: String,
|
||||
profileUrl: String,
|
||||
confirmButtonClick: () -> Unit,
|
||||
confirmButtonClick: () -> Unit
|
||||
) {
|
||||
|
||||
private val alertDialog: AlertDialog
|
||||
@@ -30,7 +30,7 @@ class LiveRoomNoChattingDialog(
|
||||
|
||||
alertDialog = dialogBuilder.create()
|
||||
alertDialog.setCancelable(false)
|
||||
alertDialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
|
||||
alertDialog.window?.setBackgroundDrawable(Color.TRANSPARENT.toDrawable())
|
||||
|
||||
dialogView.tvCancel.setOnClickListener {
|
||||
alertDialog.dismiss()
|
||||
|
||||
@@ -3,10 +3,21 @@ package kr.co.vividnext.sodalive.live.room
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
enum class LiveRoomRequestType {
|
||||
@SerializedName("INVITE_SPEAKER") INVITE_SPEAKER,
|
||||
@SerializedName("CHANGE_LISTENER") CHANGE_LISTENER,
|
||||
@SerializedName("KICK_OUT") KICK_OUT,
|
||||
@SerializedName("SET_MANAGER") SET_MANAGER,
|
||||
@SerializedName("RELEASE_MANAGER") RELEASE_MANAGER,
|
||||
@SerializedName("NO_CHATTING") NO_CHATTING,
|
||||
@SerializedName("INVITE_SPEAKER")
|
||||
INVITE_SPEAKER,
|
||||
|
||||
@SerializedName("CHANGE_LISTENER")
|
||||
CHANGE_LISTENER,
|
||||
|
||||
@SerializedName("KICK_OUT")
|
||||
KICK_OUT,
|
||||
|
||||
@SerializedName("SET_MANAGER")
|
||||
SET_MANAGER,
|
||||
|
||||
@SerializedName("RELEASE_MANAGER")
|
||||
RELEASE_MANAGER,
|
||||
|
||||
@SerializedName("NO_CHATTING")
|
||||
NO_CHATTING
|
||||
}
|
||||
|
||||
@@ -3,6 +3,9 @@ package kr.co.vividnext.sodalive.live.room
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
enum class LiveRoomStatus {
|
||||
@SerializedName("NOW") NOW,
|
||||
@SerializedName("RESERVATION") RESERVATION
|
||||
@SerializedName("NOW")
|
||||
NOW,
|
||||
|
||||
@SerializedName("RESERVATION")
|
||||
RESERVATION
|
||||
}
|
||||
|
||||
@@ -3,6 +3,9 @@ package kr.co.vividnext.sodalive.live.room
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
enum class LiveRoomType {
|
||||
@SerializedName("OPEN") OPEN,
|
||||
@SerializedName("PRIVATE") PRIVATE,
|
||||
@SerializedName("OPEN")
|
||||
OPEN,
|
||||
|
||||
@SerializedName("PRIVATE")
|
||||
PRIVATE
|
||||
}
|
||||
|
||||
@@ -7,5 +7,5 @@ import java.util.TimeZone
|
||||
@Keep
|
||||
data class StartLiveRequest(
|
||||
@SerializedName("roomId") val roomId: Long,
|
||||
@SerializedName("timezone") val timezone: String = TimeZone.getDefault().id,
|
||||
@SerializedName("timezone") val timezone: String = TimeZone.getDefault().id
|
||||
)
|
||||
|
||||
@@ -61,7 +61,7 @@ class LiveRoomCreateActivity : BaseActivity<ActivityLiveRoomCreateBinding>(
|
||||
"%d-%02d-%02d",
|
||||
year,
|
||||
monthOfYear + 1,
|
||||
dayOfMonth,
|
||||
dayOfMonth
|
||||
)
|
||||
viewModel.setReservationDate(
|
||||
String.format(
|
||||
@@ -136,8 +136,10 @@ class LiveRoomCreateActivity : BaseActivity<ActivityLiveRoomCreateBinding>(
|
||||
context = this,
|
||||
excludeGif = true,
|
||||
config = ImagePickerCropper.Config(
|
||||
aspectX = 2f, aspectY = 3.8f,
|
||||
maxWidth = 1080, maxHeight = 2052,
|
||||
aspectX = 2f,
|
||||
aspectY = 3.8f,
|
||||
maxWidth = 1080,
|
||||
maxHeight = 2052,
|
||||
compressFormat = Bitmap.CompressFormat.JPEG,
|
||||
compressQuality = 90
|
||||
),
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package kr.co.vividnext.sodalive.live.room.create
|
||||
|
||||
import android.net.Uri
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import com.google.gson.Gson
|
||||
import com.orhanobut.logger.Logger
|
||||
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.BaseViewModel
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.common.UiText
|
||||
@@ -16,7 +16,6 @@ import kr.co.vividnext.sodalive.live.LiveRepository
|
||||
import kr.co.vividnext.sodalive.live.room.GenderRestriction
|
||||
import kr.co.vividnext.sodalive.live.room.LiveRoomType
|
||||
import kr.co.vividnext.sodalive.live.room.menu.GetMenuPresetResponse
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import okhttp3.MediaType.Companion.toMediaType
|
||||
import okhttp3.MultipartBody
|
||||
import okhttp3.RequestBody.Companion.asRequestBody
|
||||
|
||||
@@ -20,7 +20,7 @@ class LiveCancelDialog(
|
||||
confirmButtonTitle: String,
|
||||
confirmButtonClick: (String) -> Unit,
|
||||
cancelButtonTitle: String = "",
|
||||
cancelButtonClick: (() -> Unit)? = null,
|
||||
cancelButtonClick: (() -> Unit)? = null
|
||||
) {
|
||||
private val alertDialog: AlertDialog
|
||||
private val dialogView = DialogLiveInputBinding.inflate(layoutInflater)
|
||||
|
||||
@@ -21,7 +21,7 @@ class LivePaymentDialog(
|
||||
confirmButtonTitle: String,
|
||||
confirmButtonClick: () -> Unit,
|
||||
cancelButtonTitle: String = "",
|
||||
cancelButtonClick: (() -> Unit)? = null,
|
||||
cancelButtonClick: (() -> Unit)? = null
|
||||
) {
|
||||
private val alertDialog: AlertDialog
|
||||
private val dialogView = DialogLivePaymentBinding.inflate(layoutInflater)
|
||||
|
||||
@@ -20,7 +20,7 @@ class LiveRoomPasswordDialog(
|
||||
activity: Activity,
|
||||
layoutInflater: LayoutInflater,
|
||||
can: Int,
|
||||
confirmButtonClick: (String) -> Unit,
|
||||
confirmButtonClick: (String) -> Unit
|
||||
) {
|
||||
|
||||
private val alertDialog: AlertDialog
|
||||
|
||||
@@ -7,5 +7,5 @@ import com.google.gson.annotations.SerializedName
|
||||
data class LiveRoomLikeHeartRequest(
|
||||
@SerializedName("roomId") val roomId: Long,
|
||||
@SerializedName("container") val container: String,
|
||||
@SerializedName("heartCount") val heartCount: Int = 1,
|
||||
@SerializedName("heartCount") val heartCount: Int = 1
|
||||
)
|
||||
|
||||
@@ -15,7 +15,6 @@ 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.base.SodaDialog
|
||||
import kr.co.vividnext.sodalive.common.LoadingDialog
|
||||
import kr.co.vividnext.sodalive.databinding.ActivityMenuConfigBinding
|
||||
import kr.co.vividnext.sodalive.live.room.create.LiveRoomCreateViewModel
|
||||
|
||||
@@ -195,19 +195,19 @@ abstract class LiveRoomProfileViewHolder(binding: ViewBinding) :
|
||||
}
|
||||
|
||||
class LiveRoomProfileSpeakerTitleViewHolder(
|
||||
private val binding: ItemLiveRoomProfileHeaderBinding,
|
||||
private val binding: ItemLiveRoomProfileHeaderBinding
|
||||
) : LiveRoomProfileViewHolder(binding) {
|
||||
override fun bind(item: LiveRoomProfileItem) = item.bind(binding)
|
||||
}
|
||||
|
||||
class LiveRoomProfileListenerTitleViewHolder(
|
||||
private val binding: ItemLiveRoomProfileHeaderBinding,
|
||||
private val binding: ItemLiveRoomProfileHeaderBinding
|
||||
) : LiveRoomProfileViewHolder(binding) {
|
||||
override fun bind(item: LiveRoomProfileItem) = item.bind(binding)
|
||||
}
|
||||
|
||||
class LiveRoomProfileManagerTitleViewHolder(
|
||||
private val binding: ItemLiveRoomProfileHeaderBinding,
|
||||
private val binding: ItemLiveRoomProfileHeaderBinding
|
||||
) : LiveRoomProfileViewHolder(binding) {
|
||||
override fun bind(item: LiveRoomProfileItem) = item.bind(binding)
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ class LiveRoomUserProfileDialog(
|
||||
private val onClickChangeListener: (Long) -> Unit,
|
||||
private val onClickKickOut: (Long) -> Unit,
|
||||
private val onClickNoChatting: (Long, String, String) -> Unit,
|
||||
private val onClickPopupMenu: (Long, String, Boolean, View) -> Unit,
|
||||
private val onClickPopupMenu: (Long, String, Boolean, View) -> Unit
|
||||
) {
|
||||
private val alertDialog: AlertDialog
|
||||
private val dialogView = DialogLiveRoomUserProfileBinding.inflate(layoutInflater)
|
||||
|
||||
@@ -24,8 +24,6 @@ class LiveTagFragment(
|
||||
private val selectedTags: Set<String>,
|
||||
private val onItemClick: (String, Boolean) -> Boolean
|
||||
) : BottomSheetDialogFragment() {
|
||||
|
||||
|
||||
private val viewModel: LiveTagViewModel by inject()
|
||||
|
||||
private lateinit var adapter: LiveTagAdapter
|
||||
|
||||
@@ -190,12 +190,12 @@ class LiveRoomEditViewModel(
|
||||
|
||||
beginDate = date.convertDateFormat(
|
||||
from = "yyyy.MM.dd",
|
||||
to = "yyyy-MM-dd",
|
||||
to = "yyyy-MM-dd"
|
||||
)
|
||||
|
||||
beginTime = time.convertDateFormat(
|
||||
from = "a hh:mm",
|
||||
to = "HH:mm",
|
||||
to = "HH:mm"
|
||||
)
|
||||
|
||||
beginDateTimeStr = "$beginDate $beginTime"
|
||||
|
||||
@@ -132,9 +132,12 @@ class RouletteView @JvmOverloads constructor(
|
||||
val targetAngle = 0 - (getAngleForOption(option) + 360 * 10)
|
||||
|
||||
val rotateAnimation = RotateAnimation(
|
||||
0f, targetAngle,
|
||||
RotateAnimation.RELATIVE_TO_SELF, 0.5f,
|
||||
RotateAnimation.RELATIVE_TO_SELF, 0.5f
|
||||
0f,
|
||||
targetAngle,
|
||||
RotateAnimation.RELATIVE_TO_SELF,
|
||||
0.5f,
|
||||
RotateAnimation.RELATIVE_TO_SELF,
|
||||
0.5f
|
||||
)
|
||||
rotateAnimation.duration = 2000
|
||||
rotateAnimation.fillAfter = true
|
||||
|
||||
@@ -67,15 +67,17 @@ class RouletteConfigActivity : BaseActivity<ActivityRouletteConfigBinding>(
|
||||
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 ""
|
||||
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
|
||||
}
|
||||
null
|
||||
})
|
||||
)
|
||||
|
||||
binding.ivRouletteIsActive.setOnClickListener { viewModel.toggleIsActive() }
|
||||
binding.ivAddOption.setOnClickListener { addOption() }
|
||||
|
||||
@@ -5,8 +5,8 @@ import androidx.lifecycle.MutableLiveData
|
||||
import com.orhanobut.logger.Logger
|
||||
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.BaseViewModel
|
||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.common.ToastMessage
|
||||
import kr.co.vividnext.sodalive.mypage.auth.AuthRepository
|
||||
@@ -15,7 +15,6 @@ import kr.co.vividnext.sodalive.settings.ContentType
|
||||
import kr.co.vividnext.sodalive.settings.notice.NoticeItem
|
||||
import kr.co.vividnext.sodalive.settings.notice.NoticeRepository
|
||||
import kr.co.vividnext.sodalive.user.UserRepository
|
||||
import kr.co.vividnext.sodalive.R
|
||||
|
||||
class MyPageViewModel(
|
||||
private val userRepository: UserRepository,
|
||||
|
||||
@@ -11,7 +11,6 @@ import android.widget.Toast
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.viewModels
|
||||
import com.orhanobut.logger.Logger
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.base.BaseActivity
|
||||
import kr.co.vividnext.sodalive.common.Constants
|
||||
@@ -211,7 +210,7 @@ class AddAlarmActivity : BaseActivity<ActivityAddAlarmBinding>(
|
||||
contentTitle = selectedContentTitle,
|
||||
contentCreatorNickname = selectedContentCreatorNickname,
|
||||
volume = binding.sbVolume.progress,
|
||||
days = selectedDays.toList(),
|
||||
days = selectedDays.toList()
|
||||
)
|
||||
|
||||
if (alarmId > 0) {
|
||||
|
||||
@@ -95,7 +95,7 @@ class AlarmActivity : BaseActivity<ActivityAlarmBinding>(
|
||||
}
|
||||
|
||||
private fun getContent(contentId: Long) {
|
||||
contentViewModel.getAudioContentDetail(contentId, {},)
|
||||
contentViewModel.getAudioContentDetail(contentId) {}
|
||||
}
|
||||
|
||||
private fun bindData() {
|
||||
|
||||
@@ -5,7 +5,6 @@ import android.annotation.SuppressLint
|
||||
import android.app.AlarmManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
@@ -15,7 +14,7 @@ import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.viewModels
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.core.app.NotificationManagerCompat
|
||||
import androidx.core.net.toUri
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.gun0912.tedpermission.PermissionListener
|
||||
import com.gun0912.tedpermission.normal.TedPermission
|
||||
@@ -28,7 +27,6 @@ import kr.co.vividnext.sodalive.databinding.ActivityAlarmListBinding
|
||||
import kr.co.vividnext.sodalive.extensions.moneyFormat
|
||||
import kr.co.vividnext.sodalive.mypage.alarm.db.Alarm
|
||||
import org.koin.android.ext.android.inject
|
||||
import androidx.core.net.toUri
|
||||
|
||||
class AlarmListActivity : BaseActivity<ActivityAlarmListBinding>(
|
||||
ActivityAlarmListBinding::inflate
|
||||
@@ -156,7 +154,6 @@ class AlarmListActivity : BaseActivity<ActivityAlarmListBinding>(
|
||||
binding.tvEmptyAlarms.visibility =
|
||||
if (it.isEmpty()) View.VISIBLE else View.GONE
|
||||
|
||||
|
||||
viewModel.getSlotQuantityAndPrice()
|
||||
}
|
||||
}
|
||||
@@ -236,7 +233,7 @@ class AlarmListActivity : BaseActivity<ActivityAlarmListBinding>(
|
||||
).show()
|
||||
adapterRefresh()
|
||||
},
|
||||
cancelButtonTitle = getString(R.string.cancel),
|
||||
cancelButtonTitle = getString(R.string.cancel)
|
||||
).show(screenWidth)
|
||||
}
|
||||
|
||||
@@ -248,7 +245,7 @@ class AlarmListActivity : BaseActivity<ActivityAlarmListBinding>(
|
||||
desc = getString(R.string.alarm_list_buy_desc),
|
||||
confirmButtonTitle = getString(R.string.alarm_list_buy_confirm),
|
||||
confirmButtonClick = { viewModel.buyExtraSlot() },
|
||||
cancelButtonTitle = getString(R.string.cancel),
|
||||
cancelButtonTitle = getString(R.string.cancel)
|
||||
).show(screenWidth)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
package kr.co.vividnext.sodalive.mypage.alarm.select_audio_content
|
||||
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import coil.load
|
||||
import coil.transform.RoundedCornersTransformation
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.audio_content.order.GetAudioContentOrderListItem
|
||||
import kr.co.vividnext.sodalive.audio_content.order.OrderType
|
||||
import kr.co.vividnext.sodalive.databinding.ItemAudioContentOrderListBinding
|
||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
||||
import kr.co.vividnext.sodalive.extensions.moneyFormat
|
||||
|
||||
@@ -15,6 +15,6 @@ data class BootpayResponse(
|
||||
@SerializedName("receipt_id")
|
||||
val receiptId: String,
|
||||
@SerializedName("order_id")
|
||||
val orderId: String,
|
||||
val orderId: String
|
||||
)
|
||||
}
|
||||
|
||||
@@ -98,12 +98,10 @@ class BlockMemberActivity : BaseActivity<ActivityBlockMemberBinding>(
|
||||
}
|
||||
|
||||
viewModel.blockedMemberTotalCountLiveData.observe(this) {
|
||||
binding.tvTotalCount.text = " ${
|
||||
getString(
|
||||
R.string.screen_block_member_total_count,
|
||||
it
|
||||
)
|
||||
} "
|
||||
binding.tvTotalCount.text = getString(
|
||||
R.string.screen_block_member_total_count,
|
||||
it
|
||||
)
|
||||
|
||||
if (it > 0) {
|
||||
binding.tvNone.visibility = View.GONE
|
||||
|
||||
@@ -7,10 +7,10 @@ import com.android.billingclient.api.Purchase
|
||||
import com.orhanobut.logger.Logger
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import kr.co.vividnext.sodalive.base.BaseViewModel
|
||||
import kr.co.vividnext.sodalive.common.ToastMessage
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.base.BaseViewModel
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.common.ToastMessage
|
||||
import kr.co.vividnext.sodalive.mypage.can.CanRepository
|
||||
|
||||
class CanChargeIapViewModel(private val repository: CanRepository) : BaseViewModel() {
|
||||
@@ -38,8 +38,8 @@ class CanChargeIapViewModel(private val repository: CanRepository) : BaseViewMod
|
||||
title = title,
|
||||
chargeCan = selectedProductDetails.description.toInt(),
|
||||
price = (
|
||||
selectedProductDetails.oneTimePurchaseOfferDetails?.priceAmountMicros
|
||||
?: 0L).toDouble() / 1000000,
|
||||
selectedProductDetails.oneTimePurchaseOfferDetails?.priceAmountMicros ?: 0L
|
||||
).toDouble() / 1000000,
|
||||
currencyCode = selectedProductDetails.oneTimePurchaseOfferDetails?.priceCurrencyCode
|
||||
?: "KRW",
|
||||
productId = purchase.products[0],
|
||||
|
||||
@@ -3,13 +3,12 @@ package kr.co.vividnext.sodalive.mypage.can.coupon
|
||||
import android.os.Bundle
|
||||
import android.text.InputFilter
|
||||
import android.widget.Toast
|
||||
import kr.co.vividnext.sodalive.base.BaseActivity
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.base.BaseActivity
|
||||
import kr.co.vividnext.sodalive.common.LoadingDialog
|
||||
import kr.co.vividnext.sodalive.databinding.ActivityCanCouponBinding
|
||||
import org.koin.android.ext.android.inject
|
||||
|
||||
|
||||
class CanCouponActivity : BaseActivity<ActivityCanCouponBinding>(
|
||||
ActivityCanCouponBinding::inflate
|
||||
) {
|
||||
|
||||
@@ -5,10 +5,10 @@ import androidx.lifecycle.MutableLiveData
|
||||
import com.orhanobut.logger.Logger
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import kr.co.vividnext.sodalive.base.BaseViewModel
|
||||
import kr.co.vividnext.sodalive.common.ToastMessage
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.base.BaseViewModel
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.common.ToastMessage
|
||||
import kr.co.vividnext.sodalive.mypage.can.CanRepository
|
||||
|
||||
class CanCouponViewModel(private val repository: CanRepository) : BaseViewModel() {
|
||||
@@ -49,7 +49,6 @@ class CanCouponViewModel(private val repository: CanRepository) : BaseViewModel(
|
||||
_toastLiveData.value = it.message?.let { message ->
|
||||
ToastMessage(message = message)
|
||||
} ?: ToastMessage(resId = R.string.msg_can_coupon_unknown_error)
|
||||
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
@@ -3,6 +3,9 @@ package kr.co.vividnext.sodalive.mypage.can.payment
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
enum class PaymentGateway {
|
||||
@SerializedName("PG") PG,
|
||||
@SerializedName("GOOGLE_IAP") GOOGLE_IAP
|
||||
@SerializedName("PG")
|
||||
PG,
|
||||
|
||||
@SerializedName("GOOGLE_IAP")
|
||||
GOOGLE_IAP
|
||||
}
|
||||
|
||||
@@ -220,7 +220,8 @@ class ProfileUpdateActivity : BaseActivity<ActivityProfileUpdateBinding>(
|
||||
excludeGif = true,
|
||||
isEnabledFreeStyleCrop = false,
|
||||
config = ImagePickerCropper.Config(
|
||||
aspectX = 1f, aspectY = 1f,
|
||||
aspectX = 1f,
|
||||
aspectY = 1f,
|
||||
compressFormat = Bitmap.CompressFormat.JPEG,
|
||||
compressQuality = 90
|
||||
),
|
||||
|
||||
@@ -212,8 +212,10 @@ class ProfileUpdateViewModel(private val repository: UserRepository) : BaseViewM
|
||||
}
|
||||
)
|
||||
)
|
||||
} else run {
|
||||
onSuccess()
|
||||
} else {
|
||||
run {
|
||||
onSuccess()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -68,28 +68,28 @@ class NicknameUpdateViewModel(private val repository: UserRepository) : BaseView
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
{
|
||||
_isLoading.value = false
|
||||
if (it.success) {
|
||||
isCheckedNickname = true
|
||||
_toastLiveData.postValue(
|
||||
ToastMessage(resId = R.string.msg_nickname_update_available)
|
||||
)
|
||||
} else {
|
||||
_toastLiveData.postValue(
|
||||
it.message?.let { message ->
|
||||
ToastMessage(message = message)
|
||||
} ?: ToastMessage(resId = R.string.common_error_unknown)
|
||||
)
|
||||
_isLoading.value = false
|
||||
if (it.success) {
|
||||
isCheckedNickname = true
|
||||
_toastLiveData.postValue(
|
||||
ToastMessage(resId = R.string.msg_nickname_update_available)
|
||||
)
|
||||
} else {
|
||||
_toastLiveData.postValue(
|
||||
it.message?.let { message ->
|
||||
ToastMessage(message = message)
|
||||
} ?: ToastMessage(resId = R.string.common_error_unknown)
|
||||
)
|
||||
}
|
||||
},
|
||||
{
|
||||
_isLoading.value = false
|
||||
it.message?.let { message -> Logger.e(message) }
|
||||
_toastLiveData.postValue(ToastMessage(resId = R.string.common_error_unknown))
|
||||
}
|
||||
},
|
||||
{
|
||||
_isLoading.value = false
|
||||
it.message?.let { message -> Logger.e(message) }
|
||||
_toastLiveData.postValue(ToastMessage(resId = R.string.common_error_unknown))
|
||||
}
|
||||
)
|
||||
)
|
||||
} else {
|
||||
)
|
||||
)
|
||||
} else {
|
||||
_toastLiveData.postValue(
|
||||
ToastMessage(resId = R.string.msg_nickname_update_input_required)
|
||||
)
|
||||
@@ -111,29 +111,29 @@ class NicknameUpdateViewModel(private val repository: UserRepository) : BaseView
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
{
|
||||
_isLoading.value = false
|
||||
if (it.success) {
|
||||
_toastLiveData.postValue(
|
||||
ToastMessage(resId = R.string.msg_nickname_update_success)
|
||||
)
|
||||
SharedPreferenceManager.nickname = nickname
|
||||
onSuccess()
|
||||
} else {
|
||||
_toastLiveData.postValue(
|
||||
it.message?.let { message ->
|
||||
ToastMessage(message = message)
|
||||
} ?: ToastMessage(resId = R.string.common_error_unknown)
|
||||
)
|
||||
_isLoading.value = false
|
||||
if (it.success) {
|
||||
_toastLiveData.postValue(
|
||||
ToastMessage(resId = R.string.msg_nickname_update_success)
|
||||
)
|
||||
SharedPreferenceManager.nickname = nickname
|
||||
onSuccess()
|
||||
} else {
|
||||
_toastLiveData.postValue(
|
||||
it.message?.let { message ->
|
||||
ToastMessage(message = message)
|
||||
} ?: ToastMessage(resId = R.string.common_error_unknown)
|
||||
)
|
||||
}
|
||||
},
|
||||
{
|
||||
_isLoading.value = false
|
||||
it.message?.let { message -> Logger.e(message) }
|
||||
_toastLiveData.postValue(ToastMessage(resId = R.string.common_error_unknown))
|
||||
}
|
||||
},
|
||||
{
|
||||
_isLoading.value = false
|
||||
it.message?.let { message -> Logger.e(message) }
|
||||
_toastLiveData.postValue(ToastMessage(resId = R.string.common_error_unknown))
|
||||
}
|
||||
)
|
||||
)
|
||||
} else {
|
||||
)
|
||||
)
|
||||
} else {
|
||||
_toastLiveData.postValue(
|
||||
ToastMessage(resId = R.string.msg_nickname_update_check_required)
|
||||
)
|
||||
|
||||
@@ -20,7 +20,9 @@ interface RecentContentDao {
|
||||
@Query("SELECT COUNT(*) FROM recent_contents")
|
||||
fun getCount(): Flow<Int>
|
||||
|
||||
@Query("DELETE FROM recent_contents WHERE contentId NOT IN (SELECT contentId FROM recent_contents ORDER BY listenedAt DESC LIMIT :limit)")
|
||||
@Query(
|
||||
"DELETE FROM recent_contents WHERE contentId NOT IN (SELECT contentId FROM recent_contents ORDER BY listenedAt DESC LIMIT :limit)"
|
||||
)
|
||||
suspend fun keepMostRecent(limit: Int)
|
||||
|
||||
@Query("DELETE FROM recent_contents")
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
package kr.co.vividnext.sodalive.report
|
||||
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
import androidx.annotation.Keep
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
@Keep
|
||||
data class ReportRequest(
|
||||
@@ -11,18 +10,22 @@ data class ReportRequest(
|
||||
@SerializedName("reportedMemberId") val reportedMemberId: Long? = null,
|
||||
@SerializedName("cheersId") val cheersId: Long? = null,
|
||||
@SerializedName("audioContentId") val contentId: Long? = null,
|
||||
@SerializedName("communityPostId") val communityPostId: Long? = null,
|
||||
@SerializedName("communityPostId") val communityPostId: Long? = null
|
||||
)
|
||||
|
||||
enum class ReportType {
|
||||
@SerializedName("PROFILE")
|
||||
PROFILE,
|
||||
|
||||
@SerializedName("USER")
|
||||
USER,
|
||||
|
||||
@SerializedName("CHEERS")
|
||||
CHEERS,
|
||||
|
||||
@SerializedName("AUDIO_CONTENT")
|
||||
AUDIO_CONTENT,
|
||||
|
||||
@SerializedName("COMMUNITY_POST")
|
||||
COMMUNITY_POST
|
||||
}
|
||||
|
||||
@@ -27,7 +27,12 @@ data class SearchResponseItem(
|
||||
|
||||
@Keep
|
||||
enum class SearchResponseType {
|
||||
@SerializedName("CREATOR") CREATOR,
|
||||
@SerializedName("CONTENT") CONTENT,
|
||||
@SerializedName("SERIES") SERIES
|
||||
@SerializedName("CREATOR")
|
||||
CREATOR,
|
||||
|
||||
@SerializedName("CONTENT")
|
||||
CONTENT,
|
||||
|
||||
@SerializedName("SERIES")
|
||||
SERIES
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@ 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.BaseViewModel
|
||||
import kr.co.vividnext.sodalive.common.ToastMessage
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.common.ToastMessage
|
||||
import kr.co.vividnext.sodalive.user.UserRepository
|
||||
|
||||
class SignOutViewModel(private val repository: UserRepository) : BaseViewModel() {
|
||||
@@ -42,29 +42,29 @@ class SignOutViewModel(private val repository: UserRepository) : BaseViewModel()
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
{
|
||||
_isLoading.value = false
|
||||
_isLoading.value = false
|
||||
|
||||
if (it.message != null) {
|
||||
_toastLiveData.postValue(ToastMessage(message = it.message))
|
||||
} else {
|
||||
_toastLiveData.postValue(
|
||||
ToastMessage(resId = R.string.common_error_unknown)
|
||||
)
|
||||
}
|
||||
if (it.message != null) {
|
||||
_toastLiveData.postValue(ToastMessage(message = it.message))
|
||||
} else {
|
||||
_toastLiveData.postValue(
|
||||
ToastMessage(resId = R.string.common_error_unknown)
|
||||
)
|
||||
}
|
||||
|
||||
if (it.success) {
|
||||
SharedPreferenceManager.clear()
|
||||
onSuccess()
|
||||
}
|
||||
},
|
||||
{
|
||||
_isLoading.value = false
|
||||
it.message?.let { message -> Logger.e(message) }
|
||||
_toastLiveData.postValue(
|
||||
ToastMessage(resId = R.string.common_error_unknown)
|
||||
)
|
||||
}
|
||||
)
|
||||
},
|
||||
{
|
||||
_isLoading.value = false
|
||||
it.message?.let { message -> Logger.e(message) }
|
||||
_toastLiveData.postValue(
|
||||
ToastMessage(resId = R.string.common_error_unknown)
|
||||
)
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user