Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#28 [feat] search UI and api #29

Draft
wants to merge 48 commits into
base: develop
Choose a base branch
from

Conversation

kongwoojin
Copy link
Contributor

@kongwoojin kongwoojin commented Dec 22, 2022

PR 개요

이슈 번호: #28

PR Checklist

  • Code convention을 잘 지켰나요?
  • 테스트 코드를 추가했나요?

작업사항

  • Bugfix
  • Feature
  • Code style update (formatting, local variables)
  • Refactoring (no functional changes, no api changes)
  • Other

작업사항의 상세한 설명

2022/12/22

  • 검색 화면 완성하였습니다.
  • 검색어 자동 완성은 아직 API에서 제공되지 않아 생략하였습니다.
  • 커스텀 뷰(jjEditText)를 약간 수정하였습니다.
    • imeOptions을 추가했습니다.
    • onEditorActionListener를 추가했습니다.
  • 검색 결과 화면은 아직 미완성입니다.
    • 검색 결과에서 가게 이름, 주소 출력되도록 만들었습니다.
    • 가게 사진이 아직 API에서 제공되지 않아, placeholder를 집어 넣었습니다.
    • 가게 거리와 영업 시간 또한 마찬가지라 추후 추가할 예정입니다.
    • 가게 아이템의 지도 아이콘 클릭 시 하단에 지도 옵션이 출력됩니다만 아직 연결은 되지 않았습니다.
    • 검색 데이터를 받아올때 별도의 로딩 화면 디자인이 없어 일단은 생략하였습니다.

2022/12/26

  • 검색 결과 화면에서 coil을 사용하도록 수정하였습니다.
  • 네이버 지도와 카카오 맵으로 열기를 추가하였습니다.

2022/12/27

  • JjEditText의 imeOptions 쪽 오타를 수정했습니다.
  • API 에러 핸들링 코드를 추가했습니다.
  • UrlUtil을 추가했습니다.
  • 남아있던 테스트 코드를 제거하였습니다.
  • Fragment에서 ui와 livedata 관련 코드를 onCreateView에서 onViewCreated로 옮겼습니다.

2022/12/28

  • google location library를 app module에서 data module로 옮겼습니다.
  • LocationRepository, LocationDataSource를 추가하였고, GPS 데이터를 담아 놓는 GPSData DTO를 새로 추가하였습니다.
  • 기존의 getCurrentLocation()을 사용한 코드를 제거하고, requestLocationUpdates()를 사용하여 항상 새 위치를 요청하는 코드로 교체하였습니다.
  • 기기의 GPS가 꺼져 있으면, 다이얼로그를 띄우도록 수정했습니다.

추가내용

  • 작업 내용이 많아지다 보니 작업 현황 공유 차 pr을 미리 올렸습니다.
  • 완성 후에 리뷰 요청하겠습니다!

앞으로 진행해야 하는 것

  • 검색 결과 API 완성 후 결과 페이지 완성 (현재는 일부만 완성)
  • 검색어 추천 API 완성 후 검색창에 연결
  • 친구? API 완성 후 추가
  • Added Reviewers, Assignees, Labels, Milestone

android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="24dp"
app:editText_imeOptions="actionSearch"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actionSearch 가 적용안된것 같습니다. EditText를 누르면 엔터키가 돋보기로 보여야하는데 체크표시로 보입니다.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

eda2005 커밋에서 수정하였습니다!


private val requestPermission =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { results ->
for (result in results) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

82번라인에서 시작되어 for문을 타면 ACEESS_FINE_LOCATION, ACCESS_COARSR_LOCATION 둘중 하나만 있어도 GPS를 받아오는것 같습니다.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACEESS_FINE_LOCATION은 어차피 ACCESS_COARSR_LOCATION와 같이 허용되고, ACCESS_COARSR_LOCATION만 허용되었을 경우, ACEESS_FINE_LOCATION를 다시 요청하도록 만들어서 둘 중 하나만 있어도 GPS를 받아오도록 만들었습니다!

requireActivity().onBackPressedDispatcher.addCallback(this, onBackPressedCallback)
}

override fun onCreateView(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

onCreateView에서는 어떤 layout xml파일을 로드할지 결정하여 로드하여 화면에 보여주고 있습니다.
onViewCreate 함수 안은 layout xml파일이 이미 로드가 완료된 상태여서 거기서 binding.~ 관련된 변수들을 사용하는게 더 안전해보입니다.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

58e2c5a 커밋에서 수정했습니다!

for (result in results) {
when (result.value) {
true -> {
getGPSLocation()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

위치정보가 반드시 있어야 한다면 위치정보를 얻지못하였을 경우 액티비티를 종료하는 코드가 필요해보입니다.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

155b8f0 커밋에서 수정했습니다!

private val shopLocalDataSource: ShopLocalDataSource
) : ShopRepository {
override suspend fun getTrendings(): TrendingResult? {
val resp = shopRemoteDataSource.getTrendings().body()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

통신 오류가 났을 경우 api 응답 json 형태가 TrendingResult의 형태가 아닐경우에 대한 예외처리가 없습니다.
getSearchHistory
searchShop 함수도 동일하게 예외처리가 없습니다.
viewmodel의 runcatching으로 이동될 수 있지만 서버에서 보내주는 오류메시지가 필요할 수 있을것 같습니다.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

api 호출 시 오류나도록 호출해보고 그 응답값을 커버할 수 있도록 코드를 작성하면 좋을 것 같습니다.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

e277c5c 31f32b6 2945f9a cf27079 e2b8a03 커밋에서 수정했습니다!

}

@SuppressLint("MissingPermission")
fun getGPSLocation() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GPS 해제하는 코드가 혹시 있나요? 없다면 GPS를 사용하지 않은곳으로 이동하면 해제하는 코드가 필요해 보입니다.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

따로 callback을 만들어서 호출하는 것이 아니라 필요할 때 일회성으로 호출하는 코드라 따로 GPS를 해제하는 코드가 필요 없는것으로 알고 있었는데 혹시 제가 잘못 알고 있는것인가요?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://developer.android.com/training/location/retrieve-current.html
마지막으로 저장된 위치를 가져오는것은 정확한 위치를 의미하지 않은것 같습니다.
서울에서 쩝쩝박사 앱으로 검색을 한 후 부산을 가서 GPS를 끄고 쩝쩝박사에서 검색한다면 마지막 위치인 서울 위치를 가젼올것 같습니다.
위치정보를 2~3번 호출받아 정확한 위치를 사용하는게 정확성이 높아보입니다.
https://developer.android.com/training/location/request-updates

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

c5d84bd 5f9b000 0bffd4a d937f0e ad0c0a2 5ec2028 05749b8 커밋에서 수정했습니다!


binding.buttonSearchShopListNaverMap.setOnClickListener {
try {
val naverMapUrl = "nmap://map?" +
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UrlUtil 혹은 생각나는 이름으로 Object 파일 만들어서 makeUrl 이란 함수로 필요한 url을 만드는 Object가 있으면 좋아보입니다.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bb1446e 커밋에서 수정했습니다!

@@ -0,0 +1,5 @@
package com.jjbaksa.data.model.shop

data class TrendingResp(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BaseResp를 상속하여 구현하면 에러코드도 담을 수 있어 보입니다.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

마찬가지로 e277c5c 31f32b6 2945f9a cf27079 e2b8a03 커밋에서 수정했습니다!

@kongwoojin kongwoojin changed the title Feature/#28 feat search UI and api #28 [feat] search UI and api Dec 27, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants