Skip to content

Commit

Permalink
Merge pull request #273 from tukcomCD2024/webSocketBoom
Browse files Browse the repository at this point in the history
feat: PageActivity 재사용
  • Loading branch information
Doncham authored Sep 19, 2024
2 parents 5544a3c + 95992d7 commit 66b21ee
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 66 deletions.
1 change: 1 addition & 0 deletions android/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@
</activity>
<activity
android:name=".PageActivity"
android:launchMode="singleTop"
android:exported="false" />
<activity
android:name=".MyPageActivity"
Expand Down
132 changes: 66 additions & 66 deletions android/app/src/main/java/com/coop/sharenote/PageActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -28,111 +28,100 @@ class PageActivity : AppCompatActivity() {
floating = findViewById(R.id.floating)
fabDraw = findViewById(R.id.fabDraw)



webView.apply {
webViewClient = WebViewClient() // 하이퍼링크 클릭시 새창 띄우기 방지
webChromeClient =
WebChromeClient() // 크롬환경에 맞는 세팅을 해줌. 특히, 알람등을 받기위해서는 꼭 선언해주어야함 (alert같은 경우)
settings.javaScriptEnabled = true // 자바스크립트 허용
settings.javaScriptCanOpenWindowsAutomatically = false
// 팝업창을 띄울 경우가 있는데, 해당 속성을 추가해야 window.open() 이 제대로 작동 , 자바스크립트 새창도 띄우기 허용여부
settings.setSupportMultipleWindows(false) // 새창 띄우기 허용 여부 (멀티뷰)
settings.loadsImagesAutomatically = true // 웹뷰가 앱에 등록되어 있는 이미지 리소스를 자동으로 로드하도록 설정하는 속성
settings.useWideViewPort = true // 화면 사이즈 맞추기 허용 여부
settings.loadWithOverviewMode = true // 메타태그 허용 여부
settings.setSupportZoom(true) // 화면 줌 허용여부
settings.builtInZoomControls = false // 화면 확대 축소 허용여부
settings.displayZoomControls = false // 줌 컨트롤 없애기.
settings.cacheMode = WebSettings.LOAD_NO_CACHE // 웹뷰의 캐시 모드를 설정하는 속성으로써 5가지 모드


settings.domStorageEnabled =
true // 로컬 스토리지 사용 여부를 설정하는 속성으로 팝업창등을 '하루동안 보지 않기' 기능 사용에 필요
settings.allowContentAccess // 웹뷰 내에서 파일 액세스 활성화 여부
settings.userAgentString = "app" // 웹에서 해당 속성을 통해 앱에서 띄운 웹뷰로 인지 할 수 있도록 합니다.
settings.defaultTextEncodingName = "UTF-8" // 인코딩 설정
settings.databaseEnabled = true //Database Storage API 사용 여부 설정
}

val nickname = getUserName()
val userId = getUserId()
val email = getUserEmail()
val imageUrl = intent.getStringExtra(PaintActivity.IMAGE_URL)

webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
val script = """
localStorage.setItem('nickname', '$nickname');
localStorage.setItem('userId', '$userId');
localStorage.setItem('email', '$email');
""".trimIndent()
webView.evaluateJavascript(script, null)

// WebView 설정은 최초 생성 시에만 수행
if (savedInstanceState == null) {
webView.apply {
webViewClient = WebViewClient() // 하이퍼링크 클릭시 새창 띄우기 방지
webChromeClient = WebChromeClient() // 크롬환경에 맞는 세팅
settings.javaScriptEnabled = true // 자바스크립트 허용
settings.javaScriptCanOpenWindowsAutomatically = false
settings.setSupportMultipleWindows(false) // 새창 띄우기 허용 여부 (멀티뷰)
settings.loadsImagesAutomatically = true // 이미지 자동 로드
settings.useWideViewPort = true // 화면 사이즈 맞추기 허용 여부
settings.loadWithOverviewMode = true // 메타태그 허용 여부
settings.setSupportZoom(true) // 화면 줌 허용여부
settings.builtInZoomControls = false // 확대 축소 허용여부
settings.displayZoomControls = false // 줌 컨트롤 없애기
settings.cacheMode = WebSettings.LOAD_NO_CACHE // 캐시 모드 설정
settings.domStorageEnabled = true // 로컬 스토리지 사용 여부
settings.allowContentAccess = true // 파일 액세스 활성화 여부
settings.userAgentString = "app" // 사용자 에이전트 설정
settings.defaultTextEncodingName = "UTF-8" // 인코딩 설정
settings.databaseEnabled = true // Database Storage API 사용 여부
}
}



val nickname = getUserName()
val userId = getUserId()
val email = getUserEmail()

webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
val script = """
localStorage.setItem('nickname', '$nickname');
localStorage.setItem('userId', '$userId');
localStorage.setItem('email', '$email');
""".trimIndent()
webView.evaluateJavascript(script, null)
}
}

