diff --git a/app/src/main/java/com/project/drinkly_admin/api/request/image/StoreImageRequest.kt b/app/src/main/java/com/project/drinkly_admin/api/request/image/StoreImageRequest.kt index 7a966a7..03f4dd0 100644 --- a/app/src/main/java/com/project/drinkly_admin/api/request/image/StoreImageRequest.kt +++ b/app/src/main/java/com/project/drinkly_admin/api/request/image/StoreImageRequest.kt @@ -14,4 +14,10 @@ data class NewImageUrl( data class ImageData( val image: Any, val description: String +) + +data class CommonImageData( + val image: Any, + val type: String, + val description: String ) \ No newline at end of file diff --git a/app/src/main/java/com/project/drinkly_admin/ui/BasicToast.kt b/app/src/main/java/com/project/drinkly_admin/ui/BasicToast.kt new file mode 100644 index 0000000..192e84b --- /dev/null +++ b/app/src/main/java/com/project/drinkly_admin/ui/BasicToast.kt @@ -0,0 +1,63 @@ +package com.project.drinkly_admin.ui + +import android.content.Context +import android.content.res.Resources +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.PopupWindow +import androidx.databinding.DataBindingUtil +import com.project.drinkly_admin.R +import com.project.drinkly_admin.databinding.ToastBasicBinding +import com.project.drinkly_admin.util.MainUtil.toPx + +object BasicToast { + fun showBasicToast(context: Context, message: String, icon: Int, anchorView: View) { + val inflater = LayoutInflater.from(context) + val binding: ToastBasicBinding = + DataBindingUtil.inflate(inflater, R.layout.toast_basic, null, false) + + binding.run { + textViewTooltip.text = message + imageViewTooltip.setImageResource(icon) + } + + val screenWidth = Resources.getSystem().displayMetrics.widthPixels + val marginPx = 20.toPx() + val popupWidth = screenWidth - marginPx * 2 + + val popupWindow = PopupWindow(binding.root, + popupWidth, + ViewGroup.LayoutParams.WRAP_CONTENT, + false + ) + + anchorView.post { + binding.root.measure( + View.MeasureSpec.UNSPECIFIED, + View.MeasureSpec.UNSPECIFIED + ) + val popupHeight = binding.root.measuredHeight + + val yOffset = -(anchorView.height + popupHeight + 8.toPx()) + + popupWindow.showAsDropDown(anchorView, 0, yOffset) + + // 뷰가 detach될 때 PopupWindow 해제 + anchorView.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener { + override fun onViewAttachedToWindow(v: View) {} + override fun onViewDetachedFromWindow(v: View) { + if (popupWindow.isShowing) { + popupWindow.dismiss() + } + } + }) + + binding.root.postDelayed({ + if (popupWindow.isShowing) { + popupWindow.dismiss() + } + }, 2000) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/project/drinkly_admin/ui/home/adapter/AvailableDrinkAdapter.kt b/app/src/main/java/com/project/drinkly_admin/ui/home/adapter/AvailableDrinkAdapter.kt index 3a748e9..17d3ca3 100644 --- a/app/src/main/java/com/project/drinkly_admin/ui/home/adapter/AvailableDrinkAdapter.kt +++ b/app/src/main/java/com/project/drinkly_admin/ui/home/adapter/AvailableDrinkAdapter.kt @@ -45,7 +45,7 @@ class AvailableDrinkAdapter( override fun onBindViewHolder(holder: ViewHolder, position: Int) { with(holder.binding) { - textViewDrink.text = images?.get(position)?.description + textViewDrink.setText(images?.get(position)?.description) Glide.with(activity) .load(images?.get(position)?.image) .into(imageViewAvailableDrink) diff --git a/app/src/main/java/com/project/drinkly_admin/ui/store/StoreAvailableDrinksBottomSheetFragment.kt b/app/src/main/java/com/project/drinkly_admin/ui/store/StoreAvailableDrinksBottomSheetFragment.kt index b5710df..985afde 100644 --- a/app/src/main/java/com/project/drinkly_admin/ui/store/StoreAvailableDrinksBottomSheetFragment.kt +++ b/app/src/main/java/com/project/drinkly_admin/ui/store/StoreAvailableDrinksBottomSheetFragment.kt @@ -147,7 +147,7 @@ class StoreAvailableDrinksBottomSheetFragment() : DialogFragment() { fun checkComplete() { binding.run { - if(isImageUpload && editTextAvailableDrink.text.isNotEmpty()) { + if(editTextAvailableDrink.text.isNotEmpty()) { buttonAdd.isEnabled = true } else { buttonAdd.isEnabled = false diff --git a/app/src/main/java/com/project/drinkly_admin/ui/store/StoreDetailAvailableDrinksFragment.kt b/app/src/main/java/com/project/drinkly_admin/ui/store/StoreDetailAvailableDrinksFragment.kt index 037e12e..92ee767 100644 --- a/app/src/main/java/com/project/drinkly_admin/ui/store/StoreDetailAvailableDrinksFragment.kt +++ b/app/src/main/java/com/project/drinkly_admin/ui/store/StoreDetailAvailableDrinksFragment.kt @@ -13,6 +13,7 @@ import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.project.drinkly_admin.R +import com.project.drinkly_admin.api.request.image.CommonImageData import com.project.drinkly_admin.api.request.image.ImageData import com.project.drinkly_admin.api.request.image.NewImageUrl import com.project.drinkly_admin.api.request.image.StoreImageRequest @@ -31,6 +32,14 @@ import java.io.File class StoreDetailAvailableDrinksFragment : Fragment() { + companion object { + val SOJU_IMAGE_URL = "공통주류/20250507034147-40441a71-23e6-4166-8965-ce331aab5998-soju" + val BEER_IMAGE_URL = "공통주류/20250507034229-20802afc-98f4-44ce-aec7-12a559a96668-beer" + val DRAFT_IMAGE_URL = "공통주류/20250617200637-a0444443-5965-418e-9802-19cca40de2c8-draft" + val HIGHBALL_IMAGE_URL = "공통주류/20250617200742-72659ec0-e6ea-498e-baaf-197f4997f833-highball" + val BASIC_IMAGE_URL = "공통주류/20250618155356-8e22ebc7-72a0-4c19-b5e5-7a2c4c880c68-basic" + } + lateinit var binding: FragmentStoreDetailAvailableDrinksBinding lateinit var mainActivity: MainActivity private val viewModel: StoreViewModel by lazy { @@ -39,12 +48,14 @@ class StoreDetailAvailableDrinksFragment : Fragment() { var previousAvailableDrinkImages: List? = mutableListOf() var newAvailableDrinkImages: MutableList? = mutableListOf() - var newCommonAvailableDrinkImages: MutableList? = mutableListOf() + var newCommonAvailableDrinkImages: MutableList? = mutableListOf() var removedAvailableDrinkImages: MutableList? = mutableListOf() var images: MutableList? = mutableListOf() var newSojuIndex: Int = 0 var newBeerIndex: Int = 0 + var newDraftBeerIndex: Int = 0 + var newHighballIndex: Int = 0 lateinit var availableDrinkAdapter: AvailableDrinkAdapter @@ -71,6 +82,9 @@ class StoreDetailAvailableDrinksFragment : Fragment() { if (imageFile != null && name != null) { images?.add(ImageData(imageFile, name)) newAvailableDrinkImages?.add(ImageData(imageFile, name)) + } else if (imageFile== null) { + images?.add(ImageData(ImageUtil.copyRawToFile(mainActivity, R.drawable.img_basic, "basic.png"), name.toString())) + newCommonAvailableDrinkImages?.add(CommonImageData(ImageUtil.copyRawToFile(mainActivity, R.drawable.img_basic, "basic.png"), "basic", name.toString())) } checkComplete() @@ -87,61 +101,89 @@ class StoreDetailAvailableDrinksFragment : Fragment() { // 소주 추가 if(checkDrinks("소주")) { images?.add(ImageData(ImageUtil.copyRawToFile(mainActivity, R.drawable.img_soju, "soju.png"), "소주")) - newCommonAvailableDrinkImages?.add(ImageData(ImageUtil.copyRawToFile(mainActivity, R.drawable.img_soju, "soju.png"), "소주")) + newCommonAvailableDrinkImages?.add(CommonImageData(ImageUtil.copyRawToFile(mainActivity, R.drawable.img_soju, "soju.png"), "soju", "소주")) newSojuIndex = newAvailableDrinkImages?.size ?: 0 checkComplete() } } buttonAddBeer.setOnClickListener { - // 맥주 추가 - if(checkDrinks("맥주")) { - images?.add( - ImageData( - ImageUtil.copyRawToFile( - mainActivity, - R.drawable.img_beer, - "beer.png" - ), "맥주" - ) - ) - newCommonAvailableDrinkImages?.add( - ImageData( - ImageUtil.copyRawToFile( - mainActivity, - R.drawable.img_beer, - "beer.png" - ), "맥주" - ) - ) + // 병맥주 추가 + if(checkDrinks("병맥주")) { + images?.add(ImageData(ImageUtil.copyRawToFile(mainActivity, R.drawable.img_beer, "beer.png"), "병맥주")) + newCommonAvailableDrinkImages?.add(CommonImageData(ImageUtil.copyRawToFile(mainActivity, R.drawable.img_beer, "beer.png"), "beer", "병맥주")) newBeerIndex = newAvailableDrinkImages?.size ?: 0 checkComplete() } } + buttonAddDraftbeer.setOnClickListener { + // 생맥주 추가 + if(checkDrinks("생맥주")) { + images?.add(ImageData(ImageUtil.copyRawToFile(mainActivity, R.drawable.img_draft_beer, "draft_beer.png"), "생맥주")) + newCommonAvailableDrinkImages?.add(CommonImageData(ImageUtil.copyRawToFile(mainActivity, R.drawable.img_draft_beer, "draft_beer.png"), "draft-beer", "생맥주")) + newDraftBeerIndex = newAvailableDrinkImages?.size ?: 0 + + checkComplete() + } + } + buttonAddHighball.setOnClickListener { + // 하이볼 추가 + if(checkDrinks("하이볼")) { + images?.add(ImageData(ImageUtil.copyRawToFile(mainActivity, R.drawable.img_highball, "highball.png"), "하이볼")) + newCommonAvailableDrinkImages?.add(CommonImageData(ImageUtil.copyRawToFile(mainActivity, R.drawable.img_highball, "highball.png"), "highball", "하이볼")) + newHighballIndex = newAvailableDrinkImages?.size ?: 0 + + checkComplete() + } + } buttonSave.setOnClickListener { if(!newAvailableDrinkImages.isNullOrEmpty()) { viewModel.getPresignedUrlBatch(mainActivity, newAvailableDrinkImages?.map { it.image }, "availableDrinks") } else if(!newCommonAvailableDrinkImages.isNullOrEmpty()) { - // 소주가 추가되어 있는 경우 + // 기본 주류가 추가되어 있는 경우 val newImageUrls = mutableListOf() newCommonAvailableDrinkImages?.forEach { imageData -> - when (imageData.description) { - "소주" -> { + when (imageData.type) { + "soju" -> { newImageUrls.add( NewImageUrl( - imageUrl = "공통주류/20250507034147-40441a71-23e6-4166-8965-ce331aab5998-soju", + imageUrl = SOJU_IMAGE_URL, description = "소주" ) ) } - "맥주" -> { + "beer" -> { + newImageUrls.add( + NewImageUrl( + imageUrl = BEER_IMAGE_URL, + description = "병맥주" + ) + ) + } + "draft-beer" -> { + newImageUrls.add( + NewImageUrl( + imageUrl = DRAFT_IMAGE_URL, + description = "생맥주" + ) + ) + } + "highball" -> { + newImageUrls.add( + NewImageUrl( + imageUrl = HIGHBALL_IMAGE_URL, + description = "하이볼" + ) + ) + } + "basic" -> { newImageUrls.add( NewImageUrl( - imageUrl = "공통주류/20250507034229-20802afc-98f4-44ce-aec7-12a559a96668-beer", - description = "맥주" + imageUrl = BASIC_IMAGE_URL, + description = imageData.description ) ) } @@ -206,26 +248,48 @@ class StoreDetailAvailableDrinksFragment : Fragment() { AvailableDrinkAdapter(mainActivity, images).apply { itemClickListener = object : AvailableDrinkAdapter.OnItemClickListener { override fun onItemClick(position: Int) { + val targetImage = images?.get(position) - if(images?.get(position)?.image is String) { - var imageId = previousAvailableDrinkImages?.find { it.imageUrl == images?.get(position)?.image }?.imageId + if (targetImage?.image is String) { + val imageId = previousAvailableDrinkImages?.find { it.imageUrl == targetImage.image && it.description == targetImage.description }?.imageId if (imageId != null) { removedAvailableDrinkImages?.add(imageId) } - } else if(images?.get(position)?.image is File) { - (images?.get(position))?.let { file -> - if((newAvailableDrinkImages?.indexOf(file) ?: 0) < newSojuIndex) { - newSojuIndex -= 1 - } - if((newAvailableDrinkImages?.indexOf(file) ?: 0) < newBeerIndex) { - newBeerIndex -= 1 + + } else if (targetImage?.image is File) { + val file = targetImage.image as File + + val indexInNew = newAvailableDrinkImages?.indexOfFirst { + it.image == file && it.description == targetImage.description + } ?: -1 + + if (indexInNew >= 0) { + // 인덱스 조정 + if (indexInNew < newSojuIndex) newSojuIndex-- + if (indexInNew < newBeerIndex) newBeerIndex-- + if (indexInNew < newDraftBeerIndex) newDraftBeerIndex-- + if (indexInNew < newHighballIndex) newHighballIndex-- + + newAvailableDrinkImages?.removeAt(indexInNew) + } else { + val indexInCommon = newCommonAvailableDrinkImages?.indexOfFirst { + it.image == file && it.description == targetImage.description + } ?: -1 + + if (indexInCommon >= 0) { + newCommonAvailableDrinkImages?.removeAt(indexInCommon) + + when (targetImage.description) { + "소주" -> newSojuIndex = 0 + "병맥주" -> newBeerIndex = 0 + "생맥주" -> newDraftBeerIndex = 0 + "하이볼" -> newHighballIndex = 0 + } } - newAvailableDrinkImages?.remove(file) } } - println(removedAvailableDrinkImages) - images?.removeAt(position) + images?.removeAt(position) checkComplete() } } @@ -235,10 +299,6 @@ class StoreDetailAvailableDrinksFragment : Fragment() { recyclerViewAvailableDrink.apply { adapter = availableDrinkAdapter layoutManager = GridLayoutManager(context, 2) - - addItemDecoration( - GridSpacingItemDecoration(spanCount = 2, spacing = 10f.fromDpToPx()) - ) } } } @@ -250,35 +310,48 @@ class StoreDetailAvailableDrinksFragment : Fragment() { val mappedNewImageUrls = presignedList.mapIndexed { index, newImageUrl -> NewImageUrl( imageUrl = newImageUrl.filePath, - description = "${newAvailableDrinkImages?.get(index)?.description}" + description = newAvailableDrinkImages?.get(index)?.description ?: "" ) - }.toMutableList() // ✨ 중간 삽입 위해 mutableList로 변환 + }.toMutableList() - // 소주가 추가되어 있는 경우 - if (newCommonAvailableDrinkImages?.any { it.description == "소주" } == true) { - mappedNewImageUrls.add( - newSojuIndex, - NewImageUrl( - imageUrl = "공통주류/20250502162032-11f10447-1597-48b6-9ec8-28e0c37ab3ba-soju", - description = "소주" - ) - ) + // 기본 이미지로 추가한 주류들 삽입 + newCommonAvailableDrinkImages?.forEach { imageData -> + val insertIndex = when (imageData.description) { + "소주" -> newSojuIndex + "병맥주" -> newBeerIndex + "생맥주" -> newDraftBeerIndex + "하이볼" -> newHighballIndex + else -> { + // description에 해당하는 항목을 newAvailableDrinkImages에서 찾아 index 추정 + newAvailableDrinkImages?.indexOfFirst { it.description == imageData.description } + ?.takeIf { it >= 0 } ?: mappedNewImageUrls.size + } + } - // ⚠️ 맥주 삽입 시 소주 이후일 경우 인덱스 +1 보정 필요 - newBeerIndex = if (newSojuIndex <= newBeerIndex) newBeerIndex + 1 else newBeerIndex - } + val imageUrl = when (imageData.type) { + "soju" -> SOJU_IMAGE_URL + "beer" -> BEER_IMAGE_URL + "draft-beer" -> DRAFT_IMAGE_URL + "highball" -> HIGHBALL_IMAGE_URL + "basic" -> BASIC_IMAGE_URL + else -> BASIC_IMAGE_URL + } + + val clampedIndex = insertIndex.coerceIn(0, mappedNewImageUrls.size) - // 맥주가 추가되어 있는 경우 - if (newCommonAvailableDrinkImages?.any { it.description == "맥주" } == true) { mappedNewImageUrls.add( - newBeerIndex, + clampedIndex, NewImageUrl( - imageUrl = "공통주류/20250502162032-b7a26511-55a9-4811-92a2-1ff564a34449-beer", - description = "맥주" + imageUrl = imageUrl, + description = imageData.description ) ) - } + if (clampedIndex <= newSojuIndex) newSojuIndex++ + if (clampedIndex <= newBeerIndex) newBeerIndex++ + if (clampedIndex <= newDraftBeerIndex) newDraftBeerIndex++ + if (clampedIndex <= newHighballIndex) newHighballIndex++ + } MyApplication.storeId?.let { storeId -> val storeInfo = StoreImageRequest( @@ -292,19 +365,17 @@ class StoreDetailAvailableDrinksFragment : Fragment() { Log.e("StoreMenuFragment", "storeId is null") } - // liveData 값 초기화 viewLifecycleOwner.lifecycleScope.launch { presignedUrlBatch.postValue(null) presignedUrl.postValue(null) } } } - } } fun checkDrinks(description: String) : Boolean { - if(images?.any { it.description.contains(description) } == true) { + if(images?.any { it.description == (description) } == true) { val dialog = DialogBasic("이미 등록되어 있는 주류에요\n같은 이름으로는 추가가 불가능해요") dialog.setBasicDialogInterface(object : BasicDialogInterface { @@ -316,7 +387,7 @@ class StoreDetailAvailableDrinksFragment : Fragment() { dialog.show(mainActivity.supportFragmentManager, "DialogStoreAvailableDrink") } - return images?.any { it.description.contains(description) } == false + return images?.any { it.description == (description) } == false } fun initView() { @@ -331,39 +402,4 @@ class StoreDetailAvailableDrinksFragment : Fragment() { checkComplete() } - - internal class GridSpacingItemDecoration( - private val spanCount: Int, // Grid의 column 수 - private val spacing: Int // 간격 - ) : RecyclerView.ItemDecoration() { - - override fun getItemOffsets( - outRect: Rect, - view: View, - parent: RecyclerView, - state: RecyclerView.State - ) { - val position: Int = parent.getChildAdapterPosition(view) - - if (position >= 0) { - val column = position % spanCount // item column - outRect.apply { - // spacing - column * ((1f / spanCount) * spacing) - left = spacing - column * spacing / spanCount - // (column + 1) * ((1f / spanCount) * spacing) - right = (column + 1) * spacing / spanCount - if (position < spanCount) top = spacing - bottom = spacing - } - } else { - outRect.apply { - left = 0 - right = 0 - top = 0 - bottom = 0 - } - } - } - } - } \ No newline at end of file diff --git a/app/src/main/java/com/project/drinkly_admin/ui/store/StoreDetailInfoFragment.kt b/app/src/main/java/com/project/drinkly_admin/ui/store/StoreDetailInfoFragment.kt index e0808c3..51bbeeb 100644 --- a/app/src/main/java/com/project/drinkly_admin/ui/store/StoreDetailInfoFragment.kt +++ b/app/src/main/java/com/project/drinkly_admin/ui/store/StoreDetailInfoFragment.kt @@ -20,6 +20,7 @@ import com.bumptech.glide.Glide import com.project.drinkly_admin.R import com.project.drinkly_admin.api.request.store.StoreDetailRequest import com.project.drinkly_admin.databinding.FragmentStoreDetailInfoBinding +import com.project.drinkly_admin.ui.BasicToast import com.project.drinkly_admin.ui.MainActivity import com.project.drinkly_admin.util.MainUtil.updateViewPositionForKeyboard import com.project.drinkly_admin.util.MyApplication @@ -168,6 +169,10 @@ class StoreDetailInfoFragment : Fragment() { binding.run { editTextStoreDescription.setText(viewModel.storeDetailInfo.value?.storeDescription) editTextStoreInstagram.setText(viewModel.storeDetailInfo.value?.instagramUrl) + if(viewModel.storeDetailInfo.value?.instagramUrl.isNullOrEmpty()) { + BasicToast.showBasicToast(requireContext(), "대표 이미지를 등록하면 홍보에 더 도움이 돼요!", R.drawable.ic_check, binding.buttonSave) + } + if(viewModel.storeDetailInfo.value?.storeMainImageUrl != null) { Glide.with(mainActivity).load(viewModel.storeDetailInfo.value?.storeMainImageUrl).into(imageViewStoreImage) layoutStoreImage.visibility = View.INVISIBLE @@ -175,6 +180,7 @@ class StoreDetailInfoFragment : Fragment() { layoutStoreImage.visibility = View.VISIBLE } + toolbar.run { textViewTitle.text = "매장 정보" buttonBack.setOnClickListener { @@ -201,7 +207,7 @@ class StoreDetailInfoFragment : Fragment() { } buttonSave.isEnabled = - (storeMainImage != null || viewModel.storeDetailInfo.value?.storeMainImageUrl != null) && editTextStoreDescription.text.isNotEmpty() + (storeMainImage != null || viewModel.storeDetailInfo.value?.storeMainImageUrl != null) || editTextStoreDescription.text.isNotEmpty() || editTextStoreInstagram.text.isNotEmpty() } } diff --git a/app/src/main/java/com/project/drinkly_admin/ui/store/StoreDetailInfoMainFragment.kt b/app/src/main/java/com/project/drinkly_admin/ui/store/StoreDetailInfoMainFragment.kt index 64e2a35..9bdbd20 100644 --- a/app/src/main/java/com/project/drinkly_admin/ui/store/StoreDetailInfoMainFragment.kt +++ b/app/src/main/java/com/project/drinkly_admin/ui/store/StoreDetailInfoMainFragment.kt @@ -12,6 +12,7 @@ import com.project.drinkly_admin.api.request.store.StoreDetailRequest import com.project.drinkly_admin.api.response.home.StoreDetailResponse import com.project.drinkly_admin.databinding.FragmentStoreDetailInfoMainBinding import com.project.drinkly_admin.ui.MainActivity +import com.project.drinkly_admin.ui.home.HomeFragment import com.project.drinkly_admin.util.MyApplication import com.project.drinkly_admin.viewModel.StoreViewModel @@ -23,8 +24,6 @@ class StoreDetailInfoMainFragment : Fragment() { ViewModelProvider(requireActivity())[StoreViewModel::class.java] } - private var isSaveInfo = MutableList(5) { false } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? @@ -80,12 +79,9 @@ class StoreDetailInfoMainFragment : Fragment() { } buttonNext.setOnClickListener { - var storeInfo = - StoreDetailRequest( - isReady = true - ) - - viewModel.editStoreInfo(mainActivity, MyApplication.storeId, storeInfo) + mainActivity.supportFragmentManager.beginTransaction() + .replace(R.id.fragmentContainerView_main, HomeFragment()) + .commit() } } @@ -107,67 +103,59 @@ class StoreDetailInfoMainFragment : Fragment() { fun checkInfo(storeInfo: StoreDetailResponse?) { binding.run { - // 매장 정보 - if(storeInfo?.storeDescription != null) { - isSaveInfo[0] = true - buttonStoreInfo.setBackgroundResource(R.drawable.background_primary10_radius10) + // 제공하는 주류 + if(storeInfo?.availableDrinkImageUrls?.size != 0) { + buttonAvailableDrink.setBackgroundResource(R.drawable.background_primary10_radius10) imageViewInfoNext1.setImageResource(R.drawable.ic_check_circle_checked) } else { - isSaveInfo[0] = false - buttonStoreInfo.setBackgroundResource(R.drawable.background_white_radius10) + buttonAvailableDrink.setBackgroundResource(R.drawable.background_white_radius10) imageViewInfoNext1.setImageResource(R.drawable.ic_next) } - // 제공하는 주류 - if(storeInfo?.availableDrinkImageUrls?.size != 0) { - isSaveInfo[1] = true - buttonAvailableDrink.setBackgroundResource(R.drawable.background_primary10_radius10) + // 멤버십 이용 가능 요일 + if(storeInfo?.availableDays != null) { + buttonAvailableDate.setBackgroundResource(R.drawable.background_primary10_radius10) imageViewInfoNext2.setImageResource(R.drawable.ic_check_circle_checked) } else { - isSaveInfo[1] = false - buttonAvailableDrink.setBackgroundResource(R.drawable.background_white_radius10) + buttonAvailableDate.setBackgroundResource(R.drawable.background_white_radius10) imageViewInfoNext2.setImageResource(R.drawable.ic_next) } - // 메뉴판 - if(storeInfo?.menuImageUrls?.size != 0) { - isSaveInfo[2] = true - buttonMenu.setBackgroundResource(R.drawable.background_primary10_radius10) + // 영업시간 + if(storeInfo?.openingHours != null) { + buttonOpenTime.setBackgroundResource(R.drawable.background_primary10_radius10) imageViewInfoNext3.setImageResource(R.drawable.ic_check_circle_checked) } else { - isSaveInfo[2] = false - buttonMenu.setBackgroundResource(R.drawable.background_white_radius10) + buttonOpenTime.setBackgroundResource(R.drawable.background_white_radius10) imageViewInfoNext3.setImageResource(R.drawable.ic_next) } - // 영업시간 - if(storeInfo?.openingHours != null) { - isSaveInfo[3] = true - buttonOpenTime.setBackgroundResource(R.drawable.background_primary10_radius10) + + // 매장 정보 + if(storeInfo?.storeDescription != null) { + buttonStoreInfo.setBackgroundResource(R.drawable.background_primary10_radius10) imageViewInfoNext4.setImageResource(R.drawable.ic_check_circle_checked) } else { - isSaveInfo[3] = false - buttonOpenTime.setBackgroundResource(R.drawable.background_white_radius10) + buttonStoreInfo.setBackgroundResource(R.drawable.background_white_radius10) imageViewInfoNext4.setImageResource(R.drawable.ic_next) } - // 멤버십 이용 가능 요일 - if(storeInfo?.availableDays != null) { - isSaveInfo[4] = true - buttonAvailableDate.setBackgroundResource(R.drawable.background_primary10_radius10) + // 메뉴판 + if(storeInfo?.menuImageUrls?.size != 0) { + buttonMenu.setBackgroundResource(R.drawable.background_primary10_radius10) imageViewInfoNext5.setImageResource(R.drawable.ic_check_circle_checked) } else { - isSaveInfo[4] = false - buttonAvailableDate.setBackgroundResource(R.drawable.background_white_radius10) + buttonMenu.setBackgroundResource(R.drawable.background_white_radius10) imageViewInfoNext5.setImageResource(R.drawable.ic_next) } - } - } - fun initView() { - binding.run { - if(isSaveInfo.all { it }) { + if(storeInfo?.isReady == true) { buttonNext.visibility = View.VISIBLE } else { buttonNext.visibility = View.GONE } + } + } + + fun initView() { + binding.run { toolbar.run { textViewTitle.text = "매장 세부 정보 등록" buttonBack.setOnClickListener { diff --git a/app/src/main/java/com/project/drinkly_admin/util/MainUtil.kt b/app/src/main/java/com/project/drinkly_admin/util/MainUtil.kt index e49115f..033390e 100644 --- a/app/src/main/java/com/project/drinkly_admin/util/MainUtil.kt +++ b/app/src/main/java/com/project/drinkly_admin/util/MainUtil.kt @@ -14,7 +14,12 @@ import java.util.Calendar import java.util.Date import java.util.Locale +import android.content.res.Resources +import kotlin.math.roundToInt + object MainUtil { + fun Int.toPx(): Int = (this * Resources.getSystem().displayMetrics.density).roundToInt() +} // 투명한 status bar fun Activity.setStatusBarTransparent() { // 상태바를 투명하게 설정하고, 레이아웃을 상태바까지 확장 diff --git a/app/src/main/java/com/project/drinkly_admin/viewModel/StoreViewModel.kt b/app/src/main/java/com/project/drinkly_admin/viewModel/StoreViewModel.kt index 1c8197c..aeecc0e 100644 --- a/app/src/main/java/com/project/drinkly_admin/viewModel/StoreViewModel.kt +++ b/app/src/main/java/com/project/drinkly_admin/viewModel/StoreViewModel.kt @@ -98,16 +98,10 @@ class StoreViewModel : ViewModel() { Log.d("DrinklyViewModel", "onResponse 성공: " + result?.toString()) MyApplication.storeId = result?.payload?.storeId ?: 0 + storeDetailInfo.value = result?.payload - if(storeInfo.isReady != null) { - activity.supportFragmentManager.beginTransaction() - .replace(R.id.fragmentContainerView_main, HomeFragment()) - .commit() - } else { - storeDetailInfo.value = result?.payload + activity.supportFragmentManager.popBackStack() - activity.supportFragmentManager.popBackStack() - } } else { // 통신이 실패한 경우(응답코드 3xx, 4xx 등) var result: BaseResponse? = response.body() diff --git a/app/src/main/res/drawable/background_gray3_radius16_top.xml b/app/src/main/res/drawable/background_gray3_radius16_top.xml new file mode 100644 index 0000000..b750e0a --- /dev/null +++ b/app/src/main/res/drawable/background_gray3_radius16_top.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/background_white_radius10_stroke_primary30.xml b/app/src/main/res/drawable/background_white_radius10_stroke_primary30.xml new file mode 100644 index 0000000..b9c0ac3 --- /dev/null +++ b/app/src/main/res/drawable/background_white_radius10_stroke_primary30.xml @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/background_white_radius10_stroke_yellow.xml b/app/src/main/res/drawable/background_white_radius10_stroke_yellow.xml new file mode 100644 index 0000000..3f84d76 --- /dev/null +++ b/app/src/main/res/drawable/background_white_radius10_stroke_yellow.xml @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/background_white_radius12.xml b/app/src/main/res/drawable/background_white_radius12.xml new file mode 100644 index 0000000..08ae035 --- /dev/null +++ b/app/src/main/res/drawable/background_white_radius12.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/background_white_radius12_bottom.xml b/app/src/main/res/drawable/background_white_radius12_bottom.xml new file mode 100644 index 0000000..ae2a872 --- /dev/null +++ b/app/src/main/res/drawable/background_white_radius12_bottom.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_check.xml b/app/src/main/res/drawable/ic_check.xml new file mode 100644 index 0000000..dafd5bf --- /dev/null +++ b/app/src/main/res/drawable/ic_check.xml @@ -0,0 +1,16 @@ + + + + diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml new file mode 100644 index 0000000..52531d6 --- /dev/null +++ b/app/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,16 @@ + + + + diff --git a/app/src/main/res/drawable/img_basic.png b/app/src/main/res/drawable/img_basic.png new file mode 100644 index 0000000..6851568 Binary files /dev/null and b/app/src/main/res/drawable/img_basic.png differ diff --git a/app/src/main/res/drawable/img_beer.png b/app/src/main/res/drawable/img_beer.png index 6c9cf75..432702d 100644 Binary files a/app/src/main/res/drawable/img_beer.png and b/app/src/main/res/drawable/img_beer.png differ diff --git a/app/src/main/res/drawable/img_draft_beer.png b/app/src/main/res/drawable/img_draft_beer.png new file mode 100644 index 0000000..1c76477 Binary files /dev/null and b/app/src/main/res/drawable/img_draft_beer.png differ diff --git a/app/src/main/res/drawable/img_highball.png b/app/src/main/res/drawable/img_highball.png new file mode 100644 index 0000000..f48e89f Binary files /dev/null and b/app/src/main/res/drawable/img_highball.png differ diff --git a/app/src/main/res/drawable/img_soju.png b/app/src/main/res/drawable/img_soju.png index 2bfe3e6..6c66946 100644 Binary files a/app/src/main/res/drawable/img_soju.png and b/app/src/main/res/drawable/img_soju.png differ diff --git a/app/src/main/res/layout/fragment_store_detail_available_drinks.xml b/app/src/main/res/layout/fragment_store_detail_available_drinks.xml index 20dd8ed..3e78320 100644 --- a/app/src/main/res/layout/fragment_store_detail_available_drinks.xml +++ b/app/src/main/res/layout/fragment_store_detail_available_drinks.xml @@ -29,13 +29,14 @@ + android:paddingHorizontal="15dp"> + + + + + + + + + - + app:layout_constraintTop_toBottomOf="@+id/layout_basic_drinks2" /> diff --git a/app/src/main/res/layout/fragment_store_detail_info.xml b/app/src/main/res/layout/fragment_store_detail_info.xml index 72bfda9..9d6be3a 100644 --- a/app/src/main/res/layout/fragment_store_detail_info.xml +++ b/app/src/main/res/layout/fragment_store_detail_info.xml @@ -84,18 +84,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/layout_store_image" /> - - + + + app:layout_constraintTop_toBottomOf="@+id/button_available_drink"> + + + app:layout_constraintTop_toBottomOf="@+id/button_available_date"> + + + + app:layout_constraintTop_toBottomOf="@+id/button_open_time"> + app:layout_constraintTop_toBottomOf="@+id/button_store_info"> + + + app:layout_constraintTop_toTopOf="parent" /> - + app:layout_constraintTop_toBottomOf="@+id/imageView_available_drink"> + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/toast_basic.xml b/app/src/main/res/layout/toast_basic.xml new file mode 100644 index 0000000..71bbe54 --- /dev/null +++ b/app/src/main/res/layout/toast_basic.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index f096589..1637927 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -141,7 +141,7 @@ 8dp - + + + \ No newline at end of file