@@ -20,6 +20,7 @@ import androidx.compose.material.icons.Icons
2020import androidx.compose.material.icons.filled.ArrowDropDown
2121import androidx.compose.material.icons.filled.PhoneAndroid
2222import androidx.compose.material.icons.filled.Info
23+ import androidx.compose.material.icons.filled.PowerSettingsNew
2324import androidx.compose.material.icons.filled.UsbOff
2425import androidx.compose.material3.*
2526import androidx.compose.runtime.*
@@ -31,6 +32,7 @@ import androidx.compose.ui.text.font.FontWeight
3132import androidx.compose.ui.text.style.TextOverflow
3233import androidx.compose.ui.unit.dp
3334import androidx.compose.ui.unit.sp
35+ import app.morphe.gui.LocalAdbPreference
3436import app.morphe.gui.ui.theme.LocalMorpheAccents
3537import app.morphe.gui.ui.theme.LocalMorpheFont
3638import app.morphe.gui.ui.theme.LocalMorpheCorners
@@ -42,8 +44,10 @@ fun DeviceIndicator(modifier: Modifier = Modifier) {
4244 val corners = LocalMorpheCorners .current
4345 val mono = LocalMorpheFont .current
4446 val accents = LocalMorpheAccents .current
47+ val adbPreference = LocalAdbPreference .current
4548 val monitorState by DeviceMonitor .state.collectAsState()
4649
50+ val isAdbDisabledByUser = ! adbPreference.enabled
4751 val isAdbAvailable = monitorState.isAdbAvailable
4852 val readyDevices = monitorState.devices.filter { it.isReady }
4953 val unauthorizedDevices = monitorState.devices.filter { it.status == DeviceStatus .UNAUTHORIZED }
@@ -55,6 +59,7 @@ fun DeviceIndicator(modifier: Modifier = Modifier) {
5559 val isHovered by hoverInteraction.collectIsHoveredAsState()
5660
5761 val dotColor = when {
62+ isAdbDisabledByUser -> MaterialTheme .colorScheme.onSurfaceVariant.copy(alpha = 0.25f )
5863 isAdbAvailable == false -> MaterialTheme .colorScheme.error.copy(alpha = 0.7f )
5964 selectedDevice != null && selectedDevice.isReady -> accents.secondary
6065 unauthorizedDevices.isNotEmpty() -> accents.warning
@@ -94,6 +99,7 @@ fun DeviceIndicator(modifier: Modifier = Modifier) {
9499 )
95100
96101 val displayText = when {
102+ isAdbDisabledByUser -> " ADB OFF"
97103 isAdbAvailable == null -> " Checking…"
98104 isAdbAvailable == false -> " No ADB"
99105 selectedDevice != null -> {
@@ -110,6 +116,7 @@ fun DeviceIndicator(modifier: Modifier = Modifier) {
110116 fontWeight = FontWeight .Medium ,
111117 fontFamily = mono,
112118 color = when {
119+ isAdbDisabledByUser -> MaterialTheme .colorScheme.onSurfaceVariant.copy(alpha = 0.5f )
113120 isAdbAvailable == false -> MaterialTheme .colorScheme.error.copy(alpha = 0.7f )
114121 selectedDevice != null -> MaterialTheme .colorScheme.onSurface
115122 unauthorizedDevices.isNotEmpty() -> accents.warning
@@ -138,6 +145,67 @@ fun DeviceIndicator(modifier: Modifier = Modifier) {
138145 border = BorderStroke (1 .dp, MaterialTheme .colorScheme.outline.copy(alpha = 0.12f ))
139146 ) {
140147 when {
148+ isAdbDisabledByUser -> {
149+ DropdownMenuItem (
150+ text = {
151+ Row (
152+ verticalAlignment = Alignment .CenterVertically ,
153+ horizontalArrangement = Arrangement .spacedBy(8 .dp)
154+ ) {
155+ Icon (
156+ imageVector = Icons .Default .PowerSettingsNew ,
157+ contentDescription = null ,
158+ modifier = Modifier .size(14 .dp),
159+ tint = MaterialTheme .colorScheme.onSurfaceVariant.copy(alpha = 0.5f )
160+ )
161+ Column {
162+ Text (
163+ text = " ADB is off" ,
164+ fontSize = 12 .sp,
165+ fontWeight = FontWeight .SemiBold ,
166+ fontFamily = mono,
167+ color = MaterialTheme .colorScheme.onSurface
168+ )
169+ Text (
170+ text = " Morphe is not monitoring connected devices" ,
171+ fontSize = 10 .sp,
172+ fontFamily = mono,
173+ color = MaterialTheme .colorScheme.onSurfaceVariant.copy(alpha = 0.5f )
174+ )
175+ }
176+ }
177+ },
178+ onClick = { showPopup = false }
179+ )
180+ HorizontalDivider (modifier = Modifier .padding(vertical = 4 .dp))
181+ DropdownMenuItem (
182+ text = {
183+ Row (
184+ verticalAlignment = Alignment .CenterVertically ,
185+ horizontalArrangement = Arrangement .spacedBy(8 .dp)
186+ ) {
187+ Icon (
188+ imageVector = Icons .Default .PowerSettingsNew ,
189+ contentDescription = null ,
190+ modifier = Modifier .size(14 .dp),
191+ tint = accents.primary
192+ )
193+ Text (
194+ text = " Enable ADB" ,
195+ fontSize = 11 .sp,
196+ fontWeight = FontWeight .Medium ,
197+ fontFamily = mono,
198+ color = accents.primary
199+ )
200+ }
201+ },
202+ onClick = {
203+ adbPreference.onChange(true )
204+ showPopup = false
205+ }
206+ )
207+ }
208+
141209 isAdbAvailable == false -> {
142210 DropdownMenuItem (
143211 text = {
0 commit comments