Skip to content

Commit 6e43eb8

Browse files
committed
Handle permission denied from system and handle minimal flavor
1 parent 92093be commit 6e43eb8

File tree

4 files changed

+24
-8
lines changed

4 files changed

+24
-8
lines changed

app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -354,9 +354,9 @@ class WebViewActivity :
354354
isExoFullScreen = isFullScreen
355355
if (isFullScreen) hideSystemUI() else showSystemUI()
356356
},
357-
onDiscardNotificationPermission = {
357+
onNotificationPermissionResult = { granted ->
358358
coroutineScope.launch {
359-
presenter.discardNotificationPermission()
359+
presenter.onNotificationPermissionResult(granted)
360360
shouldAskNotificationPermission = false
361361
}
362362
},

app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewContentScreen.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ internal fun WebViewContentScreen(
8484
shouldAskNotificationPermission: Boolean,
8585
webViewInitialized: Boolean,
8686
onFullscreenClicked: (isFullscreen: Boolean) -> Unit,
87-
onDiscardNotificationPermission: () -> Unit,
87+
onNotificationPermissionResult: (Boolean) -> Unit,
8888
nightModeTheme: NightModeTheme? = null,
8989
statusBarColor: Color? = null,
9090
backgroundColor: Color? = null,
@@ -135,7 +135,7 @@ internal fun WebViewContentScreen(
135135
}
136136
if (webViewInitialized && shouldAskNotificationPermission && supportsNotificationPermission) {
137137
@SuppressLint("InlinedApi")
138-
NotificationPermission(onDiscardNotificationPermission)
138+
NotificationPermission(onNotificationPermissionResult)
139139
}
140140
}
141141
}
@@ -198,7 +198,7 @@ private fun SafeHAWebView(
198198
@OptIn(ExperimentalMaterial3Api::class, ExperimentalPermissionsApi::class)
199199
@Composable
200200
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
201-
private fun NotificationPermission(onDiscardNotificationPermission: () -> Unit) {
201+
private fun NotificationPermission(onPermissionResult: (Boolean) -> Unit) {
202202
val bottomSheetState = rememberStandardBottomSheetState(skipHiddenState = false)
203203
val coroutineScope = rememberCoroutineScope()
204204

@@ -221,6 +221,7 @@ private fun NotificationPermission(onDiscardNotificationPermission: () -> Unit)
221221
permission = Manifest.permission.POST_NOTIFICATIONS,
222222
previewPermissionStatus = PermissionStatus.Denied(true),
223223
onPermissionResult = {
224+
onPermissionResult(it)
224225
closeSheet()
225226
},
226227
)
@@ -264,7 +265,7 @@ private fun NotificationPermission(onDiscardNotificationPermission: () -> Unit)
264265
HAPlainButton(
265266
text = stringResource(commonR.string.notification_permission_dialog_deny),
266267
onClick = {
267-
onDiscardNotificationPermission()
268+
onPermissionResult(false)
268269
closeSheet()
269270
},
270271
modifier = Modifier

app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewPresenter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,6 @@ interface WebViewPresenter {
8181
fun startScanningForImprov(): Boolean
8282
fun stopScanningForImprov(force: Boolean)
8383

84-
suspend fun discardNotificationPermission()
84+
suspend fun onNotificationPermissionResult(granted: Boolean)
8585
suspend fun shouldAskNotificationPermission(): Boolean
8686
}

app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewPresenterImpl.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.core.content.ContextCompat
1111
import androidx.core.graphics.toColorInt
1212
import androidx.core.net.toUri
1313
import dagger.hilt.android.qualifiers.ActivityContext
14+
import io.homeassistant.companion.android.BuildConfig
1415
import io.homeassistant.companion.android.common.R as commonR
1516
import io.homeassistant.companion.android.common.data.authentication.SessionState
1617
import io.homeassistant.companion.android.common.data.prefs.PrefsRepository
@@ -19,6 +20,10 @@ import io.homeassistant.companion.android.common.util.DisabledLocationHandler
1920
import io.homeassistant.companion.android.common.util.GestureAction
2021
import io.homeassistant.companion.android.common.util.GestureDirection
2122
import io.homeassistant.companion.android.common.util.HAGesture
23+
import io.homeassistant.companion.android.database.settings.SensorUpdateFrequencySetting
24+
import io.homeassistant.companion.android.database.settings.Setting
25+
import io.homeassistant.companion.android.database.settings.SettingsDao
26+
import io.homeassistant.companion.android.database.settings.WebsocketSetting
2227
import io.homeassistant.companion.android.improv.ImprovRepository
2328
import io.homeassistant.companion.android.matter.MatterManager
2429
import io.homeassistant.companion.android.thread.ThreadManager
@@ -54,6 +59,7 @@ class WebViewPresenterImpl @Inject constructor(
5459
private val prefsRepository: PrefsRepository,
5560
private val matterUseCase: MatterManager,
5661
private val threadUseCase: ThreadManager,
62+
private val settingsDao: SettingsDao,
5763
) : WebViewPresenter {
5864

5965
private val view = context as WebView
@@ -582,7 +588,16 @@ class WebViewPresenterImpl @Inject constructor(
582588
}
583589
}
584590

585-
override suspend fun discardNotificationPermission() {
591+
override suspend fun onNotificationPermissionResult(granted: Boolean) {
592+
if (granted && BuildConfig.FLAVOR != "full") {
593+
settingsDao.insert(
594+
Setting(
595+
serverId,
596+
WebsocketSetting.ALWAYS,
597+
SensorUpdateFrequencySetting.NORMAL,
598+
),
599+
)
600+
}
586601
prefsRepository.setAskNotificationPermission(false)
587602
}
588603

0 commit comments

Comments
 (0)