-
Notifications
You must be signed in to change notification settings - Fork 0
サマリー用通知の転送無視オプション追加 #299
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
サマリー用通知の転送無視オプション追加 #299
Conversation
WalkthroughこのPRは、アプリ単位で通知サマリーを無視するトグル機能を追加し、FilterConditionモデルとRoomスキーマを拡張、リポジトリとユースケースを更新し、UI(詳細画面)とサービス呼び出しをそれぞれ連携させる変更を導入します。 Changes
Sequence Diagram(s)sequenceDiagram
participant UI as DetailScreen / DetailViewModel
participant Domain as ToggleIgnoreSummaryUseCase
participant Repo as AppRepository
participant DB as Room Database
UI->>Repo: getFilterConditionOrDefault(packageName)
Repo->>DB: SELECT FilterCondition
DB-->>Repo: FilterCondition (targetPackageName,isIgnoreSummary,condition)
Repo-->>UI: FilterCondition
UI->>UI: 表示(チェックボックスに isIgnoreSummary を反映)
Note over UI,Domain: ユーザーがチェックボックスを切替
UI->>Domain: invoke(ToggleIgnoreSummaryUseCase.Args(target))
Domain->>Repo: getFilterConditionOrDefault(packageName)
Repo->>DB: SELECT FilterCondition
DB-->>Repo: current FilterCondition
Repo-->>Domain: current FilterCondition
Domain->>Domain: invert isIgnoreSummary
Domain->>Repo: saveFilterCondition(updated FilterCondition)
Repo->>DB: UPDATE/INSERT FilterCondition
Domain-->>UI: 更新後の Boolean (isIgnoreSummary)
UI->>UI: UI状態を更新
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 分 Possibly related PRs
詩
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In
@AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/NotifyTargetAppNotificationUseCaseImpl.kt:
- Around line 28-32: The current code in NotifyTargetAppNotificationUseCaseImpl
constructs Regex(pattern = cond.condition) and calls matches("$title $message"),
which can throw PatternSyntaxException and treats invalid patterns as failures
via the outer runCatching; change it so invalid regexes are caught and treated
as "skip" (return Result.success(Unit)) rather than a failure—wrap the Regex
construction in a try/catch (or runCatching) that logs the invalid pattern and
returns success on failure, and replace matches(...) with
containsMatchIn("$title $message") to perform a partial match check; reference
the cond.condition usage and the regex check block when applying this fix.
🧹 Nitpick comments (4)
AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/ToggleIgnoreSummaryUseCase.kt (1)
5-8:operatorキーワードの追加を検討してください。他のユースケース(
DeleteTargetAppUseCase、AddTargetAppUseCase、SaveFilterConditionUseCaseなど)と一貫性を保つため、invokeメソッドにoperator修飾子を追加することをお勧めします。これにより、呼び出し側でuseCase(args)という自然な構文が使えるようになります。♻️ 提案する修正
interface ToggleIgnoreSummaryUseCase { - suspend fun invoke(args: Args): Boolean + suspend operator fun invoke(args: Args): Boolean data class Args(val target: InstalledApp) }AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/DetailViewModel.kt (1)
46-51: トグル処理の実装を確認してください。実装は正しく動作しますが、
toggleIgnoreSummaryUseCaseの呼び出しが失敗した場合のエラーハンドリングがありません。既存のdeleteTarget()やsave()メソッドも同様のパターンですが、ユーザーに通知が転送されなくなるような重要な設定変更では、失敗時にユーザーへフィードバックを表示することを検討してください。♻️ エラーハンドリングの追加例
fun onIgnoreSummaryChanged() { viewModelScope.launch { - val isIgnoreSummary = toggleIgnoreSummaryUseCase.invoke(ToggleIgnoreSummaryUseCase.Args(target)) - _uiState.update { it.copy(isIgnoreSummary = isIgnoreSummary) } + runCatching { + toggleIgnoreSummaryUseCase.invoke(ToggleIgnoreSummaryUseCase.Args(target)) + }.onSuccess { isIgnoreSummary -> + _uiState.update { it.copy(isIgnoreSummary = isIgnoreSummary) } + }.onFailure { + _uiState.update { it.copy(message = Message.Error) } + } } }AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/SaveFilterConditionUseCaseImpl.kt (1)
12-18:target変数の使用が一貫していません。12行目で
targetを定義していますが、16行目ではargs.target.packageNameを再度呼び出しています。一貫性のためにtargetを使用してください。🔧 提案する修正
override suspend operator fun invoke(args: Args) { val target = args.target.packageName val data = appRepository.getFilterConditionOrDefault(target) appRepository.saveFilterCondition( FilterCondition( - targetPackageName = args.target.packageName, + targetPackageName = target, condition = args.condition ?: "", isIgnoreSummary = data.isIgnoreSummary ) ) }AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/DetailScreen.kt (1)
175-183: ハードコードされた文字列をstring resourceに移動してください。182行目の
"サマリーは無視する。"は、他のUI文字列と同様にstringResource()を使用してリソースファイルに移動すべきです。これにより、i18n/l10nの一貫性が保たれます。🔧 提案する修正
strings.xmlに追加:<string name="ignore_summary">サマリーは無視する。</string>Row( verticalAlignment = Alignment.CenterVertically ) { Checkbox( checked = isIgnoreSummary, onCheckedChange = { onIgnoreSummaryChanged() }, ) - Text("サマリーは無視する。") + Text(stringResource(id = R.string.ignore_summary)) }
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (19)
AndroidApp/.idea/inspectionProfiles/Project_Default.xmlAndroidApp/app/src/main/kotlin/me/nya_n/notificationnotifier/App.ktAndroidApp/app/src/main/kotlin/me/nya_n/notificationnotifier/services/NotificationService.ktAndroidApp/data/repository/schemas/me.nya_n.notificationnotifier.data.repository.source.DB/2.jsonAndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/AppRepository.ktAndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/impl/AppRepositoryImpl.ktAndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/source/DB.ktAndroidApp/domain/src/androidTest/java/me/nya_n/notificationnotifier/UseCaseTest.ktAndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/LoadFilterConditionUseCase.ktAndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/NotifyTargetAppNotificationUseCase.ktAndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/ToggleIgnoreSummaryUseCase.ktAndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/LoadFilterConditionUseCaseImpl.ktAndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/NotifyTargetAppNotificationUseCaseImpl.ktAndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/SaveFilterConditionUseCaseImpl.ktAndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/ToggleIgnoreSummaryUseCaseImpl.ktAndroidApp/model/src/main/kotlin/me/nya_n/notificationnotifier/model/FilterCondition.ktAndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/DetailScreen.ktAndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/DetailViewModel.ktAndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/UiState.kt
🧰 Additional context used
🧬 Code graph analysis (10)
AndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/impl/AppRepositoryImpl.kt (2)
AndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/AppRepository.kt (1)
getFilterCondition(12-12)AndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/source/FilterConditionDao.kt (1)
get(14-15)
AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/UiState.kt (5)
AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/app/UiState.kt (1)
isShowRequirePackageVisibilityDialog(3-6)AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/app/AppViewModel.kt (1)
it(28-33)AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/app/AppScreen.kt (1)
uiState(40-107)AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/target/TargetViewModel.kt (2)
it(38-38)uiState(24-33)AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/target/UiState.kt (1)
items(6-11)
AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/DetailViewModel.kt (1)
AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/target/TargetViewModel.kt (1)
uiState(24-33)
AndroidApp/model/src/main/kotlin/me/nya_n/notificationnotifier/model/FilterCondition.kt (1)
AndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/source/FilterConditionDao.kt (2)
onConflict(6-22)onConflict(8-9)
AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/NotifyTargetAppNotificationUseCase.kt (3)
AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/NotifyUseCase.kt (2)
invoke(3-5)invoke(4-4)AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/PackageVisibilityGrantedUseCase.kt (2)
invoke(3-5)invoke(4-4)AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/NotifyUseCaseImpl.kt (1)
invoke(18-34)
AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/ToggleIgnoreSummaryUseCase.kt (6)
AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/SaveFilterConditionUseCase.kt (2)
invoke(6-13)target(9-12)AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/AddTargetAppUseCase.kt (2)
invoke(6-8)invoke(7-7)AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/PackageVisibilityGrantedUseCase.kt (1)
invoke(3-5)AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/AddTargetAppUseCaseImpl.kt (1)
appRepository(7-13)AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/DeleteTargetAppUseCase.kt (1)
invoke(6-8)AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/CheckPackageVisibilityUseCase.kt (1)
invoke(3-5)
AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/LoadFilterConditionUseCase.kt (1)
AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/SaveFilterConditionUseCase.kt (1)
invoke(6-13)
AndroidApp/domain/src/androidTest/java/me/nya_n/notificationnotifier/UseCaseTest.kt (2)
AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/ImportDataUseCaseImpl.kt (1)
appRepository(40-42)AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/SaveFilterConditionUseCase.kt (1)
invoke(6-13)
AndroidApp/app/src/main/kotlin/me/nya_n/notificationnotifier/services/NotificationService.kt (2)
AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/PackageVisibilityGrantedUseCase.kt (1)
invoke(3-5)AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/NotifyUseCaseImpl.kt (1)
invoke(18-34)
AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/SaveFilterConditionUseCaseImpl.kt (1)
AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/SaveFilterConditionUseCase.kt (1)
target(9-12)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (23)
AndroidApp/.idea/inspectionProfiles/Project_Default.xml (1)
52-55: PRの目的と関連性がない変更この変更は
PreviewParameterProviderOnFirstParameterインスペクションツールの追加ですが、PRの目的「サマリー用通知の転送無視オプション追加」とは無関係に見えます。
.idea/フォルダ内のファイルはIDEによって自動生成されることが多く、意図しない変更が含まれる可能性があります。この変更が意図的なものかどうか確認してください。意図的でない場合は、このファイルをコミットから除外することを検討してください。AndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/AppRepository.kt (1)
12-13: LGTM!既存の
getFilterConditionと並んで、デフォルト値を返す非null版のメソッドが追加されています。命名規則(OrDefaultサフィックス)も明確で、インターフェースの一貫性が保たれています。AndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/impl/AppRepositoryImpl.kt (1)
29-31: LGTM!既存の
getFilterConditionメソッドを再利用しており、Elvis演算子でデフォルト値へのフォールバックが簡潔に実装されています。getFilterConditionが既にDispatchers.IOを処理しているため、追加のディスパッチャー切り替えは不要です。AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/ToggleIgnoreSummaryUseCaseImpl.kt (1)
8-21: LGTM!トグルロジックが正しく実装されています:現在の状態を取得 → 反転 → 保存 → 新しい値を返す。既存の
conditionフィールドも適切に保持されています。インターフェースに
operatorキーワードを追加する場合は、こちらもoverride suspend operator fun invoke(args: Args)に更新してください。AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/UiState.kt (1)
6-8: LGTM!新しい
isIgnoreSummaryプロパティが適切に追加されています。デフォルト値false(デフォルトでは無視しない)は妥当であり、日本語コメントも他のプロパティと一貫しています。AndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/source/DB.kt (2)
16-20: LGTM! AutoMigrationの設定が適切です。新しいカラム
is_ignore_summaryの追加に対して、Room AutoMigrationを使用しています。FilterCondition.ktでdefaultValue = "0"が設定されているため、既存データの移行も正しく処理されます。
64-64: 未使用の例外変数を_に変更する修正は適切です。Kotlinの慣用的な書き方です。
AndroidApp/model/src/main/kotlin/me/nya_n/notificationnotifier/model/FilterCondition.kt (2)
17-20: LGTM! 新しいプロパティの定義が適切です。
isIgnoreSummaryプロパティに対して、Room の@ColumnInfoと Gson の@SerializedNameアノテーションが正しく設定されています。defaultValue = "0"により、既存データの移行時にデフォルト値が適用されます。
25-33: ファクトリメソッドの追加は良い設計です。
default()ファクトリメソッドにより、デフォルト値を持つFilterConditionの生成が一貫して行えます。AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/LoadFilterConditionUseCase.kt (1)
7-8: LGTM! 戻り値の型変更が適切です。
StringからFilterConditionへの戻り値型の変更により、isIgnoreSummaryを含む完全なフィルタ条件情報を取得できるようになりました。これはドメイン層での適切な抽象化です。AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/DetailViewModel.kt (1)
26-36: LGTM! 初期化時のデータ読み込みが適切です。
loadFilterConditionUseCaseからFilterConditionを取得し、isIgnoreSummaryとconditionの両方を UI 状態に反映しています。AndroidApp/data/repository/schemas/me.nya_n.notificationnotifier.data.repository.source.DB/2.json (1)
1-68: LGTM! Room スキーマファイルが正しく生成されています。
conditionsテーブルにis_ignore_summaryカラム(INTEGER NOT NULL DEFAULT 0)が追加され、FilterCondition.ktのモデル定義と一致しています。exportSchema = trueにより生成されたこのファイルは、AutoMigration の検証に使用されます。AndroidApp/app/src/main/kotlin/me/nya_n/notificationnotifier/App.kt (2)
24-38: LGTM!
ToggleIgnoreSummaryUseCaseのインポートとDI設定が正しく追加されています。
89-109: LGTM!
DetailViewModelへの依存性追加とToggleIgnoreSummaryUseCaseのファクトリバインディングが既存のパターンに従って正しく実装されています。AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/LoadFilterConditionUseCaseImpl.kt (1)
11-13: LGTM!戻り値の型を
StringからFilterConditionに変更し、デフォルト値を返すリポジトリメソッドを使用する実装は適切です。AndroidApp/domain/src/androidTest/java/me/nya_n/notificationnotifier/UseCaseTest.kt (2)
118-140: LGTM!テストが
FilterConditionの3つのフィールド(packageName、isIgnoreSummary、condition)を適切に検証しています。条件の追加・更新・サマリー条件の切り替えの各シナリオがカバーされています。
222-271: LGTM!バックアップ・復元テストが
isIgnoreSummaryフラグを適切に検証しています。バックアップ時の状態(true)が正しく復元されることを確認しています。AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/DetailScreen.kt (2)
66-79: LGTM!
DetailScreenからDetailContentへのプロパティの受け渡しが正しく実装されています。
217-248: LGTM!プレビューが
isIgnoreSummaryの両方の状態(true/false)を表示するように更新されています。AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/NotifyTargetAppNotificationUseCase.kt (1)
3-10: LGTM!
flagsパラメータの追加は実装と整合しており、インターフェースの変更も適切です。AndroidApp/app/src/main/kotlin/me/nya_n/notificationnotifier/services/NotificationService.kt (2)
17-18: コルーチンのライフサイクル管理が適切に実装されています。
JobをonDestroyでキャンセルすることで、サービス終了時に実行中のコルーチンが適切にクリーンアップされます。Also applies to: 25-28
30-36: LGTM!
sbn.notification.flagsを正しく取得し、ユースケースに渡しています。AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/NotifyTargetAppNotificationUseCaseImpl.kt (1)
34-37: サマリー通知の無視ロジックが適切に実装されています。
FLAG_GROUP_SUMMARYのビット演算チェックは正しく、isIgnoreSummaryとの組み合わせでグループサマリー通知を適切にフィルタリングしています。
| if (cond.condition.isNotEmpty()) { | ||
| val regex = Regex(pattern = cond.condition) | ||
| if (!regex.matches("$title $message")) { | ||
| return Result.success(Unit) | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
無効な正規表現パターンによる例外処理を検討してください。
Regex(pattern = cond.condition) は、ユーザーが無効な正規表現を入力した場合に PatternSyntaxException をスローします。runCatching でキャッチされますが、Result.failure が返却されるため、通知が失敗扱いになります。
また、matches() は文字列全体がパターンに一致する必要があります。部分一致を期待している場合は containsMatchIn() の使用を検討してください。
🔧 例外ハンドリングと部分一致の提案
if (cond.condition.isNotEmpty()) {
- val regex = Regex(pattern = cond.condition)
- if (!regex.matches("$title $message")) {
- return Result.success(Unit)
+ val regex = runCatching { Regex(pattern = cond.condition) }.getOrNull()
+ if (regex != null && !regex.containsMatchIn("$title $message")) {
+ return Result.success(Unit)
}
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| if (cond.condition.isNotEmpty()) { | |
| val regex = Regex(pattern = cond.condition) | |
| if (!regex.matches("$title $message")) { | |
| return Result.success(Unit) | |
| } | |
| if (cond.condition.isNotEmpty()) { | |
| val regex = runCatching { Regex(pattern = cond.condition) }.getOrNull() | |
| if (regex != null && !regex.containsMatchIn("$title $message")) { | |
| return Result.success(Unit) | |
| } |
🤖 Prompt for AI Agents
In
@AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/NotifyTargetAppNotificationUseCaseImpl.kt
around lines 28 - 32, The current code in NotifyTargetAppNotificationUseCaseImpl
constructs Regex(pattern = cond.condition) and calls matches("$title $message"),
which can throw PatternSyntaxException and treats invalid patterns as failures
via the outer runCatching; change it so invalid regexes are caught and treated
as "skip" (return Result.success(Unit)) rather than a failure—wrap the Regex
construction in a try/catch (or runCatching) that logs the invalid pattern and
returns success on failure, and replace matches(...) with
containsMatchIn("$title $message") to perform a partial match check; reference
the cond.condition usage and the regex check block when applying this fix.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/DetailScreen.kt (1)
175-183: アクセシビリティとUXの改善を推奨します。現在の実装では、チェックボックス自体をタップする必要があります。ラベルテキストをタップしてもトグルできるようにすると、操作性が向上します。
♻️ 提案する修正
- Row( - verticalAlignment = Alignment.CenterVertically - ) { - Checkbox( - checked = isIgnoreSummary, - onCheckedChange = { onIgnoreSummaryChanged() }, - ) - Text(stringResource(id = R.string.ignore_summaries)) - } + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.clickable { onIgnoreSummaryChanged() } + ) { + Checkbox( + checked = isIgnoreSummary, + onCheckedChange = null, + ) + Text(stringResource(id = R.string.ignore_summaries)) + }
Modifier.clickableを使用するには、以下のインポートを追加してください:import androidx.compose.foundation.clickable
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/DetailScreen.ktAndroidApp/ui/src/main/res/values-en/strings.xmlAndroidApp/ui/src/main/res/values/strings.xml
🧰 Additional context used
🧬 Code graph analysis (2)
AndroidApp/ui/src/main/res/values/strings.xml (2)
AndroidApp/app/build.gradle.kts (1)
resources(14-16)AndroidApp/ui/build.gradle.kts (1)
namespace(7-15)
AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/DetailScreen.kt (2)
AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/common/Category.kt (1)
Category(23-50)AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/DetailViewModel.kt (1)
onIgnoreSummaryChanged(46-51)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (5)
AndroidApp/ui/src/main/res/values/strings.xml (1)
37-37: LGTM!新しい文字列リソース
ignore_summariesが適切に追加されています。英語版の strings.xml にも対応する翻訳が存在することを確認しました。AndroidApp/ui/src/main/res/values-en/strings.xml (1)
13-13: LGTM!英語版の文字列リソースが日本語版と同じキー名で適切に追加されています。
AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/detail/DetailScreen.kt (3)
75-78: LGTM!UIステートとViewModelメソッドへの接続が適切に実装されています。
84-91: LGTM!
DetailContentの公開APIに新しいパラメータが適切に追加されています。
217-248: LGTM!プレビュー関数が両方の状態(チェック済み・未チェック)を適切にカバーしています。
Summary by CodeRabbit
リリースノート
✏️ Tip: You can customize this high-level summary in your review settings.