From c6463b9a8965a49e03eb2ebd85951a9d32cea0b6 Mon Sep 17 00:00:00 2001 From: Takuya Nishizawa Date: Sun, 18 Jan 2026 05:26:09 +0900 Subject: [PATCH 1/8] =?UTF-8?q?Wi-Fi=E6=8E=A5=E7=B6=9A=E6=99=82=E3=81=AE?= =?UTF-8?q?=E3=81=BF=E3=81=AE=E8=A8=AD=E5=AE=9A=E9=A0=85=E7=9B=AE=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/screen/settings/SettingsScreen.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsScreen.kt b/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsScreen.kt index 20bcdd4e..cd017896 100644 --- a/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsScreen.kt +++ b/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsScreen.kt @@ -7,6 +7,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth @@ -23,6 +24,7 @@ import androidx.compose.material.icons.outlined.CloudDownload import androidx.compose.material.icons.outlined.CloudUpload import androidx.compose.material.icons.outlined.Code import androidx.compose.material.icons.outlined.Devices +import androidx.compose.material3.Checkbox import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.SnackbarHostState @@ -216,6 +218,15 @@ private fun NotifySettings( text = stringResource(id = R.string.notify_test), onClick = onNotifyTest ) + Row( + verticalAlignment = Alignment.CenterVertically + ) { + Checkbox( + checked = false, + onCheckedChange = { } + ) + Text("Wi-Fi接続時のみ転送する。") + } } /** その他の項目 From 72cc7c3aa3621f48710c999a5d1030af0bc2c47c Mon Sep 17 00:00:00 2001 From: Takuya Nishizawa Date: Sun, 18 Jan 2026 05:34:15 +0900 Subject: [PATCH 2/8] =?UTF-8?q?ui=E6=9B=B4=E6=96=B0=E5=87=A6=E7=90=86?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/screen/settings/SettingsScreen.kt | 18 ++++++++++++++---- .../ui/screen/settings/SettingsViewModel.kt | 4 ++++ .../ui/screen/settings/UiState.kt | 3 ++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsScreen.kt b/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsScreen.kt index cd017896..0c6bbbb5 100644 --- a/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsScreen.kt +++ b/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsScreen.kt @@ -117,6 +117,8 @@ fun SettingsScreen( versionName = uiState.appConfig.versionString, onValueChange = { viewModel.updateAddress(it) }, onNotifyTest = { viewModel.notifyTest() }, + isWifiOnlyNotificationEnabled = uiState.isWifiOnlyNotificationEnabled, + onWifiOnlySettingChanged = { viewModel.updateWifiOnlySetting(it) }, onExportData = { viewModel.event(UiEvent.ExportData()) }, onImportData = { viewModel.event(UiEvent.ImportData()) }, onLicense = { navController.navigate(Screen.License.route) }, @@ -132,6 +134,8 @@ fun SettingsContent( versionName: String, onValueChange: (String) -> Unit, onNotifyTest: () -> Unit, + isWifiOnlyNotificationEnabled: Boolean, + onWifiOnlySettingChanged: (Boolean) -> Unit, onExportData: () -> Unit, onImportData: () -> Unit, onLicense: () -> Unit, @@ -149,7 +153,9 @@ fun SettingsContent( NotifySettings( address = address, onValueChange = onValueChange, - onNotifyTest = onNotifyTest + onNotifyTest = onNotifyTest, + isWifiOnlyNotificationEnabled = isWifiOnlyNotificationEnabled, + onWifiOnlySettingChanged = onWifiOnlySettingChanged ) OtherSettings( onExportData = onExportData, @@ -178,7 +184,9 @@ fun SettingsContent( private fun NotifySettings( address: String, onValueChange: (String) -> Unit, - onNotifyTest: () -> Unit + onNotifyTest: () -> Unit, + isWifiOnlyNotificationEnabled: Boolean, + onWifiOnlySettingChanged: (Boolean) -> Unit ) { val keyboardController = LocalSoftwareKeyboardController.current val focusManager = LocalFocusManager.current @@ -222,8 +230,8 @@ private fun NotifySettings( verticalAlignment = Alignment.CenterVertically ) { Checkbox( - checked = false, - onCheckedChange = { } + checked = isWifiOnlyNotificationEnabled, + onCheckedChange = onWifiOnlySettingChanged ) Text("Wi-Fi接続時のみ転送する。") } @@ -304,6 +312,8 @@ private fun SettingsPreview() { versionName = "1.0", onValueChange = { }, onNotifyTest = { }, + isWifiOnlyNotificationEnabled = true, + onWifiOnlySettingChanged = { }, onExportData = { }, onImportData = { }, onLicense = { }, diff --git a/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsViewModel.kt b/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsViewModel.kt index f32fc666..530fef6a 100644 --- a/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsViewModel.kt +++ b/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsViewModel.kt @@ -59,6 +59,10 @@ class SettingsViewModel( } } + fun updateWifiOnlySetting(isWifiOnlyNotificationEnabled: Boolean) { + _uiState.update { it.copy(isWifiOnlyNotificationEnabled = isWifiOnlyNotificationEnabled) } + } + /** バックアップのために外部ストレージにデータを保存 */ fun exportData(uri: Uri?) { if (uri == null) { diff --git a/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/UiState.kt b/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/UiState.kt index b322643a..bb3e279b 100644 --- a/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/UiState.kt +++ b/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/UiState.kt @@ -6,5 +6,6 @@ import me.nya_n.notificationnotifier.model.Message data class UiState( val appConfig: AppConfig, val address: String = "", - val message: Message? = null + val message: Message? = null, + val isWifiOnlyNotificationEnabled: Boolean = false ) \ No newline at end of file From c5015d71fb34d242ede331bb2a9c9956691cfcb3 Mon Sep 17 00:00:00 2001 From: Takuya Nishizawa Date: Sun, 18 Jan 2026 05:52:55 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E3=81=AE=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=87=A6=E7=90=86=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/nya_n/notificationnotifier/App.kt | 9 ++++++- .../source/UserSettingsDataStore.kt | 25 +++++++++++-------- .../SaveWifiOnlyNotificationSettingUseCase.kt | 5 ++++ ...eWifiOnlyNotificationSettingUseCaseImpl.kt | 20 +++++++++++++++ .../nya_n/notificationnotifier/UseCaseTest.kt | 10 +++++--- .../model/UserSettings.kt | 6 +++-- .../ui/screen/settings/SettingsViewModel.kt | 3 +++ 7 files changed, 60 insertions(+), 18 deletions(-) create mode 100644 AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/SaveWifiOnlyNotificationSettingUseCase.kt create mode 100644 AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/SaveWifiOnlyNotificationSettingUseCaseImpl.kt diff --git a/AndroidApp/app/src/main/kotlin/me/nya_n/notificationnotifier/App.kt b/AndroidApp/app/src/main/kotlin/me/nya_n/notificationnotifier/App.kt index 01611226..63f66b46 100644 --- a/AndroidApp/app/src/main/kotlin/me/nya_n/notificationnotifier/App.kt +++ b/AndroidApp/app/src/main/kotlin/me/nya_n/notificationnotifier/App.kt @@ -23,6 +23,7 @@ import me.nya_n.notificationnotifier.domain.usecase.NotifyUseCase import me.nya_n.notificationnotifier.domain.usecase.PackageVisibilityGrantedUseCase import me.nya_n.notificationnotifier.domain.usecase.SaveAddressUseCase import me.nya_n.notificationnotifier.domain.usecase.SaveFilterConditionUseCase +import me.nya_n.notificationnotifier.domain.usecase.SaveWifiOnlyNotificationSettingUseCase import me.nya_n.notificationnotifier.domain.usecase.ToggleIgnoreSummaryUseCase import me.nya_n.notificationnotifier.domain.usecase.impl.AddTargetAppUseCaseImpl import me.nya_n.notificationnotifier.domain.usecase.impl.CheckPackageVisibilityUseCaseImpl @@ -37,6 +38,7 @@ import me.nya_n.notificationnotifier.domain.usecase.impl.NotifyUseCaseImpl import me.nya_n.notificationnotifier.domain.usecase.impl.PackageVisibilityGrantedUseCaseImpl import me.nya_n.notificationnotifier.domain.usecase.impl.SaveAddressUseCaseImpl import me.nya_n.notificationnotifier.domain.usecase.impl.SaveFilterConditionUseCaseImpl +import me.nya_n.notificationnotifier.domain.usecase.impl.SaveWifiOnlyNotificationSettingUseCaseImpl import me.nya_n.notificationnotifier.domain.usecase.impl.ToggleIgnoreSummaryUseCaseImpl import me.nya_n.notificationnotifier.model.AppConfig import me.nya_n.notificationnotifier.ui.screen.app.AppViewModel @@ -91,7 +93,7 @@ class App : Application() { viewModel { SelectionViewModel(get(), get()) } viewModel { params -> DetailViewModel(get(), get(), get(), get(), params.get()) } viewModel { TargetViewModel(get()) } - viewModel { SettingsViewModel(get(), get(), get(), get(), get(), get()) } + viewModel { SettingsViewModel(get(), get(), get(), get(), get(), get(), get()) } // UseCase factory { AddTargetAppUseCaseImpl(get()) } @@ -110,5 +112,10 @@ class App : Application() { factory { SaveAddressUseCaseImpl(get()) } factory { SaveFilterConditionUseCaseImpl(get()) } factory { ToggleIgnoreSummaryUseCaseImpl(get()) } + factory { + SaveWifiOnlyNotificationSettingUseCaseImpl( + get() + ) + } } } \ No newline at end of file diff --git a/AndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/source/UserSettingsDataStore.kt b/AndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/source/UserSettingsDataStore.kt index e150b741..544fc043 100644 --- a/AndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/source/UserSettingsDataStore.kt +++ b/AndroidApp/data/repository/src/main/kotlin/me/nya_n/notificationnotifier/data/repository/source/UserSettingsDataStore.kt @@ -6,12 +6,24 @@ import me.nya_n.notificationnotifier.model.UserSettings class UserSettingsDataStore( pref: SharedPreferences ) : KeyValueDataStore(pref) { + companion object { + const val DATA_STORE_NAME = "settings" + const val KEY_HOST = "host" + const val DEFAULT_HOST = "" + const val KEY_PORT = "port" + const val DEFAULT_PORT = -1 + const val KEY_IS_PACKAGE_VISIBILITY_GRANTED = "isPackageVisibilityGranted" + const val DEFAULT_IS_PACKAGE_VISIBILITY_GRANTED = false + const val KEY_IS_WIFI_ONLY_NOTIFICATION_ENABLED = "isWifiOnlyNotificationEnabled" + const val DEFAULT_IS_WIFI_ONLY_NOTIFICATION_ENABLED = false + } fun get(): UserSettings { return UserSettings( get(KEY_HOST, DEFAULT_HOST), get(KEY_PORT, DEFAULT_PORT), - get(KEY_IS_PACKAGE_VISIBILITY_GRANTED, DEFAULT_IS_PACKAGE_VISIBILITY_GRANTED) + get(KEY_IS_PACKAGE_VISIBILITY_GRANTED, DEFAULT_IS_PACKAGE_VISIBILITY_GRANTED), + get(KEY_IS_WIFI_ONLY_NOTIFICATION_ENABLED, DEFAULT_IS_WIFI_ONLY_NOTIFICATION_ENABLED) ) } @@ -19,15 +31,6 @@ class UserSettingsDataStore( put(KEY_HOST, settings.host) put(KEY_PORT, settings.port) put(KEY_IS_PACKAGE_VISIBILITY_GRANTED, settings.isPackageVisibilityGranted) - } - - companion object { - const val DATA_STORE_NAME = "settings" - const val KEY_HOST = "host" - const val DEFAULT_HOST = "" - const val KEY_PORT = "port" - const val DEFAULT_PORT = -1 - const val KEY_IS_PACKAGE_VISIBILITY_GRANTED = "isPackageVisibilityGranted" - const val DEFAULT_IS_PACKAGE_VISIBILITY_GRANTED = false + put(KEY_IS_WIFI_ONLY_NOTIFICATION_ENABLED, settings.isWifiOnlyNotificationEnabled) } } \ No newline at end of file diff --git a/AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/SaveWifiOnlyNotificationSettingUseCase.kt b/AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/SaveWifiOnlyNotificationSettingUseCase.kt new file mode 100644 index 00000000..2e057d9f --- /dev/null +++ b/AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/SaveWifiOnlyNotificationSettingUseCase.kt @@ -0,0 +1,5 @@ +package me.nya_n.notificationnotifier.domain.usecase + +interface SaveWifiOnlyNotificationSettingUseCase { + operator fun invoke(isWifiOnlyNotificationEnabled: Boolean): Result +} \ No newline at end of file diff --git a/AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/SaveWifiOnlyNotificationSettingUseCaseImpl.kt b/AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/SaveWifiOnlyNotificationSettingUseCaseImpl.kt new file mode 100644 index 00000000..7c3f15cf --- /dev/null +++ b/AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/SaveWifiOnlyNotificationSettingUseCaseImpl.kt @@ -0,0 +1,20 @@ +package me.nya_n.notificationnotifier.domain.usecase.impl + +import me.nya_n.notificationnotifier.data.repository.UserSettingsRepository +import me.nya_n.notificationnotifier.domain.usecase.SaveWifiOnlyNotificationSettingUseCase + +class SaveWifiOnlyNotificationSettingUseCaseImpl( + private val userSettingsRepository: UserSettingsRepository +) : SaveWifiOnlyNotificationSettingUseCase { + override fun invoke(isWifiOnlyNotificationEnabled: Boolean): Result { + return runCatching { + val settings = userSettingsRepository.getUserSettings() + userSettingsRepository.saveUserSettings( + settings.copy( + isWifiOnlyNotificationEnabled = isWifiOnlyNotificationEnabled + ) + ) + return Result.success(Unit) + } + } +} \ No newline at end of file diff --git a/AndroidApp/domain/src/test/java/me/nya_n/notificationnotifier/UseCaseTest.kt b/AndroidApp/domain/src/test/java/me/nya_n/notificationnotifier/UseCaseTest.kt index 15492f19..f43faffa 100644 --- a/AndroidApp/domain/src/test/java/me/nya_n/notificationnotifier/UseCaseTest.kt +++ b/AndroidApp/domain/src/test/java/me/nya_n/notificationnotifier/UseCaseTest.kt @@ -49,7 +49,7 @@ class UseCaseTest { @Test fun `インストール済みアプリの取得_許可あり`() { - every { userSettingsRepository.getUserSettings() } returns UserSettings("", 0, true) + every { userSettingsRepository.getUserSettings() } returns UserSettings("", 0, true, false) every { appRepository.loadInstalledAppList() } returns listOf(InstalledApp("", "")) val ret = loadAppUseCase.loadInstalledAppList() @@ -61,7 +61,7 @@ class UseCaseTest { @Test fun `インストール済みアプリの取得_許可なし`() { - every { userSettingsRepository.getUserSettings() } returns UserSettings("", 0, false) + every { userSettingsRepository.getUserSettings() } returns UserSettings("", 0, false, false) every { appRepository.loadInstalledAppList() } throws PermissionDeniedException() val ret = loadAppUseCase.loadInstalledAppList() @@ -76,7 +76,8 @@ class UseCaseTest { every { userSettingsRepository.getUserSettings() } returns UserSettings( "192.168.10.18", 8484, - true + true, + false ) every { userSettingsRepository.saveUserSettings(any()) } just Runs @@ -115,7 +116,8 @@ class UseCaseTest { every { userSettingsRepository.getUserSettings() } returns UserSettings( "192.168.10.18", 8484, - true + true, + false ) runTest(testDispatcher) { diff --git a/AndroidApp/model/src/main/kotlin/me/nya_n/notificationnotifier/model/UserSettings.kt b/AndroidApp/model/src/main/kotlin/me/nya_n/notificationnotifier/model/UserSettings.kt index 5552b5ea..16b6cca0 100644 --- a/AndroidApp/model/src/main/kotlin/me/nya_n/notificationnotifier/model/UserSettings.kt +++ b/AndroidApp/model/src/main/kotlin/me/nya_n/notificationnotifier/model/UserSettings.kt @@ -6,8 +6,10 @@ data class UserSettings( val host: String, val port: Int, /** - * @see https://support.google.com/googleplay/android-developer/answer/10158779 + * @see パッケージ(アプリ)の広範な一覧取得(QUERY_ALL_PACKAGES)権限の使用 */ @SerializedName("is_package_visibility_granted") - val isPackageVisibilityGranted: Boolean + val isPackageVisibilityGranted: Boolean, + @SerializedName("is_wifi_only_notification_enabled") + val isWifiOnlyNotificationEnabled: Boolean ) \ No newline at end of file diff --git a/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsViewModel.kt b/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsViewModel.kt index 530fef6a..a3639600 100644 --- a/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsViewModel.kt +++ b/AndroidApp/ui/src/main/kotlin/me/nya_n/notificationnotifier/ui/screen/settings/SettingsViewModel.kt @@ -12,6 +12,7 @@ import me.nya_n.notificationnotifier.domain.usecase.ImportDataUseCase import me.nya_n.notificationnotifier.domain.usecase.LoadAddressUseCase import me.nya_n.notificationnotifier.domain.usecase.NotifyUseCase import me.nya_n.notificationnotifier.domain.usecase.SaveAddressUseCase +import me.nya_n.notificationnotifier.domain.usecase.SaveWifiOnlyNotificationSettingUseCase import me.nya_n.notificationnotifier.model.AppConfig import me.nya_n.notificationnotifier.model.Message import me.nya_n.notificationnotifier.ui.R @@ -22,6 +23,7 @@ class SettingsViewModel( loadAddressUseCase: LoadAddressUseCase, private val saveAddressUseCase: SaveAddressUseCase, private val notifyUseCase: NotifyUseCase, + private val saveWifiOnlyNotificationSettingUseCase: SaveWifiOnlyNotificationSettingUseCase, private val exportDataUseCase: ExportDataUseCase, private val importDataUseCase: ImportDataUseCase ) : BaseViewModel() { @@ -60,6 +62,7 @@ class SettingsViewModel( } fun updateWifiOnlySetting(isWifiOnlyNotificationEnabled: Boolean) { + saveWifiOnlyNotificationSettingUseCase(isWifiOnlyNotificationEnabled) _uiState.update { it.copy(isWifiOnlyNotificationEnabled = isWifiOnlyNotificationEnabled) } } From 89cbdccb2b6ab84c7427899748feea681be620c5 Mon Sep 17 00:00:00 2001 From: Takuya Nishizawa Date: Sun, 18 Jan 2026 06:08:55 +0900 Subject: [PATCH 4/8] =?UTF-8?q?wifi=E6=8E=A5=E7=B6=9A=E7=A2=BA=E8=AA=8D?= =?UTF-8?q?=E5=87=A6=E7=90=86=E3=81=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AndroidApp/app/src/main/AndroidManifest.xml | 1 + .../me/nya_n/notificationnotifier/App.kt | 5 ++++- .../NotifyTargetAppNotificationUseCaseImpl.kt | 20 +++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/AndroidApp/app/src/main/AndroidManifest.xml b/AndroidApp/app/src/main/AndroidManifest.xml index 4011bff2..291d236c 100644 --- a/AndroidApp/app/src/main/AndroidManifest.xml +++ b/AndroidApp/app/src/main/AndroidManifest.xml @@ -6,6 +6,7 @@ + { LoadAppUseCaseImpl(get(), get()) } factory { LoadFilterConditionUseCaseImpl(get()) } factory { - NotifyTargetAppNotificationUseCaseImpl(get(), get()) + NotifyTargetAppNotificationUseCaseImpl(get(), get(), get(), get()) } factory { NotifyUseCaseImpl(get()) } factory { PackageVisibilityGrantedUseCaseImpl(get()) } diff --git a/AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/NotifyTargetAppNotificationUseCaseImpl.kt b/AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/NotifyTargetAppNotificationUseCaseImpl.kt index 0230e740..1cfdf6a6 100644 --- a/AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/NotifyTargetAppNotificationUseCaseImpl.kt +++ b/AndroidApp/domain/src/main/kotlin/me/nya_n/notificationnotifier/domain/usecase/impl/NotifyTargetAppNotificationUseCaseImpl.kt @@ -1,14 +1,29 @@ package me.nya_n.notificationnotifier.domain.usecase.impl +import android.Manifest import android.app.Notification +import android.net.ConnectivityManager +import android.net.NetworkCapabilities +import androidx.annotation.RequiresPermission import me.nya_n.notificationnotifier.data.repository.AppRepository +import me.nya_n.notificationnotifier.data.repository.UserSettingsRepository import me.nya_n.notificationnotifier.domain.usecase.NotifyTargetAppNotificationUseCase import me.nya_n.notificationnotifier.domain.usecase.NotifyUseCase class NotifyTargetAppNotificationUseCaseImpl( + private val connectionManager: ConnectivityManager, private val appRepository: AppRepository, + private val userSettingsRepository: UserSettingsRepository, private val notifyUseCase: NotifyUseCase, ) : NotifyTargetAppNotificationUseCase { + @get:RequiresPermission(Manifest.permission.ACCESS_NETWORK_STATE) + private val isConnectedToWifi: Boolean + get() { + val network = connectionManager.activeNetwork ?: return false + val capabilities = connectionManager.getNetworkCapabilities(network) ?: return false + return capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) + } + override suspend operator fun invoke( packageName: String, title: String, @@ -16,6 +31,11 @@ class NotifyTargetAppNotificationUseCaseImpl( flags: Int ): Result { return runCatching { + val settings = userSettingsRepository.getUserSettings() + if (settings.isWifiOnlyNotificationEnabled && !isConnectedToWifi) { + return Result.success(Unit) + } + val targets = appRepository.getTargetAppList() if (!targets.any { t -> t.packageName == packageName }) { return Result.success(Unit) From 82745dbd4cfaf0e4c2f3a5333dcef3ea4e742a20 Mon Sep 17 00:00:00 2001 From: Takuya Nishizawa Date: Sun, 18 Jan 2026 06:22:19 +0900 Subject: [PATCH 5/8] =?UTF-8?q?actions=E3=81=AE=E9=80=9A=E7=9F=A5=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android-build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/android-build.yml b/.github/workflows/android-build.yml index 4b4b39b3..4767e043 100644 --- a/.github/workflows/android-build.yml +++ b/.github/workflows/android-build.yml @@ -32,3 +32,4 @@ jobs: with: webhook: ${{ secrets.DISCORD_WEBHOOK }} status: ${{ job.status }} + content: "<@225341405726244865> チェック終わったみたい <:yoshi:981971678542315530>" From 94c9e4b502543550172ca3d82358adff139a5ec9 Mon Sep 17 00:00:00 2001 From: Takuya Nishizawa Date: Sun, 18 Jan 2026 06:25:14 +0900 Subject: [PATCH 6/8] =?UTF-8?q?=E6=A8=A9=E9=99=90=E8=AA=AC=E6=98=8E?= =?UTF-8?q?=E3=81=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 7f35fca2..2b9ac1d0 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,8 @@ Google Playからインストールしてください。 ###### 権限の説明 - インターネット接続 - 指定したアドレスに通知データを送信するために必要です。 +- ネットワーク状態の取得 + - Wi-Fiに接続しているか確認するために必要です。 - インストール済みアプリの取得 - 通知対象のアプリを選択するための必要です。 - 通知へのアクセス From ea7c8cc4e712e66ddfed2307782799491519ae89 Mon Sep 17 00:00:00 2001 From: Takuya Nishizawa Date: Sun, 18 Jan 2026 20:47:35 +0900 Subject: [PATCH 7/8] typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2b9ac1d0..eb57434f 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Google Playからインストールしてください。 - ネットワーク状態の取得 - Wi-Fiに接続しているか確認するために必要です。 - インストール済みアプリの取得 - - 通知対象のアプリを選択するための必要です。 + - 通知対象のアプリを選択するために必要です。 - 通知へのアクセス - PCに通知する内容を知るために、通知へアクセスする必要があります。 From 309222b4a8c1c2223ec9bd7e536be4f0fa09f5ee Mon Sep 17 00:00:00 2001 From: Takuya Nishizawa Date: Sun, 18 Jan 2026 20:51:48 +0900 Subject: [PATCH 8/8] =?UTF-8?q?actions=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/android-build.yml b/.github/workflows/android-build.yml index 4767e043..985c39e8 100644 --- a/.github/workflows/android-build.yml +++ b/.github/workflows/android-build.yml @@ -32,4 +32,4 @@ jobs: with: webhook: ${{ secrets.DISCORD_WEBHOOK }} status: ${{ job.status }} - content: "<@225341405726244865> チェック終わったみたい <:yoshi:981971678542315530>" + content: "<@${{ secrets.DISCORD_NOTIFY_USER_ID }}> チェック終わったみたい ${{ secrets.DISCORD_NOTIFY_SUFFIX }}"