diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/alarm/AlarmListActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/alarm/AlarmListActivity.kt index 5bd255a..7f83ed8 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/alarm/AlarmListActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/alarm/AlarmListActivity.kt @@ -2,13 +2,20 @@ package kr.co.vividnext.sodalive.mypage.alarm import android.Manifest import android.annotation.SuppressLint +import android.app.AlarmManager +import android.content.Context import android.content.Intent +import android.net.Uri import android.os.Build import android.os.Bundle import android.provider.Settings import android.view.View import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels +import androidx.annotation.RequiresApi +import androidx.core.app.NotificationManagerCompat import androidx.recyclerview.widget.LinearLayoutManager import com.gun0912.tedpermission.PermissionListener import com.gun0912.tedpermission.normal.TedPermission @@ -31,12 +38,74 @@ class AlarmListActivity : BaseActivity( private lateinit var alarmAdapter: AlarmAdapter private lateinit var loadingDialog: LoadingDialog + private lateinit var requestOverlayPermissionLauncher: ActivityResultLauncher + private lateinit var requestExactAlarmPermissionLauncher: ActivityResultLauncher + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + + checkAndRequestOverlayPermission() + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + checkAndRequestExactAlarmPermission() + } + checkPermissions() bindData() } + private fun checkAndRequestOverlayPermission() { + requestOverlayPermissionLauncher = registerForActivityResult( + ActivityResultContracts.StartActivityForResult() + ) { + if (!Settings.canDrawOverlays(this)) { + Toast.makeText( + this, + "알람서비스를 이용하시려면 다른 앱 위에 표시 권한을 허용하셔야 합니다.", + Toast.LENGTH_SHORT + ).show() + + finish() + } + } + + if (!Settings.canDrawOverlays(this)) { + Toast.makeText( + this, + "알람서비스를 이용하시려면 다른 앱 위에 표시 권한을 허용하셔야 합니다.", + Toast.LENGTH_SHORT + ).show() + val intent = Intent( + Settings.ACTION_MANAGE_OVERLAY_PERMISSION, + Uri.parse("package:$packageName") + ) + requestOverlayPermissionLauncher.launch(intent) + } + } + + @RequiresApi(Build.VERSION_CODES.S) + private fun checkAndRequestExactAlarmPermission() { + requestExactAlarmPermissionLauncher = registerForActivityResult( + ActivityResultContracts.StartActivityForResult() + ) { + val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager + if (!alarmManager.canScheduleExactAlarms()) { + Toast.makeText( + this, + "알람서비스를 이용하시려면 권한을 허용하셔야 합니다.", + Toast.LENGTH_SHORT + ).show() + finish() + } + } + + val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager + if (!alarmManager.canScheduleExactAlarms()) { + val intent = Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM) + requestExactAlarmPermissionLauncher.launch(intent) + } + } + override fun setupView() { loadingDialog = LoadingDialog(this, layoutInflater) @@ -125,21 +194,9 @@ class AlarmListActivity : BaseActivity( private fun checkPermissions() { val permissions = mutableListOf() - if (!Settings.canDrawOverlays(this)) { - Toast.makeText( - applicationContext, - "알람서비스를 이용하시려면 다른 앱 위에 표시 권한을 허용하셔야 합니다.", - Toast.LENGTH_LONG - ).show() - permissions.add(Manifest.permission.SYSTEM_ALERT_WINDOW) - } - - if (Build.VERSION.SDK_INT == Build.VERSION_CODES.S) { - permissions.add(Manifest.permission.SCHEDULE_EXACT_ALARM) - } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { permissions.add(Manifest.permission.USE_FULL_SCREEN_INTENT) + permissions.add(Manifest.permission.POST_NOTIFICATIONS) } if (permissions.isNotEmpty()) { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/splash/SplashActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/splash/SplashActivity.kt index 7e5f0bd..9f741bf 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/splash/SplashActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/splash/SplashActivity.kt @@ -40,9 +40,6 @@ class SplashActivity : BaseActivity(ActivitySplashBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) -// setLayoutParams(binding.ivText, start = 0, end = 0, top = 390, bottom = 0) -// setLayoutParams(binding.ivTextLogo, start = 0, end = 0, top = 0, bottom = 150) - setupRemoteConfig() binding.surfaceView.holder.addCallback(this) }