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

feat: PageActivity 재사용 #273

Merged
merged 1 commit into from
Sep 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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)
}
}
}
Loading