initial push of android app and bt server. these are used to make a remote usable via phone

This commit is contained in:
Elias Quinn 2025-06-30 07:53:58 +01:00
parent 9e5b7a6999
commit 654af164ab
2009 changed files with 102252 additions and 2084 deletions

Binary file not shown.

View File

@ -1,7 +1,20 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\",
"Documents": [],
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{1185F325-8505-4867-B209-0108417748CD}|ShadowStream\\ShadowStream.csproj|c:\\users\\bib\\desktop\\vpr\\pull from pc\\mediaverwaltung\\shadowstream\\views\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{1185F325-8505-4867-B209-0108417748CD}|ShadowStream\\ShadowStream.csproj|solutionrelative:shadowstream\\views\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{456AD46A-AA0A-48B6-BD27-BBF45C714912}|NotVPR_SideProjecktForVpr_FreeTime\\NotVPR_SideProjecktForVpr_FreeTime.csproj|c:\\users\\bib\\desktop\\vpr\\pull from pc\\mediaverwaltung\\notvpr_sideprojecktforvpr_freetime\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{456AD46A-AA0A-48B6-BD27-BBF45C714912}|NotVPR_SideProjecktForVpr_FreeTime\\NotVPR_SideProjecktForVpr_FreeTime.csproj|solutionrelative:notvpr_sideprojecktforvpr_freetime\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{456AD46A-AA0A-48B6-BD27-BBF45C714912}|NotVPR_SideProjecktForVpr_FreeTime\\NotVPR_SideProjecktForVpr_FreeTime.csproj|c:\\users\\bib\\desktop\\vpr\\pull from pc\\mediaverwaltung\\notvpr_sideprojecktforvpr_freetime\\bluetoothserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{456AD46A-AA0A-48B6-BD27-BBF45C714912}|NotVPR_SideProjecktForVpr_FreeTime\\NotVPR_SideProjecktForVpr_FreeTime.csproj|solutionrelative:notvpr_sideprojecktforvpr_freetime\\bluetoothserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
@ -9,8 +22,12 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": -1,
"SelectedChildIndex": 5,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c64b9c2-e352-428e-a56d-0ace190b99a6}"
@ -18,6 +35,45 @@
{
"$type": "Bookmark",
"Name": "ST:0:0:{40ea2e6b-2121-4bb8-a43e-c83c04b51041}"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\NotVPR_SideProjecktForVpr_FreeTime\\Program.cs",
"RelativeDocumentMoniker": "NotVPR_SideProjecktForVpr_FreeTime\\Program.cs",
"ToolTip": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\NotVPR_SideProjecktForVpr_FreeTime\\Program.cs",
"RelativeToolTip": "NotVPR_SideProjecktForVpr_FreeTime\\Program.cs",
"ViewState": "AgIAAAoAAAAAAAAAAAAgwAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-06-27T09:07:44.889Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "BluetoothServer.cs",
"DocumentMoniker": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\NotVPR_SideProjecktForVpr_FreeTime\\BluetoothServer.cs",
"RelativeDocumentMoniker": "NotVPR_SideProjecktForVpr_FreeTime\\BluetoothServer.cs",
"ToolTip": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\NotVPR_SideProjecktForVpr_FreeTime\\BluetoothServer.cs",
"RelativeToolTip": "NotVPR_SideProjecktForVpr_FreeTime\\BluetoothServer.cs",
"ViewState": "AgIAAA4AAAAAAAAAAAAQwCEAAAAqAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-06-27T09:07:11.204Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "MainWindow.xaml.cs",
"DocumentMoniker": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\ShadowStream\\Views\\MainWindow.xaml.cs",
"RelativeDocumentMoniker": "ShadowStream\\Views\\MainWindow.xaml.cs",
"ToolTip": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\ShadowStream\\Views\\MainWindow.xaml.cs*",
"RelativeToolTip": "ShadowStream\\Views\\MainWindow.xaml.cs*",
"ViewState": "AgIAAE8DAAAAAAAAAAAqwFEDAAAoAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-06-27T08:59:32.664Z",
"EditorCaption": ""
}
]
}

View File

@ -1,7 +1,20 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\",
"Documents": [],
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{1185F325-8505-4867-B209-0108417748CD}|ShadowStream\\ShadowStream.csproj|c:\\users\\bib\\desktop\\vpr\\pull from pc\\mediaverwaltung\\shadowstream\\views\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{1185F325-8505-4867-B209-0108417748CD}|ShadowStream\\ShadowStream.csproj|solutionrelative:shadowstream\\views\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{456AD46A-AA0A-48B6-BD27-BBF45C714912}|NotVPR_SideProjecktForVpr_FreeTime\\NotVPR_SideProjecktForVpr_FreeTime.csproj|c:\\users\\bib\\desktop\\vpr\\pull from pc\\mediaverwaltung\\notvpr_sideprojecktforvpr_freetime\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{456AD46A-AA0A-48B6-BD27-BBF45C714912}|NotVPR_SideProjecktForVpr_FreeTime\\NotVPR_SideProjecktForVpr_FreeTime.csproj|solutionrelative:notvpr_sideprojecktforvpr_freetime\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{456AD46A-AA0A-48B6-BD27-BBF45C714912}|NotVPR_SideProjecktForVpr_FreeTime\\NotVPR_SideProjecktForVpr_FreeTime.csproj|c:\\users\\bib\\desktop\\vpr\\pull from pc\\mediaverwaltung\\notvpr_sideprojecktforvpr_freetime\\bluetoothserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{456AD46A-AA0A-48B6-BD27-BBF45C714912}|NotVPR_SideProjecktForVpr_FreeTime\\NotVPR_SideProjecktForVpr_FreeTime.csproj|solutionrelative:notvpr_sideprojecktforvpr_freetime\\bluetoothserver.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
@ -9,8 +22,12 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": -1,
"SelectedChildIndex": 5,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{3ae79031-e1bc-11d0-8f78-00a0c9110057}"
},
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c64b9c2-e352-428e-a56d-0ace190b99a6}"
@ -18,6 +35,45 @@
{
"$type": "Bookmark",
"Name": "ST:0:0:{40ea2e6b-2121-4bb8-a43e-c83c04b51041}"
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\NotVPR_SideProjecktForVpr_FreeTime\\Program.cs",
"RelativeDocumentMoniker": "NotVPR_SideProjecktForVpr_FreeTime\\Program.cs",
"ToolTip": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\NotVPR_SideProjecktForVpr_FreeTime\\Program.cs",
"RelativeToolTip": "NotVPR_SideProjecktForVpr_FreeTime\\Program.cs",
"ViewState": "AgIAAAoAAAAAAAAAAAAgwAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-06-27T09:07:44.889Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "BluetoothServer.cs",
"DocumentMoniker": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\NotVPR_SideProjecktForVpr_FreeTime\\BluetoothServer.cs",
"RelativeDocumentMoniker": "NotVPR_SideProjecktForVpr_FreeTime\\BluetoothServer.cs",
"ToolTip": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\NotVPR_SideProjecktForVpr_FreeTime\\BluetoothServer.cs",
"RelativeToolTip": "NotVPR_SideProjecktForVpr_FreeTime\\BluetoothServer.cs",
"ViewState": "AgIAAA4AAAAAAAAAAAAQwCEAAAAqAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-06-27T09:07:11.204Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "MainWindow.xaml.cs",
"DocumentMoniker": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\ShadowStream\\Views\\MainWindow.xaml.cs",
"RelativeDocumentMoniker": "ShadowStream\\Views\\MainWindow.xaml.cs",
"ToolTip": "C:\\Users\\bib\\Desktop\\vpr\\pull from pc\\mediaverwaltung\\ShadowStream\\Views\\MainWindow.xaml.cs",
"RelativeToolTip": "ShadowStream\\Views\\MainWindow.xaml.cs",
"ViewState": "AgIAAE8DAAAAAAAAAAAqwFEDAAAoAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-06-27T08:59:32.664Z",
"EditorCaption": ""
}
]
}

12
NotVPR_Remote/App.xaml Normal file
View File

@ -0,0 +1,12 @@
<?xml version = "1.0" encoding = "UTF-8" ?>
<Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:NotVPR_Remote"
x:Class="NotVPR_Remote.App">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>

12
NotVPR_Remote/App.xaml.cs Normal file
View File

@ -0,0 +1,12 @@
namespace NotVPR_Remote
{
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new AppShell();
}
}
}

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Shell
x:Class="NotVPR_Remote.AppShell"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:NotVPR_Remote"
Shell.FlyoutBehavior="Disabled"
Title="NotVPR_Remote">
<ShellContent
Title="Home"
ContentTemplate="{DataTemplate local:MainPage}"
Route="MainPage" />
</Shell>

View File

@ -0,0 +1,10 @@
namespace NotVPR_Remote
{
public partial class AppShell : Shell
{
public AppShell()
{
InitializeComponent();
}
}
}

107
NotVPR_Remote/MainPage.xaml Normal file
View File

@ -0,0 +1,107 @@
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="NotVPR_Remote.MainPage"
Title="Bluetooth Remote"
BackgroundColor="Black">
<VerticalStackLayout Padding="20" Spacing="30" HorizontalOptions="Center">
<Label x:Name="StatusLabel" Text="Select Paired Device" TextColor="White" />
<Picker x:Name="DevicePicker" Title="Select Device" TextColor="White" BackgroundColor="Black" />
<Button Text="Connect" TextColor="White" BackgroundColor="Black" Clicked="OnConnectClicked" />
<!-- D-pad Grid -->
<Grid RowSpacing="10" ColumnSpacing="10" HorizontalOptions="Center">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<!-- Up -->
<RowDefinition Height="Auto" />
<!-- Main row: Left2 to Right2 -->
<RowDefinition Height="Auto" />
<!-- Down -->
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<!-- Left2 -->
<ColumnDefinition Width="Auto" />
<!-- Left1 -->
<ColumnDefinition Width="Auto" />
<!-- Center -->
<ColumnDefinition Width="Auto" />
<!-- Right1 -->
<ColumnDefinition Width="Auto" />
<!-- Right2 -->
</Grid.ColumnDefinitions>
<!-- Up -->
<Button Text="↑" FontSize="32"
TextColor="White" BackgroundColor="Black"
Clicked="OnButtonClicked"
Grid.Row="0" Grid.Column="2" />
<!-- Left2 -->
<Button Text="⇚" FontSize="32"
TextColor="White" BackgroundColor="Black"
Clicked="OnButtonClicked"
Grid.Row="1" Grid.Column="0" />
<!-- Left1 -->
<Button Text="←" FontSize="32"
TextColor="White" BackgroundColor="Black"
Clicked="OnButtonClicked"
Grid.Row="1" Grid.Column="1" />
<!-- Center -->
<Button Text="●" FontSize="32"
TextColor="White" BackgroundColor="Black"
Clicked="OnButtonClicked"
Grid.Row="1" Grid.Column="2" />
<!-- Right1 -->
<Button Text="→" FontSize="32"
TextColor="White" BackgroundColor="Black"
Clicked="OnButtonClicked"
Grid.Row="1" Grid.Column="3" />
<!-- Right2 -->
<Button Text="⇛" FontSize="32"
TextColor="White" BackgroundColor="Black"
Clicked="OnButtonClicked"
Grid.Row="1" Grid.Column="4" />
<!-- Down -->
<Button Text="↓" FontSize="32"
TextColor="White" BackgroundColor="Black"
Clicked="OnButtonClicked"
Grid.Row="2" Grid.Column="2" />
<!-- Additional controls on bottom row -->
<Button Text="Home" TextColor="White" BackgroundColor="Black" Clicked="OnButtonClicked" Grid.Row="2" Grid.Column="0" />
<Button Text="Mute" TextColor="White" BackgroundColor="Black" Clicked="OnButtonClicked" Grid.Row="2" Grid.Column="4" />
<!-- Volume controls on top row -->
<Button Text="Vol -" TextColor="White" BackgroundColor="Black" Clicked="OnButtonClicked" Grid.Row="0" Grid.Column="0" />
<Button Text="Vol +" TextColor="White" BackgroundColor="Black" Clicked="OnButtonClicked" Grid.Row="0" Grid.Column="4" />
</Grid>
<Grid HeightRequest="20">
<!-- Background progress bar -->
<ProgressBar x:Name="PlaybackProgress"
Progress="0.5"
VerticalOptions="Fill"
HorizontalOptions="Fill"
ProgressColor="Red" />
<!-- Foreground interactive slider -->
<Slider x:Name="PlaybackSlider"
Minimum="0"
Maximum="1"
Value="0.5"
ThumbColor="White"
MaximumTrackColor="Transparent"
MinimumTrackColor="Transparent"
VerticalOptions="Fill"
HorizontalOptions="Fill"
ValueChanged="PlaybackSlider_ValueChanged"/>
</Grid>
</VerticalStackLayout>
</ContentPage>

View File

@ -0,0 +1,207 @@
using Android.Bluetooth;
using Android.Content;
using Android.OS;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Maui.Controls;
namespace NotVPR_Remote;
public partial class MainPage : ContentPage
{
BluetoothAdapter _adapter;
IList<BluetoothDevice> _pairedDevices;
BluetoothSocket _socket;
Stream _outputStream;
Stream _inputStream;
CancellationTokenSource _receiveCts;
long lastTimeSent = 300;
public MainPage()
{
InitializeComponent();
_adapter = BluetoothAdapter.DefaultAdapter;
if (_adapter == null || !_adapter.IsEnabled)
{
DisplayAlert("Bluetooth Error", "Bluetooth is disabled or not available on this device.", "OK");
return;
}
LoadPairedDevices();
}
void LoadPairedDevices()
{
DevicePicker.Items.Clear();
_pairedDevices = new List<BluetoothDevice>();
var paired = _adapter.BondedDevices;
foreach (var device in paired)
{
_pairedDevices.Add(device);
DevicePicker.Items.Add(device.Name);
}
if (_pairedDevices.Count > 0)
DevicePicker.SelectedIndex = 0;
else
DevicePicker.Title = "No paired devices found";
}
async void OnConnectClicked(object sender, EventArgs e)
{
if (DevicePicker.SelectedIndex == -1)
{
await DisplayAlert("Error", "Select a device first", "OK");
return;
}
var device = _pairedDevices[DevicePicker.SelectedIndex];
var sppUuid = Java.Util.UUID.FromString("00001101-0000-1000-8000-00805F9B34FB");
try
{
_socket?.Close();
_socket = device.CreateRfcommSocketToServiceRecord(sppUuid);
await Task.Run(() => _socket.Connect());
_outputStream = _socket.OutputStream;
_inputStream = _socket.InputStream;
_receiveCts = new CancellationTokenSource();
StartListeningForMessages(_receiveCts.Token);
if (_socket.IsConnected)
{
var stream = _socket.OutputStream;
var data = Encoding.UTF8.GetBytes("Hello\n");
await stream.WriteAsync(data, 0, data.Length);
await stream.FlushAsync();
}
StatusLabel.Text = $"Connected to {device.Name}";
}
catch (Exception ex)
{
await DisplayAlert("Connection Error", ex.Message, "OK");
StatusLabel.Text = "Connection failed";
}
}
async void OnButtonClicked(object sender, EventArgs e)
{
if (_socket == null || !_socket.IsConnected || _outputStream == null)
{
await DisplayAlert("Error", "Not connected to any device.", "OK");
return;
}
var button = (Button)sender;
string message = button.Text switch
{
"↑" => "NAV_UP",
"↓" => "NAV_DOWN",
"←" => "NAV_LEFT",
"→" => "NAV_RIGHT",
"⇚" => "-EP",
"⇛" => "+EP",
"●" => "SPACE",
"Home" => "HOME",
"Mute" => "MUTE",
"Vol -" => "VOLUME_DOWN",
"Vol +" => "VOLUME_UP",
_ => "UNKNOWN"
};
try
{
byte[] data = Encoding.UTF8.GetBytes(message + "\n");
await _outputStream.WriteAsync(data, 0, data.Length);
}
catch (Exception ex)
{
await DisplayAlert("Send Error", ex.Message, "OK");
}
}
private void PlaybackSlider_ValueChanged(object sender, ValueChangedEventArgs e)
{
PlaybackProgress.Progress = PlaybackSlider.Value;
string message = "Time:" + PlaybackSlider.Value.ToString();
try
{
if (lastTimeSent < PlaybackSlider.Value + 2 || lastTimeSent > PlaybackSlider.Value - 2)
{
byte[] data = Encoding.UTF8.GetBytes(message + "\n");
_outputStream.WriteAsync(data, 0, data.Length);
lastTimeSent = (long)PlaybackSlider.Value;
}
}
catch (Exception ex)
{
Console.WriteLine($"Slider Send Error: {ex.Message}");
}
}
void StartListeningForMessages(CancellationToken token)
{
Task.Run(async () =>
{
byte[] buffer = new byte[1024];
try
{
while (!token.IsCancellationRequested)
{
int bytesRead = await _inputStream.ReadAsync(buffer, 0, buffer.Length, token);
if (bytesRead > 0)
{
string receivedMessage = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine($"Received: {receivedMessage}");
MainThread.BeginInvokeOnMainThread(() =>
{
StatusLabel.Text = $"Received: {receivedMessage}";
// TODO: Handle message as needed
});
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Receive error: {ex.Message}");
}
}, token);
}
protected override void OnDisappearing()
{
base.OnDisappearing();
_receiveCts?.Cancel();
_inputStream?.Close();
_outputStream?.Close();
_socket?.Close();
}
void OnDisconnectClicked(object sender, EventArgs e)
{
_receiveCts?.Cancel();
_inputStream?.Close();
_outputStream?.Close();
_socket?.Close();
StatusLabel.Text = "Disconnected";
}
}

View File

@ -0,0 +1,26 @@
using Microsoft.Maui;
using Microsoft.Maui.Hosting;
using Microsoft.Extensions.Logging;
namespace NotVPR_Remote
{
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder()
.UseMauiApp<App>()
.ConfigureFonts(fonts => fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"));
builder.Logging.AddDebug();
builder.ConfigureFonts(fonts =>
{
fonts.AddFont("NotoSansSymbols-Regular.ttf", "SymbolsFont");
});
return builder.Build();
}
}
}

View File

@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-android</TargetFramework>
<UseMaui>true</UseMaui>
<OutputType>Exe</OutputType>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<AndroidManifest>Platforms/Android/AndroidManifest.xml</AndroidManifest>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="InTheHand.Net.Bluetooth" Version="4.2.1" />
<PackageReference Include="Microsoft.Maui.Controls" Version="8.0.100" />
<MauiImage Remove="Resources\Images\dotnet_bot.png" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
<PackageReference Include="Plugin.BLE" Version="3.1.0" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<SelectedDevice>pixel_7_-_api_34</SelectedDevice>
<SelectedPlatformGroup>PhysicalDevice</SelectedPlatformGroup>
<ActiveDebugProfile>Samsung SM-A528B</ActiveDebugProfile>
<DefaultDevice>pixel_7_-_api_34</DefaultDevice>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebuggerFlavor>ProjectDebugger</DebuggerFlavor>
</PropertyGroup>
<ItemGroup>
<None Update="App.xaml">
<SubType>Designer</SubType>
</None>
<None Update="AppShell.xaml">
<SubType>Designer</SubType>
</None>
<None Update="MainPage.xaml">
<SubType>Designer</SubType>
</None>
</ItemGroup>
</Project>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yourcompany.shadowstreamremote"
android:versionCode="1"
android:versionName="V0.1">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation"/>
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application android:allowBackup="true"
android:supportsRtl="true"
android:label="ShadowStreamRemote">
</application>
</manifest>

View File

@ -0,0 +1,47 @@
using Android.App;
using Android.Content.PM;
using Android.OS;
using Android;
using AndroidX.Core.App;
using AndroidX.Core.Content;
namespace NotVPR_Remote
{
[Activity(Theme = "@style/Maui.SplashTheme", MainLauncher = true, LaunchMode = LaunchMode.SingleTop,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode |
ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize | ConfigChanges.Density)]
public class MainActivity : MauiAppCompatActivity
{
const int RequestBluetoothPermissionsId = 1000;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
if (Build.VERSION.SdkInt >= BuildVersionCodes.S)
{
string[] permissions =
{
Manifest.Permission.BluetoothScan,
Manifest.Permission.BluetoothConnect,
Manifest.Permission.AccessFineLocation // Needed for scanning on some devices
};
if (!HasPermissions(permissions))
{
ActivityCompat.RequestPermissions(this, permissions, RequestBluetoothPermissionsId);
}
}
}
bool HasPermissions(string[] permissions)
{
foreach (var permission in permissions)
{
if (ContextCompat.CheckSelfPermission(this, permission) != Permission.Granted)
return false;
}
return true;
}
}
}

