Skip to content
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
4 changes: 0 additions & 4 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@

<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
Expand All @@ -16,7 +15,6 @@
<application
android:name=".HiltApplication"
android:allowBackup="true"

android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher_logo"
Expand All @@ -29,8 +27,6 @@
android:requestRawExternalStorageAccess="true"
tools:targetApi="31">



<service
android:name=".presentation.ui.certificate.StopWatchService"
android:enabled="true"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@ import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.content.IntentFilter
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand All @@ -16,6 +19,8 @@ import androidx.activity.result.PickVisualMediaRequest
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.core.content.PermissionChecker
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.localbroadcastmanager.content.LocalBroadcastManager
Expand Down Expand Up @@ -74,12 +79,8 @@ class CertificateFragment : Fragment() {
if (isGranted) {
viewModel.insertCertificateInitInfo()
} else {
if (ActivityCompat.shouldShowRequestPermissionRationale(
requireActivity(),
Manifest.permission.POST_NOTIFICATIONS
)
) {
showPermissionDialog()
if (!shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) {
showNotificationPermissionDialog()
} else {
viewModel.insertCertificateInitInfo()
}
Expand Down Expand Up @@ -304,7 +305,7 @@ class CertificateFragment : Fragment() {
if ((viewModel.startImageList.value?.size ?: 0) >= IMAGE_PICK_MAX) {
return@setOnClickListener
}
pickMultipleMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
requestPermission()
}
}

Expand Down Expand Up @@ -387,19 +388,112 @@ class CertificateFragment : Fragment() {

//알림 권한 교육용 팝업
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
fun showPermissionDialog() {
fun showNotificationPermissionDialog() {
MaterialAlertDialogBuilder(requireContext())
.setTitle(getString(R.string.certificate_scr_dialog_title))
.setMessage(getString(R.string.certificate_scr_dialog_message))
.setPositiveButton(getString(R.string.certificate_scr_dialog_positive_button)) { dialogInterface: DialogInterface, i: Int ->
permissionResult.launch(
Manifest.permission.POST_NOTIFICATIONS
)
navigateToAppSetting()
}
.setNegativeButton(getString(R.string.certificate_scr_dialog_negative_button)) { dialogInterface: DialogInterface, i: Int ->
viewModel.insertCertificateInitInfo()
}.show()
}
private val multiplePermissionsLauncher = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
permissions.entries.forEach { (permission, isGranted) ->
when(permission){
Manifest.permission.READ_EXTERNAL_STORAGE ->{
if (isGranted){
pickMultipleMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
}else{
if (!shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE)){
showPermissionSettiongDialog()
}else{
showStoragePermissionDialog()
}
}
}
Manifest.permission.READ_MEDIA_IMAGES -> {
if (isGranted){
pickMultipleMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
}else{
if (!shouldShowRequestPermissionRationale(Manifest.permission.READ_MEDIA_IMAGES)){
showPermissionSettiongDialog()
}else{
showPermissionSettiongDialog()
}
}
}
}
}
}

fun showStoragePermissionDialog() {
MaterialAlertDialogBuilder(requireContext())
.setTitle(getString(R.string.permission_dialog_scr_guide))
.setMessage(getString(R.string.permission_dialog_scr_guide_message))
.setPositiveButton(getString(R.string.permission_dialog_scr_guide_select)) { dialogInterface: DialogInterface, i: Int ->
//권한 물어보기
requestPermission()
}
.setNegativeButton(getString(R.string.permission_dialog_scr_guide_cancel)) { dialogInterface: DialogInterface, i: Int ->
dialogInterface.cancel()
}.show()
}


//권한 설정 화면을 위한 다이얼로그 띄우는 메서드
fun showPermissionSettiongDialog() {
MaterialAlertDialogBuilder(requireContext())
.setMessage(getString(R.string.permission_dialog_scr_guide_setting))
.setPositiveButton(getString(R.string.permission_dialog_scr_guide_setting_select)) { dialogInterface: DialogInterface, i: Int ->
navigateToAppSetting()
}
.setNegativeButton(getString(R.string.permission_dialog_scr_guide_setting_cancel)) { dialogInterface: DialogInterface, i: Int ->
dialogInterface.cancel()
}.show()
}

//앱 권한 세팅 화면으로 이동키시는 메서드
fun navigateToAppSetting() {
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
data = Uri.fromParts("package", requireContext().packageName, null)
}
startActivity(intent)
}
//권한 확인 및 요청 메서드
fun requestPermission(){
if (
Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU &&
(ContextCompat.checkSelfPermission(requireContext(),
Manifest.permission.READ_MEDIA_IMAGES
) == PermissionChecker.PERMISSION_GRANTED)
) {
pickMultipleMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
} else if (
Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
&& ContextCompat.checkSelfPermission(requireContext(),
Manifest.permission.READ_MEDIA_IMAGES
) == PermissionChecker.PERMISSION_DENIED
) {
// 34이상이고 READ_MEDIA_VISUAL_USER_SELECTED만 허용되어있다면 권한 물어보는 다이얼로그를 띄워야함.
/*showPermissionDialog()*/
multiplePermissionsLauncher.launch(arrayOf(Manifest.permission.READ_MEDIA_IMAGES))
} else if (ContextCompat.checkSelfPermission(requireContext(),
Manifest.permission.READ_EXTERNAL_STORAGE
) == PermissionChecker.PERMISSION_GRANTED
) {
pickMultipleMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
} else {
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2){
//READ_EXTERNAL_STORAGE 권한 요청
multiplePermissionsLauncher.launch(arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE))
}else{
multiplePermissionsLauncher.launch(arrayOf(Manifest.permission.READ_MEDIA_IMAGES))
}
}
}