// SharedPreferencesUtil을 사용하여 WorkSpaceId와 NoteId를 불러옵니다.
val workspaceId = SharedPreferencesUtil.getRecentWorkspaceId(this)
val noteId = SharedPreferencesUtil.getRecentNoteId(this)
val pageId = SharedPreferencesUtil.getRecentPageId(this)
// SharedPreferencesUtil을 사용하여 WorkSpaceId와 NoteId를 불러옵니다.
val workspaceId = SharedPreferencesUtil.getRecentWorkspaceId(this)
val noteId = SharedPreferencesUtil.getRecentNoteId(this)
val pageId = SharedPreferencesUtil.getRecentPageId(this)

webView.loadUrl("https://sharenote.shop/organization/$workspaceId/$noteId/$pageId")
webView.loadUrl("https://sharenote.shop/organization/$workspaceId/$noteId/$pageId")
}

// 플로팅 버튼 클릭시 에니메이션 동작 기능
floating.setOnClickListener {
toggleFab()
toggleFab()
}



fabDraw.setOnClickListener {
val intent = Intent(this, PaintActivity::class.java)
startActivity(intent)
}

// 이미지 URL 처리
val imageUrl = intent.getStringExtra(IMAGE_URL)
if (imageUrl != null) {
uploadImageToEditor(imageUrl)
}
}


private fun uploadImageToEditor(imageUrl: String?) {
if (imageUrl != null) {
Log.d("PageActivity", "Image URL: $imageUrl")
// 이미지 URL을 JavaScript 함수에 전달
val jsFunction = "uploadImageToEditor('$imageUrl')"
webView.evaluateJavascript(jsFunction, null)
val intent = Intent(this, PageActivity::class.java)
finish()
startActivity(intent)
} else {

// 기존 PageActivity 재사용을 위해 startActivity 호출 제거
// 이로 인해 무한 루프가 발생하지 않음
}
}


companion object {
private const val REQUEST_IMAGE_SELECTION = 100
const val IMAGE_URL = "image_url"
}

// 새롭게 전달된 intent를 받아오는 함수
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
intent?.let {
// PaintActivity에서 전달된 새로운 이미지 URL을 가져옴
val imageUrl = it.getStringExtra(PaintActivity.IMAGE_URL)
val imageUrl = it.getStringExtra(IMAGE_URL)
uploadImageToEditor(imageUrl)
}
}

override fun onBackPressed() {
if (webView.canGoBack()) {
//웹사이트에서 뒤로갈 페이지가 존재 한다면 수행
// 웹사이트에서 뒤로갈 페이지가 존재한다면 수행
webView.goBack() // 웹사이트 뒤로가기
yjsDisconnect()

} else {
super.onBackPressed() // 본래의 백버튼 수행(안드로이드)
yjsDisconnect()
Expand All @@ -144,6 +133,17 @@ class PageActivity : AppCompatActivity() {
webView.evaluateJavascript(jsCode, null)
}

override fun onDestroy() {
super.onDestroy()
webView.apply {
stopLoading()
loadUrl("about:blank")
clearHistory()
removeAllViews()
destroy()
}
}

private fun toggleFab() {
// 플로팅 액션 버튼 닫기 - 열려있는 플로팅 버튼 집어넣는 애니메이션 세팅
if (isFabOpen) {
Expand All @@ -152,12 +152,11 @@ class PageActivity : AppCompatActivity() {

// 플로팅 액션 버튼 열기 - 닫혀있는 플로팅 버튼 꺼내는 애니메이션 세팅
} else {
ObjectAnimator.ofFloat(fabDraw, "translationY", -200f,).apply { start() }
ObjectAnimator.ofFloat(fabDraw, "translationY", -200f).apply { start() }
floating.setImageResource(R.drawable.ic_close)
}

isFabOpen = !isFabOpen

}

private fun getUserId(): String? {
Expand All @@ -167,7 +166,8 @@ class PageActivity : AppCompatActivity() {
private fun getUserName(): String? {
return SharedPreferencesUtil.getUserName(this)
}

private fun getUserEmail(): String? {
return SharedPreferencesUtil.getUserEmail(this)
}
}
}

0 comments on commit 66b21ee

Please sign in to comment.