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

지도 공유하기 #88

Merged
merged 12 commits into from
Dec 25, 2020
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
3 changes: 3 additions & 0 deletions Picon/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -131,4 +131,7 @@ dependencies {
implementation 'androidx.activity:activity-ktx:1.2.0-beta01'
implementation 'androidx.fragment:fragment-ktx:1.3.0-beta01'

// ScreenShot
// https://github.com/jraska/Falcon
implementation 'com.jraska:falcon:2.1.1'
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,22 @@ package com.yapp.picon.presentation.map

import android.Manifest
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.util.Log
import android.util.TypedValue
import android.view.MenuItem
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.GravityCompat
import androidx.recyclerview.widget.GridLayoutManager
import com.bumptech.glide.Glide
import com.google.android.material.navigation.NavigationView
import com.gun0912.tedpermission.PermissionListener
import com.gun0912.tedpermission.TedPermission
import com.jraska.falcon.Falcon
import com.naver.maps.geometry.LatLng
import com.naver.maps.geometry.LatLngBounds
import com.naver.maps.geometry.Tm128
Expand Down Expand Up @@ -45,6 +51,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.koin.androidx.viewmodel.ext.android.viewModel
import ted.gun0912.clustering.naver.TedNaverClustering
import java.io.File

class MapActivity : BaseMapActivity<MapActivityBinding, MapViewModel>(
R.layout.map_activity,
Expand Down Expand Up @@ -83,6 +90,7 @@ class MapActivity : BaseMapActivity<MapActivityBinding, MapViewModel>(
super.onResume()

setNavHeader()
setSharedButton()
}

override fun initViewModel() {
Expand All @@ -99,6 +107,34 @@ class MapActivity : BaseMapActivity<MapActivityBinding, MapViewModel>(
vm.completeLoadPost()
}
})

vm.sharedMapYN.observe(this) {
if (it) {
val locationLayoutParams = ConstraintLayout.LayoutParams(
dpToPx(this, 60f).toInt(),
dpToPx(this, 60f).toInt()
)
locationLayoutParams.setMargins(0,0,18,0)
locationLayoutParams.endToEnd = R.id.map_constraint_layout
locationLayoutParams.topToTop = R.id.map_shared_button
locationLayoutParams.bottomToBottom = R.id.map_shared_button
binding.mapIbCurrentLocation.layoutParams = locationLayoutParams

binding.mapSharedButton.visibility = View.VISIBLE
binding.mapDrawerLayout.closeDrawer(GravityCompat.START)
} else {
val locationLayoutParams = ConstraintLayout.LayoutParams(
dpToPx(this, 60f).toInt(),
dpToPx(this, 60f).toInt()
)
locationLayoutParams.startToStart = R.id.map_ib_add
locationLayoutParams.endToEnd = R.id.map_ib_add
locationLayoutParams.bottomToTop = R.id.map_ib_add
binding.mapIbCurrentLocation.layoutParams = locationLayoutParams

binding.mapSharedButton.visibility = View.GONE
}
}
}

private fun setToolBar() {
Expand Down Expand Up @@ -135,12 +171,57 @@ class MapActivity : BaseMapActivity<MapActivityBinding, MapViewModel>(
}
}

private fun setSharedButton() {
binding.mapSharedButton.setOnClickListener {
vm.setToggleShowBtnYN(false)
vm.setSharedMenuButton(false)

saveBitmapToJPEG()
getBitmapFromFile()?.let { imageFile ->
shareTheScreenShot(imageFile)
}
}
}

private fun saveBitmapToJPEG() {
val storage: File = cacheDir
val fileName = "capture.jpg"

val tempFile = File(storage, fileName) // 저장할 파일 인스턴스 생성

Falcon.takeScreenshot(this, tempFile) // 스크린샷 파일 저장
}

private fun getBitmapFromFile(): File? {
val files = File(cacheDir.toString()).listFiles()

files?.let { list ->
for (file in list) {
if (file.name == "capture.jpg") return file
}
}
return null
}

private fun shareTheScreenShot(file: File) {
/* todo - 사진파일 공유하는 기능 띄우기
아래처럼 구현했었는데 오류가 나는 것 같아요.
혹시 몰라서 주석으로 처리해둔 거라 지우셔도 괜찮습니다.
*/
// val imageUri = Uri.fromFile(file)
// Intent(Intent.ACTION_SEND).apply {
// type = "image/*"
// putExtra(Intent.EXTRA_STREAM, imageUri)
// }.let { sharingIntent ->
// startActivity(Intent.createChooser(sharingIntent, "Share The ScreenShot"))
// }
}