fun loadingTaskSettingStart() {
binding.run {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,43 +1,61 @@
package com.fitmate.fitmate.presentation.ui.onboarding

import android.Manifest
import android.content.Context
import android.os.Build
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.RequiresApi
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import com.fitmate.fitmate.R
import com.fitmate.fitmate.databinding.FragmentOnboardingPermissionBinding
import com.fitmate.fitmate.presentation.viewmodel.OnBoardingViewModel
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class OnBoardingPermissionFragment: Fragment() {
val permissions =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU){
arrayOf(Manifest.permission.POST_NOTIFICATIONS,Manifest.permission.READ_MEDIA_IMAGES)
}else{
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE)
}

private lateinit var binding: FragmentOnboardingPermissionBinding
private val viewModel: OnBoardingViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentOnboardingPermissionBinding.inflate(layoutInflater)
binding.view = this
return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

binding.buttonFragmentOnboardingPermissionToLogin.setOnClickListener {
//권한 물어보고 로그인 화면으로 이동
//TODO 권한 리스트들 물어보기
//TODO 온보딩 완료 값 로컬에 저장
/*findNavController().navigate(R.id.action_onBoardingPermissionFragment_to_loginFragment)*/
viewModel.onboardingInquiryStatus.observe(viewLifecycleOwner){
if (it){
findNavController().navigate(R.id.action_onBoardingPermissionFragment_to_homeFragment)
}
}
}

fun setButtonClick() {
multiplePermissionsLauncher.launch(permissions)
}

private fun onBoardingFinished() {
val sharedPref = activity?.getSharedPreferences("onBoarding", Context.MODE_PRIVATE)
val editor = sharedPref?.edit()
editor?.putBoolean("Finished", true)
editor?.apply()
val multiplePermissionsLauncher = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
permissions.entries.forEach { (permission, isGranted) -> }
viewModel.saveOnBoardingStateInPref()
}

}

Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,9 @@ import com.fitmate.fitmate.databinding.FragmentOnboardingThirdBinding
import com.fitmate.fitmate.presentation.viewmodel.OnBoardingViewModel
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class OnBoardingThirdFragment: Fragment(R.layout.fragment_onboarding_third) {

class OnBoardingThirdFragment: Fragment() {
private lateinit var binding: FragmentOnboardingThirdBinding
private val viewModel: OnBoardingViewModel by viewModels()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
Expand All @@ -27,22 +26,9 @@ class OnBoardingThirdFragment: Fragment(R.layout.fragment_onboarding_third) {

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

observeSavePref()
initViews()
}

private fun observeSavePref() {
viewModel.onboardingInquiryStatus.observe(viewLifecycleOwner) {
if (it) {
findNavController().navigate(R.id.action_onboardingContainerFragment_to_homeFragment)
}
}
}

private fun initViews() {
binding.buttonFinishFragment.setOnClickListener {
viewModel.saveOnBoardingStateInPref()
findNavController().navigate(R.id.action_onboardingContainerFragment_to_onBoardingPermissionFragment)
}
}

}
Loading