mirror of
https://github.com/d4rken-org/capod.git
synced 2026-09-14 18:26:11 -04:00
Improved UI
This commit is contained in:
@@ -11,9 +11,9 @@ import eu.darken.capod.common.lists.differ.setupDiffer
|
||||
import eu.darken.capod.common.lists.modular.ModularAdapter
|
||||
import eu.darken.capod.common.lists.modular.mods.DataBinderMod
|
||||
import eu.darken.capod.common.lists.modular.mods.TypedVHCreatorMod
|
||||
import eu.darken.capod.main.ui.overview.cards.DualApplePodsCardVH
|
||||
import eu.darken.capod.main.ui.overview.cards.PermissionCardVH
|
||||
import eu.darken.capod.main.ui.overview.cards.UnknownPodDeviceCardVH
|
||||
import eu.darken.capod.main.ui.overview.cards.pods.DualApplePodsCardVH
|
||||
import eu.darken.capod.main.ui.overview.cards.pods.UnknownPodDeviceCardVH
|
||||
import javax.inject.Inject
|
||||
|
||||
class OverviewAdapter @Inject constructor() :
|
||||
|
||||
@@ -38,7 +38,7 @@ class OverviewFragment : Fragment3(R.layout.main_fragment) {
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
ui.apply {
|
||||
list.setupDefaults(adapter)
|
||||
list.setupDefaults(adapter, dividers = false)
|
||||
}
|
||||
|
||||
ui.toolbar.apply {
|
||||
|
||||
@@ -12,9 +12,9 @@ import eu.darken.capod.common.navigation.navVia
|
||||
import eu.darken.capod.common.permissions.Permission
|
||||
import eu.darken.capod.common.permissions.isGrantedOrNotRequired
|
||||
import eu.darken.capod.common.uix.ViewModel3
|
||||
import eu.darken.capod.main.ui.overview.cards.DualApplePodsCardVH
|
||||
import eu.darken.capod.main.ui.overview.cards.PermissionCardVH
|
||||
import eu.darken.capod.main.ui.overview.cards.UnknownPodDeviceCardVH
|
||||
import eu.darken.capod.main.ui.overview.cards.pods.DualApplePodsCardVH
|
||||
import eu.darken.capod.main.ui.overview.cards.pods.UnknownPodDeviceCardVH
|
||||
import eu.darken.capod.monitor.core.PodMonitor
|
||||
import eu.darken.capod.monitor.core.worker.MonitorControl
|
||||
import eu.darken.capod.pods.core.PodDevice
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
package eu.darken.capod.main.ui.overview.cards
|
||||
|
||||
import android.view.ViewGroup
|
||||
import eu.darken.capod.R
|
||||
import eu.darken.capod.databinding.OverviewPodsUnknownItemBinding
|
||||
import eu.darken.capod.main.ui.overview.OverviewAdapter
|
||||
import eu.darken.capod.pods.core.PodDevice
|
||||
|
||||
class UnknownPodDeviceCardVH(parent: ViewGroup) :
|
||||
OverviewAdapter.BaseVH<UnknownPodDeviceCardVH.Item, OverviewPodsUnknownItemBinding>(
|
||||
R.layout.overview_pods_unknown_item,
|
||||
parent
|
||||
) {
|
||||
|
||||
override val viewBinding = lazy {
|
||||
OverviewPodsUnknownItemBinding.bind(itemView)
|
||||
}
|
||||
|
||||
override val onBindData: OverviewPodsUnknownItemBinding.(
|
||||
item: Item,
|
||||
payloads: List<Any>
|
||||
) -> Unit = { item, _ ->
|
||||
|
||||
name.text = item.device.getLabel(context)
|
||||
}
|
||||
|
||||
data class Item(
|
||||
val device: PodDevice
|
||||
) : OverviewAdapter.Item {
|
||||
override val stableId: Long = this.javaClass.hashCode().toLong()
|
||||
}
|
||||
}
|
||||
+24
-8
@@ -1,9 +1,10 @@
|
||||
package eu.darken.capod.main.ui.overview.cards
|
||||
package eu.darken.capod.main.ui.overview.cards.pods
|
||||
|
||||
import android.icu.text.RelativeDateTimeFormatter
|
||||
import android.view.ViewGroup
|
||||
import eu.darken.capod.R
|
||||
import eu.darken.capod.common.BuildConfigWrap
|
||||
import eu.darken.capod.databinding.OverviewPodsAppleDualItemBinding
|
||||
import eu.darken.capod.main.ui.overview.OverviewAdapter
|
||||
import eu.darken.capod.pods.core.DualPods
|
||||
import eu.darken.capod.pods.core.airpods.DualApplePods
|
||||
import eu.darken.capod.pods.core.airpods.DualApplePods.DeviceColor
|
||||
@@ -11,9 +12,11 @@ import eu.darken.capod.pods.core.airpods.DualApplePods.LidState
|
||||
import eu.darken.capod.pods.core.getBatteryCase
|
||||
import eu.darken.capod.pods.core.getBatteryLeftPod
|
||||
import eu.darken.capod.pods.core.getBatteryRightPod
|
||||
import java.time.Duration
|
||||
import java.time.Instant
|
||||
|
||||
class DualApplePodsCardVH(parent: ViewGroup) :
|
||||
OverviewAdapter.BaseVH<DualApplePodsCardVH.Item, OverviewPodsAppleDualItemBinding>(
|
||||
PodDeviceVH<DualApplePodsCardVH.Item, OverviewPodsAppleDualItemBinding>(
|
||||
R.layout.overview_pods_apple_dual_item,
|
||||
parent
|
||||
) {
|
||||
@@ -22,12 +25,15 @@ class DualApplePodsCardVH(parent: ViewGroup) :
|
||||
OverviewPodsAppleDualItemBinding.bind(itemView)
|
||||
}
|
||||
|
||||
private val lastSeenFormatter = RelativeDateTimeFormatter.getInstance()
|
||||
|
||||
override val onBindData: OverviewPodsAppleDualItemBinding.(
|
||||
item: Item,
|
||||
payloads: List<Any>
|
||||
) -> Unit = { item, _ ->
|
||||
val device = item.device
|
||||
|
||||
|
||||
name.apply {
|
||||
val sb = StringBuilder(device.getLabel(context))
|
||||
if (device.deviceColor != DeviceColor.UNKNOWN) {
|
||||
@@ -35,8 +41,16 @@ class DualApplePodsCardVH(parent: ViewGroup) :
|
||||
}
|
||||
text = sb
|
||||
}
|
||||
deviceIcon.setImageResource(device.iconRes)
|
||||
|
||||
reception.text = "${device.rssi} (RSSI)"
|
||||
val duration = Duration.between(device.lastSeenAt, Instant.now())
|
||||
lastSeen.text = lastSeenFormatter.format(
|
||||
duration.seconds.toDouble(),
|
||||
RelativeDateTimeFormatter.Direction.LAST,
|
||||
RelativeDateTimeFormatter.RelativeUnit.SECONDS
|
||||
)
|
||||
|
||||
reception.text = device.getSignalQuality(context)
|
||||
|
||||
podLeft.apply {
|
||||
val sb = StringBuilder(context.getString(R.string.pods_dual_left_label))
|
||||
@@ -80,11 +94,13 @@ class DualApplePodsCardVH(parent: ViewGroup) :
|
||||
}
|
||||
|
||||
status.text = getString(R.string.pods_status_x_label, device.getConnectionStateLabel(context))
|
||||
if (BuildConfigWrap.DEBUG) {
|
||||
status.append("\n")
|
||||
status.append(device.identifier.toString())
|
||||
}
|
||||
}
|
||||
|
||||
data class Item(
|
||||
val device: DualApplePods
|
||||
) : OverviewAdapter.Item {
|
||||
override val stableId: Long = this.javaClass.hashCode().toLong()
|
||||
}
|
||||
override val device: DualApplePods
|
||||
) : PodDeviceVH.Item
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package eu.darken.capod.main.ui.overview.cards.pods
|
||||
|
||||
import android.view.ViewGroup
|
||||
import androidx.annotation.LayoutRes
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import eu.darken.capod.common.lists.BindableVH
|
||||
import eu.darken.capod.common.lists.differ.DifferItem
|
||||
import eu.darken.capod.common.lists.modular.ModularAdapter
|
||||
import eu.darken.capod.main.ui.overview.OverviewAdapter
|
||||
import eu.darken.capod.pods.core.PodDevice
|
||||
|
||||
abstract class PodDeviceVH<D : PodDeviceVH.Item, B : ViewBinding>(
|
||||
@LayoutRes layoutId: Int,
|
||||
parent: ViewGroup
|
||||
) : ModularAdapter.VH(layoutId, parent), BindableVH<D, B> {
|
||||
|
||||
interface Item : OverviewAdapter.Item {
|
||||
|
||||
val device: PodDevice
|
||||
|
||||
override val stableId: Long get() = device.identifier.hashCode().toLong()
|
||||
|
||||
override val payloadProvider: ((DifferItem, DifferItem) -> DifferItem?)?
|
||||
get() = { old, new ->
|
||||
if (new::class.isInstance(old)) new else null
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
package eu.darken.capod.main.ui.overview.cards.pods
|
||||
|
||||
import android.icu.text.RelativeDateTimeFormatter
|
||||
import android.view.ViewGroup
|
||||
import eu.darken.capod.R
|
||||
import eu.darken.capod.databinding.OverviewPodsUnknownItemBinding
|
||||
import eu.darken.capod.pods.core.PodDevice
|
||||
import java.time.Duration
|
||||
import java.time.Instant
|
||||
|
||||
class UnknownPodDeviceCardVH(parent: ViewGroup) :
|
||||
PodDeviceVH<UnknownPodDeviceCardVH.Item, OverviewPodsUnknownItemBinding>(
|
||||
R.layout.overview_pods_unknown_item,
|
||||
parent
|
||||
) {
|
||||
|
||||
override val viewBinding = lazy {
|
||||
OverviewPodsUnknownItemBinding.bind(itemView)
|
||||
}
|
||||
|
||||
private val lastSeenFormatter = RelativeDateTimeFormatter.getInstance()
|
||||
|
||||
override val onBindData: OverviewPodsUnknownItemBinding.(
|
||||
item: Item,
|
||||
payloads: List<Any>
|
||||
) -> Unit = { item, _ ->
|
||||
val device = item.device
|
||||
name.text = device.getLabel(context)
|
||||
|
||||
val duration = Duration.between(device.lastSeenAt, Instant.now())
|
||||
lastSeen.text = lastSeenFormatter.format(
|
||||
duration.seconds.toDouble(),
|
||||
RelativeDateTimeFormatter.Direction.LAST,
|
||||
RelativeDateTimeFormatter.RelativeUnit.SECONDS
|
||||
)
|
||||
}
|
||||
|
||||
data class Item(
|
||||
override val device: PodDevice
|
||||
) : PodDeviceVH.Item
|
||||
}
|
||||
@@ -53,7 +53,7 @@ class MonitorNotifications @Inject constructor(
|
||||
.setChannelId(NOTIFICATION_CHANNEL_ID)
|
||||
.setContentIntent(openPi)
|
||||
.setPriority(NotificationCompat.PRIORITY_LOW)
|
||||
.setSmallIcon(R.drawable.ic_notification_device_status_icon)
|
||||
.setSmallIcon(R.drawable.ic_baseline_earbuds_24)
|
||||
.setOngoing(true)
|
||||
.setContentTitle(context.getString(R.string.app_name))
|
||||
}
|
||||
@@ -61,8 +61,12 @@ class MonitorNotifications @Inject constructor(
|
||||
fun getBuilder(device: PodDevice?): NotificationCompat.Builder {
|
||||
if (device == null) {
|
||||
builder.setContentTitle(context.getString(R.string.device_status_loading_message))
|
||||
builder.setSmallIcon(R.drawable.ic_baseline_earbuds_24)
|
||||
return builder
|
||||
}
|
||||
|
||||
builder.setSmallIcon(device.iconRes)
|
||||
|
||||
val infoText = when (device) {
|
||||
is DualApplePods -> {
|
||||
val sb = StringBuilder()
|
||||
|
||||
@@ -2,11 +2,16 @@ package eu.darken.capod.pods.core.airpods.models
|
||||
|
||||
import android.bluetooth.le.ScanResult
|
||||
import android.content.Context
|
||||
import eu.darken.capod.R
|
||||
import eu.darken.capod.common.debug.logging.logTag
|
||||
import eu.darken.capod.pods.core.airpods.DualApplePods
|
||||
import eu.darken.capod.pods.core.airpods.protocol.ProximityPairing
|
||||
import java.time.Instant
|
||||
import java.util.*
|
||||
|
||||
data class AirPodsGen1 constructor(
|
||||
override val identifier: UUID = UUID.randomUUID(),
|
||||
override val lastSeenAt: Instant = Instant.now(),
|
||||
override val scanResult: ScanResult,
|
||||
override val proximityMessage: ProximityPairing.Message
|
||||
) : DualApplePods {
|
||||
@@ -15,5 +20,8 @@ data class AirPodsGen1 constructor(
|
||||
return "AirPods (Gen 1)"
|
||||
}
|
||||
|
||||
override val iconRes: Int
|
||||
get() = R.drawable.ic_device_airpods_gen1
|
||||
|
||||
override val tag: String = logTag("Pod", "AirPodsGen1")
|
||||
}
|
||||
@@ -2,11 +2,16 @@ package eu.darken.capod.pods.core.airpods.models
|
||||
|
||||
import android.bluetooth.le.ScanResult
|
||||
import android.content.Context
|
||||
import eu.darken.capod.R
|
||||
import eu.darken.capod.common.debug.logging.logTag
|
||||
import eu.darken.capod.pods.core.airpods.DualApplePods
|
||||
import eu.darken.capod.pods.core.airpods.protocol.ProximityPairing
|
||||
import java.time.Instant
|
||||
import java.util.*
|
||||
|
||||
data class AirPodsGen2 constructor(
|
||||
override val identifier: UUID = UUID.randomUUID(),
|
||||
override val lastSeenAt: Instant = Instant.now(),
|
||||
override val scanResult: ScanResult,
|
||||
override val proximityMessage: ProximityPairing.Message
|
||||
) : DualApplePods {
|
||||
@@ -15,5 +20,8 @@ data class AirPodsGen2 constructor(
|
||||
return "AirPods (Gen 2)"
|
||||
}
|
||||
|
||||
override val iconRes: Int
|
||||
get() = R.drawable.ic_device_airpods_gen2
|
||||
|
||||
override val tag: String = logTag("Pod", "AirPodsGen2")
|
||||
}
|
||||
@@ -4,8 +4,12 @@ import android.bluetooth.le.ScanResult
|
||||
import android.content.Context
|
||||
import eu.darken.capod.pods.core.airpods.ApplePods
|
||||
import eu.darken.capod.pods.core.airpods.protocol.ProximityPairing
|
||||
import java.time.Instant
|
||||
import java.util.*
|
||||
|
||||
data class AirPodsMax constructor(
|
||||
override val identifier: UUID = UUID.randomUUID(),
|
||||
override val lastSeenAt: Instant = Instant.now(),
|
||||
override val scanResult: ScanResult,
|
||||
override val proximityMessage: ProximityPairing.Message
|
||||
) : ApplePods {
|
||||
|
||||
@@ -5,8 +5,12 @@ import android.content.Context
|
||||
import eu.darken.capod.common.debug.logging.logTag
|
||||
import eu.darken.capod.pods.core.airpods.DualApplePods
|
||||
import eu.darken.capod.pods.core.airpods.protocol.ProximityPairing
|
||||
import java.time.Instant
|
||||
import java.util.*
|
||||
|
||||
data class AirPodsPro constructor(
|
||||
override val identifier: UUID = UUID.randomUUID(),
|
||||
override val lastSeenAt: Instant = Instant.now(),
|
||||
override val scanResult: ScanResult,
|
||||
override val proximityMessage: ProximityPairing.Message
|
||||
) : DualApplePods {
|
||||
|
||||
@@ -4,8 +4,12 @@ import android.bluetooth.le.ScanResult
|
||||
import android.content.Context
|
||||
import eu.darken.capod.pods.core.airpods.ApplePods
|
||||
import eu.darken.capod.pods.core.airpods.protocol.ProximityPairing
|
||||
import java.time.Instant
|
||||
import java.util.*
|
||||
|
||||
data class UnknownAppleDevice constructor(
|
||||
override val identifier: UUID = UUID.randomUUID(),
|
||||
override val lastSeenAt: Instant = Instant.now(),
|
||||
override val scanResult: ScanResult,
|
||||
override val proximityMessage: ProximityPairing.Message
|
||||
) : ApplePods {
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="?attr/colorControlNormal"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="m6,11c-1.9954,0 -3,-2.0093 -3,-4s1.0046,-4 3,-4c3.1837,0 5,3.4637 5,6.4886v10.0114c0,0.8284 -0.6716,1.5 -1.5,1.5 -0.8284,0 -1.5,-0.6716 -1.5,-1.5v-8.0113c0,-0.381 -0.1426,-0.7378 -0.3906,-1.0098 -0.4267,0.3435 -0.9676,0.5211 -1.6094,0.5211zM9,11.4887v8.0113c0,0.2761 0.2239,0.5 0.5,0.5s0.5,-0.2239 0.5,-0.5v-10.0114c0,-2.5454 -1.5434,-5.4886 -4,-5.4886 -1.2546,0 -2,1.4907 -2,3s0.7454,3 2,3c0.7809,0 1.2592,-0.3588 1.5257,-1.1581 0.2094,-0.6282 1.1516,-0.3212 0.9508,0.3097l-0.1878,0.5902c0.4499,0.4603 0.7114,1.0823 0.7114,1.7468zM6,8c-0.5523,0 -1,-0.4477 -1,-1s0.4477,-1 1,-1 1,0.4477 1,1 -0.4477,1 -1,1zM16,11.4887v8.0113c0,0.8284 -0.6716,1.5 -1.5,1.5s-1.5,-0.6716 -1.5,-1.5v-10.0114c0,-3.0249 1.8163,-6.4886 5,-6.4886 1.9954,0 3,2.0093 3,4s-1.0046,4 -3,4c-0.6418,0 -1.1826,-0.1777 -1.6094,-0.5211 -0.248,0.2721 -0.3906,0.6288 -0.3906,1.0098zM15.5235,9.1516c-0.2008,-0.631 0.7414,-0.9379 0.9508,-0.3097 0.2665,0.7994 0.7448,1.1581 1.5257,1.1581 1.2546,0 2,-1.4907 2,-3s-0.7454,-3 -2,-3c-2.4566,0 -4,2.9433 -4,5.4886v10.0114c0,0.2761 0.2239,0.5 0.5,0.5s0.5,-0.2239 0.5,-0.5v-8.0113c0,-0.6645 0.2615,-1.2865 0.7114,-1.7468zM18,8c-0.5523,0 -1,-0.4477 -1,-1s0.4477,-1 1,-1 1,0.4477 1,1 -0.4477,1 -1,1z" />
|
||||
</vector>
|
||||
@@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="?attr/colorControlNormal"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="m16,10.9789v7.5211c0,0.8284 -0.6716,1.5 -1.5,1.5s-1.5,-0.6716 -1.5,-1.5v-11c0,-2.2761 1.2239,-3.5 3.5,-3.5 1.4806,0 2.9336,0.7265 4.3536,2.1464 0.0938,0.0938 0.1464,0.2209 0.1464,0.3536v2c0,0.1326 -0.0527,0.2598 -0.1464,0.3536 -1.4199,1.4199 -2.873,2.1464 -4.3536,2.1464 -0.1728,0 -0.3394,-0.007 -0.5,-0.0211zM14,10.2016v8.2984c0,0.2761 0.2239,0.5 0.5,0.5s0.5,-0.2239 0.5,-0.5v-7.7243c-0.3884,-0.1333 -0.7223,-0.3253 -1,-0.5741zM11,7.5v11c0,0.8284 -0.6716,1.5 -1.5,1.5 -0.8284,0 -1.5,-0.6716 -1.5,-1.5v-7.5211c-0.1606,0.014 -0.3272,0.0211 -0.5,0.0211 -1.4806,0 -2.9336,-0.7265 -4.3536,-2.1464 -0.0938,-0.0938 -0.1464,-0.2209 -0.1464,-0.3536v-2c0,-0.1326 0.0527,-0.2598 0.1464,-0.3536 1.4199,-1.4199 2.873,-2.1464 4.3536,-2.1464 2.2761,0 3.5,1.2239 3.5,3.5zM9,10.7757v7.7243c0,0.2761 0.2239,0.5 0.5,0.5s0.5,-0.2239 0.5,-0.5v-8.2984c-0.2777,0.2488 -0.6116,0.4408 -1,0.5741zM4,8.2901c1.1954,1.1497 2.3604,1.7099 3.5,1.7099 1.7239,0 2.5,-0.7761 2.5,-2.5s-0.7761,-2.5 -2.5,-2.5c-1.1396,0 -2.3046,0.5602 -3.5,1.7099zM6.5,8c-0.2761,0 -0.5,-0.2239 -0.5,-0.5s0.2239,-0.5 0.5,-0.5h2c0.2761,0 0.5,0.2239 0.5,0.5s-0.2239,0.5 -0.5,0.5zM16.5,5c-1.7239,0 -2.5,0.7761 -2.5,2.5s0.7761,2.5 2.5,2.5c1.1396,0 2.3046,-0.5602 3.5,-1.7099v-1.5802c-1.1954,-1.1497 -2.3604,-1.7099 -3.5,-1.7099zM15.5,8c-0.2761,0 -0.5,-0.2239 -0.5,-0.5s0.2239,-0.5 0.5,-0.5h2c0.2761,0 0.5,0.2239 0.5,0.5s-0.2239,0.5 -0.5,0.5z" />
|
||||
</vector>
|
||||
@@ -14,21 +14,30 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/device_icon"
|
||||
android:layout_width="24dp"
|
||||
android:layout_height="24dp"
|
||||
android:layout_marginStart="16dp"
|
||||
app:layout_constraintBottom_toBottomOf="@id/name"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@id/name"
|
||||
app:srcCompat="@drawable/ic_baseline_earbuds_24" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/name"
|
||||
style="@style/TextAppearance.MaterialComponents.Body2"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="16dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginStart="4dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginBottom="8dp"
|
||||
android:gravity="center_vertical"
|
||||
app:drawableLeftCompat="@drawable/ic_baseline_earbuds_24"
|
||||
app:layout_constraintBottom_toTopOf="@id/barrier_top"
|
||||
app:layout_constraintEnd_toStartOf="@id/reception"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/device_icon"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.0"
|
||||
tools:text="Apple AirPods Pro" />
|
||||
@@ -49,6 +58,18 @@
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="Yours (RSSI -61)" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/last_seen"
|
||||
style="@style/TextAppearance.MaterialComponents.Caption"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="8dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/barrier_top"
|
||||
app:layout_constraintEnd_toEndOf="@id/name"
|
||||
app:layout_constraintStart_toStartOf="@id/name"
|
||||
app:layout_constraintTop_toBottomOf="@id/name"
|
||||
tools:text="3s ago" />
|
||||
|
||||
<androidx.constraintlayout.widget.Barrier
|
||||
android:id="@+id/barrier_top"
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
@@ -29,6 +29,18 @@
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
tools:text="Unknown Device" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/last_seen"
|
||||
style="@style/TextAppearance.MaterialComponents.Caption"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="4dp"
|
||||
app:layout_constraintBottom_toTopOf="@id/rawdata_label"
|
||||
app:layout_constraintEnd_toEndOf="@id/name"
|
||||
app:layout_constraintStart_toStartOf="@id/name"
|
||||
app:layout_constraintTop_toBottomOf="@id/name"
|
||||
tools:text="3s ago" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/reception"
|
||||
style="@style/TextAppearance.MaterialComponents.Body2"
|
||||
@@ -56,7 +68,7 @@
|
||||
android:text="@string/pods_unknown_raw_data_label"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/name" />
|
||||
app:layout_constraintTop_toBottomOf="@id/last_seen" />
|
||||
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/rawdata"
|
||||
@@ -65,7 +77,6 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginHorizontal="16dp"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginTop="8dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
|
||||
Reference in New Issue
Block a user