-
-
Notifications
You must be signed in to change notification settings - Fork 967
Expand file tree
/
Copy pathHaControlsPanelActivity.kt
More file actions
123 lines (112 loc) · 4.8 KB
/
HaControlsPanelActivity.kt
File metadata and controls
123 lines (112 loc) · 4.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package io.homeassistant.companion.android.controls
import android.annotation.SuppressLint
import android.app.KeyguardManager
import android.os.Bundle
import android.service.controls.ControlsProviderService
import androidx.activity.compose.setContent
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Lock
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.core.content.getSystemService
import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint
import io.homeassistant.companion.android.WIPFeature
import io.homeassistant.companion.android.common.R as commonR
import io.homeassistant.companion.android.common.data.prefs.PrefsRepository
import io.homeassistant.companion.android.common.data.servers.ServerManager
import io.homeassistant.companion.android.common.data.servers.ServerManager.Companion.SERVER_ID_ACTIVE
import io.homeassistant.companion.android.launch.LaunchActivity
import io.homeassistant.companion.android.util.compose.HomeAssistantAppTheme
import io.homeassistant.companion.android.webview.WebViewActivity
import javax.inject.Inject
import kotlinx.coroutines.launch
import timber.log.Timber
@AndroidEntryPoint
class HaControlsPanelActivity : AppCompatActivity() {
@Inject
lateinit var serverManager: ServerManager
@Inject
lateinit var prefsRepository: PrefsRepository
private var launched = false
@SuppressLint("InlinedApi") // This activity will only be launched on Android 14+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setShowWhenLocked(true)
lifecycleScope.launch {
if (!serverManager.isRegistered()) {
finish()
}
}
val disallowLocked =
intent?.hasExtra(ControlsProviderService.EXTRA_LOCKSCREEN_ALLOW_TRIVIAL_CONTROLS) != true ||
intent?.getBooleanExtra(ControlsProviderService.EXTRA_LOCKSCREEN_ALLOW_TRIVIAL_CONTROLS, false) != true
val keyguardManager = getSystemService<KeyguardManager>()
val isLocked = keyguardManager?.isKeyguardLocked ?: true
if (disallowLocked && isLocked) {
setContent { LockedPanelView() }
return
}
lifecycleScope.launch {
val serverId = prefsRepository.getControlsPanelServer() ?: serverManager.getServer()?.id
val path = prefsRepository.getControlsPanelPath()
val intent = if (WIPFeature.USE_FRONTEND_V2) {
Timber.d("Launching LaunchActivity…")
LaunchActivity.newInstance(
context = this@HaControlsPanelActivity,
deepLink = LaunchActivity.DeepLink.NavigateTo(path = path, serverId = serverId ?: SERVER_ID_ACTIVE),
showWhenLocked = true,
)
} else {
Timber.d("Launching WebView…")
WebViewActivity.newInstance(
context = this@HaControlsPanelActivity,
path = path,
serverId = serverId,
).apply {
putExtra(WebViewActivity.EXTRA_SHOW_WHEN_LOCKED, true)
}
}
startActivity(intent)
overridePendingTransition(0, 0) // Disable activity start/stop animation
// The device controls panel can flicker if this activity finishes to quickly, so handle
// it in onPause instead to reduce this
launched = true
}
}
override fun onPause() {
super.onPause()
if (launched) finish()
}
@Composable
fun LockedPanelView(modifier: Modifier = Modifier) {
HomeAssistantAppTheme {
Column(
modifier = modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
) {
Icon(
imageVector = Icons.Default.Lock,
contentDescription = null,
)
Text(
text = stringResource(commonR.string.tile_auth_required),
style = MaterialTheme.typography.h6,
modifier = Modifier.padding(top = 16.dp),
)
}
}
}
}