From 857b4de792bf1909d56648f36d7fc204385ede31 Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 25 Dec 2023 09:27:32 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BB=A4=EB=AE=A4=EB=8B=88=ED=8B=B0=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 1 + .../java/kr/co/vividnext/sodalive/di/AppDI.kt | 2 + .../creator_community/CreatorCommunityApi.kt | 7 + .../CreatorCommunityRepository.kt | 6 + .../all/CreatorCommunityAllActivity.kt | 24 +- .../all/CreatorCommunityAllViewModel.kt | 1 + .../modify/CreatorCommunityModifyActivity.kt | 282 ++++++++++++++ .../modify/CreatorCommunityModifyViewModel.kt | 209 +++++++++++ .../ModifyCommunityPostRequest.kt | 2 +- .../activity_creator_community_modify.xml | 346 ++++++++++++++++++ 10 files changed, 878 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/modify/CreatorCommunityModifyActivity.kt create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/modify/CreatorCommunityModifyViewModel.kt rename app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/{all => modify}/ModifyCommunityPostRequest.kt (97%) create mode 100644 app/src/main/res/layout/activity_creator_community_modify.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2942fa8..20d2ae0 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -98,6 +98,7 @@ + diff --git a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt index a6218bb..5585e5a 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/di/AppDI.kt @@ -34,6 +34,7 @@ import kr.co.vividnext.sodalive.explorer.profile.creator_community.CreatorCommun import kr.co.vividnext.sodalive.explorer.profile.creator_community.CreatorCommunityRepository import kr.co.vividnext.sodalive.explorer.profile.creator_community.all.CreatorCommunityAllViewModel import kr.co.vividnext.sodalive.explorer.profile.creator_community.all.comment.CreatorCommunityCommentListViewModel +import kr.co.vividnext.sodalive.explorer.profile.creator_community.modify.CreatorCommunityModifyViewModel import kr.co.vividnext.sodalive.explorer.profile.creator_community.write.CreatorCommunityWriteViewModel import kr.co.vividnext.sodalive.explorer.profile.donation.UserProfileDonationAllViewModel import kr.co.vividnext.sodalive.explorer.profile.fantalk.UserProfileFantalkAllViewModel @@ -221,6 +222,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) { viewModel { CreatorCommunityAllViewModel(get(), get()) } viewModel { CreatorCommunityCommentListViewModel(get()) } viewModel { CreatorCommunityWriteViewModel(get()) } + viewModel { CreatorCommunityModifyViewModel(get()) } } private val repositoryModule = module { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/CreatorCommunityApi.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/CreatorCommunityApi.kt index 43ca47a..cda00c9 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/CreatorCommunityApi.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/CreatorCommunityApi.kt @@ -84,4 +84,11 @@ interface CreatorCommunityApi { @Query("timezone") timezone: String, @Header("Authorization") authHeader: String ): Single> + + @GET("/creator-community/{id}") + fun getCommunityPostDetail( + @Path("id") postId: Long, + @Query("timezone") timezone: String, + @Header("Authorization") authHeader: String + ): Single> } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/CreatorCommunityRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/CreatorCommunityRepository.kt index 50f30c8..209d1f5 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/CreatorCommunityRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/CreatorCommunityRepository.kt @@ -92,4 +92,10 @@ class CreatorCommunityRepository(private val api: CreatorCommunityApi) { request = request, authHeader = token ) + + fun getCommunityPostDetail(postId: Long, token: String) = api.getCommunityPostDetail( + postId = postId, + timezone = TimeZone.getDefault().id, + authHeader = token + ) } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllActivity.kt index 96c8aef..297df55 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllActivity.kt @@ -1,10 +1,12 @@ package kr.co.vividnext.sodalive.explorer.profile.creator_community.all 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.activity.result.contract.ActivityResultContracts import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import kr.co.vividnext.sodalive.base.BaseActivity @@ -13,6 +15,7 @@ import kr.co.vividnext.sodalive.common.Constants import kr.co.vividnext.sodalive.common.LoadingDialog import kr.co.vividnext.sodalive.databinding.ActivityCreatorCommunityAllBinding import kr.co.vividnext.sodalive.explorer.profile.creator_community.all.comment.CreatorCommunityCommentFragment +import kr.co.vividnext.sodalive.explorer.profile.creator_community.modify.CreatorCommunityModifyActivity import kr.co.vividnext.sodalive.extensions.dpToPx import org.koin.android.ext.android.inject @@ -27,6 +30,18 @@ class CreatorCommunityAllActivity : BaseActivity + val resultCode = result.resultCode + + if (resultCode == RESULT_OK) { + viewModel.page = 1 + viewModel.isLast = false + viewModel.getCommunityPostList() + } + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -66,7 +81,14 @@ class CreatorCommunityAllActivity : BaseActivity SodaDialog( diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllViewModel.kt index e29decd..39713a4 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/CreatorCommunityAllViewModel.kt @@ -10,6 +10,7 @@ import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.explorer.profile.creator_community.CreatorCommunityRepository import kr.co.vividnext.sodalive.explorer.profile.creator_community.GetCommunityPostListResponse +import kr.co.vividnext.sodalive.explorer.profile.creator_community.modify.ModifyCommunityPostRequest import kr.co.vividnext.sodalive.report.ReportRepository import kr.co.vividnext.sodalive.report.ReportRequest import kr.co.vividnext.sodalive.report.ReportType diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/modify/CreatorCommunityModifyActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/modify/CreatorCommunityModifyActivity.kt new file mode 100644 index 0000000..956f5c4 --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/modify/CreatorCommunityModifyActivity.kt @@ -0,0 +1,282 @@ +package kr.co.vividnext.sodalive.explorer.profile.creator_community.modify + +import android.Manifest +import android.annotation.SuppressLint +import android.os.Build +import android.os.Bundle +import android.view.View +import android.widget.Toast +import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.content.ContextCompat +import coil.load +import coil.transform.RoundedCornersTransformation +import com.github.dhaval2404.imagepicker.ImagePicker +import com.gun0912.tedpermission.PermissionListener +import com.gun0912.tedpermission.normal.TedPermission +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.common.RealPathUtil +import kr.co.vividnext.sodalive.common.SharedPreferenceManager +import kr.co.vividnext.sodalive.databinding.ActivityCreatorCommunityModifyBinding +import kr.co.vividnext.sodalive.extensions.dpToPx +import kr.co.vividnext.sodalive.extensions.loadUrl +import org.koin.android.ext.android.inject + +class CreatorCommunityModifyActivity : BaseActivity( + ActivityCreatorCommunityModifyBinding::inflate +) { + + private val viewModel: CreatorCommunityModifyViewModel by inject() + + private lateinit var loadingDialog: LoadingDialog + + private val imageResult = registerForActivityResult( + ActivityResultContracts.StartActivityForResult() + ) { result -> + val resultCode = result.resultCode + val data = result.data + + if (resultCode == RESULT_OK) { + val fileUri = data?.data + + if (fileUri != null) { + binding.ivContent.background = null + binding.ivContent.load(fileUri) { + crossfade(true) + placeholder(R.drawable.ic_place_holder) + transformations(RoundedCornersTransformation(8f.dpToPx())) + } + viewModel.imageUri = fileUri + } else { + Toast.makeText( + this, + "잘못된 파일입니다.\n다시 선택해 주세요.", + Toast.LENGTH_SHORT + ).show() + } + } else if (resultCode == ImagePicker.RESULT_ERROR) { + Toast.makeText(this, ImagePicker.getError(data), Toast.LENGTH_SHORT).show() + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + checkPermissions() + + viewModel.getRealPathFromURI = { + RealPathUtil.getRealPath(applicationContext, it) + } + + bindData() + + val postId = intent.getLongExtra(Constants.EXTRA_COMMUNITY_POST_ID, 0) + if (postId <= 0) { + Toast.makeText(applicationContext, "잘못된 요청입니다.", Toast.LENGTH_LONG).show() + finish() + } + + viewModel.postId = postId + viewModel.getCommunityPostDetail( + onFailure = { + Toast.makeText(applicationContext, "잘못된 요청입니다.", Toast.LENGTH_LONG).show() + finish() + } + ) + } + + override fun setupView() { + loadingDialog = LoadingDialog(this, layoutInflater) + + binding.toolbar.tvBack.text = "게시글 등록" + binding.toolbar.tvBack.setOnClickListener { finish() } + + binding.ivPhotoPicker.setOnClickListener { + ImagePicker.with(this) + .crop() + .galleryOnly() + .galleryMimeTypes( // Exclude gif images + mimeTypes = arrayOf( + "image/png", + "image/jpg", + "image/jpeg" + ) + ) + .createIntent { imageResult.launch(it) } + } + + if (SharedPreferenceManager.isAuth) { + binding.llSetAdult.visibility = View.VISIBLE + } else { + binding.llSetAdult.visibility = View.GONE + } + + binding.llCommentNo.setOnClickListener { viewModel.setAvailableComment(false) } + binding.llCommentYes.setOnClickListener { viewModel.setAvailableComment(true) } + binding.tvCancel.setOnClickListener { finish() } + binding.tvUpload.setOnClickListener { + viewModel.modifyCommunityPost { + setResult(RESULT_OK) + finish() + } + } + } + + private fun checkPermissions() { + val permissions = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + listOf(Manifest.permission.READ_MEDIA_AUDIO, Manifest.permission.READ_MEDIA_IMAGES) + } else { + listOf(Manifest.permission.READ_EXTERNAL_STORAGE) + } + + TedPermission.create() + .setPermissionListener(object : PermissionListener { + override fun onPermissionGranted() { + } + + override fun onPermissionDenied(deniedPermissions: MutableList?) { + finish() + } + }) + .setDeniedMessage(R.string.read_storage_permission_denied_message) + .setPermissions(*permissions.toTypedArray()) + .check() + } + + @SuppressLint("SetTextI18n") + private fun bindData() { + compositeDisposable.add( + binding.etContent.textChanges().skip(1) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe { + binding.tvNumberOfCharacters.text = "${it.length}자" + viewModel.content = it.toString() + } + ) + + viewModel.toastLiveData.observe(this) { + it?.let { Toast.makeText(applicationContext, it, Toast.LENGTH_LONG).show() } + } + + viewModel.isLoading.observe(this) { + if (it) { + loadingDialog.show(screenWidth) + } else { + loadingDialog.dismiss() + } + } + + viewModel.imageUrlLiveData.observe(this) { + if (!it.isNullOrBlank()) { + binding.ivContent.background = null + binding.ivContent.loadUrl(it) { + crossfade(true) + placeholder(R.drawable.ic_place_holder) + transformations(RoundedCornersTransformation(8f.dpToPx())) + } + } + } + + viewModel.contentLiveData.observe(this) { + binding.etContent.setText(it) + } + + viewModel.isAvailableCommentLiveData.observe(this) { + if (it) { + binding.ivCommentYes.visibility = View.VISIBLE + binding.tvCommentYes.setTextColor( + ContextCompat.getColor( + applicationContext, + R.color.white + ) + ) + binding.llCommentYes.setBackgroundResource(R.drawable.bg_round_corner_6_7_3bb9f1) + + binding.ivCommentNo.visibility = View.GONE + binding.tvCommentNo.setTextColor( + ContextCompat.getColor( + applicationContext, + R.color.color_80d8ff + ) + ) + binding.llCommentNo.setBackgroundResource( + R.drawable.bg_round_corner_6_7_13181b + ) + } else { + binding.ivCommentNo.visibility = View.VISIBLE + binding.tvCommentNo.setTextColor( + ContextCompat.getColor( + applicationContext, + R.color.white + ) + ) + binding.llCommentNo.setBackgroundResource(R.drawable.bg_round_corner_6_7_3bb9f1) + + binding.ivCommentYes.visibility = View.GONE + binding.tvCommentYes.setTextColor( + ContextCompat.getColor( + applicationContext, + R.color.color_80d8ff + ) + ) + binding.llCommentYes + .setBackgroundResource(R.drawable.bg_round_corner_6_7_13181b) + } + } + + if (SharedPreferenceManager.isAuth) { + binding.llAgeAll.setOnClickListener { + viewModel.setAdult(false) + } + + binding.llAge19.setOnClickListener { + viewModel.setAdult(true) + } + + viewModel.isAdultLiveData.observe(this) { + if (it) { + binding.ivAgeAll.visibility = View.GONE + binding.llAgeAll.setBackgroundResource(R.drawable.bg_round_corner_6_7_13181b) + binding.tvAgeAll.setTextColor( + ContextCompat.getColor( + applicationContext, + R.color.color_80d8ff + ) + ) + + binding.ivAge19.visibility = View.VISIBLE + binding.llAge19.setBackgroundResource(R.drawable.bg_round_corner_6_7_3bb9f1) + binding.tvAge19.setTextColor( + ContextCompat.getColor( + applicationContext, + R.color.white + ) + ) + } else { + binding.ivAge19.visibility = View.GONE + binding.llAge19.setBackgroundResource(R.drawable.bg_round_corner_6_7_13181b) + binding.tvAge19.setTextColor( + ContextCompat.getColor( + applicationContext, + R.color.color_80d8ff + ) + ) + + binding.ivAgeAll.visibility = View.VISIBLE + binding.llAgeAll.setBackgroundResource(R.drawable.bg_round_corner_6_7_3bb9f1) + binding.tvAgeAll.setTextColor( + ContextCompat.getColor( + applicationContext, + R.color.white + ) + ) + } + } + } + } +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/modify/CreatorCommunityModifyViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/modify/CreatorCommunityModifyViewModel.kt new file mode 100644 index 0000000..964315b --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/modify/CreatorCommunityModifyViewModel.kt @@ -0,0 +1,209 @@ +package kr.co.vividnext.sodalive.explorer.profile.creator_community.modify + +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.base.BaseViewModel +import kr.co.vividnext.sodalive.common.SharedPreferenceManager +import kr.co.vividnext.sodalive.explorer.profile.creator_community.CreatorCommunityRepository +import kr.co.vividnext.sodalive.explorer.profile.creator_community.GetCommunityPostListResponse +import okhttp3.MediaType +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.MultipartBody +import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody +import okio.BufferedSink +import java.io.File + +class CreatorCommunityModifyViewModel( + private val repository: CreatorCommunityRepository +) : BaseViewModel() { + private val _toastLiveData = MutableLiveData() + val toastLiveData: LiveData + get() = _toastLiveData + + private var _isLoading = MutableLiveData(false) + val isLoading: LiveData + get() = _isLoading + + private val _imageUrlLiveData = MutableLiveData() + val imageUrlLiveData: LiveData + get() = _imageUrlLiveData + + private val _contentLiveData = MutableLiveData("") + val contentLiveData: LiveData + get() = _contentLiveData + + private val _isAdultLiveData = MutableLiveData(false) + val isAdultLiveData: LiveData + get() = _isAdultLiveData + + private val _isAvailableCommentLiveData = MutableLiveData(true) + val isAvailableCommentLiveData: LiveData + get() = _isAvailableCommentLiveData + + lateinit var getRealPathFromURI: (Uri) -> String? + + var postId = 0L + var content = "" + var imageUri: Uri? = null + private var communityPost: GetCommunityPostListResponse? = null + + fun setAdult(isAdult: Boolean) { + _isAdultLiveData.postValue(isAdult) + } + + fun setAvailableComment(isAvailableComment: Boolean) { + _isAvailableCommentLiveData.postValue(isAvailableComment) + } + + fun getCommunityPostDetail(onFailure: (() -> Unit)? = null) { + communityPost = null + _isLoading.value = true + + compositeDisposable.add( + repository.getCommunityPostDetail( + postId = postId, + token = "Bearer ${SharedPreferenceManager.token}" + ) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + { + _isLoading.value = false + + if (it.success && it.data != null) { + communityPost = it.data + _imageUrlLiveData.value = it.data.imageUrl + _contentLiveData.value = it.data.content + _isAdultLiveData.value = it.data.isAdult + _isAvailableCommentLiveData.value = it.data.isCommentAvailable + } else { + if (it.message != null) { + _toastLiveData.postValue(it.message) + } else { + _toastLiveData.postValue( + "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ) + } + + if (onFailure != null) { + onFailure() + } + } + }, + { + _isLoading.value = false + it.message?.let { message -> Logger.e(message) } + _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + if (onFailure != null) { + onFailure() + } + } + ) + ) + } + + fun modifyCommunityPost(onSuccess: () -> Unit) { + if (!_isLoading.value!! && validateData()) { + _isLoading.value = true + val request = ModifyCommunityPostRequest( + creatorCommunityId = postId, + content = if (communityPost!!.content != content) { + content + } else { + null + }, + isCommentAvailable = if ( + communityPost!!.isCommentAvailable != _isAvailableCommentLiveData.value!! + ) { + _isAvailableCommentLiveData.value!! + } else { + null + }, + isAdult = if (communityPost!!.isAdult != _isAdultLiveData.value!!) { + _isAdultLiveData.value!! + } else { + null + } + ) + + val requestJson = Gson().toJson(request) + + val postImage = if (imageUri != null) { + val file = File(getRealPathFromURI(imageUri!!)) + MultipartBody.Part.createFormData( + "postImage", + file.name, + body = object : RequestBody() { + override fun contentType(): MediaType { + return "image/*".toMediaType() + } + + override fun writeTo(sink: BufferedSink) { + file.inputStream().use { inputStream -> + val buffer = ByteArray(1024) + var bytesRead: Int + while (inputStream.read(buffer).also { bytesRead = it } != -1) { + sink.write(buffer, 0, bytesRead) + } + } + } + + override fun contentLength(): Long { + return file.length() + } + } + ) + } else { + null + } + + compositeDisposable.add( + repository.modifyCommunityPost( + postImage, + request = requestJson.toRequestBody("text/plain".toMediaType()), + token = "Bearer ${SharedPreferenceManager.token}" + ) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe( + { + _isLoading.value = false + if (it.success) { + onSuccess() + } else { + if (it.message != null) { + _toastLiveData.postValue(it.message) + } else { + _toastLiveData.postValue( + "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ) + } + } + }, + { + _isLoading.value = false + it.message?.let { message -> Logger.e(message) } + _toastLiveData.postValue( + "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + ) + } + ) + ) + } + } + + private fun validateData(): Boolean { + if (content.isBlank() || content.length < 5) { + _toastLiveData.postValue("내용을 5자 이상 입력해 주세요.") + return false + } + + return true + } +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/ModifyCommunityPostRequest.kt b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/modify/ModifyCommunityPostRequest.kt similarity index 97% rename from app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/ModifyCommunityPostRequest.kt rename to app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/modify/ModifyCommunityPostRequest.kt index 857b31f..c10e977 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/all/ModifyCommunityPostRequest.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/explorer/profile/creator_community/modify/ModifyCommunityPostRequest.kt @@ -1,4 +1,4 @@ -package kr.co.vividnext.sodalive.explorer.profile.creator_community.all +package kr.co.vividnext.sodalive.explorer.profile.creator_community.modify import com.google.gson.annotations.SerializedName diff --git a/app/src/main/res/layout/activity_creator_community_modify.xml b/app/src/main/res/layout/activity_creator_community_modify.xml new file mode 100644 index 0000000..c04b417 --- /dev/null +++ b/app/src/main/res/layout/activity_creator_community_modify.xml @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +