Initial RelayTV Android release

This commit is contained in:
2026-02-23 14:07:47 -06:00
commit eca2d5933d
35 changed files with 1282 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/relaytv_surface">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:title="@string/app_name"
app:titleTextColor="@android:color/white"
app:menu="@menu/main_menu" />
</com.google.android.material.appbar.AppBarLayout>
<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="RelayTV Server"
android:textSize="22sp"
android:textStyle="bold"
android:paddingBottom="10dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Base URL (HTTP or HTTPS). Example: http://nuc.lan:8787"
android:textSize="14sp"
android:paddingBottom="8dp"/>
<EditText
android:id="@+id/editBaseUrl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="http://nuc.lan:8787"
android:inputType="textUri"
android:singleLine="true"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="14dp">
<Button
android:id="@+id/btnSave"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Save"/>
<Space
android:layout_width="12dp"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btnDetect"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Auto-detect"/>
</LinearLayout>
<TextView
android:id="@+id/txtStatus"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:textSize="13sp"
android:paddingTop="10dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Tip: Share a link from BravePipe → RelayTV. It sends to /smart in the background and shows a notification (tap it to open UI)."
android:textSize="13sp"
android:paddingTop="16dp"/>
</LinearLayout>
</ScrollView>
@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<ListView
android:id="@+id/listServers"
android:layout_width="match_parent"
android:layout_height="260dp"
android:choiceMode="singleChoice" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingTop="12dp">
<com.google.android.material.button.MaterialButton
android:id="@+id/btnAdd"
style="@style/Widget.Material3.Button.TonalButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/add_server"
android:maxLines="1"
android:ellipsize="end" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnEdit"
style="@style/Widget.Material3.Button.TonalButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="10dp"
android:text="@string/edit_server"
android:maxLines="1"
android:ellipsize="end" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btnRemove"
style="@style/Widget.Material3.Button.TonalButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="10dp"
android:text="@string/remove_server"
android:maxLines="1"
android:ellipsize="end" />
</LinearLayout>
</LinearLayout>
+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_servers"
android:title="@string/servers"
android:icon="@android:drawable/ic_menu_manage"
android:showAsAction="ifRoom" />
<item
android:id="@+id/action_reload"
android:title="Reload"
android:icon="@android:drawable/ic_popup_sync"
android:showAsAction="ifRoom" />
</menu>
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- RelayTV brand (dark mode optimized) -->
<color name="relaytv_surface">#0F1216</color> <!-- deep charcoal -->
<color name="relaytv_primary">#2F7BFF</color> <!-- electric blue -->
<color name="relaytv_on_primary">#FFFFFF</color>
<color name="relaytv_secondary">#26D07C</color> <!-- neon green accent -->
<color name="relaytv_on_secondary">#00140B</color>
</resources>
+11
View File
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">RelayTV</string>
<string name="servers">Servers</string>
<string name="add_server">Add server</string>
<string name="edit_server">Edit server</string>
<string name="remove_server">Remove server</string>
<string name="select_server">Select RelayTV server</string>
<string name="server_name">Name</string>
<string name="server_url">Base URL</string>
</resources>
+21
View File
@@ -0,0 +1,21 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.RelayTV" parent="Theme.Material3.DayNight.NoActionBar">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="colorPrimary">@color/relaytv_primary</item>
<item name="colorOnPrimary">@color/relaytv_on_primary</item>
<item name="colorSecondary">@color/relaytv_secondary</item>
<item name="colorOnSecondary">@color/relaytv_on_secondary</item>
<item name="android:navigationBarColor">@color/relaytv_surface</item>
<item name="android:colorBackground">@color/relaytv_surface</item>
</style>
<style name="Theme.RelayTV.NoActionBar" parent="Theme.Material3.DayNight.NoActionBar" />
<style name="Theme.RelayTV.Share" parent="Theme.Material3.DayNight.NoActionBar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackground">@android:color/transparent</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>