Files
Portal-Camera/portal-capability-test/res/layout/activity_main.xml
T
2026-09-13 21:12:44 -07:00

452 lines
22 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/pc_bg"
android:orientation="vertical"
android:padding="20dp">
<!-- Header -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingBottom="16dp">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="PortalCam"
android:textColor="@color/pc_text"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Camera Streaming"
android:textColor="@color/pc_text_secondary"
android:textSize="13sp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/header_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="start"
android:orientation="horizontal">
<FrameLayout
android:layout_width="16dp"
android:layout_height="match_parent">
<View
android:id="@+id/header_streaming_dot"
android:layout_width="8dp"
android:layout_height="8dp"
android:layout_gravity="top|start"
android:layout_marginTop="4dp"
android:background="@drawable/pc_dot_green"
android:visibility="invisible" />
</FrameLayout>
<LinearLayout
android:id="@+id/header_status_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/header_streaming"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Idle"
android:textColor="@color/pc_text_secondary"
android:textSize="13sp"
android:textStyle="bold" />
<TextView
android:id="@+id/header_ready"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ready"
android:textColor="@color/pc_text_secondary"
android:textSize="13sp" />
</LinearLayout>
</LinearLayout>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginStart="28dp"
android:layout_marginEnd="28dp"
android:background="@color/pc_separator" />
</LinearLayout>
<TextView
android:id="@+id/header_clock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:lineSpacingExtra="2dp"
android:textColor="@color/pc_text_secondary"
android:textSize="13sp" />
<TextView
android:id="@+id/header_overflow"
android:layout_width="44dp"
android:layout_height="44dp"
android:layout_marginStart="48dp"
android:background="@drawable/pc_btn_secondary"
android:focusable="true"
android:fontFamily="@font/lucide"
android:gravity="center"
android:includeFontPadding="false"
android:textColor="@color/pc_text"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>
<!-- Top cards row — height hugs mode list; card padding 14dp all sides. -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!-- Mode -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
android:layout_weight="1"
android:background="@drawable/pc_card"
android:orientation="vertical"
android:padding="14dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="Mode"
android:textColor="@color/pc_text"
android:textSize="15sp"
android:textStyle="bold" />
<LinearLayout
android:id="@+id/modes_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout>
<!-- Mode Controls -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="12dp"
android:layout_weight="1.5"
android:background="@drawable/pc_card"
android:orientation="vertical"
android:padding="14dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="Mode Controls"
android:textColor="@color/pc_text"
android:textSize="15sp"
android:textStyle="bold" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<LinearLayout
android:id="@+id/controls_empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/controls_empty_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/lucide"
android:includeFontPadding="false"
android:textColor="@color/pc_text_dim"
android:textSize="28sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:text="No mode parameters"
android:textColor="@color/pc_text_secondary"
android:textSize="15sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="4dp"
android:text="This mode doesn't have any configurable settings."
android:textColor="@color/pc_text_dim"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/controls_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone" />
</FrameLayout>
</LinearLayout>
<!-- Live Stats -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.5"
android:background="@drawable/pc_card"
android:orientation="vertical"
android:padding="14dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="Live Stats"
android:textColor="@color/pc_text"
android:textSize="15sp"
android:textStyle="bold" />
<!-- Same rhythm as Mode: 52dp rows + 8dp gaps; row inset = 2× mode button L/R padding. -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="20dp"
android:paddingEnd="20dp">
<LinearLayout
android:id="@+id/stat_video_row"
android:layout_width="match_parent"
android:layout_height="52dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView android:id="@+id/stat_video_icon" android:layout_width="36dp" android:layout_height="36dp" android:fontFamily="@font/lucide" android:gravity="center" android:includeFontPadding="false" android:textColor="@color/pc_text_secondary" android:textSize="36sp" />
<TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:paddingStart="12dp" android:text="Active video" android:textColor="@color/pc_text_secondary" android:textSize="18sp" />
<TextView android:id="@+id/stat_video" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0" android:textColor="@color/pc_text_secondary" android:textSize="18sp" android:textStyle="bold" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="8dp">
<include
layout="@layout/pc_separator_h"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_gravity="center_vertical" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="52dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView android:id="@+id/stat_audio_icon" android:layout_width="36dp" android:layout_height="36dp" android:fontFamily="@font/lucide" android:gravity="center" android:includeFontPadding="false" android:textColor="@color/pc_text_secondary" android:textSize="36sp" />
<TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:paddingStart="12dp" android:text="Active audio" android:textColor="@color/pc_text_secondary" android:textSize="18sp" />
<TextView android:id="@+id/stat_audio" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0" android:textColor="@color/pc_text_secondary" android:textSize="18sp" android:textStyle="bold" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="8dp">
<include
layout="@layout/pc_separator_h"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_gravity="center_vertical" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="52dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView android:id="@+id/stat_video_bw_icon" android:layout_width="36dp" android:layout_height="36dp" android:fontFamily="@font/lucide" android:gravity="center" android:includeFontPadding="false" android:textColor="@color/pc_text_secondary" android:textSize="36sp" />
<TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:paddingStart="12dp" android:text="Uplink video" android:textColor="@color/pc_text_secondary" android:textSize="18sp" />
<TextView android:id="@+id/stat_video_bw" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0 bit/s" android:textColor="@color/pc_text_secondary" android:textSize="18sp" android:textStyle="bold" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="8dp">
<include
layout="@layout/pc_separator_h"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_gravity="center_vertical" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="52dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView android:id="@+id/stat_audio_bw_icon" android:layout_width="36dp" android:layout_height="36dp" android:fontFamily="@font/lucide" android:gravity="center" android:includeFontPadding="false" android:textColor="@color/pc_text_secondary" android:textSize="36sp" />
<TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:paddingStart="12dp" android:text="Uplink audio" android:textColor="@color/pc_text_secondary" android:textSize="18sp" />
<TextView android:id="@+id/stat_audio_bw" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="0 bit/s" android:textColor="@color/pc_text_secondary" android:textSize="18sp" android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<!-- Clients card -->
<LinearLayout
android:id="@+id/clients_host"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="12dp"
android:layout_weight="1"
android:background="@drawable/pc_card"
android:orientation="vertical"
android:padding="14dp">
<LinearLayout
android:id="@+id/clients_pane"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingBottom="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Clients"
android:textColor="@color/pc_text"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@+id/clients_badge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:background="@drawable/pc_badge"
android:paddingStart="8dp"
android:paddingTop="2dp"
android:paddingEnd="8dp"
android:paddingBottom="2dp"
android:text="0"
android:textColor="@color/pc_text"
android:textSize="12sp" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<LinearLayout
android:id="@+id/btn_revoke_all"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:background="@drawable/pc_btn_danger"
android:focusable="true"
android:gravity="center_vertical"
android:nextFocusRight="@id/btn_revoke_all"
android:orientation="horizontal"
android:paddingStart="14dp"
android:paddingEnd="14dp">
<TextView
android:id="@+id/btn_revoke_all_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/lucide"
android:includeFontPadding="false"
android:textColor="@color/pc_red"
android:textSize="14sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="8dp"
android:text="Revoke all"
android:textColor="@color/pc_red"
android:textSize="13sp" />
</LinearLayout>
</LinearLayout>
<ScrollView
android:id="@+id/clients_scroll"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:focusable="false">
<LinearLayout
android:id="@+id/clients_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</ScrollView>
</LinearLayout>
<LinearLayout
android:id="@+id/client_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:id="@+id/detail_body"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:textColor="@color/pc_text"
android:textSize="16sp" />
<Button
android:id="@+id/btn_revoke_one"
android:layout_width="wrap_content"
android:layout_height="44dp"
android:background="@drawable/pc_btn_danger"
android:focusable="true"
android:paddingStart="18dp"
android:paddingEnd="18dp"
android:text="Revoke client"
android:textColor="@color/pc_red" />
</LinearLayout>
<LinearLayout
android:id="@+id/log_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:text="Logs"
android:textColor="@color/pc_text"
android:textSize="15sp"
android:textStyle="bold" />
<ScrollView
android:id="@+id/log_scroll"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:focusable="true">
<TextView
android:id="@+id/log_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/pc_text_secondary"
android:textSize="13sp" />
</ScrollView>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/guided_step_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>