Skip to content

Commit

Permalink
Merge pull request #66 from team-JMT/feat/webview_bridge
Browse files Browse the repository at this point in the history
Feat/webview bridge
  • Loading branch information
soopeach authored Sep 10, 2023
2 parents cc5455c + 3485328 commit 8a54759
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 19 deletions.
6 changes: 3 additions & 3 deletions presentation/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ android {
signingConfigs {
release {
storeFile file("../jmtKey")
storePassword "$System.env.KEYSTORE_PASSWORD"
keyAlias "$System.env.KEY_ALIAS"
keyPassword "$System.env.KEY_PASSWORD"
storePassword "$System.env.SIGNING_STORE_PASSWORD"
keyAlias "$System.env.SIGNING_KEY_ALIAS"
keyPassword "$System.env.SIGNING_KEY_PASSWORD"
}
}
buildTypes {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.gdsc.presentation.model

enum class Route(
val route: String
) {
EDIT_RESTAURANT("editRestaurant"),
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,50 @@ package org.gdsc.presentation.view
import android.content.Context
import android.webkit.JavascriptInterface
import android.widget.Toast
import org.gdsc.presentation.model.Route
import org.json.JSONObject

const val WEB_BASE_URL = "https://jmt-matzip.dev/"

/** Instantiate the interface and set the context */
class WebAppInterface(
private val mContext: Context,
private val slideUpBottomNavigationView: () -> Unit = {},
private val slideDownBottomNavigationView: () -> Unit = {},
private val navigateToRestaurantEdit: (Int) -> Unit = {}
private val navigateToRestaurantEdit: (Int) -> Unit = {},
private val setAccessToken: () -> Unit = {},
) {

/** Show a toast from the web page */
@JavascriptInterface
fun showToast(toast: String) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show()
}
fun navigation(data: String) {
val isVisible:Boolean = JSONObject(data).get("isVisible") as Boolean

@JavascriptInterface
fun navigationEnable(isVisible: Boolean) {
if (isVisible) slideUpBottomNavigationView()
else slideDownBottomNavigationView()
}

@JavascriptInterface
fun editRestaurantInfo(restaurantId: Int) {
navigateToRestaurantEdit(restaurantId)
fun token() = setAccessToken()

// 딥링크 생성 필요
@JavascriptInterface
fun share() {
}

}
// 데이터 구조는 다시 상의 후에 결정해서, 객체화 시키면 좋을 것으로 보임
@JavascriptInterface
fun navigate(data: String) {
val result = JSONObject(data)

when(result.getString("route")) {
Route.EDIT_RESTAURANT.route-> {
val restaurantId = result.getString("restaurantId").toInt()
navigateToRestaurantEdit(restaurantId)
}
}
}

// webView.canGoBack으로 뒤로가기 처리 완료해서 비워뒀습니다.
@JavascriptInterface
fun back(isEnableBack: Boolean) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,13 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.webkit.WebViewClient
import androidx.activity.addCallback
import androidx.fragment.app.viewModels
import dagger.hilt.android.AndroidEntryPoint
import org.gdsc.presentation.databinding.FragmentHomeBinding
import org.gdsc.presentation.utils.repeatWhenUiStarted
import org.gdsc.presentation.view.MainActivity
import org.gdsc.presentation.view.WEB_BASE_URL
import org.gdsc.presentation.view.WebAppInterface

@AndroidEntryPoint
Expand All @@ -18,6 +22,8 @@ class HomeFragment : Fragment() {
private var _binding: FragmentHomeBinding? = null
private val binding get() = _binding!!

val viewModel: HomeViewModel by viewModels()

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
Expand All @@ -31,10 +37,12 @@ class HomeFragment : Fragment() {
super.onViewCreated(view, savedInstanceState)

val parentActivity = requireActivity() as MainActivity
setWebViewBackPress()

binding.webView.apply {
loadUrl("https://jmt-matzip.dev")
loadUrl(WEB_BASE_URL)
settings.javaScriptEnabled = true
settings.domStorageEnabled = true
webViewClient = WebViewClient()

addJavascriptInterface(WebAppInterface(
Expand All @@ -47,14 +55,30 @@ class HomeFragment : Fragment() {
},
{
parentActivity.navigateToEditRestaurantInfo(it)
},
{
repeatWhenUiStarted {
binding.webView.loadUrl(
"javascript:setAccessToken(\"${viewModel.getAccessToken()}\")"
)
}
}
), "Android")
), "webviewBridge")
}

}

override fun onDestroyView() {
_binding = null
super.onDestroyView()
}

private fun setWebViewBackPress() {
requireActivity().onBackPressedDispatcher.addCallback(this) {
if (binding.webView.canGoBack()) {
binding.webView.goBack()
} else {
requireActivity().finish()
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,17 @@ package org.gdsc.presentation.view.home

import androidx.lifecycle.ViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import org.gdsc.domain.usecase.token.GetAccessTokenUseCase
import org.gdsc.presentation.JmtLocationManager
import javax.inject.Inject

@HiltViewModel
class HomeViewModel @Inject constructor(
private val locationManager: JmtLocationManager
private val locationManager: JmtLocationManager,
private val getAccessTokenUseCase: GetAccessTokenUseCase,
) : ViewModel() {

suspend fun getCurrentLocation() = locationManager.getCurrentLocation()

suspend fun getAccessToken() = getAccessTokenUseCase.invoke()
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import org.gdsc.presentation.utils.repeatWhenUiStarted
import org.gdsc.presentation.utils.animateShrinkWidth
import org.gdsc.presentation.utils.checkMediaPermissions
import org.gdsc.presentation.view.MainActivity
import org.gdsc.presentation.view.WEB_BASE_URL
import org.gdsc.presentation.view.WebViewActivity
import org.gdsc.presentation.view.custom.FoodCategoryBottomSheetDialog
import org.gdsc.presentation.view.restaurantregistration.adapter.RegisterRestaurantAdapter
Expand Down Expand Up @@ -252,10 +253,11 @@ class RegisterRestaurantFragment : BaseFragment() {

val intent =
Intent(requireContext(), WebViewActivity::class.java)

// 주소는 변경 되어야 함, 현재는 Lucy LocalHost 테스트
intent.putExtra(
"url",
"http://172.20.10.13:3000/detail/$restaurantId"
"${WEB_BASE_URL}detail/$restaurantId"
)
startActivity(intent)
}
Expand Down

0 comments on commit 8a54759

Please sign in to comment.