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

refactor: permission dialog 통일 #426

Merged
merged 7 commits into from
Oct 5, 2023
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
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ import com.now.naaga.data.firebase.analytics.BEGIN_GO_UPLOAD
import com.now.naaga.data.firebase.analytics.DefaultAnalyticsDelegate
import com.now.naaga.data.throwable.DataThrowable
import com.now.naaga.databinding.ActivityBeginAdventureBinding
import com.now.naaga.presentation.common.dialog.LocationPermissionDialog
import com.now.naaga.presentation.common.dialog.LocationPermissionDialog.Companion.TAG_LOCATION_DIALOG
import com.now.naaga.presentation.common.dialog.DialogType
import com.now.naaga.presentation.common.dialog.PermissionDialog
import com.now.naaga.presentation.mypage.MyPageActivity
import com.now.naaga.presentation.onadventure.OnAdventureActivity
import com.now.naaga.presentation.setting.SettingActivity
Expand Down Expand Up @@ -134,7 +134,7 @@ class BeginAdventureActivity : AppCompatActivity(), AnalyticsDelegate by Default

private fun checkPermissionAndBeginAdventure() {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_DENIED) {
LocationPermissionDialog().show(supportFragmentManager, TAG_LOCATION_DIALOG)
PermissionDialog(DialogType.LOCATION).show(supportFragmentManager)
} else {
checkLocationPermissionInStatusBar()
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.now.naaga.presentation.common.dialog

enum class DialogType {
LOCATION, CAMERA
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package com.now.naaga.presentation.common.dialog

import android.Manifest.permission.ACCESS_COARSE_LOCATION
import android.annotation.SuppressLint
import android.content.Intent
import android.content.pm.PackageManager.PERMISSION_GRANTED
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.net.Uri
Expand All @@ -11,40 +10,63 @@ import android.provider.Settings
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat.checkSelfPermission
import androidx.appcompat.content.res.AppCompatResources
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager
import com.now.naaga.R
import com.now.naaga.data.firebase.analytics.AnalyticsDelegate
import com.now.naaga.data.firebase.analytics.CAMERA_PERMISSION_OPEN_SETTING
import com.now.naaga.data.firebase.analytics.DefaultAnalyticsDelegate
import com.now.naaga.data.firebase.analytics.LOCATION_PERMISSION_OPEN_SETTING
import com.now.naaga.databinding.DialogLocationPermissionBinding
import com.now.naaga.databinding.DialogPermissionBinding
import com.now.naaga.util.dpToPx
import com.now.naaga.util.getWidthProportionalToDevice

class LocationPermissionDialog : DialogFragment(), AnalyticsDelegate by DefaultAnalyticsDelegate() {
private lateinit var binding: DialogLocationPermissionBinding
class PermissionDialog(private val type: DialogType) :
DialogFragment(),
AnalyticsDelegate by DefaultAnalyticsDelegate() {
private lateinit var binding: DialogPermissionBinding

@SuppressLint("UseCompatLoadingForDrawables")
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
binding = DialogLocationPermissionBinding.inflate(layoutInflater)
binding = DialogPermissionBinding.inflate(layoutInflater)
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
initView()
return binding.root
}

private fun initView() {
binding.btnDialogPermissionSetting.text = getString(R.string.permissionDialog_setting)
when (type) {
DialogType.LOCATION -> {
binding.ivDialogPermissionIcon.setImageDrawable(
AppCompatResources.getDrawable(requireContext(), R.drawable.ic_location_dialog),
)
binding.tvDialogPermissionDescription.text = getString(R.string.permissionDialog_location_description)
}

DialogType.CAMERA -> {
binding.ivDialogPermissionIcon.setImageDrawable(
AppCompatResources.getDrawable(requireContext(), R.drawable.ic_camera_dialog),
)
binding.tvDialogPermissionDescription.text = getString(R.string.permissionDialog_camera_description)
}
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
registerAnalytics(this.lifecycle)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
checkPermission()
setSize()
binding.btnDialogLocationSetting.setOnClickListener {
logClickEvent(requireContext().getViewEntryName(it), LOCATION_PERMISSION_OPEN_SETTING)
binding.btnDialogPermissionSetting.setOnClickListener {
logClickEvent(requireContext().getViewEntryName(it), CAMERA_PERMISSION_OPEN_SETTING)
openSetting()
dismiss()
}
Expand All @@ -64,27 +86,12 @@ class LocationPermissionDialog : DialogFragment(), AnalyticsDelegate by DefaultA
startActivity(appDetailsIntent)
}

private fun checkPermission() {
if (checkSelfPermission(requireContext(), ACCESS_COARSE_LOCATION) == PERMISSION_GRANTED) {
setDescription(true)
return
}
setDescription(false)
}

private fun setDescription(isApproximateAccessGranted: Boolean) {
val description: String = if (isApproximateAccessGranted) {
getString(R.string.locationDialog_approximate_description)
} else {
getString(R.string.locationDialog_description)
}

binding.tvDialogLocationDescription.text = description
fun show(manager: FragmentManager) {
show(manager, type.name)
}

companion object {
const val WIDTH_RATE = 0.83f
const val HEIGHT = 400
const val TAG_LOCATION_DIALOG = "LOCATION"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,8 @@ import com.now.naaga.data.firebase.analytics.DefaultAnalyticsDelegate
import com.now.naaga.data.firebase.analytics.UPLOAD_OPEN_CAMERA
import com.now.naaga.data.throwable.DataThrowable
import com.now.naaga.databinding.ActivityUploadBinding
import com.now.naaga.presentation.common.dialog.CameraPermissionDialog
import com.now.naaga.presentation.common.dialog.CameraPermissionDialog.Companion.TAG_CAMERA_DIALOG
import com.now.naaga.presentation.common.dialog.LocationPermissionDialog
import com.now.naaga.presentation.common.dialog.LocationPermissionDialog.Companion.TAG_LOCATION_DIALOG
import com.now.naaga.presentation.common.dialog.DialogType
import com.now.naaga.presentation.common.dialog.PermissionDialog
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
Expand All @@ -54,11 +52,11 @@ class UploadActivity : AppCompatActivity(), AnalyticsDelegate by DefaultAnalytic
if (isGranted.not()) {
when (entry.key) {
Manifest.permission.CAMERA -> {
CameraPermissionDialog().show(supportFragmentManager, TAG_CAMERA_DIALOG)
PermissionDialog(DialogType.CAMERA).show(supportFragmentManager)
}

Manifest.permission.ACCESS_FINE_LOCATION -> {
LocationPermissionDialog().show(supportFragmentManager, TAG_LOCATION_DIALOG)
PermissionDialog(DialogType.LOCATION).show(supportFragmentManager)
}
}
}
Expand Down Expand Up @@ -201,7 +199,7 @@ class UploadActivity : AppCompatActivity(), AnalyticsDelegate by DefaultAnalytic

private fun checkCameraPermission() {
if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_DENIED) {
CameraPermissionDialog().show(supportFragmentManager, TAG_CAMERA_DIALOG)
PermissionDialog(DialogType.CAMERA).show(supportFragmentManager)
} else {
openCamera()
}
Expand Down
55 changes: 0 additions & 55 deletions android/app/src/main/res/layout/dialog_location_permission.xml

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
Expand All @@ -9,7 +10,7 @@
android:backgroundTint="@color/white">

<ImageView
android:id="@+id/iv_dialog_camera"
android:id="@+id/iv_dialog_permission_icon"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginHorizontal="78dp"
Expand All @@ -18,31 +19,32 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_camera_dialog" />
tools:srcCompat="@drawable/ic_camera_dialog" />

<TextView
android:id="@+id/tv_dialog_location_description"
android:id="@+id/tv_dialog_permission_description"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="40dp"
android:fontFamily="@font/pretendard_medium"
android:text="@string/cameraDialog_description"
android:gravity="center"
android:textColor="@color/black"
android:textSize="16sp"
android:gravity="center"
app:layout_constraintBottom_toTopOf="@+id/btn_dialog_location_setting"
app:layout_constraintBottom_toTopOf="@+id/btn_dialog_permission_setting"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_dialog_camera" />
app:layout_constraintTop_toBottomOf="@id/iv_dialog_permission_icon"
tools:text="@string/permissionDialog_camera_description" />

<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn_dialog_location_setting"
android:id="@+id/btn_dialog_permission_setting"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="40dp"
android:layout_marginBottom="28dp"
android:background="@drawable/bg_yellow_button"
android:text="@string/locationDialog_setting"
android:fontFamily="@font/pretendard_medium"
android:text="@string/permissionDialog_setting"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
Expand Down
12 changes: 5 additions & 7 deletions android/app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@
<string name="beginAdventure_my_page">나의 모험</string>
<string name="beginAdventure_continue_adventure">이어 하기</string>

<!-- LocationDialog-->
<string name="locationDialog_setting">설정으로 이동해요</string>
<string name="locationDialog_description">나아가 서비스를 이용하기 위해서는\n위치에 엑세스할 권한을\n부여해주셔야 해요</string>
<string name="locationDialog_approximate_description">대략적인 위치 권한만 허용되었어요\n나아가 서비스를 이용하기 위해서는\n정확한 위치 권한을\n부여해주셔야 해요</string>
<!-- PermissionDialog-->
<string name="permissionDialog_setting">설정으로 이동해요</string>
<string name="permissionDialog_location_description">나아가 서비스를 이용하기 위해서는\n위치 권한을 부여해주셔야 해요</string>
<string name="permissionDialog_approximate_description">대략적인 위치 권한만 허용되었어요\n나아가 서비스를 이용하기 위해서는\n정확한 위치 권한을\n부여해주셔야 해요</string>
<string name="permissionDialog_camera_description">장소를 올리기 위해서는\n카메라 접근 권한이 필요해요!</string>

<!--OnAdventureActivity-->
<string name="onAdventure_loading_photo">사진을 로딩 중이에요</string>
Expand Down Expand Up @@ -66,9 +67,6 @@
<string name="upload_error_post_message">전송에 실패했어요! 다시 시도해주세요!</string>
<string name="upload_error_insufficient_info_message">모든 정보를 입력해주세요.</string>

<!-- CameraDialog-->
<string name="cameraDialog_description">장소를 올리기 위해서는\n카메라 접근 권한이 필요해요!</string>

<!-- AdventureHistoryActivity -->
<string name="history_title">모험 기록</string>

Expand Down
Binary file added android/naaga
Binary file not shown.