View File

@ -0,0 +1,16 @@
using Android.App;
using Android.Runtime;
namespace NotVPR_Remote
{
[Application]
public class MainApplication : MauiApplication
{
public MainApplication(IntPtr handle, JniHandleOwnership ownership)
: base(handle, ownership)
{
}
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
}

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#512BD4</color>
<color name="colorPrimaryDark">#2B0B98</color>
<color name="colorAccent">#2B0B98</color>
</resources>

View File

@ -0,0 +1,8 @@
{
"profiles": {
"Windows Machine": {
"commandName": "MsixPackage",
"nativeDebugging": false
}
}
}

View File

@ -0,0 +1,33 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
{
"name": "Microsoft.Android",
"version": ""
}
],
"configProperties": {
"Microsoft.Extensions.DependencyInjection.VerifyOpenGenericServiceTrimmability": true,
"System.AggressiveAttributeTrimming": true,
"System.Diagnostics.Tracing.EventSource.IsSupported": false,
"System.Globalization.Invariant": false,
"System.Net.Http.EnableActivityPropagation": false,
"System.Net.Http.UseNativeHttpHandler": true,
"System.Reflection.NullabilityInfoContext.IsSupported": false,
"System.Runtime.InteropServices.BuiltInComInterop.IsSupported": false,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
"System.StartupHookProvider.IsSupported": false,
"System.Text.Encoding.EnableUnsafeUTF7Encoding": false,
"System.Text.Json.JsonSerializer.IsReflectionEnabledByDefault": true,
"Xamarin.Android.Net.UseNegotiateAuthentication": false,
"Switch.System.Reflection.ForceInterpretedInvoke": true,
"Microsoft.Extensions.DependencyInjection.DisableDynamicEngine": true,
"System.Diagnostics.Metrics.Meter.IsSupported": false
}
}
}

View File

@ -0,0 +1,8 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>NotVPR_Remote</name>
</assembly>
<members>
</members>
</doc>

View File

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

View File

