From 958244c9b28e11f3bc66402c136c91bd1a5fa1a2 Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 1 Dec 2025 21:36:56 +0900 Subject: [PATCH] =?UTF-8?q?AlarmListActivity=20=EB=AC=B8=EC=9E=90=EC=97=B4?= =?UTF-8?q?=20=EB=A6=AC=EC=86=8C=EC=8A=A4=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/mypage/alarm/AlarmAdapter.kt | 11 +++--- .../mypage/alarm/AlarmListActivity.kt | 34 +++++++++++-------- .../main/res/layout/activity_alarm_list.xml | 33 ++++++++++-------- app/src/main/res/values-en/strings.xml | 17 ++++++++++ app/src/main/res/values-ja/strings.xml | 17 ++++++++++ app/src/main/res/values/strings.xml | 17 ++++++++++ 6 files changed, 95 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/mypage/alarm/AlarmAdapter.kt b/app/src/main/java/kr/co/vividnext/sodalive/mypage/alarm/AlarmAdapter.kt index 77398ac6..1559b7d6 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/mypage/alarm/AlarmAdapter.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/mypage/alarm/AlarmAdapter.kt @@ -37,10 +37,13 @@ class AlarmAdapter( private val binding: ItemAlarmBinding ) : RecyclerView.ViewHolder(binding.root) { fun bind(alarm: Alarm) { + val context = binding.root.context binding.tvTitle.text = alarm.title - binding.tvAmpm.text = SimpleDateFormat("a", Locale.getDefault()) + val amPmPattern = context.getString(R.string.alarm_list_ampm_format) + binding.tvAmpm.text = SimpleDateFormat(amPmPattern, Locale.getDefault()) .format(alarm.time) - binding.tvTime.text = SimpleDateFormat("hh:mm", Locale.getDefault()) + val timePattern = context.getString(R.string.alarm_list_time_format) + binding.tvTime.text = SimpleDateFormat(timePattern, Locale.getDefault()) .format(alarm.time) binding.tvDays.text = if (alarm.days.isNotEmpty()) { alarm.getDaysText() @@ -52,9 +55,9 @@ class AlarmAdapter( val pattern = if ( currentCalendar.get(Calendar.YEAR) == alarmCalendar.get(Calendar.YEAR) ) { - "M월 d일 (E)" + context.getString(R.string.alarm_list_date_same_year_format) } else { - "yyyy년 M월 d일 (E)" + context.getString(R.string.alarm_list_date_diff_year_format) } SimpleDateFormat(pattern, Locale.getDefault()) 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 8f940793..43c43928 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 @@ -19,6 +19,7 @@ import androidx.core.app.NotificationManagerCompat import androidx.recyclerview.widget.LinearLayoutManager import com.gun0912.tedpermission.PermissionListener import com.gun0912.tedpermission.normal.TedPermission +import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.base.BaseActivity import kr.co.vividnext.sodalive.base.SodaDialog import kr.co.vividnext.sodalive.common.Constants @@ -27,6 +28,7 @@ import kr.co.vividnext.sodalive.databinding.ActivityAlarmListBinding import kr.co.vividnext.sodalive.extensions.moneyFormat import kr.co.vividnext.sodalive.mypage.alarm.db.Alarm import org.koin.android.ext.android.inject +import androidx.core.net.toUri class AlarmListActivity : BaseActivity( ActivityAlarmListBinding::inflate @@ -55,13 +57,14 @@ class AlarmListActivity : BaseActivity( } private fun checkAndRequestOverlayPermission() { + val permissionMessage = getString(R.string.alarm_list_overlay_permission_required) requestOverlayPermissionLauncher = registerForActivityResult( ActivityResultContracts.StartActivityForResult() ) { if (!Settings.canDrawOverlays(this)) { Toast.makeText( this, - "알람서비스를 이용하시려면 다른 앱 위에 표시 권한을 허용하셔야 합니다.", + permissionMessage, Toast.LENGTH_SHORT ).show() @@ -72,12 +75,12 @@ class AlarmListActivity : BaseActivity( if (!Settings.canDrawOverlays(this)) { Toast.makeText( this, - "알람서비스를 이용하시려면 다른 앱 위에 표시 권한을 허용하셔야 합니다.", + permissionMessage, Toast.LENGTH_SHORT ).show() val intent = Intent( Settings.ACTION_MANAGE_OVERLAY_PERMISSION, - Uri.parse("package:$packageName") + "package:$packageName".toUri() ) requestOverlayPermissionLauncher.launch(intent) } @@ -85,6 +88,7 @@ class AlarmListActivity : BaseActivity( @RequiresApi(Build.VERSION_CODES.S) private fun checkAndRequestExactAlarmPermission() { + val permissionMessage = getString(R.string.alarm_list_exact_alarm_permission_required) requestExactAlarmPermissionLauncher = registerForActivityResult( ActivityResultContracts.StartActivityForResult() ) { @@ -92,7 +96,7 @@ class AlarmListActivity : BaseActivity( if (!alarmManager.canScheduleExactAlarms()) { Toast.makeText( this, - "알람서비스를 이용하시려면 권한을 허용하셔야 합니다.", + permissionMessage, Toast.LENGTH_SHORT ).show() finish() @@ -109,7 +113,7 @@ class AlarmListActivity : BaseActivity( override fun setupView() { loadingDialog = LoadingDialog(this, layoutInflater) - binding.tvBack.text = "보이스 모닝콜 등록" + binding.tvBack.text = getString(R.string.alarm_list_title) binding.tvBack.setOnClickListener { finish() } binding.ivPlus.setOnClickListener { startActivity( @@ -209,7 +213,7 @@ class AlarmListActivity : BaseActivity( } }) .setDeniedMessage( - "권한을 거부하시면 알람서비스를 이용하실 수 없습니다." + getString(R.string.alarm_list_post_notification_denied) ) .setPermissions(*permissions.toTypedArray()) .check() @@ -220,19 +224,19 @@ class AlarmListActivity : BaseActivity( SodaDialog( this, layoutInflater, - title = "알림", - desc = "알람을 삭제하시겠습니까?", - confirmButtonTitle = "삭제", + title = getString(R.string.dialog_alert_title), + desc = getString(R.string.alarm_list_delete_desc), + confirmButtonTitle = getString(R.string.confirm_delete_title), confirmButtonClick = { alarmViewModel.delete(alarm) Toast.makeText( applicationContext, - "알람이 삭제되었습니다.", + getString(R.string.alarm_list_delete_toast), Toast.LENGTH_SHORT ).show() adapterRefresh() }, - cancelButtonTitle = "취소", + cancelButtonTitle = getString(R.string.cancel), ).show(screenWidth) } @@ -240,11 +244,11 @@ class AlarmListActivity : BaseActivity( SodaDialog( this, layoutInflater, - title = "알림", - desc = "추가 슬롯을 구매하시겠습니까?", - confirmButtonTitle = "구매", + title = getString(R.string.dialog_alert_title), + desc = getString(R.string.alarm_list_buy_desc), + confirmButtonTitle = getString(R.string.alarm_list_buy_confirm), confirmButtonClick = { viewModel.buyExtraSlot() }, - cancelButtonTitle = "취소", + cancelButtonTitle = getString(R.string.cancel), ).show(screenWidth) } } diff --git a/app/src/main/res/layout/activity_alarm_list.xml b/app/src/main/res/layout/activity_alarm_list.xml index d5081a63..4f54c199 100644 --- a/app/src/main/res/layout/activity_alarm_list.xml +++ b/app/src/main/res/layout/activity_alarm_list.xml @@ -28,7 +28,7 @@ android:textSize="18.3sp" app:drawableStartCompat="@drawable/ic_back" tools:ignore="RelativeOverlap" - tools:text="보이스온" /> + tools:text="@string/alarm_list_title" /> - + @@ -107,9 +108,10 @@ android:id="@+id/tv_infinity" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginStart="4dp" android:fontFamily="@font/gmarket_sans_bold" android:gravity="center" - android:text=" 무제한" + android:text="@string/alarm_extra_slot_unlimited" android:textColor="@color/color_ff5c49" android:textSize="14.7sp" android:visibility="gone" /> @@ -117,9 +119,10 @@ @@ -132,7 +135,7 @@ android:layout_height="match_parent" android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" - android:text="알람이 없습니다" + android:text="@string/alarm_list_empty" android:textColor="@android:color/darker_gray" android:textSize="18sp" android:visibility="gone" /> diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index acf42bad..ed342f72 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -436,4 +436,21 @@ hh:mm MMM d Stop alarm button + Set Voice morning call + To use the alarm service, allow display over other apps. + To use the alarm service, allow the exact alarm permission. + You cannot use the alarm service if you deny the permission. + Delete this alarm? + Alarm deleted. + Purchase an extra slot? + Purchase + ※ Only owned content can be set as an alarm. Please purchase the content in the market before setting an alarm. + No alarms + a + hh:mm + MMM d (EEE) + yyyy MMM d (EEE) + to get + unlimited + slot(s) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 56f4ccf3..6e4e74a5 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -436,4 +436,21 @@ hh:mm M月 d日 アラーム停止ボタン + ボイスモーニングコール登録 + アラームサービスを利用するには、他のアプリの上に表示する権限を許可してください。 + アラームサービスを利用するには、権限を許可してください。 + 権限を拒否するとアラームサービスを利用できません。 + アラームを削除しますか? + アラームを削除しました。 + 追加スロットを購入しますか? + 購入 + ※所有中のコンテンツのみアラームコンテンツに設定できます。アラーム設定前にコンテンツマーケットで目的のコンテンツを購入(所有)してください。 + アラームがありません + a + hh:mm + M月 d日 (E) + yyyy年 M月 d日 (E) + + 無制限 + スロットを購入 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ed293259..850aba14 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -435,4 +435,21 @@ hh:mm MM월 dd일 알람 끄기 버튼 + 보이스 모닝콜 등록 + 알람서비스를 이용하시려면 다른 앱 위에 표시 권한을 허용하셔야 합니다. + 알람서비스를 이용하시려면 권한을 허용하셔야 합니다. + 권한을 거부하시면 알람서비스를 이용하실 수 없습니다. + 알람을 삭제하시겠습니까? + 알람이 삭제되었습니다. + 추가 슬롯을 구매하시겠습니까? + 구매 + ※ 소장중인 콘텐츠만 알람 콘텐츠로 설정할 수 있습니다. 알람 설정 전 콘텐츠 마켓에서 원하는 콘텐츠를 먼저 구매(소장)하세요. + 알람이 없습니다 + a + hh:mm + M월 d일 (E) + yyyy년 M월 d일 (E) + 으로 + 무제한 + 슬롯 구매하기