xref: /aosp_15_r20/tools/netsim/ui/ts/device-list.ts (revision cf78ab8cffb8fc9207af348f23af247fb04370a6)
1*cf78ab8cSAndroid Build Coastguard Workerimport {css, html, LitElement} from 'lit';
2*cf78ab8cSAndroid Build Coastguard Workerimport {customElement, property} from 'lit/decorators.js';
3*cf78ab8cSAndroid Build Coastguard Worker
4*cf78ab8cSAndroid Build Coastguard Workerimport {Device, Notifiable, SimulationInfo, simulationState,} from './device-observer.js';
5*cf78ab8cSAndroid Build Coastguard Worker
6*cf78ab8cSAndroid Build Coastguard Worker@customElement('ns-device-list')
7*cf78ab8cSAndroid Build Coastguard Workerexport class DeviceList extends LitElement implements Notifiable {
8*cf78ab8cSAndroid Build Coastguard Worker  @property() deviceData: Device[] = [];
9*cf78ab8cSAndroid Build Coastguard Worker
10*cf78ab8cSAndroid Build Coastguard Worker  connectedCallback(): void {
11*cf78ab8cSAndroid Build Coastguard Worker    // eslint-disable-next-line
12*cf78ab8cSAndroid Build Coastguard Worker    super.connectedCallback();
13*cf78ab8cSAndroid Build Coastguard Worker    simulationState.registerObserver(this);
14*cf78ab8cSAndroid Build Coastguard Worker  }
15*cf78ab8cSAndroid Build Coastguard Worker
16*cf78ab8cSAndroid Build Coastguard Worker  disconnectedCallback(): void {
17*cf78ab8cSAndroid Build Coastguard Worker    // eslint-disable-next-line
18*cf78ab8cSAndroid Build Coastguard Worker    super.disconnectedCallback();
19*cf78ab8cSAndroid Build Coastguard Worker    simulationState.removeObserver(this);
20*cf78ab8cSAndroid Build Coastguard Worker  }
21*cf78ab8cSAndroid Build Coastguard Worker
22*cf78ab8cSAndroid Build Coastguard Worker  static styles = css`
23*cf78ab8cSAndroid Build Coastguard Worker    :host {
24*cf78ab8cSAndroid Build Coastguard Worker      justify-content: center;
25*cf78ab8cSAndroid Build Coastguard Worker      display: flex;
26*cf78ab8cSAndroid Build Coastguard Worker      flex-wrap: wrap;
27*cf78ab8cSAndroid Build Coastguard Worker      gap: 1rem;
28*cf78ab8cSAndroid Build Coastguard Worker      margin: 0;
29*cf78ab8cSAndroid Build Coastguard Worker      padding: 0;
30*cf78ab8cSAndroid Build Coastguard Worker      list-style: none;
31*cf78ab8cSAndroid Build Coastguard Worker    }
32*cf78ab8cSAndroid Build Coastguard Worker
33*cf78ab8cSAndroid Build Coastguard Worker    li {
34*cf78ab8cSAndroid Build Coastguard Worker      border-style: solid;
35*cf78ab8cSAndroid Build Coastguard Worker      border-color: lightgray;
36*cf78ab8cSAndroid Build Coastguard Worker      flex-grow: 0;
37*cf78ab8cSAndroid Build Coastguard Worker      flex-shrink: 0;
38*cf78ab8cSAndroid Build Coastguard Worker      flex-basis: 125px;
39*cf78ab8cSAndroid Build Coastguard Worker    }
40*cf78ab8cSAndroid Build Coastguard Worker
41*cf78ab8cSAndroid Build Coastguard Worker    li center {
42*cf78ab8cSAndroid Build Coastguard Worker      font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
43*cf78ab8cSAndroid Build Coastguard Worker      margin: 8px;
44*cf78ab8cSAndroid Build Coastguard Worker    }
45*cf78ab8cSAndroid Build Coastguard Worker
46*cf78ab8cSAndroid Build Coastguard Worker    .box {
47*cf78ab8cSAndroid Build Coastguard Worker      position: relative;
48*cf78ab8cSAndroid Build Coastguard Worker      width: 80vw;
49*cf78ab8cSAndroid Build Coastguard Worker      height: 60vh;
50*cf78ab8cSAndroid Build Coastguard Worker      border: solid 1px rgb(198, 210, 255);
51*cf78ab8cSAndroid Build Coastguard Worker      margin: 2.5em auto;
52*cf78ab8cSAndroid Build Coastguard Worker    }
53*cf78ab8cSAndroid Build Coastguard Worker  `;
54*cf78ab8cSAndroid Build Coastguard Worker
55*cf78ab8cSAndroid Build Coastguard Worker  onNotify(data: SimulationInfo): void {
56*cf78ab8cSAndroid Build Coastguard Worker    this.deviceData = data.devices;
57*cf78ab8cSAndroid Build Coastguard Worker    this.requestUpdate();
58*cf78ab8cSAndroid Build Coastguard Worker  }
59*cf78ab8cSAndroid Build Coastguard Worker
60*cf78ab8cSAndroid Build Coastguard Worker  checkBle(device: Device):
61*cf78ab8cSAndroid Build Coastguard Worker      boolean{return device.chips.at(0)?.bleBeacon !== undefined}
62*cf78ab8cSAndroid Build Coastguard Worker
63*cf78ab8cSAndroid Build Coastguard Worker  render() {
64*cf78ab8cSAndroid Build Coastguard Worker    const rainbow = [
65*cf78ab8cSAndroid Build Coastguard Worker      'red',
66*cf78ab8cSAndroid Build Coastguard Worker      'orange',
67*cf78ab8cSAndroid Build Coastguard Worker      'yellow',
68*cf78ab8cSAndroid Build Coastguard Worker      'green',
69*cf78ab8cSAndroid Build Coastguard Worker      'blue',
70*cf78ab8cSAndroid Build Coastguard Worker      'indigo',
71*cf78ab8cSAndroid Build Coastguard Worker      'purple',
72*cf78ab8cSAndroid Build Coastguard Worker    ];
73*cf78ab8cSAndroid Build Coastguard Worker
74*cf78ab8cSAndroid Build Coastguard Worker    // Repeating templates with map
75*cf78ab8cSAndroid Build Coastguard Worker    return html`
76*cf78ab8cSAndroid Build Coastguard Worker      ${
77*cf78ab8cSAndroid Build Coastguard Worker        this.deviceData.map(
78*cf78ab8cSAndroid Build Coastguard Worker            (device, idx) => html`
79*cf78ab8cSAndroid Build Coastguard Worker          <li>
80*cf78ab8cSAndroid Build Coastguard Worker            <center>
81*cf78ab8cSAndroid Build Coastguard Worker              ${
82*cf78ab8cSAndroid Build Coastguard Worker                true ?  // TODO manage device.visible in Web UI
83*cf78ab8cSAndroid Build Coastguard Worker                    this.checkBle(device) ? html`<ns-pyramid-sprite
84*cf78ab8cSAndroid Build Coastguard Worker                      id=${device.name}
85*cf78ab8cSAndroid Build Coastguard Worker                      color=${rainbow[idx % rainbow.length]}
86*cf78ab8cSAndroid Build Coastguard Worker                      size="30px"
87*cf78ab8cSAndroid Build Coastguard Worker                      style="opacity:0.5;"
88*cf78ab8cSAndroid Build Coastguard Worker                      role="listitem"
89*cf78ab8cSAndroid Build Coastguard Worker                      tabindex="0"
90*cf78ab8cSAndroid Build Coastguard Worker                      aria-label="${device.name} in Device Legends"
91*cf78ab8cSAndroid Build Coastguard Worker                    ></ns-pyramid-sprite
92*cf78ab8cSAndroid Build Coastguard Worker                    >${device.name} ` :
93*cf78ab8cSAndroid Build Coastguard Worker                                            html`<ns-cube-sprite
94*cf78ab8cSAndroid Build Coastguard Worker                    id=${device.name}
95*cf78ab8cSAndroid Build Coastguard Worker                    color=${rainbow[idx % rainbow.length]}
96*cf78ab8cSAndroid Build Coastguard Worker                    size="30px"
97*cf78ab8cSAndroid Build Coastguard Worker                    style="opacity:0.5;"
98*cf78ab8cSAndroid Build Coastguard Worker                    role="listitem"
99*cf78ab8cSAndroid Build Coastguard Worker                    tabindex="0"
100*cf78ab8cSAndroid Build Coastguard Worker                    aria-label="${device.name} in Device Legends"
101*cf78ab8cSAndroid Build Coastguard Worker                  ></ns-cube-sprite
102*cf78ab8cSAndroid Build Coastguard Worker                  >${device.name} ` :
103*cf78ab8cSAndroid Build Coastguard Worker                    this.checkBle(device) ?
104*cf78ab8cSAndroid Build Coastguard Worker                    html`<ns-device-dragzone action="move">
105*cf78ab8cSAndroid Build Coastguard Worker                      <ns-pyramid-sprite
106*cf78ab8cSAndroid Build Coastguard Worker                        id=${device.name}
107*cf78ab8cSAndroid Build Coastguard Worker                        color=${rainbow[idx % rainbow.length]}
108*cf78ab8cSAndroid Build Coastguard Worker                        size="30px"
109*cf78ab8cSAndroid Build Coastguard Worker                        role="listitem"
110*cf78ab8cSAndroid Build Coastguard Worker                        tabindex="0"
111*cf78ab8cSAndroid Build Coastguard Worker                        aria-label="${device.name} in Device Legends"
112*cf78ab8cSAndroid Build Coastguard Worker                      ></ns-pyramid-sprite> </ns-device-dragzone
113*cf78ab8cSAndroid Build Coastguard Worker                    >${device.name}` :
114*cf78ab8cSAndroid Build Coastguard Worker                    html`<ns-device-dragzone action="move">
115*cf78ab8cSAndroid Build Coastguard Worker                  <ns-cube-sprite
116*cf78ab8cSAndroid Build Coastguard Worker                    id=${device.name}
117*cf78ab8cSAndroid Build Coastguard Worker                    color=${rainbow[idx % rainbow.length]}
118*cf78ab8cSAndroid Build Coastguard Worker                    size="30px"
119*cf78ab8cSAndroid Build Coastguard Worker                    role="listitem"
120*cf78ab8cSAndroid Build Coastguard Worker                    tabindex="0"
121*cf78ab8cSAndroid Build Coastguard Worker                    aria-label="${device.name} in Device Legends"
122*cf78ab8cSAndroid Build Coastguard Worker                  ></ns-cube-sprite> </ns-device-dragzone
123*cf78ab8cSAndroid Build Coastguard Worker                >${device.name}`}
124*cf78ab8cSAndroid Build Coastguard Worker            </center>
125*cf78ab8cSAndroid Build Coastguard Worker          </li>
126*cf78ab8cSAndroid Build Coastguard Worker        `)}
127*cf78ab8cSAndroid Build Coastguard Worker      <li>
128*cf78ab8cSAndroid Build Coastguard Worker        <center>
129*cf78ab8cSAndroid Build Coastguard Worker          <ns-pyramid-sprite
130*cf78ab8cSAndroid Build Coastguard Worker            id="1234"
131*cf78ab8cSAndroid Build Coastguard Worker            color=${rainbow[this.deviceData.length % rainbow.length]}
132*cf78ab8cSAndroid Build Coastguard Worker            size="30px"
133*cf78ab8cSAndroid Build Coastguard Worker            style="opacity:0.5;"
134*cf78ab8cSAndroid Build Coastguard Worker            role="listitem"
135*cf78ab8cSAndroid Build Coastguard Worker            tabindex="0"
136*cf78ab8cSAndroid Build Coastguard Worker            aria-label="beacon in Device Legends"
137*cf78ab8cSAndroid Build Coastguard Worker          ></ns-pyramid-sprite
138*cf78ab8cSAndroid Build Coastguard Worker          >beacon
139*cf78ab8cSAndroid Build Coastguard Worker        </center>
140*cf78ab8cSAndroid Build Coastguard Worker      </li>
141*cf78ab8cSAndroid Build Coastguard Worker      <li>
142*cf78ab8cSAndroid Build Coastguard Worker        <center>
143*cf78ab8cSAndroid Build Coastguard Worker          <ns-pyramid-sprite
144*cf78ab8cSAndroid Build Coastguard Worker            id="5678"
145*cf78ab8cSAndroid Build Coastguard Worker            color=${rainbow[(this.deviceData.length + 1) % rainbow.length]}
146*cf78ab8cSAndroid Build Coastguard Worker            size="30px"
147*cf78ab8cSAndroid Build Coastguard Worker            style="opacity:0.5;"
148*cf78ab8cSAndroid Build Coastguard Worker            role="listitem"
149*cf78ab8cSAndroid Build Coastguard Worker            tabindex="0"
150*cf78ab8cSAndroid Build Coastguard Worker            aria-label="anchor in Device Legends"
151*cf78ab8cSAndroid Build Coastguard Worker          ></ns-pyramid-sprite
152*cf78ab8cSAndroid Build Coastguard Worker          >anchor
153*cf78ab8cSAndroid Build Coastguard Worker        </center>
154*cf78ab8cSAndroid Build Coastguard Worker      </li>
155*cf78ab8cSAndroid Build Coastguard Worker    `;
156*cf78ab8cSAndroid Build Coastguard Worker  }
157*cf78ab8cSAndroid Build Coastguard Worker}
158