@ -0,0 +1,24 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("NotVPR_Remote")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9e5b7a699991d66b1f07c6058463142577bc2133")]
[assembly: System.Reflection.AssemblyProductAttribute("NotVPR_Remote")]
[assembly: System.Reflection.AssemblyTitleAttribute("NotVPR_Remote")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Android34.0")]
[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Android21.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@ -0,0 +1 @@
389d97ac6b0bd0c04307fe7beb5132ca2a66041ffcca34e10bfb4b1eba02f72c

View File

@ -0,0 +1,35 @@
is_global = true
build_property.EnableAotAnalyzer =
build_property.EnableSingleFileAnalyzer = true
build_property.EnableTrimAnalyzer = false
build_property.IncludeAllContentForSelfExtract =
build_property.TargetFramework = net8.0-android
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization = false
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = NotVPR_Remote
build_property.ProjectDir = C:\Users\bib\Desktop\vpr\pull from pc\mediaverwaltung\NotVPR_Remote\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
[C:/Users/bib/Desktop/vpr/pull from pc/mediaverwaltung/NotVPR_Remote/App.xaml]
build_metadata.AdditionalFiles.GenKind = Xaml
build_metadata.AdditionalFiles.ManifestResourceName = NotVPR_Remote.App.xaml
build_metadata.AdditionalFiles.TargetPath = App.xaml
build_metadata.AdditionalFiles.RelativePath = App.xaml
[C:/Users/bib/Desktop/vpr/pull from pc/mediaverwaltung/NotVPR_Remote/AppShell.xaml]
build_metadata.AdditionalFiles.GenKind = Xaml
build_metadata.AdditionalFiles.ManifestResourceName = NotVPR_Remote.AppShell.xaml
build_metadata.AdditionalFiles.TargetPath = AppShell.xaml
build_metadata.AdditionalFiles.RelativePath = AppShell.xaml
[C:/Users/bib/Desktop/vpr/pull from pc/mediaverwaltung/NotVPR_Remote/MainPage.xaml]
build_metadata.AdditionalFiles.GenKind = Xaml
build_metadata.AdditionalFiles.ManifestResourceName = NotVPR_Remote.MainPage.xaml
build_metadata.AdditionalFiles.TargetPath = MainPage.xaml
build_metadata.AdditionalFiles.RelativePath = MainPage.xaml

View File

@ -0,0 +1,26 @@
// <auto-generated/>
global using global::Microsoft.Extensions.DependencyInjection;
global using global::Microsoft.Maui;
global using global::Microsoft.Maui.Accessibility;
global using global::Microsoft.Maui.ApplicationModel;
global using global::Microsoft.Maui.ApplicationModel.Communication;
global using global::Microsoft.Maui.ApplicationModel.DataTransfer;
global using global::Microsoft.Maui.Authentication;
global using global::Microsoft.Maui.Controls;
global using global::Microsoft.Maui.Controls.Hosting;
global using global::Microsoft.Maui.Controls.Xaml;
global using global::Microsoft.Maui.Devices;
global using global::Microsoft.Maui.Devices.Sensors;
global using global::Microsoft.Maui.Dispatching;
global using global::Microsoft.Maui.Graphics;
global using global::Microsoft.Maui.Hosting;
global using global::Microsoft.Maui.Media;
global using global::Microsoft.Maui.Networking;
global using global::Microsoft.Maui.Storage;
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,13 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool. DO NOT EDIT
// </auto-generated>
//------------------------------------------------------------------------------
using System;
namespace NotVPR_Remote {
#pragma warning disable IDE0002
public partial class Resource : _Microsoft.Android.Resource.Designer.ResourceConstant {
}
#pragma warning restore IDE0002
}

View File

@ -0,0 +1,31 @@
aotassemblies=false
androidaddkeepalives=
androidaotmode=interpreter
androidembedprofilers=
androidenableprofiledaot=
androiddextool=d8
androidlinktool=
androidlinkresources=
androidpackageformat=apk
embedassembliesintoapk=false
androidlinkmode=none
androidlinkskip=
androidsdkbuildtoolsversion=34.0.0
androidsdkpath=c:\program files (x86)\android\android-sdk\
androidndkpath=
javasdkpath=c:\program files (x86)\android\openjdk\jdk-17.0.14\
androidsequencepointsmode=none
androidnetsdkversion=34.0.154
monosymbolarchive=false
androiduselatestplatformsdk=false
targetframeworkversion=v8.0
androidcreatepackageperabi=
androidgeneratejnimarshalmethods=false
os=windows_nt
androidincludedebugsymbols=true
androidpackagenamingpolicy=lowercasecrc64
_nugetassetsfilehash=439bfb51003068df5ec1b3d26e41ef7eab09ccd3179d118b5a4b76df224ce5fd
typemapkind=strings-asm
androidmanifestplaceholders=
projectfullpath=c:\users\bib\desktop\vpr\pull from pc\mediaverwaltung\notvpr_remote\notvpr_remote.csproj
androidusedesignerassembly=true

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
03D8CB64644BB559

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2019 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="androidx.annotation.experimental" >
<uses-sdk android:minSdkVersion="14" />
</manifest>

View File

@ -0,0 +1,5 @@
aarFormatVersion=1.0
aarMetadataVersion=1.0
minCompileSdk=33
minCompileSdkExtension=0
minAndroidGradlePluginVersion=1.0.0

View File

@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>

View File

@ -0,0 +1 @@
12910E24D53F039B

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="androidx.core" >
<uses-sdk android:minSdkVersion="14" />
<permission
android:name="${applicationId}.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"
android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION" />
<application android:appComponentFactory="androidx.core.app.CoreComponentFactory" />
</manifest>

View File

@ -0,0 +1,5 @@
aarFormatVersion=1.0
aarMetadataVersion=1.0
minCompileSdk=33
minCompileSdkExtension=0
minAndroidGradlePluginVersion=1.0.0

View File

@ -0,0 +1,202 @@
int attr alpha 0x0
int attr font 0x0
int attr fontProviderAuthority 0x0
int attr fontProviderCerts 0x0
int attr fontProviderFetchStrategy 0x0
int attr fontProviderFetchTimeout 0x0
int attr fontProviderPackage 0x0
int attr fontProviderQuery 0x0
int attr fontProviderSystemFontFamily 0x0
int attr fontStyle 0x0
int attr fontVariationSettings 0x0
int attr fontWeight 0x0
int attr lStar 0x0
int attr nestedScrollViewStyle 0x0
int attr queryPatterns 0x0
int attr shortcutMatchRequired 0x0
int attr ttcIndex 0x0
int color androidx_core_ripple_material_light 0x0
int color androidx_core_secondary_text_default_material_light 0x0
int color call_notification_answer_color 0x0
int color call_notification_decline_color 0x0
int color notification_action_color_filter 0x0
int color notification_icon_bg_color 0x0
int dimen compat_button_inset_horizontal_material 0x0
int dimen compat_button_inset_vertical_material 0x0
int dimen compat_button_padding_horizontal_material 0x0
int dimen compat_button_padding_vertical_material 0x0
int dimen compat_control_corner_material 0x0
int dimen compat_notification_large_icon_max_height 0x0
int dimen compat_notification_large_icon_max_width 0x0
int dimen notification_action_icon_size 0x0
int dimen notification_action_text_size 0x0
int dimen notification_big_circle_margin 0x0
int dimen notification_content_margin_start 0x0
int dimen notification_large_icon_height 0x0
int dimen notification_large_icon_width 0x0
int dimen notification_main_column_padding_top 0x0
int dimen notification_media_narrow_margin 0x0
int dimen notification_right_icon_size 0x0
int dimen notification_right_side_padding_top 0x0
int dimen notification_small_icon_background_padding 0x0
int dimen notification_small_icon_size_as_large 0x0
int dimen notification_subtext_size 0x0
int dimen notification_top_pad 0x0
int dimen notification_top_pad_large_text 0x0
int drawable ic_call_answer 0x0
int drawable ic_call_answer_low 0x0
int drawable ic_call_answer_video 0x0
int drawable ic_call_answer_video_low 0x0
int drawable ic_call_decline 0x0
int drawable ic_call_decline_low 0x0
int drawable notification_action_background 0x0
int drawable notification_bg 0x0
int drawable notification_bg_low 0x0
int drawable notification_bg_low_normal 0x0
int drawable notification_bg_low_pressed 0x0
int drawable notification_bg_normal 0x0
int drawable notification_bg_normal_pressed 0x0
int drawable notification_icon_background 0x0
int drawable notification_template_icon_bg 0x0
int drawable notification_template_icon_low_bg 0x0
int drawable notification_tile_bg 0x0
int drawable notify_panel_notification_icon_bg 0x0
int id accessibility_action_clickable_span 0x0
int id accessibility_custom_action_0 0x0
int id accessibility_custom_action_1 0x0
int id accessibility_custom_action_10 0x0
int id accessibility_custom_action_11 0x0
int id accessibility_custom_action_12 0x0
int id accessibility_custom_action_13 0x0
int id accessibility_custom_action_14 0x0
int id accessibility_custom_action_15 0x0
int id accessibility_custom_action_16 0x0
int id accessibility_custom_action_17 0x0
int id accessibility_custom_action_18 0x0
int id accessibility_custom_action_19 0x0
int id accessibility_custom_action_2 0x0
int id accessibility_custom_action_20 0x0
int id accessibility_custom_action_21 0x0
int id accessibility_custom_action_22 0x0
int id accessibility_custom_action_23 0x0
int id accessibility_custom_action_24 0x0
int id accessibility_custom_action_25 0x0
int id accessibility_custom_action_26 0x0
int id accessibility_custom_action_27 0x0
int id accessibility_custom_action_28 0x0
int id accessibility_custom_action_29 0x0
int id accessibility_custom_action_3 0x0
int id accessibility_custom_action_30 0x0
int id accessibility_custom_action_31 0x0
int id accessibility_custom_action_4 0x0
int id accessibility_custom_action_5 0x0
int id accessibility_custom_action_6 0x0
int id accessibility_custom_action_7 0x0
int id accessibility_custom_action_8 0x0
int id accessibility_custom_action_9 0x0
int id action_container 0x0
int id action_divider 0x0
int id action_image 0x0
int id action_text 0x0
int id actions 0x0
int id async 0x0
int id blocking 0x0
int id chronometer 0x0
int id dialog_button 0x0
int id forever 0x0
int id icon 0x0
int id icon_group 0x0
int id info 0x0
int id italic 0x0
int id line1 0x0
int id line3 0x0
int id normal 0x0
int id notification_background 0x0
int id notification_main_column 0x0
int id notification_main_column_container 0x0
int id right_icon 0x0
int id right_side 0x0
int id tag_accessibility_actions 0x0
int id tag_accessibility_clickable_spans 0x0
int id tag_accessibility_heading 0x0
int id tag_accessibility_pane_title 0x0
int id tag_on_apply_window_listener 0x0
int id tag_on_receive_content_listener 0x0
int id tag_on_receive_content_mime_types 0x0
int id tag_screen_reader_focusable 0x0
int id tag_state_description 0x0
int id tag_transition_group 0x0
int id tag_unhandled_key_event_manager 0x0
int id tag_unhandled_key_listeners 0x0
int id tag_window_insets_animation_callback 0x0
int id text 0x0
int id text2 0x0
int id time 0x0
int id title 0x0
int integer status_bar_notification_info_maxnum 0x0
int layout custom_dialog 0x0
int layout notification_action 0x0
int layout notification_action_tombstone 0x0
int layout notification_template_custom_big 0x0
int layout notification_template_icon_group 0x0
int layout notification_template_part_chronometer 0x0
int layout notification_template_part_time 0x0
int string call_notification_answer_action 0x0
int string call_notification_answer_video_action 0x0
int string call_notification_decline_action 0x0
int string call_notification_hang_up_action 0x0
int string call_notification_incoming_text 0x0
int string call_notification_ongoing_text 0x0
int string call_notification_screening_text 0x0
int string status_bar_notification_info_overflow 0x0
int style TextAppearance_Compat_Notification 0x0
int style TextAppearance_Compat_Notification_Info 0x0
int style TextAppearance_Compat_Notification_Line2 0x0
int style TextAppearance_Compat_Notification_Time 0x0
int style TextAppearance_Compat_Notification_Title 0x0
int style Widget_Compat_NotificationActionContainer 0x0
int style Widget_Compat_NotificationActionText 0x0
int[] styleable Capability { 0x0, 0x0 }
int styleable Capability_queryPatterns 0
int styleable Capability_shortcutMatchRequired 1
int[] styleable ColorStateListItem { 0x0, 0x101031f, 0x10101a5, 0x1010647, 0x0 }
int styleable ColorStateListItem_alpha 0
int styleable ColorStateListItem_android_alpha 1
int styleable ColorStateListItem_android_color 2
int styleable ColorStateListItem_android_lStar 3
int styleable ColorStateListItem_lStar 4
int[] styleable FontFamily { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }
int styleable FontFamily_fontProviderAuthority 0
int styleable FontFamily_fontProviderCerts 1
int styleable FontFamily_fontProviderFetchStrategy 2
int styleable FontFamily_fontProviderFetchTimeout 3
int styleable FontFamily_fontProviderPackage 4
int styleable FontFamily_fontProviderQuery 5
int styleable FontFamily_fontProviderSystemFontFamily 6
int[] styleable FontFamilyFont { 0x1010532, 0x101053f, 0x1010570, 0x1010533, 0x101056f, 0x0, 0x0, 0x0, 0x0, 0x0 }
int styleable FontFamilyFont_android_font 0
int styleable FontFamilyFont_android_fontStyle 1
int styleable FontFamilyFont_android_fontVariationSettings 2
int styleable FontFamilyFont_android_fontWeight 3
int styleable FontFamilyFont_android_ttcIndex 4
int styleable FontFamilyFont_font 5
int styleable FontFamilyFont_fontStyle 6
int styleable FontFamilyFont_fontVariationSettings 7
int styleable FontFamilyFont_fontWeight 8
int styleable FontFamilyFont_ttcIndex 9
int[] styleable GradientColor { 0x101020b, 0x10101a2, 0x10101a3, 0x101019e, 0x1010512, 0x1010513, 0x10101a4, 0x101019d, 0x1010510, 0x1010511, 0x1010201, 0x10101a1 }
int styleable GradientColor_android_centerColor 0
int styleable GradientColor_android_centerX 1
int styleable GradientColor_android_centerY 2
int styleable GradientColor_android_endColor 3
int styleable GradientColor_android_endX 4
int styleable GradientColor_android_endY 5
int styleable GradientColor_android_gradientRadius 6
int styleable GradientColor_android_startColor 7
int styleable GradientColor_android_startX 8
int styleable GradientColor_android_startY 9
int styleable GradientColor_android_tileMode 10
int styleable GradientColor_android_type 11
int[] styleable GradientColorItem { 0x10101a5, 0x1010514 }
int styleable GradientColorItem_android_color 0
int styleable GradientColorItem_android_offset 1

View File

@ -0,0 +1,19 @@
/**
* Copyright 2015, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.support.v4.os;
@JavaOnlyStableParcelable parcelable ResultReceiver;

View File

@ -0,0 +1,16 @@
# Never inline methods, but allow shrinking and obfuscation.
-keepclassmembernames,allowobfuscation,allowshrinking class androidx.core.view.ViewCompat$Api* {
<methods>;
}
-keepclassmembernames,allowobfuscation,allowshrinking class androidx.core.view.WindowInsetsCompat$*Impl* {
<methods>;
}
-keepclassmembernames,allowobfuscation,allowshrinking class androidx.core.app.NotificationCompat$*$Api*Impl {
<methods>;
}
-keepclassmembernames,allowobfuscation,allowshrinking class androidx.core.os.UserHandleCompat$Api*Impl {
<methods>;
}
-keepclassmembernames,allowobfuscation,allowshrinking class androidx.core.widget.EdgeEffectCompat$Api*Impl {
<methods>;
}

View File

@ -0,0 +1,21 @@
style TextAppearance_Compat_Notification
style TextAppearance_Compat_Notification_Info
style TextAppearance_Compat_Notification_Line2
style TextAppearance_Compat_Notification_Time
style TextAppearance_Compat_Notification_Title
attr alpha
attr font
attr fontProviderAuthority
attr fontProviderCerts
attr fontProviderFetchStrategy
attr fontProviderFetchTimeout
attr fontProviderPackage
attr fontProviderQuery
attr fontProviderSystemFontFamily
attr fontStyle
attr fontVariationSettings
attr fontWeight
attr lStar
attr queryPatterns
attr shortcutMatchRequired
attr ttcIndex

View File

@ -0,0 +1,36 @@
<!--
Copyright (C) 2022 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:targetApi="21"
android:width="24dp"
android:height="24dp"
android:viewportWidth="20"
android:viewportHeight="20"
android:tint="?android:attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="#FF000000"
android:pathData="M6.0168,3.3333L6.5751,5.575L4.6668,7.4916C3.8751,5.7166 3.6001,4.1916
3.4834,3.3333H6.0168ZM14.4251,13.375L16.6668,13.9416V16.5166C15.8084,16.4 14.2668,16.125
12.4834,15.325L14.4251,13.375ZM6.3418,1.6666H2.5668C2.0918,1.6666 1.7001,2.0666
1.7334,2.5416C2.4834,12.875 11.7668,18.275 17.5168,18.275C17.9668,18.275 18.3334,17.9
18.3334,17.4416V13.6166C18.3334,13.0416 17.9418,12.5416
17.3834,12.4083L14.5918,11.7083C14.2251,11.6166 13.7584,11.6833
13.4084,12.0333L10.9251,14.5166C8.6751,13.1833 6.7918,11.3
5.4668,9.0416L7.9168,6.5916C8.2251,6.2833 8.3501,5.8333
8.2418,5.4083L7.5584,2.6166C7.4168,2.0583 6.9168,1.6666 6.3418,1.6666Z"/>
</vector>

View File

@ -0,0 +1,33 @@
<!--
Copyright (C) 2022 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="20"
android:viewportHeight="20"
android:autoMirrored="true">
<path
android:fillColor="#FF000000"
android:pathData="M6.0168,3.3333L6.5751,5.575L4.6668,7.4916C3.8751,5.7166 3.6001,4.1916
3.4834,3.3333H6.0168ZM14.4251,13.375L16.6668,13.9416V16.5166C15.8084,16.4 14.2668,16.125
12.4834,15.325L14.4251,13.375ZM6.3418,1.6666H2.5668C2.0918,1.6666 1.7001,2.0666
1.7334,2.5416C2.4834,12.875 11.7668,18.275 17.5168,18.275C17.9668,18.275 18.3334,17.9
18.3334,17.4416V13.6166C18.3334,13.0416 17.9418,12.5416
17.3834,12.4083L14.5918,11.7083C14.2251,11.6166 13.7584,11.6833
13.4084,12.0333L10.9251,14.5166C8.6751,13.1833 6.7918,11.3
5.4668,9.0416L7.9168,6.5916C8.2251,6.2833 8.3501,5.8333
8.2418,5.4083L7.5584,2.6166C7.4168,2.0583 6.9168,1.6666 6.3418,1.6666Z"/>
</vector>

View File

@ -0,0 +1,29 @@
<!--
Copyright (C) 2022 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:targetApi="21"
android:width="24dp"
android:height="24dp"
android:viewportWidth="20"
android:viewportHeight="20"
android:tint="?android:attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="#FF000000"
android:pathData="M15,8v8H5V8h10m1,-2H4c-0.55,0 -1,0.45 -1,1v10c0,0.55 0.45,1 1,1h12c0.55,0
1,-0.45 1,-1v-3.5l4,4v-11l-4,4V7c0,-0.55 -0.45,-1 -1,-1z"/>
</vector>

View File

@ -0,0 +1,26 @@
<!--
Copyright (C) 2022 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="20"
android:viewportHeight="20"
android:autoMirrored="true">
<path
android:fillColor="#FF000000"
android:pathData="M15,8v8H5V8h10m1,-2H4c-0.55,0 -1,0.45 -1,1v10c0,0.55 0.45,1 1,1h12c0.55,0
1,-0.45 1,-1v-3.5l4,4v-11l-4,4V7c0,-0.55 -0.45,-1 -1,-1z"/>
</vector>

View File

@ -0,0 +1,38 @@
<!--
Copyright (C) 2022 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:targetApi="21"
android:width="24dp"
android:height="24dp"
android:viewportWidth="20"
android:viewportHeight="20"
android:tint="?android:attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="#FF000000"
android:pathData="M5.2834,9.3083V10.7833L4.1084,11.4916L3.1334,10.5166C3.8084,10.0416
4.5251,9.6333 5.2834,9.3083ZM14.75,9.325C15.4917,9.65 16.2084,10.05
16.875,10.525L15.925,11.475L14.75,10.7666V9.325ZM9.975,6.6666C6.8584,6.6666 3.725,7.7333
1.1751,9.9416C0.8084,10.2583 0.9667,10.7166 1.1501,10.9L3.2917,13.0416C3.4917,13.2333
3.7417,13.3333 4.0001,13.3333C4.175,13.3333 4.35,13.2833
4.5084,13.1916L6.4667,12.0166C6.725,11.8583 6.95,11.5583 6.95,11.1666V8.3833C7.95,8.125
8.975,8 10.0084,8C11.0417,8 12.075,8.1333 13.0834,8.3916V11.1416C13.0834,11.4916
13.2667,11.8166 13.5667,11.9916L15.525,13.1666C15.6834,13.2583 15.8584,13.3083
16.0334,13.3083C16.2917,13.3083 16.5417,13.2083
16.7334,13.0166L18.85,10.9C19.1167,10.6333 19.1167,10.1916 18.825,9.9416C16.3334,7.7833
13.1667,6.6666 9.975,6.6666Z"/>
</vector>

View File

@ -0,0 +1,35 @@
<!--
Copyright (C) 2022 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="20"
android:viewportHeight="20"
android:autoMirrored="true">
<path
android:fillColor="#FF000000"
android:pathData="M5.2834,9.3083V10.7833L4.1084,11.4916L3.1334,10.5166C3.8084,10.0416
4.5251,9.6333 5.2834,9.3083ZM14.75,9.325C15.4917,9.65 16.2084,10.05
16.875,10.525L15.925,11.475L14.75,10.7666V9.325ZM9.975,6.6666C6.8584,6.6666 3.725,7.7333
1.1751,9.9416C0.8084,10.2583 0.9667,10.7166 1.1501,10.9L3.2917,13.0416C3.4917,13.2333
3.7417,13.3333 4.0001,13.3333C4.175,13.3333 4.35,13.2833
4.5084,13.1916L6.4667,12.0166C6.725,11.8583 6.95,11.5583 6.95,11.1666V8.3833C7.95,8.125
8.975,8 10.0084,8C11.0417,8 12.075,8.1333 13.0834,8.3916V11.1416C13.0834,11.4916
13.2667,11.8166 13.5667,11.9916L15.525,13.1666C15.6834,13.2583 15.8584,13.3083
16.0334,13.3083C16.2917,13.3083 16.5417,13.2083
16.7334,13.0166L18.85,10.9C19.1167,10.6333 19.1167,10.1916 18.825,9.9416C16.3334,7.7833
13.1667,6.6666 9.975,6.6666Z"/>
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

Some files were not shown because too many files have changed in this diff Show More