Initial commit: Roku web remote server + Android app
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,2 @@
|
||||
#Tue May 26 23:56:06 EDT 2026
|
||||
gradle.version=8.5
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,53 @@
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("org.jetbrains.kotlin.android")
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "com.utumno.tvremote"
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "com.utumno.tvremote"
|
||||
minSdk = 24
|
||||
targetSdk = 34
|
||||
versionCode = 1
|
||||
versionName = "1.0.0"
|
||||
|
||||
// Allow cleartext for local WireGuard network
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
isMinifyEnabled = false
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
viewBinding = true
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("androidx.core:core-ktx:1.12.0")
|
||||
implementation("androidx.appcompat:appcompat:1.6.1")
|
||||
implementation("androidx.activity:activity-ktx:1.8.2")
|
||||
implementation("androidx.webkit:webkit:1.10.0")
|
||||
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
|
||||
implementation("androidx.coordinatorlayout:coordinatorlayout:1.2.0")
|
||||
implementation("com.google.android.material:material:1.11.0")
|
||||
}
|
||||
+137
@@ -0,0 +1,137 @@
|
||||
// Generated by view binder compiler. Do not edit!
|
||||
package com.utumno.tvremote.databinding;
|
||||
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.webkit.WebView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import androidx.viewbinding.ViewBinding;
|
||||
import androidx.viewbinding.ViewBindings;
|
||||
import com.google.android.material.button.MaterialButton;
|
||||
import com.utumno.tvremote.R;
|
||||
import java.lang.NullPointerException;
|
||||
import java.lang.Override;
|
||||
import java.lang.String;
|
||||
|
||||
public final class ActivityMainBinding implements ViewBinding {
|
||||
@NonNull
|
||||
private final CoordinatorLayout rootView;
|
||||
|
||||
@NonNull
|
||||
public final TextView errorMessage;
|
||||
|
||||
@NonNull
|
||||
public final TextView errorTitle;
|
||||
|
||||
@NonNull
|
||||
public final LinearLayout errorView;
|
||||
|
||||
@NonNull
|
||||
public final ProgressBar progressBar;
|
||||
|
||||
@NonNull
|
||||
public final MaterialButton retryButton;
|
||||
|
||||
@NonNull
|
||||
public final SwipeRefreshLayout swipeRefresh;
|
||||
|
||||
@NonNull
|
||||
public final WebView webview;
|
||||
|
||||
private ActivityMainBinding(@NonNull CoordinatorLayout rootView, @NonNull TextView errorMessage,
|
||||
@NonNull TextView errorTitle, @NonNull LinearLayout errorView,
|
||||
@NonNull ProgressBar progressBar, @NonNull MaterialButton retryButton,
|
||||
@NonNull SwipeRefreshLayout swipeRefresh, @NonNull WebView webview) {
|
||||
this.rootView = rootView;
|
||||
this.errorMessage = errorMessage;
|
||||
this.errorTitle = errorTitle;
|
||||
this.errorView = errorView;
|
||||
this.progressBar = progressBar;
|
||||
this.retryButton = retryButton;
|
||||
this.swipeRefresh = swipeRefresh;
|
||||
this.webview = webview;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NonNull
|
||||
public CoordinatorLayout getRoot() {
|
||||
return rootView;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater) {
|
||||
return inflate(inflater, null, false);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater,
|
||||
@Nullable ViewGroup parent, boolean attachToParent) {
|
||||
View root = inflater.inflate(R.layout.activity_main, parent, false);
|
||||
if (attachToParent) {
|
||||
parent.addView(root);
|
||||
}
|
||||
return bind(root);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static ActivityMainBinding bind(@NonNull View rootView) {
|
||||
// The body of this method is generated in a way you would not otherwise write.
|
||||
// This is done to optimize the compiled bytecode for size and performance.
|
||||
int id;
|
||||
missingId: {
|
||||
id = R.id.error_message;
|
||||
TextView errorMessage = ViewBindings.findChildViewById(rootView, id);
|
||||
if (errorMessage == null) {
|
||||
break missingId;
|
||||
}
|
||||
|
||||
id = R.id.error_title;
|
||||
TextView errorTitle = ViewBindings.findChildViewById(rootView, id);
|
||||
if (errorTitle == null) {
|
||||
break missingId;
|
||||
}
|
||||
|
||||
id = R.id.error_view;
|
||||
LinearLayout errorView = ViewBindings.findChildViewById(rootView, id);
|
||||
if (errorView == null) {
|
||||
break missingId;
|
||||
}
|
||||
|
||||
id = R.id.progress_bar;
|
||||
ProgressBar progressBar = ViewBindings.findChildViewById(rootView, id);
|
||||
if (progressBar == null) {
|
||||
break missingId;
|
||||
}
|
||||
|
||||
id = R.id.retry_button;
|
||||
MaterialButton retryButton = ViewBindings.findChildViewById(rootView, id);
|
||||
if (retryButton == null) {
|
||||
break missingId;
|
||||
}
|
||||
|
||||
id = R.id.swipe_refresh;
|
||||
SwipeRefreshLayout swipeRefresh = ViewBindings.findChildViewById(rootView, id);
|
||||
if (swipeRefresh == null) {
|
||||
break missingId;
|
||||
}
|
||||
|
||||
id = R.id.webview;
|
||||
WebView webview = ViewBindings.findChildViewById(rootView, id);
|
||||
if (webview == null) {
|
||||
break missingId;
|
||||
}
|
||||
|
||||
return new ActivityMainBinding((CoordinatorLayout) rootView, errorMessage, errorTitle,
|
||||
errorView, progressBar, retryButton, swipeRefresh, webview);
|
||||
}
|
||||
String missingId = rootView.getResources().getResourceName(id);
|
||||
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
|
||||
}
|
||||
}
|
||||
+1
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -0,0 +1,2 @@
|
||||
#- File Locator -
|
||||
listingFile=../../../outputs/apk/debug/output-metadata.json
|
||||
@@ -0,0 +1,2 @@
|
||||
appMetadataVersion=1.1
|
||||
androidGradlePluginVersion=8.2.2
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"version": 3,
|
||||
"artifactType": {
|
||||
"type": "COMPATIBLE_SCREEN_MANIFEST",
|
||||
"kind": "Directory"
|
||||
},
|
||||
"applicationId": "com.utumno.tvremote",
|
||||
"variantName": "debug",
|
||||
"elements": []
|
||||
}
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_main" modulePackage="com.utumno.tvremote" filePath="app/src/main/res/layout/activity_main.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="androidx.coordinatorlayout.widget.CoordinatorLayout"><Targets><Target tag="layout/activity_main_0" view="androidx.coordinatorlayout.widget.CoordinatorLayout"><Expressions/><location startLine="1" startOffset="0" endLine="103" endOffset="53"/></Target><Target id="@+id/swipe_refresh" view="androidx.swiperefreshlayout.widget.SwipeRefreshLayout"><Expressions/><location startLine="9" startOffset="4" endLine="37" endOffset="59"/></Target><Target id="@+id/webview" view="WebView"><Expressions/><location startLine="19" startOffset="12" endLine="23" endOffset="43"/></Target><Target id="@+id/progress_bar" view="ProgressBar"><Expressions/><location startLine="25" startOffset="12" endLine="33" endOffset="35"/></Target><Target id="@+id/error_view" view="LinearLayout"><Expressions/><location startLine="40" startOffset="4" endLine="101" endOffset="18"/></Target><Target id="@+id/error_title" view="TextView"><Expressions/><location startLine="67" startOffset="8" endLine="75" endOffset="38"/></Target><Target id="@+id/error_message" view="TextView"><Expressions/><location startLine="77" startOffset="8" endLine="87" endOffset="38"/></Target><Target id="@+id/retry_button" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="89" startOffset="8" endLine="99" endOffset="49"/></Target></Targets></Layout>
|
||||
+1
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_main" modulePackage="com.utumno.tvremote" filePath="app/src/main/res/layout/activity_main.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="androidx.coordinatorlayout.widget.CoordinatorLayout"><Targets><Target tag="layout/activity_main_0" view="androidx.coordinatorlayout.widget.CoordinatorLayout"><Expressions/><location startLine="1" startOffset="0" endLine="103" endOffset="53"/></Target><Target id="@+id/swipe_refresh" view="androidx.swiperefreshlayout.widget.SwipeRefreshLayout"><Expressions/><location startLine="9" startOffset="4" endLine="37" endOffset="59"/></Target><Target id="@+id/webview" view="WebView"><Expressions/><location startLine="19" startOffset="12" endLine="23" endOffset="43"/></Target><Target id="@+id/progress_bar" view="ProgressBar"><Expressions/><location startLine="25" startOffset="12" endLine="33" endOffset="35"/></Target><Target id="@+id/error_view" view="LinearLayout"><Expressions/><location startLine="40" startOffset="4" endLine="101" endOffset="18"/></Target><Target id="@+id/error_title" view="TextView"><Expressions/><location startLine="67" startOffset="8" endLine="75" endOffset="38"/></Target><Target id="@+id/error_message" view="TextView"><Expressions/><location startLine="77" startOffset="8" endLine="87" endOffset="38"/></Target><Target id="@+id/retry_button" view="com.google.android.material.button.MaterialButton"><Expressions/><location startLine="89" startOffset="8" endLine="99" endOffset="49"/></Target></Targets></Layout>
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
16
|
||||
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user