private fun setNavHeader() {
observeUserToken()

setUserCircleImage()
setUserNameText()
setAlarmImageEvent()
setEmotionActivityStart()
setHeadEmotionAdapter()
}
Expand Down Expand Up @@ -179,11 +260,6 @@ class MapActivity : BaseMapActivity<MapActivityBinding, MapViewModel>(
})
}

private fun setAlarmImageEvent() {
// todo - 알람 아이콘 맞는 걸로 변경
// todo - 알람 아이콘 기능 설정
}

private fun setEmotionActivityStart() {
binding.navView.getHeaderView(0).nav_head_emotion_button.setOnClickListener {
startNavActivity(NavTypeStringSet.CustomEmotion.type)
Expand Down Expand Up @@ -289,17 +365,18 @@ class MapActivity : BaseMapActivity<MapActivityBinding, MapViewModel>(

override fun onNavigationItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.map_nav_collect_picture -> startCollectActivity()
R.id.map_nav_manage_friend -> startActivity(
Intent(
this,
ManageFriendActivity::class.java
)
)
R.id.map_nav_setting -> startNavActivity(NavTypeStringSet.Setting.type)
R.id.map_nav_view_travel_statistic -> startNavActivity(NavTypeStringSet.Statistic.type)
R.id.map_nav_collect_picture -> startCollectActivity()
R.id.map_nav_share_map -> vm.setSharedMenuButton(true)
R.id.map_nav_setting -> startNavActivity(NavTypeStringSet.Setting.type)
}
return true
return false
}

private fun settingOptionToMap() {
Expand Down Expand Up @@ -398,6 +475,10 @@ class MapActivity : BaseMapActivity<MapActivityBinding, MapViewModel>(
binding.mapDrawerLayout.closeDrawer(GravityCompat.START)
return
}
if (binding.mapSharedButton.visibility == View.VISIBLE) {
vm.setSharedMenuButton(false)
return
}
vm.showPinYN.value?.let {
if (it) {
vm.toggleShowPinYN()
Expand Down Expand Up @@ -469,4 +550,10 @@ class MapActivity : BaseMapActivity<MapActivityBinding, MapViewModel>(
naverMap.moveCamera(cameraUpdate)
}

private fun dpToPx(context: Context, dp: Float): Float {
val displayMetrics = context.resources.displayMetrics

return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, displayMetrics)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ class MapViewModel(
private val _showPinYN = MutableLiveData<Boolean>()
val showPinYN: LiveData<Boolean> get() = _showPinYN

private val _sharedMapYN = MutableLiveData<Boolean>()
val sharedMapYN: LiveData<Boolean> get() = _sharedMapYN

private val _postMarkers = MutableLiveData<List<PostMarker>>()
val postMarkers: LiveData<List<PostMarker>> get() = _postMarkers

Expand All @@ -66,6 +69,7 @@ class MapViewModel(
init {
_showBtnYN.value = false
_showPinYN.value = false
_sharedMapYN.value = false
_postMarkers.value = mutableListOf()
_postLoadYN.value = false
_showAddressYN.value = false
Expand All @@ -78,6 +82,10 @@ class MapViewModel(
_toastMsg.value = msg
}

fun setToggleShowBtnYN(value: Boolean) {
_showBtnYN.value = value
}

fun toggleShowBtnYN() {
_showBtnYN.value = _showBtnYN.value?.let {
!it
Expand Down Expand Up @@ -281,4 +289,8 @@ class MapViewModel(
}
}
}

fun setSharedMenuButton(value: Boolean) {
_sharedMapYN.value = value
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,7 @@ class SettingFragment: BaseFragment<NavSettingFragmentBinding, NavViewModel>(
private fun setReviewButton() {
repo.reviewFlag.observe(this, {
if (it) {
// TODO("앱 배포 이후에 아래 주석을 해제하면 됩니다.")
// startAppStore()
startAppStore()
}
})
}
Expand Down
Binary file added Picon/app/src/main/res/drawable-hdpi/ic_share.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid
android:color="@color/cornflower_blue"/>
<corners
android:radius="22dp"/>
</shape>
Binary file added Picon/app/src/main/res/drawable-mdpi/ic_share.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 changes: 31 additions & 8 deletions Picon/app/src/main/res/layout/map_activity.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
android:layout_height="match_parent">

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/map_constraint_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

Expand All @@ -31,7 +32,9 @@
<FrameLayout
android:id="@+id/map_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent">

</FrameLayout>

</FrameLayout>

Expand All @@ -45,7 +48,7 @@

<ImageButton
android:id="@+id/map_ib_menu"
visibleOrInvisible="@{mapVM.showBtnYN}"
visibleOrInvisible="@{mapVM.showBtnYN &amp;&amp; !mapVM.sharedMapYN}"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@android:color/transparent"
Expand All @@ -57,7 +60,7 @@

<ImageButton
android:id="@+id/map_ib_pin_close"
visibleOrInvisible="@{mapVM.showPinYN &amp;&amp; !mapVM.showBtnYN}"
visibleOrInvisible="@{mapVM.showPinYN &amp;&amp; !mapVM.showBtnYN &amp;&amp; !mapVM.sharedMapYN}"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@android:color/transparent"
Expand All @@ -70,7 +73,7 @@

<ImageButton
android:id="@+id/map_ib_search"
visibleOrInvisible="@{mapVM.showPinYN || mapVM.showBtnYN}"
visibleOrInvisible="@{mapVM.showPinYN || mapVM.showBtnYN || mapVM.sharedMapYN}"
android:layout_width="60dp"
android:layout_height="60dp"
android:background="@android:color/transparent"
Expand All @@ -83,20 +86,21 @@

<ImageButton
android:id="@+id/map_ib_current_location"
visibleOrInvisible="@{mapVM.showBtnYN &amp;&amp; !mapVM.showPinYN}"
visibleOrInvisible="@{(mapVM.showBtnYN &amp;&amp; !mapVM.showPinYN) || mapVM.sharedMapYN}"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginEnd="15dp"
android:layout_marginBottom="3dp"
android:background="@android:color/transparent"
android:contentDescription="@string/image_description"
android:padding="18dp"
android:src="@drawable/ic_map_location"
app:layout_constraintBottom_toTopOf="@id/map_ib_add"
app:layout_constraintEnd_toEndOf="@id/map_ib_add"
app:layout_constraintStart_toStartOf="@id/map_ib_add" />
app:layout_constraintEnd_toEndOf="parent" />

<ImageButton
android:id="@+id/map_ib_add"
visibleOrInvisible="@{mapVM.showBtnYN &amp;&amp; !mapVM.showPinYN}"
visibleOrGone="@{(mapVM.showBtnYN &amp;&amp; !mapVM.showPinYN &amp;&amp; !mapVM.sharedMapYN)}"
android:layout_width="54dp"
android:layout_height="54dp"
android:layout_marginEnd="18dp"
Expand Down Expand Up @@ -151,6 +155,25 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/map_ib_post_pin" />

<Button
android:id="@+id/map_shared_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="30dp"
android:background="@drawable/bg_cornflower_blue_radius_22dp"
android:drawableStart="@drawable/ic_share"
android:drawablePadding="12dp"
android:includeFontPadding="false"
android:minHeight="45dp"
android:paddingStart="18dp"
android:paddingEnd="18dp"
android:text="@string/map_shared_button"
android:textColor="#ffffff"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>

Expand Down
15 changes: 2 additions & 13 deletions Picon/app/src/main/res/layout/map_nav_head.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,6 @@
app:layout_constraintStart_toEndOf="@+id/nav_head_circle_user_image"
app:layout_constraintTop_toTopOf="@+id/nav_head_circle_user_image" />

<ImageView
android:id="@+id/nav_head_alarm_image"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginTop="18dp"
android:layout_marginEnd="12dp"
android:padding="12dp"
android:src="@drawable/ic_alarm"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/nav_head_emotion_rv"
android:layout_width="match_parent"
Expand All @@ -64,14 +53,14 @@
android:id="@+id/nav_head_emotion_icon"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginTop="1dp"
android:layout_marginEnd="6dp"
android:paddingStart="12dp"
android:paddingTop="16dp"
android:paddingEnd="12dp"
android:paddingBottom="8dp"
app:layout_constraintBottom_toBottomOf="@+id/nav_head_emotion_button"
app:layout_constraintEnd_toEndOf="@+id/nav_head_emotion_button"
app:layout_constraintTop_toBottomOf="@+id/nav_head_alarm_image"
app:layout_constraintTop_toTopOf="@+id/nav_head_emotion_button"
app:srcCompat="@drawable/ic_editname_1" />

<TextView
Expand Down
Loading